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