[package]
name = "nih_plug"
version = "0.0.0"
edition = "2021"
rust-version = "1.63"
authors = ["Robbert van der Helm <mail@robbertvanderhelm.nl>"]
license = "ISC"

keywords = ["audio", "plugin", "vst", "vst3"]
description = "A simple but modern API-agnostic audio plugin framework"
repository = "https://github.com/robbert-vdh/nih-plug"

[workspace]
members = [
  "nih_plug_derive",
  "nih_plug_egui",
  "nih_plug_iced",
  "nih_plug_vizia",
  "nih_plug_xtask",

  "cargo_nih_plug",
  "xtask",

  "plugins/examples/gain",
  "plugins/examples/gain_gui_egui",
  "plugins/examples/gain_gui_iced",
  "plugins/examples/gain_gui_vizia",
  "plugins/examples/midi_inverter",
  "plugins/examples/poly_mod_synth",
  "plugins/examples/sine",
  "plugins/examples/stft",

  "plugins/crisp",
  "plugins/crossover",
  "plugins/diopser",
  "plugins/loudness_war_winner",
  "plugins/puberty_simulator",
  "plugins/safety_limiter",
  "plugins/spectral_compressor",
]

[features]
default = ["vst3"]

# Enabling this feature will cause the plugin to terminate when allocations
# occur in the processing function during debug builds. Keep in mind that panics
# may also allocate if they use string formatting, so temporarily disabling this
# feature may be necessary when debugging panics in DSP code.
assert_process_allocs = ["dep:assert_no_alloc"]
# Enables an export target for standalone binaries through the
# `nih_export_standalone()` function. Disabled by default as this requires
# building additional dependencies for audio and MIDI handling.
standalone = ["dep:baseview", "dep:clap", "dep:cpal", "dep:jack", "dep:rtrb"]
# Enables the `nih_export_vst3!()` macro. Enabled by default. This feature
# exists mostly for GPL-compliance reasons, since even if you don't use the VST3
# wrapper you might otherwise still include a couple (unused) symbols from the
# `vst3-sys` crate.
vst3 = ["dep:vst3-sys"]
# Add adapters to the Buffer object for reading the channel data to and from
# `std::simd` vectors. Requires a nightly compiler.
simd = []
# Compress plugin state using the Zstandard algorithm. Loading uncompressed
# state is still supported so existing state will still load after enabling this
# feature for a plugin, but it can not be disabled again without losing state
# compatibility.
zstd = ["dep:zstd"]

# Only relevant when generating docs, adds the `doc_auto_cfg` nightly feature
docs = []

[dependencies]
nih_plug_derive = { path = "nih_plug_derive" }

anyhow = "1.0"
atomic_float = "0.1"
atomic_refcell = "0.1"
backtrace = "0.3.65"
bitflags = "1.3"
cfg-if = "1.0"
clap-sys = "0.3"
crossbeam = "0.8"
lazy_static = "1.4"
log = { version = "0.4", features = ["std", "release_max_level_info"] }
midi-consts = "0.1"
parking_lot = "0.12"
raw-window-handle = "0.4"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
simplelog = "0.12"
widestring = "1.0.0-beta.1"

# Used for the `assert_process_allocs` feature. This fork includes support for
# the log crate and printing backtraces on allocation failure so you can trace
# the allocation back to a place in the code.
# TODO: The `log` feature causes would pipe these messages through our logger
#       which is great in theory, but if the allocation failure happens as part
#       of the logger then this will cause the program to hang indefinitely
#       because simplelog gates the log function behind a mutex. At some point
#       we should implement our own logger and enable this feature. That way we
#       can also use CLAP's logging extension.
assert_no_alloc = { git = "https://github.com/robbert-vdh/rust-assert-no-alloc.git", branch = "nih-plug", features = ["backtrace"], optional = true }

# Used for the `standalone` feature
# NOTE: OpenGL support is not needed here, but rust-analyzer gets confused when
#       some crates do use it and others don't
baseview = { git = "https://github.com/robbert-vdh/baseview.git", branch = "feature/resize", features = ["opengl"], optional = true }
# All the claps!
clap = { version = "3.2", features = ["derive"], optional = true }
cpal = { version = "0.13.5", optional = true }
# The current upstream jack panics when it can't load the JACK library, which breaks the backend fallback
jack = { git = "https://github.com/robbert-vdh/rust-jack.git", branch = "feature/handle-library-failure", optional = true }
rtrb = { version = "0.2.2", optional = true }

# Used for the `vst3` feature
vst3-sys = { git = "https://github.com/robbert-vdh/vst3-sys.git", branch = "fix/drop-box-from-raw", optional = true }

# Used for the `zstd` feature
zstd = { version = "0.11.2", optional = true }

[dev-dependencies]
approx = "0.5.1"

[target.'cfg(all(target_family = "unix", not(target_os = "macos")))'.dependencies]
libc = "0.2.124"

[target.'cfg(target_os = "windows")'.dependencies]
# STDIO isn't reliable on Windows, so when hosting plugins in a DAW it may be
# useful to log using `OutputDebugString()` instead
win_dbg_logger = "0.1"

[target.'cfg(target_os = "windows")'.dependencies.windows]
version = "0.32"
features = [
  "Win32_Foundation",
  "Win32_Graphics_Gdi",
  "Win32_UI_WindowsAndMessaging",
  "Win32_System_LibraryLoader",
  "Win32_System_Performance",
]

[profile.release]
lto = "thin"
strip = "symbols"

[profile.profiling]
inherits = "release"
debug = true
strip = "none"