]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
build_tools: Allow Asterisk to report git SHAs in version string.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 18 Oct 2012 19:53:08 +0000 (19:53 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 18 Oct 2012 19:53:08 +0000 (19:53 +0000)
Make git more attractive for managing work-in-progress.  Especially
convenient when a potential patch set needs to be tested on multiple
platforms since one can use git to keep all the test environments in sync
independent of a subversion server.

Now the Asterisk version will show the exact git SHA5 that was used when
building (still appended by "M" if there are local modifications) from a
git clone of the Asterisk repository so the developer can more easily know
what is actually under test.

You will now get this:

  $ asterisk -V
  Asterisk GIT-1698298

Instead of this:

  $ asterisk -V
  Asterisk UNKNOWN__and_probably_unsupported

This has zero impact for those not using git with the exception of an
extra test in the configure script to gather git's path.  This is
necessary to prevent "sudo make install" from failing since git may not be
in the path in make's shell environment.

(closes issue ASTERISK-20483)
Reported by: Shaun Ruffell
Patches:
      0001-build_tools-Allow-Asterisk-to-report-git-SHAs-in-ver.patch (license #5417) patch uploaded by Shaun Ruffell
      Modified
........

Merged revisions 375189 from http://svn.asterisk.org/svn/asterisk/branches/1.8

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@375190 65c4cc65-6c06-0410-ace0-fbb531ad65f3

Makefile
build_tools/make_version
configure
configure.ac
makeopts.in

index 1386f2c47d7b2a70ad4678445996c13828c317b7..8dc2663fac898fa67a07f0e0f171ecd7628e0605 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -208,7 +208,7 @@ ifeq ($(OSARCH),SunOS)
   _ASTCFLAGS+=-Wcast-align -DSOLARIS -I../include/solaris-compat -I/opt/ssl/include -I/usr/local/ssl/include -D_XPG4_2 -D__EXTENSIONS__
 endif
 
-ASTERISKVERSION:=$(shell GREP=$(GREP) AWK=$(AWK) build_tools/make_version .)
+ASTERISKVERSION:=$(shell GREP=$(GREP) AWK=$(AWK) GIT=$(GIT) build_tools/make_version .)
 
 ifneq ($(wildcard .version),)
   ASTERISKVERSIONNUM:=$(shell $(AWK) -F. '{printf "%01d%02d%02d", $$1, $$2, $$3}' .version)
index d81325f78879eacb79bfd159d01c5916dc22d991..de0b97e1a3b80adee1febc9f65e61a0bb8abd90e 100755 (executable)
@@ -2,7 +2,7 @@
 
 if [ -f ${1}/.version ]; then
     cat ${1}/.version
-elif [ -d .svn ]; then
+elif [ -d ${1}/.svn ]; then
     PARTS=`LANG=C svn info ${1} | ${GREP} URL | ${AWK} '{print $2;}' | sed -e 's:^.*/svn/asterisk/::' | sed -e 's:/: :g'`
     BRANCH=0
     TEAM=0
@@ -36,11 +36,7 @@ elif [ -d .svn ]; then
         fi
 
         if [ ${BRANCH} != 0 ] ; then
-            if [ -z "${RESULT}" ] ; then
-                RESULT="${PART}"
-            else
-                RESULT="${RESULT}-${PART}"
-            fi
+            RESULT="${RESULT}-${PART}"
             if [ ${FEATURE} != 0 ] ; then
                 RESULT="${RESULT}-${FEATURE_NAME}"
             fi
@@ -84,6 +80,104 @@ elif [ -d .svn ]; then
     else
         echo SVN-${RESULT}-r${REV}${BASE:+-${BASE}}
     fi
+elif [ -d ${1}/.git ]; then
+    if [ -z ${GIT} ]; then
+        GIT="git"
+    fi
+
+    if ! command -v ${GIT} >/dev/null 2>&1; then
+        echo "UNKNOWN__and_probably_unsupported"
+        exit 1
+    fi
+    # If the first log commit messages indicates that this is checked into
+    # subversion, we'll just use the SVN- form of the revision.
+    MODIFIED=""
+    SVN_REV=`${GIT} log --pretty=full -1 | grep -F "git-svn-id:" | sed -e "s/.*\@\([^\s]*\)\s.*/\1/g"`
+    if [ -z "$SVN_REV" ]; then
+        VERSION=GIT-`${GIT} describe --long --always --tags --dirty=M 2> /dev/null`
+        if [ $? -ne 0 ]; then
+            if [ "`${GIT} ls-files -m | wc -l`" != "0" ]; then
+                MODIFIED="M"
+            fi
+            # Some older versions of git do not support all the above
+            # options.
+            VERSION=GIT-`${GIT} rev-parse --short --verify HEAD`${MODIFIED}
+        fi
+        echo ${VERSION}
+    else
+        PARTS=`LANG=C ${GIT} log --pretty=full | grep -F "git-svn-id:" | head -1 | awk '{print $2;}' | sed -e s:^.*/svn/$2/:: | sed -e 's:/: :g' | sed -e 's/@.*$//g'`
+        BRANCH=0
+        TEAM=0
+        TAG=0
+        FEATURE=0
+
+        if [ "`${GIT} ls-files -m | wc -l`" != "0" ]; then
+            MODIFIED="M"
+        fi
+
+        for PART in $PARTS ; do
+            if [ ${TAG} != 0 ] ; then
+                if [ "${PART}" = "autotag_for_be" ] ; then
+                    continue
+                fi
+                if [ "${PART}" = "autotag_for_sx00i" ] ; then
+                    continue
+                fi
+                RESULT="${PART}"
+                break
+            fi
+
+            if [ ${BRANCH} != 0 ] ; then
+                RESULT="${RESULT}-${PART}"
+                if [ ${FEATURE} != 0 ] ; then
+                    RESULT="${RESULT}-${FEATURE_NAME}"
+                fi
+                break
+            fi
+
+            if [ ${TEAM} != 0 ] ; then
+                if [ -z "${RESULT}" ] ; then
+                    RESULT="${PART}"
+                else
+                    RESULT="${RESULT}-${PART}"
+                fi
+                continue
+            fi
+
+            if [ "${PART}" = "certified" ] ; then
+                FEATURE=1
+                FEATURE_NAME="cert"
+                continue
+            fi
+
+            if [ "${PART}" = "branches" ] ; then
+                BRANCH=1
+                RESULT="branch"
+                continue
+            fi
+
+            if [ "${PART}" = "tags" ] ; then
+                TAG=1
+                continue
+            fi
+
+            if [ "${PART}" = "team" ] ; then
+                TEAM=1
+                continue
+            fi
+
+            if [ "${PART}" = "trunk" ]; then
+                echo SVN-trunk-r${SVN_REV}${MODIFIED}
+                exit 0
+            fi
+        done
+
+        if [ ${TAG} != 0 ] ; then
+            echo ${RESULT}
+        else
+            echo SVN-${RESULT##-}-r${SVN_REV}${MODIFIED}
+        fi
+    fi
 else
     echo "UNKNOWN__and_probably_unsupported"
 fi
index ff6d378e70a0ef8c53174ae1990652e84086d650..8ff5e4881b100fcacd8d98751d81f718d88f939c 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.ac Revision: 361956 .
+# From configure.ac Revision: 371013 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.63 for asterisk trunk.
 #
@@ -1079,6 +1079,7 @@ PBX_FLEX
 PBX_BISON
 DOWNLOAD
 FETCH
+GIT
 XMLSTARLET
 XMLLINT
 KPATHSEA
@@ -7393,6 +7394,47 @@ $as_echo "no" >&6; }
 fi
 
 
+# Extract the first word of "git", so it can be a program name with args.
+set dummy git; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GIT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $GIT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GIT="$GIT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GIT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_GIT" && ac_cv_path_GIT=":"
+  ;;
+esac
+fi
+GIT=$ac_cv_path_GIT
+if test -n "$GIT"; then
+  { $as_echo "$as_me:$LINENO: result: $GIT" >&5
+$as_echo "$GIT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
 if test "${WGET}" != ":" ; then
   DOWNLOAD=${WGET}
 else if test "${CURL}" != ":" ; then
index cd6a550ea100f0aa435e30a9f998baa6d1c77731..d13ed0d199b0ccc0e4d6bf1f519939f7aedc35a7 100644 (file)
@@ -261,6 +261,7 @@ AC_PATH_PROG([CATDVI], [catdvi], :)
 AC_PATH_PROG([KPATHSEA], [kpsewhich], :)
 AC_PATH_PROG([XMLLINT], [xmllint], :)
 AC_PATH_PROG([XMLSTARLET], [xmlstarlet], :)
+AC_PATH_PROG([GIT], [git], :)
 if test "${WGET}" != ":" ; then
   DOWNLOAD=${WGET}
 else if test "${CURL}" != ":" ; then
index 9c4ae0c02a01e16bad6987d986850312b2885a38..f1cf1ae885cb1d3957854b466bc10e28082c2733 100644 (file)
@@ -34,6 +34,7 @@ XMLSTARLET=@XMLSTARLET@
 MD5=@MD5@
 SHA1SUM=@SHA1SUM@
 OPENSSL=@OPENSSL@
+GIT=@GIT@
 
 BUILD_PLATFORM=@BUILD_PLATFORM@
 BUILD_CPU=@BUILD_CPU@