[workspace]
resolver = "2"
members = ["printf"]

[workspace.package]
# To build revisions that use Corrosion (those before 2024-01), CMake 3.19 and Rustc 1.78 seem to work.
rust-version = "1.70"
edition = "2021"

[profile.release]
overflow-checks = true
lto = true

[package]
name = "fish"
version = "4.0.0-beta.1"
edition.workspace = true
rust-version.workspace = true
default-run = "fish"
# see doc_src/license.rst for details
# don't forget to update COPYING and debian/copyright too
license = "GPL-2.0-only AND LGPL-2.0-or-later AND MIT AND PSF-2.0"
repository = "https://github.com/fish-shell/fish-shell"
homepage = "https://fishshell.com"
readme = "README.rst"

[dependencies]
pcre2 = { git = "https://github.com/fish-shell/rust-pcre2", tag = "0.2.9-utf32", default-features = false, features = [
    "utf32",
] }

bitflags = "2.5.0"
errno = "0.3.0"
lazy_static = "1.4.0"
libc = "0.2.155"
# lru pulls in hashbrown by default, which uses a faster (though less DoS resistant) hashing algo.
# disabling default features uses the stdlib instead, but it doubles the time to rewrite the history
# files as of 22 April 2024.
lru = "0.12.3"
nix = { version = "0.29.0", default-features = false, features = [
    "event",
    "inotify",
    "resource",
    "fs",
] }
num-traits = "0.2.19"
once_cell = "1.19.0"
fish-printf = { path = "./printf", features = ["widestring"] }

# Don't use the "getrandom" feature as it requires "getentropy" which was not
# available on macOS < 10.12. We can enable "getrandom" when we raise the
# minimum supported version to 10.12.
rand = { version = "0.8.5", default-features = false, features = ["small_rng"] }
widestring = "1.1.0"
# We need 0.9.0 specifically for some crash fixes.
terminfo = "0.9.0"
rust-embed = { version = "8.2.0", optional = true }

[target.'cfg(not(target_has_atomic = "64"))'.dependencies]
portable-atomic = { version = "1", default-features = false, features = [
    "fallback",
] }

[dev-dependencies]
serial_test = { version = "1.0.0", default-features = false }

[build-dependencies]
cc = "1.0.94"
rsconf = "0.2.2"

[lib]
crate-type = ["rlib"]
path = "src/lib.rs"

[[bin]]
name = "fish"
path = "src/bin/fish.rs"

[[bin]]
name = "fish_indent"
path = "src/bin/fish_indent.rs"

[[bin]]
name = "fish_key_reader"
path = "src/bin/fish_key_reader.rs"

[features]
default = ["installable"]
benchmark = []
installable = ["dep:rust-embed"]

# The following features are auto-detected by the build-script and should not be enabled manually.
asan = []
tsan = []

[lints]
rust.non_camel_case_types = "allow"
rust.non_upper_case_globals = "allow"
rust.unknown_lints = "allow"
rust.unstable_name_collisions = "allow"
clippy.manual_range_contains = "allow"
clippy.needless_return = "allow"
clippy.needless_lifetimes = "allow"
