summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrevor Woerner <twoerner@gmail.com>2012-01-27 18:27:12 -0500
committerGaetan Nadon <memsize@videotron.ca>2012-01-31 19:52:02 -0500
commitf6ebb6cfdc647250971bb9bea2ce91e345d0fc8e (patch)
treeb8bc00e690d9bdb6d47363854e9e9436601c91c1
parentdf48aa187ce209a7519d309ecf7f50c1a9de30a3 (diff)
build.sh: better integrate --autoresume and -n
The --autoresume <file> option allows a user to specify a <file> into which the build prints each module/component it has built. When a subsequent build is restarted with <file>, the build can skip all previously built modules, start with the last one (which is assumed to have failed previously), and continue on. The -n option allows a build to continue with subsequent modules even if one or more of the modules fails to build correctly. With this change, in addition to updating the --autoresume <file> with the name of the module/component just built, <file> is also updated with the status of the build. Therefore if you use -n you will have an --autoresume <file> which lists the build status of all the modules you wanted to build. A subsequent build using the --autoresume <file> will scan <file> looking for failures and attempt to build them before continuing on with the build from the end of the list. Signed-off-by: Trevor Woerner <twoerner@gmail.com> Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
-rwxr-xr-xbuild.sh95
1 files changed, 83 insertions, 12 deletions
diff --git a/build.sh b/build.sh
index b5cc2cc..4be3a19 100755
--- a/build.sh
+++ b/build.sh
@@ -407,9 +407,6 @@ process() {
failed "$GITCMD" $module $component
return 1
fi
- if [ X"$BUILT_MODULES_FILE" != X ]; then
- echo "$module/$component" >> $BUILT_MODULES_FILE
- fi
return 0
fi
@@ -478,9 +475,6 @@ process() {
failed "$MAKE $MAKEFLAGS $MAKECMD" $module $component
return 1
fi
- if [ X"$BUILT_MODULES_FILE" != X ]; then
- echo "$module/$component" >> $BUILT_MODULES_FILE
- fi
return 0
fi
@@ -542,10 +536,6 @@ process() {
cd ${old_pwd}
- if [ X"$BUILT_MODULES_FILE" != X ]; then
- echo "$module/$component" >> $BUILT_MODULES_FILE
- fi
-
return 0
}
@@ -578,11 +568,21 @@ build() {
fi
process $module "$component" "$confopts"
- if [ $? -ne 0 ]; then
+ process_rtn=$?
+ if [ X"$BUILT_MODULES_FILE" != X ]; then
+ if [ $process_rtn -ne 0 ]; then
+ echo "FAIL: $module/$component" >> $BUILT_MODULES_FILE
+ else
+ echo "PASS: $module/$component" >> $BUILT_MODULES_FILE
+ fi
+ fi
+
+ if [ $process_rtn -ne 0 ]; then
echo "build.sh: error processing module/component: \"$module/$component\""
if [ X"$NOQUIT" = X ]; then
exit 1
fi
+ return $process_rtn
fi
if [ X"$BUILD_ONE" != X ]; then
@@ -1219,7 +1219,6 @@ do
required_arg $1 $2
shift
BUILT_MODULES_FILE=$1
- [ -f $1 ] && RESUME=`tail -n 1 $1`
;;
--check)
CHECK=1
@@ -1308,6 +1307,78 @@ if [ X"$LISTONLY" = X ]; then
date
fi
+# if there is a BUILT_MODULES_FILE
+# then start off by checking for and trying to build any modules which failed
+# and aren't the last line
+if [ X"$BUILT_MODULES_FILE" != X -a -r $BUILT_MODULES_FILE ]; then
+ built_lines=`cat $BUILT_MODULES_FILE | wc -l | sed 's:^ *::'`
+ built_lines_m1=`expr $built_lines - 1`
+ orig_BUILT_MODULES_FILE=$BUILT_MODULES_FILE
+ unset BUILT_MODULES_FILE
+ curline=1
+ while read line; do
+ built_status=`echo $line | cut -c-6`
+ if [ X"$built_status" = X"FAIL: " ]; then
+ line=`echo $line | cut -c7-`
+ module=`echo $line | cut -d' ' -f1 | cut -d'/' -f1`
+ component=`echo $line | cut -d' ' -f1 | cut -d'/' -f2`
+ confopts_check=`echo $line | cut -d' ' -f2-`
+ if [ "$module/$component" = "$confopts_check" ]; then
+ confopts=""
+ else
+ confopts="$confopts_check"
+ fi
+
+ build_ret=""
+
+ # quick check for the module in $MODFILE (if present)
+ if [ X"$MODFILE" = X ]; then
+ build $module "$component" "$confopts"
+ if [ $? -eq 0 ]; then
+ build_ret="PASS"
+ fi
+ else
+ cat $MODFILE | grep "$module/$component" > /dev/null
+ if [ $? -eq 0 ]; then
+ build $module "$component" "$confopts"
+ if [ $? -eq 0 ]; then
+ build_ret="PASS"
+ fi
+ fi
+ fi
+
+ if [ X"$build_ret" = X"PASS" ]; then
+ built_temp=`mktemp`
+ if [ $? -ne 0 ]; then
+ echo "can't create tmp file, $orig_BUILT_MODULES_FILE not modified"
+ else
+ head -n `expr $curline - 1` $orig_BUILT_MODULES_FILE > $built_temp
+ echo "PASS: $module/$component" >> $built_temp
+ tail -n `expr $built_lines - $curline` $orig_BUILT_MODULES_FILE >> $built_temp
+ mv $built_temp $orig_BUILT_MODULES_FILE
+ fi
+ fi
+ fi
+ if [ $curline -eq $built_lines_m1 ]; then
+ break
+ fi
+ curline=`expr $curline + 1`
+ done <"$orig_BUILT_MODULES_FILE"
+
+ BUILT_MODULES_FILE=$orig_BUILT_MODULES_FILE
+ RESUME=`tail -n 1 $BUILT_MODULES_FILE | cut -c7-`
+
+ # remove last line of $BUILT_MODULES_FILE
+ # to avoid a duplicate entry
+ built_temp=`mktemp`
+ if [ $? -ne 0 ]; then
+ echo "can't create tmp file, last built item will be duplicated"
+ else
+ head -n $built_lines_m1 $BUILT_MODULES_FILE > $built_temp
+ mv $built_temp $BUILT_MODULES_FILE
+ fi
+fi
+
if [ X"$MODFILE" = X ]; then
# We must install the global macros before anything else
build util macros