work on remote builds
[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
43 # Parse command line.
44 while test $# -gt 0 ; do
45   option=[`expr "x$1" : 'x\(--[^=]*\)' \| \
46                "x$1" : 'x\(-.\)'`]
47   optarg=[`expr "x$1" : 'x--[^=]*=\(.*\)' \| \
48                "x$1" : 'x-.\(.*\)'`]
49   case $1 in
50     --version | -V )
51        echo "$version" ; exit ;;
52     --help | -h )
53        AS_ECHO(["$usage"]); exit ;;
54
55     --force | -f )
56        overwrite=true
57        shift ;;
58
59     --on=* )
60        remote=$optarg
61        shift ;;
62     --on )
63        test $# = 1 && eval "$exit_missing_arg"
64        remote=$2
65        shift; shift ;;
66
67     --configureflags=* )
68        CONFIGUREFLAGS=$optarg
69        shift ;;
70     --configureflags )
71        test $# = 1 && eval "$exit_missing_arg"
72        CONFIGUREFLAGS=$2
73        shift; shift ;;
74
75     -- )     # Stop option processing
76        shift; break ;;
77     -* )
78        exec >&2
79        AS_ERROR([invalid option `$[1]'$as_nl$help]) ;; #`(
80     *=* )
81        AS_VAR_ARITH([n_envvars], [$n_envvars + 1])
82        AS_VAR_SET([env$n_envvars], ["$[1]"])
83        shift
84        ;;
85     * )
86        break ;;
87   esac
88 done
89
90 # Find the input file.
91 case $# in
92   2)
93     tarball=$1
94     BINID=$2
95     ;;
96   *) exec >&2
97      AS_ERROR([invalid number of arguments$as_nl$help]) ;;
98 esac
99
100 if test ! -e "$tarball"; then
101    exec >&2
102    AS_ERROR([$tarball does not exist])
103 fi
104
105 REMOTE_HOST=
106 REMOTE_DIR=
107 case $remote in # (
108   "") 
109     ;; # (
110   *:*)
111     REMOTE_HOST=[`expr "$remote" : '\([^:]*\):'`]
112     REMOTE_DIR=[`expr "$remote" : '[^:]*:\(.*\)'`]
113     ;; # (
114   *)
115     REMOTE_HOST=$remote
116     ;;
117 esac
118
119 if test "X$REMOTE_HOST" != X; then
120   m4_pattern_allow([BP_SSH])
121   : ${BP_SSH=ssh}
122
123   escape () {
124     AS_ECHO("$1") | sed "s/'/'\\\\''/g"
125   }
126
127   options=
128   if test "x$CONFIGUREFLAGS" != x; then
129     options="--configureflags='"`escape "$CONFIGUREFLAGS"`\'
130   fi
131   $overwrite && options="$options --force"
132
133   i=0
134   while test $i -lt $n_envvars; do
135     AS_VAR_ARITH([i], [$i + 1])
136     AS_VAR_COPY([tmp], [env$i])
137     options="$options '"`escape "$tmp"`"\'
138   done
139   shift
140
141   rc=0
142   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=$?
143   $BP_SSH $REMOTE_HOST "cd $REMOTE_DIR && tar cf - $BINID" | tar xf - || rc=$?
144   exit $rc
145 fi
146
147 if test -e "$BINID"; then
148   if test $overwrite = true; then
149     chmod -R u+w "$BINID"
150     rm -rf "$BINID"
151   else
152     exec >&2
153     AS_ERROR([$BINID exists and --force not specified])
154   fi
155 fi
156
157 BP_INIT_RESULTS([$BINID])
158 BP_INIT_LOG([$BINID/LOG])
159
160 BP_SET_VAR([BUILD_NUMBER], [@BUILD_NUMBER@])
161 BP_SET_VAR([PSPP_REPO], [@PSPP_REPO@])
162 BP_SET_VAR([PSPP_BRANCH], [@PSPP_BRANCH@])
163 BP_SET_VAR([PSPP_COMMIT], [@PSPP_COMMIT@])
164 BP_SET_VAR([GNULIB_REPO], [@GNULIB_REPO@])
165 BP_SET_VAR([GNULIB_COMMIT], [@GNULIB_COMMIT@])
166
167 BP_SET_VAR([BINID])
168 BP_SET_VAR([CONFIGUREFLAGS])
169
170 BP_START_STEP([Determining $tarball target directory])
171 DIST_DIR=`zcat $tarball | tar tf - 2>/dev/null | sed 1q | sed s,/.*,,`
172 BP_SET_VAR([DIST_DIR])
173 if test X$DIST_DIR = X; then
174   BP_ERROR([failed to determine $tarball target directory])
175 fi
176
177 BP_START_STEP([Extracting source tarball])
178 BP_RUN([zcat $tarball | tar xf - >&AS_MESSAGE_LOG_FD 2>&1])
179
180 BP_START_STEP([Extracting tar version])
181 DIST_VERSION=`$DIST_DIR/configure --version 2>/dev/null | sed 1q | sed 's/.* //'`
182 BP_SET_VAR([DIST_VERSION])
183
184 BP_START_STEP([Configuring])
185 BP_RUN([mkdir $DIST_DIR/_$BINID >&AS_MESSAGE_LOG_FD 2>&1])
186 BP_RUN([chmod -R a-w $DIST_DIR >&AS_MESSAGE_LOG_FD 2>&1])
187 BP_RUN([chmod u+w $DIST_DIR/_$BINID >&AS_MESSAGE_LOG_FD 2>&1])
188
189 set x
190 i=0
191 while test $i -lt $n_envvars; do
192   AS_VAR_ARITH([i], [$i + 1])
193   AS_VAR_COPY([tmp], [env$i])
194   set "$@" "$tmp"
195 done
196 shift
197
198 BP_TRY_RUN([(cd $DIST_DIR/_$BINID && ../configure --enable-relocatable --prefix='' $CONFIGUREFLAGS "$@") >&AS_MESSAGE_LOG_FD 2>&1])
199 _bp_status=$?
200 for base in config.h config.log; do
201   fn=$DIST_DIR/_$BINID/$base
202   if test -e "$fn"; then
203     BP_COPY_OUTPUT([build configuration], [$fn])
204   fi
205 done
206 if test $_bp_status != 0; then
207   AS_ECHO(["$as_me:$LINENO: command exited with status $_bp_status"]) >&AS_MESSAGE_LOG_FD
208 fi
209
210 BP_START_STEP([Build])
211 BP_RUN([(cd $DIST_DIR/_$BINID && make) >&AS_MESSAGE_LOG_FD 2>&1])
212
213 BP_START_STEP([Install])
214 BP_RUN([(cd $DIST_DIR/_$BINID && make install DESTDIR=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
215
216 BP_START_STEP([Make binary distribution])
217 BP_RUN([(cd $DIST_DIR/_$BINID && tar cfz pspp-$DIST_VERSION-$BINID.tar.gz pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
218 BP_MOVE_OUTPUT([binary distribution], [$DIST_DIR/_$BINID/pspp-$DIST_VERSION-$BINID.tar.gz])
219
220 BP_START_STEP([Check])
221 BP_TRY_RUN([(cd $DIST_DIR/_$BINID && make check) >&AS_MESSAGE_LOG_FD 2>&1])
222 _bp_status=$?
223 for base in tests/testsuite.log tests/testsuite.dir; do
224   fn=$DIST_DIR/_$BINID/$base
225   if test -e "$fn"; then
226     BP_MOVE_OUTPUT([test logs], [$fn])
227   fi
228 done
229 if test $_bp_status != 0; then
230   AS_ECHO(["$as_me:$LINENO: command exited with status $_bp_status"]) >&AS_MESSAGE_LOG_FD
231 fi
232
233 BP_START_STEP([Uninstall])
234 BP_RUN([(cd $DIST_DIR/_$BINID && make uninstall DESTDIR=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
235
236 BP_START_STEP([Check uninstall])
237 BP_RUN([(cd $DIST_DIR/_$BINID && make distuninstallcheck distuninstallcheck_dir=$PWD/pspp-$DIST_VERSION-$BINID) >&AS_MESSAGE_LOG_FD 2>&1])
238
239 # distcleancheck
240
241 BP_FINISH