Fixed build on cloud
This commit is contained in:
@@ -1,15 +1,63 @@
|
||||
pub fn main() {
|
||||
println!("pwd: {}", std::env::current_dir().unwrap().display());
|
||||
println!("cargo:rerun-if-changed=../../action_schema.xsd");
|
||||
let output = std::process::Command::new("xml_schema_generator.exe")
|
||||
.arg("--derive")
|
||||
.arg("Clone, Debug, Deserialize, Serialize")
|
||||
.arg("../../action_schema.xsd")
|
||||
.arg("src/schema.rs")
|
||||
.output()
|
||||
.expect("Failed to execute xml_schema_generator");
|
||||
|
||||
if !output.status.success() {
|
||||
panic!("xml_schema_generator failed: {}",
|
||||
String::from_utf8_lossy(&output.stderr));
|
||||
// Find xml_schema_generator in the path or in cargo bin directory
|
||||
let cargo_home = std::env::var("CARGO_HOME").unwrap_or_else(|_| {
|
||||
if cfg!(windows) {
|
||||
format!("{}/.cargo", std::env::var("USERPROFILE").unwrap())
|
||||
} else {
|
||||
format!("{}/.cargo", std::env::var("HOME").unwrap())
|
||||
}
|
||||
});
|
||||
|
||||
let bin_dir = format!("{}/bin", cargo_home);
|
||||
let paths = vec![bin_dir];
|
||||
|
||||
// Find the executable
|
||||
let executable_name = if cfg!(windows) {
|
||||
"xml_schema_generator.exe"
|
||||
} else {
|
||||
"xml_schema_generator"
|
||||
};
|
||||
|
||||
let executable_path = paths.iter()
|
||||
.map(|p| format!("{}/{}", p, executable_name))
|
||||
.find(|p| std::path::Path::new(p).exists());
|
||||
|
||||
// If the executable isn't in any of the checked paths, try to install it
|
||||
let executable = match executable_path {
|
||||
Some(path) => path,
|
||||
None => {
|
||||
println!("cargo:warning=xml_schema_generator not found, trying to install it");
|
||||
// Install xml_schema_generator using cargo install
|
||||
let status = std::process::Command::new("cargo")
|
||||
.args(["install", "xml_schema_generator"])
|
||||
.status()
|
||||
.expect("Failed to run cargo install");
|
||||
|
||||
if !status.success() {
|
||||
panic!("Failed to install xml_schema_generator");
|
||||
}
|
||||
|
||||
// Now it should be in the cargo bin directory
|
||||
format!("{}/bin/{}", cargo_home, executable_name)
|
||||
}
|
||||
};
|
||||
|
||||
println!("cargo:warning=Using xml_schema_generator at: {}", executable);
|
||||
|
||||
// Run the generator
|
||||
let output = std::process::Command::new(&executable)
|
||||
.arg("--derive")
|
||||
.arg("Clone, Debug, Deserialize, Serialize")
|
||||
.arg("../../action_schema.xsd")
|
||||
.arg("src/schema.rs")
|
||||
.output()
|
||||
.expect(&format!("Failed to execute {}", executable));
|
||||
|
||||
if !output.status.success() {
|
||||
panic!("xml_schema_generator failed: {}",
|
||||
String::from_utf8_lossy(&output.stderr));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user