Drop 'unknown' suffix in runtime version
Werner Koch
wk at gnupg.org
Tue May 27 16:20:16 CEST 2025
On Tue, 27 May 2025 10:43, Yi Zhao said:
> Thanks for your response. May I know why gnupg adds this suffix? As
> far as I know, it is not uncommon to re-run autoreconf on the tarball.
To know which version this is. This helps us in supporting the
software. The mechanism to add such a suffix is integratred into the
Beta version number construction code found in ./autogen.sh:
--8<---------------cut here---------------start------------->8---
# This is a helper for the configure.ac M4 magic
# Called
# ./autogen.sh --find-version PACKAGE MAJOR MINOR [MICRO]
# returns a complete version string with automatic beta numbering.
if [ "$myhost" = "find-version" ]; then
package="$1"
major="$2"
minor="$3"
micro="$4"
if [ -z "$package" -o -z "$major" -o -z "$minor" ]; then
echo "usage: ./autogen.sh --find-version PACKAGE MAJOR MINOR [MICRO]" >&2
exit 1
fi
if [ -z "$micro" ]; then
matchstr1="$package-$major.[0-9]*"
matchstr2="$package-$major-base"
matchstr3=""
vers="$major.$minor"
else
matchstr1="$package-$major.$minor.[0-9]*"
matchstr2="$package-$major.[0-9]*-base"
matchstr3="$package-$major-base"
vers="$major.$minor.$micro"
fi
matchexcl="--exclude $package-*beta*"
beta=no
if [ -e .git ]; then
ingit=yes
tmp=$(git describe --match "${matchstr1}" $matchexcl --long 2>/dev/null)
if [ -n "$tmp" ]; then
tmp=$(echo "$tmp" | sed s/^"$package"// \
| awk -F- '$3!=0 && $3 !~ /^beta/ {print"-beta"$3}')
else
# (due tof "-base" in the tag we need to take the 4th field)
tmp=$(git describe --match "${matchstr2}" $matchexcl --long 2>/dev/null)
if [ -n "$tmp" ]; then
tmp=$(echo "$tmp" | sed s/^"$package"// \
| awk -F- '$4!=0 && $4 !~ /^beta/ {print"-beta"$4}')
elif [ -n "${matchstr3}" ]; then
tmp=$(git describe --match "${matchstr3}" $matchexcl --long 2>/dev/null)
if [ -n "$tmp" ]; then
tmp=$(echo "$tmp" | sed s/^"$package"// \
| awk -F- '$4!=0 && $4 !~ /^beta/ {print"-beta"$4}')
fi
fi
fi
[ -n "$tmp" ] && beta=yes
cid=$(git rev-parse --verify HEAD | tr -d '\n\r')
rev=$(git rev-parse --short HEAD | tr -d '\n\r')
rvd=$((0x$(echo ${rev} | dd bs=1 count=4 2>/dev/null)))
else
ingit=no
beta=yes
tmp="-unknown"
cid="0000000"
rev="0000000"
rvd="0"
fi
echo "$package-$vers$tmp:$beta:$ingit:$vers$tmp:$vers:$tmp:$rev:$rvd:$cid:"
exit 0
fi
--8<---------------cut here---------------end--------------->8---
Thus if you run it from git, git will be used to construct a beta
version number using the describe mechanism along with some tags. If no
git is there we can't do this but in this case you should also not
reconstruct configure - if you do "-unknown" is appended.
When processing configure.ac with autoconf M4 macros are executed and
they will run helper tool (e.g. "./autogen.sh --find-version"). The
result of of the autoconf run and the output of the helper tools is then
baked into the constructed configure.
Running autoreconf can be done, but this may result in different built
source code than what has been distributed. Don't do it unless you are
prepared to handle the problems ;-)
Salam-Shalom,
Werner
--
The pioneers of a warless world are the youth that
refuse military service. - A. Einstein
-------------- next part --------------
A non-text attachment was scrubbed...
Name: openpgp-digital-signature.asc
Type: application/pgp-signature
Size: 247 bytes
Desc: not available
URL: <https://lists.gnupg.org/pipermail/gnupg-devel/attachments/20250527/4aa6f898/attachment.sig>
More information about the Gnupg-devel
mailing list