[CentOS-devel] [PATCH 2/2] Now (optionally) supports software collections

Thu Jul 10 15:35:54 UTC 2014
Pat Riehecky <riehecky at fnal.gov>

From: Pat Riehecky <riehecky at fnal.gov>

---
 into_srpm.sh |   58 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 51 insertions(+), 7 deletions(-)

diff --git a/into_srpm.sh b/into_srpm.sh
index 4b8c9ea..6ff2260 100755
--- a/into_srpm.sh
+++ b/into_srpm.sh
@@ -20,6 +20,7 @@ usage() {
     echo ' -h: This help message'                         >&2
     echo ' -q: Suppress warnings'                         >&2
     echo ' -t: Set srpm timestamp to commit date'         >&2
+    echo ' -s: Allow building as a SCL style package'     >&2
     echo ''                                               >&2
     echo ' -b: specify a branch to examine'               >&2
     echo "     defaults to repo's current branch"         >&2
@@ -30,7 +31,7 @@ usage() {
     echo "     NOTE: your repo will be set to this commit">&2
     echo ''                                               >&2
     echo "  $0"                                           >&2
-    echo "  $0 -b c7"                                     >&2
+    echo "  $0 -b c7 -t"                                  >&2
     echo "  $0 -b remotes/origin/c7"                      >&2
     echo "  $0 -c 865ae5909b2b5d5fb37971b7ad7960f1fd5a5ffa" >&2
     echo "  $0 -b c7 -c 865ae5909b2b5d5fb37971b7ad7960f1fd5a5ffa" >&2
@@ -41,6 +42,7 @@ usage() {
 
 QUIET=0
 KEEPTIMESTAMP=0
+ALLOWSCL=0
 COMMITHASH=""
 BRANCH=""
 
@@ -49,7 +51,7 @@ BRANCH=""
 # nice and easy.  You'll need to read the manpages for more info
 # utilizing 'while' construct rather than 'for arg' to avoid unnecessary
 # shifting of program args
-args=$(getopt -o htqb:c: -- "$@")
+args=$(getopt -o htsqb:c: -- "$@")
 eval set -- "$args"
 
 while [[ 0 -eq 0 ]]; do
@@ -60,7 +62,7 @@ while [[ 0 -eq 0 ]]; do
             break
            ;;
          -t )
-            # suppress warnings
+            # keep timestamps of commit on srpm
             KEEPTIMESTAMP=1
             shift
            ;;
@@ -69,6 +71,11 @@ while [[ 0 -eq 0 ]]; do
             QUIET=1
             shift
            ;;
+         -s )
+            # try to detect if this was an SCL and build as such
+            ALLOWSCL=1
+            shift
+           ;;
          -c )
             # Use this commit id
             COMMITHASH=$2
@@ -117,6 +124,13 @@ if [[ $? -ne 0 ]]; then
     exit 1
 fi
 
+which show_possible_srpms.sh >/dev/null 2>&1
+if [[ $? -ne 0 ]]; then
+    echo 'You need show_possible_srpms.sh from centos-git-common in PATH' >&2
+    exit 1
+fi
+
+# Set us to requested branch for further operations
 if [[ "x${BRANCH}" != 'x' ]]; then
     if [[ $QUIET -eq 1 ]]; then
         git fetch >/dev/null
@@ -127,6 +141,7 @@ if [[ "x${BRANCH}" != 'x' ]]; then
     fi
 fi
 
+# Set us to requested commit for further operations
 if [[ "x${COMMITHASH}" != 'x' ]]; then
     if [[ $QUIET -eq 1 ]]; then
         git fetch >/dev/null
@@ -137,17 +152,46 @@ if [[ "x${COMMITHASH}" != 'x' ]]; then
     fi
 fi
 
+# Download archive from git.centos.org
 if [[ $QUIET -eq 1 ]]; then
     get_sources.sh
 else
     get_sources.sh -q
 fi
 
-if [[ $QUIET -eq 1 ]]; then
-    rpmbuild --define "%_topdir `pwd`" --define "%dist `return_disttag.sh -q`" -bs --nodeps SPECS/*.spec
+SPECFILE=$(cd SPECS; ls *.spec)
+
+# Determine if we are an SCL
+ISSCL=0
+if [[ ${ALLOWSCL} -eq 1 ]]; then
+    mytestsclname='DA39A3EE5E6B4B0D3255BFEF95601890AFD80709'
+    mysclcheck=$(rpm --define "dist el" --define "scl ${mytestsclname}" -q --specfile "SPECS/${SPECFILE}" --qf '%{n}-%{v}-%{r}\n' 2>/dev/null | head -n 1)
+    echo ${mysclcheck} | grep -q ${mytestsclname}
+    if [[ $? -eq 0 ]]; then
+        ISSCL=1
+        SCLNAME=$(show_possible_srpms.sh | cut -d'-' -f1 | sort -u)
+        if [[ $(echo ${SCLNAME} | wc -l) -ne 1 ]]; then
+            echo "$0 failed to determine unique SCL name" >&2
+            echo "Found:"                                 >&2
+            echo "${SCLNAME}"                             >&2
+        fi
+    fi
+fi
+
+# build our rpmopts list
+RPMOPTS="-bs --nodeps"
+if [[ ${QUIET} -eq 1 ]]; then
+    DIST=$(return_disttag.sh -q)
+else
+    DIST=$(return_disttag.sh)
+fi
+
+# put it all together
+if [[ ${ISSCL} -eq 1 ]]; then
+    rpmbuild --define "%_topdir `pwd`" ${RPMOPTS} --define "%dist ${DIST}" --define "%scl ${SCLNAME}" SPECS/${SPECFILE}
     RC=$?
 else
-    rpmbuild --define "%_topdir `pwd`" --define "%dist `return_disttag.sh`" -bs --nodeps SPECS/*.spec
+    rpmbuild --define "%_topdir `pwd`" ${RPMOPTS} --define "%dist ${DIST}" SPECS/${SPECFILE}
     RC=$?
 fi
 
@@ -157,7 +201,7 @@ if [[ ${KEEPTIMESTAMP} -eq 1 ]]; then
 fi
 
 if [[ ${RC} -ne 0 ]]; then
-    if [[ $QUIET -eq 1 ]]; then
+    if [[ ${QUIET} -eq 1 ]]; then
         echo "$0 failed to recreate srpm" >&2
     fi
     exit 1
-- 
1.7.1