summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico Huber <nico.h@gmx.de>2024-03-16 01:00:46 +0100
committerMartin L Roth <gaumless@gmail.com>2024-03-17 20:08:44 +0000
commit0db9c2c827ceade8627887a723022c390f2d800b (patch)
treebc5064aadb0d9200d490c61a009c3c3d40df9efe
parent0a280ff747b44d7a2a62206ea0c25dbcbc5ce20b (diff)
downloadcoreboot-24.02_branch.tar.gz
coreboot-24.02_branch.tar.bz2
coreboot-24.02_branch.zip
genbuild_h: Fix and harden major/minor version parsing24.02_branch
Our major version is suddenly two digits long to represent the year. This can't be parsed with the current sed scripts. To make sure that no unparsed data ends up in our major/minor versions, we'll run sed with `-n' and only print the extracted numbers if anything. Also, to allow us to use the version numbers in C code, we strip leading zeros (a leading 0 identifies octal numbers, so for instance 08 for August is not a valid number). This can result in empty major/minor version strings, so we move the default `0' to the final variable expansion. As a bonus, this makes an explicit check if the numbers can be parsed unnecessary. Change-Id: Ie39381a8ef4b971556168b6996efeefe6adf2b14 Reported-by: Christoph Zechner <christophz@vrvis.at> Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/81291 Reviewed-by: Martin L Roth <gaumless@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rwxr-xr-xutil/genbuild_h/genbuild_h.sh20
1 files changed, 8 insertions, 12 deletions
diff --git a/util/genbuild_h/genbuild_h.sh b/util/genbuild_h/genbuild_h.sh
index 2bfcc4c3b662..b381ab27767b 100755
--- a/util/genbuild_h/genbuild_h.sh
+++ b/util/genbuild_h/genbuild_h.sh
@@ -6,8 +6,8 @@ DATE=""
GITREV=""
TIMESOURCE=""
XGCCPATH="${XGCCPATH:-util/crossgcc/xgcc/bin/}"
-MAJOR_VER="0"
-MINOR_VER="0"
+MAJOR_VER=""
+MINOR_VER=""
COREBOOT_VERSION_FILE=".coreboot-version"
export LANG=C
@@ -36,19 +36,15 @@ elif [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then
TIMESOURCE=git
DATE="$(get_git_head_data %ct)"
VERSION="$(git describe)"
- # Only use the `git describe` output if the tag is in the expected <major>.<minor>
- # format, e.g. 4.18. Forks of coreboot may have other tags in different formats.
- if echo "${VERSION}" | grep -q "^[0-9]\.[0-9][0-9]*"; then
- MAJOR_VER="$(echo "${VERSION}" | sed 's/\([0-9]\)\.\([0-9][0-9]*\).*/\1/')"
- MINOR_VER="$(echo "${VERSION}" | sed 's/\([0-9]\)\.\([0-9][0-9]*\).*/\2/')"
- fi
+ MAJOR_VER="$(echo "${VERSION}" | sed -n 's/^0*\([0-9]*\)\.0*\([0-9]*\).*/\1/p')"
+ MINOR_VER="$(echo "${VERSION}" | sed -n 's/^0*\([0-9]*\)\.0*\([0-9]*\).*/\2/p')"
else
GITREV=Unknown
TIMESOURCE="date"
DATE=$(LANG="" LC_ALL=C TZ=UTC0 date +%s)
if [ -f "${COREBOOT_VERSION_FILE}" ]; then
- MAJOR_VER="$(sed 's/\([0-9]\)\.\([0-9][0-9]*\).*/\1/' "${COREBOOT_VERSION_FILE}")"
- MINOR_VER="$(sed 's/\([0-9]\)\.\([0-9][0-9]*\).*/\2/' "${COREBOOT_VERSION_FILE}")"
+ MAJOR_VER="$(sed -n 's/^0*\([0-9]*\)\.0*\([0-9]*\).*/\1/p' "${COREBOOT_VERSION_FILE}")"
+ MINOR_VER="$(sed -n 's/^0*\([0-9]*\)\.0*\([0-9]*\).*/\2/p' "${COREBOOT_VERSION_FILE}")"
fi
fi
@@ -84,8 +80,8 @@ printf "#define COREBOOT_VERSION_TIMESTAMP %s\n" "${DATE}"
printf "#define COREBOOT_ORIGIN_GIT_REVISION \"%s\"\n" "${GITREV}"
printf "#define COREBOOT_EXTRA_VERSION \"%s\"\n" "${COREBOOT_EXTRA_VERSION}"
-printf "#define COREBOOT_MAJOR_VERSION %s\n" "${MAJOR_VER}"
-printf "#define COREBOOT_MINOR_VERSION %s\n" "${MINOR_VER}"
+printf "#define COREBOOT_MAJOR_VERSION %s\n" "${MAJOR_VER:-0}"
+printf "#define COREBOOT_MINOR_VERSION %s\n" "${MINOR_VER:-0}"
printf "#define COREBOOT_BUILD \"%s\"\n" "$(our_date "${DATE}" "+%a %b %d %H:%M:%S %Z %Y")"
printf "#define COREBOOT_BUILD_YEAR_BCD 0x%s\n" "$(our_date "${DATE}" "+%y")"
printf "#define COREBOOT_BUILD_MONTH_BCD 0x%s\n" "$(our_date "${DATE}" "+%m")"