Drop 'unknown' suffix in runtime version

Yi Zhao yi.zhao at windriver.com
Thu May 29 04:28:18 CEST 2025


On 5/27/25 22:20, Werner Koch wrote:
> 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 ;-)


Thank you for the explanation, much appreciated.


//Yi


>
>
> Salam-Shalom,
>
>     Werner
>
>



More information about the Gnupg-devel mailing list