summaryrefslogtreecommitdiffstats
path: root/vendor/escargot/src/cargo.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/escargot/src/cargo.rs')
-rw-r--r--vendor/escargot/src/cargo.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/vendor/escargot/src/cargo.rs b/vendor/escargot/src/cargo.rs
new file mode 100644
index 000000000..6e8efd220
--- /dev/null
+++ b/vendor/escargot/src/cargo.rs
@@ -0,0 +1,60 @@
+use std::env;
+use std::ffi;
+use std::process;
+use std::str;
+
+use crate::build::CargoBuild;
+
+/// The current process' target triplet.
+pub const CURRENT_TARGET: &str = include_str!(concat!(env!("OUT_DIR"), "/current_target.txt"));
+
+static CARBO_BIN: once_cell::sync::Lazy<ffi::OsString> =
+ once_cell::sync::Lazy::new(|| env::var_os("CARGO").unwrap_or_else(|| "cargo".into()));
+
+/// Top-level command.
+#[derive(Debug)]
+pub struct Cargo {
+ cmd: process::Command,
+}
+
+impl Cargo {
+ /// Create a top-level command.
+ pub fn new() -> Self {
+ Self {
+ cmd: process::Command::new(CARBO_BIN.as_os_str()),
+ }
+ }
+
+ /// Manually pass an argument that is unsupported.
+ ///
+ /// Caution: Passing in a sub-command or `--` can throw off the API.
+ pub fn arg<S: AsRef<ffi::OsStr>>(mut self, arg: S) -> Self {
+ self.cmd.arg(arg);
+ self
+ }
+
+ /// Manually pass arguments that are unsupported.
+ ///
+ /// Caution: Passing in a sub-command or `--` can throw off the API.
+ pub fn args<I: IntoIterator<Item = S>, S: AsRef<ffi::OsStr>>(mut self, args: I) -> Self {
+ self.cmd.args(args);
+ self
+ }
+
+ /// Run the `build` subcommand.
+ pub fn build(self) -> CargoBuild {
+ self.build_with("build")
+ }
+
+ /// Run a custom `build` subcommand.
+ pub fn build_with<S: AsRef<ffi::OsStr>>(mut self, name: S) -> CargoBuild {
+ self.cmd.arg(name).arg("--message-format=json");
+ CargoBuild::with_command(self.cmd)
+ }
+}
+
+impl Default for Cargo {
+ fn default() -> Self {
+ Self::new()
+ }
+}