[PATCH modular 03/10] Centralize build mode logic.

Trevor Woerner twoerner at gmail.com
Thu Sep 30 14:26:50 PDT 2010


From: Trevor Woerner <twoerner at gmail.com>

Place into one location the logic to decide what to do with regards to
the following build modes: LISTONLY, RESUME, NOQUIT, and BUILD_ONE.

Signed-off-by: Trevor Woerner <twoerner at gmail.com>
---
 build.sh |  163 ++++++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 116 insertions(+), 47 deletions(-)

diff --git a/build.sh b/build.sh
index 3a57561..2bfcebb 100755
--- a/build.sh
+++ b/build.sh
@@ -66,12 +66,8 @@ nonexistent_components=""
 clonefailed_components=""
 
 failed() {
-    if [ X"${NOQUIT}" != X ]; then
-	echo "***** $1 failed on $2/$3"
-	failed_components="$failed_components $2/$3"
-    else
-	exit 1
-    fi
+    echo "***** $1 failed on $2/$3"
+    failed_components="$failed_components $2/$3"
 }
 
 # print a pretty title to separate the processing of each module
@@ -147,12 +143,18 @@ checkfortars() {
                     if [ X"$jj" = X"gz" ]; then
                         TAROPTS=xzf
                     fi
-                    tar $TAROPTS $TARFILE -C $ii || failed tar $1 $2
+                    tar $TAROPTS $TARFILE -C $ii
+		    if [ $? -ne 0 ]; then
+			failed tar $1 $2
+			return 1
+		    fi
                 fi
-                return
+                return 0
             fi
         done
     done
+
+    return 0
 }
 
 clone() {
@@ -190,21 +192,8 @@ clone() {
     return 0
 }
 
-build() {
-    if [ X"$LISTONLY" != X ]; then
-	echo "$1/$2"
-	return 0
-    fi
-
-    if [ X"$RESUME" != X ]; then
-	if [ X"$RESUME" = X"$1/$2" ]; then
-	    unset RESUME
-	    # Resume build at this module
-	else
-	    echo "Skipping $1 module component $2..."
-	    return 0
-	fi
-    fi
+process() {
+    local rtn
 
     module_title $1 $2
 
@@ -218,10 +207,7 @@ build() {
         if [ $? -ne 0 ]; then
             echo "Failed to clone $1 module component $2. Ignoring."
             clonefailed_components="$clonefailed_components $1/$2"
-            if [ X"$BUILD_ONE" != X ]; then
-                exit 1
-            fi
-            return
+            return 1
         fi
         SRCDIR="$1/$2"
         CONFCMD="autogen.sh"
@@ -233,7 +219,7 @@ build() {
     if [ X"$SRCDIR" = X ]; then
         echo "$1 module component $2 does not exist, skipping."
         nonexistent_components="$nonexistent_components $1/$2"
-        return
+        return 0
     fi
 
     if [ X"$BUILT_MODULES_FILE" != X ]; then
@@ -241,38 +227,56 @@ build() {
     fi
 
     old_pwd=`pwd`
-    cd $SRCDIR || failed cd1 $1 $2
+    cd $SRCDIR
+    if [ $? -ne 0 ]; then
+	failed cd1 $1 $2
+	return 1
+    fi
 
     if [ X"$GITCMD" != X ]; then
 	$GITCMD
-	if [ $? -ne 0 ]; then
-	    failed "$GITCMD $1 $2"
-	fi
+	rtn=$?
 	cd $old_pwd
 
-	if [ X"$BUILD_ONE" != X ]; then
-	    echo "Single-component git command complete"
-	    exit 0
+	if [ $rtn -ne 0 ]; then
+	    failed "$GITCMD" $1 $2
+	    return 1
 	fi
 	return 0
     fi
 
     if [ X"$PULL" != X ]; then
-	git pull --rebase || failed "git pull" $1 $2
+	git pull --rebase
+	if [ $? -ne 0 ]; then
+	    failed "git pull" $1 $2
+	    cd $old_pwd
+	    return 1
+	fi
     fi
 
     # Build outside source directory
     if [ X"$DIR_ARCH" != X ] ; then
-	mkdir -p "$DIR_ARCH" || failed mkdir $1 $2
-	if cd "$DIR_ARCH" ; then :; else
+	mkdir -p "$DIR_ARCH"
+	if [ $? -ne 0 ]; then
+	    failed mkdir $1 $2
+	    cd $old_pwd
+	    return 1
+	fi
+	cd "$DIR_ARCH"
+	if [ $? -ne 0 ]; then
 	    failed cd2 $1 $2
 	    cd ${old_pwd}
-	    return
+	    return 1
 	fi
     fi
 
     if [ X"$MAKECMD" != X ]; then
-	$MAKECMD || failed "$MAKECMD" $1 $2
+	$MAKECMD
+	if [ $? -ne 0 ]; then
+	    failed "$MAKECMD" $1 $2
+	    cd $old_pwd
+	    return 1
+	fi
     else
 	# Special configure flags for certain modules
 	MOD_SPECIFIC=
@@ -290,27 +294,92 @@ build() {
 	if [ X"$NOAUTOGEN" = X ]; then
 	    sh ${DIR_CONFIG}/${CONFCMD} --prefix=${PREFIX} ${LIB_FLAGS} \
 		${MOD_SPECIFIC} ${QUIET:+--quiet} \
-		${CACHE:+--cache-file=}${CACHE} ${CONFFLAGS} "$CONFCFLAGS" || \
+		${CACHE:+--cache-file=}${CACHE} ${CONFFLAGS} "$CONFCFLAGS"
+	    if [ $? -ne 0 ]; then
 		failed ${CONFCMD} $1 $2
+		cd $old_pwd
+		return 1
+	    fi
 	fi
-	${MAKE} $MAKEFLAGS || failed make $1 $2
+
+	${MAKE} $MAKEFLAGS
+	if [ $? -ne 0 ]; then
+	    failed make $1 $2
+	    cd $old_pwd
+	    return 1
+	fi
+
 	if [ X"$CHECK" != X ]; then
-	    ${MAKE} $MAKEFLAGS check || failed check $1 $2
+	    ${MAKE} $MAKEFLAGS check
+	    if [ $? -ne 0 ]; then
+		failed check $1 $2
+		cd $old_pwd
+		return 1
+	    fi
 	fi
+
 	if [ X"$CLEAN" != X ]; then
-	    ${MAKE} $MAKEFLAGS clean || failed clean $1 $2
+	    ${MAKE} $MAKEFLAGS clean
+	    if [ $? -ne 0 ]; then
+		failed clean $1 $2
+		cd $old_pwd
+		return 1
+	    fi
 	fi
+
 	if [ X"$DIST" != X ]; then
-	    ${MAKE} $MAKEFLAGS dist || failed dist $1 $2
+	    ${MAKE} $MAKEFLAGS dist
+	    if [ $? -ne 0 ]; then
+		failed dist $1 $2
+		cd $old_pwd
+		return 1
+	    fi
 	fi
+
 	if [ X"$DISTCHECK" != X ]; then
-	    ${MAKE} $MAKEFLAGS distcheck || failed distcheck $1 $2
+	    ${MAKE} $MAKEFLAGS distcheck
+	    if [ $? -ne 0 ]; then
+		failed distcheck $1 $2
+		cd $old_pwd
+		return 1
+	    fi
 	fi
-	$SUDO env LD_LIBRARY_PATH=$LD_LIBRARY_PATH ${MAKE} $MAKEFLAGS install || \
+
+	$SUDO env LD_LIBRARY_PATH=$LD_LIBRARY_PATH ${MAKE} $MAKEFLAGS install
+	if [ $? -ne 0 ]; then
 	    failed install $1 $2
+	    cd $old_pwd
+	    return 1
+	fi
     fi
 
     cd ${old_pwd}
+    return 0
+}
+
+build() {
+    if [ X"$LISTONLY" != X ]; then
+	echo "$1/$2"
+	return 0
+    fi
+
+    if [ X"$RESUME" != X ]; then
+	if [ X"$RESUME" = X"$1/$2" ]; then
+	    unset RESUME
+	    # Resume build at this module
+	else
+	    echo "Skipping $1 module component $2..."
+	    return 0
+	fi
+    fi
+
+    process $1 $2
+    if [ $? -ne 0 ]; then
+	echo "error processing module/component:  \"$1/$2\""
+	if [ X"$NOQUIT" = X ]; then
+	    exit 1
+	fi
+    fi
 
     if [ X"$BUILD_ONE" != X ]; then
 	echo "Single-component build complete"
-- 
1.7.3.1.45.g9855b



More information about the xorg-devel mailing list