]> git.ipfire.org Git - thirdparty/make.git/commitdiff
* build.template: Rewrite to allow gnulib support.
authorPaul Smith <psmith@gnu.org>
Sat, 7 Sep 2019 16:12:41 +0000 (12:12 -0400)
committerPaul Smith <psmith@gnu.org>
Sun, 8 Sep 2019 00:12:44 +0000 (20:12 -0400)
build.template

index 538cb9f6130bbcf4991195f4bc1aaf4b236e17f1..2eb2b63037e8423c042dcc19d7e32b205a3cb889 100644 (file)
 LIBOBJDIR=lib/
 U=
 
-top_srcdir="@top_srcdir@"
-CC="@CC@"
-CFLAGS="@CFLAGS@ @GUILE_CFLAGS@"
-CPPFLAGS="@CPPFLAGS@"
-LDFLAGS="@AM_LDFLAGS@ @LDFLAGS@"
-ALLOCA="@ALLOCA@"
-LOADLIBES="@LIBS@ @GUILE_LIBS@ @LIBINTL@"
-LIBOBJS="@LIBOBJS@"
-REMOTE="@REMOTE@"
-OBJEXT="@OBJEXT@"
-EXEEXT="@EXEEXT@"
-
-# Use our old-style glob implementation
-test x"@USE_SYSTEM_GLOB@" = xno && LIBOBJS="${LIBOBJS} ${LIBOBJDIR}fnmatch.$OBJEXT ${LIBOBJDIR}glob.$OBJEXT"
+top_srcdir='@top_srcdir@'
+CC='@CC@'
+AR='@AR@'
+CFLAGS='@CFLAGS@ @GUILE_CFLAGS@'
+CPPFLAGS='@CPPFLAGS@'
+DEFS='@DEFS@'
+ARFLAGS='@ARFLAGS@'
+LDFLAGS='@AM_LDFLAGS@ @LDFLAGS@'
+ALLOCA='@ALLOCA@'
+LOADLIBES='@LIBS@ @GUILE_LIBS@ @LIBINTL@'
+REMOTE='@REMOTE@'
+OBJEXT='@OBJEXT@'
+EXEEXT='@EXEEXT@'
 
 # Common prefix for machine-independent installed files.
-prefix="@prefix@"
+prefix='@prefix@'
 # Common prefix for machine-dependent installed files.
 exec_prefix=`eval echo @exec_prefix@`
 # Directory to find libraries in for '-lXXX'.
-libdir=${exec_prefix}/lib
+libdir=$exec_prefix/lib
 # Directory to search by default for included makefiles.
-includedir=${prefix}/include
+includedir=$prefix/include
 
-localedir=${prefix}/share/locale
+localedir=$prefix/share/locale
 
-defines="-DLOCALEDIR=\"${localedir}\" -DLIBDIR=\"${libdir}\" -DINCLUDEDIR=\"${includedir}\" @DEFS@"
+defines="-DLOCALEDIR=\"$localedir\" -DLIBDIR=\"$libdir\" -DINCLUDEDIR=\"$includedir\""
+
+# Look up a make variable value
+# It can handle very simple recursion, where variables are separate words
+get_mk_var ()
+{
+  file=$1
+  var=$2
+
+  val=
+  v=$(sed -e :a -e '/\\$/N; s/\\\n//; ta' "$file" | sed -n "s=^ *$var *\= *==p")
+  for w in $v; do
+      case $w in
+          (\$[\(\{]*[\)\}]) w=${w#\$[\(\{]}; w=$(get_mk_var "$file" "${w%[\)\}]}") ;;
+      esac
+      val="${val:+$val }$w"
+  done
+
+  printf %s "$val"
+}
+
+# Get source files provided from gnulib
+LIBOBJS=
+for lc in $(get_mk_var lib/Makefile libgnu_a_SOURCES); do
+  case $lc in
+    (*.c) LIBOBJS="${LIBOBJS:+$LIBOBJS }$LIBOBJDIR${lc%.c}.$OBJEXT" ;;
+    (*)   echo ignore $lc ;;
+  esac
+done
+
+compile ()
+{
+  objs=
+  for ofile in "$@"; do
+    file=${ofile%.$OBJEXT}.c
+    echo "compiling $file..."
+    mkdir -p _bldobj/${file%/*}
+    of=_bldobj/$ofile
+    $CC $defines $DEFS $CPPFLAGS $CFLAGS -c -o "$of" \
+      -Isrc -I"$top_srcdir"/src -Ilib -I"$top_srcdir"/lib "$top_srcdir/$file"
+    objs="${objs:+$objs }$of"
+  done
+}
 
 # Exit as soon as any command fails.
 set -e
 
-# These are all the objects we need to link together.
-objs="%objs% src/remote-${REMOTE}.${OBJEXT} ${LIBOBJS}"
+rm -rf _bldobj
+mkdir _bldobj
 
-case $LIBOBJS in
-    (*alloca*) cp "$top_srcdir"/lib/alloca.in.h lib/alloca.h ;;
-esac
-case $LIBOBJS in
-    (*fnmatch*) cp "$top_srcdir"/lib/fnmatch.in.h lib/fnmatch.h ;;
-esac
-case $LIBOBJS in
-    (*glob*) cp "$top_srcdir"/lib/glob.in.h lib/glob.h ;;
-esac
+# Build the gnulib library
+compile $LIBOBJS
 
-# Compile the source files into those objects.
-for file in `echo ${objs} | sed 's/\.'${OBJEXT}'/.c/g'`; do
-  echo compiling ${file}...
-  $CC $defines $CPPFLAGS $CFLAGS \
-      -c -Isrc -I"$top_srcdir"/src -Ilib -I"$top_srcdir"/lib "$top_srcdir"/$file
-done
+echo creating libgnu.a...
+$AR $ARFLAGS _bldobj/lib/libgnu.a $objs
 
-# The object files were actually all put in the current directory.
-# Remove the source directory names from the list.
-srcobjs="$objs"
-objs=
-for obj in $srcobjs; do
-  objs="$objs `basename $obj`"
-done
+# Compile the source files into those objects.
+compile %objs% src/remote-$REMOTE.$OBJEXT
 
 # Link all the objects together.
 echo linking make...
-$CC $CFLAGS $LDFLAGS $objs $LOADLIBES -o makenew${EXEEXT}
+$CC $CFLAGS $LDFLAGS -L_bldobj/lib $objs -lgnu $LOADLIBES -o makenew$EXEEXT
 echo done
-mv -f makenew${EXEEXT} make${EXEEXT}
+mv -f makenew$EXEEXT make$EXEEXT