X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=gnulib-tool;h=3cf697f920911fead055a16c889a67d2d68a57bb;hb=47348404e40e1706a251892868b09e0c67211b19;hp=d419df12dfe460ca972510dbf86aea748df63eb6;hpb=a3620d8faf7d8f06cba8fd529d4f93a56416d1e1;p=gnulib.git diff --git a/gnulib-tool b/gnulib-tool index d419df12d..3cf697f92 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -1,6 +1,6 @@ #! /bin/sh # -# Copyright (C) 2002-2010 Free Software Foundation, Inc. +# Copyright (C) 2002-2011 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 @@ -123,10 +123,24 @@ fi # outputs to stdout the --help usage message. func_usage () { + # This use of bold display can be removed on 2011-01-01. + if case "$TERM" in + xterm*) test -t 1;; + *) false;; + esac; then + # Assume xterm compatible escape sequences. + bold_on=`printf '\x1b[1m'` + bold_off=`printf '\x1b[0m'` + else + bold_on= + bold_off= + fi echo "\ Usage: gnulib-tool --list - gnulib-tool --find filename + gnulib-tool --find filename${bold_on} gnulib-tool --import [module1 ... moduleN] + gnulib-tool --add-import [module1 ... moduleN] + gnulib-tool --remove-import [module1 ... moduleN]${bold_off} gnulib-tool --update gnulib-tool --create-testdir --dir=directory [module1 ... moduleN] gnulib-tool --create-megatestdir --dir=directory [module1 ... moduleN] @@ -149,13 +163,18 @@ Usage: gnulib-tool --list gnulib-tool --copy-file file [destination] Operation modes: + --list print the available module names - --find find the modules which contain the specified file - --import import the given modules into the current package; + --find find the modules which contain the specified file${bold_on} + --import import the given modules into the current package + --add-import augment the list of imports from gnulib into the + current package, by adding the given modules; if no modules are specified, update the current package from the current gnulib + --remove-import reduce the list of imports from gnulib into the + current package, by removing the given modules${bold_off} --update update the current package, restore files omitted - from CVS + from version control --create-testdir create a scratch package with the given modules --create-megatestdir create a mega scratch package with the given modules one by one and all together @@ -181,6 +200,7 @@ Operation modes: --copy-file copy a file that is not part of any module General options: + --dir=DIRECTORY Specify the target directory. For --import, this specifies where your configure.ac can be found. Defaults to current @@ -192,10 +212,13 @@ General options: --verbose Increase verbosity. May be repeated. --quiet Decrease verbosity. May be repeated. -Options for --import, --update: +Options for --import, --add/remove-import, --update: + --dry-run Only print what would have been done. -Options for --import, --create-[mega]testdir, --[mega]test: +Options for --import, --add/remove-import, + --create-[mega]testdir, --[mega]test: + --with-tests Include unit tests for the included modules. --with-obsolete Include obsolete modules when they occur among the dependencies. By default, dependencies to obsolete @@ -215,7 +238,8 @@ Options for --import, --create-[mega]testdir, --[mega]test: --libtool Use libtool rules. --no-libtool Don't use libtool rules. -Options for --import: +Options for --import, --add/remove-import: + --lib=LIBRARY Specify the library name. Defaults to 'libgnu'. --source-base=DIRECTORY Directory relative to --dir where source code is @@ -230,7 +254,7 @@ Options for --import: Directory relative to --dir where unit tests are placed (default \"tests\"). --aux-dir=DIRECTORY Directory relative to --dir where auxiliary build - tools are placed (default \"build-aux\"). + tools are placed (default comes from configure.ac). --lgpl[=2|=3] Abort if modules aren't available under the LGPL. Also modify license template from GPL to LGPL. The version number of the LGPL can be specified; @@ -248,6 +272,7 @@ Options for --import: --no-changelog Don't update or create ChangeLog files. Options for --create-[mega]testdir, --[mega]test: + --without-c++-tests Exclude unit tests for C++ interoperability. --without-longrunning-tests Exclude unit tests that are long-runners. @@ -256,12 +281,15 @@ Options for --create-[mega]testdir, --[mega]test: --without-unportable-tests Exclude unit tests that fail on some platforms. -Options for --import, --update, --create-[mega]testdir, --[mega]test: +Options for --import, --add/remove-import, --update, + --create-[mega]testdir, --[mega]test: + -s, --symbolic, --symlink Make symbolic links instead of copying files. --local-symlink Make symbolic links instead of copying files, only for files from the local override directory. -Options for --import, --update: +Options for --import, --add/remove-import, --update: + -S, --more-symlinks Make symbolic links instead of copying files, and don't replace copyright notices. @@ -818,20 +846,24 @@ fi # that the top-level statement containing the test starts after the 'alias' # command. if test -z "$have_echo"; then -bsd_echo () + bsd_echo () { cat </dev/null + if (alias echo=bsd_echo) 2>/dev/null; then + alias echo=bsd_echo 2>/dev/null + fi fi if test -z "$have_echo" \ && echo '\t' | grep t > /dev/null; then have_echo=yes fi if test -z "$have_echo"; then - unalias echo 2>/dev/null + if (alias echo=bsd_echo) 2>/dev/null; then + unalias echo 2>/dev/null + fi fi # For Solaris /bin/sh and OSF/1 /bin/sh: respawn using /bin/ksh. if test -z "$have_echo" \ @@ -861,7 +893,8 @@ fi # Command-line option processing. # Removes the OPTIONS from the arguments. Sets the variables: -# - mode list or import or create-testdir or create-megatestdir +# - mode list or import or add-import or remove-import or update +# or create-testdir or create-megatestdir # - destdir from --dir # - local_gnulib_dir from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules @@ -957,6 +990,12 @@ fi --import | --impor | --impo | --imp | --im | --i ) mode=import shift ;; + --add-import | --add-impor | --add-impo | --add-imp | --add-im | --add-i | --add- | --add | --ad ) + mode=add-import + shift ;; + --remove-import | --remove-impor | --remove-impo | --remove-imp | --remove-im | --remove-i | --remove- | --remove | --remov | --remo | --rem | --re | --r ) + mode=remove-import + shift ;; --update | --updat | --upda | --upd | --up | --u ) mode=update shift ;; @@ -1214,14 +1253,27 @@ fi esac done - if test "$mode" = import; then + if case "$mode" in import | add-import | remove-import) true;; *) false;; esac; then if test -n "$excl_cxx_tests" || test -n "$excl_longrunning_tests" \ || test -n "$excl_privileged_tests" || test -n "$excl_unportable_tests"; then - echo "gnulib-tool: invalid options for 'import' mode" 1>&2 + echo "gnulib-tool: invalid options for '$mode' mode" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 func_exit 1 fi fi + # This code helps migrating from --import to --add-import or --update. It can + # be removed on 2012-01-01. + if test "$mode" = import && test $# = 0; then + echo "gnulib-tool: cowardly refusing to erase the module list." 1>&2 + echo "The meaning of the option '--import' has changed." 1>&2 + echo "See the documentation at" 1>&2 + echo "." 1>&2 + echo "For updating to a newer version of gnulib, use" 1>&2 + echo " gnulib-tool --add-import" 1>&2 + echo "For restoring files that were omitted from version control, use" 1>&2 + echo " gnulib-tool --update" 1>&2 + func_exit 1 + fi if test "$mode" = update; then if test $# != 0; then echo "gnulib-tool: too many arguments in 'update' mode" 1>&2 @@ -1264,7 +1316,8 @@ fi DEFAULT_AUTOCONF_MINVERSION="2.59" autoconf_minversion= configure_ac= - if { test "$mode" = import || test "$mode" = update; } && test -n "$destdir"; then + if case "$mode" in import | add-import | remove-import | update) true;; *) false;; esac \ + && test -n "$destdir"; then if test -f "$destdir"/configure.ac; then configure_ac="$destdir/configure.ac" else @@ -1283,7 +1336,7 @@ fi fi if test -n "$configure_ac"; then # Use sed, not autoconf --trace, to look for the AC_PREREQ invocation, - # because when some m4 files are omitted from a CVS repository, + # because when some m4 files are omitted from a version control repository, # "autoconf --trace=AC_PREREQ" fails with an error message like this: # m4: aclocal.m4:851: Cannot open m4/absolute-header.m4: No such file or directory # autom4te: m4 failed with exit status: 1 @@ -1350,6 +1403,15 @@ for signal in 1 2 3 13 15; do done signal=0 +# Note: The 'eval' silences stderr output in dash. +if (declare -A x && { x[f/2]='foo'; x[f/3]='bar'; eval test '${x[f/2]}' = foo; }) 2>/dev/null; then + # Zsh 4 and Bash 4 have associative arrays. + have_associative=true +else + # For other shells, use 'eval' with computed shell variable names. + have_associative=false +fi + # func_lookup_file file # looks up a file in $local_gnulib_dir or $gnulib_dir, or combines it through # 'patch'. @@ -1533,15 +1595,6 @@ sed_extract_field_header=' if $modcache; then - # Note: The 'eval' silences stderr output in dash. - if (declare -A x && { x[f/2]='foo'; x[f/3]='bar'; eval test '${x[f/2]}' = foo; }) 2>/dev/null; then - # Zsh 4 and Bash 4 have associative arrays. - have_associative=true - else - # For other shells, use 'eval' with computed shell variable names. - have_associative=false - fi - if $have_associative; then # Declare the associative arrays. @@ -1564,11 +1617,11 @@ if $modcache; then # ${param//pattern/replacement} # as a shorthand for # `echo "$param" | sed -e "s/pattern/replacement/g"`. - # Note: The 'eval' above silences stderr output in dash. - func_cache_var () + # Note: The 'eval' is necessary for dash and NetBSD /bin/sh. + eval 'func_cache_var () { cachevar=c_${1//[!a-zA-Z0-9_]/_} - } + }' else func_cache_var () { @@ -1753,7 +1806,7 @@ if $modcache; then func_cache_lookup_module () { if $have_associative; then - cached=${modcache_cached[$1]} + eval 'cached=${modcache_cached[$1]}' else func_cache_var "$1" eval "cached=\"\$${cachevar}_cached\"" @@ -1762,7 +1815,7 @@ if $modcache; then # Not found in cache. Look it up on the file system. func_lookup_file "modules/$1" if $have_associative; then - modcache_cached[$1]=yes + eval 'modcache_cached[$1]=yes' else eval "${cachevar}_cached=\"\$1\"" fi @@ -1797,8 +1850,8 @@ func_get_description () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_description[$1]+set}"; then - echo "${modcache_description[$1]}" + if eval 'test -n "${modcache_description[$1]+set}"'; then + eval 'echo "${modcache_description[$1]}"' fi else eval "field_set=\"\$${cachevar}_description_set\"" @@ -1823,8 +1876,8 @@ func_get_comment () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_comment[$1]+set}"; then - echo "${modcache_comment[$1]}" + if eval 'test -n "${modcache_comment[$1]+set}"'; then + eval 'echo "${modcache_comment[$1]}"' fi else eval "field_set=\"\$${cachevar}_comment_set\"" @@ -1849,8 +1902,8 @@ func_get_status () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_status[$1]+set}"; then - echo "${modcache_status[$1]}" + if eval 'test -n "${modcache_status[$1]+set}"'; then + eval 'echo "${modcache_status[$1]}"' fi else eval "field_set=\"\$${cachevar}_status_set\"" @@ -1875,8 +1928,8 @@ func_get_notice () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_notice[$1]+set}"; then - echo "${modcache_notice[$1]}" + if eval 'test -n "${modcache_notice[$1]+set}"'; then + eval 'echo "${modcache_notice[$1]}"' fi else eval "field_set=\"\$${cachevar}_notice_set\"" @@ -1902,7 +1955,7 @@ func_get_applicability () func_cache_lookup_module "$1" # Get the field's value, without the final newline. if $have_associative; then - my_applicability="${modcache_applicability[$1]}" + eval 'my_applicability="${modcache_applicability[$1]}"' else eval "my_applicability=\"\$${cachevar}_applicability\"" fi @@ -1931,8 +1984,8 @@ func_get_filelist () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_files[$1]+set}"; then - echo "${modcache_files[$1]}" + if eval 'test -n "${modcache_files[$1]+set}"'; then + eval 'echo "${modcache_files[$1]}"' fi else eval "field_set=\"\$${cachevar}_files_set\"" @@ -2022,8 +2075,8 @@ func_get_dependencies () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_dependson[$1]+set}"; then - echo "${modcache_dependson[$1]}" + if eval 'test -n "${modcache_dependson[$1]+set}"'; then + eval 'echo "${modcache_dependson[$1]}"' fi else eval "field_set=\"\$${cachevar}_dependson_set\"" @@ -2048,8 +2101,8 @@ func_get_autoconf_early_snippet () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_configureac_early[$1]+set}"; then - echo "${modcache_configureac_early[$1]}" + if eval 'test -n "${modcache_configureac_early[$1]+set}"'; then + eval 'echo "${modcache_configureac_early[$1]}"' fi else eval "field_set=\"\$${cachevar}_configureac_early_set\"" @@ -2074,8 +2127,8 @@ func_get_autoconf_snippet () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_configureac[$1]+set}"; then - echo "${modcache_configureac[$1]}" + if eval 'test -n "${modcache_configureac[$1]+set}"'; then + eval 'echo "${modcache_configureac[$1]}"' fi else eval "field_set=\"\$${cachevar}_configureac_set\"" @@ -2100,8 +2153,8 @@ func_get_automake_snippet () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_makefile[$1]+set}"; then - echo "${modcache_makefile[$1]}" + if eval 'test -n "${modcache_makefile[$1]+set}"'; then + eval 'echo "${modcache_makefile[$1]}"' fi else eval "field_set=\"\$${cachevar}_makefile_set\"" @@ -2138,8 +2191,8 @@ func_get_automake_snippet () sed -n -e "/^Makefile\.am$sed_extract_prog" < "$lookedup_file" else if $have_associative; then - if test -n "${modcache_makefile[$1]+set}"; then - echo "${modcache_makefile[$1]}" + if eval 'test -n "${modcache_makefile[$1]+set}"'; then + eval 'echo "${modcache_makefile[$1]}"' fi else eval 'field_set="$'"${cachevar}"'_makefile_set"' @@ -2175,6 +2228,7 @@ func_get_automake_snippet () # automake will generate a useless dependency; this is harmless. case "$1" in relocatable-prog-wrapper) ;; + pt_chown) ;; *) func_filter_filelist extra_files "$nl" "$extra_files" '' '.c' '' '' if test -n "$extra_files"; then @@ -2215,8 +2269,8 @@ func_get_include_directive () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_include[$1]+set}"; then - echo "${modcache_include[$1]}" + if eval 'test -n "${modcache_include[$1]+set}"'; then + eval 'echo "${modcache_include[$1]}"' fi else eval "field_set=\"\$${cachevar}_include_set\"" @@ -2242,8 +2296,8 @@ func_get_link_directive () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_link[$1]+set}"; then - echo "${modcache_link[$1]}" + if eval 'test -n "${modcache_link[$1]+set}"'; then + eval 'echo "${modcache_link[$1]}"' fi else eval "field_set=\"\$${cachevar}_link_set\"" @@ -2269,8 +2323,8 @@ func_get_license () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_license[$1]+set}"; then - echo "${modcache_license[$1]}" + if eval 'test -n "${modcache_license[$1]+set}"'; then + eval 'echo "${modcache_license[$1]}"' fi else eval "field_set=\"\$${cachevar}_license_set\"" @@ -2298,8 +2352,8 @@ func_get_maintainer () func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then - if test -n "${modcache_maintainer[$1]+set}"; then - echo "${modcache_maintainer[$1]}" + if eval 'test -n "${modcache_maintainer[$1]+set}"'; then + eval 'echo "${modcache_maintainer[$1]}"' fi else eval "field_set=\"\$${cachevar}_maintainer_set\"" @@ -2877,6 +2931,18 @@ func_emit_lib_Makefile_am () echo "EXTRA_${libname}_${libext}_SOURCES =" if test "$libtool" = true; then echo "${libname}_${libext}_LDFLAGS = \$(AM_LDFLAGS)" + echo "${libname}_${libext}_LDFLAGS += -no-undefined" + # Synthesize an ${libname}_${libext}_LDFLAGS augmentation by combining + # the link dependencies of all modules. + for module in $modules; do + func_verify_nontests_module + if test -n "$module"; then + func_get_link_directive "$module" + fi + done \ + | LC_ALL=C sed -e '/^$/d' -e 's/ when linking with libtool.*//' \ + | LC_ALL=C sort -u \ + | LC_ALL=C sed -e 's/^/'"${libname}_${libext}"'_LDFLAGS += /' fi echo if test -n "$pobase"; then @@ -3308,6 +3374,7 @@ func_emit_initmacro_done () # func_import modules # Uses also the variables +# - mode import or add-import or remove-import or update # - destdir target directory # - local_gnulib_dir from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules @@ -3351,6 +3418,8 @@ func_emit_initmacro_done () func_import () { # Get the cached settings. + # In 'import' mode, we read them only for the purpose of knowing the old + # installed file list, and don't use them as defaults. cached_local_gnulib_dir= cached_specified_modules= cached_incobsolete= @@ -3480,130 +3549,174 @@ func_import () fi fi - # Merge the cached settings with the specified ones. - # The m4base must be the same as expected from the pathname. - if test -n "$cached_m4base" && test "$cached_m4base" != "$m4base"; then - func_fatal_error "$m4base/gnulib-cache.m4 is expected to contain gl_M4_BASE([$m4base])" - fi - # The local_gnulib_dir defaults to the cached one. Recall that the cached one - # is relative to $destdir, whereas the one we use is relative to . or absolute. - if test -z "$local_gnulib_dir"; then - if test -n "$cached_local_gnulib_dir"; then - case "$destdir" in - /*) - local_gnulib_dir="$destdir/$cached_local_gnulib_dir" ;; - *) - case "$cached_local_gnulib_dir" in - /*) - local_gnulib_dir="$destdir/$cached_local_gnulib_dir" ;; - *) - func_relconcat "$destdir" "$cached_local_gnulib_dir" - local_gnulib_dir="$relconcat" ;; - esac ;; - esac + if test "$mode" = import; then + # In 'import' mode, the new set of specified modules overrides the cached + # set of modules. Ignore the cached settings. + specified_modules="$1" + else + # Merge the cached settings with the specified ones. + # The m4base must be the same as expected from the pathname. + if test -n "$cached_m4base" && test "$cached_m4base" != "$m4base"; then + func_fatal_error "$m4base/gnulib-cache.m4 is expected to contain gl_M4_BASE([$m4base])" fi - fi - # Append the cached and the specified module names. So that - # "gnulib-tool --import foo" means to add the module foo. - specified_modules="$cached_specified_modules $1" - # Included obsolete modules among the dependencies if specified either way. - if test -z "$incobsolete"; then - incobsolete="$cached_incobsolete" - fi - # Included special kinds of tests modules among the dependencies if specified - # either way. - if test -z "$inc_cxx_tests"; then - inc_cxx_tests="$cached_inc_cxx_tests" - fi - if test -z "$inc_longrunning_tests"; then - inc_longrunning_tests="$cached_inc_longrunning_tests" - fi - if test -z "$inc_privileged_tests"; then - inc_privileged_tests="$cached_inc_privileged_tests" - fi - if test -z "$inc_unportable_tests"; then - inc_unportable_tests="$cached_inc_unportable_tests" - fi - if test -z "$inc_all_tests"; then - inc_all_tests="$cached_inc_all_tests" - fi - # --without-*-tests options are not supported here. - excl_cxx_tests= - excl_longrunning_tests= - excl_privileged_tests= - excl_unportable_tests= - # Append the cached and the specified avoidlist. This is probably better - # than dropping the cached one when --avoid is specified at least once. - avoidlist=`for m in $cached_avoidlist $avoidlist; do echo $m; done | LC_ALL=C sort -u` - avoidlist=`echo $avoidlist` - - # The sourcebase defaults to the cached one. - if test -z "$sourcebase"; then - sourcebase="$cached_sourcebase" + # The local_gnulib_dir defaults to the cached one. Recall that the cached one + # is relative to $destdir, whereas the one we use is relative to . or absolute. + if test -z "$local_gnulib_dir"; then + if test -n "$cached_local_gnulib_dir"; then + case "$destdir" in + /*) + local_gnulib_dir="$destdir/$cached_local_gnulib_dir" ;; + *) + case "$cached_local_gnulib_dir" in + /*) + local_gnulib_dir="$destdir/$cached_local_gnulib_dir" ;; + *) + func_relconcat "$destdir" "$cached_local_gnulib_dir" + local_gnulib_dir="$relconcat" ;; + esac ;; + esac + fi + fi + case $mode in + add-import) + # Append the cached and the specified module names. So that + # "gnulib-tool --add-import foo" means to add the module foo. + specified_modules="$cached_specified_modules $1" + ;; + remove-import) + # Take the cached module names, minus the specified module names. + specified_modules= + if $have_associative; then + # Use an associative array, for O(N) worst-case run time. + declare -A to_remove + for m in $1; do + eval 'to_remove[$m]=yes' + done + for module in $cached_specified_modules; do + if eval 'test -z "${to_remove[$module]}"'; then + func_append specified_modules "$module " + fi + done + else + # This loop has O(N²) worst-case run time. + for module in $cached_specified_modules; do + to_remove= + for m in $1; do + if test "$m" = "$module"; then + to_remove=yes + break + fi + done + if test -z "$to_remove"; then + func_append specified_modules "$module " + fi + done + fi + ;; + update) + # Take the cached module names. There are no specified module names. + specified_modules="$cached_specified_modules" + ;; + esac + # Included obsolete modules among the dependencies if specified either way. + if test -z "$incobsolete"; then + incobsolete="$cached_incobsolete" + fi + # Included special kinds of tests modules among the dependencies if specified + # either way. + if test -z "$inc_cxx_tests"; then + inc_cxx_tests="$cached_inc_cxx_tests" + fi + if test -z "$inc_longrunning_tests"; then + inc_longrunning_tests="$cached_inc_longrunning_tests" + fi + if test -z "$inc_privileged_tests"; then + inc_privileged_tests="$cached_inc_privileged_tests" + fi + if test -z "$inc_unportable_tests"; then + inc_unportable_tests="$cached_inc_unportable_tests" + fi + if test -z "$inc_all_tests"; then + inc_all_tests="$cached_inc_all_tests" + fi + # Append the cached and the specified avoidlist. This is probably better + # than dropping the cached one when --avoid is specified at least once. + avoidlist=`for m in $cached_avoidlist $avoidlist; do echo $m; done | LC_ALL=C sort -u` + avoidlist=`echo $avoidlist` + + # The sourcebase defaults to the cached one. if test -z "$sourcebase"; then - func_fatal_error "missing --source-base option" + sourcebase="$cached_sourcebase" + if test -z "$sourcebase"; then + func_fatal_error "missing --source-base option" + fi fi - fi - # The pobase defaults to the cached one. - if test -z "$pobase"; then - pobase="$cached_pobase" - fi - # The docbase defaults to the cached one. - if test -z "$docbase"; then - docbase="$cached_docbase" + # The pobase defaults to the cached one. + if test -z "$pobase"; then + pobase="$cached_pobase" + fi + # The docbase defaults to the cached one. if test -z "$docbase"; then - 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." + docbase="$cached_docbase" + if test -z "$docbase"; then + 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." + fi fi - fi - # The testsbase defaults to the cached one. - if test -z "$testsbase"; then - testsbase="$cached_testsbase" + # The testsbase defaults to the cached one. if test -z "$testsbase"; then - func_fatal_error "missing --tests-base option" + testsbase="$cached_testsbase" + if test -z "$testsbase"; then + func_fatal_error "missing --tests-base option" + fi fi - fi - # Require the tests if specified either way. - if test -z "$inctests"; then - inctests="$cached_inctests" - fi - # The libname defaults to the cached one. - if test -z "$supplied_libname"; then - libname="$cached_libname" - if test -z "$libname"; then - func_fatal_error "missing --lib option" + # Require the tests if specified either way. + if test -z "$inctests"; then + inctests="$cached_inctests" fi - fi - # Require LGPL if specified either way. - if test -z "$lgpl"; then - lgpl="$cached_lgpl" - fi - # The makefile_name defaults to the cached one. - if test -z "$makefile_name"; then - makefile_name="$cached_makefile_name" - fi - # Use libtool if specified either way, or if guessed. - if test -z "$libtool"; then - if test -n "$cached_m4base"; then - libtool="$cached_libtool" - else - libtool="$guessed_libtool" + # The libname defaults to the cached one. + if test -z "$supplied_libname"; then + libname="$cached_libname" + if test -z "$libname"; then + func_fatal_error "missing --lib option" + fi fi - fi - # The macro_prefix defaults to the cached one. - if test -z "$macro_prefix"; then - macro_prefix="$cached_macro_prefix" + # Require LGPL if specified either way. + if test -z "$lgpl"; then + lgpl="$cached_lgpl" + fi + # The makefile_name defaults to the cached one. + if test -z "$makefile_name"; then + makefile_name="$cached_makefile_name" + fi + # Use libtool if specified either way, or if guessed. + if test -z "$libtool"; then + if test -n "$cached_m4base"; then + libtool="$cached_libtool" + else + libtool="$guessed_libtool" + fi + fi + # The macro_prefix defaults to the cached one. if test -z "$macro_prefix"; then - func_fatal_error "missing --macro-prefix option" + macro_prefix="$cached_macro_prefix" + if test -z "$macro_prefix"; then + func_fatal_error "missing --macro-prefix option" + fi + fi + # The po_domain defaults to the cached one. + if test -z "$po_domain"; then + po_domain="$cached_po_domain" + fi + # The vc_files defaults to the cached one. + if test -z "$vc_files"; then + vc_files="$cached_vc_files" fi fi - # The po_domain defaults to the cached one. - if test -z "$po_domain"; then - po_domain="$cached_po_domain" - fi - # The vc_files defaults to the cached one. - if test -z "$vc_files"; then - vc_files="$cached_vc_files" - fi + # --without-*-tests options are not supported here. + excl_cxx_tests= + excl_longrunning_tests= + excl_privileged_tests= + excl_unportable_tests= # Canonicalize the list of specified modules. specified_modules=`for m in $specified_modules; do echo $m; done | LC_ALL=C sort -u` @@ -3742,11 +3855,16 @@ s,^\(.................................................[^ ]*\) *, yes | 3) sed_transform_main_lib_file=$sed_transform_main_lib_file' s/GNU General/GNU Lesser General/g + s/General Public License/Lesser General Public License/g + s/Lesser Lesser General Public License/Lesser General Public License/g ' ;; 2) sed_transform_main_lib_file=$sed_transform_main_lib_file' s/GNU General/GNU Lesser General/g + s/General Public License/Lesser General Public License/g + s/Lesser Lesser General Public License/Lesser General Public License/g + s/version [23]\([ ,]\)/version 2.1\1/g ' ;; @@ -3756,7 +3874,11 @@ s,^\(.................................................[^ ]*\) *, # Update license. sed_transform_main_lib_file=$sed_transform_main_lib_file' s/GNU Lesser General/GNU General/g + s/Lesser General Public License/General Public License/g + s/GNU Library General/GNU General/g + s/Library General Public License/General Public License/g + s/version 2\(.1\)\{0,1\}\([ ,]\)/version 3\2/g ' fi @@ -3768,7 +3890,11 @@ s,^\(.................................................[^ ]*\) *, # Update license. sed_transform_build_aux_file=$sed_transform_build_aux_file' s/GNU Lesser General/GNU General/g + s/Lesser General Public License/General Public License/g + s/GNU Library General/GNU General/g + s/Library General Public License/General Public License/g + s/version 2\(.1\)\{0,1\}\([ ,]\)/version 3\2/g ' fi @@ -3779,7 +3905,11 @@ s,^\(.................................................[^ ]*\) *, # Update license. sed_transform_testsrelated_lib_file=$sed_transform_testsrelated_lib_file' s/GNU Lesser General/GNU General/g + s/Lesser General Public License/General Public License/g + s/GNU Library General/GNU General/g + s/Library General Public License/General Public License/g + s/version 2\(.1\)\{0,1\}\([ ,]\)/version 3\2/g ' fi @@ -3946,7 +4076,7 @@ s,^\(.................................................[^ ]*\) *, 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. + # frequently that developers don't put autogenerated files under version control. func_add_file func_append added_files "$g$nl" fi @@ -4276,8 +4406,8 @@ s,//*$,/,' echo "#" echo "# This file represents the specification of how gnulib-tool is used." echo "# It acts as a cache: It is written and read by gnulib-tool." - echo "# In projects using CVS, this file is meant to be stored in CVS," - echo "# like the configure.ac and various Makefile.am files." + echo "# In projects that use version control, this file is meant to be put under" + echo "# version control, like the configure.ac and various Makefile.am files." echo echo echo "# Specification in the form of a command-line invocation:" @@ -4370,7 +4500,8 @@ s,//*$,/,' echo "# This file represents the compiled summary of the specification in" echo "# gnulib-cache.m4. It lists the computed macro invocations that need" echo "# to be invoked from configure.ac." - echo "# In projects using CVS, this file can be treated like other built files." + echo "# In projects that use version control, this file can be treated like" + echo "# other built files." echo echo echo "# This macro should be invoked from $configure_ac, in the section" @@ -4470,7 +4601,7 @@ s,//*$,/,' # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is # created using libtool, because libtool already handles the dependencies. if test "$libtool" != true; then - libname_upper=`echo "$libname" | LC_ALL=C tr 'a-z-' 'A-Z_'` + libname_upper=`echo "$libname" | LC_ALL=C tr '[a-z]-' '[A-Z]_'` echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\"" echo " AC_SUBST([${libname_upper}_LIBDEPS])" echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\"" @@ -4850,6 +4981,11 @@ func_create_testdir () echo "File list:" echo "$files" | sed -e 's/^/ /' fi + # Add files for which the copy in gnulib is newer than the one that + # "automake --add-missing --copy" would provide. + files="$files build-aux/config.guess" + files="$files build-aux/config.sub" + files=`for f in $files; do echo $f; done | LC_ALL=C sort -u` rewritten='%REWRITTEN%' sed_rewrite_files="\ @@ -5022,6 +5158,12 @@ func_create_testdir () *) func_get_autoconf_snippet "$module" \ | sed -e "$sed_replace_build_aux" + if test "$module" = 'alloca' && test "$libtool" = true; then + echo 'changequote(,)dnl' + echo 'LTALLOCA=`echo "$ALLOCA" | sed -e '"'"'s/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'"'"'`' + echo 'changequote([, ])dnl' + echo 'AC_SUBST([LTALLOCA])' + fi ;; esac fi @@ -5038,7 +5180,7 @@ func_create_testdir () # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is # created using libtool, because libtool already handles the dependencies. if test "$libtool" != true; then - libname_upper=`echo "$libname" | LC_ALL=C tr 'a-z-' 'A-Z_'` + libname_upper=`echo "$libname" | LC_ALL=C tr '[a-z]-' '[A-Z]_'` echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\"" echo " AC_SUBST([${libname_upper}_LIBDEPS])" echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\"" @@ -5144,13 +5286,19 @@ func_create_testdir () if test -n "$module"; then func_get_autoconf_snippet "$module" \ | sed -e "$sed_replace_build_aux" + if test "$module" = 'alloca' && test "$libtool" = true; then + echo 'changequote(,)dnl' + echo 'LTALLOCA=`echo "$ALLOCA" | sed -e '"'"'s/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'"'"'`' + echo 'changequote([, ])dnl' + echo 'AC_SUBST([LTALLOCA])' + fi fi done func_emit_initmacro_end $macro_prefix # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is # created using libtool, because libtool already handles the dependencies. if test "$libtool" != true; then - libname_upper=`echo "$libname" | LC_ALL=C tr 'a-z-' 'A-Z_'` + libname_upper=`echo "$libname" | LC_ALL=C tr '[a-z]-' '[A-Z]_'` echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\"" echo " AC_SUBST([${libname_upper}_LIBDEPS])" echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\"" @@ -5223,7 +5371,7 @@ func_create_testdir () ) || func_exit 1 fi # Need to run configure and make once, to create built files that are to be - # distributed (such as getdate.c). + # distributed (such as parse-datetime.c). sed_remove_make_variables='s,[$]([A-Za-z0-9_]*),,g' # Extract the value of "CLEANFILES += ..." and "MOSTLYCLEANFILES += ...". cleaned_files=`sed -e "$sed_remove_backslash_newline" < "$testdir/$sourcebase/Makefile.am" \ @@ -5428,7 +5576,7 @@ s/\([.*$]\)/[\1]/g' done ;; - import | update ) + import | add-import | remove-import | update ) # Where to import. if test -z "$destdir"; then @@ -5468,95 +5616,109 @@ s/\([.*$]\)/[\1]/g' fi # Determine where to apply func_import. - if test -n "$m4base"; then + if test "$mode" = import; then # Apply func_import to a particular gnulib directory. - # Any number of additional modules can be given. - if test ! -f "$destdir/$m4base"/gnulib-cache.m4; then - # First use of gnulib in the given m4base. - test -n "$supplied_libname" || supplied_libname=true - test -n "$sourcebase" || sourcebase="lib" - test -n "$docbase" || docbase="doc" - test -n "$testsbase" || testsbase="tests" - test -n "$macro_prefix" || macro_prefix="gl" - fi + # The command line contains the complete specification; don't look at + # the contents of gnulib-cache.m4. + test -n "$supplied_libname" || supplied_libname=true + test -n "$sourcebase" || sourcebase="lib" + test -n "$m4base" || m4base="m4" + test -n "$docbase" || docbase="doc" + test -n "$testsbase" || testsbase="tests" + test -n "$macro_prefix" || macro_prefix="gl" func_import "$*" else - # Apply func_import to all gnulib directories. - # To get this list of directories, look at Makefile.am. (Not at - # configure, because it may be omitted from CVS. Also, don't run - # "find $destdir -name gnulib-cache.m4", as it might be too expensive.) - m4dirs= - m4dirs_count=0 - if test -f "$destdir"/Makefile.am; then - 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 - # Ignore absolute directory pathnames, like /usr/local/share/aclocal. - case "$arg" in - /*) ;; - *) - if test -f "$destdir/$arg"/gnulib-cache.m4; then - func_append m4dirs " $arg" - m4dirs_count=`expr $m4dirs_count + 1` - fi - ;; - esac - m4dir_is_next= - else - if test "X$arg" = "X-I"; then - m4dir_is_next=yes - else + if test -n "$m4base"; then + # Apply func_import to a particular gnulib directory. + # Any number of additional modules can be given. + if test ! -f "$destdir/$m4base"/gnulib-cache.m4; then + # First use of gnulib in the given m4base. + test -n "$supplied_libname" || supplied_libname=true + test -n "$sourcebase" || sourcebase="lib" + test -n "$docbase" || docbase="doc" + test -n "$testsbase" || testsbase="tests" + test -n "$macro_prefix" || macro_prefix="gl" + fi + func_import "$*" + else + # Apply func_import to all gnulib directories. + # To get this list of directories, look at Makefile.am. (Not at + # configure, because it may be omitted from version control. Also, + # don't run "find $destdir -name gnulib-cache.m4", as it might be + # too expensive.) + m4dirs= + m4dirs_count=0 + if test -f "$destdir"/Makefile.am; then + 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 + # Ignore absolute directory pathnames, like /usr/local/share/aclocal. + case "$arg" in + /*) ;; + *) + if test -f "$destdir/$arg"/gnulib-cache.m4; then + func_append m4dirs " $arg" + m4dirs_count=`expr $m4dirs_count + 1` + fi + ;; + esac m4dir_is_next= + else + if test "X$arg" = "X-I"; then + m4dir_is_next=yes + else + m4dir_is_next= + fi fi + done + else + # No Makefile.am! Oh well. Look at the last generated aclocal.m4. + if test -f "$destdir"/aclocal.m4; then + sedexpr1='s,^m4_include(\[\(.*\)])$,\1,p' + sedexpr2='s,^[^/]*$,.,' + sedexpr3='s,/[^/]*$,,' + m4dirs=`sed -n -e "$sedexpr1" aclocal.m4 | sed -e "$sedexpr2" -e "$sedexpr3" | LC_ALL=C sort -u` + m4dirs=`for arg in $m4dirs; do if test -f "$destdir/$arg"/gnulib-cache.m4; then echo $arg; fi; done` + m4dirs_count=`for arg in $m4dirs; do echo "$arg"; done | wc -l` fi - done - else - # No Makefile.am! Oh well. Look at the last generated aclocal.m4. - if test -f "$destdir"/aclocal.m4; then - sedexpr1='s,^m4_include(\[\(.*\)])$,\1,p' - sedexpr2='s,^[^/]*$,.,' - sedexpr3='s,/[^/]*$,,' - m4dirs=`sed -n -e "$sedexpr1" aclocal.m4 | sed -e "$sedexpr2" -e "$sedexpr3" | LC_ALL=C sort -u` - m4dirs=`for arg in $m4dirs; do if test -f "$destdir/$arg"/gnulib-cache.m4; then echo $arg; fi; done` - m4dirs_count=`printf %s "$m4dirs" | wc -l` fi - fi - if test $m4dirs_count = 0; then - # First use of gnulib in a package. - # Any number of additional modules can be given. - test -n "$supplied_libname" || supplied_libname=true - test -n "$sourcebase" || sourcebase="lib" - m4base="m4" - test -n "$docbase" || docbase="doc" - test -n "$testsbase" || testsbase="tests" - test -n "$macro_prefix" || macro_prefix="gl" - func_import "$*" - else - if test $m4dirs_count = 1; then - # There's only one use of gnulib here. Assume the user means it. + if test $m4dirs_count = 0; then + # First use of gnulib in a package. # Any number of additional modules can be given. - for m4base in $m4dirs; do - func_import "$*" - done + test -n "$supplied_libname" || supplied_libname=true + test -n "$sourcebase" || sourcebase="lib" + m4base="m4" + test -n "$docbase" || docbase="doc" + test -n "$testsbase" || testsbase="tests" + test -n "$macro_prefix" || macro_prefix="gl" + func_import "$*" else - # Ambiguous - guess what the user meant. - if test $# = 0; then - # No further arguments. Guess the user wants to update all of them. + if test $m4dirs_count = 1; then + # There's only one use of gnulib here. Assume the user means it. + # Any number of additional modules can be given. for m4base in $m4dirs; do - # Perform func_import in a subshell, so that variable values - # such as - # local_gnulib_dir, incobsolete, inc_cxx_tests, - # inc_longrunning_tests, inc_privileged_tests, - # inc_unportable_tests, inc_all_tests, avoidlist, sourcebase, - # m4base, pobase, docbase, testsbase, inctests, libname, lgpl, - # makefile_name, libtool, macro_prefix, po_domain, vc_files - # don't propagate from one directory to another. - (func_import) || func_exit 1 + func_import "$*" done else - # Really ambiguous. - func_fatal_error "Ambiguity: to which directory should the modules be added? Please specify at least --m4-base=..." + # Ambiguous - guess what the user meant. + if test $# = 0; then + # No further arguments. Guess the user wants to update all of them. + for m4base in $m4dirs; do + # Perform func_import in a subshell, so that variable values + # such as + # local_gnulib_dir, incobsolete, inc_cxx_tests, + # inc_longrunning_tests, inc_privileged_tests, + # inc_unportable_tests, inc_all_tests, avoidlist, sourcebase, + # m4base, pobase, docbase, testsbase, inctests, libname, lgpl, + # makefile_name, libtool, macro_prefix, po_domain, vc_files + # don't propagate from one directory to another. + (func_import) || func_exit 1 + done + else + # Really ambiguous. + func_fatal_error "Ambiguity: to which directory should the modules be added? Please specify at least --m4-base=..." + fi fi fi fi @@ -5823,7 +5985,8 @@ s/\([.*$]\)/[\1]/g' 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. + # frequently that developers don't put autogenerated files under version + # control. func_add_file fi rm -f "$tmpfile"