]> git.ipfire.org Git - thirdparty/tar.git/blame - bootstrap
Remove Makefile.in
[thirdparty/tar.git] / bootstrap
CommitLineData
88ffc135
PE
1#! /bin/sh
2
ac6caa71 3# Bootstrap this package from checked-out sources.
88ffc135 4
ac6caa71 5# Copyright (C) 2003-2008, 2009 Free Software Foundation, Inc.
88ffc135 6
ac6caa71 7# This program is free software: you can redistribute it and/or modify
88ffc135 8# it under the terms of the GNU General Public License as published by
ac6caa71
SP
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
88ffc135
PE
11
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.
16
17# You should have received a copy of the GNU General Public License
ac6caa71 18# along with this program. If not, see <http://www.gnu.org/licenses/>.
88ffc135 19
7347b4f5 20# Written by Paul Eggert and Sergey Poznyakoff.
88ffc135 21
c930802f
PE
22nl='
23'
94de7c4c
PE
24
25# Ensure file names are sorted consistently across platforms.
e24d4efe
PE
26LC_ALL=C
27export LC_ALL
28
ac6caa71
SP
29local_gl_dir=gl
30
31# Temporary directory names.
32bt='._bootmp'
33bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
34bt2=${bt}2
35
9771467d 36usage() {
c930802f
PE
37 echo >&2 "\
38Usage: $0 [OPTION]...
39Bootstrap this package from the checked-out sources.
40
41Options:
42 --paxutils-srcdir=DIRNAME Specify the local directory where paxutils
43 sources reside. Use this if you already
44 have paxutils sources on your machine, and
45 do not want to waste your bandwidth dowloading
46 them again.
47 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
48 sources reside. Use this if you already
49 have gnulib sources on your machine, and
ac6caa71 50 do not want to waste your bandwidth downloading
c930802f
PE
51 them again.
52 --copy Copy files instead of creating symbolic links.
53 --force Attempt to bootstrap even if the sources seem
54 not to have been checked out.
55 --skip-po Do not download po files.
c930802f 56
ac6caa71 57If the file $0.conf exists in the same directory as this script, its
c930802f
PE
58contents are read as shell variables to configure the bootstrap.
59
60Running without arguments will suffice in most cases.
61"
9771467d 62}
88ffc135 63
c930802f
PE
64# Configuration.
65
ac6caa71
SP
66# Name of the Makefile.am
67gnulib_mk=gnulib.mk
68
c930802f
PE
69# List of gnulib modules needed.
70gnulib_modules=
71
72# Any gnulib files needed that are not in modules.
73gnulib_files=
74
e496c1b5
SP
75# The command to download all .po files for a specified domain into
76# a specified directory. Fill in the first %s is the domain name, and
77# the second with the destination directory. Use rsync's -L and -r
78# options because the latest/%s directory and the .po files within are
79# all symlinks.
80po_download_command_format=\
81"rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'"
c930802f
PE
82
83extract_package_name='
84 /^AC_INIT(/{
ac6caa71 85 /.*,.*,.*, */{
c930802f
PE
86 s///
87 s/[][]//g
ac6caa71 88 s/)$//
c930802f
PE
89 p
90 q
91 }
92 s/AC_INIT(\[*//
93 s/]*,.*//
94 s/^GNU //
95 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
96 s/[^A-Za-z0-9_]/-/g
97 p
98 }
99'
100package=`sed -n "$extract_package_name" configure.ac` || exit
ac6caa71
SP
101gnulib_name=lib$package
102
103build_aux=build-aux
104source_base=lib
105m4_base=m4
106doc_base=doc
107tests_base=tests
c930802f
PE
108
109# Extra files from gnulib, which override files from other sources.
ac6caa71
SP
110gnulib_extra_files="
111 $build_aux/install-sh
112 $build_aux/missing
113 $build_aux/mdate-sh
114 $build_aux/texinfo.tex
115 $build_aux/depcomp
116 $build_aux/config.guess
117 $build_aux/config.sub
c930802f 118 doc/INSTALL
ac6caa71
SP
119"
120
121# Additional gnulib-tool options to use. Use "\newline" to break lines.
122gnulib_tool_option_extras=
c930802f
PE
123
124# Other locale categories that need message catalogs.
125EXTRA_LOCALE_CATEGORIES=
126
127# Additional xgettext options to use. Use "\\\newline" to break lines.
128XGETTEXT_OPTIONS='\\\
129 --flag=_:1:pass-c-format\\\
130 --flag=N_:1:pass-c-format\\\
131 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
132'
133
ac6caa71
SP
134# Package bug report address for gettext files
135MSGID_BUGS_ADDRESS=bug-$package@gnu.org
136
c930802f
PE
137# Files we don't want to import.
138excluded_files=
139
140# File that should exist in the top directory of a checked out hierarchy,
141# but not in a distribution tarball.
ac6caa71 142checkout_only_file=README-hacking
c930802f
PE
143
144# Whether to use copies instead of symlinks.
145copy=false
146
ac6caa71
SP
147# Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
148# those files to be generated in directories like lib/, m4/, and po/.
149# Or set it to 'auto' to make this script select which to use based
150# on which version control system (if any) is used in the source directory.
151vc_ignore=auto
152
c930802f 153# Override the default configuration, if necessary.
ac6caa71
SP
154# Make sure that bootstrap.conf is sourced from the current directory
155# if we were invoked as "sh bootstrap".
156case "$0" in
157 */*) test -r "$0.conf" && . "$0.conf" ;;
158 *) test -r "$0.conf" && . ./"$0.conf" ;;
159esac
160
c930802f 161
ac6caa71
SP
162if test "$vc_ignore" = auto; then
163 vc_ignore=
164 test -d .git && vc_ignore=.gitignore
165 test -d CVS && vc_ignore="$vc_ignore .cvsignore"
27094c4f
SP
166fi
167
c930802f 168# Translate configuration into internal form.
64aea5de 169
88ffc135
PE
170# Parse options.
171
54e32211
PE
172for option
173do
88ffc135
PE
174 case $option in
175 --help)
9771467d 176 usage
88ffc135 177 exit;;
ac6caa71
SP
178 --gnulib-srcdir=*)
179 GNULIB_SRCDIR=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;;
7347b4f5
SP
180 --paxutils-srcdir=*)
181 PAXUTILS_SRCDIR=`expr "$option" : '--paxutils-srcdir=\(.*\)'`;;
ac6caa71
SP
182 --skip-po)
183 SKIP_PO=t;;
c930802f 184 --force)
ac6caa71 185 checkout_only_file=;;
c930802f
PE
186 --copy)
187 copy=true;;
88ffc135
PE
188 *)
189 echo >&2 "$0: $option: unknown option"
190 exit 1;;
191 esac
192done
193
ac6caa71 194if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
c930802f
PE
195 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
196 exit 1
197fi
94de7c4c 198
ac6caa71
SP
199# If $STR is not already on a line by itself in $FILE, insert it,
200# sorting the new contents of the file and replacing $FILE with the result.
201insert_sorted_if_absent() {
202 file=$1
203 str=$2
204 test -f $file || touch $file
205 echo "$str" | sort -u - $file | cmp -s - $file \
206 || echo "$str" | sort -u - $file -o $file \
207 || exit 1
208}
209
210# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
211found_aux_dir=no
212grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
213 >/dev/null && found_aux_dir=yes
214grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
215 >/dev/null && found_aux_dir=yes
216if test $found_aux_dir = no; then
217 echo "$0: expected line not found in configure.ac. Add the following:" >&2
218 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
219 exit 1
220fi
221
222# If $build_aux doesn't exist, create it now, otherwise some bits
223# below will malfunction. If creating it, also mark it as ignored.
224if test ! -d $build_aux; then
225 mkdir $build_aux
226 for dot_ig in x $vc_ignore; do
227 test $dot_ig = x && continue
228 insert_sorted_if_absent $dot_ig $build_aux
229 done
230fi
231
232echo "$0: Bootstrapping from checked-out $package sources..."
233
234# See if we can use gnulib's git-merge-changelog merge driver.
235if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
236 if git config merge.merge-changelog.driver >/dev/null ; then
237 :
238 elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
239 echo "initializing git-merge-changelog driver"
240 git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
241 git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
242 else
243 echo "consider installing git-merge-changelog from gnulib"
244 fi
245fi
246
247cleanup() {
248 status=$?
249 rm -fr $1
250 exit $status
251}
252
253git_modules_config () {
254 GIT_CONFIG_LOCAL=.gitmodules git config "$@"
255}
256
257# Get paxutils files.
258case ${PAXUTILS_SRCDIR--} in
259-) if [ ! -d paxutils ]; then
260 echo "$0: getting paxutils files..."
261
262 trap "cleanup paxutils" 1 2 13 15
263
264 git clone --depth 1 git://git.sv.gnu.org/paxutils || cleanup paxutils
265
266 trap - 1 2 13 15
267 fi
268 PAXUTILS_SRCDIR=paxutils
269 ;;
270esac
271
272if [ -r $PAXUTILS_SRCDIR/gnulib.modules ]; then
273 gnulib_modules=`
274 (echo "$gnulib_modules"; grep '^[^#]' $PAXUTILS_SRCDIR/gnulib.modules) |
275 sort -u
276 `
277fi
278
279# Get gnulib files.
280
281case ${GNULIB_SRCDIR--} in
282-)
283 if git_modules_config submodule.gnulib.url >/dev/null; then
284 echo "$0: getting gnulib files..."
285 git submodule init || exit $?
286 git submodule update || exit $?
287
288 elif [ ! -d gnulib ]; then
289 echo "$0: getting gnulib files..."
290
291 trap cleanup_gnulib 1 2 13 15
292
293 git clone --help|grep depth > /dev/null && shallow='--depth 2' || shallow=
294 git clone $shallow git://git.sv.gnu.org/gnulib ||
295 "cleanup $1"
296
297 trap - 1 2 13 15
298 fi
299 GNULIB_SRCDIR=gnulib
300 ;;
301*)
302 # Redirect the gnulib submodule to the directory on the command line
303 # if possible.
304 if test -d "$GNULIB_SRCDIR"/.git && \
305 git_modules_config submodule.gnulib.url >/dev/null; then
306 git submodule init
307 GNULIB_SRCDIR=`cd $GNULIB_SRCDIR && pwd`
308 git config --replace-all submodule.gnulib.url $GNULIB_SRCDIR
309 echo "$0: getting gnulib files..."
310 git submodule update || exit $?
311 GNULIB_SRCDIR=gnulib
312 fi
313 ;;
314esac
315
316gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
317<$gnulib_tool || exit
659f70a3 318
27094c4f
SP
319# Get translations.
320
e496c1b5 321download_po_files() {
27094c4f
SP
322 subdir=$1
323 domain=$2
e496c1b5
SP
324 echo "$0: getting translations into $subdir for $domain..."
325 cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
326 eval "$cmd"
27094c4f
SP
327}
328
e496c1b5
SP
329# Download .po files to $po_dir/.reference and copy only the new
330# or modified ones into $po_dir. Also update $po_dir/LINGUAS.
331update_po_files() {
332 # Directory containing primary .po files.
333 # Overwrite them only when we're sure a .po file is new.
334 po_dir=$1
335 domain=$2
336
337 # Download *.po files into this dir.
338 # Usually contains *.s1 checksum files.
339 ref_po_dir="$po_dir/.reference"
340
341 test -d $ref_po_dir || mkdir $ref_po_dir || return
342 download_po_files $ref_po_dir $domain \
343 && ls "$ref_po_dir"/*.po 2>/dev/null |
344 sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
345
346 langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
347 test "$langs" = '*' && langs=x
ac6caa71 348 for po in $langs; do
e496c1b5
SP
349 case $po in x) continue;; esac
350 new_po="$ref_po_dir/$po.po"
351 cksum_file="$ref_po_dir/$po.s1"
352 if ! test -f "$cksum_file" ||
353 ! test -f "$po_dir/$po.po" ||
354 ! sha1sum -c --status "$cksum_file" < "$new_po" > /dev/null; then
355 echo "updated $po_dir/$po.po..."
356 cp "$new_po" "$po_dir/$po.po" && sha1sum < "$new_po" > "$cksum_file"
357 fi
358 done
359}
27094c4f 360
ac6caa71 361case $SKIP_PO in
27094c4f 362'')
e496c1b5
SP
363 if test -d po; then
364 update_po_files po $package || exit
365 fi
27094c4f 366
ac6caa71
SP
367 if test -d runtime-po; then
368 update_po_files runtime-po $package-runtime || exit
369 fi;;
4d8ddc72
SP
370esac
371
ac6caa71
SP
372symlink_to_dir()
373{
374 src=$1/$2
375 dst=${3-$2}
28b26242 376
ac6caa71 377 test -f "$src" && {
28b26242 378
ac6caa71
SP
379 # If the destination directory doesn't exist, create it.
380 # This is required at least for "lib/uniwidth/cjk.h".
381 dst_dir=`dirname "$dst"`
382 if ! test -d "$dst_dir"; then
383 mkdir -p "$dst_dir"
384
385 # If we've just created a directory like lib/uniwidth,
386 # tell version control system(s) it's ignorable.
387 # FIXME: for now, this does only one level
388 parent=`dirname "$dst_dir"`
389 for dot_ig in x $vc_ignore; do
390 test $dot_ig = x && continue
391 ig=$parent/$dot_ig
392 insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'`
393 done
c17a9f91 394 fi
c930802f 395
c930802f
PE
396 if $copy; then
397 {
398 test ! -h "$dst" || {
399 echo "$0: rm -f $dst" &&
400 rm -f "$dst"
401 }
402 } &&
403 test -f "$dst" &&
404 cmp -s "$src" "$dst" || {
405 echo "$0: cp -fp $src $dst" &&
406 cp -fp "$src" "$dst"
407 }
408 else
409 test -h "$dst" &&
410 src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
411 dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
412 test "$src_i" = "$dst_i" || {
413 dot_dots=
414 case $src in
415 /*) ;;
416 *)
417 case /$dst/ in
418 *//* | */../* | */./* | /*/*/*/*/*/)
419 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
420 exit 1;;
421 /*/*/*/*/) dot_dots=../../../;;
422 /*/*/*/) dot_dots=../../;;
423 /*/*/) dot_dots=../;;
424 esac;;
425 esac
426
427 echo "$0: ln -fs $dot_dots$src $dst" &&
428 ln -fs "$dot_dots$src" "$dst"
429 }
430 fi
431 }
432}
88ffc135 433
c930802f
PE
434cp_mark_as_generated()
435{
436 cp_src=$1
437 cp_dst=$2
88ffc135 438
c930802f 439 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
ac6caa71
SP
440 symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
441 elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
442 symlink_to_dir $local_gl_dir "$cp_dst"
c930802f
PE
443 else
444 case $cp_dst in
445 *.[ch]) c1='/* '; c2=' */';;
446 *.texi) c1='@c '; c2= ;;
447 *.m4|*/Make*|Make*) c1='# ' ; c2= ;;
448 *) c1= ; c2= ;;
449 esac
88ffc135 450
ac6caa71
SP
451 # If the destination directory doesn't exist, create it.
452 # This is required at least for "lib/uniwidth/cjk.h".
453 dst_dir=`dirname "$cp_dst"`
454 test -d "$dst_dir" || mkdir -p "$dst_dir"
455
c930802f
PE
456 if test -z "$c1"; then
457 cmp -s "$cp_src" "$cp_dst" || {
ac6caa71
SP
458 # Copy the file first to get proper permissions if it
459 # doesn't already exist. Then overwrite the copy.
c930802f 460 echo "$0: cp -f $cp_src $cp_dst" &&
ac6caa71
SP
461 rm -f "$cp_dst" &&
462 cp "$cp_src" "$cp_dst-t" &&
463 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
464 mv -f "$cp_dst-t" "$cp_dst"
c930802f
PE
465 }
466 else
467 # Copy the file first to get proper permissions if it
468 # doesn't already exist. Then overwrite the copy.
469 cp "$cp_src" "$cp_dst-t" &&
470 (
471 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
472 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
ac6caa71 473 sed "s!$bt_regex/!!g" "$cp_src"
c930802f
PE
474 ) > $cp_dst-t &&
475 if cmp -s "$cp_dst-t" "$cp_dst"; then
476 rm -f "$cp_dst-t"
477 else
478 echo "$0: cp $cp_src $cp_dst # with edits" &&
479 mv -f "$cp_dst-t" "$cp_dst"
480 fi
481 fi
482 fi
483}
94de7c4c 484
c930802f
PE
485version_controlled_file() {
486 dir=$1
487 file=$2
488 found=no
489 if test -d CVS; then
490 grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
491 grep '^/[^/]*/[0-9]' > /dev/null && found=yes
492 elif test -d .git; then
ac6caa71
SP
493 git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
494 elif test -d .svn; then
495 svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
c930802f
PE
496 else
497 echo "$0: no version control for $dir/$file?" >&2
498 fi
499 test $found = yes
500}
94de7c4c 501
c930802f
PE
502slurp() {
503 for dir in . `(cd $1 && find * -type d -print)`; do
504 copied=
505 sep=
ac6caa71
SP
506 for file in `ls -a $1/$dir`; do
507 case $file in
508 .|..) continue;;
509 .*) continue;; # FIXME: should all file names starting with "." be ignored?
510 esac
c930802f
PE
511 test -d $1/$dir/$file && continue
512 for excluded_file in $excluded_files; do
513 test "$dir/$file" = "$excluded_file" && continue 2
514 done
515 if test $file = Makefile.am; then
ac6caa71
SP
516 copied=$copied${sep}$gnulib_mk; sep=$nl
517 remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
518 sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/$gnulib_mk || {
519 echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
520 rm -f $dir/$gnulib_mk &&
521 sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
c930802f
PE
522 }
523 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
524 version_controlled_file $dir $file; then
525 echo "$0: $dir/$file overrides $1/$dir/$file"
526 else
527 copied=$copied$sep$file; sep=$nl
528 if test $file = gettext.m4; then
529 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
530 rm -f $dir/$file
531 sed '
532 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
533 AC_DEFUN([AM_INTL_SUBDIR], [
534 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
535 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
536 $a\
537 AC_DEFUN([gl_LOCK_EARLY], [])
538 ' $1/$dir/$file >$dir/$file
539 else
540 cp_mark_as_generated $1/$dir/$file $dir/$file
541 fi
542 fi || exit
543 done
544
ac6caa71
SP
545 for dot_ig in x $vc_ignore; do
546 test $dot_ig = x && continue
b09417ca 547 ig=$dir/$dot_ig
ac6caa71
SP
548 if test -n "$copied"; then
549 insert_sorted_if_absent $ig "$copied"
550 # If an ignored file name ends with .in.h, then also add
551 # the name with just ".h". Many gnulib headers are generated,
552 # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
553 # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
554 f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
555 insert_sorted_if_absent $ig "$f"
556
557 # For files like sys_stat.in.h and sys_time.in.h, record as
558 # ignorable the directory we might eventually create: sys/.
559 f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
560 insert_sorted_if_absent $ig "$f"
28b26242 561 fi
ac6caa71 562 done
c930802f
PE
563 done
564}
c8c35168 565
c930802f
PE
566
567# Create boot temporary directories to import from gnulib and gettext.
c930802f
PE
568rm -fr $bt $bt2 &&
569mkdir $bt $bt2 || exit
570
571# Import from gnulib.
572
c930802f
PE
573gnulib_tool_options="\
574 --import\
575 --no-changelog\
ac6caa71
SP
576 --aux-dir $bt/$build_aux\
577 --doc-base $bt/$doc_base\
578 --lib $gnulib_name\
579 --m4-base $bt/$m4_base/\
580 --source-base $bt/$source_base/\
581 --tests-base $bt/$tests_base\
582 --local-dir $local_gl_dir\
583 $gnulib_tool_option_extras\
c930802f
PE
584"
585echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
586$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
587slurp $bt || exit
588
589for file in $gnulib_files; do
ac6caa71 590 symlink_to_dir "$GNULIB_SRCDIR" $file || exit
94de7c4c
PE
591done
592
c930802f
PE
593
594# Import from gettext.
ac6caa71
SP
595with_gettext=yes
596grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
597 with_gettext=no
598
599if test $with_gettext = yes; then
600 echo "$0: (cd $bt2; autopoint) ..."
601 cp configure.ac $bt2 &&
602 (cd $bt2 && autopoint && rm configure.ac) &&
603 slurp $bt2 $bt || exit
604fi
605rm -fr $bt $bt2 || exit
c930802f 606
ac6caa71
SP
607# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
608# gnulib-populated directories. Such .m4 files would cause aclocal to fail.
609# The following requires GNU find 4.2.3 or newer. Considering the usual
610# portability constraints of this script, that may seem a very demanding
611# requirement, but it should be ok. Ignore any failure, which is fine,
612# since this is only a convenience to help developers avoid the relatively
613# unusual case in which a symlinked-to .m4 file is git-removed from gnulib
614# between successive runs of this script.
615find "$m4_base" "$source_base" \
616 -depth \( -name '*.m4' -o -name '*.[ch]' \) \
617 -type l -xtype l -delete > /dev/null 2>&1
c930802f 618
ac6caa71
SP
619# copy_files srcdir dstdir
620copy_files() {
621 for file in `cat $1/DISTFILES`
622 do
623 case $file in
624 "#*") continue;;
625 esac
626 dst=`echo $file | sed 's^.*/^^'`
627 if [ $# -eq 3 ]; then
628 case $dst in
629 ${3}*) ;;
630 *) dst=${3}$dst;;
631 esac
632 fi
633 symlink_to_dir "$1" "$file" "$2/$dst" || exit
634# FIXME ignorefile $2 $dst
635 done
636}
c930802f 637
89d682d0 638# Import from paxutils
ac6caa71
SP
639copy_files ${PAXUTILS_SRCDIR} .
640copy_files ${PAXUTILS_SRCDIR}/am m4
89d682d0
SP
641echo "$0: Creating m4/paxutils.m4"
642(echo "# This file is generated automatically. Please, do not edit."
643 echo "#"
644 echo "AC_DEFUN([${package}_PAXUTILS],["
ac6caa71 645 cat ${PAXUTILS_SRCDIR}/am/DISTFILES | sed '/^#/d;s/\(.*\)\.m4/pu_\1/' | tr a-z A-Z
89d682d0 646 echo "])") > ./m4/paxutils.m4
ac6caa71 647#FIXME ignorefile m4 paxutils.m4
89d682d0
SP
648
649if [ -d rmt ]; then
650 :
651else
652 mkdir rmt
653fi
654
655for dir in doc rmt lib tests
656do
657 copy_files ${PAXUTILS_SRCDIR}/$dir $dir
658done
659
660copy_files ${PAXUTILS_SRCDIR}/paxlib lib pax
c930802f 661
ac6caa71 662
c930802f 663# Reconfigure, getting other files.
94de7c4c
PE
664
665for command in \
ac6caa71 666 libtool \
94de7c4c
PE
667 'aclocal --force -I m4' \
668 'autoconf --force' \
669 'autoheader --force' \
670 'automake --add-missing --copy --force-missing';
671do
ac6caa71
SP
672 if test "$command" = libtool; then
673 use_libtool=0
674 # We'd like to use grep -E, to see if any of LT_INIT,
675 # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
676 # but that's not portable enough (e.g., for Solaris).
677 grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
678 && use_libtool=1
679 grep '^[ ]*LT_INIT' configure.ac >/dev/null \
680 && use_libtool=1
681 test $use_libtool = 0 \
682 && continue
683 command='libtoolize -c -f'
684 fi
94de7c4c
PE
685 echo "$0: $command ..."
686 $command || exit
687done
688
689
c930802f 690# Get some extra files from gnulib, overriding existing files.
c930802f
PE
691for file in $gnulib_extra_files; do
692 case $file in
693 */INSTALL) dst=INSTALL;;
ac6caa71 694 build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
c930802f
PE
695 *) dst=$file;;
696 esac
ac6caa71 697 symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
c930802f
PE
698done
699
ac6caa71
SP
700if test $with_gettext = yes; then
701 # Create gettext configuration.
702 echo "$0: Creating po/Makevars from po/Makevars.template ..."
703 rm -f po/Makevars
c930802f 704 sed '
ac6caa71
SP
705 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
706 /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/
c930802f
PE
707 /^XGETTEXT_OPTIONS *=/{
708 s/$/ \\/
709 a\
ac6caa71 710 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
c930802f 711 }
ac6caa71
SP
712 ' po/Makevars.template >po/Makevars
713
714 if test -d runtime-po; then
715 # Similarly for runtime-po/Makevars, but not quite the same.
716 rm -f runtime-po/Makevars
717 sed '
718 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
719 /^subdir *=.*/s/=.*/= runtime-po/
720 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
721 /^XGETTEXT_OPTIONS *=/{
722 s/$/ \\/
723 a\
724 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
725 }
726 ' <po/Makevars.template >runtime-po/Makevars
c930802f 727
ac6caa71
SP
728 # Copy identical files from po to runtime-po.
729 (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
730 fi
c930802f 731fi
ac6caa71 732
88ffc135 733echo "$0: done. Now you can run './configure'."