diff options
author | Paul Smith <psmith@gnu.org> | 2022-10-28 17:10:28 -0400 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2022-10-29 13:36:21 -0400 |
commit | 92789aa2e7586450b1a202f0e451445264b5fbbd (patch) | |
tree | e0380b84f0537a36be2f38eeee5b7c2364a7fcea | |
parent | 4e18732a1d6be8720615b18408cbd0d0195b5b6e (diff) | |
download | make-git-92789aa2e7586450b1a202f0e451445264b5fbbd.tar.gz |
* build.sh: Allow a "keep-going" mode during builds
-rwxr-xr-x | build.sh | 43 | ||||
-rw-r--r-- | maintMakefile | 2 |
2 files changed, 35 insertions, 10 deletions
@@ -20,6 +20,11 @@ # Get configure-generated values . ./build.cfg +die () { echo "$*" 1>&2; exit 1; } +usage () { echo "$0 [-k]"; exit $1; } + +keep_going=false + : ${OUTDIR:=.} OUTLIB="$OUTDIR/lib" @@ -55,6 +60,7 @@ get_mk_var () # Compile source files. Object files are put into $objs. compile () { + success=true objs= for ofile in "$@"; do # We should try to use a Makefile variable like libgnu_a_SOURCES or @@ -65,10 +71,18 @@ compile () esac echo "compiling $file..." of="$OUTDIR/$ofile" - mkdir -p "${of%/*}" - $CC $cflags $CPPFLAGS $CFLAGS -c -o "$of" "$top_srcdir/$file" + mkdir -p "${of%/*}" || exit 1 + if $CC $cflags $CPPFLAGS $CFLAGS -c -o "$of" "$top_srcdir/$file"; then + : worked + else + $keep_going || die "Compilation failed." + success=false + fi + objs="${objs:+$objs }$of" done + + $success } # Use config.status to convert a .in file. Output file is put into $out. @@ -130,28 +144,39 @@ done # Get object files from the Makefile OBJS=$(get_mk_var Makefile make_OBJECTS | sed "s=\$[\(\{]OBJEXT[\)\}]=$OBJEXT=g") -# Exit as soon as any command fails. -set -e +while test -n "$1"; do + case $1 in + (-k) keep_going=true; shift ;; + (--) shift; break ;; + (-[h?]) usage 0 ;; + (-*) echo "Unknown option: $1"; usage 1 ;; + esac +done + +test -z "$1" || die "Unknown argument: $*" # Generate gnulib header files that would normally be created by make +set -e for b in $(get_mk_var lib/Makefile BUILT_SOURCES); do convert $b done +set +e # Build the gnulib library cflags="$DEFS -I$OUTLIB -Ilib -I$top_srcdir/lib -I$OUTDIR/src -Isrc -I$top_srcdir/src" -compile $LIBOBJS +compile $LIBOBJS || die "Compilation failed." echo "creating libgnu.a..." -$AR $ARFLAGS "$OUTLIB"/libgnu.a $objs +$AR $ARFLAGS "$OUTLIB"/libgnu.a $objs || die "Archive of libgnu failed." # Compile the source files into those objects. cflags="$DEFS $defines -I$OUTDIR/src -Isrc -I$top_srcdir/src -I$OUTLIB -Ilib -I$top_srcdir/lib" -compile $OBJS +compile $OBJS || die "Compilation failed." # Link all the objects together. echo "linking make..." -$CC $CFLAGS $LDFLAGS -L"$OUTLIB" $objs -lgnu $LOADLIBES -o "$OUTDIR/makenew$EXEEXT" -mv -f "$OUTDIR/makenew$EXEEXT" "$OUTDIR/make$EXEEXT" +$CC $CFLAGS $LDFLAGS -L"$OUTLIB" -o "$OUTDIR/makenew$EXEEXT" $objs -lgnu $LOADLIBES || die "Link failed." + +mv -f "$OUTDIR/makenew$EXEEXT" "$OUTDIR/make$EXEEXT" || exit 1 echo done. diff --git a/maintMakefile b/maintMakefile index d8415850..fb98a42f 100644 --- a/maintMakefile +++ b/maintMakefile @@ -295,7 +295,7 @@ NR_MAKE = $(MAKE) # Check builds both with build.sh and with make build.sh_SCRIPT = exec >>'checkcfg.$*.log' 2>&1; set -x; \ cd $(distdir)/_build \ - && OUTDIR=_bld ../build.sh $(CFGCHECK_BUILD_FLAGS) \ + && OUTDIR=_bld ../build.sh -k $(CFGCHECK_BUILD_FLAGS) \ && _bld/make GMK_OUTDIR=../_bld $(AM_MAKEFLAGS) check-local \ && _bld/make GMK_OUTDIR=../_bld $(AM_MAKEFLAGS) clean |