]> git.ipfire.org Git - thirdparty/make.git/commitdiff
* build.sh: Allow a "keep-going" mode during builds
authorPaul Smith <psmith@gnu.org>
Fri, 28 Oct 2022 21:10:28 +0000 (17:10 -0400)
committerPaul Smith <psmith@gnu.org>
Sat, 29 Oct 2022 17:36:21 +0000 (13:36 -0400)
build.sh
maintMakefile

index 4b33812e2c248cbf4f4a095c8dc855887381c875..fdcd964698e9ab4723cb40dee663b201e5c19778 100755 (executable)
--- a/build.sh
+++ b/build.sh
 # 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.
index d8415850470d5fe50c507639398a0520c43cb4e4..fb98a42fdb34a747b613f5acf5a800a7c8bd26f1 100644 (file)
@@ -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