as released as part of build91
[pspp] / make-bin-dist.as
index 40d20bac474289756dab02db47504b992dcd2172..113fe4943aeb0f6e012f02ae4c9eb0e6172b757f 100644 (file)
@@ -1,4 +1,4 @@
-# -* autoconf -*-
+# -*- autoconf -*-
 
 BP_INIT
 
@@ -39,6 +39,7 @@ overwrite=false
 remote=
 CONFIGUREFLAGS=
 n_envvars=0
+check=true
 
 # Parse command line.
 while test $# -gt 0 ; do
@@ -72,6 +73,10 @@ while test $# -gt 0 ; do
        CONFIGUREFLAGS=$2
        shift; shift ;;
 
+    --no-check )
+       check=false
+       shift ;;
+
     -- )     # Stop option processing
        shift; break ;;
     -* )
@@ -102,6 +107,13 @@ if test ! -e "$tarball"; then
    AS_ERROR([$tarball does not exist])
 fi
 
+case $BINID in # (
+  *[!-_.+~a-zA-Z0-9]*)
+    exec >&2
+    AS_ERROR([invalid binid $BINID])
+    ;;
+esac
+
 REMOTE_HOST=
 REMOTE_DIR=
 case $remote in # (
@@ -128,13 +140,14 @@ if test "X$REMOTE_HOST" != X; then
   if test "x$CONFIGUREFLAGS" != x; then
     options="--configureflags='"`escape "$CONFIGUREFLAGS"`\'
   fi
+  $check || options="$options --no-check"
   $overwrite && options="$options --force"
 
   i=0
   while test $i -lt $n_envvars; do
     AS_VAR_ARITH([i], [$i + 1])
     AS_VAR_COPY([tmp], [env$i])
-    options="$options '"`escape "$tmp"`"\'
+    options="$options '"`escape "$tmp"`\'
   done
   shift
 
@@ -144,15 +157,18 @@ if test "X$REMOTE_HOST" != X; then
   exit $rc
 fi
 
-if test -e "$BINID"; then
-  if test $overwrite = true; then
-    chmod -R u+w "$BINID"
-    rm -rf "$BINID"
-  else
-    exec >&2
-    AS_ERROR([$BINID exists and --force not specified])
+for dir in $BINID $BINID.buildtmp; do
+  if test -e $dir; then
+    if $overwrite; then
+      chmod -R u+w $dir
+      rm -rf $dir
+    else
+      exec >&2
+      AS_ERROR([$dir exists and --force not specified])
+    fi
   fi
-fi
+  mkdir $dir || { exec >&2; AS_ERROR([failed to create $dir]); }
+done
 
 BP_INIT_RESULTS([$BINID])
 BP_INIT_LOG([$BINID/LOG])
@@ -175,16 +191,33 @@ if test X$DIST_DIR = X; then
 fi
 
 BP_START_STEP([Extracting source tarball])
-BP_RUN([zcat $tarball | tar xf - >&AS_MESSAGE_LOG_FD 2>&1])
+BP_RUN([(cd $BINID.buildtmp && zcat ../$tarball | tar xf -) >&AS_MESSAGE_LOG_FD 2>&1])
 
 BP_START_STEP([Extracting tar version])
-DIST_VERSION=`$DIST_DIR/configure --version 2>/dev/null | sed 1q | sed 's/.* //'`
+DIST_VERSION=`$BINID.buildtmp/$DIST_DIR/configure --version 2>/dev/null | sed 1q | sed 's/.* //'`
 BP_SET_VAR([DIST_VERSION])
 
+BP_START_STEP([Checking for GNU make])
+case `(make --version | sed 1q) 2>/dev/null` in # (
+  "GNU Make"*) GNU_MAKE=true ;;
+  *) GNU_MAKE=false ;;
+esac
+BP_SET_VAR([GNU_MAKE])
+
 BP_START_STEP([Configuring])
-BP_RUN([mkdir $DIST_DIR/_$BINID >&AS_MESSAGE_LOG_FD 2>&1])
-BP_RUN([chmod -R a-w $DIST_DIR >&AS_MESSAGE_LOG_FD 2>&1])
-BP_RUN([chmod u+w $DIST_DIR/_$BINID >&AS_MESSAGE_LOG_FD 2>&1])
+srcdir=$BINID.buildtmp/$DIST_DIR
+if $GNU_MAKE; then
+  builddir=$srcdir/_$BINID
+  rel_srcdir=..
+  BP_RUN([mkdir $builddir >&AS_MESSAGE_LOG_FD 2>&1])
+  BP_RUN([chmod -R a-w $srcdir >&AS_MESSAGE_LOG_FD 2>&1])
+  BP_RUN([chmod u+w $builddir >&AS_MESSAGE_LOG_FD 2>&1])
+else
+  builddir=$srcdir
+  rel_srcdir=.
+  BP_RUN([find $builddir -type f -print | xargs chmod u-w >&AS_MESSAGE_LOG_FD 2>&1])
+  BP_RUN([chmod u+w $builddir >&AS_MESSAGE_LOG_FD 2>&1])
+fi
 
 set x
 i=0
