[package] name = "helgobox" version = "2.18.3-pre.1" authors = ["Benjamin Klum "] edition = "2021" build = "build.rs" license = "GPL-3.0" rust-version = "1.84.0" publish = false [features] default = [] # Builds ReaLearn together with the Playtime Clip Engine. This should only be enabled if you have access to the # private playtime-clip-engine repository, otherwise the build will fail. playtime = ["dep:playtime-clip-engine"] # Activates license checks for Playtime Clip Engine. If not enabled, license checks will always fail. licensing = ["playtime", "playtime-clip-engine/licensing"] # Enables a bunch of features that need the egui user interface framework to work. egui = ["dep:baseview", "dep:egui-baseview", "dep:egui", "dep:egui_extras", "pot-browser"] # Regenerate bindings (for dialog resource IDs and EEL functions) generate = [] [dependencies] # Own base.workspace = true reaper-rx.workspace = true reaper-high = { workspace = true, features = ["sentry"] } reaper-medium.workspace = true reaper-common-types = { workspace = true, features = ["color-macros", "palette"] } reaper-low.workspace = true reaper-macros.workspace = true swell-ui.workspace = true rx-util.workspace = true pot.workspace = true helgobox-api.workspace = true # For obtaining dialog constants from dialog crate helgobox-dialogs.workspace = true # In future (when helgoboss-learn has matured), this will become a crates.io dependency helgoboss-learn.workspace = true helgoboss-midi.workspace = true helgoboss-license-api.workspace = true playtime-api.workspace = true playtime-clip-engine = { workspace = true, optional = true } # 3rd-party # For easier error handling anyhow.workspace = true # For being able to (de)serialize using FromStr and Display serde_with.workspace = true # For panicking when accessing something from the wrong thread fragile.workspace = true # For acting as DAW plug-in vst.workspace = true rxrust.workspace = true serde.workspace = true serde_json.workspace = true serde_repr.workspace = true derive_more.workspace = true num_enum.workspace = true crossbeam-channel.workspace = true scopeguard.workspace = true uuid = { workspace = true, features = ["v4", "serde"] } # New logging (for Playtime matrix) tracing.workspace = true tracing-core.workspace = true tracing-subscriber = { workspace = true, features = ["env-filter"] } # For interacting with the OS clipboard arboard.workspace = true once_cell.workspace = true # For being able to exclude fields from the derived Debug implementation derivative.workspace = true chrono.workspace = true smallvec.workspace = true regex.workspace = true enum-map.workspace = true # For generating controller file names from controller names slug.workspace = true # For generating random session IDs nanoid.workspace = true # For ReaLearn's servers futures.workspace = true tokio.workspace = true tokio-stream.workspace = true tower.workspace = true # For ReaLearn's http server (used for projection) axum = { workspace = true, features = ["ws"] } # Use "tls-rustls-no-provider" instead of "tls-rustls" because we want to use "ring" for # cryptography instead of "aws-lc-rs" (because the latter causes build issues on Windows) axum-server = { workspace = true, features = ["tls-rustls-no-provider"] } rustls = { workspace = true, features = ["ring"] } tower-http = { workspace = true, features = ["cors"] } # For ReaLearn's gRPC server tonic.workspace = true prost.workspace = true # For generating projection QR code qrcode.workspace = true # For rendering projection QR code to PNG image = { workspace = true, features = ["png"] } # For generating self-signed certificate for projection web server rcgen.workspace = true # For showing different ways of connecting to this computer (projection feature) dns-lookup.workspace = true hostname.workspace = true # For rendering projection setup HTML page template askama.workspace = true # For persisting app configuration serde_ini.workspace = true # For opening projection setup page and companion app in local browser webbrowser.workspace = true # For writing generated projection setup page to disk tempfile.workspace = true # For adding firewall rules runas.workspace = true # For building URls, e.g. companion web app URL url.workspace = true # For grouping mappings by virtual control elements and grouping outgoing OSC messages by device itertools.workspace = true # For being able to configure logging via environment variable RUST_LOG env_logger.workspace = true # To open user guide in local PDF app open.workspace = true # For comparing ReaLearn versions in order to determine if preset migration is necessary semver.workspace = true # Maybe better asynchronous channel than in futures or tokio (basically the async version of crossbeam) async-channel.workspace = true # For displaying snapshot sizes bytesize.workspace = true # For OSC rosc.workspace = true # For letting the user edit advanced mapping settings edit.workspace = true # For parsing/formatting advanced mapping settings serde_yaml.workspace = true # For parsing hexadecimal data notation to byte vector (for system-exclusive lifecycle MIDI messages) hex.workspace = true # For evaluation of formulas fasteval = { workspace = true, default-features = false } # For wildcard support when using "By name" selector wildmatch.workspace = true # For creating HashSet literals for projection feedback and in unit tests maplit.workspace = true # For easier support of named virtual control elements ascii.workspace = true # For using bit flags in the reaper-rs API. enumflags2.workspace = true # For detecting undesired (de)allocation in real-time threads. helgobox-allocator.workspace = true # For being able to cleanly implement targets in separate files without needing to resort to dynamic dispatch. enum_dispatch.workspace = true # For processing mappings in user-defined order indexmap = { workspace = true } # For comparing floating point numbers in tests approx.workspace = true # For the API (ReaLearn Script) and MIDI scripts mlua.workspace = true # For convenient converting prop key to prop enum variant strum.workspace = true metrics.workspace = true metrics-exporter-prometheus = { workspace = true, default-features = false } # For parsing OSC argument value ranges nom.workspace = true # For being able to return iterators of different types either.workspace = true # For reading preset directories recursively walkdir.workspace = true # For egui graphics egui-baseview = { workspace = true, optional = true } baseview = { workspace = true, optional = true } egui = { workspace = true, optional = true } egui_extras = { workspace = true, optional = true } # Pot Browser pot-browser = { workspace = true, optional = true } # For decompressing App zstd = "0.13.0" tar = "0.4.40" # For loading App libloading.workspace = true # For embedding factory presets into the binary include_dir.workspace = true # For prefixing preset IDs with the user name whoami.workspace = true # For passing MIDI device inquiry replies from audio thread to main thread tinyvec.workspace = true # For not having to deal with non-UTF8 paths if we are sure we don't have them camino.workspace = true # For not having to manually implement Lua module finder trait for smart pointers auto_impl.workspace = true # For some color in the otherwise boring GUI palette.workspace = true # For parsing/formatting enum-like target values from/to a stable and ID-like representation serde_plain.workspace = true # For sharing variables between main thread and real-time threads atomic.workspace = true # For making sure that sharing global audio state uses atomics static_assertions.workspace = true # For Stream Deck support streamdeck.workspace = true # For Stream Deck support ab_glyph.workspace = true # For Stream Deck support hidapi.workspace = true # For caching button images for Stream Deck cached.workspace = true # For drawing knobs for Stream Deck button imageproc.workspace = true # For relativizing paths for Stream Deck button images pathdiff.workspace = true # For fetching Helgobox remote config. # Important to not use default features because we want to avoid the libssl dependency on Linux. reqwest = { workspace = true, default-features = false, features = ["rustls-tls-no-provider"] } # For MIDI clock processing simple_moving_average.workspace = true [target.'cfg(any(target_os = "windows", target_os = "macos"))'.dependencies] # For speech source tts.workspace = true [target.'cfg(windows)'.dependencies] # For detecting the Windows version (to determine whether special characters can be displayed) sys-info.workspace = true # For converting virtual umlaut/special keys into character codes (keyboard source) winapi = { workspace = true, features = ["winuser"] } [target.'cfg(target_os = "macos")'.dependencies] # For taking screenshots for docs xcap.workspace = true # For taking screenshots for docs dirs.workspace = true [build-dependencies] # For making Git commit hash available to code built = { workspace = true, features = ["git2", "chrono"] } # For generating bindings (for dialog resource IDs and EEL functions) bindgen.workspace = true # For compiling EEL and SWELL dialog resources cc.workspace = true # For embedding dialog resource files on Windows embed-resource.workspace = true # For RC dialog file generation helgobox-dialogs.workspace = true [dev-dependencies] # For the EEL memory consumption test sysinfo.workspace = true [lib] name = "helgobox" crate-type = ["cdylib"] [lints.clippy] # TODO-high-refactoring Activate at some point. For now it's just too much to handle. #enum_glob_use = "deny"