Fix overly long line of code
[xapian.git] / bootstrap
blob235ddff86444195752e59ae01ebdfd0e57043ceb
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
280 if [ ! -d .git ] ; then
281 echo "$0: No '.git' directory found - this script should be run from a"
282 echo "git repo cloned from git://git.xapian.org/xapian or a mirror of it"
283 exit 1
286 for emptydir in xapian-applications/omega/m4 xapian-bindings/m4 xapian-letor/m4 ; do
287 if test -d "$emptydir" ; then
289 else
290 parent=`echo "$emptydir"|sed 's,/[^/]*$,,'`
291 if test -d "$parent" ; then
292 mkdir "$emptydir"
295 done
297 if [ -f .git/info/exclude ] ; then
298 sed '/^\(swig\|xapian-applications\/omega\/common$\)/d' .git/info/exclude > .git/info/exclude~
299 else
300 [ -d .git/info ] || mkdir .git/info
302 cat <<END >> .git/info/exclude~
303 swig
304 xapian-applications/omega/common
305 xapian-letor/common
307 if [ -f .git/info/exclude ] &&
308 cmp -s .git/info/exclude~ .git/info/exclude ; then
309 rm .git/info/exclude~
310 else
311 mv .git/info/exclude~ .git/info/exclude
314 # If this tree is checked out from the github mirror, use the same access
315 # method for other things checked out from github (e.g. swig) so we avoid
316 # firewall issues. If there's no default remote, the git config command
317 # will exit with status 1, so ignore that failure.
318 origin_url=`git config remote.origin.url||:`
319 case $origin_url in
320 *[@/]github.com[:/]*)
321 github_base_url=`echo "X$origin_url"|sed 's/^X//;s!\([@/]github.com[:/]\).*!\1!'` ;;
323 github_base_url=git://github.com/ ;;
324 esac
325 swig_origin_url=${github_base_url}swig/swig.git
326 handle_git_external swig "$swig_git_commit_hash" "$swig_origin_url"
328 # If someone's created a directory for common, leave it be.
329 if [ -h xapian-applications/omega/common ] || \
330 [ ! -d xapian-applications/omega/common ] ; then
331 handle_git_external xapian-applications/omega/.common.git d52417d0c7389257e47ed1339fdfd2f4f57efda4 .
332 ln -sf .common.git/xapian-core/common xapian-applications/omega/common
335 # If someone's created a directory for common, leave it be.
336 if [ -h xapian-letor/common ] || [ ! -d xapian-letor/common ] ; then
337 handle_git_external xapian-letor/.common.git 3c0adf07a179083782ee6b8165a196668f0a1605 .
338 ln -sf .common.git/xapian-core/common xapian-letor/common
341 # Prefer http downloads as they are more likely to work through firewalls.
342 use_ftp=no
343 if [ "$1" = "--ftp" ] ; then
344 shift
345 use_ftp=yes
348 if [ "$1" = "--without-autotools" ] ; then
349 shift
350 else
351 if [ "$1" = "--clean" ] ; then
352 shift
353 rm -rf INST
356 [ -d INST ] || mkdir INST
357 instdir=`pwd`/INST
359 [ -d BUILD ] || mkdir BUILD
360 cd BUILD
362 # The last field is the SHA1 checksum of the tarball.
363 lazy_build doxygen 1.8.8 \
364 src.tar.gz cd511c73e7669dde5ac3e14a5d1abae093aaf1d9
365 lazy_build autoconf 2.68 \
366 tar.xz 63a3b495400c1c053f2f6b62efb7a5c0ad4156c9 \
367 tar.bz2 b534c293b22048c022b1ff3a372b9c03f26170b4 \
368 tar.gz 843f7dfcc6addf129dc2c8b12f7d72d371478f42
369 # 2.69 is fussy about the m4 version
370 # lazy_build autoconf 2.69 tar.gz 562471cbcb0dd0fa42a76665acf0dbb68479b78a
371 AUTOCONF=$instdir/bin/autoconf \
372 lazy_build automake 1.15 \
373 tar.xz c279b35ca6c410809dac8ade143b805fb48b7655 \
374 tar.gz b5a840c7ec4321e78fdc9472e476263fa6614ca1
375 lazy_build libtool 2.4.6 \
376 tar.xz 3e7504b832eb2dd23170c91b6af72e15b56eb94e \
377 tar.gz 25b6931265230a06f0fc2146df64c04e5ae6ec33
378 if [ "$1" = "--deps=libmagic" ] ; then
379 shift
380 lazy_build file 5.25 \
381 tar.gz fea78106dd0b7a09a61714cdbe545135563e84bd
384 for v in $autotools ; do
385 tool=`echo "$v"|tr A-Z a-z`
386 eval "$v=\"\$instdir\"/bin/$tool;export $v"
387 done
389 cd ..
392 case `${LIBTOOLIZE-libtoolize} --version` in
394 echo "${LIBTOOLIZE-libtoolize} not found"
395 exit 1 ;;
396 "libtoolize (GNU libtool) 1.4.*")
397 echo "${LIBTOOLIZE-libtoolize} is from libtool 1.4 which is too old - libtool 2.2 is required."
398 echo "If you have both installed, set LIBTOOLIZE to point to the correct version."
399 exit 1 ;;
400 "libtoolize (GNU libtool) 1.5.*")
401 echo "${LIBTOOLIZE-libtoolize} is from libtool 1.5 which is too old - libtool 2.2 is required."
402 echo "If you have both installed, set LIBTOOLIZE to point to the correct version."
403 exit 1 ;;
404 esac
406 ACLOCAL="${ACLOCAL-aclocal} -I `pwd`/xapian-core/m4-macros"
407 export ACLOCAL
409 intree_swig=no
410 modules=
411 for module in ${@:-xapian-core xapian-applications/omega swig xapian-bindings xapian-letor} ; do
412 d=$module
413 if [ -f "$d/configure.ac" -o -f "$d/configure.in" ] ; then
415 else
416 # Skip any directories we can't bootstrap.
417 continue
419 if [ -f "$d/.nobootstrap" ] ; then
420 # Report why to save head scratching when someone forgets they created
421 # a .nobootstrap file.
422 echo "Skipping '$module' due to presence of '$d/.nobootstrap'."
423 continue
425 if [ "$d" = swig ] && [ -f "xapian-bindings/.nobootstrap" ] ; then
426 # No point bootstrapping SWIG if we aren't going to use it.
427 echo "Skipping '$d' due to presence of 'xapian-bindings/.nobootstrap'."
428 continue
430 echo "Bootstrapping \`$module'"
431 [ -f "$d/preautoreconf" ] && "$d/preautoreconf"
433 # If we have a custom INSTALL file, preserve it since autoreconf insists on
434 # replacing INSTALL with "generic installation instructions" when --force
435 # is used. Be careful to replace it if autoreconf fails.
436 if [ -f "$d/INSTALL" ] ; then
437 if grep 'generic installation instructions' "$d/INSTALL" >/dev/null 2>&1 ; then
439 else
440 mv -f "$d/INSTALL" "$d/INSTALL.preserved-by-bootstrap"
444 autoreconf_rc=
445 if [ swig = "$module" ] ; then
446 # SWIG provides its own bootstrapping script.
447 curdir=`pwd`
448 cd "$d"
449 ./autogen.sh || autoreconf_rc=$?
450 cd "$curdir"
451 # Use the uninstalled wrapper for the in-tree copy of SWIG.
452 intree_swig=yes
453 else
454 # Use --install as debian's autoconf wrapper uses 2.5X if it sees it
455 # (but it doesn't check for -i).
457 # Use --force so that we update files if autoconf, automake, or libtool
458 # has been upgraded.
459 ${AUTORECONF-autoreconf} --install --force "$d" || autoreconf_rc=$?
461 if [ -f "$d/INSTALL.preserved-by-bootstrap" ] ; then
462 mv -f "$d/INSTALL.preserved-by-bootstrap" "$d/INSTALL"
464 if [ -n "$autoreconf_rc" ] ; then
465 exit $autoreconf_rc
467 for f in config.guess config.sub ; do
468 if [ -f "$d/$f" ] ; then
469 update_config "config/$f" "$d/$f"
471 done
472 modules="$modules $module"
473 done
475 # Generate the top-level configure script.
476 rm -f configure.tmp
477 cat <<'TOP_OF_CONFIGURE' > configure.tmp
478 #!/bin/sh
479 # configure each submodule in a xapian source tree
480 # Generated by Xapian top-level bootstrap script.
482 # Copyright (C) 2003,2004,2007,2008 Olly Betts
484 # This program is free software; you can redistribute it and/or
485 # modify it under the terms of the GNU General Public License as
486 # published by the Free Software Foundation; either version 2 of the
487 # License, or (at your option) any later version.
489 # This program is distributed in the hope that it will be useful,
490 # but WITHOUT ANY WARRANTY; without even the implied warranty of
491 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
492 # GNU General Public License for more details.
494 # You should have received a copy of the GNU General Public License
495 # along with this program; if not, write to the Free Software
496 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
497 # USA
499 trap 'echo "configure failed"' EXIT
500 set -e
502 # Produced escaped version of command suitable for pasting back into sh
503 cmd=$0
504 for a ; do
505 case $a in
506 *[^-A-Za-z0-9_+=:@/.,]*)
507 esc_a=`echo "$a"|sed 's!\([^-A-Za-z0-9_+=:@/.,]\)!\\\\\\1!g'`
508 cmd="$cmd $esc_a" ;;
510 cmd="$cmd $a" ;;
511 esac
512 done
514 here=`pwd`
515 TOP_OF_CONFIGURE
517 # Produce an absolute path to srcdir.
518 srcdir_abs=`pwd`
519 # This section is unquoted so we can substitute variables.
520 cat <<MIDDLE_OF_CONFIGURE >> configure.tmp
521 srcdir="$srcdir_abs"
522 modules="$modules"
523 MIDDLE_OF_CONFIGURE
525 vars=
526 if [ yes = "$intree_swig" ] ; then
527 # We want the path to SWIG to point into srcdir, which isn't known until
528 # configure-time, so we need to expand $here in configure. We can't just set
529 # SWIG here and let the case below handle it as that would escape the value
530 # such that $here didn't get expanded at all.
531 echo ': ${SWIG="$here/swig/preinst-swig"}' >> configure.tmp
532 echo "export SWIG" >> configure.tmp
533 vars=' SWIG=$here/swig/preinst-swig'
534 # Kill any existing setting of SWIG so that we don't try to handle it again
535 # below.
536 SWIG=
538 for tool in SWIG $autotools ; do
539 eval "val=\$$tool"
540 if [ -n "$val" ] ; then
541 echo ': ${'"$tool='$val'"'}' >> configure.tmp
542 echo "export $tool" >> configure.tmp
543 vars="$vars $tool='"`echo "$val"|sed 's/\(['"\\'"']\)/\\\1/g'`"'"
545 done
546 if [ -n "$vars" ] ; then
547 # $vars will always have a leading space.
548 echo "set$vars "'"$@"' >> configure.tmp
551 cat <<'END_OF_CONFIGURE' >> configure.tmp
552 dirs=
553 revdirs=
554 XAPIAN_CONFIG=$here/xapian-core/xapian-config
555 for d in $modules ; do
556 if [ "$here" = "$srcdir" ] ; then
557 configure=./configure
558 configure_from_here=$d/configure
559 else
560 configure=$srcdir/$d/configure
561 configure_from_here=$configure
563 if [ -f "$configure_from_here" ] ; then
564 if [ -d "$d" ] ; then : ; else
565 case $d in
566 xapian-applications/*) [ -d xapian-applications ] || mkdir xapian-applications ;;
567 esac
568 mkdir "$d"
570 echo "Configuring \`$d'"
571 # Use a shared config.cache for speed and to save a bit of diskspace, but
572 # don't share it with SWIG just in case it manages to probe and cache
573 # different answers (e.g. because it uses a C compiler).
574 case $d in
575 swig)
576 cd "$d" && "$configure" ${1+"$@"}
578 xapian-core)
579 cd "$d" && "$configure" --enable-maintainer-mode --disable-option-checking --cache-file="$here/config.cache" ${1+"$@"}
581 xapian-applications/omega)
582 cd "$d" && "$configure" --enable-maintainer-mode --disable-option-checking XAPIAN_CONFIG="$XAPIAN_CONFIG" CPPFLAGS="-I$srcdir/INST/include" LDFLAGS="-L$srcdir/INST/lib" ${1+"$@"}
585 cd "$d" && "$configure" --enable-maintainer-mode --disable-option-checking --cache-file="$here/config.cache" XAPIAN_CONFIG="$XAPIAN_CONFIG" ${1+"$@"}
587 esac
588 cd "$here"
589 dirs="$dirs $d"
590 revdirs="$d $revdirs"
592 done
594 rm -f Makefile.tmp
595 cat <<EOF > Makefile.tmp
596 # Makefile generated by:
597 CONFIGURE_COMMAND := $cmd
599 if [ "$srcdir" != . ] ; then
600 cat <<EOF >> Makefile.tmp
602 VPATH = $srcdir
605 targets='all install uninstall install-strip clean distclean mostlyclean maintainer-clean dist check distcheck'
606 for target in $targets ; do
607 echo
608 echo "$target:"
609 case $target in
610 uninstall|*clean)
611 # When uninstalling or cleaning, process directories in reverse order, so
612 # that we process a directory after any directories which might use it.
613 list=$revdirs ;;
615 list=$dirs ;;
616 esac
617 for d in $list ; do
618 case $d,$target in
619 swig,install*|swig,uninstall)
620 # Nothing to do with swig when installing/uninstalling.
622 swig,dist|swig,check|swig,distcheck|swig,all)
623 # Need to ensure swig is built before "make dist", "make check", etc.
624 echo " cd $d && \$(MAKE)" ;;
625 swig,mostlyclean)
626 echo " cd $d && \$(MAKE) clean" ;;
627 xapian-bindings,distcheck)
628 # FIXME: distcheck doesn't currently work for xapian-bindings because
629 # xapian-core isn't installed.
630 echo " cd $d && \$(MAKE) check && \$(MAKE) dist" ;;
632 echo " cd $d && \$(MAKE) $target" ;;
633 esac
634 done
635 case $target in
636 distclean|maintainer-clean) echo " rm -f Makefile config.cache" ;;
637 esac
638 done >> Makefile.tmp
639 cat <<EOF >> Makefile.tmp
641 recheck:
642 \$(CONFIGURE_COMMAND)
644 Makefile: $srcdir/configure
645 \$(CONFIGURE_COMMAND)
647 $srcdir/configure: \\
648 END_OF_CONFIGURE
650 : > configure.tmp2
652 # We want to rerun bootstrap if a series file changes (patch added or removed)
653 # or an existing patch changes. Since we always have an series file (even if
654 # it is empty), this also handles us adding the first patch for something.
655 patches=
656 for d in patches/* ; do
657 series=$d/series
658 echo "$series:" >> configure.tmp2
659 cat << END
660 $series\\\\
662 sed -n 's/[ ]*\(#.*\)\?$//;/./p' "$series" |\
663 while read p ; do
664 patch=$d/$p
665 cat << END
666 $patch\\\\
668 # Because there's a pipeline, this is a subshell, so use a temporary file
669 # rather than a variable to compile a list of patches to use below.
670 echo "$patch:" >> configure.tmp2
671 done
672 done >> configure.tmp
674 cat <<'END_OF_CONFIGURE' >> configure.tmp
675 $srcdir/bootstrap
676 $srcdir/bootstrap
678 .PHONY: $targets recheck
680 # Dummy dependencies to allow removing patches we no longer need.
681 END_OF_CONFIGURE
683 cat configure.tmp2 >> configure.tmp
685 cat <<'END_OF_CONFIGURE' >> configure.tmp
687 mv -f Makefile.tmp Makefile
688 trap - EXIT
689 echo "Configured successfully - now run \"${MAKE-make}\""
690 END_OF_CONFIGURE
692 rm -f configure.tmp2
694 chmod +x configure.tmp
695 mv -f configure.tmp configure
697 trap - EXIT
698 echo "Bootstrapped successfully - now run \"$srcdir/configure\" and \"${MAKE-make}\""