Browse Source

automate setting package version

this avoids the need for bumping the version, which is particularly
helpful if one doesn't know yet whether the next release will be a
patch, minor, or major.

we cache the version extracted from git, which also provides a fallback
for the case of somebody rebuilding configure from a tar-ball.

note that it's impossible to determine the version at configure time, so
after git-tagging you need to remember to run version.sh (or autoconf)
prior to rolling a tar-ball.
master
Oswald Buddenhagen 5 months ago
parent
commit
8421b3cb22
  1. 1
      .gitignore
  2. 2
      Makefile.am
  3. 3
      configure.ac
  4. 36
      version.sh

1
.gitignore vendored

@ -1,6 +1,7 @@
/.autoconf_trace /.autoconf_trace
/ChangeLog /ChangeLog
/INSTALL /INSTALL
/VERSION
/autom4te.cache/ /autom4te.cache/
/aclocal.m4 /aclocal.m4
/autodefs.h /autodefs.h

2
Makefile.am

@ -4,7 +4,7 @@
SUBDIRS = src SUBDIRS = src
bin_SCRIPTS = mbsync-get-cert bin_SCRIPTS = mbsync-get-cert
EXTRA_DIST = LICENSES debian isync.spec $(bin_SCRIPTS) EXTRA_DIST = LICENSES VERSION debian isync.spec $(bin_SCRIPTS)
LOG_PL = \ LOG_PL = \
use POSIX qw(strftime); \ use POSIX qw(strftime); \

3
configure.ac

@ -2,7 +2,8 @@
# SPDX-FileCopyrightText: 2002-2022 Oswald Buddenhagen <ossi@users.sf.net> # SPDX-FileCopyrightText: 2002-2022 Oswald Buddenhagen <ossi@users.sf.net>
dnl SPDX-License-Identifier: GPL-2.0-or-later dnl SPDX-License-Identifier: GPL-2.0-or-later
AC_INIT([isync], [1.5.0]) m4_syscmd([./version.sh])
AC_INIT([isync], m4_include([VERSION]))
AC_CONFIG_HEADERS([autodefs.h]) AC_CONFIG_HEADERS([autodefs.h])
AC_CANONICAL_TARGET AC_CANONICAL_TARGET

36
version.sh

@ -0,0 +1,36 @@
#!/bin/sh
# SPDX-FileCopyrightText: (C) 2024 Oswald Buddenhagen <ossi@users.sf.net>
# SPDX-License-Identifier: GPL-2.0-or-later
cd $(dirname $0)
test -e .git || exit
mb=$(git merge-base HEAD "@{upstream}" 2> /dev/null)
if test -z "$mb"; then
# we presume that a failure to find a merge base means no upstream.
# and no upstream may mean detached head in the middle of a rebase
br=$(git branch | sed -n -e 's/^\* (no branch, rebasing \([^\)]*\))$/\1/p')
if test -n "$br"; then
mb=$(git merge-base HEAD "$br@{upstream}" 2> /dev/null)
fi
fi
if test -z "$mb"; then
# still no upstream, so just describe HEAD as-is.
gver=$(git describe --tags HEAD)
else
# find out whether we have local work, and if so, collapse it into
# a single suffix. otherwise, we'd cause pointless rebuilds during
# development.
gver=$(git describe --tags $mb)
lcl=$(git rev-list -n 1 $mb..HEAD)
if test -n "$lcl"; then
gver="$gver-plus"
fi
fi
gver=${gver#v}
pgver=$(cat VERSION 2> /dev/null)
if [ "x$gver" != "x$pgver" ]; then
echo "$gver" > VERSION
fi
Loading…
Cancel
Save