[workspace]
resolver = "2"
members = [
  "crates/*",
  "credential/*",
  "benches/benchsuite",
  "benches/capture",
]
exclude = [
  "target/", # exclude bench testing
]

[workspace.package]
rust-version = "1.93"  # MSRV:3
edition = "2024"
license = "MIT OR Apache-2.0"
repository = "https://github.com/rust-lang/cargo"

[workspace.dependencies]
annotate-snippets = { version = "0.12.15", features = ["simd"] }
anstream = "1.0.0"
anstyle = "1.0.14"
anstyle-hyperlink = "1.0.2"
anstyle-progress = "0.1.0"
anyhow = "1.0.102"
async-trait = "0.1.89"
base64 = "0.22.1"
blake3 = "1.8.4"
build-rs = { version = "0.3.5", path = "crates/build-rs" }
cargo = { path = "" }
cargo-credential = { version = "0.4.10", path = "credential/cargo-credential" }
cargo-credential-libsecret = { version = "0.5.8", path = "credential/cargo-credential-libsecret" }
cargo-credential-macos-keychain = { version = "0.4.23", path = "credential/cargo-credential-macos-keychain" }
cargo-credential-wincred = { version = "0.4.23", path = "credential/cargo-credential-wincred" }
cargo-platform = { path = "crates/cargo-platform", version = "0.3.3" }
cargo-test-macro = { version = "0.4.12", path = "crates/cargo-test-macro" }
cargo-test-support = { version = "0.11.3", path = "crates/cargo-test-support" }
cargo-util = { version = "0.2.30", path = "crates/cargo-util" }
cargo-util-schemas = { version = "0.14.1", path = "crates/cargo-util-schemas" }
cargo-util-terminal = { version = "0.1.0", path = "crates/cargo-util-terminal" }
cargo_metadata = "0.23.1"
clap = "4.6.0"
clap_complete = { version = "4.6.0", features = ["unstable-dynamic"] }
color-print = "0.3.7"
core-foundation = { version = "0.10.1", features = ["mac_os_10_7_support"] }
crates-io = { version = "0.41.0", path = "crates/crates-io" }
criterion = { version = "0.8.2", features = ["html_reports"] }
curl = "0.4.49"
curl-sys = "0.4.88"
filetime = "0.2.27"
flate2 = { version = "1.1.9", default-features = false, features = ["zlib-rs"] }
futures = { version = "0.3.32", default-features = false, features = ["std", "executor", "async-await"]}
futures-timer = "3.0.3"
git2 = "0.20.4"
git2-curl = "0.21.0"
# When updating this, also see if `gix-transport` further down needs updating or some auth-related tests will fail.
gix = { version = "0.83.0", default-features = false, features = ["sha1", "progress-tree", "parallel", "dirwalk", "status"] }
gix-transport = "0.57.0"
glob = "0.3.3"
handlebars = { version = "6.4.0", features = ["dir_source"] }
heck = "0.5.0"
hex = "0.4.3"
hmac = "0.13.0"
home = "0.5.12"
http = "1.4.0"
http-auth = { version = "0.1.10", default-features = false }
ignore = "0.4.25"
im-rc = "15.1.0"
indexmap = "2.13.0"
itertools = "0.14.0"
jiff = { version = "0.2.23", default-features = false, features = [ "std" ] }
jobserver = "0.1.34"
libc = "0.2.184"
libgit2-sys = "0.18.3"
libloading = "0.9.0"
memchr = "2.8.0"
memfd = "0.6.5"
miow = "0.6.1"
opener = "0.8.4"
openssl = "0.10.76"
openssl-src = "300.6.0"
os_info = { version = "3.14.0", default-features = false }
pasetors = { version = "0.7.8", features = ["v3", "paserk", "std", "serde"] }
pathdiff = "0.2.3"
portable-atomic = "1.13.1"
percent-encoding = "2.3.2"
proptest = "1.11.0"
pulldown-cmark = { version = "0.13.3", default-features = false, features = ["html"] }
rand = "0.10.1"
regex = "1.12.3"
rusqlite = { version = "0.39.0", features = ["bundled"] }
rustc-hash = "2.1.2"
rustc-stable-hash = "0.1.2"
rustfix = { version = "0.9.7", path = "crates/rustfix" }
same-file = "1.0.6"
schemars = "1.2.1"
security-framework = "3.7.0"
semver = { version = "1.0.27", features = ["serde"] }
serde = "1.0.228"
serde_core = "1.0.228"
serde-untagged = "0.1.9"
serde-value = "0.7.0"
serde_ignored = "0.1.14"
serde_json = "1.0.149"
sha1 = "0.11.0"
sha2 = "0.11.0"
shell-escape = "0.1.5"
supports-hyperlinks = "3.2.0"
supports-unicode = "3.0.0"
snapbox = { version = "1.2.0", features = ["diff", "dir", "term-svg", "regex", "json"] }
tar = { version = "0.4.45", default-features = false }
tempfile = "3.27.0"
thiserror = "2.0.18"
time = { version = "0.3.47", features = ["parsing", "formatting", "serde"] }
toml = { version = "1.1.2", default-features = false }
toml_edit = { version = "0.25.10", features = ["serde"] }
toml_parser = "1.1.2"
toml_writer = "1.1.1"
tracing = { version = "0.1.44", default-features = false, features = ["std"] } # be compatible with rustc_log: https://github.com/rust-lang/rust/blob/e51e98dde6a/compiler/rustc_log/Cargo.toml#L9
tracing-chrome = "0.7.2"
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
unicase = "2.9.0"
unicode-ident = "1.0.24"
unicode-width = "0.2.2"
url = "2.5.8"
varisat = "0.2.2"
walkdir = "2.5.0"
windows-sys = "0.61"
winnow = "1.0.1"

