Add comment noting why a regex check is used
[xapian.git] / bootstrap
blobd095ffc0e8adec1531f3ed3fb82b9dc1196899a3
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 echo "$0 [--ftp] [--without-autotools|--clean]"
24 exit 0
27 trap 'echo "Bootstrap failed"' EXIT
28 set -e
30 # The variables which specify the autotools to use. And doxygen.
31 autotools="AUTORECONF AUTOCONF AUTOHEADER AUTOM4TE AUTOMAKE ACLOCAL LIBTOOLIZE DOXYGEN"
33 # Tool for downloading a file from a URL (currently wget or curl).
34 FETCH_URL_TOOL=
36 check_sha1sum() {
37 checksum=$1
38 tarball=$2
40 if [ -z "$SHA1SUM_TOOL" ] ; then
41 for SHA1SUM_TOOL in \
42 '${SHA1SUM-sha1sum} 2>/dev/null|cut -d\ -f1' \
43 '${SHASUM-shasum} 2>/dev/null|cut -d\ -f1' \
44 '$(OPENSSL-openssl} sha1 2>/dev/null|sed "s/.* //"' \
45 '' ; do
46 if [ -z "$SHA1SUM_TOOL" ] ; then
47 echo <<'END'
48 Need sha1sum or shasum or openssl installed to check SHA1 checksums.
49 Set environment variable SHA1SUM, SHASUM or OPENSSL if the tool isn't on
50 your PATH.
51 END
52 exit 1
54 r=`:|eval "$SHA1SUM_TOOL"`
55 [ X"$r" != Xda39a3ee5e6b4b0d3255bfef95601890afd80709 ] || break
56 done
58 r=`< $tarball eval "$SHA1SUM_TOOL"`
59 if [ X"$r" != X"$checksum" ] ; then
60 echo "$tarball: computed SHA1 checksum did NOT match"
61 echo "computed: $r with $SHA1SUM_TOOL"
62 echo "expected: $checksum"
63 ls -l $tarball
64 file $tarball || true
65 mv "$tarball" "$tarball.$r"
66 echo "Renamed $tarball to $tarball.$r"
67 exit 1
71 lazy_build() {
72 package=$1
73 basename=$package-$2
74 ext=$3
75 checksum=$4
76 if [ "$ext" = "tar.xz" ] ; then
77 if [ -z "$xz_ok" ] ; then
78 if ${XZ-xz} --version > /dev/null 2>&1 ; then
79 xz_ok=1
80 else
81 xz_ok=0
84 if [ "$xz_ok" = 0 ] ; then
85 shift 2
86 ext=$3
87 checksum=$4
90 if [ "$ext" = "tar.bz2" ] ; then
91 if [ -z "$bz2_ok" ] ; then
92 # bzip2 --version doesn't exit with code 0 in upstream version (though
93 # Debian at least patch this bug), so use --help to check it.
94 if bzip2 --help > /dev/null 2>&1 ; then
95 bz2_ok=1
96 else
97 bz2_ok=0
100 if [ "$bz2_ok" = 0 ] ; then
101 shift 2
102 ext=$3
103 checksum=$4
106 tarball=$basename.$ext
107 case $basename in
108 *[24680][a-z]) basename=`echo "$basename"|sed 's/[a-z]$//'` ;;
109 esac
111 # Create the stamp file in INST so that rerunning bootstrap after
112 # "rm -rf INST" recovers nicely.
113 stamp=../INST/$package.stamp
115 # Download the tarball if required.
116 if [ ! -f "$tarball" ] ; then
117 if [ -z "$FETCH_URL_TOOL" ] ; then
118 if ${WGET-wget} --version > /dev/null 2>&1 ; then
119 FETCH_URL_TOOL="${WGET-wget} -O-"
120 elif ${CURL-curl} --version > /dev/null 2>&1 || [ "$?" = 2 ] ; then
121 # curl --version exits with code 2.
122 # -L is needed to follow HTTP redirects.
123 FETCH_URL_TOOL="${CURL-curl} -L"
124 elif ${LWP_REQUEST-lwp-request} -v > /dev/null 2>&1 || [ "$?" = 9 -o "$?" = 255 ] ; then
125 # lwp-request -v exits with code 9 (5.810) or 255 (6.03)
126 FETCH_URL_TOOL="${LWP_REQUEST-lwp-request} -mGET"
127 else
128 cat <<END >&2
129 Neither wget nor curl nor lwp-request found - install one of them or if already
130 installed, set WGET, CURL or LWP_REQUEST to the full path. Alternatively,
131 download $url
132 to directory `pwd`
133 then rerun this script.
135 exit 1
138 case $basename in
139 doxygen-*)
140 if [ "$use_ftp" = yes ] ; then
141 url="ftp://ftp.stack.nl/pub/users/dimitri/$tarball"
142 else
143 url="http://ftp.stack.nl/pub/users/dimitri/$tarball"
144 fi ;;
145 file-*)
146 if [ "$use_ftp" = yes ] ; then
147 url="ftp://ftp.astron.com/pub/file/$tarball"
148 else
149 url="http://fossies.org/unix/misc/$tarball"
150 fi ;;
151 *[13579][a-z])
152 # GNU alpha release
153 if [ "$use_ftp" = yes ] ; then
154 url="ftp://alpha.gnu.org/gnu/$package/$tarball"
155 else
156 url="http://alpha.gnu.org/gnu/$package/$tarball"
157 fi ;;
159 if [ "$use_ftp" = yes ] ; then
160 url="ftp://ftp.gnu.org/gnu/$package/$tarball"
161 else
162 url="http://ftpmirror.gnu.org/$package/$tarball"
163 fi ;;
164 esac
165 rm -f download.tmp
166 echo "Downloading <$url>"
167 $FETCH_URL_TOOL "$url" > download.tmp && mv download.tmp "$tarball"
170 if [ -f "$stamp" ] ; then
171 find_stdout=`find "$tarball" ../patches/"$package"/* -newer "$stamp" -print 2> /dev/null||true`
172 else
173 find_stdout=force
176 if [ -n "$find_stdout" ] ; then
177 # Verify the tarball's checksum before building it.
178 check_sha1sum "$checksum" "$tarball"
180 # Remove tarballs of other versions.
181 for f in "$package"-* ; do
182 [ "$f" = "$tarball" ] || rm -rf "$f"
183 done
185 case $ext in
186 tar.xz)
187 ${XZ-xz} -dc "$tarball"| tar xf - ;;
188 tar.bz2)
189 bzip2 -dc "$tarball"| tar xf - ;;
191 gzip -dc "$tarball"| tar xf - ;;
192 esac
194 cd "$basename"
196 if [ ! -f "../../patches/$package/series" ] ; then
197 cat <<END >&2
198 No patch series file 'patches/$package/series' - if there are no patches,
199 this should just be an empty file.
201 exit 1
203 echo "Applying patches from $package/series"
204 sed -n 's/[ ]*\(#.*\)\?$//;/./p' "../../patches/$package/series" | \
205 while read p ; do
206 echo "Applying patch $package/$p"
207 patch -p1 < "../../patches/$package/$p"
208 done
210 # Fix doxygen/Qt stupid and pointless enumerating of Mac OS X releases
211 # which stops it building on each new OS X release.
212 if [ -f qtools/qglobal.h ] ; then
213 sed 's!^[ ]*#[ ]*\(error\|warning\).*Mac *OS *X is unsupported!// &!' \
214 qtools/qglobal.h > qtools/qglobal.hT
215 mv qtools/qglobal.hT qtools/qglobal.h
218 if test -n "$AUTOCONF" ; then
219 ./configure --prefix "$instdir" AUTOCONF="$AUTOCONF"
220 else
221 ./configure --prefix "$instdir"
223 make
224 make install
225 cd ..
226 rm -rf "$basename"
228 touch "$stamp"
232 handle_git_external() {
233 path=$1
234 if [ ! -f "$path/.nobootstrap" ] ; then
235 rev=$2
236 url=$3
237 if [ ! -d "$path" ] ; then
238 git clone --no-checkout -- "$url" "$path"
239 elif (cd "$path" && git reflog "$rev" -- 2>/dev/null) ; then
240 : # Already have that revision locally
241 else
242 (cd "$path" && git fetch)
244 (cd "$path" && git checkout "$rev")
248 update_config() {
249 from=$1
250 to=$2
251 ts_from=`perl -ne '/^timestamp=(\W?)([-\d]+)$1/ and do {$_=$2;y/-//d;print;exit}' "$from"`
252 ts_to=`perl -ne '/^timestamp=(\W?)([-\d]+)$1/ and do {$_=$2;y/-//d;print;exit}' "$to"`
253 if [ "$ts_from" -gt "$ts_to" ] ; then
254 echo "Updating $to ($ts_to) with $from ($ts_from)"
255 # rm first in case the existing file is a symlink.
256 rm -f "$to"
257 cp "$from" "$to"
261 curdir=`pwd`
263 # cd to srcdir if we aren't already there.
264 srcdir=`echo "$0"|sed 's!/*[^/]*$!!'`
265 case $srcdir in
266 ""|.)
267 srcdir=. ;;
269 cd "$srcdir" ;;
270 esac
272 # Commit hash to pass to handle_git_external for swig.
273 swig_git_commit_hash=1a99212c2c1f2c1819ae84fe553a27889be46791
274 swig_origin_url=git://github.com/swig/swig.git
276 if [ ! -d .git ] ; then
277 echo "$0: No '.git' directory found - this script should be run from a"
278 echo "git repo cloned from git://git.xapian.org/xapian or a mirror of it"
279 exit 1
282 for emptydir in xapian-applications/omega/m4 xapian-bindings/m4 xapian-letor/m4 ; do
283 if test -d "$emptydir" ; then
285 else
286 parent=`echo "$emptydir"|sed 's,/[^/]*$,,'`
287 if test -d "$parent" ; then
288 mkdir "$emptydir"
291 done
293 if [ -f .git/info/exclude ] ; then
294 sed '/^\(swig\|xapian-applications\/omega\/common$\)/d' .git/info/exclude > .git/info/exclude~
295 else
296 [ -d .git/info ] || mkdir .git/info
298 cat <<END >> .git/info/exclude~
299 swig
300 xapian-applications/omega/common
301 xapian-letor/common
303 if [ -f .git/info/exclude ] &&
304 cmp .git/info/exclude~ .git/info/exclude > /dev/null ; then
305 rm .git/info/exclude~
306 else
307 mv .git/info/exclude~ .git/info/exclude
310 # If this tree is checked out from the github mirror, use the same access
311 # method for other things checked out from github (e.g. swig) so we avoid
312 # firewall issues. If there's no default remote, the git config command
313 # will exit with status 1, so ignore that failure.
314 origin_url=`git config remote.origin.url||:`
315 case $origin_url in
316 *[@/]github.com[:/]*)
317 github_base_url=`echo "X$origin_url"|sed 's/^X//;s!\([@/]github.com[:/]\).*!\1!'` ;;
319 github_base_url=git://github.com/ ;;
320 esac
321 swig_origin_url=${github_base_url}swig/swig.git
322 handle_git_external swig "$swig_git_commit_hash" "$swig_origin_url"
324 # If someone's created a directory for common, leave it be.
325 if [ -h xapian-applications/omega/common ] || \
326 [ ! -d xapian-applications/omega/common ] ; then
327 handle_git_external xapian-applications/omega/.common.git 3c0adf07a179083782ee6b8165a196668f0a1605 .
328 ln -sf .common.git/xapian-core/common xapian-applications/omega/common
331 # If someone's created a directory for common, leave it be.
332 if [ -h xapian-letor/common ] || [ ! -d xapian-letor/common ] ; then
333 handle_git_external xapian-letor/.common.git 3c0adf07a179083782ee6b8165a196668f0a1605 .
334 ln -sf .common.git/xapian-core/common xapian-letor/common
337 # Prefer http downloads as they are more likely to work through firewalls.
338 use_ftp=no
339 if [ "$1" = "--ftp" ] ; then
340 shift
341 use_ftp=yes
344 if [ "$1" = "--without-autotools" ] ; then
345 shift
346 else
347 if [ "$1" = "--clean" ] ; then
348 shift
349 rm -rf INST
352 [ -d INST ] || mkdir INST
353 instdir=`pwd`/INST
355 [ -d BUILD ] || mkdir BUILD
356 cd BUILD
358 # The last field is the SHA1 checksum of the tarball.
359 lazy_build doxygen 1.8.8 \
360 src.tar.gz cd511c73e7669dde5ac3e14a5d1abae093aaf1d9
361 lazy_build autoconf 2.68 \
362 tar.xz 63a3b495400c1c053f2f6b62efb7a5c0ad4156c9 \
363 tar.bz2 b534c293b22048c022b1ff3a372b9c03f26170b4 \
364 tar.gz 843f7dfcc6addf129dc2c8b12f7d72d371478f42
365 # 2.69 is fussy about the m4 version
366 # lazy_build autoconf 2.69 tar.gz 562471cbcb0dd0fa42a76665acf0dbb68479b78a
367 AUTOCONF=$instdir/bin/autoconf \
368 lazy_build automake 1.15 \
369 tar.xz c279b35ca6c410809dac8ade143b805fb48b7655 \
370 tar.gz b5a840c7ec4321e78fdc9472e476263fa6614ca1
371 lazy_build libtool 2.4.6 \
372 tar.xz 3e7504b832eb2dd23170c91b6af72e15b56eb94e \
373 tar.gz 25b6931265230a06f0fc2146df64c04e5ae6ec33
374 if [ "$1" = "--deps=libmagic" ] ; then
375 shift
376 lazy_build file 5.22 \
377 tar.gz 20fa06592291555f2b478ea2fb70b53e9e8d1f7c
380 for v in $autotools ; do
381 tool=`echo "$v"|tr A-Z a-z`
382 eval "$v=\"\$instdir\"/bin/$tool;export $v"
383 done
385 cd ..
388 case `${LIBTOOLIZE-libtoolize} --version` in
390 echo "${LIBTOOLIZE-libtoolize} not found"
391 exit 1 ;;
392 "libtoolize (GNU libtool) 1.4.*")
393 echo "${LIBTOOLIZE-libtoolize} is from libtool 1.4 which is too old - libtool 2.2 is required."
394 echo "If you have both installed, set LIBTOOLIZE to point to the correct version."
395 exit 1 ;;
396 "libtoolize (GNU libtool) 1.5.*")
397 echo "${LIBTOOLIZE-libtoolize} is from libtool 1.5 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 esac
402 ACLOCAL="${ACLOCAL-aclocal} -I `pwd`/xapian-core/m4-macros"
404 intree_swig=no
405 modules=
406 for module in xapian-core xapian-applications/omega swig xapian-bindings xapian-letor ; do
407 d=$module
408 if [ -f "$d/configure.ac" -o -f "$d/configure.in" ] ; then
410 else
411 # Skip any directories we can't bootstrap.
412 continue
414 if [ -f "$d/.nobootstrap" ] ; then
415 # Report why to save head scratching when someone forgets they created
416 # a .nobootstrap file.
417 echo "Skipping '$module' due to presence of '$d/.nobootstrap'."
418 continue
420 if [ "$d" = swig ] && [ -f "xapian-bindings/.nobootstrap" ] ; then
421 # No point bootstrapping SWIG if we aren't going to use it.
422 echo "Skipping '$d' due to presence of 'xapian-bindings/.nobootstrap'."
423 continue
425 echo "Bootstrapping \`$module'"
426 [ -f "$d/preautoreconf" ] && "$d/preautoreconf"
428 # If we have a custom INSTALL file, preserve it since autoreconf insists on
429 # replacing INSTALL with "generic installation instructions" when --force
430 # is used. Be careful to replace it if autoreconf fails.
431 if [ -f "$d/INSTALL" ] ; then
432 if grep 'generic installation instructions' "$d/INSTALL" >/dev/null 2>&1 ; then
434 else
435 mv -f "$d/INSTALL" "$d/INSTALL.preserved-by-bootstrap"
439 autoreconf_rc=
440 if [ swig = "$module" ] ; then
441 # SWIG provides its own bootstrapping script.
442 curdir=`pwd`
443 cd "$d"
444 ./autogen.sh || autoreconf_rc=$?
445 cd "$curdir"
446 # Use the uninstalled wrapper for the in-tree copy of SWIG.
447 intree_swig=yes
448 else
449 # Use --install as debian's autoconf wrapper uses 2.5X if it sees it
450 # (but it doesn't check for -i).
452 # Use --force so that we update files if autoconf, automake, or libtool
453 # has been upgraded.
454 ${AUTORECONF-autoreconf} --install --force "$d" || autoreconf_rc=$?
456 if [ -f "$d/INSTALL.preserved-by-bootstrap" ] ; then
457 mv -f "$d/INSTALL.preserved-by-bootstrap" "$d/INSTALL"
459 if [ -n "$autoreconf_rc" ] ; then
460 exit $autoreconf_rc
462 for f in config.guess config.sub ; do
463 if [ -f "$d/$f" ] ; then
464 update_config "config/$f" "$d/$f"
466 done
467 modules="$modules $module"
468 done
470 # Generate the top-level configure script.
471 rm -f configure.tmp
472 cat <<'TOP_OF_CONFIGURE' > configure.tmp
473 #!/bin/sh
474 # configure each submodule in a xapian source tree
475 # Generated by Xapian top-level bootstrap script.
477 # Copyright (C) 2003,2004,2007,2008 Olly Betts
479 # This program is free software; you can redistribute it and/or
480 # modify it under the terms of the GNU General Public License as
481 # published by the Free Software Foundation; either version 2 of the
482 # License, or (at your option) any later version.
484 # This program is distributed in the hope that it will be useful,
485 # but WITHOUT ANY WARRANTY; without even the implied warranty of
486 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
487 # GNU General Public License for more details.
489 # You should have received a copy of the GNU General Public License
490 # along with this program; if not, write to the Free Software
491 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
492 # USA
494 trap 'echo "configure failed"' EXIT
495 set -e
497 # Produced escaped version of command suitable for pasting back into sh
498 cmd=$0
499 for a ; do
500 case $a in
501 *[^-A-Za-z0-9_+=:@/.,]*)
502 esc_a=`echo "$a"|sed 's!\([^-A-Za-z0-9_+=:@/.,]\)!\\\\\\1!g'`
503 cmd="$cmd $esc_a" ;;
505 cmd="$cmd $a" ;;
506 esac
507 done
509 here=`pwd`
510 TOP_OF_CONFIGURE
512 # Produce an absolute path to srcdir.
513 srcdir_abs=`pwd`
514 # This section is unquoted so we can substitute variables.
515 cat <<MIDDLE_OF_CONFIGURE >> configure.tmp
516 srcdir="$srcdir_abs"
517 modules="$modules"
518 MIDDLE_OF_CONFIGURE
520 vars=
521 if [ yes = "$intree_swig" ] ; then
522 # We want the path to SWIG to point into srcdir, which isn't known until
523 # configure-time, so we need to expand $here in configure. We can't just set
524 # SWIG here and let the case below handle it as that would escape the value
525 # such that $here didn't get expanded at all.
526 echo ': ${SWIG="$here/swig/preinst-swig"}' >> configure.tmp
527 echo "export SWIG" >> configure.tmp
528 vars=' SWIG=$here/swig/preinst-swig'
529 # Kill any existing setting of SWIG so that we don't try to handle it again
530 # below.
531 SWIG=
533 for tool in SWIG $autotools ; do
534 eval "val=\$$tool"
535 if [ -n "$val" ] ; then
536 echo ': ${'"$tool='$val'"'}' >> configure.tmp
537 echo "export $tool" >> configure.tmp
538 vars="$vars $tool='"`echo "$val"|sed 's/\(['"\\'"']\)/\\\1/g'`"'"
540 done
541 if [ -n "$vars" ] ; then
542 # $vars will always have a leading space.
543 echo "set$vars "'"$@"' >> configure.tmp
546 cat <<'END_OF_CONFIGURE' >> configure.tmp
547 dirs=
548 revdirs=
549 XAPIAN_CONFIG=$here/xapian-core/xapian-config
550 for d in $modules ; do
551 if [ "$here" = "$srcdir" ] ; then
552 configure=./configure
553 configure_from_here=$d/configure
554 else
555 configure=$srcdir/$d/configure
556 configure_from_here=$configure
558 if [ -f "$configure_from_here" ] ; then
559 if [ -d "$d" ] ; then : ; else
560 case $d in
561 xapian-applications/*) [ -d xapian-applications ] || mkdir xapian-applications ;;
562 esac
563 mkdir "$d"
565 echo "Configuring \`$d'"
566 # Use a shared config.cache for speed and to save a bit of diskspace, but
567 # don't share it with SWIG just in case it manages to probe and cache
568 # different answers (e.g. because it uses a C compiler).
569 case $d in
570 swig)
571 cd "$d" && "$configure" ${1+"$@"}
573 xapian-core)
574 cd "$d" && "$configure" --enable-maintainer-mode --disable-option-checking --cache-file="$here/config.cache" ${1+"$@"}
576 xapian-applications/omega)
577 cd "$d" && "$configure" --enable-maintainer-mode --disable-option-checking XAPIAN_CONFIG="$XAPIAN_CONFIG" CPPFLAGS="-I$srcdir/INST/include" LDFLAGS="-L$srcdir/INST/lib" ${1+"$@"}
580 cd "$d" && "$configure" --enable-maintainer-mode --disable-option-checking --cache-file="$here/config.cache" XAPIAN_CONFIG="$XAPIAN_CONFIG" ${1+"$@"}
582 esac
583 cd "$here"
584 dirs="$dirs $d"
585 revdirs="$d $revdirs"
587 done
589 rm -f Makefile.tmp
590 cat <<EOF > Makefile.tmp
591 # Makefile generated by:
592 CONFIGURE_COMMAND := $cmd
594 if [ "$srcdir" != . ] ; then
595 cat <<EOF >> Makefile.tmp
597 VPATH = $srcdir
600 targets='all install uninstall install-strip clean distclean mostlyclean maintainer-clean dist check distcheck'
601 for target in $targets ; do
602 echo
603 echo "$target:"
604 case $target in
605 uninstall|*clean)
606 # When uninstalling or cleaning, process directories in reverse order, so
607 # that we process a directory after any directories which might use it.
608 list=$revdirs ;;
610 list=$dirs ;;
611 esac
612 for d in $list ; do
613 case $d,$target in
614 swig,install*|swig,uninstall)
615 # Nothing to do with swig when installing/uninstalling.
617 swig,dist|swig,check|swig,distcheck|swig,all)
618 # Need to ensure swig is built before "make dist", "make check", etc.
619 echo " cd $d && \$(MAKE)" ;;
620 swig,mostlyclean)
621 echo " cd $d && \$(MAKE) clean" ;;
622 xapian-bindings,distcheck)
623 # FIXME: distcheck doesn't currently work for xapian-bindings because
624 # xapian-core isn't installed.
625 echo " cd $d && \$(MAKE) check && \$(MAKE) dist" ;;
627 echo " cd $d && \$(MAKE) $target" ;;
628 esac
629 done
630 case $target in
631 distclean|maintainer-clean) echo " rm -f Makefile config.cache" ;;
632 esac
633 done >> Makefile.tmp
634 cat <<EOF >> Makefile.tmp
636 recheck:
637 \$(CONFIGURE_COMMAND)
639 Makefile: $srcdir/configure
640 \$(CONFIGURE_COMMAND)
642 $srcdir/configure: \\
643 END_OF_CONFIGURE
645 : > configure.tmp2
647 # We want to rerun bootstrap if a series file changes (patch added or removed)
648 # or an existing patch changes. Since we always have an series file (even if
649 # it is empty), this also handles us adding the first patch for something.
650 patches=
651 for d in patches/* ; do
652 series=$d/series
653 echo "$series:" >> configure.tmp2
654 cat << END
655 $series\\\\
657 sed -n 's/[ ]*\(#.*\)\?$//;/./p' "$series" |\
658 while read p ; do
659 patch=$d/$p
660 cat << END
661 $patch\\\\
663 # Because there's a pipeline, this is a subshell, so use a temporary file
664 # rather than a variable to compile a list of patches to use below.
665 echo "$patch:" >> configure.tmp2
666 done
667 done >> configure.tmp
669 cat <<'END_OF_CONFIGURE' >> configure.tmp
670 $srcdir/bootstrap
671 $srcdir/bootstrap
673 .PHONY: $targets recheck
675 # Dummy dependencies to allow removing patches we no longer need.
676 END_OF_CONFIGURE
678 cat configure.tmp2 >> configure.tmp
680 cat <<'END_OF_CONFIGURE' >> configure.tmp
682 mv -f Makefile.tmp Makefile
683 trap - EXIT
684 echo "Configured successfully - now run \"${MAKE-make}\""
685 END_OF_CONFIGURE
687 rm -f configure.tmp2
689 chmod +x configure.tmp
690 mv -f configure.tmp configure
692 trap - EXIT
693 echo "Bootstrapped successfully - now run \"$srcdir/configure\" and \"${MAKE-make}\""