diff options
| author | Linus Färnstrand <faern@faern.net> | 2022-10-06 17:30:30 +0200 |
|---|---|---|
| committer | Linus Färnstrand <linus@mullvad.net> | 2022-10-10 11:55:56 +0200 |
| commit | ec7ea9fb689c6c3087ccbc4d37cbb786fff44895 (patch) | |
| tree | 51d75bf5b47aeed30dfa2078fe42fe580243903b /mullvad-version | |
| parent | 447793c6f8c1dd69486ef395475bede7e06adfee (diff) | |
| download | mullvadvpn-ec7ea9fb689c6c3087ccbc4d37cbb786fff44895.tar.xz mullvadvpn-ec7ea9fb689c6c3087ccbc4d37cbb786fff44895.zip | |
Make Visual Studio/C++ projects fetch version.h from mullvad-version
Diffstat (limited to 'mullvad-version')
| -rw-r--r-- | mullvad-version/src/main.rs | 51 |
1 files changed, 45 insertions, 6 deletions
diff --git a/mullvad-version/src/main.rs b/mullvad-version/src/main.rs index 09f37880bb..a54914e6c2 100644 --- a/mullvad-version/src/main.rs +++ b/mullvad-version/src/main.rs @@ -4,11 +4,14 @@ use std::{env, process::exit}; const ANDROID_VERSION: &str = include_str!(concat!(env!("OUT_DIR"), "/android-product-version.txt")); +const VERSION_REGEX: &str = r"^20([0-9]{2})\.([1-9][0-9]?)(-beta([1-9][0-9]?))?(-dev-[0-9a-f]+)?$"; + fn main() { let command = env::args().nth(1); match command.as_deref() { None => println!("{}", mullvad_version::VERSION), Some("semver") => println!("{}", to_semver(mullvad_version::VERSION)), + Some("version.h") => println!("{}", to_windows_h_format(mullvad_version::VERSION)), Some("versionName") => println!("{ANDROID_VERSION}"), Some("versionCode") => println!("{}", to_android_version_code(ANDROID_VERSION)), Some(command) => { @@ -45,14 +48,50 @@ fn to_semver(version: &str) -> String { /// Version: 2021.34-beta5 /// versionCode: 21340005 fn to_android_version_code(version: &str) -> String { - let re = - Regex::new(r"^20([0-9]{2})\.([1-9][0-9]?)(-beta([1-9][0-9]?))?(-dev-[0-9a-f]+)?$").unwrap(); + let version = parse_version(version); + format!( + "{}{:0>2}00{:0>2}", + version.year, + version.incremental, + version.beta.unwrap_or_default() + ) +} + +fn to_windows_h_format(version: &str) -> String { + let Version { + year, incremental, .. + } = parse_version(version); + + format!( + "#define MAJOR_VERSION 20{year} +#define MINOR_VERSION {incremental} +#define PATCH_VERSION 0 +#define PRODUCT_VERSION \"{version}\"" + ) +} + +struct Version { + year: String, + incremental: String, + beta: Option<String>, +} + +fn parse_version(version: &str) -> Version { + let re = Regex::new(VERSION_REGEX).unwrap(); let captures = re .captures(version) .expect("Version does not match expected format"); - let year = captures.get(1).expect("Missing year").as_str(); - let incremental = captures.get(2).expect("Missing incremental").as_str(); - let beta = captures.get(4).map(|m| m.as_str()).unwrap_or_default(); + let year = captures.get(1).expect("Missing year").as_str().to_owned(); + let incremental = captures + .get(2) + .expect("Missing incremental") + .as_str() + .to_owned(); + let beta = captures.get(4).map(|m| m.as_str().to_owned()); - format!("{year}{:0>2}00{:0>2}", incremental, beta) + Version { + year, + incremental, + beta, + } } |
