summaryrefslogtreecommitdiff
path: root/build.sh
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2022-10-28 17:10:28 -0400
committerPaul Smith <psmith@gnu.org>2022-10-29 13:36:21 -0400
commit92789aa2e7586450b1a202f0e451445264b5fbbd (patch)
treee0380b84f0537a36be2f38eeee5b7c2364a7fcea /build.sh
parent4e18732a1d6be8720615b18408cbd0d0195b5b6e (diff)
downloadmake-git-92789aa2e7586450b1a202f0e451445264b5fbbd.tar.gz
* build.sh: Allow a "keep-going" mode during builds
Diffstat (limited to 'build.sh')
-rwxr-xr-xbuild.sh43
1 files changed, 34 insertions, 9 deletions
diff --git a/build.sh b/build.sh
index 4b33812e..fdcd9646 100755
--- a/build.sh
+++ b/build.sh
@@ -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.