[PATCH v2 modular] build.sh: better integrate --autoresume and -n

Gaetan Nadon memsize at videotron.ca
Fri Jan 27 15:12:13 PST 2012


On 12-01-27 05:49 PM, Trevor Woerner wrote:
> From: Trevor Woerner <twoerner at gmail.com>
>
> 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 at gmail.com>
> ---
>  build.sh |   95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
>  1 files changed, 83 insertions(+), 12 deletions(-)
>
> diff --git a/build.sh b/build.sh
> index b5cc2cc..c754329 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`
This should be wc -l | sed 's:^ *::' as I learned from Jeremy. Some
platforms will return spaces before the number. It may or may not affect
your code.

I'll need some time to test this out. Thanks, it is a great feature.
> +    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



More information about the xorg-devel mailing list