]> granicus.if.org Git - zfs/commitdiff
Use 'git describe' for working builds
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 22 Mar 2013 21:46:11 +0000 (14:46 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 22 Mar 2013 21:52:01 +0000 (14:52 -0700)
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 <behlendorf1@llnl.gov>
Makefile.am
config/zfs-meta.m4

index 6bf013ec9fae3f03e46e1a32b46a9d5123394db9..18ad36d2ba21f8eef1946f5cf541c984f4d78b9a 100644 (file)
@@ -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
index a961657cdb72087b912db6fe3944306a535238b8..2deda715dadc362226bc4b711893fb264655cd03 100644 (file)
@@ -1,10 +1,14 @@
-dnl #
-dnl # ZFS_AC_META
-dnl # Read metadata from the META file.
-dnl #
-dnl # AUTHOR:
-dnl # Chris Dunlap <cdunlap@llnl.gov>
-dnl #
+###############################################################################
+# Written by Chris Dunlap <cdunlap@llnl.gov>.
+# Modified by Brian Behlendorf <behlendorf1@llnl.gov>.
+###############################################################################
+# 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])
        ]
 )