/ [gnulib] / gnulib / gnulib-tool
To checkout: cvs -d:pserver:anonymous@cvs.gnu.org.ua:/cvsmirror/gnulib co gnulib/gnulib-tool
Puszcza

Annotation of /gnulib/gnulib-tool

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.259 - (hide annotations)
Mon Sep 17 10:26:33 2007 UTC (14 years, 4 months ago) by haible
Branch: MAIN
CVS Tags: HEAD
Changes since 1.258: +4 -2 lines
Make "gnulib-tool --version" work in git-cvsserver checkout.

1 haible 1.1 #! /bin/sh
2     #
3 haible 1.206 # Copyright (C) 2002-2007 Free Software Foundation, Inc.
4 haible 1.1 #
5     # This program is free software; you can redistribute it and/or modify
6     # it under the terms of the GNU General Public License as published by
7     # the Free Software Foundation; either version 2, or (at your option)
8     # any later version.
9     #
10     # This program is distributed in the hope that it will be useful,
11     # but WITHOUT ANY WARRANTY; without even the implied warranty of
12     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13     # GNU General Public License for more details.
14     #
15     # You should have received a copy of the GNU General Public License
16 haible 1.98 # along with this program; if not, write to the Free Software Foundation,
17     # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 haible 1.1 #
19    
20     # This program is meant for authors or maintainers which want to import
21     # modules from gnulib into their packages.
22    
23     progname=$0
24     package=gnulib
25 haible 1.259 cvsdatestamp='$Date: 2007/09/16 00:41:34 $'
26 karl 1.2 last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'`
27 haible 1.259 # Sometimes last_checkin_date is "YYYY/MM/DD ...", sometimes "YYYY-MM-DD ...".
28 haible 1.1 version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'`
29 haible 1.259 # version is in YYYY-MM-DD format.
30 haible 1.164 nl='
31     '
32 rwild 1.236 IFS=" "" $nl"
33 haible 1.1
34     # You can set AUTOCONFPATH to empty if autoconf 2.57 is already in your PATH.
35     AUTOCONFPATH=
36 haible 1.17 #case $USER in
37     # bruno )
38     # AUTOCONFBINDIR=/packages/gnu-inst-autoconf/2.57/bin
39     # AUTOCONFPATH="eval env PATH=${AUTOCONFBINDIR}:\$PATH "
40     # ;;
41     #esac
42 haible 1.1
43 haible 1.96 # You can set AUTOMAKEPATH to empty if automake 1.9.x is already in your PATH.
44     AUTOMAKEPATH=
45    
46 haible 1.178 # You can set GETTEXTPATH to empty if autopoint 0.15 is already in your PATH.
47     GETTEXTPATH=
48    
49 haible 1.100 # If you didn't set AUTOCONFPATH and AUTOMAKEPATH, you can also set the
50 haible 1.178 # variables AUTOCONF, AUTOHEADER, ACLOCAL, AUTOMAKE, AUTORECONF individually.
51 haible 1.100 if test -z "${AUTOCONF}" || test -n "${AUTOCONFPATH}"; then
52     AUTOCONF="${AUTOCONFPATH}autoconf"
53     fi
54 haible 1.178 if test -z "${AUTOHEADER}" || test -n "${AUTOCONFPATH}"; then
55     AUTOHEADER="${AUTOCONFPATH}autoheader"
56     fi
57 haible 1.100 if test -z "${ACLOCAL}" || test -n "${AUTOMAKEPATH}"; then
58     ACLOCAL="${AUTOMAKEPATH}aclocal"
59     fi
60     if test -z "${AUTOMAKE}" || test -n "${AUTOMAKEPATH}"; then
61     AUTOMAKE="${AUTOMAKEPATH}automake"
62     fi
63     if test -z "${AUTORECONF}" || test -n "${AUTOCONFPATH}"; then
64     AUTORECONF="${AUTOCONFPATH}autoreconf"
65     fi
66 haible 1.1
67 haible 1.178 # If you didn't set GETTEXTPATH, you can also set the variable AUTOPOINT.
68     if test -z "${AUTOPOINT}" || test -n "${GETTEXTPATH}"; then
69     AUTOPOINT="${GETTEXTPATH}autopoint"
70     fi
71    
72 eggert 1.203 # When using GNU sed, turn off as many GNU extensions as possible,
73     # to minimize the risk of accidentally using non-portable features.
74     # However, do this only for gnulib-tool itself, not for the code that
75     # gnulib-tool generates, since we don't want "sed --posix" to leak
76     # into makefiles.
77 haible 1.217 if (alias) > /dev/null 2>&1 && echo | sed --posix -e d >/dev/null 2>&1; then
78 haible 1.258 # Define sed as an alias.
79     # It is not always possible to use aliases. Aliases are guaranteed to work
80     # if the executing shell is bash and either it is invoked as /bin/sh or
81     # is a version >= 2.0, supporting shopt. This is the common case.
82     # Two other approaches (use of a variable $sed or of a function func_sed
83     # instead of an alias) require massive, fragile code changes.
84     # An other approach (use of function sed) requires `which sed` - but 'which'
85     # is hard to emulate, due to missing "test -x" on some platforms.
86     if test -n "$BASH_VERSION"; then
87     shopt -s expand_aliases >/dev/null 2>&1
88     fi
89 eggert 1.203 alias sed='sed --posix'
90 haible 1.202 fi
91    
92 haible 1.1 # func_usage
93     # outputs to stdout the --help usage message.
94     func_usage ()
95     {
96     echo "\
97     Usage: gnulib-tool --list
98 haible 1.24 gnulib-tool --import [module1 ... moduleN]
99 haible 1.91 gnulib-tool --update
100 haible 1.177 gnulib-tool --create-testdir --dir=directory [module1 ... moduleN]
101 haible 1.1 gnulib-tool --create-megatestdir --dir=directory [module1 ... moduleN]
102     gnulib-tool --test --dir=directory module1 ... moduleN
103     gnulib-tool --megatest --dir=directory [module1 ... moduleN]
104     gnulib-tool --extract-description module
105 haible 1.257 gnulib-tool --extract-notice module
106 haible 1.1 gnulib-tool --extract-filelist module
107     gnulib-tool --extract-dependencies module
108     gnulib-tool --extract-autoconf-snippet module
109     gnulib-tool --extract-automake-snippet module
110     gnulib-tool --extract-include-directive module
111 haible 1.220 gnulib-tool --extract-link-directive module
112 haible 1.18 gnulib-tool --extract-license module
113 haible 1.8 gnulib-tool --extract-maintainer module
114 haible 1.57 gnulib-tool --extract-tests-module module
115 haible 1.1
116     Operation modes:
117     --list print the available module names
118 jas 1.107 --import import the given modules into the current package;
119 haible 1.108 if no modules are specified, update the current
120     package from the current gnulib
121     --update update the current package, restore files omitted
122     from CVS
123 haible 1.1 --create-testdir create a scratch package with the given modules
124     --create-megatestdir create a mega scratch package with the given modules
125     one by one and all together
126     --test test the combination of the given modules
127 haible 1.8 (recommended to use CC=\"gcc -Wall\" here)
128 haible 1.1 --megatest test the given modules one by one and all together
129 haible 1.8 (recommended to use CC=\"gcc -Wall\" here)
130 haible 1.1 --extract-description extract the description
131 haible 1.257 --extract-notice extract the notice or banner
132 haible 1.1 --extract-filelist extract the list of files
133     --extract-dependencies extract the dependencies
134     --extract-autoconf-snippet extract the snippet for configure.ac
135 eggert 1.150 --extract-automake-snippet extract the snippet for library makefile
136 haible 1.1 --extract-include-directive extract the #include directive
137 haible 1.220 --extract-link-directive extract the linker directive
138 haible 1.18 --extract-license report the license terms of the source files
139     under lib/
140 haible 1.8 --extract-maintainer report the maintainer(s) inside gnulib
141 haible 1.57 --extract-tests-module report the unit test module, if it exists
142 haible 1.1
143 haible 1.123 General options:
144 haible 1.122 --dir=DIRECTORY Specify the target directory.
145     For --import, this specifies where your
146     configure.ac can be found. Defaults to current
147     directory.
148 haible 1.127 --local-dir=DIRECTORY Specify a local override directory where to look
149     up files before looking in gnulib's directory.
150 haible 1.256 --verbose Increase verbosity. May be repeated.
151     --quiet Decrease verbosity. May be repeated.
152 haible 1.123
153     Options for --import:
154 haible 1.122 --lib=LIBRARY Specify the library name. Defaults to 'libgnu'.
155     --source-base=DIRECTORY
156     Directory relative to --dir where source code is
157 haible 1.123 placed (default \"lib\").
158 haible 1.122 --m4-base=DIRECTORY Directory relative to --dir where *.m4 macros are
159 haible 1.123 placed (default \"m4\").
160 haible 1.250 --po-base=DIRECTORY Directory relative to --dir where *.po files are
161     placed (default \"po\").
162 haible 1.123 --doc-base=DIRECTORY Directory relative to --dir where doc files are
163     placed (default \"doc\").
164 haible 1.122 --tests-base=DIRECTORY
165     Directory relative to --dir where unit tests are
166 haible 1.123 placed (default \"tests\").
167 haible 1.122 --aux-dir=DIRECTORY Directory relative to --dir where auxiliary build
168     tools are placed (default \"build-aux\").
169     --with-tests Include unit tests for the included modules.
170 haible 1.48 --avoid=MODULE Avoid including the given MODULE. Useful if you
171     have code that provides equivalent functionality.
172     This option can be repeated.
173 eggert 1.20 --lgpl Abort if modules aren't available under the LGPL.
174     Also modify license template from GPL to LGPL.
175 haible 1.149 --makefile-name=NAME Name of makefile in automake syntax in the
176     source-base and tests-base directories
177     (default \"Makefile.am\").
178 haible 1.123 --libtool Use libtool rules.
179 haible 1.129 --no-libtool Don't use libtool rules.
180 haible 1.122 --macro-prefix=PREFIX Specify the prefix of the macros 'gl_EARLY' and
181     'gl_INIT'. Default is 'gl'.
182 haible 1.250 --po-domain=NAME Specify the prefix of the i18n domain. Usually use
183     the package name. A suffix '-gnulib' is appended.
184 haible 1.1 --no-changelog don't update or create ChangeLog files
185 haible 1.123
186     Options for --import and --update:
187 haible 1.122 --dry-run For --import, only print what would have been done.
188 jas 1.44 -s, --symbolic, --symlink Make symbolic links instead of copying files.
189 haible 1.193 --local-symlink Make symbolic links instead of copying files, only
190     for files from the local override directory.
191 haible 1.248 -S, --more-symlinks Make symbolic links instead of copying files, and
192     don't replace copyright notices.
193 haible 1.1
194     Report bugs to <bug-gnulib@gnu.org>."
195     }
196    
197     # func_version
198     # outputs to stdout the --version message.
199     func_version ()
200     {
201 haible 1.259 year=`echo "$version" | sed -e 's,-.*$,,'`
202 rwild 1.170 echo "\
203     $progname (GNU $package) $version
204     Copyright (C) $year Free Software Foundation, Inc.
205 haible 1.1 This is free software; see the source for copying conditions. There is NO
206 rwild 1.170 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
207     Written by" "Bruno Haible" "and" "Simon Josefsson"
208 haible 1.1 }
209    
210 ericb 1.112 # func_emit_copyright_notice
211     # outputs to stdout a header for a generated file.
212     func_emit_copyright_notice ()
213     {
214 haible 1.206 echo "# Copyright (C) 2004-2007 Free Software Foundation, Inc."
215 ericb 1.112 echo "#"
216     echo "# This file is free software, distributed under the terms of the GNU"
217     echo "# General Public License. As a special exception to the GNU General"
218     echo "# Public License, this file may be distributed as part of a program"
219     echo "# that contains a configuration script generated by Autoconf, under"
220     echo "# the same distribution terms as the rest of that program."
221     echo "#"
222     echo "# Generated by gnulib-tool."
223     }
224    
225 rwild 1.168 # func_exit STATUS
226     # exit with status
227     func_exit ()
228     {
229     (exit $1); exit $1
230     }
231    
232 haible 1.77 # func_tmpdir
233     # creates a temporary directory.
234     # Sets variable
235     # - tmp pathname of freshly created temporary directory
236     func_tmpdir ()
237     {
238     # Use the environment variable TMPDIR, falling back to /tmp. This allows
239     # users to specify a different temporary directory, for example, if their
240     # /tmp is filled up or too small.
241     : ${TMPDIR=/tmp}
242     {
243     # Use the mktemp program if available. If not available, hide the error
244     # message.
245 eggert 1.103 tmp=`(umask 077 && mktemp -d "$TMPDIR/glXXXXXX") 2>/dev/null` &&
246 haible 1.77 test -n "$tmp" && test -d "$tmp"
247     } ||
248     {
249     # Use a simple mkdir command. It is guaranteed to fail if the directory
250     # already exists. $RANDOM is bash specific and expands to empty in shells
251     # other than bash, ksh and zsh. Its use does not increase security;
252     # rather, it minimizes the probability of failure in a very cluttered /tmp
253     # directory.
254     tmp=$TMPDIR/gl$$-$RANDOM
255     (umask 077 && mkdir "$tmp")
256     } ||
257     {
258     echo "$0: cannot create a temporary directory in $TMPDIR" >&2
259 rwild 1.168 func_exit 1
260 haible 1.77 }
261     }
262    
263 haible 1.165 # func_append var value
264     # appends the given value to the shell variable var.
265     if ( foo=bar; foo+=baz && test "$foo" = barbaz ) >/dev/null 2>&1; then
266     # Use bash's += operator. It reduces complexity of appending repeatedly to
267     # a single variable from O(n^2) to O(n).
268     func_append ()
269     {
270     eval "$1+=\"\$2\""
271     }
272     else
273     func_append ()
274     {
275     eval "$1=\"\$$1\$2\""
276     }
277     fi
278    
279 haible 1.1 # func_fatal_error message
280     # outputs to stderr a fatal error message, and terminates the program.
281     func_fatal_error ()
282     {
283     echo "gnulib-tool: *** $1" 1>&2
284     echo "gnulib-tool: *** Stop." 1>&2
285 rwild 1.168 func_exit 1
286 haible 1.1 }
287    
288 haible 1.80 # func_readlink SYMLINK
289     # outputs the target of the given symlink.
290     if (type -p readlink) > /dev/null 2>&1; then
291     func_readlink ()
292     {
293     # Use the readlink program from GNU coreutils.
294     readlink "$1"
295     }
296     else
297     func_readlink ()
298     {
299     # Use two sed invocations. A single sed -n -e 's,^.* -> \(.*\)$,\1,p'
300 haible 1.84 # would do the wrong thing if the link target contains " -> ".
301 eggert 1.203 LC_ALL=C ls -l "$1" | sed -e 's, -> ,#%%#,' | sed -n -e 's,^.*#%%#\(.*\)$,\1,p'
302 haible 1.80 }
303     fi
304    
305 haible 1.146 # func_relativize DIR1 DIR2
306     # computes a relative pathname RELDIR such that DIR1/RELDIR = DIR2.
307     # Input:
308     # - DIR1 relative pathname, relative to the current directory
309     # - DIR2 relative pathname, relative to the current directory
310     # Output:
311     # - reldir relative pathname of DIR2, relative to DIR1
312     func_relativize ()
313     {
314     dir0=`pwd`
315     dir1="$1"
316     dir2="$2"
317     sed_first='s,^\([^/]*\)/.*$,\1,'
318     sed_rest='s,^[^/]*/*,,'
319     sed_last='s,^.*/\([^/]*\)$,\1,'
320     sed_butlast='s,/*[^/]*$,,'
321     while test -n "$dir1"; do
322 eggert 1.203 first=`echo "$dir1" | sed -e "$sed_first"`
323 haible 1.146 if test "$first" != "."; then
324     if test "$first" = ".."; then
325 eggert 1.203 dir2=`echo "$dir0" | sed -e "$sed_last"`/"$dir2"
326     dir0=`echo "$dir0" | sed -e "$sed_butlast"`
327 haible 1.146 else
328 eggert 1.203 first2=`echo "$dir2" | sed -e "$sed_first"`
329 haible 1.146 if test "$first2" = "$first"; then
330 eggert 1.203 dir2=`echo "$dir2" | sed -e "$sed_rest"`
331 haible 1.146 else
332     dir2="../$dir2"
333     fi
334     dir0="$dir0"/"$first"
335     fi
336     fi
337 eggert 1.203 dir1=`echo "$dir1" | sed -e "$sed_rest"`
338 haible 1.146 done
339     reldir="$dir2"
340     }
341    
342     # func_relconcat DIR1 DIR2
343     # computes a relative pathname DIR1/DIR2, with obvious simplifications.
344     # Input:
345     # - DIR1 relative pathname, relative to the current directory
346     # - DIR2 relative pathname, relative to DIR1
347     # Output:
348     # - relconcat DIR1/DIR2, relative to the current directory
349     func_relconcat ()
350     {
351     dir1="$1"
352     dir2="$2"
353     sed_first='s,^\([^/]*\)/.*$,\1,'
354     sed_rest='s,^[^/]*/*,,'
355     sed_last='s,^.*/\([^/]*\)$,\1,'
356     sed_butlast='s,/*[^/]*$,,'
357     while true; do
358 eggert 1.203 first=`echo "$dir2" | sed -e "$sed_first"`
359 haible 1.146 if test "$first" = "."; then
360 eggert 1.203 dir2=`echo "$dir2" | sed -e "$sed_rest"`
361 haible 1.146 if test -z "$dir2"; then
362     relconcat="$dir1"
363     break
364     fi
365     else
366 eggert 1.203 last=`echo "$dir1" | sed -e "$sed_last"`
367 haible 1.146 while test "$last" = "."; do
368 eggert 1.203 dir1=`echo "$dir1" | sed -e "$sed_butlast"`
369     last=`echo "$dir1" | sed -e "$sed_last"`
370 haible 1.146 done
371     if test -z "$dir1"; then
372     relconcat="$dir2"
373     break
374     fi
375     if test "$first" = ".."; then
376     if test "$last" = ".."; then
377     relconcat="$dir1/$dir2"
378     break
379     fi
380 eggert 1.203 dir1=`echo "$dir1" | sed -e "$sed_butlast"`
381     dir2=`echo "$dir2" | sed -e "$sed_rest"`
382 haible 1.146 if test -z "$dir1"; then
383     relconcat="$dir2"
384     break
385     fi
386     if test -z "$dir2"; then
387     relconcat="$dir1"
388     break
389     fi
390     else
391     relconcat="$dir1/$dir2"
392     break
393     fi
394     fi
395     done
396     }
397    
398 haible 1.192 # func_ln SRC DEST
399     # Like ln -s, except that SRC is given relative to the current directory (or
400     # absolute), not given relative to the directory of DEST.
401     func_ln ()
402     {
403     case "$1" in
404     /*)
405     ln -s "$1" "$2" ;;
406     *) # SRC is relative.
407     case "$2" in
408     /*)
409     ln -s "`pwd`/$1" "$2" ;;
410     *) # DEST is relative too.
411 eggert 1.203 ln_destdir=`echo "$2" | sed -e 's,[^/]*$,,'`
412 haible 1.192 test -n "$ln_destdir" || ln_destdir="."
413     func_relativize "$ln_destdir" "$1"
414     ln -s "$reldir" "$2"
415     ;;
416     esac
417     ;;
418     esac
419     }
420    
421     # func_ln_if_changed SRC DEST
422     # Like func_ln, but avoids munging timestamps if the link is correct.
423     func_ln_if_changed ()
424     {
425     if test $# -ne 2; then
426     echo "usage: func_ln_if_changed SRC DEST" >&2
427     fi
428     ln_target=`func_readlink "$2"`
429 haible 1.253 if test -h "$2" && test "$1" = "$ln_target"; then
430 haible 1.192 :
431     else
432     rm -f "$2"
433     func_ln "$1" "$2"
434     fi
435     }
436    
437 haible 1.235 # Ensure an 'echo' command that does not interpret backslashes.
438     # Test cases:
439     # echo '\n' | wc -l prints 1 when OK, 2 when KO
440     # echo '\t' | grep t > /dev/null has return code 0 when OK, 1 when KO
441 haible 1.237 # This problem is a weird heritage from SVR4. BSD got it right (except that
442     # BSD echo interprets '-n' as an option, which is also not desirable).
443 haible 1.235 # Nowadays the problem occurs in 4 situations:
444 haible 1.237 # - in bash, when the shell option xpg_echo is set (bash >= 2.04)
445     # or when it was built with --enable-usg-echo-default (bash >= 2.0)
446     # or when it was built with DEFAULT_ECHO_TO_USG (bash < 2.0),
447 haible 1.235 # - in zsh, when sh-emulation is not set,
448     # - in ksh (e.g. AIX /bin/sh and Solaris /usr/xpg4/bin/sh are ksh instances,
449     # and HP-UX /bin/sh and IRIX /bin/sh behave similarly),
450     # - in Solaris /bin/sh and OSF/1 /bin/sh.
451     # We try the following workarounds:
452     # - for all: respawn using $CONFIG_SHELL if that is set and works.
453 haible 1.237 # - for bash >= 2.04: unset the shell option xpg_echo.
454     # - for bash >= 2.0: define echo to a function that uses the printf built-in.
455     # - for bash < 2.0: define echo to a function that uses cat of a here document.
456 haible 1.235 # - for zsh: turn sh-emulation on.
457 haible 1.239 # - for ksh: alias echo to 'print -r'.
458 haible 1.235 # - for ksh: alias echo to a function that uses cat of a here document.
459 haible 1.239 # - for Solaris /bin/sh and OSF/1 /bin/sh: respawn using /bin/ksh and rely on
460     # the ksh workaround.
461 haible 1.235 # - otherwise: respawn using /bin/sh and rely on the workarounds.
462     # When respawning, we pass --no-reexec as first argument, so as to avoid
463     # turning this script into a fork bomb in unlucky situations.
464     have_echo=
465     if echo '\t' | grep t > /dev/null; then
466     have_echo=yes # Lucky!
467     fi
468     # Try the workarounds.
469     # Respawn using $CONFIG_SHELL if that is set and works.
470     if test -z "$have_echo" \
471     && test "X$1" != "X--no-reexec" \
472     && test -n "$CONFIG_SHELL" \
473     && test -f "$CONFIG_SHELL" \
474     && $CONFIG_SHELL -c 'echo '\t' | grep t > /dev/null'; then
475     exec $CONFIG_SHELL "$0" --no-reexec "$@"
476     exit 127
477     fi
478 haible 1.237 # For bash >= 2.04: unset the shell option xpg_echo.
479 haible 1.235 if test -z "$have_echo" \
480     && test -n "$BASH_VERSION" \
481     && (shopt -o xpg_echo; echo '\t' | grep t > /dev/null) 2>/dev/null; then
482     shopt -o xpg_echo
483     have_echo=yes
484     fi
485 haible 1.237 # For bash >= 2.0: define echo to a function that uses the printf built-in.
486     # For bash < 2.0: define echo to a function that uses cat of a here document.
487     # (There is no win in using 'printf' over 'cat' if it is not a shell built-in.)
488     if test -z "$have_echo" \
489     && test -n "$BASH_VERSION"; then \
490     if type printf 2>/dev/null | grep / > /dev/null; then
491     # 'printf' is not a shell built-in.
492     echo ()
493     {
494     cat <<EOF
495     $*
496     EOF
497     }
498     else
499 haible 1.238 # 'printf' is a shell built-in.
500 haible 1.237 echo ()
501     {
502     printf '%s\n' "$*"
503     }
504     fi
505     if echo '\t' | grep t > /dev/null; then
506     have_echo=yes
507     fi
508     fi
509 haible 1.235 # For zsh: turn sh-emulation on.
510     if test -z "$have_echo" \
511     && test -n "$ZSH_VERSION" \
512     && (emulate sh) >/dev/null 2>&1; then
513     emulate sh
514     fi
515 haible 1.239 # For ksh: alias echo to 'print -r'.
516     if test -z "$have_echo" \
517     && (type print) >/dev/null 2>&1; then
518     # A 'print' command exists.
519     if type print 2>/dev/null | grep / > /dev/null; then
520     :
521     else
522     # 'print' is a shell built-in.
523     if (print -r '\told' | grep told > /dev/null) 2>/dev/null; then
524     # 'print' is the ksh shell built-in.
525     alias echo='print -r'
526     fi
527     fi
528     fi
529     if test -z "$have_echo" \
530     && echo '\t' | grep t > /dev/null; then
531     have_echo=yes
532     fi
533 haible 1.235 # For ksh: alias echo to a function that uses cat of a here document.
534     # The ksh manual page says:
535     # "Aliasing is performed when scripts are read, not while they are executed.
536     # Therefore, for an alias to take effect, the alias definition command has
537     # to be executed before the command which references the alias is read."
538     # Because of this, we have to play strange tricks with have_echo, to ensure
539 haible 1.237 # that the top-level statement containing the test starts after the 'alias'
540 haible 1.235 # command.
541     if test -z "$have_echo"; then
542     bsd_echo ()
543     {
544     cat <<EOF
545     $*
546     EOF
547     }
548     alias echo=bsd_echo 2>/dev/null
549     fi
550     if test -z "$have_echo" \
551     && echo '\t' | grep t > /dev/null; then
552     have_echo=yes
553     fi
554     if test -z "$have_echo"; then
555     unalias echo 2>/dev/null
556     fi
557     # For Solaris /bin/sh and OSF/1 /bin/sh: respawn using /bin/ksh.
558     if test -z "$have_echo" \
559     && test "X$1" != "X--no-reexec" \
560     && test -f /bin/ksh; then
561     exec /bin/ksh "$0" --no-reexec "$@"
562     exit 127
563     fi
564     # Otherwise: respawn using /bin/sh.
565     if test -z "$have_echo" \
566     && test "X$1" != "X--no-reexec" \
567     && test -f /bin/sh; then
568     exec /bin/sh "$0" --no-reexec "$@"
569     exit 127
570     fi
571     if test -z "$have_echo"; then
572     func_fatal_error "Shell does not support 'echo' correctly. Please install GNU bash and set the environment variable CONFIG_SHELL to point to it."
573     fi
574     if echo '\t' | grep t > /dev/null; then
575     : # Works fine now.
576     else
577     func_fatal_error "Shell does not support 'echo' correctly. Workaround does not work. Please report this as a bug to bug-gnulib@gnu.org."
578     fi
579     if test "X$1" = "X--no-reexec"; then
580     shift
581     fi
582    
583 haible 1.1 # Command-line option processing.
584     # Removes the OPTIONS from the arguments. Sets the variables:
585     # - mode list or import or create-testdir or create-megatestdir
586     # - destdir from --dir
587 haible 1.148 # - local_gnulib_dir from --local-dir
588 haible 1.256 # - verbose integer, default 0, inc/decremented by --verbose/--quiet
589 haible 1.25 # - libname, supplied_libname from --lib
590 eggert 1.14 # - sourcebase from --source-base
591     # - m4base from --m4-base
592 haible 1.250 # - pobase from --po-base
593 ericb 1.116 # - docbase from --doc-base
594 haible 1.57 # - testsbase from --tests-base
595 jas 1.41 # - auxdir from --aux-dir
596 haible 1.57 # - inctests true if --with-tests was given, blank otherwise
597 haible 1.48 # - avoidlist list of modules to avoid, from --avoid
598     # - lgpl true if --lgpl was given, blank otherwise
599 haible 1.149 # - makefile_name from --makefile-name
600 haible 1.129 # - libtool true if --libtool was given, false if --no-libtool was
601     # given, blank otherwise
602 haible 1.119 # - macro_prefix from --macro-prefix
603 haible 1.250 # - po_domain from --po-domain
604 haible 1.119 # - autoconf_minversion minimum supported autoconf version
605 haible 1.1 # - do_changelog false if --no-changelog was given, : otherwise
606 haible 1.78 # - doit : if actions shall be executed, false if only to be printed
607 haible 1.248 # - symbolic true if --symlink or --more-symlinks was given, blank
608     # otherwise
609 haible 1.193 # - lsymbolic true if --local-symlink was given, blank otherwise
610 haible 1.248 # - do_copyrights blank if --more-symlinks was given, true otherwise
611 haible 1.1 {
612     mode=
613     destdir=
614 haible 1.148 local_gnulib_dir=
615 haible 1.256 verbose=0
616 eggert 1.14 libname=libgnu
617 haible 1.24 supplied_libname=
618 eggert 1.15 sourcebase=
619     m4base=
620 haible 1.250 pobase=
621 ericb 1.116 docbase=
622 haible 1.57 testsbase=
623 jas 1.41 auxdir=
624 haible 1.57 inctests=
625 haible 1.48 avoidlist=
626     lgpl=
627 haible 1.149 makefile_name=
628 eggert 1.14 libtool=
629 haible 1.62 macro_prefix=
630 haible 1.250 po_domain=
631 haible 1.1 do_changelog=:
632 haible 1.78 doit=:
633 jas 1.42 symbolic=
634 haible 1.193 lsymbolic=
635 haible 1.248 do_copyrights=true
636 eggert 1.15
637     supplied_opts="$@"
638 haible 1.1
639     while test $# -gt 0; do
640     case "$1" in
641     --list | --lis )
642     mode=list
643     shift ;;
644     --import | --impor | --impo | --imp | --im | --i )
645     mode=import
646     shift ;;
647 haible 1.91 --update | --updat | --upda | --upd | --up | --u )
648     mode=update
649     shift ;;
650 haible 1.1 --create-testdir | --create-testdi | --create-testd | --create-test | --create-tes | --create-te | --create-t )
651     mode=create-testdir
652     shift ;;
653     --create-megatestdir | --create-megatestdi | --create-megatestd | --create-megatest | --create-megates | --create-megate | --create-megat | --create-mega | --create-meg | --create-me | --create-m )
654     mode=create-megatestdir
655     shift ;;
656     --test | --tes | --te | --t )
657     mode=test
658     shift ;;
659     --megatest | --megates | --megate | --megat | --mega | --meg | --me | --m )
660     mode=megatest
661     shift ;;
662     --extract-* )
663 eggert 1.203 mode=`echo "X$1" | sed -e 's/^X--//'`
664 haible 1.1 shift ;;
665     --dir )
666     shift
667     if test $# = 0; then
668     func_fatal_error "missing argument for --dir"
669     fi
670     destdir=$1
671     shift ;;
672     --dir=* )
673 eggert 1.203 destdir=`echo "X$1" | sed -e 's/^X--dir=//'`
674 haible 1.1 shift ;;
675 haible 1.148 --local-dir )
676     shift
677     if test $# = 0; then
678     func_fatal_error "missing argument for --local-dir"
679     fi
680     local_gnulib_dir=$1
681     shift ;;
682     --local-dir=* )
683 eggert 1.203 local_gnulib_dir=`echo "X$1" | sed -e 's/^X--local-dir=//'`
684 haible 1.148 shift ;;
685 haible 1.256 --verbose | --verbos | --verbo | --verb )
686     verbose=`expr $verbose + 1`
687     shift ;;
688     --quiet | --quie | --qui | --qu | --q )
689     verbose=`expr $verbose - 1`
690     shift ;;
691 haible 1.1 --lib )
692     shift
693     if test $# = 0; then
694     func_fatal_error "missing argument for --lib"
695     fi
696     libname=$1
697 haible 1.23 supplied_libname=true
698 haible 1.1 shift ;;
699     --lib=* )
700 eggert 1.203 libname=`echo "X$1" | sed -e 's/^X--lib=//'`
701 haible 1.23 supplied_libname=true
702 haible 1.1 shift ;;
703 eggert 1.14 --source-base )
704     shift
705     if test $# = 0; then
706     func_fatal_error "missing argument for --source-base"
707     fi
708     sourcebase=$1
709     shift ;;
710     --source-base=* )
711 eggert 1.203 sourcebase=`echo "X$1" | sed -e 's/^X--source-base=//'`
712 eggert 1.14 shift ;;
713     --m4-base )
714     shift
715     if test $# = 0; then
716     func_fatal_error "missing argument for --m4-base"
717     fi
718     m4base=$1
719     shift ;;
720     --m4-base=* )
721 eggert 1.203 m4base=`echo "X$1" | sed -e 's/^X--m4-base=//'`
722 eggert 1.14 shift ;;
723 haible 1.250 --po-base )
724     shift
725     if test $# = 0; then
726     func_fatal_error "missing argument for --po-base"
727     fi
728     pobase=$1
729     shift ;;
730     --po-base=* )
731     pobase=`echo "X$1" | sed -e 's/^X--po-base=//'`
732     shift ;;
733 ericb 1.116 --doc-base )
734     shift
735     if test $# = 0; then
736     func_fatal_error "missing argument for --doc-base"
737     fi
738     docbase=$1
739     shift ;;
740     --doc-base=* )
741 eggert 1.203 docbase=`echo "X$1" | sed -e 's/^X--doc-base=//'`
742 ericb 1.116 shift ;;
743 haible 1.57 --tests-base )
744     shift
745     if test $# = 0; then
746     func_fatal_error "missing argument for --tests-base"
747     fi
748     testsbase=$1
749     shift ;;
750     --tests-base=* )
751 eggert 1.203 testsbase=`echo "X$1" | sed -e 's/^X--tests-base=//'`
752 haible 1.57 shift ;;
753 jas 1.41 --aux-dir )
754     shift
755     if test $# = 0; then
756     func_fatal_error "missing argument for --aux-dir"
757     fi
758     auxdir=$1
759     shift ;;
760     --aux-dir=* )
761 eggert 1.203 auxdir=`echo "X$1" | sed -e 's/^X--aux-dir=//'`
762 jas 1.41 shift ;;
763 haible 1.57 --with-tests )
764     inctests=true
765     shift ;;
766 haible 1.48 --avoid )
767     shift
768     if test $# = 0; then
769     func_fatal_error "missing argument for --avoid"
770     fi
771 haible 1.165 func_append avoidlist " $1"
772 haible 1.48 shift ;;
773     --avoid=* )
774 eggert 1.203 arg=`echo "X$1" | sed -e 's/^X--avoid=//'`
775 eggert 1.167 func_append avoidlist " $arg"
776 eggert 1.14 shift ;;
777 eggert 1.20 --lgpl )
778     lgpl=true
779     shift ;;
780 haible 1.149 --makefile-name )
781     shift
782     if test $# = 0; then
783     func_fatal_error "missing argument for --makefile-name"
784     fi
785     makefile_name="$1"
786     shift ;;
787     --makefile-name=* )
788 eggert 1.203 makefile_name=`echo "X$1" | sed -e 's/^X--makefile-name=//'`
789 haible 1.149 shift ;;
790 haible 1.48 --libtool )
791     libtool=true
792     shift ;;
793 haible 1.129 --no-libtool )
794     libtool=false
795     shift ;;
796 haible 1.62 --macro-prefix )
797     shift
798     if test $# = 0; then
799     func_fatal_error "missing argument for --macro-prefix"
800     fi
801     macro_prefix="$1"
802     shift ;;
803     --macro-prefix=* )
804 eggert 1.203 macro_prefix=`echo "X$1" | sed -e 's/^X--macro-prefix=//'`
805 haible 1.62 shift ;;
806 haible 1.250 --po-domain )
807     shift
808     if test $# = 0; then
809     func_fatal_error "missing argument for --po-domain"
810     fi
811     po_domain="$1"
812     shift ;;
813     --po-domain=* )
814     po_domain=`echo "X$1" | sed -e 's/^X--po-domain=//'`
815     shift ;;
816 haible 1.1 --no-changelog | --no-changelo | --no-changel | --no-change | --no-chang | --no-chan | --no-cha | --no-ch | --no-c )
817     do_changelog=false
818     shift ;;
819 eggert 1.15 --dry-run )
820 haible 1.78 doit=false
821 eggert 1.15 shift ;;
822 haible 1.91 -s | --symbolic | --symboli | --symbol | --symbo | --symb | --symlink | --symlin | --symli | --syml | --sym | --sy )
823 jas 1.42 symbolic=true
824 jas 1.41 shift ;;
825 haible 1.193 --local-symlink | --local-symlin | --local-symli | --local-syml | --local-sym | --local-sy | --local-s )
826     lsymbolic=true
827     shift ;;
828 haible 1.248 -S | --more-symlinks | --more-symlink | --more-symlin | --more-symli | --more-syml | --more-sym | --more-sy | --more-s | --more- | --more | --mor | --mo )
829     symbolic=true
830     do_copyrights=
831     shift ;;
832 haible 1.1 --help | --hel | --he | --h )
833     func_usage
834 rwild 1.168 func_exit $? ;;
835 haible 1.256 --version | --versio | --versi | --vers )
836 haible 1.1 func_version
837 rwild 1.168 func_exit $? ;;
838 haible 1.1 -- )
839 haible 1.85 # Stop option processing
840 haible 1.1 shift
841     break ;;
842     -* )
843     echo "gnulib-tool: unknown option $1" 1>&2
844     echo "Try 'gnulib-tool --help' for more information." 1>&2
845 rwild 1.168 func_exit 1 ;;
846 haible 1.1 * )
847     break ;;
848     esac
849     done
850 haible 1.85
851 haible 1.91 if test "$mode" = update; then
852     if test $# != 0; then
853     echo "gnulib-tool: too many arguments in 'update' mode" 1>&2
854     echo "Try 'gnulib-tool --help' for more information." 1>&2
855     echo "If you really want to modify the gnulib configuration of your project," 1>&2
856     echo "you need to use 'gnulib --import' - at your own risk!" 1>&2
857 rwild 1.168 func_exit 1
858 haible 1.91 fi
859 haible 1.146 if test -n "$local_gnulib_dir" || test -n "$supplied_libname" \
860 haible 1.250 || test -n "$sourcebase" || test -n "$m4base" || test -n "$pobase" \
861 haible 1.118 || test -n "$docbase" || test -n "$testsbase" || test -n "$auxdir" \
862     || test -n "$inctests" || test -n "$avoidlist" || test -n "$lgpl" \
863 haible 1.250 || test -n "$makefile_name" || test -n "$macro_prefix" \
864     || test -n "$po_domain"; then
865 haible 1.91 echo "gnulib-tool: invalid options for 'update' mode" 1>&2
866     echo "Try 'gnulib-tool --help' for more information." 1>&2
867     echo "If you really want to modify the gnulib configuration of your project," 1>&2
868     echo "you need to use 'gnulib --import' - at your own risk!" 1>&2
869 rwild 1.168 func_exit 1
870 haible 1.91 fi
871     do_changelog=false
872     fi
873 haible 1.250 if test -n "$pobase" && test -z "$po_domain"; then
874     echo "gnulib-tool: together with --po-base, you need to specify --po-domain" 1>&2
875     echo "Try 'gnulib-tool --help' for more information." 1>&2
876     func_exit 1
877     fi
878     if test -z "$pobase" && test -n "$po_domain"; then
879     echo "gnulib-tool: warning: --po-domain has no effect without a --po-base option" 1>&2
880     fi
881 haible 1.91
882 haible 1.125 # Determine the minimum supported autoconf version from the project's
883     # configure.ac.
884 haible 1.119 DEFAULT_AUTOCONF_MINVERSION="2.59"
885 haible 1.130 autoconf_minversion=
886     configure_ac=
887     if { test "$mode" = import || test "$mode" = update; } && test -n "$destdir"; then
888     if test -f "$destdir"/configure.ac; then
889     configure_ac="$destdir/configure.ac"
890     else
891     if test -f "$destdir"/configure.in; then
892     configure_ac="$destdir/configure.in"
893     fi
894     fi
895     else
896     if test -f configure.ac; then
897     configure_ac="configure.ac"
898     else
899     if test -f configure.in; then
900     configure_ac="configure.in"
901     fi
902     fi
903     fi
904     if test -n "$configure_ac"; then
905     # Use sed, not autoconf --trace, to look for the AC_PREREQ invocation,
906     # because when some m4 files are omitted from a CVS repository,
907     # "autoconf --trace=AC_PREREQ" fails with an error message like this:
908     # m4: aclocal.m4:851: Cannot open m4/absolute-header.m4: No such file or directory
909     # autom4te: m4 failed with exit status: 1
910     prereqs=
911     my_sed_traces='
912     s,#.*$,,
913     s,^dnl .*$,,
914     s, dnl .*$,,
915     /AC_PREREQ/ {
916 eggert 1.205 s,^.*AC_PREREQ([[ ]*\([^])]*\).*$,\1,p
917 haible 1.130 }'
918 eggert 1.205 prereqs=`sed -n -e "$my_sed_traces" < "$configure_ac"`
919 haible 1.130 if test -n "$prereqs"; then
920 eggert 1.205 autoconf_minversion=`
921     for version in $prereqs; do echo $version; done |
922 eggert 1.208 LC_ALL=C sort -nru | sed 1q
923 eggert 1.205 `
924 haible 1.130 fi
925 haible 1.125 fi
926     if test -z "$autoconf_minversion"; then
927     autoconf_minversion=$DEFAULT_AUTOCONF_MINVERSION
928     fi
929 haible 1.119 case "$autoconf_minversion" in
930     1.* | 2.[0-4]* | 2.5[0-8]*)
931 haible 1.125 func_fatal_error "minimum supported autoconf version is 2.59. Try adding AC_PREREQ([$DEFAULT_AUTOCONF_MINVERSION]) to your configure.ac." ;;
932 haible 1.119 esac
933    
934 haible 1.85 # Remove trailing slashes from the directory names. This is necessary for
935     # m4base (to avoid an error in func_import) and optional for the others.
936     sed_trimtrailingslashes='s,\([^/]\)//*$,\1,'
937 haible 1.146 case "$local_gnulib_dir" in
938 eggert 1.203 */ ) local_gnulib_dir=`echo "$local_gnulib_dir" | sed -e "$sed_trimtrailingslashes"` ;;
939 haible 1.146 esac
940 haible 1.85 case "$sourcebase" in
941 eggert 1.203 */ ) sourcebase=`echo "$sourcebase" | sed -e "$sed_trimtrailingslashes"` ;;
942 haible 1.85 esac
943     case "$m4base" in
944 eggert 1.203 */ ) m4base=`echo "$m4base" | sed -e "$sed_trimtrailingslashes"` ;;
945 haible 1.85 esac
946 haible 1.250 case "$pobase" in
947     */ ) pobase=`echo "$pobase" | sed -e "$sed_trimtrailingslashes"` ;;
948     esac
949 ericb 1.116 case "$docbase" in
950 eggert 1.203 */ ) docbase=`echo "$docbase" | sed -e "$sed_trimtrailingslashes"` ;;
951 ericb 1.116 esac
952 haible 1.85 case "$testsbase" in
953 eggert 1.203 */ ) testsbase=`echo "$testsbase" | sed -e "$sed_trimtrailingslashes"` ;;
954 haible 1.85 esac
955     case "$auxdir" in
956 eggert 1.203 */ ) auxdir=`echo "$auxdir" | sed -e "$sed_trimtrailingslashes"` ;;
957 haible 1.85 esac
958 haible 1.1 }
959    
960     case "$0" in
961     /*) self_abspathname="$0" ;;
962     */*) self_abspathname=`pwd`/"$0" ;;
963 rwild 1.236 *)
964 haible 1.245 # Look in $PATH.
965     # Iterate through the elements of $PATH.
966     # We use IFS=: instead of
967     # for d in `echo ":$PATH:" | sed -e 's/:::*/:.:/g' | sed -e 's/:/ /g'`
968     # because the latter does not work when some PATH element contains spaces.
969     # We use a canonicalized $pathx instead of $PATH, because empty PATH
970     # elements are by definition equivalent to '.', however field splitting
971     # according to IFS=: loses empty fields in many shells:
972     # - /bin/sh on OSF/1 and Solaris loses all empty fields (at the
973     # beginning, at the end, and in the middle),
974     # - /bin/sh on IRIX and /bin/ksh on IRIX and OSF/1 lose empty fields
975     # at the beginning and at the end,
976     # - GNU bash, /bin/sh on AIX and HP-UX, and /bin/ksh on AIX, HP-UX,
977     # Solaris lose empty fields at the end.
978     # The 'case' statement is an optimization, to avoid evaluating the
979     # explicit canonicalization command when $PATH contains no empty fields.
980 rwild 1.242 self_abspathname=
981 haible 1.245 if test "${PATH_SEPARATOR+set}" != set; then
982     func_tmpdir
983     { echo "#! /bin/sh"; echo "exit 0"; } > "$tmp"/conf.sh
984     chmod +x "$tmp"/conf.sh
985     if (PATH="/nonexistent;$tmp"; conf.sh) >/dev/null 2>&1; then
986     PATH_SEPARATOR=';'
987     else
988     PATH_SEPARATOR=:
989     fi
990     rm -rf "$tmp"
991     fi
992     if test "$PATH_SEPARATOR" = ";"; then
993     # On Windows, programs are searched in "." before $PATH.
994     pathx=".;$PATH"
995     else
996     # On Unix, we have to convert empty PATH elements to ".".
997     pathx="$PATH"
998     case :$PATH: in
999     *::*)
1000     pathx=`echo ":$PATH:" | sed -e 's/:::*/:.:/g' -e 's/^://' -e 's/:\$//'`
1001     ;;
1002     esac
1003     fi
1004     save_IFS="$IFS"
1005     IFS="$PATH_SEPARATOR"
1006 rwild 1.243 for d in $pathx; do
1007 haible 1.245 IFS="$save_IFS"
1008 rwild 1.242 test -z "$d" && d=.
1009     if test -x "$d/$0" && test ! -d "$d/$0"; then
1010 haible 1.245 self_abspathname="$d/$0"
1011 haible 1.244 break
1012 rwild 1.242 fi
1013     done
1014 haible 1.245 IFS="$save_IFS"
1015 rwild 1.242 if test -z "$self_abspathname"; then
1016     func_fatal_error "could not locate the gnulib-tool program - how did you invoke it?"
1017 rwild 1.236 fi
1018 rwild 1.242 ;;
1019 haible 1.1 esac
1020 eggert 1.13 while test -h "$self_abspathname"; do
1021 haible 1.1 # Resolve symbolic link.
1022 haible 1.80 linkval=`func_readlink "$self_abspathname"`
1023 haible 1.1 test -n "$linkval" || break
1024     case "$linkval" in
1025     /* ) self_abspathname="$linkval" ;;
1026 eggert 1.203 * ) self_abspathname=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`/"$linkval" ;;
1027 haible 1.1 esac
1028     done
1029 eggert 1.203 gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`
1030 haible 1.1
1031 haible 1.127 func_tmpdir
1032 rwild 1.168 trap 'exit_status=$?
1033     if test "$signal" != 0; then
1034     echo "caught signal $signal" >&2
1035     fi
1036     rm -rf "$tmp"
1037     exit $exit_status' 0
1038     for signal in 1 2 3 13 15; do
1039     trap '{ signal='$signal'; func_exit 1; }' $signal
1040     done
1041     signal=0
1042 haible 1.127
1043     # func_lookup_file file
1044     # looks up a file in $local_gnulib_dir or $gnulib_dir, or combines it through
1045     # 'patch'.
1046 haible 1.147 # Input:
1047     # - local_gnulib_dir from --local-dir
1048 haible 1.127 # Output:
1049     # - lookedup_file name of the merged (combined) file
1050     # - lookedup_tmp true if it is located in the tmp directory, blank otherwise
1051     func_lookup_file ()
1052     {
1053     lkfile="$1"
1054     if test -n "$local_gnulib_dir" && test -f "$local_gnulib_dir/$lkfile"; then
1055     lookedup_file="$local_gnulib_dir/$lkfile"
1056     lookedup_tmp=
1057     else
1058     if test -f "$gnulib_dir/$lkfile"; then
1059     if test -n "$local_gnulib_dir" && test -f "$local_gnulib_dir/$lkfile.diff"; then
1060 eggert 1.203 lkbase=`echo "$lkfile" | sed -e 's,^.*/,,'`
1061 haible 1.127 rm -f "$tmp/$lkbase"
1062     cp "$gnulib_dir/$lkfile" "$tmp/$lkbase"
1063     patch -s "$tmp/$lkbase" < "$local_gnulib_dir/$lkfile.diff" \
1064     || func_fatal_error "patch file $local_gnulib_dir/$lkfile.diff didn't apply cleanly"
1065     lookedup_file="$tmp/$lkbase"
1066     lookedup_tmp=true
1067     else
1068     lookedup_file="$gnulib_dir/$lkfile"
1069     lookedup_tmp=
1070     fi
1071     else
1072     func_fatal_error "file $gnulib_dir/$lkfile not found"
1073     fi
1074     fi
1075     }
1076    
1077 haible 1.1 # func_all_modules
1078 haible 1.147 # Input:
1079     # - local_gnulib_dir from --local-dir
1080 haible 1.1 func_all_modules ()
1081     {
1082 haible 1.57 # Filter out metainformation files like README, which are not modules.
1083     # Filter out unit test modules; they can be retrieved through
1084     # --extract-tests-module if desired.
1085 haible 1.127 {
1086 haible 1.210 (cd "$gnulib_dir" && find modules -type f -print | sed -e 's,^modules/,,')
1087 haible 1.127 if test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules"; then
1088 haible 1.210 (cd "$local_gnulib_dir" && find modules -type f -print | sed -e 's,^modules/,,' -e 's,\.diff$,,')
1089 haible 1.127 fi
1090     } \
1091 haible 1.212 | sed -e '/^CVS\//d' -e '/\/CVS\//d' \
1092 rwild 1.211 -e '/^ChangeLog$/d' -e '/\/ChangeLog$/d' \
1093     -e '/^COPYING$/d' -e '/\/COPYING$/d' \
1094     -e '/^README$/d' -e '/\/README$/d' \
1095 haible 1.210 -e '/^TEMPLATE$/d' \
1096 haible 1.230 -e '/^TEMPLATE-EXTENDED$/d' \
1097 haible 1.210 -e '/^TEMPLATE-TESTS$/d' \
1098 jas 1.213 -e '/^\..*/d' \
1099 haible 1.210 -e '/~$/d' \
1100 eggert 1.203 | sed -e '/-tests$/d' \
1101 haible 1.161 | LC_ALL=C sort -u
1102 haible 1.1 }
1103    
1104     # func_verify_module
1105     # verifies a module name
1106 haible 1.147 # Input:
1107     # - local_gnulib_dir from --local-dir
1108     # - module module name argument
1109 haible 1.1 func_verify_module ()
1110     {
1111 haible 1.138 if { test -f "$gnulib_dir/modules/$module" \
1112     || { test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules" \
1113     && test -f "$local_gnulib_dir/modules/$module"; }; } \
1114     && test "CVS" != "$module" \
1115     && test "ChangeLog" != "$module" \
1116     && test "COPYING" != "$module" \
1117     && test "README" != "$module" \
1118     && test "TEMPLATE" != "$module" \
1119 haible 1.230 && test "TEMPLATE-EXTENDED" != "$module" \
1120 haible 1.138 && test "TEMPLATE-TESTS" != "$module"; then
1121     # OK, $module is a correct module name.
1122 haible 1.145 # Verify that building the module description with 'patch' succeeds.
1123     func_lookup_file "modules/$module"
1124 haible 1.138 else
1125 karl 1.4 echo "gnulib-tool: module $module doesn't exist" 1>&2
1126 haible 1.1 module=
1127     fi
1128     }
1129    
1130 haible 1.57 # func_verify_nontests_module
1131     # verifies a module name, excluding tests modules
1132 haible 1.147 # Input:
1133     # - local_gnulib_dir from --local-dir
1134     # - module module name argument
1135 haible 1.57 func_verify_nontests_module ()
1136     {
1137     case "$module" in
1138     *-tests ) module= ;;
1139     * ) func_verify_module ;;
1140     esac
1141     }
1142    
1143     # func_verify_tests_module
1144     # verifies a module name, considering only tests modules
1145 haible 1.147 # Input:
1146     # - local_gnulib_dir from --local-dir
1147     # - module module name argument
1148 haible 1.57 func_verify_tests_module ()
1149     {
1150     case "$module" in
1151     *-tests ) func_verify_module ;;
1152     * ) module= ;;
1153     esac
1154     }
1155    
1156 ericb 1.115 sed_extract_prog=':[ ]*$/ {
1157 haible 1.1 :a
1158     n
1159 ericb 1.115 s/^Description:[ ]*$//
1160 haible 1.257 s/^Notice:[ ]*$//
1161 ericb 1.115 s/^Files:[ ]*$//
1162     s/^Depends-on:[ ]*$//
1163 haible 1.221 s/^configure\.ac-early:[ ]*$//
1164 ericb 1.115 s/^configure\.ac:[ ]*$//
1165     s/^Makefile\.am:[ ]*$//
1166     s/^Include:[ ]*$//
1167 haible 1.220 s/^Link:[ ]*$//
1168 ericb 1.115 s/^License:[ ]*$//
1169     s/^Maintainer:[ ]*$//
1170 haible 1.1 tb
1171     p
1172     ba
1173     :b
1174     }'
1175    
1176     # func_get_description module
1177 haible 1.147 # Input:
1178     # - local_gnulib_dir from --local-dir
1179 haible 1.1 func_get_description ()
1180     {
1181 haible 1.127 func_lookup_file "modules/$1"
1182 eggert 1.203 sed -n -e "/^Description$sed_extract_prog" < "$lookedup_file"
1183 haible 1.1 }
1184    
1185 haible 1.257 # func_get_notice module
1186     # Input:
1187     # - local_gnulib_dir from --local-dir
1188     func_get_notice ()
1189     {
1190     func_lookup_file "modules/$1"
1191     sed -n -e "/^Notice$sed_extract_prog" < "$lookedup_file"
1192     }
1193    
1194 haible 1.1 # func_get_filelist module
1195 haible 1.147 # Input:
1196     # - local_gnulib_dir from --local-dir
1197 haible 1.1 func_get_filelist ()
1198     {
1199 haible 1.127 func_lookup_file "modules/$1"
1200 eggert 1.203 sed -n -e "/^Files$sed_extract_prog" < "$lookedup_file"
1201 haible 1.209 echo m4/gnulib-common.m4
1202 haible 1.119 case "$autoconf_minversion" in
1203     2.59)
1204     #echo m4/onceonly.m4
1205     echo m4/onceonly_2_57.m4
1206     ;;
1207     esac
1208 haible 1.1 }
1209    
1210     # func_get_dependencies module
1211 haible 1.147 # Input:
1212     # - local_gnulib_dir from --local-dir
1213 haible 1.1 func_get_dependencies ()
1214     {
1215 haible 1.57 # ${module}-tests always implicitly depends on ${module}.
1216 eggert 1.203 echo "$1" | sed -n -e 's/-tests//p'
1217 haible 1.57 # Then the explicit dependencies listed in the module description.
1218 haible 1.127 func_lookup_file "modules/$1"
1219 eggert 1.203 sed -n -e "/^Depends-on$sed_extract_prog" < "$lookedup_file"
1220 haible 1.1 }
1221    
1222 haible 1.221 # func_get_autoconf_early_snippet module
1223     # Input:
1224     # - local_gnulib_dir from --local-dir
1225     func_get_autoconf_early_snippet ()
1226     {
1227     func_lookup_file "modules/$1"
1228     sed -n -e "/^configure\.ac-early$sed_extract_prog" < "$lookedup_file"
1229     }
1230    
1231 haible 1.1 # func_get_autoconf_snippet module
1232 haible 1.147 # Input:
1233     # - local_gnulib_dir from --local-dir
1234 haible 1.1 func_get_autoconf_snippet ()
1235     {
1236 haible 1.127 func_lookup_file "modules/$1"
1237 eggert 1.203 sed -n -e "/^configure\.ac$sed_extract_prog" < "$lookedup_file"
1238 haible 1.1 }
1239    
1240     # func_get_automake_snippet module
1241 haible 1.147 # Input:
1242     # - local_gnulib_dir from --local-dir
1243 haible 1.1 func_get_automake_snippet ()
1244     {
1245 haible 1.127 func_lookup_file "modules/$1"
1246 eggert 1.203 sed -n -e "/^Makefile\.am$sed_extract_prog" < "$lookedup_file"
1247 haible 1.180 case "$1" in
1248     *-tests)
1249     # *-tests module live in tests/, not lib/.
1250     ;;
1251     *)
1252     # Synthesize an EXTRA_DIST augmentation.
1253     sed_combine_lines='/\\$/{
1254     :a
1255     N
1256 haible 1.186 s/\\\n/ /
1257 haible 1.180 s/\\$/\\/
1258     ta
1259     }'
1260 ericb 1.204 sed_extract_mentioned_files='s/^lib_SOURCES[ ]*+=[ ]*//p'
1261 haible 1.180 already_mentioned_files=` \
1262 eggert 1.203 sed -n -e "/^Makefile\.am$sed_extract_prog" < "$lookedup_file" \
1263     | sed -e "$sed_combine_lines" \
1264     | sed -n -e "$sed_extract_mentioned_files" | sed -e 's/#.*//'`
1265 haible 1.180 all_files=`func_get_filelist $1`
1266     lib_files=`for f in $all_files; do \
1267     case $f in \
1268     lib/*) echo $f ;; \
1269     esac; \
1270 eggert 1.203 done | sed -e 's,^lib/,,'`
1271 haible 1.180 # Remove $already_mentioned_files from $lib_files.
1272     echo "$lib_files" | LC_ALL=C sort -u > "$tmp"/lib-files
1273     extra_files=`for f in $already_mentioned_files; do echo $f; done \
1274     | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/lib-files`
1275     if test -n "$extra_files"; then
1276     echo "EXTRA_DIST +=" $extra_files
1277     echo
1278     fi
1279 haible 1.190 # Synthesize also an EXTRA_lib_SOURCES augmentation.
1280     # This is necessary so that automake can generate the right list of
1281     # dependency rules.
1282     # A possible approach would be to use autom4te --trace of the redefined
1283     # AC_LIBOBJ and AC_REPLACE_FUNCS macros when creating the Makefile.am
1284     # (use autom4te --trace, not just grep, so that AC_LIBOBJ invocations
1285     # inside autoconf's built-in macros are not missed).
1286     # But it's simpler and more robust to do it here, based on the file list.
1287     # If some .c file exists and is not used with AC_LIBOBJ - for example,
1288     # a .c file is preprocessed into another .c file for BUILT_SOURCES -,
1289     # automake will generate a useless dependency; this is harmless.
1290 haible 1.222 case "$1" in
1291     relocatable-prog-wrapper) ;;
1292     *)
1293     sed_extract_c_files='/\.c$/p'
1294     extra_files=`echo "$extra_files" | sed -n -e "$sed_extract_c_files"`
1295     if test -n "$extra_files"; then
1296     echo "EXTRA_lib_SOURCES +=" $extra_files
1297     echo
1298     fi
1299     ;;
1300     esac
1301 haible 1.249 # Synthesize an EXTRA_DIST augmentation also for the files in build-aux/.
1302     buildaux_files=`for f in $all_files; do \
1303     case $f in \
1304     build-aux/*) echo $f ;; \
1305     esac; \
1306     done | sed -e 's,^build-aux/,,'`
1307     if test -n "$buildaux_files"; then
1308     sed_prepend_auxdir='s,^,$(top_srcdir)/'"$auxdir"'/,'
1309     echo "EXTRA_DIST += "`echo "$buildaux_files" | sed -e "$sed_prepend_auxdir"`
1310     echo
1311     fi
1312 haible 1.180 ;;
1313     esac
1314 haible 1.1 }
1315    
1316     # func_get_include_directive module
1317 haible 1.147 # Input:
1318     # - local_gnulib_dir from --local-dir
1319 haible 1.1 func_get_include_directive ()
1320     {
1321 haible 1.127 func_lookup_file "modules/$1"
1322 eggert 1.203 sed -n -e "/^Include$sed_extract_prog" < "$lookedup_file" | \
1323     sed -e 's/^\(["<]\)/#include \1/'
1324 haible 1.1 }
1325    
1326 haible 1.220 # func_get_link_directive module
1327     # Input:
1328     # - local_gnulib_dir from --local-dir
1329     func_get_link_directive ()
1330     {
1331     func_lookup_file "modules/$1"
1332     sed -n -e "/^Link$sed_extract_prog" < "$lookedup_file"
1333     }
1334    
1335 haible 1.18 # func_get_license module
1336 haible 1.147 # Input:
1337     # - local_gnulib_dir from --local-dir
1338 haible 1.18 func_get_license ()
1339     {
1340 haible 1.216 func_lookup_file "modules/$1"
1341     { sed -n -e "/^License$sed_extract_prog" < "$lookedup_file"
1342     # The default is GPL.
1343     echo "GPL"
1344     } | sed -e 's,^ *$,,' | sed -e 1q
1345 haible 1.18 }
1346    
1347 haible 1.8 # func_get_maintainer module
1348 haible 1.147 # Input:
1349     # - local_gnulib_dir from --local-dir
1350 haible 1.8 func_get_maintainer ()
1351     {
1352 haible 1.127 func_lookup_file "modules/$1"
1353 eggert 1.203 sed -n -e "/^Maintainer$sed_extract_prog" < "$lookedup_file"
1354 haible 1.8 }
1355    
1356 haible 1.57 # func_get_tests_module module
1357 haible 1.147 # Input:
1358     # - local_gnulib_dir from --local-dir
1359 haible 1.57 func_get_tests_module ()
1360     {
1361     # The naming convention for tests modules is hardwired: ${module}-tests.
1362 haible 1.147 if test -f "$gnulib_dir/modules/$1"-tests \
1363     || { test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules" \
1364     && test -f "$local_gnulib_dir/modules/$1"-tests; }; then
1365 haible 1.57 echo "$1"-tests
1366     fi
1367     }
1368    
1369 haible 1.48 # func_acceptable module
1370     # tests whether a module is acceptable.
1371     # Input:
1372     # - avoidlist list of modules to avoid
1373     func_acceptable ()
1374     {
1375     for avoid in $avoidlist; do
1376     if test "$avoid" = "$1"; then
1377     return 1
1378     fi
1379     done
1380     return 0
1381     }
1382    
1383 haible 1.27 # func_modules_transitive_closure
1384     # Input:
1385 haible 1.147 # - local_gnulib_dir from --local-dir
1386 haible 1.27 # - modules list of specified modules
1387 haible 1.57 # - inctests true if tests should be included, blank otherwise
1388 haible 1.48 # - avoidlist list of modules to avoid
1389 haible 1.162 # - tmp pathname of a temporary directory
1390 haible 1.27 # Output:
1391     # - modules list of modules, including dependencies
1392     func_modules_transitive_closure ()
1393 haible 1.25 {
1394 haible 1.162 # In order to process every module only once (for speed), process an "input
1395     # list" of modules, producing an "output list" of modules. During each round,
1396     # more modules can be queued in the input list. Once a module on the input
1397     # list has been processed, it is added to the "handled list", so we can avoid
1398     # to process it again.
1399     handledmodules=
1400     inmodules="$modules"
1401     outmodules=
1402     while test -n "$inmodules"; do
1403     inmodules_this_round="$inmodules"
1404     inmodules= # Accumulator, queue for next round
1405     for module in $inmodules_this_round; do
1406 haible 1.25 func_verify_module
1407     if test -n "$module"; then
1408 haible 1.48 if func_acceptable $module; then
1409 haible 1.165 func_append outmodules " $module"
1410 haible 1.162 deps=`func_get_dependencies $module`
1411     # Duplicate dependencies are harmless, but Jim wants a warning.
1412     duplicated_deps=`echo "$deps" | LC_ALL=C sort | LC_ALL=C uniq -d`
1413     if test -n "$duplicated_deps"; then
1414     echo "warning: module $module has duplicated dependencies: "`echo $duplicated_deps` 1>&2
1415     fi
1416 haible 1.165 func_append inmodules " $deps"
1417 haible 1.57 if test -n "$inctests"; then
1418     testsmodule=`func_get_tests_module $module`
1419     if test -n "$testsmodule"; then
1420 haible 1.165 func_append inmodules " $testsmodule"
1421 haible 1.57 fi
1422     fi
1423 haible 1.48 fi
1424 haible 1.25 fi
1425     done
1426 haible 1.162 handledmodules=`for m in $handledmodules $inmodules_this_round; do echo $m; done | LC_ALL=C sort -u`
1427     # Remove $handledmodules from $inmodules.
1428     for m in $inmodules; do echo $m; done | LC_ALL=C sort -u > "$tmp"/queued-modules
1429     inmodules=`echo "$handledmodules" | LC_ALL=C join -v 2 - "$tmp"/queued-modules`
1430 haible 1.25 done
1431 haible 1.162 modules=`for m in $outmodules; do echo $m; done | LC_ALL=C sort -u`
1432     rm -f "$tmp"/queued-modules
1433 haible 1.27 }
1434    
1435 haible 1.99 # func_modules_add_dummy
1436     # Input:
1437 haible 1.147 # - local_gnulib_dir from --local-dir
1438 haible 1.99 # - modules list of modules, including dependencies
1439     # Output:
1440     # - modules list of modules, including 'dummy' if needed
1441     func_modules_add_dummy ()
1442     {
1443     have_lib_SOURCES=
1444     sed_remove_backslash_newline=':a
1445     /\\$/{
1446     s/\\$//
1447     N
1448     s/\n//
1449     ba
1450     }'
1451     for module in $modules; do
1452     func_verify_nontests_module
1453     if test -n "$module"; then
1454     # Extract the value of "lib_SOURCES += ...".
1455 eggert 1.203 for file in `func_get_automake_snippet "$module" | sed -e "$sed_remove_backslash_newline" | sed -n -e 's,^lib_SOURCES[ ]*+=\([^#]*\).*$,\1,p'`; do
1456 haible 1.99 # Ignore .h files since they are not compiled.
1457     case "$file" in
1458     *.h) ;;
1459     *) have_lib_SOURCES=yes ;;
1460     esac
1461     done
1462     fi
1463     done
1464     # Add the dummy module, to make sure the library will be non-empty.
1465     if test -z "$have_lib_SOURCES"; then
1466 jas 1.231 if func_acceptable "dummy"; then
1467     func_append modules " dummy"
1468     fi
1469 haible 1.99 fi
1470     }
1471    
1472 haible 1.257 # func_modules_notice
1473     # Input:
1474     # - local_gnulib_dir from --local-dir
1475     # - verbose integer, default 0, inc/decremented by --verbose/--quiet
1476     # - modules list of modules, including dependencies
1477     func_modules_notice ()
1478     {
1479     if test $verbose -ge -1; then
1480     for module in $modules; do
1481     func_verify_module
1482     if test -n "$module"; then
1483     msg=`func_get_notice $module`
1484     if test -n "$msg"; then
1485     echo "Notice from module $module:"
1486     echo "$msg" | sed -e 's/^/ /'
1487     fi
1488     fi
1489     done
1490     fi
1491     }
1492    
1493 haible 1.28 # func_modules_to_filelist
1494     # Input:
1495 haible 1.147 # - local_gnulib_dir from --local-dir
1496 haible 1.28 # - modules list of modules, including dependencies
1497     # Output:
1498     # - files list of files
1499     func_modules_to_filelist ()
1500     {
1501     files=
1502     for module in $modules; do
1503     func_verify_module
1504     if test -n "$module"; then
1505 haible 1.165 fs=`func_get_filelist $module`
1506     func_append files " $fs"
1507 haible 1.28 fi
1508     done
1509 haible 1.161 files=`for f in $files; do echo $f; done | LC_ALL=C sort -u`
1510 haible 1.28 }
1511    
1512 haible 1.256 # func_execute_command command [args...]
1513     # Executes a command.
1514     # Uses also the variables
1515     # - verbose integer, default 0, inc/decremented by --verbose/--quiet
1516     func_execute_command ()
1517     {
1518     if test $verbose -ge 0; then
1519     echo "executing $*"
1520     "$@"
1521     else
1522     # Commands like automake produce output to stderr even when the succeed.
1523     # Turn this output off if the command succeeds.
1524     "$@" > "$tmp"/cmdout 2>&1
1525     cmdret=$?
1526     if test $cmdret = 0; then
1527     rm -f "$tmp"/cmdout
1528     else
1529     echo "executing $*"
1530     cat "$tmp"/cmdout 1>&2
1531     rm -f "$tmp"/cmdout
1532     (exit $cmdret)
1533     fi
1534     fi
1535     }
1536    
1537 haible 1.31 # func_emit_lib_Makefile_am
1538 eggert 1.150 # emits the contents of library makefile to standard output.
1539 haible 1.31 # Input:
1540 haible 1.147 # - local_gnulib_dir from --local-dir
1541 haible 1.31 # - modules list of modules, including dependencies
1542     # - libname library name
1543 haible 1.250 # - pobase directory relative to destdir where to place *.po files
1544 haible 1.194 # - auxdir directory relative to destdir where to place build aux files
1545 haible 1.149 # - makefile_name from --makefile-name
1546 haible 1.129 # - libtool true if libtool will be used, false or blank otherwise
1547 haible 1.179 # - macro_prefix prefix of gl_LIBOBJS macros to use
1548 haible 1.250 # - po_domain prefix of i18n domain to use (without -gnulib suffix)
1549 haible 1.31 # - actioncmd (optional) command that will reproduce this invocation
1550 haible 1.218 # - for_test true if creating a package for testing, false otherwise
1551 haible 1.191 # Output:
1552     # - uses_subdirs nonempty if object files in subdirs exist
1553 haible 1.31 func_emit_lib_Makefile_am ()
1554     {
1555 haible 1.153 # When creating an includable Makefile.am snippet, augment variables with
1556     # += instead of assigning them.
1557     if test -n "$makefile_name"; then
1558     assign='+='
1559     else
1560     assign='='
1561     fi
1562 haible 1.129 if test "$libtool" = true; then
1563 haible 1.31 libext=la
1564     perhapsLT=LT
1565 haible 1.159 sed_eliminate_LDFLAGS=
1566 haible 1.31 else
1567     libext=a
1568     perhapsLT=
1569 ericb 1.169 sed_eliminate_LDFLAGS='/^lib_LDFLAGS[ ]*+=/d'
1570 haible 1.31 fi
1571 haible 1.218 if $for_test; then
1572     # When creating a package for testing: Attempt to provoke failures,
1573     # especially link errors, already during "make" rather than during
1574     # "make check", because "make check" is not possible in a cross-compiling
1575     # situation. Turn check_PROGRAMS into noinst_PROGRAMS.
1576     sed_transform_check_PROGRAMS='s,check_PROGRAMS,noinst_PROGRAMS,g'
1577     else
1578     sed_transform_check_PROGRAMS=
1579     fi
1580 haible 1.176 echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!"
1581 haible 1.31 echo "## Process this file with automake to produce Makefile.in."
1582 ericb 1.112 func_emit_copyright_notice
1583 haible 1.31 if test -n "$actioncmd"; then
1584     echo "# Reproduce by: $actioncmd"
1585     fi
1586     echo
1587 haible 1.191 uses_subdirs=
1588     {
1589 haible 1.139 for module in $modules; do
1590     func_verify_nontests_module
1591     if test -n "$module"; then
1592     {
1593     func_get_automake_snippet "$module" |
1594 eggert 1.203 sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \
1595 rwild 1.236 -e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \
1596     -e "$sed_eliminate_LDFLAGS" \
1597     -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \
1598     -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
1599     -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \
1600     -e "$sed_transform_check_PROGRAMS"
1601 haible 1.139 if test "$module" = 'alloca'; then
1602     echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@"
1603 haible 1.179 echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@"
1604 haible 1.139 fi
1605     } > amsnippet.tmp
1606     # Skip the contents if its entirely empty.
1607     if grep '[^ ]' amsnippet.tmp > /dev/null ; then
1608     echo "## begin gnulib module $module"
1609     echo
1610     cat amsnippet.tmp
1611     echo "## end gnulib module $module"
1612     echo
1613     fi
1614     rm -f amsnippet.tmp
1615 haible 1.191 # Test whether there are some source files in subdirectories.
1616     for f in `func_get_filelist "$module"`; do
1617     case $f in
1618     lib/*/*.c) uses_subdirs=yes ;;
1619     esac
1620     done
1621 haible 1.139 fi
1622     done
1623 haible 1.191 } > allsnippets.tmp
1624     if test -z "$makefile_name"; then
1625     # If there are source files in subdirectories, prevent collision of the
1626     # object files (example: hash.c and libxml/hash.c).
1627     subdir_options=
1628     if test -n "$uses_subdirs"; then
1629     subdir_options=' subdir-objects'
1630     fi
1631     echo "AUTOMAKE_OPTIONS = 1.5 gnits${subdir_options}"
1632     fi
1633     echo
1634 eggert 1.156 if test -z "$makefile_name"; then
1635 haible 1.153 echo "noinst_HEADERS ="
1636 haible 1.199 echo "noinst_LIBRARIES ="
1637 haible 1.198 echo "noinst_LTLIBRARIES ="
1638 haible 1.158 # Automake versions < 1.9b create an empty pkgdatadir at installation time
1639     # if you specify pkgdata_DATA to empty. This is a workaround.
1640 haible 1.153 if grep '^pkgdata_DATA *+=' allsnippets.tmp > /dev/null; then
1641     echo "pkgdata_DATA ="
1642     fi
1643     echo "EXTRA_DIST ="
1644     echo "BUILT_SOURCES ="
1645     echo "SUFFIXES ="
1646     fi
1647     echo "MOSTLYCLEANFILES $assign core *.stackdump"
1648 eggert 1.156 if test -z "$makefile_name"; then
1649 haible 1.153 echo "MOSTLYCLEANDIRS ="
1650     echo "CLEANFILES ="
1651     echo "DISTCLEANFILES ="
1652     echo "MAINTAINERCLEANFILES ="
1653     echo
1654     echo "AM_CPPFLAGS ="
1655 haible 1.139 fi
1656 haible 1.109 echo
1657 rwild 1.219 if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *= *$libname\\.$libext\$" allsnippets.tmp > /dev/null; then
1658 haible 1.199 # One of the snippets already specifies an installation location for the
1659     # library. Don't confuse automake by saying it should not be installed.
1660     :
1661     else
1662     # By default, the generated library should not be installed.
1663     echo "noinst_${perhapsLT}LIBRARIES += $libname.$libext"
1664     fi
1665     echo
1666     echo "${libname}_${libext}_SOURCES ="
1667     # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However,
1668     # automake during its analyses looks for $(LIBOBJS), not for @LIBOBJS@.
1669     echo "${libname}_${libext}_LIBADD = \$(${macro_prefix}_${perhapsLT}LIBOBJS)"
1670     echo "${libname}_${libext}_DEPENDENCIES = \$(${macro_prefix}_${perhapsLT}LIBOBJS)"
1671     echo "EXTRA_${libname}_${libext}_SOURCES ="
1672     if test "$libtool" = true; then
1673     echo "${libname}_${libext}_LDFLAGS = \$(AM_LDFLAGS)"
1674     fi
1675     echo
1676 haible 1.250 if test -n "$pobase"; then
1677     echo "AM_CPPFLAGS += -DDEFAULT_TEXT_DOMAIN=\\\"${po_domain}-gnulib\\\""
1678     echo
1679     fi
1680 haible 1.194 cat allsnippets.tmp \
1681 eggert 1.203 | sed -e 's|\$(top_srcdir)/build-aux/|$(top_srcdir)/'"$auxdir"'/|g'
1682 jas 1.35 echo
1683 haible 1.132 echo "mostlyclean-local: mostlyclean-generic"
1684 haible 1.184 echo " @for dir in '' \$(MOSTLYCLEANDIRS); do \\"
1685     echo " if test -n \"\$\$dir\" && test -d \$\$dir; then \\"
1686     echo " echo \"rmdir \$\$dir\"; rmdir \$\$dir; \\"
1687     echo " fi; \\"
1688 haible 1.241 echo " done; \\"
1689     echo " :"
1690 haible 1.139 rm -f allsnippets.tmp
1691 haible 1.31 }
1692    
1693 haible 1.250 # func_emit_po_Makevars
1694     # emits the contents of po/ makefile parametrization to standard output.
1695     # Input:
1696     # - local_gnulib_dir from --local-dir
1697     # - sourcebase directory relative to destdir where to place source code
1698     # - pobase directory relative to destdir where to place *.po files
1699     # - po_domain prefix of i18n domain to use (without -gnulib suffix)
1700     func_emit_po_Makevars ()
1701     {
1702     echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!"
1703     func_emit_copyright_notice
1704     echo
1705     echo "# Usually the message domain is the same as the package name."
1706     echo "# But here it has a '-gnulib' suffix."
1707     echo "DOMAIN = ${po_domain}-gnulib"
1708     echo
1709     echo "# These two variables depend on the location of this directory."
1710     echo "subdir = ${pobase}"
1711     echo "top_builddir = "`echo "$pobase" | sed -e 's,//*,/,g' -e 's,[^/][^/]*,..,g'`
1712     echo
1713     cat <<\EOF
1714     # These options get passed to xgettext.
1715     XGETTEXT_OPTIONS = \
1716     --keyword=_ --flag=_:1:pass-c-format \
1717     --keyword=N_ --flag=N_:1:pass-c-format \
1718     --keyword='proper_name:1,"This is a proper name. See the gettext manual, section Names."' \
1719     --keyword='proper_name_utf8:1,"This is a proper name. See the gettext manual, section Names."' \
1720     --flag=error:3:c-format --flag=error_at_line:5:c-format
1721    
1722     # This is the copyright holder that gets inserted into the header of the
1723     # $(DOMAIN).pot file. gnulib is copyrighted by the FSF.
1724     COPYRIGHT_HOLDER = Free Software Foundation, Inc.
1725    
1726     # This is the email address or URL to which the translators shall report
1727     # bugs in the untranslated strings:
1728     # - Strings which are not entire sentences, see the maintainer guidelines
1729     # in the GNU gettext documentation, section 'Preparing Strings'.
1730     # - Strings which use unclear terms or require additional context to be
1731     # understood.
1732     # - Strings which make invalid assumptions about notation of date, time or
1733     # money.
1734     # - Pluralisation problems.
1735     # - Incorrect English spelling.
1736     # - Incorrect formatting.
1737     # It can be your email address, or a mailing list address where translators
1738     # can write to without being subscribed, or the URL of a web page through
1739     # which the translators can contact you.
1740     MSGID_BUGS_ADDRESS = bug-gnulib@gnu.org
1741    
1742     # This is the list of locale categories, beyond LC_MESSAGES, for which the
1743     # message catalogs shall be used. It is usually empty.
1744     EXTRA_LOCALE_CATEGORIES =
1745    
1746     # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
1747     # context. Possible values are "yes" and "no". Set this to yes if the
1748     # package uses functions taking also a message context, like pgettext(), or
1749     # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
1750     USE_MSGCTXT = no
1751     EOF
1752     }
1753    
1754     # func_emit_po_POTFILES_in
1755     # emits the file list to be passed to xgettext to standard output.
1756     # Input:
1757     # - local_gnulib_dir from --local-dir
1758     # - sourcebase directory relative to destdir where to place source code
1759     # - files list of new files
1760     func_emit_po_POTFILES_in ()
1761     {
1762     echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!"
1763     func_emit_copyright_notice
1764     echo
1765     echo "# List of files which contain translatable strings."
1766     echo "$files" | sed -n -e "s,^lib/,$sourcebase/,p"
1767     }
1768    
1769 haible 1.57 # func_emit_tests_Makefile_am
1770 eggert 1.150 # emits the contents of tests makefile to standard output.
1771 haible 1.57 # Input:
1772 haible 1.147 # - local_gnulib_dir from --local-dir
1773 haible 1.57 # - modules list of modules, including dependencies
1774     # - libname library name
1775 haible 1.149 # - makefile_name from --makefile-name
1776 haible 1.129 # - libtool true if libtool will be used, false or blank otherwise
1777 haible 1.57 # - sourcebase relative directory containing lib source code
1778 haible 1.82 # - m4base relative directory containing autoconf macros
1779     # - testsbase relative directory containing unit test code
1780 haible 1.218 # - for_test true if creating a package for testing, false otherwise
1781 haible 1.57 func_emit_tests_Makefile_am ()
1782     {
1783 haible 1.129 if test "$libtool" = true; then
1784 haible 1.57 libext=la
1785     else
1786     libext=a
1787     fi
1788 haible 1.159 if test "$libtool" = true; then
1789     libext=la
1790     sed_eliminate_LDFLAGS=
1791     else
1792     libext=a
1793 ericb 1.169 sed_eliminate_LDFLAGS='/^lib_LDFLAGS[ ]*+=/d'
1794 haible 1.159 fi
1795 haible 1.218 if $for_test; then
1796     # When creating a package for testing: Attempt to provoke failures,
1797     # especially link errors, already during "make" rather than during
1798     # "make check", because "make check" is not possible in a cross-compiling
1799     # situation. Turn check_PROGRAMS into noinst_PROGRAMS.
1800     sed_transform_check_PROGRAMS='s,check_PROGRAMS,noinst_PROGRAMS,g'
1801     else
1802     sed_transform_check_PROGRAMS=
1803     fi
1804 eggert 1.203 testsbase_inverse=`echo "$testsbase" | sed -e 's,/$,,' | sed -e 's,[^/][^/]*,..,g'`
1805 haible 1.176 echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!"
1806 haible 1.57 echo "## Process this file with automake to produce Makefile.in."
1807 ericb 1.112 func_emit_copyright_notice
1808 haible 1.57 echo
1809     # Generate dependencies here, since it eases the debugging of test failures.
1810     echo "AUTOMAKE_OPTIONS = 1.5 foreign"
1811     echo
1812 haible 1.82 echo "ACLOCAL_AMFLAGS = -I ${testsbase_inverse}/${m4base}"
1813 haible 1.57 echo
1814 haible 1.139 (
1815     for module in $modules; do
1816     func_verify_tests_module
1817     if test -n "$module"; then
1818 haible 1.159 {
1819     func_get_automake_snippet "$module" |
1820 eggert 1.203 sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \
1821 rwild 1.236 -e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \
1822     -e "$sed_eliminate_LDFLAGS" \
1823     -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \
1824     -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
1825     -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \
1826     -e "$sed_transform_check_PROGRAMS"
1827 haible 1.159 } > amsnippet.tmp
1828 haible 1.139 # Skip the contents if its entirely empty.
1829     if grep '[^ ]' amsnippet.tmp > /dev/null ; then
1830     echo "## begin gnulib module $module"
1831     echo
1832     cat amsnippet.tmp
1833     echo "## end gnulib module $module"
1834     echo
1835     fi
1836     rm -f amsnippet.tmp
1837     fi
1838     done
1839     ) > allsnippets.tmp
1840 haible 1.94 # Nothing is being added to SUBDIRS; nevertheless the existence of this
1841     # variable is needed to avoid an error from automake:
1842     # "AM_GNU_GETTEXT used but SUBDIRS not defined"
1843     echo "SUBDIRS ="
1844 haible 1.57 echo "TESTS ="
1845 haible 1.86 echo "TESTS_ENVIRONMENT ="
1846 haible 1.57 echo "noinst_PROGRAMS ="
1847 haible 1.218 if ! $for_test; then
1848     echo "check_PROGRAMS ="
1849     fi
1850 haible 1.97 echo "noinst_HEADERS ="
1851 haible 1.139 if grep '^pkgdata_DATA *+=' allsnippets.tmp > /dev/null; then
1852     echo "pkgdata_DATA ="
1853     fi
1854 haible 1.57 echo "EXTRA_DIST ="
1855     echo "BUILT_SOURCES ="
1856     echo "SUFFIXES ="
1857 haible 1.131 echo "MOSTLYCLEANFILES = core *.stackdump"
1858 haible 1.113 echo "MOSTLYCLEANDIRS ="
1859 haible 1.57 echo "CLEANFILES ="
1860     echo "DISTCLEANFILES ="
1861     echo "MAINTAINERCLEANFILES ="
1862     echo
1863     echo "AM_CPPFLAGS = \\"
1864     echo " -I. -I\$(srcdir) \\"
1865 haible 1.82 echo " -I${testsbase_inverse} -I\$(srcdir)/${testsbase_inverse} \\"
1866     echo " -I${testsbase_inverse}/${sourcebase-lib} -I\$(srcdir)/${testsbase_inverse}/${sourcebase-lib}"
1867 haible 1.57 echo
1868 haible 1.82 echo "LDADD = ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext}"
1869 haible 1.57 echo
1870 haible 1.139 cat allsnippets.tmp
1871 haible 1.57 echo "# Clean up after Solaris cc."
1872     echo "clean-local:"
1873     echo " rm -rf SunWS_cache"
1874     echo
1875 haible 1.132 echo "mostlyclean-local: mostlyclean-generic"
1876 haible 1.184 echo " @for dir in '' \$(MOSTLYCLEANDIRS); do \\"
1877     echo " if test -n \"\$\$dir\" && test -d \$\$dir; then \\"
1878     echo " echo \"rmdir \$\$dir\"; rmdir \$\$dir; \\"
1879     echo " fi; \\"
1880 haible 1.241 echo " done; \\"
1881     echo " :"
1882 haible 1.139 rm -f allsnippets.tmp
1883 haible 1.57 }
1884    
1885 haible 1.179 # func_emit_initmacro_start
1886     # emits the first few statements of the gl_INIT macro to standard output.
1887     # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use
1888     func_emit_initmacro_start ()
1889     {
1890 haible 1.195 # Overriding AC_LIBOBJ and AC_REPLACE_FUNCS has the effect of storing
1891     # platform-dependent object files in ${macro_prefix}_LIBOBJS instead of
1892     # LIBOBJS. The purpose is to allow several gnulib instantiations under
1893     # a single configure.ac file. (AC_CONFIG_LIBOBJ_DIR does not allow this
1894     # flexibility.)
1895     # Furthermore it avoids an automake error like this when a Makefile.am
1896     # that uses pieces of gnulib also uses $(LIBOBJ):
1897     # automatically discovered file `error.c' should not be explicitly mentioned
1898 haible 1.179 echo " m4_pushdef([AC_LIBOBJ], m4_defn([${macro_prefix}_LIBOBJ]))"
1899     echo " m4_pushdef([AC_REPLACE_FUNCS], m4_defn([${macro_prefix}_REPLACE_FUNCS]))"
1900 haible 1.195 # Overriding AC_LIBSOURCES has the same purpose of avoiding the automake
1901     # error when a Makefile.am that uses pieces of gnulib also uses $(LIBOBJ):
1902     # automatically discovered file `error.c' should not be explicitly mentioned
1903     # We let automake know about the files to be distributed through the
1904     # EXTRA_lib_SOURCES variable.
1905     echo " m4_pushdef([AC_LIBSOURCES], m4_defn([${macro_prefix}_LIBSOURCES]))"
1906 haible 1.179 }
1907    
1908     # func_emit_initmacro_end
1909     # emits the last few statements of the gl_INIT macro to standard output.
1910     # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use
1911     func_emit_initmacro_end ()
1912     {
1913 haible 1.195 echo " m4_popdef([AC_LIBSOURCES])"
1914 haible 1.179 echo " m4_popdef([AC_REPLACE_FUNCS])"
1915     echo " m4_popdef([AC_LIBOBJ])"
1916     echo " AC_CONFIG_COMMANDS_PRE(["
1917     echo " ${macro_prefix}_libobjs="
1918     echo " ${macro_prefix}_ltlibobjs="
1919     echo " if test -n \"\$${macro_prefix}_LIBOBJS\"; then"
1920 haible 1.181 echo " # Remove the extension."
1921     echo " sed_drop_objext='s/\\.o\$//;s/\\.obj\$//'"
1922 eggert 1.203 echo " for i in \`for i in \$${macro_prefix}_LIBOBJS; do echo \"\$i\"; done | sed \"\$sed_drop_objext\" | sort | uniq\`; do"
1923 haible 1.179 echo " ${macro_prefix}_libobjs=\"\$${macro_prefix}_libobjs \$i.\$ac_objext\""
1924     echo " ${macro_prefix}_ltlibobjs=\"\$${macro_prefix}_ltlibobjs \$i.lo\""
1925     echo " done"
1926     echo " fi"
1927     echo " AC_SUBST([${macro_prefix}_LIBOBJS], [\$${macro_prefix}_libobjs])"
1928     echo " AC_SUBST([${macro_prefix}_LTLIBOBJS], [\$${macro_prefix}_ltlibobjs])"
1929     echo " ])"
1930     }
1931    
1932     # func_emit_initmacro_done
1933     # emits a few statements after the gl_INIT macro to standard output.
1934     # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use
1935     func_emit_initmacro_done ()
1936     {
1937     echo
1938     echo "# Like AC_LIBOBJ, except that the module name goes"
1939     echo "# into ${macro_prefix}_LIBOBJS instead of into LIBOBJS."
1940     echo "AC_DEFUN([${macro_prefix}_LIBOBJ],"
1941     echo " [${macro_prefix}_LIBOBJS=\"\$${macro_prefix}_LIBOBJS \$1.\$ac_objext\"])"
1942     echo
1943     echo "# Like AC_REPLACE_FUNCS, except that the module name goes"
1944     echo "# into ${macro_prefix}_LIBOBJS instead of into LIBOBJS."
1945     echo "AC_DEFUN([${macro_prefix}_REPLACE_FUNCS],"
1946     echo " [AC_CHECK_FUNCS([\$1], , [${macro_prefix}_LIBOBJ(\$ac_func)])])"
1947 haible 1.195 echo
1948     echo "# Like AC_LIBSOURCES, except that it does nothing."
1949     echo "# We rely on EXTRA_lib..._SOURCES instead."
1950     echo "AC_DEFUN([${macro_prefix}_LIBSOURCES],"
1951     echo " [])"
1952 haible 1.179 }
1953    
1954 haible 1.27 # func_import modules
1955     # Uses also the variables
1956     # - destdir target directory
1957 haible 1.147 # - local_gnulib_dir from --local-dir
1958 haible 1.256 # - verbose integer, default 0, inc/decremented by --verbose/--quiet
1959 haible 1.27 # - libname library name
1960     # - sourcebase directory relative to destdir where to place source code
1961     # - m4base directory relative to destdir where to place *.m4 macros
1962 haible 1.250 # - pobase directory relative to destdir where to place *.po files
1963 ericb 1.116 # - docbase directory relative to destdir where to place doc files
1964 haible 1.82 # - testsbase directory relative to destdir where to place unit test code
1965 haible 1.54 # - auxdir directory relative to destdir where to place build aux files
1966 haible 1.82 # - inctests true if --with-tests was given, blank otherwise
1967 haible 1.48 # - avoidlist list of modules to avoid, from --avoid
1968     # - lgpl true if library's license shall be LGPL, blank otherwise
1969 haible 1.149 # - makefile_name from --makefile-name
1970 haible 1.129 # - libtool true if --libtool was given, false if --no-libtool was
1971     # given, blank otherwise
1972     # - guessed_libtool true if the configure.ac file uses libtool, false otherwise
1973 haible 1.62 # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use
1974 haible 1.250 # - po_domain prefix of i18n domain to use (without -gnulib suffix)
1975 haible 1.119 # - autoconf_minversion minimum supported autoconf version
1976 haible 1.78 # - doit : if actions shall be executed, false if only to be printed
1977 jas 1.42 # - symbolic true if files should be symlinked, copied otherwise
1978 haible 1.193 # - lsymbolic true if files from local_gnulib_dir should be symlinked,
1979     # copied otherwise
1980 haible 1.248 # - do_copyrights true if copyright notices in files should be replaced,
1981     # blank otherwise
1982 haible 1.27 func_import ()
1983     {
1984 haible 1.67 # Get the cached settings.
1985 haible 1.146 cached_local_gnulib_dir=
1986 haible 1.67 cached_specified_modules=
1987     cached_avoidlist=
1988     cached_sourcebase=
1989     cached_m4base=
1990 haible 1.250 cached_pobase=
1991 ericb 1.116 cached_docbase=
1992 haible 1.82 cached_testsbase=
1993 haible 1.233 cached_inctests=
1994 haible 1.67 cached_libname=
1995     cached_lgpl=
1996 haible 1.149 cached_makefile_name=
1997 haible 1.67 cached_libtool=
1998     cached_macro_prefix=
1999 haible 1.250 cached_po_domain=
2000 haible 1.67 cached_files=
2001     if test -f "$destdir"/$m4base/gnulib-cache.m4; then
2002 haible 1.129 cached_libtool=false
2003 haible 1.67 my_sed_traces='
2004     s,#.*$,,
2005     s,^dnl .*$,,
2006     s, dnl .*$,,
2007 haible 1.146 /gl_LOCAL_DIR(/ {
2008     s,^.*gl_LOCAL_DIR([[ ]*\([^])]*\).*$,cached_local_gnulib_dir="\1",p
2009     }
2010 haible 1.67 /gl_MODULES(/ {
2011     s,^.*gl_MODULES([[ ]*\([^])]*\).*$,cached_specified_modules="\1",p
2012     }
2013     /gl_AVOID(/ {
2014     s,^.*gl_AVOID([[ ]*\([^])]*\).*$,cached_avoidlist="\1",p
2015     }
2016     /gl_SOURCE_BASE(/ {
2017     s,^.*gl_SOURCE_BASE([[ ]*\([^])]*\).*$,cached_sourcebase="\1",p
2018     }
2019     /gl_M4_BASE(/ {
2020     s,^.*gl_M4_BASE([[ ]*\([^])]*\).*$,cached_m4base="\1",p
2021     }
2022 haible 1.250 /gl_PO_BASE(/ {
2023     s,^.*gl_PO_BASE([[ ]*\([^])]*\).*$,cached_pobase="\1",p
2024     }
2025 ericb 1.116 /gl_DOC_BASE(/ {
2026     s,^.*gl_DOC_BASE([[ ]*\([^])]*\).*$,cached_docbase="\1",p
2027     }
2028 haible 1.82 /gl_TESTS_BASE(/ {
2029     s,^.*gl_TESTS_BASE([[ ]*\([^])]*\).*$,cached_testsbase="\1",p
2030     }
2031 haible 1.233 /gl_WITH_TESTS/ {
2032     s,^.*$,cached_inctests=true,p
2033     }
2034 haible 1.67 /gl_LIB(/ {
2035     s,^.*gl_LIB([[ ]*\([^])]*\).*$,cached_libname="\1",p
2036     }
2037     /gl_LGPL/ {
2038     s,^.*$,cached_lgpl=true,p
2039     }
2040 haible 1.149 /gl_MAKEFILE_NAME(/ {
2041     s,^.*gl_MAKEFILE_NAME([[ ]*\([^])]*\).*$,cached_makefile_name="\1",p
2042     }
2043 haible 1.67 /gl_LIBTOOL/ {
2044     s,^.*$,cached_libtool=true,p
2045     }
2046     /gl_MACRO_PREFIX(/ {
2047     s,^.*gl_MACRO_PREFIX([[ ]*\([^])]*\).*$,cached_macro_prefix="\1",p
2048 haible 1.250 }
2049     /gl_PO_DOMAIN(/ {
2050     s,^.*gl_PO_DOMAIN([[ ]*\([^])]*\).*$,cached_po_domain="\1",p
2051 haible 1.67 }'
2052 eggert 1.203 eval `sed -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-cache.m4`
2053 haible 1.67 if test -f "$destdir"/$m4base/gnulib-comp.m4; then
2054     my_sed_traces='
2055     s,#.*$,,
2056     s,^dnl .*$,,
2057     s, dnl .*$,,
2058     /AC_DEFUN(\['"${cached_macro_prefix}"'_FILE_LIST\], \[/ {
2059     s,^.*$,cached_files=",p
2060     n
2061     ta
2062     :a
2063     s,^\]).*$,",
2064     tb
2065     p
2066     n
2067     ba
2068     :b
2069     p
2070     }'
2071 eggert 1.203 eval `sed -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-comp.m4`
2072 haible 1.67 fi
2073     fi
2074    
2075     # Merge the cached settings with the specified ones.
2076     # The m4base must be the same as expected from the pathname.
2077     if test -n "$cached_m4base" && test "$cached_m4base" != "$m4base"; then
2078     func_fatal_error "$m4base/gnulib-cache.m4 is expected to contain gl_M4_BASE([$m4base])"
2079     fi
2080 haible 1.146 # The local_gnulib_dir defaults to the cached one. Recall that the cached one
2081     # is relative to $destdir, whereas the one we use is relative to . or absolute.
2082     if test -z "$local_gnulib_dir"; then
2083     if test -n "$cached_local_gnulib_dir"; then
2084     case "$destdir" in
2085     /*)
2086     local_gnulib_dir="$destdir/$cached_local_gnulib_dir" ;;
2087     *)
2088     case "$cached_local_gnulib_dir" in
2089     /*)
2090     local_gnulib_dir="$destdir/$cached_local_gnulib_dir" ;;
2091     *)
2092     func_relconcat "$destdir" "$cached_local_gnulib_dir"
2093     local_gnulib_dir="$relconcat" ;;
2094     esac ;;
2095     esac
2096     fi
2097     fi
2098 haible 1.67 # Append the cached and the specified module names. So that
2099     # "gnulib-tool --import foo" means to add the module foo.
2100     specified_modules="$cached_specified_modules $1"
2101     # Append the cached and the specified avoidlist. This is probably better
2102     # than dropping the cached one when --avoid is specified at least once.
2103 gray 1.246 avoidlist=`for m in $cached_avoidlist $avoidlist; do echo $m; done | LC_ALL=C sort -u`
2104     avoidlist=`echo $avoidlist`
2105    
2106 haible 1.250 # The sourcebase defaults to the cached one.
2107 haible 1.67 if test -z "$sourcebase"; then
2108     sourcebase="$cached_sourcebase"
2109     if test -z "$sourcebase"; then
2110     func_fatal_error "missing --source-base option"
2111     fi
2112     fi
2113 haible 1.250 # The pobase defaults to the cached one.
2114     if test -z "$pobase"; then
2115     pobase="$cached_pobase"
2116     fi
2117 ericb 1.116 # The docbase defaults to the cached one.
2118     if test -z "$docbase"; then
2119     docbase="$cached_docbase"
2120     if test -z "$docbase"; then
2121 haible 1.128 func_fatal_error "missing --doc-base option. --doc-base has been introduced on 2006-07-11; if your last invocation of 'gnulib-tool --import' is before that date, you need to run 'gnulib-tool --import' once, with a --doc-base option."
2122 ericb 1.116 fi
2123     fi
2124 haible 1.82 # The testsbase defaults to the cached one.
2125     if test -z "$testsbase"; then
2126     testsbase="$cached_testsbase"
2127     if test -z "$testsbase"; then
2128     func_fatal_error "missing --tests-base option"
2129     fi
2130     fi
2131 haible 1.233 # Require the tests if specified either way.
2132     if test -z "$inctests"; then
2133     inctests="$cached_inctests"
2134     fi
2135 haible 1.67 # The libname defaults to the cached one.
2136 haible 1.69 if test -z "$supplied_libname"; then
2137 haible 1.67 libname="$cached_libname"
2138     if test -z "$libname"; then
2139     func_fatal_error "missing --lib option"
2140     fi
2141     fi
2142     # Require LGPL if specified either way.
2143     if test -z "$lgpl"; then
2144     lgpl="$cached_lgpl"
2145     fi
2146 haible 1.149 # The makefile_name defaults to the cached one.
2147     if test -z "$makefile_name"; then
2148     makefile_name="$cached_makefile_name"
2149     fi
2150 haible 1.69 # Use libtool if specified either way, or if guessed.
2151 haible 1.67 if test -z "$libtool"; then
2152 haible 1.69 if test -n "$cached_m4base"; then
2153     libtool="$cached_libtool"
2154     else
2155     libtool="$guessed_libtool"
2156     fi
2157 haible 1.67 fi
2158     # The macro_prefix defaults to the cached one.
2159     if test -z "$macro_prefix"; then
2160     macro_prefix="$cached_macro_prefix"
2161     if test -z "$macro_prefix"; then
2162     func_fatal_error "missing --macro-prefix option"
2163     fi
2164     fi
2165 haible 1.250 # The po_domain defaults to the cached one.
2166     if test -z "$po_domain"; then
2167     po_domain="$cached_po_domain"
2168     fi
2169 haible 1.67
2170     # Canonicalize the list of specified modules.
2171 haible 1.161 specified_modules=`for m in $specified_modules; do echo $m; done | LC_ALL=C sort -u`
2172 haible 1.27
2173     # Determine final module list.
2174 haible 1.67 modules="$specified_modules"
2175 haible 1.27 func_modules_transitive_closure
2176 haible 1.256 if test $verbose -ge 0; then
2177     echo "Module list with included dependencies:"
2178     echo "$modules" | sed -e 's/^/ /'
2179     fi
2180 haible 1.25
2181 haible 1.99 # Add the dummy module if needed.
2182     func_modules_add_dummy
2183    
2184 eggert 1.151 # If --lgpl, verify that the licenses of modules are compatible.
2185 haible 1.25 if test -n "$lgpl"; then
2186     for module in $modules; do
2187 haible 1.26 license=`func_get_license $module`
2188 eggert 1.47 case $license in
2189 haible 1.247 LGPL | LGPLv2+ | 'GPLed build tool') ;;
2190 haible 1.155 'public domain' | 'unlimited' | 'unmodifiable license text') ;;
2191 haible 1.67 *) func_fatal_error "incompatible license on module $module: $license" ;;
2192 eggert 1.47 esac
2193 haible 1.25 done
2194     fi
2195    
2196 haible 1.257 # Show banner notice of every module.
2197     func_modules_notice
2198    
2199 eggert 1.144 # Determine script to apply to imported library files.
2200     sed_transform_lib_file=
2201 haible 1.155 for module in $modules; do
2202     if test $module = config-h; then
2203 eggert 1.144 # Assume config.h exists, and that -DHAVE_CONFIG_H is omitted.
2204     sed_transform_lib_file=$sed_transform_lib_file'
2205 haible 1.155 s/^#ifdef[ ]*HAVE_CONFIG_H[ ]*$/#if 1/
2206     '
2207     break
2208     fi
2209     done
2210 haible 1.248 if test -n "$do_copyrights"; then
2211     if test -n "$lgpl"; then
2212     # Update license.
2213     sed_transform_lib_file=$sed_transform_lib_file'
2214     s/GNU General/GNU Lesser General/g
2215     s/version 2\([ ,]\)/version 2.1\1/g
2216     '
2217     fi
2218 eggert 1.144 fi
2219    
2220 haible 1.25 # Determine final file list.
2221 haible 1.28 func_modules_to_filelist
2222 haible 1.256 if test $verbose -ge 0; then
2223     echo "File list:"
2224     echo "$files" | sed -e 's/^/ /'
2225     fi
2226 haible 1.25
2227     test -n "$files" \
2228     || func_fatal_error "refusing to do nothing"
2229    
2230 haible 1.67 # Add m4/gnulib-tool.m4 to the file list. It is not part of any module.
2231     new_files="$files m4/gnulib-tool.m4"
2232     old_files="$cached_files"
2233     if test -f "$destdir"/$m4base/gnulib-tool.m4; then
2234 haible 1.165 func_append old_files " m4/gnulib-tool.m4"
2235 haible 1.67 fi
2236    
2237 haible 1.188 sed_rewrite_old_files="\
2238     s,^build-aux/,$auxdir/,
2239     s,^doc/,$cached_docbase/,
2240     s,^lib/,$cached_sourcebase/,
2241     s,^m4/,$cached_m4base/,
2242     s,^tests/,$cached_testsbase/,"
2243     sed_rewrite_new_files="\
2244     s,^build-aux/,$auxdir/,
2245     s,^doc/,$docbase/,
2246     s,^lib/,$sourcebase/,
2247     s,^m4/,$m4base/,
2248     s,^tests/,$testsbase/,"
2249    
2250 haible 1.69 # Create directories.
2251 haible 1.188 { echo "$sourcebase"
2252     echo "$m4base"
2253 haible 1.250 if test -n "$pobase"; then
2254     echo "$pobase"
2255     fi
2256 eggert 1.203 docfiles=`echo "$files" | sed -n -e 's,^doc/,,p'`
2257 haible 1.188 if test -n "$docfiles"; then
2258     echo "$docbase"
2259     fi
2260     if test -n "$inctests"; then
2261     echo "$testsbase"
2262     fi
2263     echo "$auxdir"
2264     for f in $files; do echo $f; done \
2265 eggert 1.203 | sed -e "$sed_rewrite_new_files" \
2266     | sed -n -e 's,^\(.*\)/[^/]*,\1,p' \
2267 haible 1.188 | LC_ALL=C sort -u
2268     } > "$tmp"/dirs
2269     { # Rearrange file descriptors. Needed because "while ... done < ..."
2270     # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
2271     exec 5<&0 < "$tmp"/dirs
2272     while read d; do
2273     if test ! -d "$destdir/$d"; then
2274     if $doit; then
2275     echo "Creating directory $destdir/$d"
2276     mkdir -p "$destdir/$d" || func_fatal_error "failed"
2277     else
2278     echo "Create directory $destdir/$d"
2279     fi
2280 haible 1.124 fi
2281 haible 1.188 done
2282     exec 0<&5 5<&-
2283     }
2284 haible 1.69
2285 haible 1.108 # func_dest_tmpfilename file
2286     # determines the name of a temporary file (file is relative to destdir).
2287     # Sets variable:
2288     # - tmpfile absolute filename of the temporary file
2289     func_dest_tmpfilename ()
2290     {
2291     if $doit; then
2292     # Put the new contents of $file in a file in the same directory (needed
2293     # to guarantee that an 'mv' to "$destdir/$file" works).
2294     tmpfile="$destdir/$1.tmp"
2295     else
2296     # Put the new contents of $file in a file in a temporary directory
2297     # (because the directory of "$file" might not exist).
2298     tmpfile="$tmp"/`basename "$1"`.tmp
2299     fi
2300     }
2301    
2302     # Copy files or make symbolic links. Remove obsolete files.
2303 haible 1.228 added_files=''
2304     removed_files=''
2305 haible 1.77 delimiter=' '
2306 haible 1.163 # Construct a table with 2 columns: rewritten-file-name original-file-name,
2307     # representing the files according to the last gnulib-tool invocation.
2308     for f in $old_files; do echo $f; done \
2309 eggert 1.203 | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_old_files" \
2310 haible 1.163 | LC_ALL=C sort \
2311     > "$tmp"/old-files
2312     # Construct a table with 2 columns: rewritten-file-name original-file-name,
2313     # representing the files after this gnulib-tool invocation.
2314     for f in $new_files; do echo $f; done \
2315 eggert 1.203 | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" \
2316 haible 1.163 | LC_ALL=C sort \
2317     > "$tmp"/new-files
2318 haible 1.77 # First the files that are in old-files, but not in new-files:
2319 haible 1.104 sed_take_first_column='s,'"$delimiter"'.*,,'
2320 eggert 1.203 for g in `LC_ALL=C join -t"$delimiter" -v1 "$tmp"/old-files "$tmp"/new-files | sed -e "$sed_take_first_column"`; do
2321 haible 1.77 # Remove the file. Do nothing if the user already removed it.
2322 haible 1.254 if test -f "$destdir/$g" || test -h "$destdir/$g"; then
2323 haible 1.78 if $doit; then
2324     echo "Removing file $g (backup in ${g}~)"
2325     mv -f "$destdir/$g" "$destdir/${g}~" || func_fatal_error "failed"
2326     else
2327     echo "Remove file $g (backup in ${g}~)"
2328     fi
2329 haible 1.228 func_append removed_files "$g$nl"
2330 haible 1.67 fi
2331     done
2332 haible 1.77 # func_add_or_update handles a file that ought to be present afterwards.
2333 haible 1.163 # Uses parameters
2334     # - f the original file name
2335     # - g the rewritten file name
2336     # - already_present nonempty if the file already exists, empty otherwise
2337 haible 1.77 func_add_or_update ()
2338     {
2339 haible 1.108 func_dest_tmpfilename "$g"
2340 haible 1.127 func_lookup_file "$f"
2341     cp "$lookedup_file" "$tmpfile" || func_fatal_error "failed"
2342 haible 1.155 if test -n "$sed_transform_lib_file"; then
2343 haible 1.77 case "$f" in
2344 haible 1.67 lib/*)
2345 eggert 1.203 sed -e "$sed_transform_lib_file" \
2346 haible 1.127 < "$lookedup_file" > "$tmpfile" || func_fatal_error "failed"
2347 haible 1.67 ;;
2348     esac
2349     fi
2350 haible 1.77 if test -f "$destdir/$g"; then
2351 haible 1.67 # The file already exists.
2352 haible 1.108 if cmp "$destdir/$g" "$tmpfile" > /dev/null; then
2353 haible 1.67 : # The file has not changed.
2354     else
2355     # Replace the file.
2356 haible 1.78 if $doit; then
2357     if test -n "$already_present"; then
2358     echo "Updating file $g (backup in ${g}~)"
2359     else
2360     echo "Replacing file $g (non-gnulib code backuped in ${g}~) !!"
2361     fi
2362     mv -f "$destdir/$g" "$destdir/${g}~" || func_fatal_error "failed"
2363 haible 1.193 if { test -n "$symbolic" \
2364     || { test -n "$lsymbolic" \
2365     && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \
2366     && test -z "$lookedup_tmp" \
2367 haible 1.127 && cmp "$lookedup_file" "$tmpfile" > /dev/null; then
2368     func_ln_if_changed "$lookedup_file" "$destdir/$g"
2369 haible 1.78 else
2370 haible 1.108 mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed"
2371 haible 1.78 fi
2372 haible 1.67 else
2373 haible 1.78 if test -n "$already_present"; then
2374     echo "Update file $g (backup in ${g}~)"
2375     else
2376     echo "Replace file $g (non-gnulib code backuped in ${g}~) !!"
2377     fi
2378 haible 1.67 fi
2379     fi
2380 jas 1.41 else
2381 haible 1.67 # Install the file.
2382     # Don't protest if the file should be there but isn't: it happens
2383     # frequently that developers don't put autogenerated files into CVS.
2384 haible 1.78 if $doit; then
2385     echo "Copying file $g"
2386 haible 1.193 if { test -n "$symbolic" \
2387     || { test -n "$lsymbolic" \
2388     && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \
2389     && test -z "$lookedup_tmp" \
2390 haible 1.127 && cmp "$lookedup_file" "$tmpfile" > /dev/null; then
2391     func_ln_if_changed "$lookedup_file" "$destdir/$g"
2392 haible 1.78 else
2393 haible 1.108 mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed"
2394 haible 1.78 fi
2395 haible 1.67 else
2396 haible 1.78 echo "Copy file $g"
2397 haible 1.67 fi
2398 haible 1.228 func_append added_files "$g$nl"
2399 haible 1.25 fi
2400 haible 1.108 rm -f "$tmpfile"
2401 haible 1.77 }
2402     # Then the files that are in new-files, but not in old-files:
2403 haible 1.104 sed_take_last_column='s,^.*'"$delimiter"',,'
2404 haible 1.77 already_present=
2405 haible 1.163 LC_ALL=C join -t"$delimiter" -v2 "$tmp"/old-files "$tmp"/new-files \
2406 eggert 1.203 | sed -e "$sed_take_last_column" \
2407     | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" > "$tmp"/added-files
2408 haible 1.166 { # Rearrange file descriptors. Needed because "while ... done < ..."
2409     # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
2410 ericb 1.173 exec 5<&0 < "$tmp"/added-files
2411 haible 1.166 while read g f; do
2412     func_add_or_update
2413     done
2414 haible 1.174 exec 0<&5 5<&-
2415 haible 1.166 }
2416 haible 1.77 # Then the files that are in new-files and in old-files:
2417     already_present=true
2418 haible 1.163 LC_ALL=C join -t"$delimiter" "$tmp"/old-files "$tmp"/new-files \
2419 eggert 1.203 | sed -e "$sed_take_last_column" \
2420     | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" > "$tmp"/kept-files
2421 haible 1.166 { # Rearrange file descriptors. Needed because "while ... done < ..."
2422     # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
2423 ericb 1.173 exec 5<&0 < "$tmp"/kept-files
2424 haible 1.166 while read g f; do
2425     func_add_or_update
2426     done
2427 haible 1.174 exec 0<&5 5<&-
2428 haible 1.166 }
2429 haible 1.67
2430     # Command-line invocation printed in a comment in generated gnulib-cache.m4.
2431     actioncmd="gnulib-tool --import"
2432 haible 1.165 func_append actioncmd " --dir=$destdir"
2433 haible 1.146 if test -n "$local_gnulib_dir"; then
2434 haible 1.165 func_append actioncmd " --local-dir=$local_gnulib_dir"
2435 haible 1.146 fi
2436 haible 1.165 func_append actioncmd " --lib=$libname"
2437     func_append actioncmd " --source-base=$sourcebase"
2438     func_append actioncmd " --m4-base=$m4base"
2439 haible 1.250 if test -n "$pobase"; then
2440     func_append actioncmd " --po-base=$pobase"
2441     fi
2442 haible 1.165 func_append actioncmd " --doc-base=$docbase"
2443     func_append actioncmd " --aux-dir=$auxdir"
2444 haible 1.233 if test -n "$inctests"; then
2445     func_append actioncmd " --with-tests"
2446     fi
2447 haible 1.67 for module in $avoidlist; do
2448 haible 1.165 func_append actioncmd " --avoid=$module"
2449 haible 1.67 done
2450     if test -n "$lgpl"; then
2451 haible 1.165 func_append actioncmd " --lgpl"
2452 haible 1.67 fi
2453 haible 1.149 if test -n "$makefile_name"; then
2454 haible 1.187 func_append actioncmd " --makefile-name=$makefile_name"
2455 haible 1.149 fi
2456 haible 1.129 if test "$libtool" = true; then
2457 haible 1.165 func_append actioncmd " --libtool"
2458 haible 1.129 else
2459 haible 1.165 func_append actioncmd " --no-libtool"
2460 haible 1.25 fi
2461 haible 1.165 func_append actioncmd " --macro-prefix=$macro_prefix"
2462 haible 1.250 if test -n "$po_domain"; then
2463     func_append actioncmd " --po-domain=$po_domain"
2464     fi
2465 haible 1.165 func_append actioncmd " `echo $specified_modules`"
2466 haible 1.25
2467 eggert 1.150 # Default the makefile name to Makefile.am.
2468     if test -n "$makefile_name"; then
2469     makefile_am=$makefile_name
2470     else
2471     makefile_am=Makefile.am
2472     fi
2473    
2474 haible 1.218 # Create normal Makefile.ams.
2475     for_test=false
2476    
2477 eggert 1.150 # Create library makefile.
2478 haible 1.149 func_dest_tmpfilename $sourcebase/$makefile_am
2479 haible 1.108 func_emit_lib_Makefile_am > "$tmpfile"
2480 haible 1.149 if test -f "$destdir"/$sourcebase/$makefile_am; then
2481     if cmp "$destdir"/$sourcebase/$makefile_am "$tmpfile" > /dev/null; then
2482 haible 1.108 rm -f "$tmpfile"
2483 haible 1.78 else
2484     if $doit; then
2485 haible 1.149 echo "Updating $sourcebase/$makefile_am (backup in $sourcebase/$makefile_am~)"
2486     mv -f "$destdir"/$sourcebase/$makefile_am "$destdir"/$sourcebase/$makefile_am~
2487     mv -f "$tmpfile" "$destdir"/$sourcebase/$makefile_am
2488 haible 1.78 else
2489 haible 1.149 echo "Update $sourcebase/$makefile_am (backup in $sourcebase/$makefile_am~)"
2490 haible 1.108 rm -f "$tmpfile"
2491 haible 1.67 fi
2492 haible 1.78 fi
2493     else
2494     if $doit; then
2495 haible 1.149 echo "Creating $sourcebase/$makefile_am"
2496     mv -f "$tmpfile" "$destdir"/$sourcebase/$makefile_am
2497 haible 1.78 else
2498 haible 1.149 echo "Create $sourcebase/$makefile_am"
2499 haible 1.108 rm -f "$tmpfile"
2500 haible 1.67 fi
2501 haible 1.228 func_append added_files "$sourcebase/$makefile_am$nl"
2502 haible 1.31 fi
2503 haible 1.25
2504 haible 1.250 # Create po/ directory.
2505     if test -n "$pobase"; then
2506     # Create po makefile and auxiliary files.
2507     for file in Makefile.in.in remove-potcdate.sin; do
2508     func_dest_tmpfilename $pobase/$file
2509     func_lookup_file build-aux/po/$file
2510     cat "$lookedup_file" > "$tmpfile"
2511     if test -f "$destdir"/$pobase/$file; then
2512     if cmp "$destdir"/$pobase/$file "$tmpfile" > /dev/null; then
2513     rm -f "$tmpfile"
2514     else
2515     if $doit; then
2516     echo "Updating $pobase/$file (backup in $pobase/$file~)"
2517     mv -f "$destdir"/$pobase/$file "$destdir"/$pobase/$file~
2518     mv -f "$tmpfile" "$destdir"/$pobase/$file
2519     else
2520     echo "Update $pobase/$file (backup in $pobase/$file~)"
2521     rm -f "$tmpfile"
2522     fi
2523     fi
2524     else
2525     if $doit; then
2526     echo "Creating $pobase/$file"
2527     mv -f "$tmpfile" "$destdir"/$pobase/$file
2528     else
2529     echo "Create $pobase/$file"
2530     rm -f "$tmpfile"
2531     fi
2532     func_append added_files "$pobase/$file$nl"
2533     fi
2534     done
2535     # Create po makefile parametrization, part 1.
2536     func_dest_tmpfilename $pobase/Makevars
2537     func_emit_po_Makevars > "$tmpfile"
2538     if test -f "$destdir"/$pobase/Makevars; then
2539     if cmp "$destdir"/$pobase/Makevars "$tmpfile" > /dev/null; then
2540     rm -f "$tmpfile"
2541     else
2542     if $doit; then
2543     echo "Updating $pobase/Makevars (backup in $pobase/Makevars~)"
2544     mv -f "$destdir"/$pobase/Makevars "$destdir"/$pobase/Makevars~
2545     mv -f "$tmpfile" "$destdir"/$pobase/Makevars
2546     else
2547     echo "Update $pobase/Makevars (backup in $pobase/Makevars~)"
2548     rm -f "$tmpfile"
2549     fi
2550     fi
2551     else
2552     if $doit; then
2553     echo "Creating $pobase/Makevars"
2554     mv -f "$tmpfile" "$destdir"/$pobase/Makevars
2555     else
2556     echo "Create $pobase/Makevars"
2557     rm -f "$tmpfile"
2558     fi
2559     func_append added_files "$pobase/Makevars$nl"
2560     fi
2561     # Create po makefile parametrization, part 2.
2562     func_dest_tmpfilename $pobase/POTFILES.in
2563     func_emit_po_POTFILES_in > "$tmpfile"
2564     if test -f "$destdir"/$pobase/POTFILES.in; then
2565     if cmp "$destdir"/$pobase/POTFILES.in "$tmpfile" > /dev/null; then
2566     rm -f "$tmpfile"
2567     else
2568     if $doit; then
2569     echo "Updating $pobase/POTFILES.in (backup in $pobase/POTFILES.in~)"
2570     mv -f "$destdir"/$pobase/POTFILES.in "$destdir"/$pobase/POTFILES.in~
2571     mv -f "$tmpfile" "$destdir"/$pobase/POTFILES.in
2572     else
2573     echo "Update $pobase/POTFILES.in (backup in $pobase/POTFILES.in~)"
2574     rm -f "$tmpfile"
2575     fi
2576     fi
2577     else
2578     if $doit; then
2579     echo "Creating $pobase/POTFILES.in"
2580     mv -f "$tmpfile" "$destdir"/$pobase/POTFILES.in
2581     else
2582     echo "Create $pobase/POTFILES.in"
2583     rm -f "$tmpfile"
2584     fi
2585     func_append added_files "$pobase/POTFILES.in$nl"
2586     fi
2587     # Fetch PO files.
2588     TP_URL="http://translationproject.org/latest/"
2589 haible 1.255 TP_RSYNC_URI="translationproject.org::tp/latest/"
2590 haible 1.250 if $doit; then
2591     echo "Fetching gnulib PO files from $TP_URL"
2592     (cd "$destdir"/$pobase \
2593 haible 1.255 && { # Prefer rsync over wget if it is available, since it consumes
2594     # less network bandwidth, due to compression.
2595     if type rsync 2>/dev/null | grep / > /dev/null; then
2596     rsync -Lrtz "${TP_RSYNC_URI}gnulib/" .
2597     else
2598     wget --quiet -r -l1 -nd -np -A.po "${TP_URL}gnulib"
2599     fi
2600     }
2601 haible 1.250 )
2602     else
2603     echo "Fetch gnulib PO files from $TP_URL"
2604     fi
2605     # Create po/LINGUAS.
2606     if $doit; then
2607     func_dest_tmpfilename $pobase/LINGUAS
2608     (cd "$destdir"/$pobase \
2609     && { echo '# Set of available languages.'
2610     LC_ALL=C ls -1 *.po | sed -e 's,\.po$,,'
2611     }
2612     ) > "$tmpfile"
2613     if test -f "$destdir"/$pobase/LINGUAS; then
2614     if cmp "$destdir"/$pobase/LINGUAS "$tmpfile" > /dev/null; then
2615     rm -f "$tmpfile"
2616     else
2617     echo "Updating $pobase/LINGUAS (backup in $pobase/LINGUAS~)"
2618     mv -f "$destdir"/$pobase/LINGUAS "$destdir"/$pobase/LINGUAS~
2619     mv -f "$tmpfile" "$destdir"/$pobase/LINGUAS
2620     fi
2621     else
2622     echo "Creating $pobase/LINGUAS"
2623     mv -f "$tmpfile" "$destdir"/$pobase/LINGUAS
2624     func_append added_files "$pobase/LINGUAS$nl"
2625     fi
2626     else
2627     if test -f "$destdir"/$pobase/LINGUAS; then
2628     echo "Update $pobase/LINGUAS (backup in $pobase/LINGUAS~)"
2629     else
2630     echo "Create $pobase/LINGUAS"
2631     fi
2632     fi
2633     fi
2634    
2635 haible 1.66 # Create m4/gnulib-cache.m4.
2636 haible 1.108 func_dest_tmpfilename $m4base/gnulib-cache.m4
2637 haible 1.25 (
2638 ericb 1.112 func_emit_copyright_notice
2639 haible 1.25 echo "#"
2640 haible 1.66 echo "# This file represents the specification of how gnulib-tool is used."
2641     echo "# It acts as a cache: It is written and read by gnulib-tool."
2642     echo "# In projects using CVS, this file is meant to be stored in CVS,"
2643     echo "# like the configure.ac and various Makefile.am files."
2644     echo
2645     echo
2646     echo "# Specification in the form of a command-line invocation:"
2647     echo "# $actioncmd"
2648     echo
2649     echo "# Specification in the form of a few gnulib-tool.m4 macro invocations:"
2650 haible 1.146 # Store the local_gnulib_dir relative to destdir.
2651     case "$local_gnulib_dir" in
2652     "" | /*)
2653     relative_local_gnulib_dir="$local_gnulib_dir" ;;
2654     * )
2655     case "$destdir" in
2656     /*) relative_local_gnulib_dir="$local_gnulib_dir" ;;
2657     *)
2658     # destdir, local_gnulib_dir are both relative.
2659     func_relativize "$destdir" "$local_gnulib_dir"
2660     relative_local_gnulib_dir="$reldir" ;;
2661     esac ;;
2662     esac
2663     echo "gl_LOCAL_DIR([$relative_local_gnulib_dir])"
2664 haible 1.67 echo "gl_MODULES(["`echo $specified_modules`"])"
2665 haible 1.66 echo "gl_AVOID([$avoidlist])"
2666     echo "gl_SOURCE_BASE([$sourcebase])"
2667     echo "gl_M4_BASE([$m4base])"
2668 haible 1.250 echo "gl_PO_BASE([$pobase])"
2669 ericb 1.116 echo "gl_DOC_BASE([$docbase])"
2670 haible 1.82 echo "gl_TESTS_BASE([$testsbase])"
2671 haible 1.233 test -z "$inctests" || echo "gl_WITH_TESTS"
2672 haible 1.66 echo "gl_LIB([$libname])"
2673     test -z "$lgpl" || echo "gl_LGPL"
2674 haible 1.149 echo "gl_MAKEFILE_NAME([$makefile_name])"
2675 haible 1.129 if test "$libtool" = true; then
2676     echo "gl_LIBTOOL"
2677     fi
2678 haible 1.66 echo "gl_MACRO_PREFIX([$macro_prefix])"
2679 haible 1.250 echo "gl_PO_DOMAIN([$po_domain])"
2680 haible 1.108 ) > "$tmpfile"
2681 haible 1.78 if test -f "$destdir"/$m4base/gnulib-cache.m4; then
2682 haible 1.108 if cmp "$destdir"/$m4base/gnulib-cache.m4 "$tmpfile" > /dev/null; then
2683     rm -f "$tmpfile"
2684 haible 1.78 else
2685     if $doit; then
2686 haible 1.67 echo "Updating $m4base/gnulib-cache.m4 (backup in $m4base/gnulib-cache.m4~)"
2687     mv -f "$destdir"/$m4base/gnulib-cache.m4 "$destdir"/$m4base/gnulib-cache.m4~
2688 haible 1.108 mv -f "$tmpfile" "$destdir"/$m4base/gnulib-cache.m4
2689 haible 1.78 else
2690     echo "Update $m4base/gnulib-cache.m4 (backup in $m4base/gnulib-cache.m4~)"
2691 haible 1.81 if false; then
2692 haible 1.108 cat "$tmpfile"
2693 haible 1.81 echo
2694     echo "# gnulib-cache.m4 ends here"
2695     fi
2696 haible 1.108 rm -f "$tmpfile"
2697 haible 1.67 fi
2698 haible 1.78 fi
2699     else
2700     if $doit; then
2701 haible 1.67 echo "Creating $m4base/gnulib-cache.m4"
2702 haible 1.108 mv -f "$tmpfile" "$destdir"/$m4base/gnulib-cache.m4
2703 haible 1.78 else
2704     echo "Create $m4base/gnulib-cache.m4"
2705 haible 1.108 cat "$tmpfile"
2706     rm -f "$tmpfile"
2707 haible 1.67 fi
2708     fi
2709 haible 1.66
2710     # Create m4/gnulib-comp.m4.
2711 haible 1.108 func_dest_tmpfilename $m4base/gnulib-comp.m4
2712 haible 1.66 (
2713 haible 1.176 echo "# DO NOT EDIT! GENERATED AUTOMATICALLY!"
2714 ericb 1.112 func_emit_copyright_notice
2715 haible 1.66 echo "#"
2716     echo "# This file represents the compiled summary of the specification in"
2717     echo "# gnulib-cache.m4. It lists the computed macro invocations that need"
2718     echo "# to be invoked from configure.ac."
2719     echo "# In projects using CVS, this file can be treated like other built files."
2720     echo
2721 haible 1.25 echo
2722 haible 1.59 echo "# This macro should be invoked from $configure_ac, in the section"
2723     echo "# \"Checks for programs\", right after AC_PROG_CC, and certainly before"
2724     echo "# any checks for libraries, header files, types and library functions."
2725 haible 1.62 echo "AC_DEFUN([${macro_prefix}_EARLY],"
2726 haible 1.25 echo "["
2727 ericb 1.135 echo " m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace"
2728 haible 1.179 echo " m4_pattern_allow([^gl_ES\$])dnl a valid locale name"
2729     echo " m4_pattern_allow([^gl_LIBOBJS\$])dnl a variable"
2730     echo " m4_pattern_allow([^gl_LTLIBOBJS\$])dnl a variable"
2731 haible 1.93 echo " AC_REQUIRE([AC_PROG_RANLIB])"
2732 haible 1.191 if test -n "$uses_subdirs"; then
2733     echo " AC_REQUIRE([AM_PROG_CC_C_O])"
2734     fi
2735 haible 1.108 if grep AC_GNU_SOURCE "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then
2736 haible 1.65 echo " AC_REQUIRE([AC_GNU_SOURCE])"
2737 haible 1.25 fi
2738 haible 1.221 for module in $modules; do
2739     func_verify_module
2740     if test -n "$module"; then
2741     func_get_autoconf_early_snippet "$module"
2742     fi
2743     done \
2744     | sed -e '/^$/d;' -e 's/^/ /'
2745 haible 1.25 echo "])"
2746     echo
2747 haible 1.59 echo "# This macro should be invoked from $configure_ac, in the section"
2748     echo "# \"Check for header files, types and library functions\"."
2749 haible 1.62 echo "AC_DEFUN([${macro_prefix}_INIT],"
2750 haible 1.25 echo "["
2751 haible 1.179 func_emit_initmacro_start
2752 haible 1.129 if test "$libtool" = true; then
2753     echo " AM_CONDITIONAL([GL_COND_LIBTOOL], [true])"
2754 haible 1.159 echo " gl_cond_libtool=true"
2755 haible 1.129 else
2756 haible 1.93 echo " AM_CONDITIONAL([GL_COND_LIBTOOL], [false])"
2757 haible 1.159 echo " gl_cond_libtool=false"
2758     echo " gl_libdeps="
2759     echo " gl_ltlibdeps="
2760 jas 1.88 fi
2761 haible 1.171 echo " gl_source_base='$sourcebase'"
2762 haible 1.101 if test "$auxdir" != "build-aux"; then
2763     sed_replace_build_aux='
2764     :a
2765     /AC_CONFIG_FILES(.*:build-aux\/.*)/{
2766     s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)|
2767     ba
2768     }'
2769     else
2770     sed_replace_build_aux=
2771     fi
2772 haible 1.25 for module in $modules; do
2773     func_verify_module
2774     if test -n "$module"; then
2775 haible 1.95 func_get_autoconf_snippet "$module" \
2776 eggert 1.203 | sed -e '/^$/d;' -e 's/^/ /' \
2777     -e 's/AM_GNU_GETTEXT(\[external\])/dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac./' \
2778     -e "$sed_replace_build_aux"
2779 haible 1.129 if test "$module" = 'alloca' && test "$libtool" = true; then
2780 haible 1.34 echo 'changequote(,)dnl'
2781 eggert 1.203 echo 'LTALLOCA=`echo "$ALLOCA" | sed '"'"'s/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'"'"'`'
2782 haible 1.34 echo 'changequote([, ])dnl'
2783 haible 1.51 echo 'AC_SUBST([LTALLOCA])'
2784 haible 1.34 fi
2785 haible 1.25 fi
2786     done
2787 haible 1.159 # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is
2788     # created using libtool, because libtool already handles the dependencies.
2789     if test "$libtool" != true; then
2790 gray 1.246 libname_upper=`echo "$libname" | LC_ALL=C tr 'a-z-' 'A-Z_'`
2791 haible 1.159 echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\""
2792     echo " AC_SUBST([${libname_upper}_LIBDEPS])"
2793     echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
2794     echo " AC_SUBST([${libname_upper}_LTLIBDEPS])"
2795     fi
2796 haible 1.179 func_emit_initmacro_end
2797 haible 1.25 echo "])"
2798 haible 1.179 func_emit_initmacro_done
2799 haible 1.62 echo
2800 haible 1.66 echo "# This macro records the list of files which have been installed by"
2801     echo "# gnulib-tool and may be removed by future gnulib-tool invocations."
2802     echo "AC_DEFUN([${macro_prefix}_FILE_LIST], ["
2803 eggert 1.203 echo "$files" | sed -e 's,^, ,'
2804 haible 1.66 echo "])"
2805 haible 1.108 ) > "$tmpfile"
2806 haible 1.78 if test -f "$destdir"/$m4base/gnulib-comp.m4; then
2807 haible 1.108 if cmp "$destdir"/$m4base/gnulib-comp.m4 "$tmpfile" > /dev/null; then
2808     rm -f "$tmpfile"
2809 haible 1.78 else
2810     if $doit; then
2811 haible 1.67 echo "Updating $m4base/gnulib-comp.m4 (backup in $m4base/gnulib-comp.m4~)"
2812     mv -f "$destdir"/$m4base/gnulib-comp.m4 "$destdir"/$m4base/gnulib-comp.m4~
2813 haible 1.108 mv -f "$tmpfile" "$destdir"/$m4base/gnulib-comp.m4
2814 haible 1.78 else
2815     echo "Update $m4base/gnulib-comp.m4 (backup in $m4base/gnulib-comp.m4~)"
2816 haible 1.81 if false; then
2817 haible 1.108 cat "$tmpfile"
2818 haible 1.81 echo
2819     echo "# gnulib-comp.m4 ends here"
2820     fi
2821 haible 1.108 rm -f "$tmpfile"
2822 haible 1.67 fi
2823 haible 1.78 fi
2824     else
2825     if $doit; then
2826 haible 1.67 echo "Creating $m4base/gnulib-comp.m4"
2827 haible 1.108 mv -f "$tmpfile" "$destdir"/$m4base/gnulib-comp.m4
2828 haible 1.78 else
2829     echo "Create $m4base/gnulib-comp.m4"
2830 haible 1.108 cat "$tmpfile"
2831     rm -f "$tmpfile"
2832 haible 1.67 fi
2833     fi
2834    
2835 haible 1.82 if test -n "$inctests"; then
2836 eggert 1.150 # Create tests makefile.
2837 haible 1.149 func_dest_tmpfilename $testsbase/$makefile_am
2838 haible 1.108 func_emit_tests_Makefile_am > "$tmpfile"
2839 haible 1.149 if test -f "$destdir"/$testsbase/$makefile_am; then
2840     if cmp "$destdir"/$testsbase/$makefile_am "$tmpfile" > /dev/null; then
2841 haible 1.108 rm -f "$tmpfile"
2842 haible 1.82 else
2843     if $doit; then
2844 haible 1.149 echo "Updating $testsbase/$makefile_am (backup in $testsbase/$makefile_am~)"
2845     mv -f "$destdir"/$testsbase/$makefile_am "$destdir"/$testsbase/$makefile_am~
2846     mv -f "$tmpfile" "$destdir"/$testsbase/$makefile_am
2847 haible 1.82 else
2848 haible 1.149 echo "Update $testsbase/$makefile_am (backup in $testsbase/$makefile_am~)"
2849 haible 1.108 rm -f "$tmpfile"
2850 haible 1.82 fi
2851     fi
2852     else
2853     if $doit; then
2854 haible 1.149 echo "Creating $testsbase/$makefile_am"
2855     mv -f "$tmpfile" "$destdir"/$testsbase/$makefile_am
2856 haible 1.82 else
2857 haible 1.149 echo "Create $testsbase/$makefile_am"
2858 haible 1.108 rm -f "$tmpfile"
2859 haible 1.82 fi
2860 haible 1.228 func_append added_files "$testsbase/$makefile_am$nl"
2861 haible 1.82 fi
2862     fi
2863    
2864 haible 1.228 # Update the .cvsignore and .gitignore files.
2865     { echo "$added_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|A|\1,'
2866     echo "$removed_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|R|\1,'
2867     } | LC_ALL=C sort -t'|' -k1,1 > "$tmp"/fileset-changes
2868     { # Rearrange file descriptors. Needed because "while ... done < ..."
2869     # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
2870     exec 5<&0 < "$tmp"/fileset-changes
2871     func_update_ignorelist ()
2872     {
2873     ignore="$1"
2874     if test -f "$destdir/$dir$ignore"; then
2875     if test -n "$dir_added" || test -n "$dir_removed"; then
2876     LC_ALL=C sort "$destdir/$dir$ignore" > "$tmp"/ignore
2877     echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \
2878     | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-added
2879     echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \
2880     | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-removed
2881     if test -s "$tmp"/ignore-added || test -s "$tmp"/ignore-removed; then
2882     if $doit; then
2883     echo "Updating $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)"
2884     mv -f "$destdir/$dir$ignore" "$destdir/$dir$ignore"~
2885     sed -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed > "$tmp"/sed-ignore-removed
2886     cat "$destdir/$dir$ignore"~ "$tmp"/ignore-added \
2887     | sed -f "$tmp"/sed-ignore-removed \
2888     > "$destdir/$dir$ignore"
2889     else
2890     echo "Update $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)"
2891     fi
2892     fi
2893     fi
2894     else
2895     if test -n "$dir_added"; then
2896     if $doit; then
2897     echo "Creating $destdir/$dir$ignore"
2898 haible 1.252 {
2899     if test "$ignore" = .cvsignore; then
2900     echo ".deps"
2901     # Automake generates Makefile rules that create .dirstamp files.
2902     echo ".dirstamp"
2903     fi
2904     echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u
2905     } > "$destdir/$dir$ignore"
2906 haible 1.228 else
2907     echo "Create $destdir/$dir$ignore"
2908     fi
2909     fi
2910     fi
2911     }
2912     func_done_dir ()
2913     {
2914     dir="$1"
2915     dir_added="$2"
2916     dir_removed="$3"
2917 haible 1.252 if test -d "$destdir/CVS" || test -d "$destdir/${dir}CVS" || test -f "$destdir/${dir}.cvsignore"; then
2918 haible 1.228 func_update_ignorelist .cvsignore
2919     fi
2920     if test -d "$destdir/.git" || test -f "$destdir/${dir}.gitignore"; then
2921     func_update_ignorelist .gitignore
2922     fi
2923     }
2924     last_dir=
2925     last_dir_added=
2926     last_dir_removed=
2927     while read line; do
2928     # Why not ''read next_dir op file'' ? Because the dir column can be empty.
2929     next_dir=`echo "$line" | sed -e 's,|.*,,'`
2930     op=`echo "$line" | sed -e 's,^[^|]*|\([^|]*\)|.*$,\1,'`
2931     file=`echo "$line" | sed -e 's,^[^|]*|[^|]*|,,'`
2932     if test "$next_dir" != "$last_dir"; then
2933     func_done_dir "$last_dir" "$last_dir_added" "$last_dir_removed"
2934     last_dir="$next_dir"
2935     last_dir_added=
2936     last_dir_removed=
2937     fi
2938     case $op in
2939     A) func_append last_dir_added "$file$nl";;
2940     R) func_append last_dir_removed "$file$nl";;
2941     esac
2942     done
2943     func_done_dir "$last_dir" "$last_dir_added" "$last_dir_removed"
2944     exec 0<&5 5<&-
2945     }
2946    
2947 haible 1.25 echo "Finished."
2948     echo
2949 jas 1.38 echo "You may need to add #include directives for the following .h files."
2950 haible 1.200 # Intersect $specified_modules and $modules
2951     # (since $specified_modules is not necessarily of subset of $modules - some
2952     # may have been skipped through --avoid, and since the elements of $modules
2953     # but not in $specified_modules can go away without explicit notice - through
2954     # changes in the module dependencies).
2955     echo "$specified_modules" > "$tmp"/modules1 # a sorted list, one module per line
2956     echo "$modules" > "$tmp"/modules2 # also a sorted list, one module per line
2957 haible 1.164 # First the #include <...> directives without #ifs, sorted for convenience,
2958     # then the #include "..." directives without #ifs, sorted for convenience,
2959     # then the #include directives that are surrounded by #ifs. Not sorted.
2960 haible 1.201 for module in `LC_ALL=C join "$tmp"/modules1 "$tmp"/modules2`; do
2961 haible 1.164 include_directive=`func_get_include_directive "$module"`
2962     case "$nl$include_directive" in
2963     *"$nl#if"*)
2964     echo "$include_directive" 1>&5
2965     ;;
2966     *)
2967     echo "$include_directive" | grep -v 'include "' 1>&6
2968     echo "$include_directive" | grep 'include "' 1>&7
2969     ;;
2970     esac
2971     done 5> "$tmp"/include-if 6> "$tmp"/include-angles 7> "$tmp"/include-quotes
2972 haible 1.110 (
2973 haible 1.164 LC_ALL=C sort -u "$tmp"/include-angles
2974     LC_ALL=C sort -u "$tmp"/include-quotes
2975     cat "$tmp"/include-if
2976 eggert 1.203 ) | sed -e '/^$/d' -e 's/^/ /'
2977 haible 1.164 rm -f "$tmp"/include-angles "$tmp"/include-quotes "$tmp"/include-if
2978    
2979 haible 1.220 for module in $modules; do
2980     func_get_link_directive "$module"
2981     done \
2982     | LC_ALL=C sort -u | sed -e '/^$/d' -e 's/^/ /' > "$tmp"/link
2983     if test `wc -l < "$tmp"/link` != 0; then
2984     echo
2985     echo "You may need to use the following Makefile variables when linking."
2986     echo "Use them in <program>_LDADD when linking a program, or"
2987     echo "in <library>_a_LDFLAGS or <library>_la_LDFLAGS when linking a library."
2988     cat "$tmp"/link
2989     fi
2990     rm -f "$tmp"/link
2991    
2992 jas 1.38 echo
2993 haible 1.59 echo "Don't forget to"
2994 eggert 1.150 if test "$makefile_am" = Makefile.am; then
2995 haible 1.149 echo " - add \"$sourcebase/Makefile\" to AC_CONFIG_FILES in $configure_ac,"
2996     else
2997     echo " - \"include $makefile_name\" from within \"$sourcebase/Makefile.am\","
2998     fi
2999 haible 1.250 if test -n "$pobase"; then
3000     echo " - add \"$pobase/Makefile.in\" to AC_CONFIG_FILES in $configure_ac,"
3001     fi
3002 haible 1.82 if test -n "$inctests"; then
3003 eggert 1.150 if test "$makefile_am" = Makefile.am; then
3004 haible 1.149 echo " - add \"$testsbase/Makefile\" to AC_CONFIG_FILES in $configure_ac,"
3005     else
3006     echo " - \"include $makefile_name\" from within \"$testsbase/Makefile.am\","
3007     fi
3008     fi
3009 eggert 1.150 if test "$makefile_am" = Makefile.am; then
3010 eggert 1.203 sourcebase_dir=`echo "$sourcebase" | sed -n -e 's,/[^/]*$,/,p'`
3011 haible 1.149 sourcebase_base=`basename "$sourcebase"`
3012     echo " - mention \"${sourcebase_base}\" in SUBDIRS in ${sourcebase_dir}Makefile.am,"
3013 haible 1.82 fi
3014 haible 1.250 if test -n "$pobase"; then
3015     pobase_dir=`echo "$pobase" | sed -n -e 's,/[^/]*$,/,p'`
3016     pobase_base=`basename "$pobase"`
3017     echo " - mention \"${pobase_base}\" in SUBDIRS in ${pobase_dir}Makefile.am,"
3018     fi
3019 haible 1.82 if test -n "$inctests"; then
3020 eggert 1.150 if test "$makefile_am" = Makefile.am; then
3021 eggert 1.203 testsbase_dir=`echo "$testsbase" | sed -n -e 's,/[^/]*$,/,p'`
3022 haible 1.149 testsbase_base=`basename "$testsbase"`
3023     echo " - mention \"${testsbase_base}\" in SUBDIRS in ${testsbase_dir}Makefile.am,"
3024     fi
3025 haible 1.82 fi
3026 haible 1.59 echo " - mention \"-I ${m4base}\" in ACLOCAL_AMFLAGS in Makefile.am,"
3027 haible 1.62 echo " - invoke ${macro_prefix}_EARLY in $configure_ac, right after AC_PROG_CC,"
3028     echo " - invoke ${macro_prefix}_INIT in $configure_ac."
3029 haible 1.25 }
3030    
3031 haible 1.1 # func_create_testdir testdir modules
3032 haible 1.54 # Input:
3033 haible 1.147 # - local_gnulib_dir from --local-dir
3034 haible 1.54 # - auxdir directory relative to destdir where to place build aux files
3035 haible 1.1 func_create_testdir ()
3036     {
3037     testdir="$1"
3038     modules="$2"
3039 haible 1.177 if test -z "$modules"; then
3040     # All modules together.
3041     # Except config-h, which breaks all modules which use HAVE_CONFIG_H.
3042     # Except fnmatch-posix, which conflicts with fnmatch-gnu. FIXME.
3043 haible 1.183 # Except ftruncate, mountlist, which abort the configuration on mingw. FIXME.
3044 haible 1.177 modules=`func_all_modules`
3045 haible 1.183 modules=`for m in $modules; do case $m in config-h | fnmatch-posix | ftruncate | mountlist) ;; *) echo $m;; esac; done`
3046 haible 1.177 fi
3047 haible 1.161 modules=`for m in $modules; do echo $m; done | LC_ALL=C sort -u`
3048 haible 1.1
3049 haible 1.197 # Check that the license of every module is consistent with the license of
3050     # its dependencies.
3051     saved_modules="$modules"
3052 haible 1.216 saved_inctests="$inctests"
3053     # When computing transitive closures, don't consider $module to depend on
3054     # $module-tests. Need this becauses tests are implicitly GPL and may depend
3055     # on GPL modules - therefore we don't want a warning in this case.
3056     inctests=""
3057 haible 1.197 for requested_module in $saved_modules; do
3058     requested_license=`func_get_license "$requested_module"`
3059     if test "$requested_license" != GPL; then
3060     # Here we use func_modules_transitive_closure, not just
3061     # func_get_dependencies, so that we also detect weird situations like
3062     # an LGPL module which depends on a GPLed build tool module which depends
3063     # on a GPL module.
3064     modules="$requested_module"
3065     func_modules_transitive_closure
3066     for module in $modules; do
3067     license=`func_get_license "$module"`
3068 haible 1.247 case "$license" in
3069     'GPLed build tool') ;;
3070 haible 1.197 'public domain' | 'unlimited' | 'unmodifiable license text') ;;
3071 haible 1.247 *)
3072     case "$requested_license" in
3073     GPLv2+)
3074     case "$license" in
3075     GPLv2+ | LGPLv2+) ;;
3076     *) echo "warning: module $requested_module depends on a module with an incompatible license: $module" 1>&2 ;;
3077     esac
3078     ;;
3079     LGPL)
3080     case "$license" in
3081     LGPL | LGPLv2+) ;;
3082     *) echo "warning: module $requested_module depends on a module with an incompatible license: $module" 1>&2 ;;
3083     esac
3084     ;;
3085     LGPLv2+)
3086     case "$license" in
3087     LGPLv2+) ;;
3088     *) echo "warning: module $requested_module depends on a module with an incompatible license: $module" 1>&2 ;;
3089     esac
3090     ;;
3091     esac
3092     ;;
3093 haible 1.197 esac
3094     done
3095     fi
3096     done
3097     modules="$saved_modules"
3098 haible 1.216 inctests="$saved_inctests"
3099 haible 1.197
3100 haible 1.143 # Subdirectory names.
3101     sourcebase=gllib
3102     m4base=glm4
3103 haible 1.250 pobase=
3104 haible 1.163 docbase=gldoc
3105 haible 1.143 testsbase=gltests
3106 haible 1.179 macro_prefix=gl
3107 haible 1.250 po_domain=
3108 haible 1.143
3109 haible 1.1 # Determine final module list.
3110 haible 1.27 func_modules_transitive_closure
3111 haible 1.256 if test $verbose -ge 0; then
3112     echo "Module list with included dependencies:"
3113     echo "$modules" | sed -e 's/^/ /'
3114     fi
3115 haible 1.1
3116 haible 1.99 # Add the dummy module if needed.
3117     func_modules_add_dummy
3118    
3119 haible 1.257 # Show banner notice of every module.
3120     func_modules_notice
3121    
3122 haible 1.1 # Determine final file list.
3123 haible 1.28 func_modules_to_filelist
3124 haible 1.256 if test $verbose -ge 0; then
3125     echo "File list:"
3126     echo "$files" | sed -e 's/^/ /'
3127     fi
3128 haible 1.1
3129 haible 1.163 sed_rewrite_files="\
3130     s,^build-aux/,$auxdir/,
3131     s,^doc/,$docbase/,
3132     s,^lib/,$sourcebase/,
3133     s,^m4/,$m4base/,
3134     s,^tests/,$testsbase/,"
3135 haible 1.188
3136     # Create directories.
3137     for f in $files; do echo $f; done \
3138 eggert 1.203 | sed -e "$sed_rewrite_files" \
3139     | sed -n -e 's,^\(.*\)/[^/]*,\1,p' \
3140 haible 1.188 | LC_ALL=C sort -u \
3141     > "$tmp"/dirs
3142     { # Rearrange file descriptors. Needed because "while ... done < ..."
3143     # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
3144     exec 5<&0 < "$tmp"/dirs
3145     while read d; do
3146     mkdir -p "$testdir/$d"
3147     done
3148     exec 0<&5 5<&-
3149     }
3150    
3151     # Copy files or make symbolic links.
3152     delimiter=' '
3153 haible 1.163 for f in $files; do echo $f; done \
3154 eggert 1.203 | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_files" \
3155 haible 1.163 | LC_ALL=C sort \
3156     > "$tmp"/files
3157 haible 1.166 { # Rearrange file descriptors. Needed because "while ... done < ..."
3158     # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
3159 ericb 1.173 exec 5<&0 < "$tmp"/files
3160 haible 1.166 while read g f; do
3161     func_lookup_file "$f"
3162     if test -n "$lookedup_tmp"; then
3163 haible 1.127 cp -p "$lookedup_file" "$testdir/$g"
3164     else
3165 haible 1.166 ln "$lookedup_file" "$testdir/$g" 2>/dev/null ||
3166 haible 1.193 if { test -n "$symbolic" \
3167     || { test -n "$lsymbolic" \
3168     && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; }; then
3169     func_ln "$lookedup_file" "$testdir/$g"
3170     else
3171 haible 1.166 cp -p "$lookedup_file" "$testdir/$g"
3172     fi
3173 haible 1.127 fi
3174 haible 1.166 done
3175 haible 1.174 exec 0<&5 5<&-
3176 haible 1.166 }
3177 haible 1.1
3178 haible 1.218 # Create Makefile.ams that are for testing.
3179     for_test=true
3180    
3181 haible 1.143 # Create $sourcebase/Makefile.am.
3182     mkdir -p "$testdir/$sourcebase"
3183     func_emit_lib_Makefile_am > "$testdir/$sourcebase/Makefile.am"
3184 haible 1.1
3185 haible 1.143 # Create $m4base/Makefile.am.
3186     mkdir -p "$testdir/$m4base"
3187 haible 1.1 (echo "## Process this file with automake to produce Makefile.in."
3188     echo
3189     echo "EXTRA_DIST ="
3190     for f in $files; do
3191     case "$f" in
3192     m4/* )
3193 eggert 1.203 echo "EXTRA_DIST += "`echo "$f" | sed -e 's,^m4/,,'` ;;
3194 haible 1.1 esac
3195     done
3196 haible 1.143 ) > "$testdir/$m4base/Makefile.am"
3197 haible 1.1
3198 haible 1.143 subdirs="$sourcebase $m4base"
3199 haible 1.57 subdirs_with_configure_ac=""
3200 haible 1.1
3201 haible 1.178 if false && test -f "$testdir"/$m4base/gettext.m4; then
3202 haible 1.1 # Avoid stupid error message from automake:
3203     # "AM_GNU_GETTEXT used but `po' not in SUBDIRS"
3204     mkdir -p "$testdir/po"
3205     (echo "## Process this file with automake to produce Makefile.in."
3206     ) > "$testdir/po/Makefile.am"
3207 haible 1.165 func_append subdirs " po"
3208 haible 1.1 fi
3209    
3210 haible 1.57 if test -n "$inctests"; then
3211 haible 1.143 test -d "$testdir/$testsbase" || mkdir "$testdir/$testsbase"
3212     # Create $testsbase/Makefile.am.
3213     func_emit_tests_Makefile_am > "$testdir/$testsbase/Makefile.am"
3214     # Create $testsbase/configure.ac.
3215 haible 1.57 (echo "# Process this file with autoconf to produce a configure script."
3216     echo "AC_INIT([dummy], [0])"
3217     echo "AC_CONFIG_AUX_DIR([../$auxdir])"
3218     echo "AM_INIT_AUTOMAKE"
3219     echo
3220     echo "AM_CONFIG_HEADER([config.h])"
3221     echo
3222     echo "AC_PROG_CC"
3223     echo "AC_PROG_INSTALL"
3224     echo "AC_PROG_MAKE_SET"
3225     echo "AC_PROG_RANLIB"
3226     echo
3227 haible 1.143 if grep AC_GNU_SOURCE "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then
3228 haible 1.57 echo "AC_GNU_SOURCE"
3229     echo
3230     fi
3231 haible 1.221 for module in $modules; do
3232     func_verify_module
3233     if test -n "$module"; then
3234     func_get_autoconf_early_snippet "$module"
3235     fi
3236     done \
3237     | sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/'
3238 haible 1.129 if test "$libtool" = true; then
3239     echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])"
3240 haible 1.159 echo "gl_cond_libtool=true"
3241 haible 1.129 else
3242 haible 1.89 echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])"
3243 haible 1.159 echo "gl_cond_libtool=false"
3244     echo "gl_libdeps="
3245     echo "gl_ltlibdeps="
3246 jas 1.88 fi
3247 haible 1.134 # Wrap the set of autoconf snippets into an autoconf macro that is then
3248     # invoked. This is needed because autoconf does not support AC_REQUIRE
3249     # at the top level:
3250     # error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an AC_DEFUN'd macro
3251     # but we want the AC_REQUIRE to have its normal meaning (provide one
3252     # expansion of the required macro before the current point, and only one
3253     # expansion total).
3254     echo "AC_DEFUN([gl_INIT], ["
3255 haible 1.179 func_emit_initmacro_start
3256 rwild 1.189 sed_replace_build_aux='
3257     :a
3258     /AC_CONFIG_FILES(.*:build-aux\/.*)/{
3259 haible 1.240 s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:../'"$auxdir"'/\2)|
3260     ba
3261 rwild 1.189 }'
3262 haible 1.57 # We don't have explicit ordering constraints between the various
3263     # autoconf snippets. It's cleanest to put those of the library before
3264     # those of the tests.
3265 haible 1.196 echo "gl_source_base='../$sourcebase'"
3266 haible 1.57 for module in $modules; do
3267     func_verify_nontests_module
3268     if test -n "$module"; then
3269 haible 1.95 func_get_autoconf_snippet "$module" \
3270 eggert 1.203 | sed -e "$sed_replace_build_aux"
3271 haible 1.57 fi
3272     done
3273 haible 1.196 echo "gl_source_base='.'"
3274 haible 1.57 for module in $modules; do
3275     func_verify_tests_module
3276     if test -n "$module"; then
3277 haible 1.95 func_get_autoconf_snippet "$module" \
3278 eggert 1.203 | sed -e "$sed_replace_build_aux"
3279 haible 1.57 fi
3280     done
3281 haible 1.159 # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is
3282     # created using libtool, because libtool already handles the dependencies.
3283     if test "$libtool" != true; then
3284 gray 1.246 libname_upper=`echo "$libname" | LC_ALL=C tr 'a-z-' 'A-Z_'`
3285 haible 1.159 echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\""
3286     echo " AC_SUBST([${libname_upper}_LIBDEPS])"
3287     echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
3288     echo " AC_SUBST([${libname_upper}_LTLIBDEPS])"
3289     fi
3290 haible 1.179 func_emit_initmacro_end
3291 haible 1.134 echo "])"
3292 haible 1.179 func_emit_initmacro_done
3293     echo
3294 haible 1.134 echo "gl_INIT"
3295 haible 1.57 echo
3296 haible 1.143 # Usually $testsbase/config.h will be a superset of config.h. Verify this
3297     # by "merging" config.h into $testsbase/config.h; look out for gcc warnings.
3298 haible 1.57 echo "AH_TOP([#include \"../config.h\"])"
3299     echo
3300     echo "AC_OUTPUT([Makefile])"
3301 haible 1.143 ) > "$testdir/$testsbase/configure.ac"
3302 haible 1.165 func_append subdirs " $testsbase"
3303 haible 1.143 subdirs_with_configure_ac="$subdirs_with_configure_ac $testsbase"
3304 haible 1.57 fi
3305    
3306 haible 1.1 # Create Makefile.am.
3307     (echo "## Process this file with automake to produce Makefile.in."
3308     echo
3309     echo "AUTOMAKE_OPTIONS = 1.5 foreign"
3310     echo
3311     echo "SUBDIRS = $subdirs"
3312     echo
3313 haible 1.143 echo "ACLOCAL_AMFLAGS = -I $m4base"
3314 haible 1.1 ) > "$testdir/Makefile.am"
3315    
3316     # Create configure.ac.
3317     (echo "# Process this file with autoconf to produce a configure script."
3318 haible 1.51 echo "AC_INIT([dummy], [0])"
3319 haible 1.54 if test "$auxdir" != "."; then
3320     echo "AC_CONFIG_AUX_DIR([$auxdir])"
3321     fi
3322 haible 1.1 echo "AM_INIT_AUTOMAKE"
3323     echo
3324 haible 1.51 echo "AM_CONFIG_HEADER([config.h])"
3325 haible 1.1 echo
3326     echo "AC_PROG_CC"
3327     echo "AC_PROG_INSTALL"
3328     echo "AC_PROG_MAKE_SET"
3329 haible 1.136 echo
3330 jas 1.207 echo "# For autobuild."
3331     echo "AC_CANONICAL_BUILD"
3332     echo "AC_CANONICAL_HOST"
3333     echo
3334 haible 1.136 echo "m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace"
3335 haible 1.179 echo "m4_pattern_allow([^gl_ES\$])dnl a valid locale name"
3336     echo "m4_pattern_allow([^gl_LIBOBJS\$])dnl a variable"
3337     echo "m4_pattern_allow([^gl_LTLIBOBJS\$])dnl a variable"
3338 haible 1.136 echo
3339 haible 1.1 echo "AC_PROG_RANLIB"
3340     echo
3341 haible 1.191 if test -n "$uses_subdirs"; then
3342     echo "AM_PROG_CC_C_O"
3343     echo
3344     fi
3345 haible 1.143 if grep AC_GNU_SOURCE "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then
3346 haible 1.1 echo "AC_GNU_SOURCE"
3347 haible 1.11 echo
3348     fi
3349 haible 1.221 for module in $modules; do
3350     func_verify_nontests_module
3351     if test -n "$module"; then
3352     func_get_autoconf_early_snippet "$module"
3353     fi
3354     done \
3355     | sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/'
3356 haible 1.129 if test "$libtool" = true; then
3357     echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])"
3358 haible 1.159 echo "gl_cond_libtool=true"
3359 haible 1.129 else
3360 haible 1.89 echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])"
3361 haible 1.159 echo "gl_cond_libtool=false"
3362     echo "gl_libdeps="
3363     echo "gl_ltlibdeps="
3364 haible 1.1 fi
3365 haible 1.171 echo "gl_source_base='$sourcebase'"
3366 haible 1.134 # Wrap the set of autoconf snippets into an autoconf macro that is then
3367     # invoked. This is needed because autoconf does not support AC_REQUIRE
3368     # at the top level:
3369     # error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an AC_DEFUN'd macro
3370     # but we want the AC_REQUIRE to have its normal meaning (provide one
3371     # expansion of the required macro before the current point, and only one
3372     # expansion total).
3373     echo "AC_DEFUN([gl_INIT], ["
3374 haible 1.179 func_emit_initmacro_start
3375 haible 1.101 if test "$auxdir" != "build-aux"; then
3376     sed_replace_build_aux='
3377     :a
3378     /AC_CONFIG_FILES(.*:build-aux\/.*)/{
3379     s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)|
3380     ba
3381     }'
3382     else
3383     sed_replace_build_aux=
3384     fi
3385 haible 1.1 for module in $modules; do
3386 haible 1.57 func_verify_nontests_module
3387 haible 1.1 if test -n "$module"; then
3388 haible 1.95 func_get_autoconf_snippet "$module" \
3389 eggert 1.203 | sed -e "$sed_replace_build_aux"
3390 haible 1.1 fi
3391     done
3392 haible 1.159 # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is
3393     # created using libtool, because libtool already handles the dependencies.
3394     if test "$libtool" != true; then
3395 gray 1.246 libname_upper=`echo "$libname" | LC_ALL=C tr 'a-z-' 'A-Z_'`
3396 haible 1.159 echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\""
3397     echo " AC_SUBST([${libname_upper}_LIBDEPS])"
3398     echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
3399     echo " AC_SUBST([${libname_upper}_LTLIBDEPS])"
3400     fi
3401 haible 1.179 func_emit_initmacro_end
3402 haible 1.134 echo "])"
3403 haible 1.179 func_emit_initmacro_done
3404     echo
3405 haible 1.134 echo "gl_INIT"
3406 haible 1.1 echo
3407 haible 1.57 if test -n "$subdirs_with_configure_ac"; then
3408     echo "AC_CONFIG_SUBDIRS(["`echo $subdirs_with_configure_ac`"])"
3409     fi
3410 haible 1.1 makefiles="Makefile"
3411     for d in $subdirs; do
3412 haible 1.57 # For subdirs that have a configure.ac by their own, it's the subdir's
3413     # configure.ac which creates the subdir's Makefile.am, not this one.
3414     case " $subdirs_with_configure_ac " in
3415     *" $d "*) ;;
3416 haible 1.165 *) func_append makefiles " $d/Makefile" ;;
3417 haible 1.57 esac
3418 haible 1.1 done
3419     echo "AC_OUTPUT([$makefiles])"
3420     ) > "$testdir/configure.ac"
3421    
3422     # Create autogenerated files.
3423     (cd "$testdir"
3424 haible 1.178 # Do not use "${AUTORECONF} --force --install", because it may invoke
3425     # autopoint, which brings in older versions of some of our .m4 files.
3426     if test -f $m4base/gettext.m4; then
3427 haible 1.256 func_execute_command ${AUTOPOINT} --force || func_exit 1
3428 haible 1.178 for f in $m4base/*.m4~; do
3429 eggert 1.203 mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1
3430 haible 1.178 done
3431     fi
3432 haible 1.256 func_execute_command ${ACLOCAL} -I $m4base || func_exit 1
3433 haible 1.178 if ! test -d build-aux; then
3434 haible 1.256 func_execute_command mkdir build-aux || func_exit 1
3435 haible 1.178 fi
3436 haible 1.256 func_execute_command ${AUTOCONF} || func_exit 1
3437     func_execute_command ${AUTOHEADER} || func_exit 1
3438     func_execute_command ${AUTOMAKE} --add-missing --copy || func_exit 1
3439 rwild 1.189 ) || func_exit 1
3440     if test -n "$inctests"; then
3441     # Create autogenerated files.
3442     (cd "$testdir/$testsbase" || func_exit 1
3443     # Do not use "${AUTORECONF} --force --install", because it may invoke
3444     # autopoint, which brings in older versions of some of our .m4 files.
3445     if test -f ../$m4base/gettext.m4; then
3446 haible 1.256 func_execute_command ${AUTOPOINT} --force || func_exit 1
3447 rwild 1.189 for f in ../$m4base/*.m4~; do
3448 haible 1.240 mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1
3449 rwild 1.189 done
3450     fi
3451 haible 1.256 func_execute_command ${ACLOCAL} -I ../$m4base || func_exit 1
3452 rwild 1.189 if ! test -d ../build-aux; then
3453 haible 1.256 func_execute_command mkdir ../build-aux
3454 rwild 1.189 fi
3455 haible 1.256 func_execute_command ${AUTOCONF} || func_exit 1
3456     func_execute_command ${AUTOHEADER} || func_exit 1
3457     func_execute_command ${AUTOMAKE} --add-missing --copy || func_exit 1
3458 rwild 1.189 ) || func_exit 1
3459     fi
3460 haible 1.214 # Need to run configure and make once, to create built files that are to be
3461     # distributed (such as getdate.c).
3462 haible 1.223 # Extract the value of "CLEANFILES += ..." and "MOSTLYCLEANFILES += ...".
3463 haible 1.214 cleaned_files=`sed -e "$sed_remove_backslash_newline" < "$testdir/$sourcebase/Makefile.am" \
3464 ericb 1.229 | sed -n -e 's,^CLEANFILES[ ]*+=\([^#]*\).*$,\1,p' -e 's,^MOSTLYCLEANFILES[ ]*+=\([^#]*\).*$,\1,p'`
3465 haible 1.223 cleaned_files=`for file in $cleaned_files; do echo " $file "; done`
3466 haible 1.214 # Extract the value of "BUILT_SOURCES += ...". Remove variable references
3467     # such $(FOO_H) because they don't refer to distributed files.
3468     sed_remove_make_variables='s,[$]([A-Za-z0-9_]*),,g'
3469     built_sources=`sed -e "$sed_remove_backslash_newline" < "$testdir/$sourcebase/Makefile.am" \
3470 ericb 1.229 | sed -n -e 's,^BUILT_SOURCES[ ]*+=\([^#]*\).*$,\1,p' \
3471 haible 1.214 | sed -e "$sed_remove_make_variables"`
3472     distributed_built_sources=`for file in $built_sources; do
3473     case "$cleaned_files" in
3474     *" "$file" "*) ;;
3475     *) echo $file ;;
3476     esac;
3477     done`
3478     if test -n "$distributed_built_sources"; then
3479 haible 1.1 (cd "$testdir"
3480 rwild 1.189 ./configure || func_exit 1
3481 haible 1.143 cd "$sourcebase"
3482 haible 1.87 echo 'built_sources: $(BUILT_SOURCES)' >> Makefile
3483 rwild 1.189 make built_sources || func_exit 1
3484 haible 1.1 cd ..
3485 rwild 1.189 make distclean || func_exit 1
3486     ) || func_exit 1
3487 haible 1.1 fi
3488     }
3489    
3490     # func_create_megatestdir megatestdir allmodules
3491 haible 1.54 # Input:
3492 haible 1.147 # - local_gnulib_dir from --local-dir
3493 haible 1.54 # - auxdir directory relative to destdir where to place build aux files
3494 haible 1.1 func_create_megatestdir ()
3495     {
3496     megatestdir="$1"
3497     allmodules="$2"
3498     if test -z "$allmodules"; then
3499     allmodules=`func_all_modules`
3500     fi
3501    
3502     megasubdirs=
3503     # First, all modules one by one.
3504     for onemodule in $allmodules; do
3505     func_create_testdir "$megatestdir/$onemodule" $onemodule
3506 haible 1.165 func_append megasubdirs "$onemodule "
3507 haible 1.1 done
3508     # Then, all modules all together.
3509 haible 1.172 # Except config-h, which breaks all modules which use HAVE_CONFIG_H.
3510 haible 1.1 # Except fnmatch-posix, which conflicts with fnmatch-gnu. FIXME.
3511 haible 1.172 allmodules=`for m in $allmodules; do if test $m != config-h && test $m != fnmatch-posix; then echo $m; fi; done`
3512 haible 1.1 func_create_testdir "$megatestdir/ALL" "$allmodules"
3513 haible 1.165 func_append megasubdirs "ALL"
3514 haible 1.1
3515 haible 1.224 # Create autobuild.
3516     cvsdate=`sh "$gnulib_dir/build-aux/mdate-sh" "$gnulib_dir/CVS/Entries" \
3517     | sed -e 's,January,01,' -e 's,Jan,01,' \
3518     -e 's,February,02,' -e 's,Feb,02,' \
3519     -e 's,March,03,' -e 's,Mar,03,' \
3520     -e 's,April,04,' -e 's,Apr,04,' \
3521     -e 's,May,05,' \
3522     -e 's,June,06,' -e 's,Jun,06,' \
3523     -e 's,July,07,' -e 's,Jul,07,' \
3524     -e 's,August,08,' -e 's,Aug,08,' \
3525     -e 's,September,09,' -e 's,Sep,09,' \
3526     -e 's,October,10,' -e 's,Oct,10,' \
3527     -e 's,November,11,' -e 's,Nov,11,' \
3528     -e 's,December,12,' -e 's,Dec,12,' \
3529 rwild 1.242 -e 's,^,00,' -e 's,^[0-9]*\([0-9][0-9] \),\1,' \
3530 rwild 1.236 -e 's,^\([0-9]*\) \([0-9]*\) \([0-9]*\),\3\2\1,'`
3531 haible 1.225 (echo '#!/bin/sh'
3532     echo "CVSDATE=$cvsdate"
3533 haible 1.224 echo "test -d logs || mkdir logs"
3534     echo "for module in $megasubdirs; do"
3535     echo " echo \"Working on module \$module...\""
3536     echo " safemodule=\`echo \$module | sed -e 's|/|-|g'\`"
3537     echo " (echo \"To: gnulib@autobuild.josefsson.org\""
3538     echo " echo"
3539     echo " set -x"
3540     echo " : autobuild project... \$module"
3541     echo " : autobuild revision... cvs-\$CVSDATE-000000"
3542     echo " : autobuild timestamp... \`date \"+%Y%m%d-%H%M%S\"\`"
3543     echo " : autobuild hostname... \`hostname\`"
3544 haible 1.227 echo " cd \$module && ./configure \$CONFIGURE_OPTIONS && make && make check && make distclean"
3545 haible 1.224 echo " echo rc=\$?"
3546 haible 1.226 echo " ) 2>&1 | { if test -n \"\$AUTOBUILD_SUBST\"; then sed -e \"\$AUTOBUILD_SUBST\"; else cat; fi; } > logs/\$safemodule"
3547 haible 1.224 echo "done"
3548 jas 1.232 ) > "$megatestdir/do-autobuild"
3549     chmod a+x "$megatestdir/do-autobuild"
3550 haible 1.224
3551 haible 1.1 # Create Makefile.am.
3552     (echo "## Process this file with automake to produce Makefile.in."
3553     echo
3554     echo "AUTOMAKE_OPTIONS = 1.5 foreign"
3555     echo
3556     echo "SUBDIRS = $megasubdirs"
3557 haible 1.224 echo
3558 jas 1.232 echo "EXTRA_DIST = do-autobuild"
3559 haible 1.1 ) > "$megatestdir/Makefile.am"
3560    
3561     # Create configure.ac.
3562     (echo "# Process this file with autoconf to produce a configure script."
3563 haible 1.51 echo "AC_INIT([dummy], [0])"
3564 haible 1.54 if test "$auxdir" != "."; then
3565     echo "AC_CONFIG_AUX_DIR([$auxdir])"
3566     fi
3567 haible 1.1 echo "AM_INIT_AUTOMAKE"
3568     echo
3569     echo "AC_PROG_MAKE_SET"
3570     echo
3571     echo "AC_CONFIG_SUBDIRS([$megasubdirs])"
3572     echo "AC_OUTPUT([Makefile])"
3573     ) > "$megatestdir/configure.ac"
3574    
3575     # Create autogenerated files.
3576     (cd "$megatestdir"
3577 haible 1.96 # Do not use "${AUTORECONF} --install", because autoreconf operates
3578     # recursively, but the subdirectories are already finished, therefore
3579     # calling autoreconf here would only waste lots of CPU time.
3580 haible 1.256 func_execute_command ${ACLOCAL} || func_exit 1
3581     func_execute_command mkdir build-aux
3582     func_execute_command ${AUTOCONF} || func_exit 1
3583     func_execute_command ${AUTOMAKE} --add-missing --copy || func_exit 1
3584 rwild 1.189 ) || func_exit 1
3585 haible 1.1 }
3586    
3587     case $mode in
3588     "" )
3589     func_fatal_error "no mode specified" ;;
3590    
3591     list )
3592     func_all_modules
3593     ;;
3594    
3595 haible 1.91 import | update )
3596 eggert 1.114
3597 haible 1.23 # Where to import.
3598     if test -z "$destdir"; then
3599     destdir=.
3600     fi
3601     test -d "$destdir" \
3602     || func_fatal_error "destination directory does not exist: $destdir"
3603    
3604 haible 1.69 # Prefer configure.ac to configure.in.
3605     if test -f "$destdir"/configure.ac; then
3606     configure_ac="$destdir/configure.ac"
3607 haible 1.23 else
3608 haible 1.69 if test -f "$destdir"/configure.in; then
3609     configure_ac="$destdir/configure.in"
3610     else
3611     func_fatal_error "cannot find $destdir/configure.ac"
3612     fi
3613 haible 1.23 fi
3614 jas 1.49
3615 haible 1.69 # Analyze configure.ac.
3616     guessed_auxdir="."
3617 haible 1.129 guessed_libtool=false
3618 haible 1.69 my_sed_traces='
3619     s,#.*$,,
3620     s,^dnl .*$,,
3621     s, dnl .*$,,
3622     /AC_CONFIG_AUX_DIR/ {
3623     s,^.*AC_CONFIG_AUX_DIR([[ ]*\([^])]*\).*$,guessed_auxdir="\1",p
3624     }
3625     /A[CM]_PROG_LIBTOOL/ {
3626     s,^.*$,guessed_libtool=true,p
3627     }'
3628 eggert 1.203 eval `sed -n -e "$my_sed_traces" < "$configure_ac"`
3629 haible 1.69
3630     if test -z "$auxdir"; then
3631     auxdir="$guessed_auxdir"
3632     fi
3633 haible 1.23
3634 haible 1.69 # Determine where to apply func_import.
3635     if test -n "$m4base"; then
3636     # Apply func_import to a particular gnulib directory.
3637     # Any number of additional modules can be given.
3638 haible 1.73 if test ! -f "$destdir/$m4base"/gnulib-cache.m4; then
3639     # First use of gnulib in the given m4base.
3640     test -n "$supplied_libname" || supplied_libname=true
3641     test -n "$sourcebase" || sourcebase="lib"
3642 ericb 1.116 test -n "$docbase" || docbase="doc"
3643 haible 1.83 test -n "$testsbase" || testsbase="tests"
3644 haible 1.73 test -n "$macro_prefix" || macro_prefix="gl"
3645     fi
3646 haible 1.69 func_import "$*"
3647     else
3648     # Apply func_import to all gnulib directories.
3649     # To get this list of directories, look at Makefile.am. (Not at
3650     # configure, because it may be omitted from CVS. Also, don't run
3651     # "find $destdir -name gnulib-cache.m4", as it might be too expensive.)
3652     m4dirs=
3653     m4dirs_count=0
3654 haible 1.126 if test -f "$destdir"/Makefile.am; then
3655 rwild 1.219 aclocal_amflags=`sed -n 's/^ACLOCAL_AMFLAGS[ ]*=\(.*\)$/\1/p' "$destdir"/Makefile.am`
3656 haible 1.126 m4dir_is_next=
3657     for arg in $aclocal_amflags; do
3658     if test -n "$m4dir_is_next"; then
3659     # Ignore absolute directory pathnames, like /usr/local/share/aclocal.
3660     case "$arg" in
3661     /*) ;;
3662     *)
3663     if test -f "$destdir/$arg"/gnulib-cache.m4; then
3664 haible 1.165 func_append m4dirs " $arg"
3665 haible 1.126 m4dirs_count=`expr $m4dirs_count + 1`
3666     fi
3667     ;;
3668     esac
3669 rwild 1.219 m4dir_is_next=
3670 haible 1.69 else
3671 haible 1.126 if test "X$arg" = "X-I"; then
3672     m4dir_is_next=yes
3673     else
3674     m4dir_is_next=
3675     fi
3676 haible 1.69 fi
3677 haible 1.126 done
3678     else
3679     # No Makefile.am! Oh well. Look at the last generated aclocal.m4.
3680     if test -f "$destdir"/aclocal.m4; then
3681     sedexpr1='s,^m4_include(\[\(.*\)])$,\1,p'
3682     sedexpr2='s,^[^/]*$,.,'
3683     sedexpr3='s,/[^/]*$,,'
3684 eggert 1.203 m4dirs=`sed -n -e "$sedexpr1" aclocal.m4 | sed -e "$sedexpr2" -e "$sedexpr3" | LC_ALL=C sort -u`
3685 haible 1.126 m4dirs_count=`echo "$m4dirs" | wc -l`
3686 haible 1.69 fi
3687 haible 1.126 fi
3688 haible 1.69 if test $m4dirs_count = 0; then
3689     # First use of gnulib in a package.
3690     # Any number of additional modules can be given.
3691 haible 1.71 test -n "$supplied_libname" || supplied_libname=true
3692     test -n "$sourcebase" || sourcebase="lib"
3693 haible 1.69 m4base="m4"
3694 ericb 1.116 test -n "$docbase" || docbase="doc"
3695 haible 1.83 test -n "$testsbase" || testsbase="tests"
3696 haible 1.71 test -n "$macro_prefix" || macro_prefix="gl"
3697 haible 1.69 func_import "$*"
3698     else
3699     if test $m4dirs_count = 1; then
3700     # There's only one use of gnulib here. Assume the user means it.
3701     # Any number of additional modules can be given.
3702     for m4base in $m4dirs; do
3703     func_import "$*"
3704     done
3705     else
3706     # Ambiguous - guess what the user meant.
3707     if test $# = 0; then
3708     # No further arguments. Guess the user wants to update all of them.
3709     for m4base in $m4dirs; do
3710 haible 1.152 # Perform func_import in a subshell, so that variable values
3711     # such as
3712 haible 1.250 # local_gnulib_dir, avoidlist, sourcebase, m4base, pobase,
3713     # docbase, testsbase, inctests, libname, lgpl, makefile_name,
3714     # libtool, macro_prefix, po_domain
3715 haible 1.152 # don't propagate from one directory to another.
3716 rwild 1.168 (func_import) || func_exit 1
3717 haible 1.69 done
3718     else
3719     # Really ambiguous.
3720     func_fatal_error "Ambiguity: to which directory should the modules be added? Please specify at least --m4-base=..."
3721     fi
3722     fi
3723     fi
3724     fi
3725 haible 1.23 ;;
3726 haible 1.1
3727     create-testdir )
3728     if test -z "$destdir"; then
3729     func_fatal_error "please specify --dir option"
3730     fi
3731 karl 1.3 mkdir "$destdir"
3732     test -d "$destdir" \
3733     || func_fatal_error "could not create destination directory"
3734 haible 1.54 test -n "$auxdir" || auxdir="build-aux"
3735 haible 1.1 func_create_testdir "$destdir" "$*"
3736     ;;
3737    
3738     create-megatestdir )
3739     if test -z "$destdir"; then
3740     func_fatal_error "please specify --dir option"
3741     fi
3742     mkdir "$destdir" || func_fatal_error "could not create destination directory"
3743 haible 1.54 test -n "$auxdir" || auxdir="build-aux"
3744 haible 1.1 func_create_megatestdir "$destdir" "$*"
3745     ;;
3746    
3747     test )
3748 &n