diff options
Diffstat (limited to 'crates/shirabe/build.rs')
| -rw-r--r-- | crates/shirabe/build.rs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/crates/shirabe/build.rs b/crates/shirabe/build.rs new file mode 100644 index 00000000..22c8be58 --- /dev/null +++ b/crates/shirabe/build.rs @@ -0,0 +1,55 @@ +//! ref: composer/src/Composer/Compiler.php +//! +//! Generates a constant value of `composer::COMPOSER_DEV_WARNING_TIME`. + +fn git(repo_root: &std::path::Path, args: &[&str]) -> Option<String> { + let output = std::process::Command::new("git") + .args(args) + .current_dir(repo_root) + .output() + .ok()?; + if !output.status.success() { + return None; + } + Some(String::from_utf8(output.stdout).ok()?.trim().to_string()) +} + +fn main() { + println!("cargo::rerun-if-changed=build.rs"); + + let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap(); + let repo_root = std::path::Path::new(&manifest_dir) + .parent() + .unwrap() + .parent() + .unwrap(); + + if let Some(git_dir) = git(repo_root, &["rev-parse", "--git-dir"]) { + let git_dir = repo_root.join(git_dir); + for path in ["HEAD", "packed-refs", "refs/tags"] { + let path = git_dir.join(path); + if path.exists() { + println!("cargo::rerun-if-changed={}", path.display()); + } + } + } + + let dev_warning_time = + if git(repo_root, &["describe", "--tags", "--exact-match", "HEAD"]).is_some() { + None + } else { + git(repo_root, &["log", "-n1", "--pretty=%ct", "HEAD"]) + .and_then(|date| date.parse::<i64>().ok()) + .map(|date| date + 60 * 86400) + }; + + let out_dir = std::env::var("OUT_DIR").unwrap(); + std::fs::write( + std::path::Path::new(&out_dir).join("dev_warning_time.rs"), + match dev_warning_time { + Some(time) => format!("Some({time})"), + None => "None".to_string(), + }, + ) + .unwrap(); +} |
