summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Strathearn <bills@google.com>2021-09-02 23:35:07 +0000
committerBill Strathearn <bills@google.com>2021-09-03 16:54:26 +0000
commitad6a990678dd5cdd35ed369288da31d33abc450f (patch)
tree82f2e062a6ff558c64fcce69b3205d39ae07f251
parent8ab66269b7c01414852a552578e01062a329515f (diff)
downloadcamera-ad6a990678dd5cdd35ed369288da31d33abc450f.tar.gz
Convert the version script into py
And update it to follow the new two-part version scheme Bug: 198094685 Test: Make the apex, deapex the apex and check the version info Change-Id: I6b8f1eab3713f7b191beddeaa0701601acfa07c0
-rw-r--r--common/hal/hidl_service/Android.bp23
-rw-r--r--common/hal/hidl_service/version_script.py121
-rwxr-xr-xcommon/hal/hidl_service/version_script.sh36
3 files changed, 133 insertions, 47 deletions
diff --git a/common/hal/hidl_service/Android.bp b/common/hal/hidl_service/Android.bp
index 29f7203..f10d6ef 100644
--- a/common/hal/hidl_service/Android.bp
+++ b/common/hal/hidl_service/Android.bp
@@ -46,21 +46,22 @@ gch_lazy_hal_cc_defaults {
},
}
-sh_binary_host {
+// Exported for use in vendor/google/services/LyricCameraHAL/src/
+python_binary_host {
name: "camera_hal_version_script",
- src: "version_script.sh",
- filename_from_src: true,
+ main: "version_script.py",
+ srcs: ["version_script.py"],
}
cc_genrule {
- name: "hidl_camera_build_version",
- tools: [":camera_hal_version_script"],
- cmd: "$(location :camera_hal_version_script) $(in) $(out)",
- vendor: true,
- srcs: [
- "hidl_camera_build_version.inl",
- ],
- out: ["hidl_camera_build_version.h"],
+ name: "hidl_camera_build_version",
+ tool_files: ["version_script.py"],
+ cmd: "python3 $(location version_script.py) $(in) $(out)",
+ vendor: true,
+ srcs: [
+ "hidl_camera_build_version.inl",
+ ],
+ out: ["hidl_camera_build_version.h"],
}
cc_defaults {
diff --git a/common/hal/hidl_service/version_script.py b/common/hal/hidl_service/version_script.py
new file mode 100644
index 0000000..a5bb167
--- /dev/null
+++ b/common/hal/hidl_service/version_script.py
@@ -0,0 +1,121 @@
+#!/usr/bin/env python3
+#
+# See: go/camera-sideline#versions for more context
+#
+# This script generates the apex manifest version number (which is also used for
+# the outer aab/jar object's version available to PackageManager).
+#
+# That version is limited to INT_MAX
+# Strategy:
+# if(local eng build)
+# version = 2147480000
+# else
+# version = brach specific code + padding + numeric part of build number
+#
+# 2147480000 is chosen as being a value that can install over any expected build
+# server build number that is still a little smaller than INT_MAX to leave room
+# for maneuvering
+
+import os
+import re
+import sys
+
+BRANCH_SPECIFIC_VERSION_IDENTIFIER = 2 # sc-qpr1-dev
+DEFAULT_ENG_BUILD_NUMBER = 2147480000
+DEFAULT_BAD_BUILD_NUMBER = DEFAULT_ENG_BUILD_NUMBER - 1
+
+
+def tame_box(numeric_build_number):
+ # Box the regex extracted value to a min and a max, just in case. Should not
+ # be needed ever.
+ if numeric_build_number < 1:
+ numeric_build_number = 1
+ if numeric_build_number > DEFAULT_ENG_BUILD_NUMBER:
+ numeric_build_number = DEFAULT_BAD_BUILD_NUMBER
+ return numeric_build_number
+
+
+def get_version(input_path, output_path):
+
+ soong_build_number = DEFAULT_BAD_BUILD_NUMBER
+ numeric_build_number = DEFAULT_BAD_BUILD_NUMBER
+
+ # Extract the Android Build ID from the build products
+ out_dir = os.getenv('OUT_DIR')
+ with open('%s/soong/build_number.txt' % out_dir, 'r') as file:
+ soong_build_number = file.read().replace('\n', '')
+
+ # Eng builds all have a default very high version number to permit for local
+ # builds to ovewrite whatever else is installed on the OS.
+ if soong_build_number.startswith('eng.'): # eng.bills.20210901.235403
+ numeric_build_number = DEFAULT_ENG_BUILD_NUMBER
+ else:
+ # We only want the numeric part of the Android Build ID
+ match = re.search(r'([0-9]+)', soong_build_number)
+ if match:
+ numeric_build_number = int(match.group(0))
+ else:
+ numeric_build_number = DEFAULT_BAD_BUILD_NUMBER
+
+ # Tame the inputs into a reasonable box, just in case
+ numeric_build_number = tame_box(numeric_build_number)
+ # print('numeric_build_number: %s' % str(numeric_build_number))
+
+ # With the numeric build number as a starting point, let's augment it with
+ # the BRANCH_SPECIFIC_VERSION_IDENTIFIER to differentiate build products from
+ # this branch according to: go/camera-sideline#versions
+ branched_build_number = numeric_build_number
+ if numeric_build_number == DEFAULT_ENG_BUILD_NUMBER:
+ # High default eng numbers can't really be multiplied so we add our branch
+ # specific number instead
+ branched_build_number = numeric_build_number + BRANCH_SPECIFIC_VERSION_IDENTIFIER
+ else:
+ # Two cases to consider:
+ # 1. A "regular" Android Build ID like: 7699287
+ # 2. A pending Android Build ID like: P25748464
+
+ # "It's just string concatenation"
+ string_build_number = '%s%s' % (BRANCH_SPECIFIC_VERSION_IDENTIFIER,
+ str(numeric_build_number).zfill(8))
+ # Ints in python3 are long
+ branched_build_number = int(string_build_number)
+ # Tame the result into a reasonable box, just in case
+ branched_build_number = tame_box(branched_build_number)
+
+ # print('soong_build_number: %s' % soong_build_number)
+ # print('branched_build_number: %s' % str(branched_build_number))
+
+ # Bash version:
+ # cat $1 | \
+ # sed -E "s/\{BUILD_NUMBER\}/$numeric_build_number/g" | \
+ # sed -E "s/\{BUILD_ID\}/$soong_build_number/g" > $2
+ try:
+ if os.path.exists(input_path):
+ input_fh = open(input_path, 'r')
+ contents = input_fh.readlines()
+ # print('Read: %s' % input_path)
+ new_contents = []
+ input_fh.close()
+ for line in contents:
+ line = line.replace('{BUILD_ID}', soong_build_number)
+ line = line.replace('{BUILD_NUMBER}', str(branched_build_number))
+ new_contents.append(line)
+ # print(new_contents)
+ output_fh = open(output_path, 'w')
+ output_fh.write(''.join(new_contents))
+ output_fh.close()
+ # print('Wrote: %s' % output_path)
+ except IOError:
+ print(f'error occurred trying to read the file {input_path}')
+ return 1
+
+ return 0
+
+
+def main():
+ return get_version(*sys.argv[1:])
+
+
+if __name__ == '__main__':
+ sys.exit(main())
+
diff --git a/common/hal/hidl_service/version_script.sh b/common/hal/hidl_service/version_script.sh
deleted file mode 100755
index 2ab4e2b..0000000
--- a/common/hal/hidl_service/version_script.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash
-#
-# This script generates the apex manifest version number (which is also used for
-# the outer aab/jar object's version available to PackageManager).
-#
-# That version is limited to INT_MAX
-# Strategy:
-# if(local eng build)
-# version = 2147480000
-# else
-# version = numeric part of build number
-#
-# 2147480000 is chosen as being a value that can install over any expected build
-# server build number that is still a little smaller than INT_MAX to leave room
-# for maneuvering
-
-default_eng_build_number=2147480000
-
-build_number=$(cat $OUT_DIR/soong/build_number.txt)
-if [[ "$build_number" == "eng."* ]]; then
- numeric_build_number=$default_eng_build_number
-else
- numeric_build_number=$(cat $OUT_DIR/soong/build_number.txt | tr -d -c 0-9)
- if [[ -z "$numeric_build_number" ]]; then
- numeric_build_number=$default_eng_build_number
- fi
- if ((numeric_build_number < 1)); then
- numeric_build_number=1
- fi
- if ((numeric_build_number >= default_eng_build_number)); then
- numeric_build_number=$((default_eng_build_number-1))
- fi
-fi
-
-cat $1 | sed -E "s/\{BUILD_NUMBER\}/$numeric_build_number/g" | sed -E "s/\{BUILD_ID\}/$build_number/g" > $2
-