@@ -195,46 +228,50 @@ while test $i -lt $n_envvars; do
 done
 shift
 
-BP_TRY_RUN([(cd $DIST_DIR/_$BINID && ../configure --enable-relocatable --prefix='' $CONFIGUREFLAGS "$@") >&AS_MESSAGE_LOG_FD 2>&1])
+BP_TRY_RUN([(cd $builddir && $rel_srcdir/configure --enable-relocatable --prefix='' $CONFIGUREFLAGS "$@") >&AS_MESSAGE_LOG_FD 2>&1])
 _bp_status=$?
 for base in config.h config.log; do
-  fn=$DIST_DIR/_$BINID/$base
+  fn=$builddir/$base
   if test -e "$fn"; then
     BP_COPY_OUTPUT([build configuration], [$fn])
   fi
 done
 if test $_bp_status != 0; then
   AS_ECHO(["$as_me:$LINENO: command exited with status $_bp_status"]) >&AS_MESSAGE_LOG_FD
+  exit 1
 fi
 
 BP_START_STEP([Build])
-BP_RUN([(cd $DIST_DIR/_$BINID && make) >&AS_MESSAGE_LOG_FD 2>&1])
+BP_RUN([(cd $builddir && make) >&AS_MESSAGE_LOG_FD 2>&1])
 
 BP_START_STEP([Install])
-BP_RUN([(cd $DIST_DIR/_$BINID && make install DESTDIR=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
+BP_RUN([(cd $builddir && make install DESTDIR=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
 
 BP_START_STEP([Make binary distribution])
-BP_RUN([(cd $DIST_DIR/_$BINID && tar cfz pspp-$DIST_VERSION-$BINID.tar.gz pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
-BP_MOVE_OUTPUT([binary distribution], [$DIST_DIR/_$BINID/pspp-$DIST_VERSION-$BINID.tar.gz])
-
-BP_START_STEP([Check])
-BP_TRY_RUN([(cd $DIST_DIR/_$BINID && make check) >&AS_MESSAGE_LOG_FD 2>&1])
-_bp_status=$?
-for base in tests/testsuite.log tests/testsuite.dir; do
-  fn=$DIST_DIR/_$BINID/$base
-  if test -e "$fn"; then
-    BP_MOVE_OUTPUT([test logs], [$fn])
+BP_RUN([(cd $builddir && tar cfz pspp-$DIST_VERSION-$BINID.tar.gz pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
+BP_MOVE_OUTPUT([binary distribution], [$builddir/pspp-$DIST_VERSION-$BINID.tar.gz])
+
+if $check; then
+  BP_START_STEP([Check])
+  BP_TRY_RUN([(cd $builddir && make check) >&AS_MESSAGE_LOG_FD 2>&1])
+  _bp_status=$?
+  for base in tests/testsuite.log tests/testsuite.dir; do
+    fn=$builddir/$base
+    if test -e "$fn"; then
+      BP_MOVE_OUTPUT([test logs], [$fn])
+    fi
+  done
+  if test $_bp_status != 0; then
+    AS_ECHO(["$as_me:$LINENO: command exited with status $_bp_status"]) >&AS_MESSAGE_LOG_FD
+    exit 1
   fi
-done
-if test $_bp_status != 0; then
-  AS_ECHO(["$as_me:$LINENO: command exited with status $_bp_status"]) >&AS_MESSAGE_LOG_FD
 fi
 
 BP_START_STEP([Uninstall])
-BP_RUN([(cd $DIST_DIR/_$BINID && make uninstall DESTDIR=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
+BP_RUN([(cd $builddir && make uninstall DESTDIR=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
 
 BP_START_STEP([Check uninstall])
-BP_RUN([(cd $DIST_DIR/_$BINID && make distuninstallcheck distuninstallcheck_dir=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
+BP_RUN([(cd $builddir && make distuninstallcheck distuninstallcheck_dir=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
 
 # distcleancheck