From aa73c34db283d52e479a54f3c844577298799e03 Mon Sep 17 00:00:00 2001 From: tiann Date: Fri, 3 Feb 2023 19:34:19 +0800 Subject: [PATCH] ksud: unify version --- userspace/ksud/build.rs | 43 ++++++++++++++++++++++++++++++++++++ userspace/ksud/src/cli.rs | 4 ++-- userspace/ksud/src/defs.rs | 4 ++++ userspace/ksud/src/module.rs | 2 ++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 userspace/ksud/build.rs diff --git a/userspace/ksud/build.rs b/userspace/ksud/build.rs new file mode 100644 index 00000000..1e4ff453 --- /dev/null +++ b/userspace/ksud/build.rs @@ -0,0 +1,43 @@ +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"); +} diff --git a/userspace/ksud/src/cli.rs b/userspace/ksud/src/cli.rs index 5454fc59..b8b77145 100644 --- a/userspace/ksud/src/cli.rs +++ b/userspace/ksud/src/cli.rs @@ -6,11 +6,11 @@ use android_logger::Config; #[cfg(target_os = "android")] use log::LevelFilter; -use crate::{apk_sign, debug, event, module}; +use crate::{apk_sign, debug, defs, event, module}; /// KernelSU userspace cli #[derive(Parser, Debug)] -#[command(author, version, about, long_about = None)] +#[command(author, version = defs::VERSION_NAME, about, long_about = None)] struct Args { #[command(subcommand)] command: Commands, diff --git a/userspace/ksud/src/defs.rs b/userspace/ksud/src/defs.rs index 9293a114..d70b09a1 100644 --- a/userspace/ksud/src/defs.rs +++ b/userspace/ksud/src/defs.rs @@ -19,3 +19,7 @@ pub const MODULE_UPDATE_TMP_DIR: &str = concatcp!(WORKING_DIR, "modules_update/" pub const DISABLE_FILE_NAME: &str = "disable"; pub const UPDATE_FILE_NAME: &str = "update"; pub const REMOVE_FILE_NAME: &str = "remove"; + + +pub const VERSION_CODE: &str = include_str!(concat!(env!("OUT_DIR"), "/VERSION_CODE")); +pub const VERSION_NAME: &str = include_str!(concat!(env!("OUT_DIR"), "/VERSION_NAME")); \ No newline at end of file diff --git a/userspace/ksud/src/module.rs b/userspace/ksud/src/module.rs index 7a6ea07a..02309513 100644 --- a/userspace/ksud/src/module.rs +++ b/userspace/ksud/src/module.rs @@ -209,6 +209,8 @@ fn exec_script>(path: T, wait: bool) -> Result<()> { .arg("sh") .arg(path.as_ref()) .env("ASH_STANDALONE", "1") + .env("KSU_VER_CODE", defs::VERSION_CODE) + .env("KSU_VER", defs::VERSION_NAME) .env( "PATH", format!("{}:{}", env_var("PATH").unwrap(), defs::BINARY_DIR),