]> 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:42:53 +0000 (19:42 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 18 Oct 2012 19:42:53 +0000 (19:42 +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

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

Makefile
build_tools/make_version
configure
configure.ac
makeopts.in

index 8e5537f73761f5fa57800f4e6acb2bcd98e2df06..ef7e1b1f0d84704f70e6a0a948355b66a9f4835f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -204,7 +204,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 51f582898634b0826d61b855590d767335e1515b..7ed8974289af3e1e12b1c8a72eda1660744cfbb8 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.ac Revision: 361955 .
+# From configure.ac Revision: 371012 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.63 for asterisk trunk.
 #
@@ -1067,6 +1067,7 @@ PBX_FLEX
 PBX_BISON
 DOWNLOAD
 FETCH
+GIT
 XMLSTARLET
 XMLLINT
 KPATHSEA
@@ -8250,6 +8251,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 aa93f96299411d110c1c8e947a1de6657d17c593..4c7a2157578163ed0d973aaf9bf167fc2fef712f 100644 (file)
@@ -255,6 +255,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 f4a7de261686c557cc1fc2f02b5b833160dd4847..6418428cc26e07681e3494c1693d9815bb4c97e8 100644 (file)
@@ -34,6 +34,7 @@ XMLSTARLET=@XMLSTARLET@
 MD5=@MD5@
 SHA1SUM=@SHA1SUM@
 OPENSSL=@OPENSSL@
+GIT=@GIT@
 
 BUILD_PLATFORM=@BUILD_PLATFORM@
 BUILD_CPU=@BUILD_CPU@