use std::ffi::OsString; use std::path::PathBuf; use std::process::{Command, exit}; use std::{env, fs}; fn main() { println!("cargo::rerun-if-changed=java/gradle"); println!("cargo::rerun-if-changed=java/src"); println!("cargo::rerun-if-changed=java/build.gradle.kts"); println!("cargo::rerun-if-changed=java/settings.gradle.kts"); println!("cargo::rerun-if-changed=java/gradle.properties"); let out_dir = dunce::canonicalize(PathBuf::from(env::var_os("OUT_DIR").unwrap())) .unwrap(); println!( "cargo::rustc-env=JAVA_JARS_DIR={}", out_dir.join("java/libs").display() ); let gradle_path = fs::canonicalize( #[cfg(target_os = "windows")] "java\\gradlew.bat", #[cfg(not(target_os = "windows"))] "java/gradlew", ) .unwrap(); let mut build_dir_str = OsString::from("-Dorg.gradle.project.buildDir="); build_dir_str.push(out_dir.join("java")); let exit_status = Command::new(gradle_path) .arg(build_dir_str) .arg("build") .arg("--no-daemon") .arg("--console=rich") .current_dir(dunce::canonicalize("java").unwrap()) .status() .expect("Failed to wait on Gradle build"); if !exit_status.success() { println!("cargo::error=Gradle build failed with {exit_status}"); exit(exit_status.code().unwrap_or(1)); } }