insee_number_translator/pyembed/build.rs

65 lines
2.3 KiB
Rust

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
use std::env;
use std::path::PathBuf;
use std::process;
/// Path to pyoxidizer executable this file was created with.
const DEFAULT_PYOXIDIZER_EXE: &str = r#"/Users/gaugendre/.cargo/bin/pyoxidizer"#;
fn main() {
// We support using pre-built artifacts, in which case we emit the
// cargo metadata lines from the "original" build to "register" the
// artifacts with this cargo invocation.
if env::var("PYOXIDIZER_REUSE_ARTIFACTS").is_ok() {
let artifact_dir_env = env::var("PYOXIDIZER_ARTIFACT_DIR");
let artifact_dir_path = match artifact_dir_env {
Ok(ref v) => PathBuf::from(v),
Err(_) => {
let out_dir = env::var("OUT_DIR").unwrap();
PathBuf::from(&out_dir)
}
};
println!(
"using pre-built artifacts from {}",
artifact_dir_path.display()
);
println!("cargo:rerun-if-env-changed=PYOXIDIZER_REUSE_ARTIFACTS");
println!("cargo:rerun-if-env-changed=PYOXIDIZER_ARTIFACT_DIR");
// Emit the cargo metadata lines to register libraries for linking.
let cargo_metadata_path = artifact_dir_path.join("cargo_metadata.txt");
let metadata = std::fs::read_to_string(&cargo_metadata_path)
.expect(format!("failed to read {}", cargo_metadata_path.display()).as_str());
println!("{}", metadata);
} else {
let pyoxidizer_exe = match env::var("PYOXIDIZER_EXE") {
Ok(value) => value,
Err(_) => DEFAULT_PYOXIDIZER_EXE.to_string(),
};
let pyoxidizer_path = PathBuf::from(&pyoxidizer_exe);
if !pyoxidizer_path.exists() {
panic!("pyoxidizer executable does not exist: {}", &pyoxidizer_exe);
}
match process::Command::new(&pyoxidizer_exe)
.arg("run-build-script")
.arg("build.rs")
.status()
{
Ok(status) => {
if !status.success() {
panic!("`pyoxidizer run-build-script` failed");
}
}
Err(e) => panic!("`pyoxidizer run-build-script` failed: {}", e.to_string()),
}
}
}