[package]
name = "epkg"
description = "epkg package manager"
version = "0.2.6"
edition = "2021" # PROJECT HARD REQUIREMENT: keep all crates edition to <=2021, in order to build in openeuler 24.03

[features]
libkrun = ["dep:libkrun"]
# Windows VM: libkrun devices serve virtual /init.krun (early kernel/bootstrap debug). Without this, use init=/usr/bin/init (epkg guest, vsock/vm_daemon).
embedded_init = ["libkrun", "libkrun/embedded_init"]

# https://github.com/johnthagen/min-sized-rust
[profile.release]
lto = true
opt-level = "z"  # Optimize for size.
# codegen-units = 1
# strip = true
# panic = "abort"

[patch.crates-io]
# Fork: git/vm-memory (libkrun/third_party/vm-memory kept unused to avoid rebase noise).
vm-memory = { path = "git/vm-memory" }

[dependencies]
hex = { version = "0.4", default-features = false, features = ["alloc"] }
quick-xml = { version = "0.39", default-features = false }
clap = { version = "4.5", features = ["std", "usage", "help", "error-context"], default-features = false }
ureq = { version = "3.1", default-features = false, features = ["rustls-no-provider", "rustls-webpki-roots", "gzip"] }
rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"] }
serde = { version = "1.0", features = ["derive"], default-features = false }
serde_json = { version = "1.0", features = ["std"], default-features = false }
serde_yaml = { version = "0.9", default-features = false }
walkdir = { version = "2.5", default-features = false }
tar = { version = "0.4", default-features = false }
zstd = { version = "0.13", default-features = false }
flate2 = { version = "1.1", features = ["zlib-rs"], default-features = false }
liblzma = { version = "0.4", features = ["parallel"], default-features = false }
bzip2 = { version = "=0.5.2", default-features = true }
zip = { version = "7.2", default-features = false }
sha1 = { version = "0.10", default-features = false }
sha2 = { version = "0.10", default-features = false }
base32 = { version = "0.5.1", default-features = false }
base64 = { version = "0.22", default-features = false }
glob = { version = "0.3", default-features = false }
dirs = { version = "6.0", default-features = false }
indicatif = { version = "0.18", default-features = false }
crossbeam-channel = { version = "0.5", features = ["std"], default-features = false }
rayon = { version = "1.11", default-features = false }
pathdiff = { version = "0.2.3", default-features = false }
lazy_static = { version = "1.5", default-features = false }
goblin = { version = "0.9", default-features = false, features = ["elf64", "elf32", "endian_fd"] }
regex = { version = "1.12.2", features = ["std", "unicode-perl", "unicode-case"], default-features = false }
memchr = { version = "2.7", default-features = false }
aho-corasick = { version = "1.1", default-features = false }
uuid = { version = "=1.20", features = ["v4"], default-features = false }
log = { version = "0.4", default-features = false }
env_logger = { version = "0.11.8", default-features = false }
color-eyre = { version = "0.6" }
libc = "0.2"
getrandom = { version = "0.3.4", default-features = false }
shlex = "1.3"
# color-eyre = { version = "0.6", features = ["capture-spantrace"], default-features = false }
filetime = "0.2"
ctrlc = "=3.5.1"      # Pin to nix 0.30, avoid duplicate versions
memmap2 = "0.9"
num_cpus = "1.17"
sys-info = "0.9"
tempfile = "=3.24"
rkyv = { version = "0.8", features = ["std", "alloc", "bytecheck"] }
rancor = "0.1"
md-5 = "0.10"
resolvo = { version = "0.10.1", path = "git/resolvo" }
libkrun = { path = "git/libkrun/src/libkrun", optional = true }

# Pin these versions: higher version will need edition 2024
time = { version = "=0.3.44", features = ["formatting", "local-offset", "macros", "parsing"] }
rand = { version = "=0.9", features = ["std", "std_rng"], default-features = false }
# versions 7.0 uses edition 2024, pin to 6.3
versions = "=6.3"
deranged = "=0.5.7"

# Lua is only needed for RPM scriptlets (Linux-only)
[target.'cfg(target_os = "linux")'.dependencies]
mlua = { version = "=0.11.5", features = ["lua54", "send"] }
mlua-sys = { version = "=0.9", features = ["vendored"] }

[target.'cfg(target_os = "linux")'.dependencies.nix]
version = "=0.30.1"
features = ["process", "user", "fs", "signal", "sched", "mount", "dir", "term", "poll", "reboot", "socket", "hostname"]
default-features = false

[target.'cfg(not(target_os = "linux"))'.dependencies.nix]
version = "=0.30.1"
features = ["process", "user", "fs", "signal", "dir", "term", "poll"]
default-features = false

[target.'cfg(unix)'.dependencies.users]
version = "0.11"
default-features = false

# Windows-specific dependencies
[target.'cfg(windows)'.dependencies]
junction = "1.2"
remove_dir_all = "1.0"
# Use static linking for liblzma to avoid missing DLL dependencies
liblzma = { version = "0.4", features = ["parallel", "static"], default-features = false }
# For NTFS Extended Attributes (POSIX permissions support via ntdll.dll)
libloading = "0.8"
# Windows API bindings for NTFS EA operations
windows = { version = "0.58", features = [
    "Win32_Foundation",
    "Win32_Storage_FileSystem",
    "Win32_Security",
    "Win32_System_IO",
    "Win32_System_Pipes",
    "Win32_System_Threading",
] }

# Optional but recommended for better progress bars
[dependencies.console]
version = "0.16"

# AR archive support for Debian packages
[dependencies.ar]
version = "0.9"
default-features = false

# RPM package support
[dependencies.rpm]
path = "git/rpm-rs" # Replaced version = "0.17"
default-features = false
features = ["zstd-compression", "xz-compression"]

# https://docs.rs/color-eyre/latest/color_eyre/#improving-perf-on-debug-builds
[profile.dev.package.backtrace]
opt-level = 3

[build-dependencies]
time = { version = "=0.3.44", features = ["formatting", "local-offset", "macros", "parsing"] }

[dev-dependencies]
tempfile = "=3.24"