From 48f7e96652a19782e340a0c20eaa0bc984139073 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 6 Jun 2010 12:53:27 -0700 Subject: [PATCH] now can build source and binary --- .gitignore | 6 +- Makefile.am | 12 +-- build-pspp.m4 | 36 +++++-- make-bin-dist.as | 166 +++++++++++++++++++++++++++++++ make-binary.as | 93 ----------------- dist-pspp.as => make-src-dist.as | 0 6 files changed, 203 insertions(+), 110 deletions(-) create mode 100644 make-bin-dist.as delete mode 100644 make-binary.as rename dist-pspp.as => make-src-dist.as (100%) diff --git a/.gitignore b/.gitignore index 0dfdc0024d..685509605d 100644 --- a/.gitignore +++ b/.gitignore @@ -10,8 +10,10 @@ /config.log /config.status /configure -/dist-pspp -/dist-pspp.in +/make-bin-dist +/make-bin-dist.in +/make-src-dist +/make-src-dist.in /make-builder /make-builder.in /repo.git/ diff --git a/Makefile.am b/Makefile.am index bd28503e0f..4102ff5166 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,18 +1,18 @@ AUTOMAKE_OPTIONS = foreign -dist_noinst_DATA = make-builder.as dist-pspp.as #build-pspp.as +dist_noinst_DATA = make-builder.as make-src-dist.as make-bin-dist.as dist_noinst_SCRIPTS = make-builder -dist_noinst_DATA += dist-pspp.in #build-pspp.in +dist_noinst_DATA += make-src-dist.in make-bin-dist.in AUTOM4TE = autom4te make-builder.in: make-builder.as $(AUTOM4TE) --language M4sh make-builder.as -o $@ -dist-pspp.in: dist-pspp.as build-pspp.m4 - $(AUTOM4TE) --language build-pspp dist-pspp.as -o $@ -#build-pspp.in: build-pspp.as build-pspp.m4 -# $(AUTOM4TE) --language build-pspp build-pspp.as -o $@ +make-src-dist.in: make-src-dist.as make-pspp.m4 + $(AUTOM4TE) --language make-pspp make-src-dist.as -o $@ +make-bin-dist.in: make-bin-dist.as make-pspp.m4 + $(AUTOM4TE) --language make-pspp make-bin-dist.as -o $@ edit = sed \ -e 's|@VERSION[@]|$(VERSION)|g' \ diff --git a/build-pspp.m4 b/build-pspp.m4 index 7f1f3fa126..2068f7a172 100644 --- a/build-pspp.m4 +++ b/build-pspp.m4 @@ -1,3 +1,5 @@ +# -*- autoconf -*- + m4_define([_m4_divert(INIT_PREPARE)], 300) m4_pattern_forbid([^_?BP_]) @@ -55,9 +57,14 @@ exec AS_MESSAGE_FD>&1 # BP_START_STEP([MESSAGE]) m4_define([BP_START_STEP], [AS_ECHO(["$1"]) -AS_ECHO([" @&t@ -$1"]) >&AS_MESSAGE_LOG_FD -]) +{ + _bp_line=`AS_ECHO("$1") | sed 's/./-/g'` + echo + AS_ECHO("@%:@@%:@ $_bp_line @%:@@%:@") + AS_ECHO("@%:@@%:@ $1 @%:@@%:@") + AS_ECHO("@%:@@%:@ $_bp_line @%:@@%:@") + echo +} >&AS_MESSAGE_LOG_FD]) # BP_SET_VAR(VARIABLE, [VALUE]) m4_define([BP_SET_VAR], @@ -69,7 +76,8 @@ AS_ECHO([" $1=$[$1]"])]) # BP_OUTPUT(DESCRIPTION, FILE) m4_define([BP_OUTPUT], -[BP_START_STEP([Saving `AS_BASENAME([$2])`: $1])]) +[_bp_basename=`AS_BASENAME([$2])` +BP_START_STEP([Saving $_bp_basename: $1])]) # BP_MOVE_OUTPUT(DESCRIPTION, FILE) m4_define([BP_MOVE_OUTPUT], @@ -81,8 +89,8 @@ m4_define([BP_COPY_OUTPUT], [BP_OUTPUT([$1], [$2]) BP_RUN([cp -R $2 results/ >&AS_MESSAGE_LOG_FD 2>&1])]) -# BP_RUN_LOG(COMMAND) -m4_define([BP_RUN_LOG], +# BP_TRY_RUN(COMMAND) +m4_define([BP_TRY_RUN], [cat <<_BP_EOF >&AS_MESSAGE_LOG_FD $as_me:$LINENO: $1 _BP_EOF @@ -91,14 +99,24 @@ $1 # BP_RUN(COMMAND) m4_define([BP_RUN], -[BP_RUN_LOG([$1]) +[BP_TRY_RUN([$1]) _bp_status=$? if test $_bp_status != 0; then - AS_ECHO(["Build failed, refer to BP_LOG_FILE for details"]) AS_ECHO(["$as_me:$LINENO: command exited with status $_bp_status"]) >&AS_MESSAGE_LOG_FD - AS_EXIT([1]) + BP_FAIL fi]) +# BP_FAIL +m4_define([BP_FAIL], +[BP_ERROR(["Build failed, refer to BP_LOG_FILE for details"])]) + # BP_FINISH m4_define([BP_FINISH], [BP_START_STEP([success])]) + +# BP_ERROR(MESSAGE) +m4_define([BP_ERROR], + [{ + exec >&2 + AS_ERROR([$1]) + }]) diff --git a/make-bin-dist.as b/make-bin-dist.as new file mode 100644 index 0000000000..742f2bf8d7 --- /dev/null +++ b/make-bin-dist.as @@ -0,0 +1,166 @@ +# -* autoconf -*- + +BP_INIT([make-binary.log]) + +usage=["\ +Usage: $0 [OPTION]... PSPP_DIST.TAR.GZ +where PSPP_DIST.TAR.GZ is a PSPP tarball prepared by \"make dist\". + +Options: + -b, --binid=BINID Use BINID to identify binary. + -h, --help Print this usage message and exit + -f, --force Delete existing directory instead of aborting + +Report bugs to . +GNU PSPP: . +General help using GNU software: ."] + +version=["\ +make-binary (@PACKAGE_NAME@) @VERSION@ +Copyright (C) 2010 Free Software Foundation, Inc. +License GPLv3+/Autoconf: GNU GPL version 3 or later +, +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Written by Ben Pfaff."] + +help="\ +Try \`$as_me --help' for more information." + +exit_missing_arg=' + m4_bpatsubst([AS_ERROR([option `$[1]' requires an argument$as_nl$help])], + ['], ['\\''])' +# restore font-lock: ' + +# Variables. +overwrite=false +BINID= + +# Parse command line. +while test $# -gt 0 ; do + option=[`expr "x$1" : 'x\(--[^=]*\)' \| \ + "x$1" : 'x\(-.\)'`] + optarg=[`expr "x$1" : 'x--[^=]*=\(.*\)' \| \ + "x$1" : 'x-.\(.*\)'`] + case $1 in + --version | -V ) + echo "$version" ; exit ;; + --help | -h ) + AS_ECHO(["$usage"]); exit ;; + + --force | -f ) + overwrite=true ;; + + --binid=* | -b?* ) + BINID=$optarg + shift ;; + --binid | -b ) + test $# = 1 && eval "$exit_missing_arg" + BINID=$2 + shift; shift ;; + + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + exec >&2 + AS_ERROR([invalid option `$[1]'$as_nl$help]) ;; #` + * ) + break ;; + esac +done + +# Find the input file. +case $# in + 1) + tarball=$1 + ;; + *) exec >&2 + AS_ERROR([invalid number of arguments$as_nl$help]) ;; +esac + +if test ! -e "$tarball"; then + exec >&2 + AS_ERROR([$tarball does not exist]) +fi + +BP_START_STEP([Determining $tarball target directory]) +DIST_DIR=`zcat $tarball | tar tf - 2>/dev/null | sed 1q | sed s,/.*,,` +BP_SET_VAR([DIST_DIR]) +if test X$DIST_DIR = X; then + BP_ERROR([failed to determine $tarball target directory]) +elif test -e "$DIST_DIR"; then + if test $overwrite = true; then + chmod -R u+w "$DIST_DIR" + rm -rf "$DIST_DIR" + else + BP_ERROR([$DIST_DIR exists and --force not specified]) + fi +fi + +BP_START_STEP([Extracting source tarball]) +BP_RUN([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/.* //'` +BP_SET_VAR([DIST_VERSION]) + +BP_START_STEP([Configuring]) +BP_RUN([mkdir $DIST_DIR/_build >&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/_build >&AS_MESSAGE_LOG_FD 2>&1]) +BP_TRY_RUN([(cd $DIST_DIR/_build && ../configure --enable-relocatable --prefix='') >&AS_MESSAGE_LOG_FD 2>&1]) +_bp_status=$? +for base in config.h config.log; do + fn=$DIST_DIR/_build/$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 +fi + +BP_START_STEP([Determine target name]) +if test "X$BINID" = X; then + BINID=`sed -n 's/^Target: \(.*\)$/\1/p' < $DIST_DIR/_build/config.log 2>/dev/null | sed 1q` + if test "X$BINID" = X; then + BINID=`./config.guess` + fi +fi +BP_SET_VAR([BINID]) + +BP_START_STEP([Build]) +BP_RUN([(cd $DIST_DIR/_build && make) >&AS_MESSAGE_LOG_FD 2>&1]) + +BP_START_STEP([Install]) +BP_RUN([(cd $DIST_DIR/_build && 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/_build && 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/_build/pspp-$DIST_VERSION-$BINID.tar.gz]) + +BP_START_STEP([Check]) +BP_TRY_RUN([(cd $DIST_DIR/_build && make check) >&AS_MESSAGE_LOG_FD 2>&1]) +_bp_status=$? +for base in tests/testsuite.log tests/testsuite.dir; do + fn=$DIST_DIR/_build/$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 +fi + +BP_START_STEP([Uninstall]) +BP_RUN([(cd $DIST_DIR/_build && make uninstall DESTDIR=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1]) + +BP_START_STEP([Check uninstall]) +BP_RUN([(cd $DIST_DIR/_build && make distuninstallcheck distuninstallcheck_dir=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1]) + +# distcleancheck + +BP_FINISH diff --git a/make-binary.as b/make-binary.as deleted file mode 100644 index 3d3f225a04..0000000000 --- a/make-binary.as +++ /dev/null @@ -1,93 +0,0 @@ -# -* autoconf -*- - -BP_INIT([dist-pspp.log]) - -BP_SET_VAR([COMMIT], [@PSPP_COMMIT@]) -BP_SET_VAR([GNULIB_COMMIT], [@GNULIB_COMMIT@]) -BP_SET_VAR([BRANCH], [@BRANCH@]) - -ABBREV_COMMIT=`expr "$COMMIT" : '\(......\)'` -BP_SET_VAR([ABBREV_COMMIT]) - -BP_START_STEP([Extracting Git sources]) -tar xzf pspp-$COMMIT.tar.gz - -BP_START_STEP([Extract repository version number]) -(cd pspp-$COMMIT && autoconf -t AC_INIT) > tmp$$ -IFS=: read FILE LINE macro PACKAGE REPO_VERSION BUG_REPORT TARNAME URL < tmp$$ -BP_SET_VAR([REPO_VERSION]) - -BP_START_STEP([Checking Automake mode]) -if grep gnits pspp-$COMMIT/Makefile.am >/dev/null 2>&1; then - AM_MODE=gnits -else - AM_MODE=gnu -fi -BP_SET_VAR([AM_MODE]) - -BP_START_STEP([Generate build version number]) -case $AM_MODE-$REPO_VERSION in # ( - gnits-*-*) - # We want to append -g012345, but we're in Gnits mode and the - # version number already has a hyphen, so we have to omit the - # second hyphen. - VERSION="$REPO_VERSIONg$ABBREV_COMMIT" - ;; # ( - *) - VERSION="$REPO_VERSION-g$ABBREV_COMMIT" - ;; -esac -BP_SET_VAR([VERSION]) - -BP_START_STEP([Update version number in configure.ac]) -echo "AC_INIT([[$PACKAGE], [$VERSION], [$BUG_REPORT], [$TARNAME], [$URL]])" > tmp$$ -sed -n "${LINE}r tmp$$ -$LINE!p" < pspp-$COMMIT/$FILE > pspp-$COMMIT/$FILE.new -mv pspp-$COMMIT/$FILE.new pspp-$COMMIT/$FILE - -BP_START_STEP([Updating NEWS]) -{ - sed -n '/^Changes/q;p' pspp-$COMMIT/NEWS -cat <<_BP_EOF -Changes from $REPO_VERSION to $VERSION: - - * Built from PSPP commit $COMMIT - in branch $BRANCH on host `hostname`. - - * Built from Gnulib commit $GNULIB_COMMIT. - -_BP_EOF - sed -n '/^Changes/,$p' pspp-$COMMIT/NEWS -} > NEWS.new -mv NEWS.new pspp-$COMMIT/NEWS - -BP_START_STEP([Extract Gnulib source]) -BP_RUN([tar xzf gnulib-$GNULIB_COMMIT.tar.gz >&AS_MESSAGE_LOG_FD 2>&1]) - -BP_START_STEP([Bootstrap (make -f Smake)]) -BP_RUN([(cd pspp-$COMMIT && make -f Smake GNULIB=../gnulib-$GNULIB_COMMIT) >&AS_MESSAGE_LOG_FD 2>&1]) - -BP_START_STEP([Configure]) -AS_MKDIR_P([pspp-$COMMIT/_build]) -BP_RUN([(cd pspp-$COMMIT/_build && ../configure @CONFIGUREFLAGS@) >&AS_MESSAGE_LOG_FD 2>&1]) - -BP_START_STEP([Make source tarball]) -BP_RUN([(cd pspp-$COMMIT/_build && make dist) >&AS_MESSAGE_LOG_FD 2>&1]) -BP_MOVE_OUTPUT([source distribution], [pspp-$COMMIT/_build/pspp-$VERSION.tar.gz]) - -potfile=pspp-$COMMIT/_build/po/pspp.pot -if test ! -e $potfile; then - potfile=pspp-$COMMIT/po/pspp.pot -fi -BP_COPY_OUTPUT([translation templates], [$potfile]) - -BP_START_STEP([Build user manual]) -BP_RUN([(cd pspp-$COMMIT && cp _build/doc/*.texi doc/) >&AS_MESSAGE_LOG_FD 2>&1]) -BP_RUN([(cd pspp-$COMMIT && GENDOCS_TEMPLATE_DIR=.. ../gendocs.sh -s doc/pspp.texinfo -o results/user-manual --email bug-gnu-pspp@gnu.org pspp "GNU PSPP User Manual") >&AS_MESSAGE_LOG_FD 2>&1]) -BP_OUTPUT([User Manual], [user-manual]) - -BP_START_STEP([Build developers guide]) -BP_RUN([(cd pspp-$COMMIT && GENDOCS_TEMPLATE_DIR=.. ../gendocs.sh -s doc/pspp-dev.texinfo -o results/dev-guide --email bug-gnu-pspp@gnu.org pspp-dev "GNU PSPP Developers Guide") >&AS_MESSAGE_LOG_FD 2>&1]) -BP_OUTPUT([Developers Guide], [dev-guide]) - -BP_FINISH diff --git a/dist-pspp.as b/make-src-dist.as similarity index 100% rename from dist-pspp.as rename to make-src-dist.as -- 2.30.2