as released as part of build91
[pspp] / make-bin-dist.as
1 # -*- autoconf -*-
2
3 BP_INIT
4
5 usage=["\
6 Usage: $0 [OPTION]... PSPP_DIST.TAR.GZ BINID
7 where PSPP_DIST.TAR.GZ is a PSPP tarball prepared by \"make dist\"
8   and BINID briefly identifies the target, e.g. \"debian-squeeze-i386\".
9
10 Options:
11   --on HOST[:DIR]           Perform remote build using ssh and scp
12   -h, --help                Print this usage message and exit
13   -f, --force               Delete existing directory instead of aborting
14
15 Report bugs to <bug-gnu-pspp@gnu.org>.
16 GNU PSPP: <http://www.gnu.org/software/pspp/>.
17 General help using GNU software: <http://www.gnu.org/gethelp/>."]
18
19 version=["\
20 make-binary (@PACKAGE_NAME@) @VERSION@
21 Copyright (C) 2010 Free Software Foundation, Inc.
22 License GPLv3+/Autoconf: GNU GPL version 3 or later
23 <http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
24 This is free software: you are free to change and redistribute it.
25 There is NO WARRANTY, to the extent permitted by law.
26
27 Written by Ben Pfaff."]
28
29 help="\
30 Try \`$as_me --help' for more information."
31
32 exit_missing_arg='
33   m4_bpatsubst([AS_ERROR([option `$[1]' requires an argument$as_nl$help])],
34     ['], ['\\''])'
35 # restore font-lock: '
36
37 # Variables.
38 overwrite=false
39 remote=
40 CONFIGUREFLAGS=
41 n_envvars=0
42 check=true
43
44 # Parse command line.
45 while test $# -gt 0 ; do
46   option=[`expr "x$1" : 'x\(--[^=]*\)' \| \
47                "x$1" : 'x\(-.\)'`]
48   optarg=[`expr "x$1" : 'x--[^=]*=\(.*\)' \| \
49                "x$1" : 'x-.\(.*\)'`]
50   case $1 in
51     --version | -V )
52        echo "$version" ; exit ;;
53     --help | -h )
54        AS_ECHO(["$usage"]); exit ;;
55
56     --force | -f )
57        overwrite=true
58        shift ;;
59
60     --on=* )
61        remote=$optarg
62        shift ;;
63     --on )
64        test $# = 1 && eval "$exit_missing_arg"
65        remote=$2
66        shift; shift ;;
67
68     --configureflags=* )
69        CONFIGUREFLAGS=$optarg
70        shift ;;
71     --configureflags )
72        test $# = 1 && eval "$exit_missing_arg"
73        CONFIGUREFLAGS=$2
74        shift; shift ;;
75
76     --no-check )
77        check=false
78        shift ;;
79
80     -- )     # Stop option processing
81        shift; break ;;
82     -* )
83        exec >&2
84        AS_ERROR([invalid option `$[1]'$as_nl$help]) ;; #`(
85     *=* )
86        AS_VAR_ARITH([n_envvars], [$n_envvars + 1])
87        AS_VAR_SET([env$n_envvars], ["$[1]"])
88        shift
89        ;;
90     * )
91        break ;;
92   esac
93 done
94
95 # Find the input file.
96 case $# in
97   2)
98     tarball=$1
99     BINID=$2
100     ;;
101   *) exec >&2
102      AS_ERROR([invalid number of arguments$as_nl$help]) ;;
103 esac
104
105 if test ! -e "$tarball"; then
106    exec >&2
107    AS_ERROR([$tarball does not exist])
108 fi
109
110 case $BINID in # (
111   *[!-_.+~a-zA-Z0-9]*)
112     exec >&2
113     AS_ERROR([invalid binid $BINID])
114     ;;
115 esac
116
117 REMOTE_HOST=
118 REMOTE_DIR=
119 case $remote in # (
120   "") 
121     ;; # (
122   *:*)
123     REMOTE_HOST=[`expr "$remote" : '\([^:]*\):'`]
124     REMOTE_DIR=[`expr "$remote" : '[^:]*:\(.*\)'`]
125     ;; # (
126   *)
127     REMOTE_HOST=$remote
128     ;;
129 esac
130
131 if test "X$REMOTE_HOST" != X; then
132   m4_pattern_allow([BP_SSH])
133   : ${BP_SSH=ssh}
134
135   escape () {
136     AS_ECHO("$1") | sed "s/'/'\\\\''/g"
137   }
138
139   options=
140   if test "x$CONFIGUREFLAGS" != x; then
141     options="--configureflags='"`escape "$CONFIGUREFLAGS"`\'
142   fi
143   $check || options="$options --no-check"
144   $overwrite && options="$options --force"
145
146   i=0
147   while test $i -lt $n_envvars; do
148     AS_VAR_ARITH([i], [$i + 1])
149     AS_VAR_COPY([tmp], [env$i])
150     options="$options '"`escape "$tmp"`\'
151   done
152   shift
153
154   rc=0
155   tar cf - make-bin-dist build-aux $tarball | gzip | $BP_SSH $REMOTE_HOST "cd $REMOTE_DIR && zcat | tar xf - && ./make-bin-dist $options $tarball $BINID" || rc=$?
156   $BP_SSH $REMOTE_HOST "cd $REMOTE_DIR && tar cf - $BINID" | tar xf - || rc=$?
157   exit $rc
158 fi
159
160 for dir in $BINID $BINID.buildtmp; do
161   if test -e $dir; then
162     if $overwrite; then
163       chmod -R u+w $dir
164       rm -rf $dir
165     else
166       exec >&2
167       AS_ERROR([$dir exists and --force not specified])
168     fi
169   fi
170   mkdir $dir || { exec >&2; AS_ERROR([failed to create $dir]); }
171 done
172
173 BP_INIT_RESULTS([$BINID])
174 BP_INIT_LOG([$BINID/LOG])
175
176 BP_SET_VAR([BUILD_NUMBER], [@BUILD_NUMBER@])
177 BP_SET_VAR([PSPP_REPO], [@PSPP_REPO@])
178 BP_SET_VAR([PSPP_BRANCH], [@PSPP_BRANCH@])
179 BP_SET_VAR([PSPP_COMMIT], [@PSPP_COMMIT@])
180 BP_SET_VAR([GNULIB_REPO], [@GNULIB_REPO@])
181 BP_SET_VAR([GNULIB_COMMIT], [@GNULIB_COMMIT@])
182
183 BP_SET_VAR([BINID])
184 BP_SET_VAR([CONFIGUREFLAGS])
185
186 BP_START_STEP([Determining $tarball target directory])
187 DIST_DIR=`zcat $tarball | tar tf - 2>/dev/null | sed 1q | sed s,/.*,,`
188 BP_SET_VAR([DIST_DIR])
189 if test X$DIST_DIR = X; then
190   BP_ERROR([failed to determine $tarball target directory])
191 fi
192
193 BP_START_STEP([Extracting source tarball])
194 BP_RUN([(cd $BINID.buildtmp && zcat ../$tarball | tar xf -) >&AS_MESSAGE_LOG_FD 2>&1])
195
196 BP_START_STEP([Extracting tar version])
197 DIST_VERSION=`$BINID.buildtmp/$DIST_DIR/configure --version 2>/dev/null | sed 1q | sed 's/.* //'`
198 BP_SET_VAR([DIST_VERSION])
199
200 BP_START_STEP([Checking for GNU make])
201 case `(make --version | sed 1q) 2>/dev/null` in # (
202   "GNU Make"*) GNU_MAKE=true ;;
203   *) GNU_MAKE=false ;;
204 esac
205 BP_SET_VAR([GNU_MAKE])
206
207 BP_START_STEP([Configuring])
208 srcdir=$BINID.buildtmp/$DIST_DIR
209 if $GNU_MAKE; then
210   builddir=$srcdir/_$BINID
211   rel_srcdir=..
212   BP_RUN([mkdir $builddir >&AS_MESSAGE_LOG_FD 2>&1])
213   BP_RUN([chmod -R a-w $srcdir >&AS_MESSAGE_LOG_FD 2>&1])
214   BP_RUN([chmod u+w $builddir >&AS_MESSAGE_LOG_FD 2>&1])
215 else
216   builddir=$srcdir
217   rel_srcdir=.
218   BP_RUN([find $builddir -type f -print | xargs chmod u-w >&AS_MESSAGE_LOG_FD 2>&1])
219   BP_RUN([chmod u+w $builddir >&AS_MESSAGE_LOG_FD 2>&1])
220 fi
221
222 set x
223 i=0
224 while test $i -lt $n_envvars; do
225   AS_VAR_ARITH([i], [$i + 1])
226   AS_VAR_COPY([tmp], [env$i])
227   set "$@" "$tmp"
228 done
229 shift
230
231 BP_TRY_RUN([(cd $builddir && $rel_srcdir/configure --enable-relocatable --prefix='' $CONFIGUREFLAGS "$@") >&AS_MESSAGE_LOG_FD 2>&1])
232 _bp_status=$?
233 for base in config.h config.log; do
234   fn=$builddir/$base
235   if test -e "$fn"; then
236     BP_COPY_OUTPUT([build configuration], [$fn])
237   fi
238 done
239 if test $_bp_status != 0; then
240   AS_ECHO(["$as_me:$LINENO: command exited with status $_bp_status"]) >&AS_MESSAGE_LOG_FD
241   exit 1
242 fi
243
244 BP_START_STEP([Build])
245 BP_RUN([(cd $builddir && make) >&AS_MESSAGE_LOG_FD 2>&1])
246
247 BP_START_STEP([Install])
248 BP_RUN([(cd $builddir && make install DESTDIR=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
249
250 BP_START_STEP([Make binary distribution])
251 BP_RUN([(cd $builddir && tar cfz pspp-$DIST_VERSION-$BINID.tar.gz pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
252 BP_MOVE_OUTPUT([binary distribution], [$builddir/pspp-$DIST_VERSION-$BINID.tar.gz])
253
254 if $check; then
255   BP_START_STEP([Check])
256   BP_TRY_RUN([(cd $builddir && make check) >&AS_MESSAGE_LOG_FD 2>&1])
257   _bp_status=$?
258   for base in tests/testsuite.log tests/testsuite.dir; do
259     fn=$builddir/$base
260     if test -e "$fn"; then
261       BP_MOVE_OUTPUT([test logs], [$fn])
262     fi
263   done
264   if test $_bp_status != 0; then
265     AS_ECHO(["$as_me:$LINENO: command exited with status $_bp_status"]) >&AS_MESSAGE_LOG_FD
266     exit 1
267   fi
268 fi
269
270 BP_START_STEP([Uninstall])
271 BP_RUN([(cd $builddir && make uninstall DESTDIR=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
272
273 BP_START_STEP([Check uninstall])
274 BP_RUN([(cd $builddir && make distuninstallcheck distuninstallcheck_dir=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
275
276 # distcleancheck
277
278 BP_FINISH