[lockdev-devel] [PATCH 08/10] build: Add git-based version and release scripts

Roger Leigh rleigh at debian.org
Sun Feb 28 00:00:08 UTC 2010


---
 SHLIBS                  |    3 +++
 bootstrap               |   16 ++++++++++++++++
 configure.ac            |   29 ++++++++++++++++++++++++++---
 scripts/git-tag-release |   14 ++++++++++++++
 scripts/git-version     |   26 ++++++++++++++++++++++++++
 src/Makefile.am         |    2 +-
 6 files changed, 86 insertions(+), 4 deletions(-)
 create mode 100644 SHLIBS
 create mode 100755 bootstrap
 create mode 100755 scripts/git-tag-release
 create mode 100755 scripts/git-version

diff --git a/SHLIBS b/SHLIBS
new file mode 100644
index 0000000..8131adb
--- /dev/null
+++ b/SHLIBS
@@ -0,0 +1,3 @@
+LOCKDEV_CURRENT_INTERFACE=1
+LOCKDEV_INTERFACE_AGE=0
+LOCKDEV_BINARY_AGE=0
diff --git a/bootstrap b/bootstrap
new file mode 100755
index 0000000..5583138
--- /dev/null
+++ b/bootstrap
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+set -e
+
+# Generate version information from git release tag
+
+./scripts/git-version > VERSION
+
+# To satisfy automake
+touch ChangeLog
+
+# Bootstrap autotools
+autoreconf --verbose --force --install
+
+rm -rf autom4te.cache
+rm -f config.h.in~
diff --git a/configure.ac b/configure.ac
index 76d613d..533e228 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,14 +1,37 @@
-AC_INIT([lockdev],[1.0.3],[lockdev-devel at lists.alioth.debian.org])
+m4_define([lockdev_m4_chomp],
+[m4_format([[%.*s]], m4_bregexp(m4_translit([$1], [
+]]m4_dquote(_m4_defn([m4_cr_all]))[, [/]]m4_format([%255s], [])[),
+  [/*$]), [$1])])
+m4_define([lockdev_m4_esyscmd_s],
+[lockdev_m4_chomp(m4_esyscmd([$1]))])
+dnl Quoting the first argument results in a bizarrely corrupted package tarname
+AC_INIT(lockdev_m4_esyscmd_s([sed -ne '/^Package:/{s/Package:[[:space:]][[:space:]]*//p;q}' VERSION]),
+        [lockdev_m4_esyscmd_s([sed -ne '/^Version:/{s/Version:[[:space:]][[:space:]]*//p;q}' VERSION])],
+        [lockdev-devel at lists.alioth.debian.org])
 AC_CONFIG_SRCDIR([src/lockdev.c])
-AM_CONFIG_HEADER([config.h])
+AC_CONFIG_AUX_DIR([scripts])
+AC_CONFIG_HEADER([config.h])
 AC_CONFIG_MACRO_DIR([m4])
 
 AC_PREREQ(2.53)
 AC_CANONICAL_HOST
-AM_INIT_AUTOMAKE([1.6 foreign no-dist-gzip dist-bzip2 -Wall])
+
+. "${srcdir}/SHLIBS"
+AC_SUBST([LOCKDEV_CURRENT_INTERFACE])
+AC_SUBST([LOCKDEV_INTERFACE_AGE])
+AC_SUBST([LOCKDEV_BINARY_AGE])
+
+AM_INIT_AUTOMAKE([1.6 gnu no-dist-gzip dist-bzip2 -Wall])
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])],
 	[AC_SUBST([AM_DEFAULT_VERBOSITY], [1])])
 
