Handle new DBCOMPACT_* constants
[xapian.git] / bootstrap
blob246f7af26d149b583fb4081875aa0b412e26715e
1 #!/bin/sh
2 # bootstrap a xapian source tree obtained from git to produce a tree like
3 # you'd get from unpacking the results of "make dist"
5 # Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015 Olly Betts
7 # This program is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU General Public License as
9 # published by the Free Software Foundation; either version 2 of the
10 # License, or (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
20 # USA
22 if [ "$1" = "--help" ] ; then
23 cat <<__END__
24 $0 [--ftp] [--without-autotools|--clean] [MODULE...]
26 The default is to bootstrap all known modules. Any modules which have a
27 file called ".nobootstrap" in their top-level will be skipped.
28 __END__
29 exit 0
32 trap 'echo "Bootstrap failed"' EXIT
33 set -e
35 # The variables which specify the autotools to use. And doxygen.
36 autotools="AUTORECONF AUTOCONF AUTOHEADER AUTOM4TE AUTOMAKE ACLOCAL LIBTOOLIZE DOXYGEN"
38 # Tool for downloading a file from a URL (currently wget or curl).
39 FETCH_URL_TOOL=
41 check_sha1sum() {
42 checksum=$1
43 tarball=$2
45 if [ -z "$SHA1SUM_TOOL" ] ; then
46 for SHA1SUM_TOOL in \
47 '${SHA1SUM-sha1sum} 2>/dev/null|cut -d\ -f1' \
48 '${SHASUM-shasum} 2>/dev/null|cut -d\ -f1' \
49 '$(OPENSSL-openssl} sha1 2>/dev/null|sed "s/.* //"' \
50 '' ; do
51 if [ -z "$SHA1SUM_TOOL" ] ; then
52 echo <<'END'
53 Need sha1sum or shasum or openssl installed to check SHA1 checksums.
54 Set environment variable SHA1SUM, SHASUM or OPENSSL if the tool isn't on
55 your PATH.
56 END
57 exit 1
59 r=`:|eval "$SHA1SUM_TOOL"`
60 [ X"$r" != Xda39a3ee5e6b4b0d3255bfef95601890afd80709 ] || break
61 done
63 r=`< $tarball eval "$SHA1SUM_TOOL"`
64 if [ X"$r" != X"$checksum" ] ; then
65 echo "$tarball: computed SHA1 checksum did NOT match"
66 echo "computed: $r with $SHA1SUM_TOOL"
67 echo "expected: $checksum"
68 ls -l $tarball
69 file $tarball || true
70 mv "$tarball" "$tarball.$r"
71 echo "Renamed $tarball to $tarball.$r"
72 exit 1
76 lazy_build() {
77 package=$1
78 basename=$package-$2
79 ext=$3
80 checksum=$4
81 if [ "$ext" = "tar.xz" ] ; then
82 if [ -z "$xz_ok" ] ; then
83 if ${XZ-xz} --version > /dev/null 2>&1 ; then
84 xz_ok=1
85 else
86 xz_ok=0
89 if [ "$xz_ok" = 0 ] ; then
90 shift 2
91 ext=$3
92 checksum=$4
95 if [ "$ext" = "tar.bz2" ] ; then
96 if [ -z "$bz2_ok" ] ; then
97 # bzip2 --version doesn't exit with code 0 in upstream version (though
98 # Debian at least patch this bug), so use --help to check it.
99 if bzip2 --help > /dev/null 2>&1 ; then
100 bz2_ok=1
101 else
102 bz2_ok=0
105 if [ "$bz2_ok" = 0 ] ; then
106 shift 2
107 ext=$3
108 checksum=$4
111 tarball=$basename.$ext
112 case $basename in
113 *[24680][a-z]) basename=`echo "$basename"|sed 's/[a-z]$//'` ;;
114 esac
116 # Create the stamp file in INST so that rerunning bootstrap after
117 # "rm -rf INST" recovers nicely.
118 stamp=../INST/$package.stamp
120 # Download the tarball if required.
121 if [ ! -f "$tarball" ] ; then
122 if [ -z "$FETCH_URL_TOOL" ] ; then
123 if ${WGET-wget} --version > /dev/null 2>&1 ; then
124 FETCH_URL_TOOL="${WGET-wget} -O-"
125 elif ${CURL-curl} --version > /dev/null 2>&1 || [ "$?" = 2 ] ; then
126 # curl --version exits with code 2.
127 # -L is needed to follow HTTP redirects.
128 FETCH_URL_TOOL="${CURL-curl} -L"
129 elif ${LWP_REQUEST-lwp-request} -v > /dev/null 2>&1 || [ "$?" = 9 -o "$?" = 255 ] ; then
130 # lwp-request -v exits with code 9 (5.810) or 255 (6.03)
131 FETCH_URL_TOOL="${LWP_REQUEST-lwp-request} -mGET"
132 else
133 cat <<END >&2
134 Neither wget nor curl nor lwp-request found - install one of them or if already
135 installed, set WGET, CURL or LWP_REQUEST to the full path. Alternatively,
136 download $url
137 to directory `pwd`
138 then rerun this script.
140 exit 1
143 case $basename in
144 doxygen-*)
145 if [ "$use_ftp" = yes ] ; then
146 url="ftp://ftp.stack.nl/pub/users/dimitri/$tarball"
147 else
148 url="http://ftp.stack.nl/pub/users/dimitri/$tarball"
149 fi ;;
150 file-*)
151 if [ "$use_ftp" = yes ] ; then
152 url="ftp://ftp.astron.com/pub/file/$tarball"
153 else
154 url="http://fossies.org/unix/misc/$tarball"
155 fi ;;
156 *[13579][a-z])
157 # GNU alpha release
158 if [ "$use_ftp" = yes ] ; then
159 url="ftp://alpha.gnu.org/gnu/$package/$tarball"
160 else
161 url="http://alpha.gnu.org/gnu/$package/$tarball"
162 fi ;;
164 if [ "$use_ftp" = yes ] ; then
165 url="ftp://ftp.gnu.org/gnu/$package/$tarball"
166 else
167 url="http://ftpmirror.gnu.org/$package/$tarball"
168 fi ;;
169 esac
170 rm -f download.tmp
171 echo "Downloading <$url>"
172 $FETCH_URL_TOOL "$url" > download.tmp && mv download.tmp "$tarball"
175 if [ -f "$stamp" ] ; then
176 find_stdout=`find "$tarball" ../patches/"$package"/* -newer "$stamp" -print 2> /dev/null||true`
177 else
178 find_stdout=force
181 if [ -n "$find_stdout" ] ; then
182 # Verify the tarball's checksum before building it.
183 check_sha1sum "$checksum" "$tarball"
185 # Remove tarballs of other versions.
186 for f in "$package"-* ; do
187 [ "$f" = "$tarball" ] || rm -rf "$f"
188 done
190 case $ext in
191 tar.xz)
192 ${XZ-xz} -dc "$tarball"| tar xf - ;;
193 tar.bz2)
194 bzip2 -dc "$tarball"| tar xf - ;;
196 gzip -dc "$tarball"| tar xf - ;;
197 esac
199 cd "$basename"
201 if [ ! -f "../../patches/$package/series" ] ; then
202 cat <<END >&2
203 No patch series file 'patches/$package/series' - if there are no patches,
204 this should just be an empty file.
206 exit 1
208 echo "Applying patches from $package/series"
209 sed -n 's/[ ]*\(#.*\)\?$//;/./p' "../../patches/$package/series" | \
210 while read p ; do
211 echo "Applying patch $package/$p"
212 patch -p1 < "../../patches/$package/$p"
213 done
215 # Fix doxygen/Qt stupid and pointless enumerating of Mac OS X releases
216 # which stops it building on each new OS X release.
217 if [ -f qtools/qglobal.h ] ; then
218 sed 's!^[ ]*#[ ]*\(error\|warning\).*Mac *OS *X is unsupported!// &!' \
219 qtools/qglobal.h > qtools/qglobal.hT
220 mv qtools/qglobal.hT qtools/qglobal.h
223 if test -n "$AUTOCONF" ; then
224 ./configure --prefix "$instdir" AUTOCONF="$AUTOCONF"
225 else
226 ./configure --prefix "$instdir"
228 make
229 make install
230 cd ..
231 rm -rf "$basename"
233 touch "$stamp"
237 handle_git_external() {
238 path=$1
239 if [ ! -f "$path/.nobootstrap" ] ; then
240 rev=$2
241 url=$3
242 if [ ! -d "$path" ] ; then
243 git clone --no-checkout -- "$url" "$path"
244 elif (cd "$path" && git reflog "$rev" -- 2>/dev/null) ; then
245 : # Already have that revision locally
246 else
247 (cd "$path" && git fetch)
249 (cd "$path" && git checkout "$rev")
253 update_config() {
254 from=$1
255 to=$2
256 ts_from=`perl -ne '/^timestamp=(\W?)([-\d]+)$1/ and do {$_=$2;y/-//d;print;exit}' "$from"`
257 ts_to=`perl -ne '/^timestamp=(\W?)([-\d]+)$1/ and do {$_=$2;y/-//d;print;exit}' "$to"`
258 if [ "$ts_from" -gt "$ts_to" ] ; then
259 echo "Updating $to ($ts_to) with $from ($ts_from)"
260 # rm first in case the existing file is a symlink.
261 rm -f "$to"
262 cp "$from" "$to"
266 curdir=`pwd`
268 # cd to srcdir if we aren't already there.
269 srcdir=`echo "$0"|sed 's!/*[^/]*$!!'`
270 case $srcdir in
271 ""|.)
272 srcdir=. ;;
274 cd "$srcdir" ;;
275 esac
277 # Commit hash to pass to handle_git_external for swig.
278 swig_git_commit_hash=1a99212c2c1f2c1819ae84fe553a27889be46791
279 swig_origin_url=git://github.com/swig/swig.git
281 if [ ! -d .git ] ; then
282 echo "$0: No '.git' directory found - this script should be run from a"
283 echo "git repo cloned from git://git.xapian.org/xapian or a mirror of it"
284 exit 1
287 for emptydir in xapian-applications/omega/m4 xapian-bindings/m4 xapian-letor/m4 ; do
288 if test -d "$emptydir" ; then
290 else
291 parent=`echo "$emptydir"|sed 's,/[^/]*$,,'`
292 if test -d "$parent" ; then
293 mkdir "$emptydir"
296 done
298 if [ -f .git/info/exclude ] ; then
299 sed '/^\(swig\|xapian-applications\/omega\/common$\)/d' .git/info/exclude > .git/info/exclude~
300 else
301 [ -d .git/info ] || mkdir .git/info
303 cat <<END >> .git/info/exclude~
304 swig
305 xapian-applications/omega/common
306 xapian-letor/common
308 if [ -f .git/info/exclude ] &&
309 cmp .git/info/exclude~ .git/info/exclude 2> /dev/null ; then
310 rm .git/info/exclude~
311 else
312 mv .git/info/exclude~ .git/info/exclude
315 # If this tree is checked out from the github mirror, use the same access
316 # method for other things checked out from github (e.g. swig) so we avoid
317 # firewall issues. If there's no default remote, the git config command
318 # will exit with status 1, so ignore that failure.
319 origin_url=`git config remote.origin.url||:`
320 case $origin_url in
321 *[@/]github.com[:/]*)
322 github_base_url=`echo "X$origin_url"|sed 's/^X//;s!\([@/]github.com[:/]\).*!\1!'` ;;
324 github_base_url=git://github.com/ ;;
325 esac
326 swig_origin_url=${github_base_url}swig/swig.git
327 handle_git_external swig "$swig_git_commit_hash" "$swig_origin_url"
329 # If someone's created a directory for common, leave it be.
330 if [ -h xapian-applications/omega/common ] || \
331 [ ! -d xapian-applications/omega/common ] ; then
332 handle_git_external xapian-applications/omega/.common.git d52417d0c7389257e47ed1339fdfd2f4f57efda4 .
333 ln -sf .common.git/xapian-core/common xapian-applications/omega/common
336 # If someone's created a directory for common, leave it be.
337 if [ -h xapian-letor/common ] || [ ! -d xapian-letor/common ] ; then
338 handle_git_external xapian-letor/.common.git 3c0adf07a179083782ee6b8165a196668f0a1605 .
339 ln -sf .common.git/xapian-core/common xapian-letor/common
342 # Prefer http downloads as they are more likely to work through firewalls.
343 use_ftp=no
344 if [ "$1" = "--ftp" ] ; then
345 shift
346 use_ftp=yes
349 if [ "$1" = "--without-autotools" ] ; then
350 shift
351 else
352 if [ "$1" = "--clean" ] ; then
353 shift
354 rm -rf INST
357 [ -d INST ] || mkdir INST
358 instdir=`pwd`/INST
360 [ -d BUILD ] || mkdir BUILD
361 cd BUILD
363 # The last field is the SHA1 checksum of the tarball.
364 lazy_build doxygen 1.8.8 \
365 src.tar.gz cd511c73e7669dde5ac3e14a5d1abae093aaf1d9
366 lazy_build autoconf 2.68 \
367 tar.xz 63a3b495400c1c053f2f6b62efb7a5c0ad4156c9 \
368 tar.bz2 b534c293b22048c022b1ff3a372b9c03f26170b4 \
369 tar.gz 843f7dfcc6addf129dc2c8b12f7d72d371478f42
370 # 2.69 is fussy about the m4 version
371 # lazy_build autoconf 2.69 tar.gz 562471cbcb0dd0fa42a76665acf0dbb68479b78a
372 AUTOCONF=$instdir/bin/autoconf \
373 lazy_build automake 1.15 \
374 tar.xz c279b35ca6c410809dac8ade143b805fb48b7655 \
375 tar.gz b5a840c7ec4321e78fdc9472e476263fa6614ca1
376 lazy_build libtool 2.4.6 \
377 tar.xz 3e7504b832eb2dd23170c91b6af72e15b56eb94e \
378 tar.gz 25b6931265230a06f0fc2146df64c04e5ae6ec33
379 if [ "$1" = "--deps=libmagic" ] ; then
380 shift
381 lazy_build file 5.25 \
382 tar.gz fea78106dd0b7a09a61714cdbe545135563e84bd
385 for v in $autotools ; do
386 tool=`echo "$v"|tr A-Z a-z`
387 eval "$v=\"\$instdir\"/bin/$tool;export $v"
388 done
390 cd ..
393 case `${LIBTOOLIZE-libtoolize} --version` in
395 echo "${LIBTOOLIZE-libtoolize} not found"
396 exit 1 ;;
397 "libtoolize (GNU libtool) 1.4.*")
398 echo "${LIBTOOLIZE-libtoolize} is from libtool 1.4 which is too old - libtool 2.2 is required."
399 echo "If you have both installed, set LIBTOOLIZE to point to the correct version."
400 exit 1 ;;
401 "libtoolize (GNU libtool) 1.5.*")
402 echo "${LIBTOOLIZE-libtoolize} is from libtool 1.5 which is too old - libtool 2.2 is required."
403 echo "If you have both installed, set LIBTOOLIZE to point to the correct version."
404 exit 1 ;;
405 esac
407 ACLOCAL="${ACLOCAL-aclocal} -I `pwd`/xapian-core/m4-macros"
408 export ACLOCAL
410 intree_swig=no
411 modules=
412 for module in ${@:-xapian-core xapian-applications/omega swig xapian-bindings xapian-letor} ; do
413 d=$module
414 if [ -f "$d/configure.ac" -o -f "$d/configure.in" ] ; then
416 else
417 # Skip any directories we can't bootstrap.
418 continue
420 if [ -f "$d/.nobootstrap" ] ; then
421 # Report why to save head scratching when someone forgets they created
422 # a .nobootstrap file.
423 echo "Skipping '$module' due to presence of '$d/.nobootstrap'."
424 continue
426 if [ "$d" = swig ] && [ -f "xapian-bindings/.nobootstrap" ] ; then
427 # No point bootstrapping SWIG if we aren't going to use it.
428 echo "Skipping '$d' due to presence of 'xapian-bindings/.nobootstrap'."
429 continue
431 echo "Bootstrapping \`$module'"
432 [ -f "$d/preautoreconf" ] && "$d/preautoreconf"
434 # If we have a custom INSTALL file, preserve it since autoreconf insists on
435 # replacing INSTALL with "generic installation instructions" when --force
436 # is used. Be careful to replace it if autoreconf fails.
437 if [ -f "$d/INSTALL" ] ; then
438 if grep 'generic installation instructions' "$d/INSTALL" >/dev/null 2>&1 ; then
440 else
441 mv -f "$d/INSTALL" "$d/INSTALL.preserved-by-bootstrap"
445 autoreconf_rc=
446 if [ swig = "$module" ] ; then
447 # SWIG provides its own bootstrapping script.
448 curdir=`pwd`
449 cd "$d"
450 ./autogen.sh || autoreconf_rc=$?
451 cd "$curdir"
452 # Use the uninstalled wrapper for the in-tree copy of SWIG.
453 intree_swig=yes
454 else
455 # Use --install as debian's autoconf wrapper uses 2.5X if it sees it
456 # (but it doesn't check for -i).
458 # Use --force so that we update files if autoconf, automake, or libtool
459 # has been upgraded.
460 ${AUTORECONF-autoreconf} --install --force "$d" || autoreconf_rc=$?
462 if [ -f "$d/INSTALL.preserved-by-bootstrap" ] ; then
463 mv -f "$d/INSTALL.preserved-by-bootstrap" "$d/INSTALL"
465 if [ -n "$autoreconf_rc" ] ; then
466 exit $autoreconf_rc
468 for f in config.guess config.sub ; do
469 if [ -f "$d/$f" ] ; then
470 update_config "config/$f" "$d/$f"
472 done
473 modules="$modules $module"
474 done
476 # Generate the top-level configure script.
477 rm -f configure.tmp
478 cat <<'TOP_OF_CONFIGURE' > configure.tmp
479 #!/bin/sh
480 # configure each submodule in a xapian source tree
481 # Generated by Xapian top-level bootstrap script.
483 # Copyright (C) 2003,2004,2007,2008 Olly Betts
485 # This program is free software; you can redistribute it and/or
486 # modify it under the terms of the GNU General Public License as
487 # published by the Free Software Foundation; either version 2 of the
488 # License, or (at your option) any later version.
490 # This program is distributed in the hope that it will be useful,
491 # but WITHOUT ANY WARRANTY; without even the implied warranty of
492 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
493 # GNU General Public License for more details.
495 # You should have received a copy of the GNU General Public License
496 # along with this program; if not, write to the Free Software
497 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
498 # USA
500 trap 'echo "configure failed"' EXIT
501 set -e
503 # Produced escaped version of command suitable for pasting back into sh
504 cmd=$0
505 for a ; do
506 case $a in
507 *[^-A-Za-z0-9_+=:@/.,]*)
508 esc_a=`echo "$a"|sed 's!\([^-A-Za-z0-9_+=:@/.,]\)!\\\\\\1!g'`
509 cmd="$cmd $esc_a" ;;
511 cmd="$cmd $a" ;;
512 esac
513 done
515 here=`pwd`
516 TOP_OF_CONFIGURE
518 # Produce an absolute path to srcdir.
519 srcdir_abs=`pwd`
520 # This section is unquoted so we can substitute variables.
521 cat <<MIDDLE_OF_CONFIGURE >> configure.tmp
522 srcdir="$srcdir_abs"
523 modules="$modules"
524 MIDDLE_OF_CONFIGURE
526 vars=
527 if [ yes = "$intree_swig" ] ; then
528 # We want the path to SWIG to point into srcdir, which isn't known until
529 # configure-time, so we need to expand $here in configure. We can't just set
530 # SWIG here and let the case below handle it as that would escape the value
531 # such that $here didn't get expanded at all.
532 echo ': ${SWIG="$here/swig/preinst-swig"}' >> configure.tmp
533 echo "export SWIG" >> configure.tmp
534 vars=' SWIG=$here/swig/preinst-swig'
535 # Kill any existing setting of SWIG so that we don't try to handle it again
536 # below.
537 SWIG=
539 for tool in SWIG $autotools ; do
540 eval "val=\$$tool"
541 if [ -n "$val" ] ; then
542 echo ': ${'"$tool='$val'"'}' >> configure.tmp
543 echo "export $tool" >> configure.tmp
544 vars="$vars $tool='"`echo "$val"|sed 's/\(['"\\'"']\)/\\\1/g'`"'"
546 done
547 if [ -n "$vars" ] ; then
548 # $vars will always have a leading space.
549 echo "set$vars "'"$@"' >> configure.tmp
552 cat <<'END_OF_CONFIGURE' >> configure.tmp
553 dirs=
554 revdirs=
555 XAPIAN_CONFIG=$here/xapian-core/xapian-config
556 for d in $modules ; do
557 if [ "$here" = "$srcdir" ] ; then
558 configure=./configure
559 configure_from_here=$d/configure
560 else
561 configure=$srcdir/$d/configure
562 configure_from_here=$configure
564 if [ -f "$configure_from_here" ] ; then
565 if [ -d "$d" ] ; then : ; else
566 case $d in
567 xapian-applications/*) [ -d xapian-applications ] || mkdir xapian-applications ;;
568 esac
569 mkdir "$d"
571 echo "Configuring \`$d'"
572 # Use a shared config.cache for speed and to save a bit of diskspace, but
573 # don't share it with SWIG just in case it manages to probe and cache
574 # different answers (e.g. because it uses a C compiler).
575 case $d in
576 swig)
577 cd "$d" && "$configure" ${1+"$@"}
579 xapian-core)
580 cd "$d" && "$configure" --enable-maintainer-mode --disable-option-checking --cache-file="$here/config.cache" ${1+"$@"}
582 xapian-applications/omega)
583 cd "$d" && "$configure" --enable-maintainer-mode --disable-option-checking XAPIAN_CONFIG="$XAPIAN_CONFIG" CPPFLAGS="-I$srcdir/INST/include" LDFLAGS="-L$srcdir/INST/lib" ${1+"$@"}
586 cd "$d" && "$configure" --enable-maintainer-mode --disable-option-checking --cache-file="$here/config.cache" XAPIAN_CONFIG="$XAPIAN_CONFIG" ${1+"$@"}
588 esac
589 cd "$here"
590 dirs="$dirs $d"
591 revdirs="$d $revdirs"
593 done
595 rm -f Makefile.tmp
596 cat <<EOF > Makefile.tmp
597 # Makefile generated by:
598 CONFIGURE_COMMAND := $cmd
600 if [ "$srcdir" != . ] ; then
601 cat <<EOF >> Makefile.tmp
603 VPATH = $srcdir
606 targets='all install uninstall install-strip clean distclean mostlyclean maintainer-clean dist check distcheck'
607 for target in $targets ; do
608 echo
609 echo "$target:"
610 case $target in
611 uninstall|*clean)
612 # When uninstalling or cleaning, process directories in reverse order, so
613 # that we process a directory after any directories which might use it.
614 list=$revdirs ;;
616 list=$dirs ;;
617 esac
618 for d in $list ; do
619 case $d,$target in
620 swig,install*|swig,uninstall)
621 # Nothing to do with swig when installing/uninstalling.
623 swig,dist|swig,check|swig,distcheck|swig,all)
624 # Need to ensure swig is built before "make dist", "make check", etc.
625 echo " cd $d && \$(MAKE)" ;;
626 swig,mostlyclean)
627 echo " cd $d && \$(MAKE) clean" ;;
628 xapian-bindings,distcheck)
629 # FIXME: distcheck doesn't currently work for xapian-bindings because
630 # xapian-core isn't installed.
631 echo " cd $d && \$(MAKE) check && \$(MAKE) dist" ;;
633 echo " cd $d && \$(MAKE) $target" ;;
634 esac
635 done
636 case $target in
637 distclean|maintainer-clean) echo " rm -f Makefile config.cache" ;;
638 esac
639 done >> Makefile.tmp
640 cat <<EOF >> Makefile.tmp
642 recheck:
643 \$(CONFIGURE_COMMAND)
645 Makefile: $srcdir/configure
646 \$(CONFIGURE_COMMAND)
648 $srcdir/configure: \\
649 END_OF_CONFIGURE
651 : > configure.tmp2
653 # We want to rerun bootstrap if a series file changes (patch added or removed)
654 # or an existing patch changes. Since we always have an series file (even if
655 # it is empty), this also handles us adding the first patch for something.
656 patches=
657 for d in patches/* ; do
658 series=$d/series
659 echo "$series:" >> configure.tmp2
660 cat << END
661 $series\\\\
663 sed -n 's/[ ]*\(#.*\)\?$//;/./p' "$series" |\
664 while read p ; do
665 patch=$d/$p
666 cat << END
667 $patch\\\\
669 # Because there's a pipeline, this is a subshell, so use a temporary file
670 # rather than a variable to compile a list of patches to use below.
671 echo "$patch:" >> configure.tmp2
672 done
673 done >> configure.tmp
675 cat <<'END_OF_CONFIGURE' >> configure.tmp
676 $srcdir/bootstrap
677 $srcdir/bootstrap
679 .PHONY: $targets recheck
681 # Dummy dependencies to allow removing patches we no longer need.
682 END_OF_CONFIGURE
684 cat configure.tmp2 >> configure.tmp
686 cat <<'END_OF_CONFIGURE' >> configure.tmp
688 mv -f Makefile.tmp Makefile
689 trap - EXIT
690 echo "Configured successfully - now run \"${MAKE-make}\""
691 END_OF_CONFIGURE
693 rm -f configure.tmp2
695 chmod +x configure.tmp
696 mv -f configure.tmp configure
698 trap - EXIT
699 echo "Bootstrapped successfully - now run \"$srcdir/configure\" and \"${MAKE-make}\""