summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2013-03-22 14:46:11 -0700
committerBrian Behlendorf <[email protected]>2013-03-22 14:52:01 -0700
commitf6fb7651a0d05b357dc179cc4853263ce15da6ed (patch)
tree7777405089f73437ec3e5790b63620ff67b6e2d5
parent09fb1ec48a38ad3ade722a1ad39f9ac73ea2b308 (diff)
Use 'git describe' for working builds
When building from an arbitrary commit in the git tree it's useful for the resulting packages to be uniquely identifiable. Therefore, the build system has been updated to detect if your compiling in git tree. If you are building in a git tree, and there are commits after the last annotated tag. Then the <id>-<hash> component of 'git describe' will be used to overwrite the 'Release:' field in the META file. The only tricky part is that to ensure the 'make dist' tarball is built using the correct release. A dist-hook was added to the top level make file to rewrite the META file using the correct release. Signed-off-by: Brian Behlendorf <[email protected]>
-rw-r--r--Makefile.am4
-rw-r--r--config/zfs-meta.m434
2 files changed, 28 insertions, 10 deletions
diff --git a/Makefile.am b/Makefile.am
index 6bf013ec9..18ad36d2b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -33,6 +33,10 @@ distclean-local::
-o -name '*.order' -o -name '*.markers' \) \
-type f -print | xargs $(RM)
+dist-hook:
+ sed -i 's/Release:[[:print:]]*/Release: $(RELEASE)/' \
+ $(distdir)/META
+
ctags:
$(RM) $(top_srcdir)/tags
find $(top_srcdir) -name .git -prune -o -name '*.[hc]' | xargs ctags
diff --git a/config/zfs-meta.m4 b/config/zfs-meta.m4
index a961657cd..2deda715d 100644
--- a/config/zfs-meta.m4
+++ b/config/zfs-meta.m4
@@ -1,10 +1,14 @@
-dnl #
-dnl # ZFS_AC_META
-dnl # Read metadata from the META file.
-dnl #
-dnl # AUTHOR:
-dnl # Chris Dunlap <[email protected]>
-dnl #
+###############################################################################
+# Written by Chris Dunlap <[email protected]>.
+# Modified by Brian Behlendorf <[email protected]>.
+###############################################################################
+# ZFS_AC_META: Read metadata from the META file. When building from a
+# git repository the ZFS_META_RELEASE field will be overwritten if there
+# is an annotated tag matching the form ZFS_META_NAME-ZFS_META_VERSION-*.
+# This allows for working builds to be uniquely identified using the git
+# commit hash.
+###############################################################################
+
AC_DEFUN([ZFS_AC_META], [
AH_BOTTOM([
@@ -20,9 +24,9 @@ AC_DEFUN([ZFS_AC_META], [
AC_MSG_CHECKING([metadata])
META="$srcdir/META"
- _zfs_ac_meta_got_file=no
+ _zfs_ac_meta_type="none"
if test -f "$META"; then
- _zfs_ac_meta_got_file=yes
+ _zfs_ac_meta_type="META file"
ZFS_META_NAME=_ZFS_AC_META_GETVAL([(?:NAME|PROJECT|PACKAGE)]);
if test -n "$ZFS_META_NAME"; then
@@ -41,6 +45,16 @@ AC_DEFUN([ZFS_AC_META], [
fi
ZFS_META_RELEASE=_ZFS_AC_META_GETVAL([RELEASE]);
+ if git rev-parse --git-dir > /dev/null 2>&1; then
+ _match="${ZFS_META_NAME}-${ZFS_META_VERSION}*"
+ _alias=$(git describe --match=${_match} 2>/dev/null)
+ _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g')
+ if test -n "${_release}"; then
+ ZFS_META_RELEASE=${_release}
+ _zfs_ac_meta_type="git describe"
+ fi
+ fi
+
if test -n "$ZFS_META_RELEASE"; then
AC_DEFINE_UNQUOTED([ZFS_META_RELEASE], ["$ZFS_META_RELEASE"],
[Define the project release.]
@@ -116,7 +130,7 @@ AC_DEFUN([ZFS_AC_META], [
fi
fi
- AC_MSG_RESULT([$_zfs_ac_meta_got_file])
+ AC_MSG_RESULT([$_zfs_ac_meta_type])
]
)