+RELEASE_DATE='lockdev_m4_esyscmd_s(date --date='lockdev_m4_esyscmd_s([sed -ne '/^Release-Date:/{s/Release-Date:[[:space:]][[:space:]]*//p;q}' VERSION])' '+%s')'
+RELEASE_DATE_S='lockdev_m4_esyscmd_s([sed -ne '/^Release-Date:/{s/Release-Date:[[:space:]][[:space:]]*//p;q}' VERSION])'
+AC_DEFINE_UNQUOTED([RELEASE_DATE_S], ["$RELEASE_DATE_S"], [Package release date (string).])
+AC_DEFINE_UNQUOTED([RELEASE_DATE], [$RELEASE_DATE], [Package release date (integer).])
+AC_SUBST([RELEASE_DATE])
+AC_SUBST([RELEASE_DATE_S])
+
 dnl Checks for programs.
 AC_PROG_CC
 
diff --git a/scripts/git-tag-release b/scripts/git-tag-release
new file mode 100755
index 0000000..fb8a5e8
--- /dev/null
+++ b/scripts/git-tag-release
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -e
+
+PACKAGE="$(sed -ne '/^Welcome to /{s/Welcome to[[:space:]][[:space:]]*\([[:alnum:]][[:alnum:]]*\)[[:space:]][[:space:]]*\([[:alnum:]][[:alnum:].-]*\)\..*/\1/p;q}' < NEWS)"
+VERSION="$(sed -ne '/^Welcome to /{s/Welcome to[[:space:]][[:space:]]*\([[:alnum:]][[:alnum:]]*\)[[:space:]][[:space:]]*\([[:alnum:]][[:alnum:].-]*\)\..*/\2/p;q}' < NEWS)"
+
+if [ -z "$PACKAGE" ] || [ -z "$VERSION" ]; then
+  echo "Error parsing package name and version from NEWS"
+  exit 1
+fi
+
+echo "Tagging ${PACKAGE} version ${VERSION} as 'release/${PACKAGE}-${VERSION}'"
+git tag -s "release/${PACKAGE}-${VERSION}" -m "${PACKAGE} version ${VERSION}"
diff --git a/scripts/git-version b/scripts/git-version
new file mode 100755
index 0000000..1d6e83f
--- /dev/null
+++ b/scripts/git-version
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+PACKAGE="$(sed -ne '/^Welcome to /{s/Welcome to[[:space:]][[:space:]]*\([[:alnum:]][[:alnum:]]*\)[[:space:]][[:space:]]*\([[:alnum:]][[:alnum:].-]*\)\..*/\1/p;q}' < NEWS)"
+VERSION="$(sed -ne '/^Welcome to /{s/Welcome to[[:space:]][[:space:]]*\([[:alnum:]][[:alnum:]]*\)[[:space:]][[:space:]]*\([[:alnum:]][[:alnum:].-]*\)\..*/\2/p;q}' < NEWS)"
+
+TAG="release/${PACKAGE}-${VERSION}"
+COMMIT="$(git rev-parse "$TAG^{}")" 2>/dev/null || COMMIT=""
+
+if [ -n "$COMMIT" ]; then
+    COMMIT_DATE="$(git log -1 "$COMMIT" --pretty="format:%ai")"
+
+    RELEASE_DATE="$(date --date="$COMMIT_DATE" '+%d %b %Y')"
+    RELEASE_BY="$(git show "$TAG" | sed -ne '/^Tagger:/{s/Tagger:[[:space:]][[:space:]]*//p;q}')"
+else
+    RELEASE_DATE="$(date '+%d %b %Y')"
+    RELEASE_BY="Unreleased"
+fi
+
+echo "Package: $PACKAGE"
+echo "Version: $VERSION"
+echo "Release-Date: $RELEASE_DATE"
+echo "Released-By: $RELEASE_BY"
+
+if [ -n "$COMMIT" ]; then
+    echo "Git-Tag: $TAG"
+fi
diff --git a/src/Makefile.am b/src/Makefile.am
index 3b4adda..e0d5b8f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -14,4 +14,4 @@ baudboy_LDADD = liblockdev.la
 lib_LTLIBRARIES = liblockdev.la
 liblockdev_la_SOURCES = lockdev.c
 
-liblockdev_la_LDFLAGS = -version-info 1:3:0
+liblockdev_la_LDFLAGS = -version-info $(LOCKDEV_CURRENT_INTERFACE):$(LOCKDEV_INTERFACE_AGE):$(LOCKDEV_BINARY_AGE)
-- 
1.7.0




More information about the lockdev-devel mailing list