X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=gnulib-tool;h=ce1bbe949b8737d59df08f5fa93dd14294a3380a;hb=82c7cf6cd85527542579b8b6874710d4b9c8df49;hp=679d12fe55573a6940eb37221e6e149f9befd03e;hpb=738e9cb9f65a1ad281b277c14fab60d656e59d64;p=gnulib.git diff --git a/gnulib-tool b/gnulib-tool index 679d12fe5..ce1bbe949 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -1,6 +1,6 @@ #! /bin/sh # -# Copyright (C) 2002-2008 Free Software Foundation, Inc. +# Copyright (C) 2002-2010 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -63,20 +63,33 @@ if test -z "${AUTOPOINT}" || test -n "${GETTEXTPATH}"; then AUTOPOINT="${GETTEXTPATH}autopoint" fi +# You can set MAKE. +if test -z "${MAKE}"; then + MAKE=make +fi + # When using GNU sed, turn off as many GNU extensions as possible, # to minimize the risk of accidentally using non-portable features. # However, do this only for gnulib-tool itself, not for the code that # gnulib-tool generates, since we don't want "sed --posix" to leak -# into makefiles. -if (alias) > /dev/null 2>&1 && echo | sed --posix -e d >/dev/null 2>&1; then +# into makefiles. And do it only for sed versions 4.2 or newer, +# because "sed --posix" is buggy in GNU sed 4.1.5, see +# . +if (alias) > /dev/null 2>&1 \ + && echo | sed --posix -e d >/dev/null 2>&1 \ + && case `sed --version | sed -e 's/^[^0-9]*//' -e 1q` in \ + [1-3]* | 4.[01]*) false;; \ + *) true;; \ + esac \ + ; then # Define sed as an alias. # It is not always possible to use aliases. Aliases are guaranteed to work # if the executing shell is bash and either it is invoked as /bin/sh or # is a version >= 2.0, supporting shopt. This is the common case. # Two other approaches (use of a variable $sed or of a function func_sed # instead of an alias) require massive, fragile code changes. - # An other approach (use of function sed) requires `which sed` - but 'which' - # is hard to emulate, due to missing "test -x" on some platforms. + # An other approach (use of function sed) requires `which sed` - but + # 'which' is hard to emulate, due to missing "test -x" on some platforms. if test -n "$BASH_VERSION"; then shopt -s expand_aliases >/dev/null 2>&1 fi @@ -102,6 +115,7 @@ Usage: gnulib-tool --list gnulib-tool --extract-description module gnulib-tool --extract-status module gnulib-tool --extract-notice module + gnulib-tool --extract-applicability module gnulib-tool --extract-filelist module gnulib-tool --extract-dependencies module gnulib-tool --extract-autoconf-snippet module @@ -111,6 +125,7 @@ Usage: gnulib-tool --list gnulib-tool --extract-license module gnulib-tool --extract-maintainer module gnulib-tool --extract-tests-module module + gnulib-tool --copy-file file [destination] Operation modes: --list print the available module names @@ -139,6 +154,7 @@ Operation modes: under lib/ --extract-maintainer report the maintainer(s) inside gnulib --extract-tests-module report the unit test module, if it exists + --copy-file copy a file that is not part of any module General options: --dir=DIRECTORY Specify the target directory. @@ -237,7 +253,7 @@ q fi version= fi - year=`"$gnulib_dir"/build-aux/mdate-sh "$self_abspathname" | sed 's,^.* ,,'` + year=`"$gnulib_dir"/build-aux/mdate-sh "$self_abspathname" | sed -e 's,^.* ,,'` echo "\ gnulib-tool (GNU $package $date)$version Copyright (C) $year Free Software Foundation, Inc. @@ -252,10 +268,10 @@ Written by" "Bruno Haible" "and" "Simon Josefsson" # outputs to stdout a header for a generated file. func_emit_copyright_notice () { - sed -n '/Copyright/ { - p - q - }' < "$self_abspathname" + sed -n -e '/Copyright/ { + p + q + }' < "$self_abspathname" echo "#" echo "# This file is free software, distributed under the terms of the GNU" echo "# General Public License. As a special exception to the GNU General" @@ -398,11 +414,69 @@ if ( foo=bar; foo+=baz && test "$foo" = barbaz ) >/dev/null 2>&1; then { eval "$1+=\"\$2\"" } + fast_func_append=true else func_append () { eval "$1=\"\$$1\$2\"" } + fast_func_append=false +fi + +# func_remove_prefix var prefix +# removes the given prefix from the value of the shell variable var. +# var should be the name of a shell variable. +# Its value should not contain a newline and not start or end with whitespace. +# prefix should not contain the characters "$`\{}[]^|. +if ( foo=bar; eval 'test "${foo#b}" = ar' ) >/dev/null 2>&1; then + func_remove_prefix () + { + eval "$1=\${$1#\$2}" + } + fast_func_remove_prefix=true +else + func_remove_prefix () + { + eval "value=\"\$$1\"" + prefix="$2" + case "$prefix" in + *.*) + sed_escape_dots='s/\([.]\)/\\\1/g' + prefix=`echo "$prefix" | sed -e "$sed_escape_dots"` + ;; + esac + value=`echo "$value" | sed -e "s|^${prefix}||"` + eval "$1=\"\$value\"" + } + fast_func_remove_prefix=false +fi + +# func_remove_suffix var suffix +# removes the given suffix from the value of the shell variable var. +# var should be the name of a shell variable. +# Its value should not contain a newline and not start or end with whitespace. +# suffix should not contain the characters "$`\{}[]^|. +if ( foo=bar; eval 'test "${foo%r}" = ba' ) >/dev/null 2>&1; then + func_remove_suffix () + { + eval "$1=\${$1%\$2}" + } + fast_func_remove_suffix=true +else + func_remove_suffix () + { + eval "value=\"\$$1\"" + suffix="$2" + case "$suffix" in + *.*) + sed_escape_dots='s/\([.]\)/\\\1/g' + suffix=`echo "$suffix" | sed -e "$sed_escape_dots"` + ;; + esac + value=`echo "$value" | sed -e "s|${suffix}\$||"` + eval "$1=\"\$value\"" + } + fast_func_remove_suffix=false fi # func_fatal_error message @@ -578,7 +652,9 @@ func_ln_if_changed () # will read from this pipe might prematurely exit or close its standard input # descriptor. if test -n "$BASH_VERSION"; then - # The problem has only been reported with bash. + # The problem has only been reported with bash. Probably it occurs only with + # bash-3.2. For the reasons, see + # . # Note that Solaris sh does not understand "trap - SIGPIPE". func_reset_sigpipe () { @@ -628,7 +704,7 @@ if test -z "$have_echo" \ && test "X$1" != "X--no-reexec" \ && test -n "$CONFIG_SHELL" \ && test -f "$CONFIG_SHELL" \ - && $CONFIG_SHELL -c 'echo '\t' | grep t > /dev/null'; then + && $CONFIG_SHELL -c "echo '\\t' | grep t > /dev/null"; then exec $CONFIG_SHELL "$0" --no-reexec "$@" exit 127 fi @@ -824,6 +900,9 @@ fi --extract-* ) mode=`echo "X$1" | sed -e 's/^X--//'` shift ;; + --copy-file | --copy-fil | --copy-fi | --copy-f | --copy- | --copy | --cop | --co ) + mode=copy-file + shift ;; --dir ) shift if test $# = 0; then @@ -1099,7 +1178,7 @@ fi if test -n "$prereqs"; then autoconf_minversion=` for version in $prereqs; do echo $version; done | - LC_ALL=C sort -nru | sed 1q + LC_ALL=C sort -nru | sed -e 1q ` fi fi @@ -1269,6 +1348,7 @@ sed_extract_prog=':[ ]*$/ { s/^Description:[ ]*$// s/^Status:[ ]*$// s/^Notice:[ ]*$// + s/^Applicability:[ ]*$// s/^Files:[ ]*$// s/^Depends-on:[ ]*$// s/^configure\.ac-early:[ ]*$// @@ -1311,6 +1391,22 @@ func_get_notice () sed -n -e "/^Notice$sed_extract_prog" < "$lookedup_file" } +# func_get_applicability module +# Input: +# - local_gnulib_dir from --local-dir +# The expected result (on stdout) is either 'main', or 'tests', or 'all'. +func_get_applicability () +{ + func_lookup_file "modules/$1" + { sed -n -e "/^Applicability$sed_extract_prog" < "$lookedup_file" + # The default is 'main' or 'tests', depending on the module's name. + case "$1" in + *-tests) echo "tests";; + *) echo "main";; + esac + } | sed -e 's,^ *$,,' | sed -e 1q +} + # func_get_filelist module # Input: # - local_gnulib_dir from --local-dir @@ -1318,6 +1414,7 @@ func_get_filelist () { func_lookup_file "modules/$1" sed -n -e "/^Files$sed_extract_prog" < "$lookedup_file" + echo m4/00gnulib.m4 echo m4/gnulib-common.m4 case "$autoconf_minversion" in 2.59) @@ -1326,13 +1423,66 @@ func_get_filelist () esac } +# func_filter_filelist outputvar separator filelist prefix suffix removed_prefix removed_suffix [added_prefix [added_suffix]] +# stores in outputvar the filtered and processed filelist. Filtering: Only the +# elements starting with prefix and ending with suffix are considered. +# Processing: removed_prefix and removed_suffix are removed from each element, +# added_prefix and added_suffix are added to each element. +# prefix, suffix should not contain shell-special characters. +# removed_prefix, removed_suffix should not contain the characters "$`\{}[]^|. +# added_prefix, added_suffix should not contain the characters \|&. +func_filter_filelist () +{ + if test "$2" != "$nl" \ + || { $fast_func_append \ + && { test -z "$6" || $fast_func_remove_prefix; } \ + && { test -z "$7" || $fast_func_remove_suffix; }; \ + }; then + ffflist= + for fff in $3; do + # Do not quote possibly-empty parameters in case patterns, + # AIX and HP-UX ksh won't match them if they are empty. + case "$fff" in + $4*$5) + if test -n "$6"; then + func_remove_prefix fff "$6" + fi + if test -n "$7"; then + func_remove_suffix fff "$7" + fi + fff="$8${fff}$9" + if test -z "$ffflist"; then + ffflist="${fff}" + else + func_append ffflist "$2${fff}" + fi + ;; + esac + done + else + sed_fff_filter="s|^$6\(.*\)$7\$|$8\\1$9|" + ffflist=`for fff in $3; do + case "$fff" in + $4*$5) echo "$fff" ;; + esac + done | sed -e "$sed_fff_filter"` + fi + eval "$1=\"\$ffflist\"" +} + # func_get_dependencies module # Input: # - local_gnulib_dir from --local-dir func_get_dependencies () { # ${module}-tests always implicitly depends on ${module}. - echo "$1" | sed -n -e 's/-tests$//p' + case "$1" in + *-tests) + fgd1="$1" + func_remove_suffix fgd1 '-tests' + echo "$fgd1" + ;; + esac # Then the explicit dependencies listed in the module description. func_lookup_file "modules/$1" sed -n -e "/^Depends-on$sed_extract_prog" < "$lookedup_file" @@ -1368,11 +1518,7 @@ func_get_automake_snippet () # *-tests module live in tests/, not lib/. # Synthesize an EXTRA_DIST augmentation. all_files=`func_get_filelist $1` - tests_files=`for f in $all_files; do \ - case $f in \ - tests/*) echo $f ;; \ - esac; \ - done | sed -e 's,^tests/,,'` + func_filter_filelist tests_files " " "$all_files" 'tests/' '' 'tests/' '' extra_files="$tests_files" if test -n "$extra_files"; then echo "EXTRA_DIST +=" $extra_files @@ -1394,11 +1540,7 @@ func_get_automake_snippet () | sed -e "$sed_combine_lines" \ | sed -n -e "$sed_extract_mentioned_files" | sed -e 's/#.*//'` all_files=`func_get_filelist $1` - lib_files=`for f in $all_files; do \ - case $f in \ - lib/*) echo $f ;; \ - esac; \ - done | sed -e 's,^lib/,,'` + func_filter_filelist lib_files "$nl" "$all_files" 'lib/' '' 'lib/' '' # Remove $already_mentioned_files from $lib_files. echo "$lib_files" | LC_ALL=C sort -u > "$tmp"/lib-files extra_files=`func_reset_sigpipe; \ @@ -1422,8 +1564,7 @@ func_get_automake_snippet () case "$1" in relocatable-prog-wrapper) ;; *) - sed_extract_c_files='/\.c$/p' - extra_files=`echo "$extra_files" | sed -n -e "$sed_extract_c_files"` + func_filter_filelist extra_files "$nl" "$extra_files" '' '.c' '' '' if test -n "$extra_files"; then echo "EXTRA_lib_SOURCES +=" $extra_files echo @@ -1431,22 +1572,14 @@ func_get_automake_snippet () ;; esac # Synthesize an EXTRA_DIST augmentation also for the files in build-aux/. - buildaux_files=`for f in $all_files; do \ - case $f in \ - build-aux/*) echo $f ;; \ - esac; \ - done | sed -e 's,^build-aux/,,'` + func_filter_filelist buildaux_files "$nl" "$all_files" 'build-aux/' '' 'build-aux/' '' if test -n "$buildaux_files"; then sed_prepend_auxdir='s,^,$(top_srcdir)/'"$auxdir"'/,' echo "EXTRA_DIST += "`echo "$buildaux_files" | sed -e "$sed_prepend_auxdir"` echo fi # Synthesize an EXTRA_DIST augmentation also for the files from top/. - top_files=`for f in $all_files; do \ - case $f in \ - top/*) echo $f ;; \ - esac; \ - done | sed -e 's,^top/,,'` + func_filter_filelist top_files "$nl" "$all_files" 'top/' '' 'top/' '' if test -n "$top_files"; then sed_prepend_topdir='s,^,$(top_srcdir)/,' echo "EXTRA_DIST += "`echo "$top_files" | sed -e "$sed_prepend_topdir"` @@ -1590,6 +1723,7 @@ func_modules_transitive_closure () # - modules list of modules, including 'dummy' if needed func_modules_add_dummy () { + # Determine whether any module provides a lib_SOURCES augmentation. have_lib_SOURCES= sed_remove_backslash_newline=':a /\\$/{ @@ -1606,7 +1740,10 @@ ba # Ignore .h files since they are not compiled. case "$file" in *.h) ;; - *) have_lib_SOURCES=yes ;; + *) + have_lib_SOURCES=yes + break 2 + ;; esac done fi @@ -1684,6 +1821,108 @@ func_execute_command () fi } +# func_dest_tmpfilename file +# determines the name of a temporary file (file is relative to destdir). +# Input: +# - destdir target directory +# - doit : if actions shall be executed, false if only to be printed +# - tmp pathname of a temporary directory +# Sets variable: +# - tmpfile absolute filename of the temporary file +func_dest_tmpfilename () +{ + if $doit; then + # Put the new contents of $file in a file in the same directory (needed + # to guarantee that an 'mv' to "$destdir/$file" works). + tmpfile="$destdir/$1.tmp" + else + # Put the new contents of $file in a file in a temporary directory + # (because the directory of "$file" might not exist). + tmpfile="$tmp"/`basename "$1"`.tmp + fi +} + +# func_add_file +# copies a file from gnulib into the destination directory. The destination +# is known to not exist. +# Input: +# - destdir target directory +# - local_gnulib_dir from --local-dir +# - f the original file name +# - lookedup_file name of the merged (combined) file +# - lookedup_tmp true if it is located in the tmp directory, blank otherwise +# - g the rewritten file name +# - tmpfile absolute filename of the temporary file +# - doit : if actions shall be executed, false if only to be printed +# - symbolic true if files should be symlinked, copied otherwise +# - lsymbolic true if files from local_gnulib_dir should be symlinked, +# copied otherwise +func_add_file () +{ + if $doit; then + echo "Copying file $g" + if { test -n "$symbolic" \ + || { test -n "$lsymbolic" \ + && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \ + && test -z "$lookedup_tmp" \ + && cmp "$lookedup_file" "$tmpfile" > /dev/null; then + func_ln_if_changed "$lookedup_file" "$destdir/$g" + else + mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed" + fi + else + echo "Copy file $g" + fi +} + +# func_update_file +# copies a file from gnulib into the destination directory. The destination +# is known to exist. +# Input: +# - destdir target directory +# - local_gnulib_dir from --local-dir +# - f the original file name +# - lookedup_file name of the merged (combined) file +# - lookedup_tmp true if it is located in the tmp directory, blank otherwise +# - g the rewritten file name +# - tmpfile absolute filename of the temporary file +# - doit : if actions shall be executed, false if only to be printed +# - symbolic true if files should be symlinked, copied otherwise +# - lsymbolic true if files from local_gnulib_dir should be symlinked, +# copied otherwise +# - already_present nonempty if the file should already exist, empty otherwise +func_update_file () +{ + if cmp "$destdir/$g" "$tmpfile" > /dev/null; then + : # The file has not changed. + else + # Replace the file. + if $doit; then + if test -n "$already_present"; then + echo "Updating file $g (backup in ${g}~)" + else + echo "Replacing file $g (non-gnulib code backed up in ${g}~) !!" + fi + mv -f "$destdir/$g" "$destdir/${g}~" || func_fatal_error "failed" + if { test -n "$symbolic" \ + || { test -n "$lsymbolic" \ + && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \ + && test -z "$lookedup_tmp" \ + && cmp "$lookedup_file" "$tmpfile" > /dev/null; then + func_ln_if_changed "$lookedup_file" "$destdir/$g" + else + mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed" + fi + else + if test -n "$already_present"; then + echo "Update file $g (backup in ${g}~)" + else + echo "Replace file $g (non-gnulib code backed up in ${g}~) !!" + fi + fi + fi +} + # func_emit_lib_Makefile_am # emits the contents of library makefile to standard output. # Input: @@ -1735,7 +1974,14 @@ func_emit_lib_Makefile_am () echo "## Process this file with automake to produce Makefile.in." func_emit_copyright_notice if test -n "$actioncmd"; then - echo "# Reproduce by: $actioncmd" + # The maximum line length (excluding the terminating newline) of any file + # that is to be preprocessed by config.status is 3070. config.status uses + # awk, and the HP-UX 11.00 awk fails if a line has length >= 3071; + # similarly, the IRIX 6.5 awk fails if a line has length >= 3072. + len=`echo "$actioncmd" | wc -c` + if test -n "$len" && test "$len" -le 3000; then + echo "# Reproduce by: $actioncmd" + fi fi echo uses_subdirs= @@ -1756,25 +2002,28 @@ func_emit_lib_Makefile_am () echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@" echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@" fi - } > amsnippet.tmp + } > "$tmp"/amsnippet # Skip the contents if it's entirely empty. - if grep '[^ ]' amsnippet.tmp > /dev/null ; then + if grep '[^ ]' "$tmp"/amsnippet > /dev/null ; then echo "## begin gnulib module $module" echo - cat amsnippet.tmp + cat "$tmp"/amsnippet echo "## end gnulib module $module" echo fi - rm -f amsnippet.tmp + rm -f "$tmp"/amsnippet # Test whether there are some source files in subdirectories. for f in `func_get_filelist "$module"`; do case $f in - lib/*/*.c) uses_subdirs=yes ;; + lib/*/*.c) + uses_subdirs=yes + break + ;; esac done fi done - } > allsnippets.tmp + } > "$tmp"/allsnippets if test -z "$makefile_name"; then # If there are source files in subdirectories, prevent collision of the # object files (example: hash.c and libxml/hash.c). @@ -1792,7 +2041,7 @@ func_emit_lib_Makefile_am () echo "noinst_LTLIBRARIES =" # Automake versions < 1.9b create an empty pkgdatadir at installation time # if you specify pkgdata_DATA to empty. This is a workaround. - if grep '^pkgdata_DATA *+=' allsnippets.tmp > /dev/null; then + if grep '^pkgdata_DATA *+=' "$tmp"/allsnippets > /dev/null; then echo "pkgdata_DATA =" fi echo "EXTRA_DIST =" @@ -1823,11 +2072,17 @@ func_emit_lib_Makefile_am () if test -z "$makefile_name"; then echo echo "AM_CPPFLAGS =" + echo "AM_CFLAGS =" fi echo - if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *+\{0,1\}= *$libname\\.$libext\$" allsnippets.tmp > /dev/null; then - # One of the snippets already specifies an installation location for the - # library. Don't confuse automake by saying it should not be installed. + if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *+\{0,1\}= *$libname\\.$libext\$" "$tmp"/allsnippets > /dev/null \ + || { test -n "$makefile_name" \ + && test -f "$sourcebase/Makefile.am" \ + && LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *+\{0,1\}= *$libname\\.$libext\$" "$sourcebase/Makefile.am" > /dev/null; \ + }; then + # One of the snippets or the user's Makefile.am already specifies an + # installation location for the library. Don't confuse automake by saying + # it should not be installed. : else # By default, the generated library should not be installed. @@ -1848,7 +2103,7 @@ func_emit_lib_Makefile_am () echo "AM_CPPFLAGS += -DDEFAULT_TEXT_DOMAIN=\\\"${po_domain}-gnulib\\\"" echo fi - cat allsnippets.tmp \ + cat "$tmp"/allsnippets \ | sed -e 's|\$(top_srcdir)/build-aux/|$(top_srcdir)/'"$auxdir"'/|g' echo echo "mostlyclean-local: mostlyclean-generic" @@ -1858,7 +2113,7 @@ func_emit_lib_Makefile_am () echo " fi; \\" echo " done; \\" echo " :" - rm -f allsnippets.tmp + rm -f "$tmp"/allsnippets } # func_emit_po_Makevars @@ -1982,7 +2237,7 @@ func_emit_tests_Makefile_am () func_emit_copyright_notice echo uses_subdirs= - ( + { for module in $modules; do if $for_test; then func_verify_tests_module @@ -2003,25 +2258,28 @@ func_emit_tests_Makefile_am () echo "libtests_a_LIBADD += @${perhapsLT}ALLOCA@" echo "libtests_a_DEPENDENCIES += @${perhapsLT}ALLOCA@" fi - } > amsnippet.tmp + } > "$tmp"/amsnippet # Skip the contents if it's entirely empty. - if grep '[^ ]' amsnippet.tmp > /dev/null ; then + if grep '[^ ]' "$tmp"/amsnippet > /dev/null ; then echo "## begin gnulib module $module" echo - cat amsnippet.tmp + cat "$tmp"/amsnippet echo "## end gnulib module $module" echo fi - rm -f amsnippet.tmp + rm -f "$tmp"/amsnippet # Test whether there are some source files in subdirectories. for f in `func_get_filelist "$module"`; do case $f in - lib/*/*.c | tests/*/*.c) uses_subdirs=yes ;; + lib/*/*.c | tests/*/*.c) + uses_subdirs=yes + break + ;; esac done fi done - ) > allsnippets.tmp + } > "$tmp"/allsnippets # Generate dependencies here, since it eases the debugging of test failures. # If there are source files in subdirectories, prevent collision of the # object files (example: hash.c and libxml/hash.c). @@ -2040,6 +2298,7 @@ func_emit_tests_Makefile_am () # "AM_GNU_GETTEXT used but SUBDIRS not defined" echo "SUBDIRS =" echo "TESTS =" + echo "XFAIL_TESTS =" echo "TESTS_ENVIRONMENT =" echo "noinst_PROGRAMS =" if ! $for_test; then @@ -2056,7 +2315,7 @@ func_emit_tests_Makefile_am () fi # Automake versions < 1.9b create an empty pkgdatadir at installation time # if you specify pkgdata_DATA to empty. This is a workaround. - if grep '^pkgdata_DATA *+=' allsnippets.tmp > /dev/null; then + if grep '^pkgdata_DATA *+=' "$tmp"/allsnippets > /dev/null; then echo "pkgdata_DATA =" fi echo "EXTRA_DIST =" @@ -2114,7 +2373,7 @@ func_emit_tests_Makefile_am () echo "AM_LIBTOOLFLAGS = --preserve-dup-deps" echo fi - cat allsnippets.tmp \ + cat "$tmp"/allsnippets \ | sed -e 's|\$(top_srcdir)/build-aux/|$(top_srcdir)/'"$auxdir"'/|g' echo "# Clean up after Solaris cc." echo "clean-local:" @@ -2127,7 +2386,7 @@ func_emit_tests_Makefile_am () echo " fi; \\" echo " done; \\" echo " :" - rm -f allsnippets.tmp + rm -f "$tmp"/allsnippets } # func_emit_initmacro_start macro_prefix @@ -2195,7 +2454,7 @@ func_emit_initmacro_end () echo " if test -n \"\$${macro_prefix_arg}_LIBOBJS\"; then" echo " # Remove the extension." echo " sed_drop_objext='s/\\.o\$//;s/\\.obj\$//'" - echo " for i in \`for i in \$${macro_prefix_arg}_LIBOBJS; do echo \"\$i\"; done | sed \"\$sed_drop_objext\" | sort | uniq\`; do" + echo " for i in \`for i in \$${macro_prefix_arg}_LIBOBJS; do echo \"\$i\"; done | sed -e \"\$sed_drop_objext\" | sort | uniq\`; do" echo " ${macro_prefix_arg}_libobjs=\"\$${macro_prefix_arg}_libobjs \$i.\$ac_objext\"" echo " ${macro_prefix_arg}_ltlibobjs=\"\$${macro_prefix_arg}_ltlibobjs \$i.lo\"" echo " done" @@ -2302,7 +2561,7 @@ func_import () s,^dnl .*$,, s, dnl .*$,, /gl_LOCAL_DIR(/ { - s,^.*gl_LOCAL_DIR([[ ]*\([^])]*\).*$,cached_local_gnulib_dir="\1",p + s,^.*gl_LOCAL_DIR([[ ]*\([^]"$`\\)]*\).*$,cached_local_gnulib_dir="\1",p } /gl_MODULES(/ { ta @@ -2312,55 +2571,55 @@ func_import () N ba :b - s,^.*gl_MODULES([[ ]*\([^])]*\).*$,cached_specified_modules="\1",p + s,^.*gl_MODULES([[ ]*\([^]"$`\\)]*\).*$,cached_specified_modules="\1",p } /gl_WITH_OBSOLETE/ { s,^.*$,cached_incobsolete=true,p } /gl_AVOID(/ { - s,^.*gl_AVOID([[ ]*\([^])]*\).*$,cached_avoidlist="\1",p + s,^.*gl_AVOID([[ ]*\([^]"$`\\)]*\).*$,cached_avoidlist="\1",p } /gl_SOURCE_BASE(/ { - s,^.*gl_SOURCE_BASE([[ ]*\([^])]*\).*$,cached_sourcebase="\1",p + s,^.*gl_SOURCE_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_sourcebase="\1",p } /gl_M4_BASE(/ { - s,^.*gl_M4_BASE([[ ]*\([^])]*\).*$,cached_m4base="\1",p + s,^.*gl_M4_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_m4base="\1",p } /gl_PO_BASE(/ { - s,^.*gl_PO_BASE([[ ]*\([^])]*\).*$,cached_pobase="\1",p + s,^.*gl_PO_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_pobase="\1",p } /gl_DOC_BASE(/ { - s,^.*gl_DOC_BASE([[ ]*\([^])]*\).*$,cached_docbase="\1",p + s,^.*gl_DOC_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_docbase="\1",p } /gl_TESTS_BASE(/ { - s,^.*gl_TESTS_BASE([[ ]*\([^])]*\).*$,cached_testsbase="\1",p + s,^.*gl_TESTS_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_testsbase="\1",p } /gl_WITH_TESTS/ { s,^.*$,cached_inctests=true,p } /gl_LIB(/ { - s,^.*gl_LIB([[ ]*\([^])]*\).*$,cached_libname="\1",p + s,^.*gl_LIB([[ ]*\([^]"$`\\)]*\).*$,cached_libname="\1",p } /gl_LGPL(/ { - s,^.*gl_LGPL([[ ]*\([^])]*\).*$,cached_lgpl="\1",p + s,^.*gl_LGPL([[ ]*\([^]"$`\\)]*\).*$,cached_lgpl="\1",p } /gl_LGPL/ { s,^.*$,cached_lgpl=yes,p } /gl_MAKEFILE_NAME(/ { - s,^.*gl_MAKEFILE_NAME([[ ]*\([^])]*\).*$,cached_makefile_name="\1",p + s,^.*gl_MAKEFILE_NAME([[ ]*\([^]"$`\\)]*\).*$,cached_makefile_name="\1",p } /gl_LIBTOOL/ { s,^.*$,cached_libtool=true,p } /gl_MACRO_PREFIX(/ { - s,^.*gl_MACRO_PREFIX([[ ]*\([^])]*\).*$,cached_macro_prefix="\1",p + s,^.*gl_MACRO_PREFIX([[ ]*\([^]"$`\\)]*\).*$,cached_macro_prefix="\1",p } /gl_PO_DOMAIN(/ { - s,^.*gl_PO_DOMAIN([[ ]*\([^])]*\).*$,cached_po_domain="\1",p + s,^.*gl_PO_DOMAIN([[ ]*\([^]"$`\\)]*\).*$,cached_po_domain="\1",p } /gl_VC_FILES(/ { - s,^.*gl_VC_FILES([[ ]*\([^])]*\).*$,cached_vc_files="\1",p + s,^.*gl_VC_FILES([[ ]*\([^]"$`\\)]*\).*$,cached_vc_files="\1",p }' eval `sed -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-cache.m4` if test -f "$destdir"/$m4base/gnulib-comp.m4; then @@ -2375,6 +2634,7 @@ func_import () :a s,^\]).*$,", tb + s,["$`\\],,g p n ba @@ -2505,9 +2765,10 @@ func_import () # ignoring tests modules. Its lib/* sources go into $sourcebase/. If --lgpl # is specified, it will consist only of LGPLed source. # The tests-related module list is the transitive closure of the specified - # modules, including tests modules, minus the main module list. Its lib/* - # sources (brought in through dependencies of *-tests modules) go into - # $testsbase/. It may contain GPLed source, even if --lgpl is specified. + # modules, including tests modules, minus the main module list excluding + # modules of applicability 'all'. Its lib/* sources (brought in through + # dependencies of *-tests modules) go into $testsbase/. It may contain GPLed + # source, even if --lgpl is specified. # Determine main module list. saved_inctests="$inctests" inctests="" @@ -2521,7 +2782,13 @@ func_import () fi # Determine tests-related module list. echo "$final_modules" | LC_ALL=C sort -u > "$tmp"/final-modules - testsrelated_modules=`func_reset_sigpipe; echo "$main_modules" | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/final-modules` + testsrelated_modules=`func_reset_sigpipe + for module in $main_modules; do + if test \`func_get_applicability $module\` = main; then + echo $module + fi + done \ + | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/final-modules` if test $verbose -ge 1; then echo "Tests-related module list:" echo "$testsrelated_modules" | sed -e 's/^/ /' @@ -2538,15 +2805,15 @@ func_import () func_verify_nontests_module if test -n "$module"; then all_files=`func_get_filelist $module` - lib_files=`for f in $all_files; do \ - case $f in \ - lib/*) echo $f ;; \ - esac; \ - done | sed -e 's,^lib/,,'` - if test -n "$lib_files"; then - use_libtests=true - break - fi + # Test whether some file in $all_files lies in lib/. + for f in $all_files; do + case $f in + lib/*) + use_libtests=true + break 2 + ;; + esac + done fi done @@ -2569,7 +2836,7 @@ func_import () case "$lgpl" in yes | 3) case $license in - LGPL | LGPLv2+) ;; + LGPL | LGPLv2+ | LGPLv3+) ;; *) func_append license_incompatibilities "$module $license$nl" ;; esac ;; @@ -2631,11 +2898,22 @@ s,^\(.................................................[^ ]*\) *, sed_transform_main_lib_file=$sed_transform_main_lib_file' s/GNU Lesser General/GNU General/g s/GNU Library General/GNU General/g - s/version \(2\|2\.1\)\([ ,]\)/version 3\2/g + s/version 2\(.1\)\{0,1\}\([ ,]\)/version 3\2/g ' fi fi + # Determine script to apply to auxiliary files that go into $auxdir/. + sed_transform_build_aux_file= + if test -n "$do_copyrights"; then + # Update license. + sed_transform_build_aux_file=$sed_transform_build_aux_file' + s/GNU Lesser General/GNU General/g + s/GNU Library General/GNU General/g + s/version 2\(.1\)\{0,1\}\([ ,]\)/version 3\2/g + ' + fi + # Determine script to apply to library files that go into $testsbase/. sed_transform_testsrelated_lib_file="$sed_transform_lib_file" if test -n "$do_copyrights"; then @@ -2643,7 +2921,7 @@ s,^\(.................................................[^ ]*\) *, sed_transform_testsrelated_lib_file=$sed_transform_testsrelated_lib_file' s/GNU Lesser General/GNU General/g s/GNU Library General/GNU General/g - s/version \(2\|2\.1\)\([ ,]\)/version 3\2/g + s/version 2\(.1\)\{0,1\}\([ ,]\)/version 3\2/g ' fi @@ -2679,22 +2957,25 @@ s,^\(.................................................[^ ]*\) *, func_append old_files " m4/gnulib-tool.m4" fi + rewritten='%REWRITTEN%' sed_rewrite_old_files="\ - s,^build-aux/,$auxdir/, - s,^doc/,$cached_docbase/, - s,^lib/,$cached_sourcebase/, - s,^m4/,$cached_m4base/, - s,^tests/,$cached_testsbase/, - s,^tests=lib/,$cached_testsbase/, - s,^top/,," + s,^build-aux/,$rewritten$auxdir/, + s,^doc/,$rewritten$cached_docbase/, + s,^lib/,$rewritten$cached_sourcebase/, + s,^m4/,$rewritten$cached_m4base/, + s,^tests/,$rewritten$cached_testsbase/, + s,^tests=lib/,$rewritten$cached_testsbase/, + s,^top/,$rewritten, + s,^$rewritten,," sed_rewrite_new_files="\ - s,^build-aux/,$auxdir/, - s,^doc/,$docbase/, - s,^lib/,$sourcebase/, - s,^m4/,$m4base/, - s,^tests/,$testsbase/, - s,^tests=lib/,$testsbase/, - s,^top/,," + s,^build-aux/,$rewritten$auxdir/, + s,^doc/,$rewritten$docbase/, + s,^lib/,$rewritten$sourcebase/, + s,^m4/,$rewritten$m4base/, + s,^tests/,$rewritten$testsbase/, + s,^tests=lib/,$rewritten$testsbase/, + s,^top/,$rewritten, + s,^$rewritten,," # Create directories. { echo "$sourcebase" @@ -2731,23 +3012,6 @@ s,^\(.................................................[^ ]*\) *, exec 0<&5 5<&- } - # func_dest_tmpfilename file - # determines the name of a temporary file (file is relative to destdir). - # Sets variable: - # - tmpfile absolute filename of the temporary file - func_dest_tmpfilename () - { - if $doit; then - # Put the new contents of $file in a file in the same directory (needed - # to guarantee that an 'mv' to "$destdir/$file" works). - tmpfile="$destdir/$1.tmp" - else - # Put the new contents of $file in a file in a temporary directory - # (because the directory of "$file" might not exist). - tmpfile="$tmp"/`basename "$1"`.tmp - fi - } - # Copy files or make symbolic links. Remove obsolete files. added_files='' removed_files='' @@ -2782,7 +3046,8 @@ s,^\(.................................................[^ ]*\) *, # Uses parameters # - f the original file name # - g the rewritten file name - # - already_present nonempty if the file already exists, empty otherwise + # - already_present nonempty if the file should already exist, empty + # otherwise func_add_or_update () { of="$f" @@ -2800,6 +3065,14 @@ s,^\(.................................................[^ ]*\) *, ;; esac fi + if test -n "$sed_transform_build_aux_file"; then + case "$of" in + build-aux/*) + sed -e "$sed_transform_build_aux_file" \ + < "$lookedup_file" > "$tmpfile" || func_fatal_error "failed" + ;; + esac + fi if test -n "$sed_transform_testsrelated_lib_file"; then case "$of" in tests=lib/*) @@ -2810,52 +3083,12 @@ s,^\(.................................................[^ ]*\) *, fi if test -f "$destdir/$g"; then # The file already exists. - if cmp "$destdir/$g" "$tmpfile" > /dev/null; then - : # The file has not changed. - else - # Replace the file. - if $doit; then - if test -n "$already_present"; then - echo "Updating file $g (backup in ${g}~)" - else - echo "Replacing file $g (non-gnulib code backed up in ${g}~) !!" - fi - mv -f "$destdir/$g" "$destdir/${g}~" || func_fatal_error "failed" - if { test -n "$symbolic" \ - || { test -n "$lsymbolic" \ - && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \ - && test -z "$lookedup_tmp" \ - && cmp "$lookedup_file" "$tmpfile" > /dev/null; then - func_ln_if_changed "$lookedup_file" "$destdir/$g" - else - mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed" - fi - else - if test -n "$already_present"; then - echo "Update file $g (backup in ${g}~)" - else - echo "Replace file $g (non-gnulib code backed up in ${g}~) !!" - fi - fi - fi + func_update_file else # Install the file. # Don't protest if the file should be there but isn't: it happens # frequently that developers don't put autogenerated files into CVS. - if $doit; then - echo "Copying file $g" - if { test -n "$symbolic" \ - || { test -n "$lsymbolic" \ - && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \ - && test -z "$lookedup_tmp" \ - && cmp "$lookedup_file" "$tmpfile" > /dev/null; then - func_ln_if_changed "$lookedup_file" "$destdir/$g" - else - mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed" - fi - else - echo "Copy file $g" - fi + func_add_file func_append added_files "$g$nl" fi rm -f "$tmpfile" @@ -3192,7 +3425,7 @@ s,//*$,/,' esac echo "gl_LOCAL_DIR([$relative_local_gnulib_dir])" echo "gl_MODULES([" - echo "$specified_modules" | sed 's/^/ /g' + echo "$specified_modules" | sed -e 's/^/ /g' echo "])" test -z "$incobsolete" || echo "gl_WITH_OBSOLETE" echo "gl_AVOID([$avoidlist])" @@ -3274,9 +3507,6 @@ s,//*$,/,' if test -n "$uses_subdirs"; then echo " AC_REQUIRE([AM_PROG_CC_C_O])" fi - if grep AC_GNU_SOURCE "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then - echo " AC_REQUIRE([AC_GNU_SOURCE])" - fi for module in $final_modules; do func_verify_module if test -n "$module"; then @@ -3320,7 +3550,7 @@ s,//*$,/,' -e "$sed_replace_build_aux" if test "$module" = 'alloca' && test "$libtool" = true; then echo 'changequote(,)dnl' - echo 'LTALLOCA=`echo "$ALLOCA" | sed '"'"'s/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'"'"'`' + echo 'LTALLOCA=`echo "$ALLOCA" | sed -e '"'"'s/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'"'"'`' echo 'changequote([, ])dnl' echo 'AC_SUBST([LTALLOCA])' fi @@ -3456,16 +3686,16 @@ s,//*$,/,' sed -e "s|^$anchor||" < "$destdir/$dir$ignore" | LC_ALL=C sort > "$tmp"/ignore (func_reset_sigpipe echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \ - | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-added + | LC_ALL=C join -v 1 - "$tmp"/ignore > "$tmp"/ignore-added echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \ - | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-removed + | LC_ALL=C join -v 1 - "$tmp"/ignore > "$tmp"/ignore-removed ) if test -s "$tmp"/ignore-added || test -s "$tmp"/ignore-removed; then if $doit; then echo "Updating $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)" mv -f "$destdir/$dir$ignore" "$destdir/$dir$ignore"~ - { sed -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed - if test -n "$anchor"; then sed -e "s,^,/^${doubly_escaped_anchor}," -e 's,$,\$/d,' < "$tmp"/ignore-removed; fi + { sed -e 's,/,\\/,g' -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed + if test -n "$anchor"; then sed -e 's,/,\\/,g' -e "s,^,/^${doubly_escaped_anchor}," -e 's,$,$/d,' < "$tmp"/ignore-removed; fi } > "$tmp"/sed-ignore-removed { cat "$destdir/$dir$ignore"~ sed -e "s|^|$anchor|" < "$tmp"/ignore-added @@ -3617,10 +3847,9 @@ func_create_testdir () if test -z "$modules"; then # All modules together. # Except config-h, which breaks all modules which use HAVE_CONFIG_H. - # Except fnmatch-posix, which conflicts with fnmatch-gnu. FIXME. # Except ftruncate, mountlist, which abort the configuration on mingw. FIXME. modules=`func_all_modules` - modules=`for m in $modules; do case $m in config-h | fnmatch-posix | ftruncate | mountlist) ;; *) echo $m;; esac; done` + modules=`for m in $modules; do case $m in config-h | ftruncate | mountlist) ;; *) echo $m;; esac; done` fi modules=`for m in $modules; do echo $m; done | LC_ALL=C sort -u` @@ -3705,13 +3934,15 @@ func_create_testdir () echo "$files" | sed -e 's/^/ /' fi + rewritten='%REWRITTEN%' sed_rewrite_files="\ - s,^build-aux/,$auxdir/, - s,^doc/,$docbase/, - s,^lib/,$sourcebase/, - s,^m4/,$m4base/, - s,^tests/,$testsbase/, - s,^top/,," + s,^build-aux/,$rewritten$auxdir/, + s,^doc/,$rewritten$docbase/, + s,^lib/,$rewritten$sourcebase/, + s,^m4/,$rewritten$m4base/, + s,^tests/,$rewritten$testsbase/, + s,^top/,$rewritten, + s,^$rewritten,," # Create directories. for f in $files; do echo $f; done \ @@ -3796,7 +4027,7 @@ func_create_testdir () test -d "$testdir/$testsbase" || mkdir "$testdir/$testsbase" # Viewed from the $testsbase subdirectory, $auxdir is different. saved_auxdir="$auxdir" - auxdir=`echo "$testsbase/"|sed 's%[^/][^/]*//*%../%g'`"$auxdir" + auxdir=`echo "$testsbase/" | sed -e 's%[^/][^/]*//*%../%g'`"$auxdir" # Create $testsbase/Makefile.am. use_libtests=false destfile="$testsbase/Makefile.am" @@ -3808,15 +4039,15 @@ func_create_testdir () echo "AC_CONFIG_AUX_DIR([$auxdir])" echo "AM_INIT_AUTOMAKE" echo - echo "AM_CONFIG_HEADER([config.h])" + echo "AC_CONFIG_HEADERS([config.h])" echo echo "AC_PROG_CC" echo "AC_PROG_INSTALL" echo "AC_PROG_MAKE_SET" echo "AC_PROG_RANLIB" echo - if grep AC_GNU_SOURCE "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then - echo "AC_GNU_SOURCE" + if test -n "$uses_subdirs"; then + echo "AM_PROG_CC_C_O" echo fi for module in $modules; do @@ -3902,7 +4133,8 @@ func_create_testdir () # by "merging" config.h into $testsbase/config.h; look out for gcc warnings. echo "AH_TOP([#include \"../config.h\"])" echo - echo "AC_OUTPUT([Makefile])" + echo "AC_CONFIG_FILES([Makefile])" + echo "AC_OUTPUT" ) > "$testdir/$testsbase/configure.ac" auxdir="$saved_auxdir" func_append subdirs " $testsbase" @@ -3927,7 +4159,7 @@ func_create_testdir () fi echo "AM_INIT_AUTOMAKE" echo - echo "AM_CONFIG_HEADER([config.h])" + echo "AC_CONFIG_HEADERS([config.h])" echo echo "AC_PROG_CC" echo "AC_PROG_INSTALL" @@ -3948,10 +4180,6 @@ func_create_testdir () echo "AM_PROG_CC_C_O" echo fi - if grep AC_GNU_SOURCE "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then - echo "AC_GNU_SOURCE" - echo - fi for module in $modules; do func_verify_nontests_module if test -n "$module"; then @@ -4022,7 +4250,8 @@ func_create_testdir () *) func_append makefiles " $d/Makefile" ;; esac done - echo "AC_OUTPUT([$makefiles])" + echo "AC_CONFIG_FILES([$makefiles])" + echo "AC_OUTPUT" ) > "$testdir/configure.ac" # Create autogenerated files. @@ -4032,7 +4261,9 @@ func_create_testdir () if test -f $m4base/gettext.m4; then func_execute_command ${AUTOPOINT} --force || func_exit 1 for f in $m4base/*.m4~; do - mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1 + if test -f $f; then + mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1 + fi done fi func_execute_command ${ACLOCAL} -I $m4base || func_exit 1 @@ -4051,7 +4282,9 @@ func_create_testdir () if test -f ../$m4base/gettext.m4; then func_execute_command ${AUTOPOINT} --force || func_exit 1 for f in ../$m4base/*.m4~; do - mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1 + if test -f $f; then + mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1 + fi done fi func_execute_command ${ACLOCAL} -I ../$m4base || func_exit 1 @@ -4086,9 +4319,9 @@ func_create_testdir () ./configure || func_exit 1 cd "$sourcebase" echo 'built_sources: $(BUILT_SOURCES)' >> Makefile - make built_sources || func_exit 1 + $MAKE built_sources || func_exit 1 cd .. - make distclean || func_exit 1 + $MAKE distclean || func_exit 1 ) || func_exit 1 fi } @@ -4113,8 +4346,7 @@ func_create_megatestdir () done # Then, all modules all together. # Except config-h, which breaks all modules which use HAVE_CONFIG_H. - # Except fnmatch-posix, which conflicts with fnmatch-gnu. FIXME. - allmodules=`for m in $allmodules; do if test $m != config-h && test $m != fnmatch-posix; then echo $m; fi; done` + allmodules=`for m in $allmodules; do if test $m != config-h; then echo $m; fi; done` func_create_testdir "$megatestdir/ALL" "$allmodules" func_append megasubdirs "ALL" @@ -4141,6 +4373,7 @@ func_create_megatestdir () -e 's,^\([0-9]*\) \([0-9]*\) \([0-9]*\),\3\2\1,'` (echo '#!/bin/sh' echo "CVSDATE=$cvsdate" + echo ": \${MAKE=make}" echo "test -d logs || mkdir logs" echo "for module in $megasubdirs; do" echo " echo \"Working on module \$module...\"" @@ -4152,7 +4385,7 @@ func_create_megatestdir () echo " : autobuild revision... cvs-\$CVSDATE-000000" echo " : autobuild timestamp... \`date \"+%Y%m%d-%H%M%S\"\`" echo " : autobuild hostname... \`hostname\`" - echo " cd \$module && ./configure \$CONFIGURE_OPTIONS && make && make check && make distclean" + echo " cd \$module && ./configure \$CONFIGURE_OPTIONS && \$MAKE && \$MAKE check && \$MAKE distclean" echo " echo rc=\$?" echo " ) 2>&1 | { if test -n \"\$AUTOBUILD_SUBST\"; then sed -e \"\$AUTOBUILD_SUBST\"; else cat; fi; } > logs/\$safemodule" echo "done" @@ -4180,7 +4413,8 @@ func_create_megatestdir () echo "AC_PROG_MAKE_SET" echo echo "AC_CONFIG_SUBDIRS([$megasubdirs])" - echo "AC_OUTPUT([Makefile])" + echo "AC_CONFIG_FILES([Makefile])" + echo "AC_OUTPUT" ) > "$megatestdir/configure.ac" # Create autogenerated files. @@ -4219,7 +4453,7 @@ case $mode in if test -f "$destdir"/configure.in; then configure_ac="$destdir/configure.in" else - func_fatal_error "cannot find $destdir/configure.ac" + func_fatal_error "cannot find $destdir/configure.ac - make sure you run gnulib-tool from within your package's directory" fi fi @@ -4231,7 +4465,7 @@ case $mode in s,^dnl .*$,, s, dnl .*$,, /AC_CONFIG_AUX_DIR/ { - s,^.*AC_CONFIG_AUX_DIR([[ ]*\([^])]*\).*$,guessed_auxdir="\1",p + s,^.*AC_CONFIG_AUX_DIR([[ ]*\([^]"$`\\)]*\).*$,guessed_auxdir="\1",p } /A[CM]_PROG_LIBTOOL/ { s,^.*$,guessed_libtool=true,p @@ -4263,7 +4497,7 @@ case $mode in m4dirs= m4dirs_count=0 if test -f "$destdir"/Makefile.am; then - aclocal_amflags=`sed -n 's/^ACLOCAL_AMFLAGS[ ]*=\(.*\)$/\1/p' "$destdir"/Makefile.am` + aclocal_amflags=`sed -n -e 's/^ACLOCAL_AMFLAGS[ ]*=\(.*\)$/\1/p' "$destdir"/Makefile.am` m4dir_is_next= for arg in $aclocal_amflags; do if test -n "$m4dir_is_next"; then @@ -4293,7 +4527,7 @@ case $mode in sedexpr2='s,^[^/]*$,.,' sedexpr3='s,/[^/]*$,,' m4dirs=`sed -n -e "$sedexpr1" aclocal.m4 | sed -e "$sedexpr2" -e "$sedexpr3" | LC_ALL=C sort -u` - m4dirs_count=`echo "$m4dirs" | wc -l` + m4dirs_count=`printf %s "$m4dirs" | wc -l` fi fi if test $m4dirs_count = 0; then @@ -4364,9 +4598,9 @@ case $mode in mkdir build cd build ../configure || func_exit 1 - make || func_exit 1 - make check || func_exit 1 - make distclean || func_exit 1 + $MAKE || func_exit 1 + $MAKE check || func_exit 1 + $MAKE distclean || func_exit 1 remaining=`find . -type f -print` if test -n "$remaining"; then echo "Remaining files:" $remaining 1>&2 @@ -4387,9 +4621,9 @@ case $mode in mkdir build cd build ../configure - make - make check - make distclean + $MAKE + $MAKE check + $MAKE distclean remaining=`find . -type f -print` if test -n "$remaining"; then echo "Remaining files:" $remaining 1>&2 @@ -4431,6 +4665,16 @@ case $mode in done ;; + extract-applicability ) + for module + do + func_verify_module + if test -n "$module"; then + func_get_applicability "$module" + fi + done + ;; + extract-filelist ) for module do @@ -4521,6 +4765,66 @@ case $mode in done ;; + copy-file ) + # Verify the number of arguments. + if test $# -lt 1 || test $# -gt 2; then + func_fatal_error "invalid number of arguments for --$mode" + fi + + # The first argument is the file to be copied. + f="$1" + # Verify the file exists. + func_lookup_file "$f" + + # The second argument is the destination; either a directory ot a file. + # It defaults to the current directory. + dest="$2" + test -n "$dest" || dest='.' + test -n "$sourcebase" || sourcebase="lib" + test -n "$m4base" || m4base="m4" + test -n "$docbase" || docbase="doc" + test -n "$testsbase" || testsbase="tests" + test -n "$auxdir" || auxdir="build-aux" + rewritten='%REWRITTEN%' + sed_rewrite_files="\ + s,^build-aux/,$rewritten$auxdir/, + s,^doc/,$rewritten$docbase/, + s,^lib/,$rewritten$sourcebase/, + s,^m4/,$rewritten$m4base/, + s,^tests/,$rewritten$testsbase/, + s,^top/,$rewritten, + s,^$rewritten,," + if test -d "$dest"; then + destdir="$dest" + g=`echo "$f" | sed -e "$sed_rewrite_files"` + else + destdir=`dirname "$dest"` + g=`basename "$dest"` + fi + + # Create the directory for destfile. + d=`dirname "$destdir/$g"` + if $doit; then + if test -n "$d" && test ! -d "$d"; then + mkdir -p "$d" || func_fatal_error "failed" + fi + fi + # Copy the file. + func_dest_tmpfilename "$g" + cp "$lookedup_file" "$tmpfile" || func_fatal_error "failed" + already_present=true + if test -f "$destdir/$g"; then + # The file already exists. + func_update_file + else + # Install the file. + # Don't protest if the file should be there but isn't: it happens + # frequently that developers don't put autogenerated files into CVS. + func_add_file + fi + rm -f "$tmpfile" + ;; + * ) func_fatal_error "unknown operation mode --$mode" ;; esac