47 lines
1.4 KiB
Rust
47 lines
1.4 KiB
Rust
use std::env;
|
|
use std::fs::File;
|
|
use std::io::Write;
|
|
use std::path::Path;
|
|
use std::process::Command;
|
|
|
|
fn get_git_version() -> (u32, String) {
|
|
let version_code = String::from_utf8(
|
|
Command::new("git")
|
|
.args(["rev-list", "--count", "HEAD"])
|
|
.output()
|
|
.expect("Failed to get git count")
|
|
.stdout,
|
|
)
|
|
.expect("Failed to read git count stdout");
|
|
let version_code: u32 = version_code
|
|
.trim()
|
|
.parse()
|
|
.expect("Failed to parse git count");
|
|
let version_code = 10000 + 200 + version_code; // For historical reasons
|
|
|
|
let version_name = String::from_utf8(
|
|
Command::new("git")
|
|
.args(["describe", "--tags", "--always"])
|
|
.output()
|
|
.expect("Failed to get git version")
|
|
.stdout,
|
|
)
|
|
.expect("Failed to read git version stdout");
|
|
(version_code, version_name)
|
|
}
|
|
|
|
fn main() {
|
|
let (code, name) = get_git_version();
|
|
let out_dir = env::var("OUT_DIR").expect("Failed to get $OUT_DIR");
|
|
let out_dir = Path::new(&out_dir);
|
|
File::create(Path::new(out_dir).join("VERSION_CODE"))
|
|
.expect("Failed to create VERSION_CODE")
|
|
.write_all(code.to_string().as_bytes())
|
|
.expect("Failed to write VERSION_CODE");
|
|
|
|
File::create(Path::new(out_dir).join("VERSION_NAME"))
|
|
.expect("Failed to create VERSION_NAME")
|
|
.write_all(name.trim().as_bytes())
|
|
.expect("Failed to write VERSION_NAME");
|
|
}
|