summaryrefslogtreecommitdiffhomepage
path: root/mullvad-version
diff options
context:
space:
mode:
authorLinus Färnstrand <faern@faern.net>2022-10-06 17:30:30 +0200
committerLinus Färnstrand <linus@mullvad.net>2022-10-10 11:55:56 +0200
commitec7ea9fb689c6c3087ccbc4d37cbb786fff44895 (patch)
tree51d75bf5b47aeed30dfa2078fe42fe580243903b /mullvad-version
parent447793c6f8c1dd69486ef395475bede7e06adfee (diff)
downloadmullvadvpn-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.rs51
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,
+ }
}