vector: Prevent NULL argument to memcpy.
[asterisk/asterisk.git] / build_tools / make_version
index 6176de2..3e0f4a0 100755 (executable)
 #!/bin/sh
 
+AWK=${AWK:-awk}
+GIT=${GIT:-git}
+GREP=${GREP:-grep}
+MAINLINE_BRANCH=master
+
 if [ -f ${1}/.version ]; then
-       cat ${1}/.version
-elif [ -d .svn ]; then
-    PARTS=`LANG=C svn info ${1} | grep URL | awk '{print $2;}' | sed -e 's:^.*/svn/asterisk/::' | sed -e 's:/: :g'`
+    cat ${1}/.version
+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
     TAG=0
-    
+    FEATURE=0
+
     REV=`svnversion -c ${1} | cut -d: -f2`
-    
-    if [ "${PARTS}" = "trunk" ]
-       then
-       echo SVN-'trunk'-r${REV}
-       exit 0
+
+    INTEGRATED=`LANG=C svn pg automerge-propname ${1}`
+    if [ -z "${INTEGRATED}" ] ; then
+        INTEGRATED=svnmerge-integrated
     fi
-    
-    for PART in $PARTS
-      do
-      if [ ${TAG} != 0 ]
-         then
-         RESULT="${PART}"
-         break
-      fi
-      
-      if [ ${BRANCH} != 0 ]
-         then
-         RESULT="${RESULT}-${PART}"
-         break
-      fi
-      
-      if [ ${TEAM} != 0 ]
-         then
-         RESULT="${RESULT}-${PART}"
-         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
+
+    BASE=`LANG=C svn pg ${INTEGRATED} ${1} | cut -d: -f1`
+
+    if [ "${PARTS}" = "trunk" ] ; then
+        echo SVN-trunk-r${REV}
+        exit 0
+    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
     done
+
+    if [ ${TAG} != 0 ] ; then
+        echo ${RESULT}
+    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
+       cd ${1} 
     
-    if [ ${TAG} != 0 ]
-       then
-       echo ${RESULT}
-       else
-       echo SVN-${RESULT##-}-r${REV}
+    # 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} 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} rev-parse --short --verify HEAD`${MODIFIED}
+        fi
+        echo GIT-${MAINLINE_BRANCH}-${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