[workspace.lints.rust]
rust_2018_idioms = "warn" # TODO: could this be removed?

[workspace.lints.rustdoc]
private_intra_doc_links = "allow"

[workspace.lints.clippy]
all = { level = "allow", priority = -2 }
correctness = { level = "warn", priority = -1 }
dbg_macro = "warn"
disallowed_methods = "warn"
disallowed_types = "warn"
print_stderr = "warn"
print_stdout = "warn"
self_named_module_files = "warn"

[package]
name = "cargo"
version = "0.98.0"
edition.workspace = true
license.workspace = true
rust-version = "1.95"  # MSRV:1
homepage = "https://doc.rust-lang.org/cargo/index.html"
repository.workspace = true
documentation = "https://docs.rs/cargo"
description = """
Cargo, a package manager for Rust.
"""

[lib]
name = "cargo"
path = "src/cargo/lib.rs"

[dependencies]
anstream.workspace = true
anstyle.workspace = true
anstyle-progress.workspace = true
anyhow.workspace = true
async-trait.workspace = true
base64.workspace = true
blake3.workspace = true
cargo-credential.workspace = true
cargo-platform.workspace = true
cargo-util-schemas.workspace = true
cargo-util-terminal.workspace = true
cargo-util.workspace = true
clap = { workspace = true, features = ["wrap_help"] }
clap_complete.workspace = true
color-print.workspace = true
crates-io.workspace = true
curl = { workspace = true, features = ["http2"] }
curl-sys.workspace = true
filetime.workspace = true
flate2.workspace = true
futures.workspace = true
futures-timer.workspace = true
git2.workspace = true
git2-curl.workspace = true
gix.workspace = true
glob.workspace = true
heck.workspace = true
hex.workspace = true
hmac.workspace = true
home.workspace = true
http.workspace = true
http-auth.workspace = true
ignore.workspace = true
im-rc.workspace = true
indexmap.workspace = true
itertools.workspace = true
jiff = { workspace = true, features = ["serde", "std"] }
jobserver.workspace = true
libgit2-sys.workspace = true
memchr.workspace = true
opener.workspace = true
os_info.workspace = true
pasetors.workspace = true
pathdiff.workspace = true
portable-atomic.workspace = true
rand.workspace = true
regex.workspace = true
rusqlite = { workspace = true, features = ["fallible_uint"] }
rustc-hash.workspace = true
rustc-stable-hash.workspace = true
rustfix.workspace = true
same-file.workspace = true
semver.workspace = true
serde = { workspace = true, features = ["derive"] }
serde-untagged.workspace = true
serde_ignored.workspace = true
serde_json = { workspace = true, features = ["raw_value"] }
sha1.workspace = true
shell-escape.workspace = true
tar.workspace = true
tempfile.workspace = true
thiserror.workspace = true
time.workspace = true
toml = { workspace = true, features = ["std", "serde", "parse", "display", "preserve_order"] }
toml_edit.workspace = true
toml_parser.workspace = true
toml_writer.workspace = true
tracing = { workspace = true, features = ["attributes"] }
tracing-chrome.workspace = true
tracing-subscriber.workspace = true
unicase.workspace = true
unicode-width.workspace = true
unicode-ident.workspace = true
url.workspace = true
walkdir.workspace = true
winnow.workspace = true

[target.'cfg(unix)'.dependencies]
libc.workspace = true

[target.'cfg(target_os = "linux")'.dependencies]
cargo-credential-libsecret.workspace = true

[target.'cfg(target_os = "macos")'.dependencies]
cargo-credential-macos-keychain.workspace = true

[target.'cfg(not(windows))'.dependencies]
openssl = { workspace = true, optional = true }
openssl-src = { workspace = true, optional = true }

[target.'cfg(windows)'.dependencies]
cargo-credential-wincred.workspace = true

[target.'cfg(windows)'.dependencies.windows-sys]
workspace = true
features = [
  "Win32_Foundation",
  "Win32_Security",
  "Win32_Storage_FileSystem",
  "Win32_System_IO",
  "Win32_System_Console",
  "Win32_System_JobObjects",
  "Win32_System_Threading",
]

[dev-dependencies]
annotate-snippets = { workspace = true, features = ["testing-colors"] }
cargo-test-support.workspace = true
gix = { workspace = true, features = ["revision"] }
# When building Cargo for tests, a safety-measure in `gix` needs to be disabled
# to allow sending credentials over HTTP connections.
gix-transport = { workspace = true, features = ["http-client-insecure-credentials"] }
same-file.workspace = true
snapbox.workspace = true

[target.'cfg(target_os = "linux")'.dev-dependencies]
memfd.workspace = true

[build-dependencies]
flate2.workspace = true
tar.workspace = true

[[bin]]
name = "cargo"
test = false
doc = false

[features]
default = ["http-transport-curl"]
vendored-openssl = ["openssl/vendored"]
vendored-libgit2 = ["libgit2-sys/vendored"]
# This is primarily used by rust-lang/rust distributing cargo the executable.
all-static = ['vendored-openssl', 'curl/static-curl', 'curl/force-system-lib-on-osx', 'vendored-libgit2']
# Exactly one of 'http-transport-curl' or 'http-transport-reqwest' must be enabled
# when using Cargo as a library. By default, it is 'http-transport-curl'.
http-transport-curl = ["gix/blocking-http-transport-curl"]
http-transport-reqwest = ["gix/blocking-http-transport-reqwest"]

[lints]
workspace = true
