[package]
name = "rustpython-vm"
description = "RustPython virtual machine."
include = ["src/**/*.rs", "Cargo.toml", "build.rs", "Lib/**/*.py"]
version.workspace = true
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
repository.workspace = true
license.workspace = true

[features]
default = ["compiler", "wasmbind", "gc", "host_env", "stdio"]
host_env = []
stdio = []
importlib = []
encodings = ["importlib"]
vm-tracing-logging = []
flame-it = ["flame", "flamer"]
freeze-stdlib = ["encodings"]
jit = ["rustpython-jit"]
threading = ["rustpython-common/threading"]
gc = []
compiler = ["parser", "codegen", "rustpython-compiler"]
ast = ["ruff_python_ast", "ruff_text_size"]
codegen = ["rustpython-codegen", "ast"]
parser = ["ast"]
serde = ["dep:serde"]
wasmbind = ["rustpython-common/wasm_js", "chrono/wasmbind", "wasm-bindgen"]

[dependencies]
rustpython-compiler = { workspace = true, optional = true }
rustpython-codegen = { workspace = true, optional = true }
rustpython-common = { workspace = true }
rustpython-derive = { workspace = true }
rustpython-jit = { workspace = true, optional = true }

ruff_python_ast = { workspace = true, optional = true }
ruff_python_parser = { workspace = true }
ruff_text_size = { workspace = true, optional = true }
rustpython-compiler-core = { workspace = true }
rustpython-literal = { workspace = true }
rustpython-sre_engine = { workspace = true }

ascii = { workspace = true }
ahash = { workspace = true }
bitflags = { workspace = true }
bstr = { workspace = true }
cfg-if = { workspace = true }
crossbeam-utils = { workspace = true }
chrono = { workspace = true }
constant_time_eq = { workspace = true }
flame = { workspace = true, optional = true }
getrandom = { workspace = true }
hex = { workspace = true }
indexmap = { workspace = true }
itertools = { workspace = true }
is-macro = { workspace = true }
libc = { workspace = true }
log = { workspace = true }
malachite-bigint = { workspace = true }
num-complex = { workspace = true }
num-integer = { workspace = true }
num-traits = { workspace = true }
num_enum = { workspace = true }
parking_lot = { workspace = true }
paste = { workspace = true }
scoped-tls = { workspace = true }
scopeguard = { workspace = true }
serde = { workspace = true, optional = true }
static_assertions = { workspace = true }
strum = { workspace = true }
strum_macros = { workspace = true }
thiserror = { workspace = true }
thread_local = { workspace = true }
memchr = { workspace = true }

caseless = "0.2.2"
flamer = { version = "0.5", optional = true }
half = "2"
psm = "0.1"
optional = { workspace = true }
result-like = "0.5.0"
timsort = "0.1.2"

## unicode stuff
# TODO: use unic for this; needed for title case:
# https://github.com/RustPython/RustPython/pull/832#discussion_r275428939
unicode-casing = { workspace = true }
# update version all at the same time
unic-ucd-bidi = { workspace = true }
unic-ucd-category = { workspace = true }
unic-ucd-ident = { workspace = true }

[target.'cfg(unix)'.dependencies]
rustix = { workspace = true }
nix = { workspace = true }
exitcode = "1.1.2"
uname = "0.1.1"

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
rustyline = { workspace = true }
which = "8"
errno = "0.3"
widestring = { workspace = true }

[target.'cfg(all(any(target_os = "linux", target_os = "macos", target_os = "windows", target_os = "android"), not(any(target_env = "musl", target_env = "sgx"))))'.dependencies]
libffi = { workspace = true, features = ["system"] }
libloading = "0.9"

[target.'cfg(any(not(target_arch = "wasm32"), target_os = "wasi"))'.dependencies]
num_cpus = "1.17.0"

[target.'cfg(windows)'.dependencies]
junction = { workspace = true }

[target.'cfg(windows)'.dependencies.windows-sys]
workspace = true
features = [
  "Win32_Foundation",
  "Win32_Globalization",
  "Win32_Media_Audio",
  "Win32_Networking_WinSock",
  "Win32_Security",
  "Win32_Security_Authorization",
  "Win32_Storage_FileSystem",
  "Win32_System_Console",
  "Win32_System_Diagnostics_Debug",
  "Win32_System_Environment",
  "Win32_System_IO",
  "Win32_System_Ioctl",
  "Win32_System_Kernel",
  "Win32_System_LibraryLoader",
  "Win32_System_Memory",
  "Win32_System_Performance",
  "Win32_System_Pipes",
  "Win32_System_Registry",
  "Win32_System_SystemInformation",
  "Win32_System_SystemServices",
  "Win32_System_Threading",
  "Win32_System_Time",
  "Win32_System_WindowsProgramming",
  "Win32_UI_Shell",
  "Win32_UI_WindowsAndMessaging",
]

[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies]
wasm-bindgen = { workspace = true, optional = true }

[build-dependencies]
glob = { workspace = true }
itertools = { workspace = true }

[lints]
workspace = true
