From: Richard Mudgett Date: Thu, 18 Oct 2012 19:53:08 +0000 (+0000) Subject: build_tools: Allow Asterisk to report git SHAs in version string. X-Git-Tag: 10.11.0-rc1~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c7a5ba4a44752fcf158bde7bc1d156a05f7c92c7;p=thirdparty%2Fasterisk.git build_tools: Allow Asterisk to report git SHAs in version string. 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 --- diff --git a/Makefile b/Makefile index 1386f2c47d..8dc2663fac 100644 --- 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) diff --git a/build_tools/make_version b/build_tools/make_version index d81325f788..de0b97e1a3 100755 --- a/build_tools/make_version +++ b/build_tools/make_version @@ -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 diff --git a/configure b/configure index ff6d378e70..8ff5e4881b 100755 --- 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 diff --git a/configure.ac b/configure.ac index cd6a550ea1..d13ed0d199 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/makeopts.in b/makeopts.in index 9c4ae0c02a..f1cf1ae885 100644 --- a/makeopts.in +++ b/makeopts.in @@ -34,6 +34,7 @@ XMLSTARLET=@XMLSTARLET@ MD5=@MD5@ SHA1SUM=@SHA1SUM@ OPENSSL=@OPENSSL@ +GIT=@GIT@ BUILD_PLATFORM=@BUILD_PLATFORM@ BUILD_CPU=@BUILD_CPU@