X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=gnulib-tool;h=2e27e6ce186fb8ec637a5101504c080060af1deb;hb=8431f7eec301c380d3e287acdb9d6dc491aff344;hp=a36809afc1983e71043a7b15f9139d5f49f38e32;hpb=28a95c3a8a5db3b8d5da92524e840f4205b6bde6;p=gnulib.git diff --git a/gnulib-tool b/gnulib-tool index a36809afc..2e27e6ce1 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -22,7 +22,7 @@ progname=$0 package=gnulib -cvsdatestamp='$Date: 2006-07-31 11:37:23 $' +cvsdatestamp='$Date: 2006-08-28 15:22:55 $' last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'` version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'` @@ -59,6 +59,9 @@ if test -z "$SORT"; then SORT=sort fi +nl=' +' + # func_usage # outputs to stdout the --help usage message. func_usage () @@ -134,6 +137,9 @@ Options for --import: This option can be repeated. --lgpl Abort if modules aren't available under the LGPL. Also modify license template from GPL to LGPL. + --makefile-name=NAME Name of makefile in automake syntax in the + source-base and tests-base directories + (default \"Makefile.am\"). --libtool Use libtool rules. --no-libtool Don't use libtool rules. --macro-prefix=PREFIX Specify the prefix of the macros 'gl_EARLY' and @@ -246,10 +252,104 @@ func_ln_if_changed () fi } +# func_relativize DIR1 DIR2 +# computes a relative pathname RELDIR such that DIR1/RELDIR = DIR2. +# Input: +# - DIR1 relative pathname, relative to the current directory +# - DIR2 relative pathname, relative to the current directory +# Output: +# - reldir relative pathname of DIR2, relative to DIR1 +func_relativize () +{ + dir0=`pwd` + dir1="$1" + dir2="$2" + sed_first='s,^\([^/]*\)/.*$,\1,' + sed_rest='s,^[^/]*/*,,' + sed_last='s,^.*/\([^/]*\)$,\1,' + sed_butlast='s,/*[^/]*$,,' + while test -n "$dir1"; do + first=`echo "$dir1" | sed -e "$sed_first"` + if test "$first" != "."; then + if test "$first" = ".."; then + dir2=`echo "$dir0" | sed -e "$sed_last"`/"$dir2" + dir0=`echo "$dir0" | sed -e "$sed_butlast"` + else + first2=`echo "$dir2" | sed -e "$sed_first"` + if test "$first2" = "$first"; then + dir2=`echo "$dir2" | sed -e "$sed_rest"` + else + dir2="../$dir2" + fi + dir0="$dir0"/"$first" + fi + fi + dir1=`echo "$dir1" | sed -e "$sed_rest"` + done + reldir="$dir2" +} + +# func_relconcat DIR1 DIR2 +# computes a relative pathname DIR1/DIR2, with obvious simplifications. +# Input: +# - DIR1 relative pathname, relative to the current directory +# - DIR2 relative pathname, relative to DIR1 +# Output: +# - relconcat DIR1/DIR2, relative to the current directory +func_relconcat () +{ + dir1="$1" + dir2="$2" + sed_first='s,^\([^/]*\)/.*$,\1,' + sed_rest='s,^[^/]*/*,,' + sed_last='s,^.*/\([^/]*\)$,\1,' + sed_butlast='s,/*[^/]*$,,' + while true; do + first=`echo "$dir2" | sed -e "$sed_first"` + if test "$first" = "."; then + dir2=`echo "$dir2" | sed -e "$sed_rest"` + if test -z "$dir2"; then + relconcat="$dir1" + break + fi + else + last=`echo "$dir1" | sed -e "$sed_last"` + while test "$last" = "."; do + dir1=`echo "$dir1" | sed -e "$sed_butlast"` + last=`echo "$dir1" | sed -e "$sed_last"` + done + if test -z "$dir1"; then + relconcat="$dir2" + break + fi + if test "$first" = ".."; then + if test "$last" = ".."; then + relconcat="$dir1/$dir2" + break + fi + dir1=`echo "$dir1" | sed -e "$sed_butlast"` + dir2=`echo "$dir2" | sed -e "$sed_rest"` + if test -z "$dir1"; then + relconcat="$dir2" + break + fi + if test -z "$dir2"; then + relconcat="$dir1" + break + fi + else + relconcat="$dir1/$dir2" + break + fi + fi + done +} + # Command-line option processing. # Removes the OPTIONS from the arguments. Sets the variables: # - mode list or import or create-testdir or create-megatestdir # - destdir from --dir +# - local_gnulib_dir from --local-dir # - libname, supplied_libname from --lib # - sourcebase from --source-base # - m4base from --m4-base @@ -259,17 +359,18 @@ func_ln_if_changed () # - inctests true if --with-tests was given, blank otherwise # - avoidlist list of modules to avoid, from --avoid # - lgpl true if --lgpl was given, blank otherwise +# - makefile_name from --makefile-name # - libtool true if --libtool was given, false if --no-libtool was # given, blank otherwise # - macro_prefix from --macro-prefix # - autoconf_minversion minimum supported autoconf version # - do_changelog false if --no-changelog was given, : otherwise # - doit : if actions shall be executed, false if only to be printed -# - local_gnulib_dir from --local-dir # - symbolic true if --symbolic was given, blank otherwise { mode= destdir= + local_gnulib_dir= libname=libgnu supplied_libname= sourcebase= @@ -280,11 +381,11 @@ func_ln_if_changed () inctests= avoidlist= lgpl= + makefile_name= libtool= macro_prefix= do_changelog=: doit=: - local_gnulib_dir= symbolic= supplied_opts="$@" @@ -325,6 +426,16 @@ func_ln_if_changed () --dir=* ) destdir=`echo "X$1" | sed -e 's/^X--dir=//'` shift ;; + --local-dir ) + shift + if test $# = 0; then + func_fatal_error "missing argument for --local-dir" + fi + local_gnulib_dir=$1 + shift ;; + --local-dir=* ) + local_gnulib_dir=`echo "X$1" | sed -e 's/^X--local-dir=//'` + shift ;; --lib ) shift if test $# = 0; then @@ -403,6 +514,16 @@ func_ln_if_changed () --lgpl ) lgpl=true shift ;; + --makefile-name ) + shift + if test $# = 0; then + func_fatal_error "missing argument for --makefile-name" + fi + makefile_name="$1" + shift ;; + --makefile-name=* ) + makefile_name=`echo "X$1" | sed -e 's/^X--makefile-name=//'` + shift ;; --libtool ) libtool=true shift ;; @@ -425,16 +546,6 @@ func_ln_if_changed () --dry-run ) doit=false shift ;; - --local-dir ) - shift - if test $# = 0; then - func_fatal_error "missing argument for --local-dir" - fi - local_gnulib_dir=$1 - shift ;; - --local-dir=* ) - local_gnulib_dir=`echo "X$1" | sed -e 's/^X--local-dir=//'` - shift ;; -s | --symbolic | --symboli | --symbol | --symbo | --symb | --symlink | --symlin | --symli | --syml | --sym | --sy ) symbolic=true shift ;; @@ -465,10 +576,11 @@ func_ln_if_changed () echo "you need to use 'gnulib --import' - at your own risk!" 1>&2 exit 1 fi - if test -n "$supplied_libname" || test -n "$sourcebase" || test -n "$m4base" \ + if test -n "$local_gnulib_dir" || test -n "$supplied_libname" \ + || test -n "$sourcebase" || test -n "$m4base" \ || test -n "$docbase" || test -n "$testsbase" || test -n "$auxdir" \ || test -n "$inctests" || test -n "$avoidlist" || test -n "$lgpl" \ - || test -n "$macro_prefix"; then + || test -n "$makefile_name" || test -n "$macro_prefix"; then echo "gnulib-tool: invalid options for 'update' mode" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 echo "If you really want to modify the gnulib configuration of your project," 1>&2 @@ -530,6 +642,9 @@ func_ln_if_changed () # Remove trailing slashes from the directory names. This is necessary for # m4base (to avoid an error in func_import) and optional for the others. sed_trimtrailingslashes='s,\([^/]\)//*$,\1,' + case "$local_gnulib_dir" in + */ ) sourcebase=`echo "$local_gnulib_dir" | sed -e "$sed_trimtrailingslashes"` ;; + esac case "$sourcebase" in */ ) sourcebase=`echo "$sourcebase" | sed -e "$sed_trimtrailingslashes"` ;; esac @@ -578,6 +693,8 @@ trap 'rm -rf "$tmp"' 0 1 2 3 15 # func_lookup_file file # looks up a file in $local_gnulib_dir or $gnulib_dir, or combines it through # 'patch'. +# Input: +# - local_gnulib_dir from --local-dir # Output: # - lookedup_file name of the merged (combined) file # - lookedup_tmp true if it is located in the tmp directory, blank otherwise @@ -608,6 +725,8 @@ func_lookup_file () } # func_all_modules +# Input: +# - local_gnulib_dir from --local-dir func_all_modules () { # Filter out metainformation files like README, which are not modules. @@ -619,7 +738,7 @@ func_all_modules () (cd "$local_gnulib_dir/modules" && ls -1 | sed -e 's,\.diff$,,') fi } \ - | sed -e '/^CVS$/d' -e '/^ChangeLog$/d' -e '/^README$/d' -e '/^TEMPLATE$/d' -e '/^TEMPLATE-TESTS$/d' -e '/~$/d' \ + | sed -e '/^CVS$/d' -e '/^ChangeLog$/d' -e '/^COPYING$/d' -e '/^README$/d' -e '/^TEMPLATE$/d' -e '/^TEMPLATE-TESTS$/d' -e '/~$/d' \ | sed -e '/-tests$/d' \ | LC_ALL=C sort \ | LC_ALL=C uniq @@ -627,16 +746,24 @@ func_all_modules () # func_verify_module # verifies a module name +# Input: +# - local_gnulib_dir from --local-dir +# - module module name argument func_verify_module () { - if ! { test -f "$gnulib_dir/modules/$module" \ - || { test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules" \ - && test -f "$local_gnulib_dir/modules/$module"; }; } \ - || test "CVS" = "$module" \ - || test "ChangeLog" = "$module" \ - || test "README" = "$module" \ - || test "TEMPLATE" = "$module" \ - || test "TEMPLATE-TESTS" = "$module"; then + if { test -f "$gnulib_dir/modules/$module" \ + || { test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules" \ + && test -f "$local_gnulib_dir/modules/$module"; }; } \ + && test "CVS" != "$module" \ + && test "ChangeLog" != "$module" \ + && test "COPYING" != "$module" \ + && test "README" != "$module" \ + && test "TEMPLATE" != "$module" \ + && test "TEMPLATE-TESTS" != "$module"; then + # OK, $module is a correct module name. + # Verify that building the module description with 'patch' succeeds. + func_lookup_file "modules/$module" + else echo "gnulib-tool: module $module doesn't exist" 1>&2 module= fi @@ -644,6 +771,9 @@ func_verify_module () # func_verify_nontests_module # verifies a module name, excluding tests modules +# Input: +# - local_gnulib_dir from --local-dir +# - module module name argument func_verify_nontests_module () { case "$module" in @@ -654,6 +784,9 @@ func_verify_nontests_module () # func_verify_tests_module # verifies a module name, considering only tests modules +# Input: +# - local_gnulib_dir from --local-dir +# - module module name argument func_verify_tests_module () { case "$module" in @@ -680,6 +813,8 @@ sed_extract_prog=':[ ]*$/ { }' # func_get_description module +# Input: +# - local_gnulib_dir from --local-dir func_get_description () { func_lookup_file "modules/$1" @@ -687,6 +822,8 @@ func_get_description () } # func_get_filelist module +# Input: +# - local_gnulib_dir from --local-dir func_get_filelist () { func_lookup_file "modules/$1" @@ -700,6 +837,8 @@ func_get_filelist () } # func_get_dependencies module +# Input: +# - local_gnulib_dir from --local-dir func_get_dependencies () { # ${module}-tests always implicitly depends on ${module}. @@ -710,6 +849,8 @@ func_get_dependencies () } # func_get_autoconf_snippet module +# Input: +# - local_gnulib_dir from --local-dir func_get_autoconf_snippet () { func_lookup_file "modules/$1" @@ -717,6 +858,8 @@ func_get_autoconf_snippet () } # func_get_automake_snippet module +# Input: +# - local_gnulib_dir from --local-dir func_get_automake_snippet () { func_lookup_file "modules/$1" @@ -724,6 +867,8 @@ func_get_automake_snippet () } # func_get_include_directive module +# Input: +# - local_gnulib_dir from --local-dir func_get_include_directive () { func_lookup_file "modules/$1" @@ -732,6 +877,8 @@ func_get_include_directive () } # func_get_license module +# Input: +# - local_gnulib_dir from --local-dir func_get_license () { func_lookup_file "modules/$1" @@ -739,6 +886,8 @@ func_get_license () } # func_get_maintainer module +# Input: +# - local_gnulib_dir from --local-dir func_get_maintainer () { func_lookup_file "modules/$1" @@ -746,10 +895,14 @@ func_get_maintainer () } # func_get_tests_module module +# Input: +# - local_gnulib_dir from --local-dir func_get_tests_module () { # The naming convention for tests modules is hardwired: ${module}-tests. - if test -f modules/"$1"-tests; then + if test -f "$gnulib_dir/modules/$1"-tests \ + || { test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules" \ + && test -f "$local_gnulib_dir/modules/$1"-tests; }; then echo "$1"-tests fi } @@ -770,6 +923,7 @@ func_acceptable () # func_modules_transitive_closure # Input: +# - local_gnulib_dir from --local-dir # - modules list of specified modules # - inctests true if tests should be included, blank otherwise # - avoidlist list of modules to avoid @@ -820,6 +974,7 @@ func_modules_transitive_closure () # func_modules_add_dummy # Input: +# - local_gnulib_dir from --local-dir # - modules list of modules, including dependencies # Output: # - modules list of modules, including 'dummy' if needed @@ -854,6 +1009,7 @@ ba # func_modules_to_filelist # Input: +# - local_gnulib_dir from --local-dir # - modules list of modules, including dependencies # Output: # - files list of files @@ -872,8 +1028,10 @@ func_modules_to_filelist () # func_emit_lib_Makefile_am # emits the contents of lib/Makefile.am to standard output. # Input: +# - local_gnulib_dir from --local-dir # - modules list of modules, including dependencies # - libname library name +# - makefile_name from --makefile-name # - libtool true if libtool will be used, false or blank otherwise # - actioncmd (optional) command that will reproduce this invocation func_emit_lib_Makefile_am () @@ -894,11 +1052,48 @@ func_emit_lib_Makefile_am () # No need to generate dependencies since the sources are in gnulib, not here. echo "AUTOMAKE_OPTIONS = 1.5 gnits no-dependencies" echo - echo "noinst_${perhapsLT}LIBRARIES = $libname.$libext" + ( + for module in $modules; do + func_verify_nontests_module + if test -n "$module"; then + { + func_get_automake_snippet "$module" | + sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \ + -e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' | + sed -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' | + sed -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \ + -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' + if test "$module" = 'alloca'; then + echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@" + fi + } > amsnippet.tmp + # Skip the contents if its entirely empty. + if grep '[^ ]' amsnippet.tmp > /dev/null ; then + echo "## begin gnulib module $module" + echo + cat amsnippet.tmp + echo "## end gnulib module $module" + echo + fi + rm -f amsnippet.tmp + fi + done + ) > allsnippets.tmp + if grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *= *$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. + : + else + # By default, the generated library should not be installed. + echo "noinst_${perhapsLT}LIBRARIES = $libname.$libext" + fi echo echo "${libname}_${libext}_SOURCES =" echo "${libname}_${libext}_LIBADD = @${perhapsLT}LIBOBJS@" echo "noinst_HEADERS =" + if grep '^pkgdata_DATA *+=' allsnippets.tmp > /dev/null; then + echo "pkgdata_DATA =" + fi echo "EXTRA_DIST =" echo "BUILT_SOURCES =" echo "SUFFIXES =" @@ -910,29 +1105,9 @@ func_emit_lib_Makefile_am () echo echo "AM_CPPFLAGS =" echo - for module in $modules; do - func_verify_nontests_module - if test -n "$module"; then - { - func_get_automake_snippet "$module" | - sed -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' - if test "$module" = 'alloca'; then - echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@" - fi - } > amsnippet.tmp - # Skip the contents if its entirely empty. - if grep '[^ ]' amsnippet.tmp > /dev/null ; then - echo "## begin gnulib module $module" - echo - cat amsnippet.tmp - echo "## end gnulib module $module" - echo - fi - rm -f amsnippet.tmp - fi - done + cat allsnippets.tmp echo - echo "mostlyclean-local:" + echo "mostlyclean-local: mostlyclean-generic" echo " @test -z \"\$(MOSTLYCLEANDIRS)\" || \\" echo " for dir in \$(MOSTLYCLEANDIRS); do \\" echo " if test -d \$\$dir; then \\" @@ -940,14 +1115,17 @@ func_emit_lib_Makefile_am () echo " fi; \\" echo " done" echo - echo "# Makefile.am ends here" + echo "# ${makefile_name-Makefile.am} ends here" + rm -f allsnippets.tmp } # func_emit_tests_Makefile_am # emits the contents of tests/Makefile.am to standard output. # Input: +# - local_gnulib_dir from --local-dir # - modules list of modules, including dependencies # - libname library name +# - makefile_name from --makefile-name # - libtool true if libtool will be used, false or blank otherwise # - sourcebase relative directory containing lib source code # - m4base relative directory containing autoconf macros @@ -968,6 +1146,23 @@ func_emit_tests_Makefile_am () echo echo "ACLOCAL_AMFLAGS = -I ${testsbase_inverse}/${m4base}" echo + ( + for module in $modules; do + func_verify_tests_module + if test -n "$module"; then + func_get_automake_snippet "$module" > amsnippet.tmp + # Skip the contents if its entirely empty. + if grep '[^ ]' amsnippet.tmp > /dev/null ; then + echo "## begin gnulib module $module" + echo + cat amsnippet.tmp + echo "## end gnulib module $module" + echo + fi + rm -f amsnippet.tmp + fi + done + ) > allsnippets.tmp # Nothing is being added to SUBDIRS; nevertheless the existence of this # variable is needed to avoid an error from automake: # "AM_GNU_GETTEXT used but SUBDIRS not defined" @@ -977,6 +1172,9 @@ func_emit_tests_Makefile_am () echo "noinst_PROGRAMS =" echo "check_PROGRAMS =" echo "noinst_HEADERS =" + if grep '^pkgdata_DATA *+=' allsnippets.tmp > /dev/null; then + echo "pkgdata_DATA =" + fi echo "EXTRA_DIST =" echo "BUILT_SOURCES =" echo "SUFFIXES =" @@ -993,26 +1191,12 @@ func_emit_tests_Makefile_am () echo echo "LDADD = ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext}" echo - for module in $modules; do - func_verify_tests_module - if test -n "$module"; then - func_get_automake_snippet "$module" > amsnippet.tmp - # Skip the contents if its entirely empty. - if grep '[^ ]' amsnippet.tmp > /dev/null ; then - echo "## begin gnulib module $module" - echo - cat amsnippet.tmp - echo "## end gnulib module $module" - echo - fi - rm -f amsnippet.tmp - fi - done + cat allsnippets.tmp echo "# Clean up after Solaris cc." echo "clean-local:" echo " rm -rf SunWS_cache" echo - echo "mostlyclean-local:" + echo "mostlyclean-local: mostlyclean-generic" echo " @test -z \"\$(MOSTLYCLEANDIRS)\" || \\" echo " for dir in \$(MOSTLYCLEANDIRS); do \\" echo " if test -d \$\$dir; then \\" @@ -1020,12 +1204,14 @@ func_emit_tests_Makefile_am () echo " fi; \\" echo " done" echo - echo "# Makefile.am ends here" + echo "# ${makefile_name-Makefile.am} ends here" + rm -f allsnippets.tmp } # func_import modules # Uses also the variables # - destdir target directory +# - local_gnulib_dir from --local-dir # - libname library name # - sourcebase directory relative to destdir where to place source code # - m4base directory relative to destdir where to place *.m4 macros @@ -1035,6 +1221,7 @@ func_emit_tests_Makefile_am () # - inctests true if --with-tests was given, blank otherwise # - avoidlist list of modules to avoid, from --avoid # - lgpl true if library's license shall be LGPL, blank otherwise +# - makefile_name from --makefile-name # - libtool true if --libtool was given, false if --no-libtool was # given, blank otherwise # - guessed_libtool true if the configure.ac file uses libtool, false otherwise @@ -1045,6 +1232,7 @@ func_emit_tests_Makefile_am () func_import () { # Get the cached settings. + cached_local_gnulib_dir= cached_specified_modules= cached_avoidlist= cached_sourcebase= @@ -1053,6 +1241,7 @@ func_import () cached_testsbase= cached_libname= cached_lgpl= + cached_makefile_name= cached_libtool= cached_macro_prefix= cached_files= @@ -1062,6 +1251,9 @@ func_import () s,#.*$,, s,^dnl .*$,, s, dnl .*$,, + /gl_LOCAL_DIR(/ { + s,^.*gl_LOCAL_DIR([[ ]*\([^])]*\).*$,cached_local_gnulib_dir="\1",p + } /gl_MODULES(/ { s,^.*gl_MODULES([[ ]*\([^])]*\).*$,cached_specified_modules="\1",p } @@ -1086,6 +1278,9 @@ func_import () /gl_LGPL/ { s,^.*$,cached_lgpl=true,p } + /gl_MAKEFILE_NAME(/ { + s,^.*gl_MAKEFILE_NAME([[ ]*\([^])]*\).*$,cached_makefile_name="\1",p + } /gl_LIBTOOL/ { s,^.*$,cached_libtool=true,p } @@ -1120,6 +1315,24 @@ func_import () 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 + 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" @@ -1158,6 +1371,10 @@ func_import () 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 @@ -1197,6 +1414,23 @@ func_import () done fi + # Determine script to apply to imported library files. + sed_transform_lib_file= + case $nl$modules$nl in + *"${nl}config-h$nl"*) + # Assume config.h exists, and that -DHAVE_CONFIG_H is omitted. + sed_transform_lib_file=$sed_transform_lib_file' + s/^#ifdef[ ]*HAVE_CONFIG_H[ ]*$/#if 1/ + ' ;; + esac + if test -n "$lgpl"; then + # Update license. + sed_transform_lib_file=$sed_transform_lib_file' + s/GNU General/GNU Lesser General/g + s/version 2\([ ,]\)/version 2.1\1/g + ' + fi + # Determine final file list. func_modules_to_filelist echo "File list:" @@ -1320,12 +1554,10 @@ func_import () func_dest_tmpfilename "$g" func_lookup_file "$f" cp "$lookedup_file" "$tmpfile" || func_fatal_error "failed" - if test -n "$lgpl"; then - # Update license. + if test -n "sed_transform_lib_file"; then case "$f" in lib/*) - sed -e 's/GNU General/GNU Lesser General/g' \ - -e 's/version 2\([ ,]\)/version 2.1\1/g' \ + sed -e "$sed_transform_lib_file" \ < "$lookedup_file" > "$tmpfile" || func_fatal_error "failed" ;; esac @@ -1406,6 +1638,9 @@ func_import () # Command-line invocation printed in a comment in generated gnulib-cache.m4. actioncmd="gnulib-tool --import" actioncmd="$actioncmd --dir=$destdir" + if test -n "$local_gnulib_dir"; then + actioncmd="$actioncmd --local-dir=$local_gnulib_dir" + fi actioncmd="$actioncmd --lib=$libname" actioncmd="$actioncmd --source-base=$sourcebase" actioncmd="$actioncmd --m4-base=$m4base" @@ -1417,6 +1652,9 @@ func_import () if test -n "$lgpl"; then actioncmd="$actioncmd --lgpl" fi + if test -n "$makefile_name"; then + actioncmd="$actioncmd --makefile_name=$makefile_name" + fi if test "$libtool" = true; then actioncmd="$actioncmd --libtool" else @@ -1426,27 +1664,28 @@ func_import () actioncmd="$actioncmd `echo $specified_modules`" # Create lib/Makefile.am. - func_dest_tmpfilename $sourcebase/Makefile.am + makefile_am=${makefile_name-Makefile.am} + func_dest_tmpfilename $sourcebase/$makefile_am func_emit_lib_Makefile_am > "$tmpfile" - if test -f "$destdir"/$sourcebase/Makefile.am; then - if cmp "$destdir"/$sourcebase/Makefile.am "$tmpfile" > /dev/null; then + if test -f "$destdir"/$sourcebase/$makefile_am; then + if cmp "$destdir"/$sourcebase/$makefile_am "$tmpfile" > /dev/null; then rm -f "$tmpfile" else if $doit; then - echo "Updating $sourcebase/Makefile.am (backup in $sourcebase/Makefile.am~)" - mv -f "$destdir"/$sourcebase/Makefile.am "$destdir"/$sourcebase/Makefile.am~ - mv -f "$tmpfile" "$destdir"/$sourcebase/Makefile.am + echo "Updating $sourcebase/$makefile_am (backup in $sourcebase/$makefile_am~)" + mv -f "$destdir"/$sourcebase/$makefile_am "$destdir"/$sourcebase/$makefile_am~ + mv -f "$tmpfile" "$destdir"/$sourcebase/$makefile_am else - echo "Update $sourcebase/Makefile.am (backup in $sourcebase/Makefile.am~)" + echo "Update $sourcebase/$makefile_am (backup in $sourcebase/$makefile_am~)" rm -f "$tmpfile" fi fi else if $doit; then - echo "Creating $sourcebase/Makefile.am" - mv -f "$tmpfile" "$destdir"/$sourcebase/Makefile.am + echo "Creating $sourcebase/$makefile_am" + mv -f "$tmpfile" "$destdir"/$sourcebase/$makefile_am else - echo "Create $sourcebase/Makefile.am" + echo "Create $sourcebase/$makefile_am" rm -f "$tmpfile" fi fi @@ -1466,6 +1705,20 @@ func_import () echo "# $actioncmd" echo echo "# Specification in the form of a few gnulib-tool.m4 macro invocations:" + # Store the local_gnulib_dir relative to destdir. + case "$local_gnulib_dir" in + "" | /*) + relative_local_gnulib_dir="$local_gnulib_dir" ;; + * ) + case "$destdir" in + /*) relative_local_gnulib_dir="$local_gnulib_dir" ;; + *) + # destdir, local_gnulib_dir are both relative. + func_relativize "$destdir" "$local_gnulib_dir" + relative_local_gnulib_dir="$reldir" ;; + esac ;; + esac + echo "gl_LOCAL_DIR([$relative_local_gnulib_dir])" echo "gl_MODULES(["`echo $specified_modules`"])" echo "gl_AVOID([$avoidlist])" echo "gl_SOURCE_BASE([$sourcebase])" @@ -1474,6 +1727,7 @@ func_import () echo "gl_TESTS_BASE([$testsbase])" echo "gl_LIB([$libname])" test -z "$lgpl" || echo "gl_LGPL" + echo "gl_MAKEFILE_NAME([$makefile_name])" if test "$libtool" = true; then echo "gl_LIBTOOL" fi @@ -1524,6 +1778,8 @@ func_import () echo "# any checks for libraries, header files, types and library functions." echo "AC_DEFUN([${macro_prefix}_EARLY]," echo "[" + echo " m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace" + echo " m4_pattern_allow([^gl_ES$])dnl a valid locale name" echo " AC_REQUIRE([AC_PROG_RANLIB])" if grep AC_GNU_SOURCE "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then echo " AC_REQUIRE([AC_GNU_SOURCE])" @@ -1532,7 +1788,7 @@ func_import () echo " AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])" fi if grep gl_LOCK "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then - echo " AC_REQUIRE([gl_LOCK])" + echo " AC_REQUIRE([gl_LOCK_EARLY])" fi echo "])" echo @@ -1610,27 +1866,28 @@ func_import () if test -n "$inctests"; then # Create tests/Makefile.am. - func_dest_tmpfilename $testsbase/Makefile.am + makefile_am=${makefile_name-Makefile.am} + func_dest_tmpfilename $testsbase/$makefile_am func_emit_tests_Makefile_am > "$tmpfile" - if test -f "$destdir"/$testsbase/Makefile.am; then - if cmp "$destdir"/$testsbase/Makefile.am "$tmpfile" > /dev/null; then + if test -f "$destdir"/$testsbase/$makefile_am; then + if cmp "$destdir"/$testsbase/$makefile_am "$tmpfile" > /dev/null; then rm -f "$tmpfile" else if $doit; then - echo "Updating $testsbase/Makefile.am (backup in $testsbase/Makefile.am~)" - mv -f "$destdir"/$testsbase/Makefile.am "$destdir"/$testsbase/Makefile.am~ - mv -f "$tmpfile" "$destdir"/$testsbase/Makefile.am + echo "Updating $testsbase/$makefile_am (backup in $testsbase/$makefile_am~)" + mv -f "$destdir"/$testsbase/$makefile_am "$destdir"/$testsbase/$makefile_am~ + mv -f "$tmpfile" "$destdir"/$testsbase/$makefile_am else - echo "Update $testsbase/Makefile.am (backup in $testsbase/Makefile.am~)" + echo "Update $testsbase/$makefile_am (backup in $testsbase/$makefile_am~)" rm -f "$tmpfile" fi fi else if $doit; then - echo "Creating $testsbase/Makefile.am" - mv -f "$tmpfile" "$destdir"/$testsbase/Makefile.am + echo "Creating $testsbase/$makefile_am" + mv -f "$tmpfile" "$destdir"/$testsbase/$makefile_am else - echo "Create $testsbase/Makefile.am" + echo "Create $testsbase/$makefile_am" rm -f "$tmpfile" fi fi @@ -1665,17 +1922,29 @@ func_import () ) | sed -e '/^$/d;' -e 's/^/ /' echo echo "Don't forget to" - echo " - add \"$sourcebase/Makefile\" to AC_CONFIG_FILES in $configure_ac," + if test "${makefile_name-Makefile.am}" = Makefile.am; then + echo " - add \"$sourcebase/Makefile\" to AC_CONFIG_FILES in $configure_ac," + else + echo " - \"include $makefile_name\" from within \"$sourcebase/Makefile.am\"," + fi if test -n "$inctests"; then - echo " - add \"$testsbase/Makefile\" to AC_CONFIG_FILES in $configure_ac," + if test "${makefile_name-Makefile.am}" = Makefile.am; then + echo " - add \"$testsbase/Makefile\" to AC_CONFIG_FILES in $configure_ac," + else + echo " - \"include $makefile_name\" from within \"$testsbase/Makefile.am\"," + fi + fi + if test "${makefile_name-Makefile.am}" = Makefile.am; then + sourcebase_dir=`echo "$sourcebase" | sed -n -e 's,/[^/]*$,/,p'` + sourcebase_base=`basename "$sourcebase"` + echo " - mention \"${sourcebase_base}\" in SUBDIRS in ${sourcebase_dir}Makefile.am," fi - sourcebase_dir=`echo "$sourcebase" | sed -n -e 's,/[^/]*$,/,p'` - sourcebase_base=`basename "$sourcebase"` - echo " - mention \"${sourcebase_base}\" in SUBDIRS in ${sourcebase_dir}Makefile.am," if test -n "$inctests"; then - testsbase_dir=`echo "$testsbase" | sed -n -e 's,/[^/]*$,/,p'` - testsbase_base=`basename "$testsbase"` - echo " - mention \"${testsbase_base}\" in SUBDIRS in ${testsbase_dir}Makefile.am," + if test "${makefile_name-Makefile.am}" = Makefile.am; then + testsbase_dir=`echo "$testsbase" | sed -n -e 's,/[^/]*$,/,p'` + testsbase_base=`basename "$testsbase"` + echo " - mention \"${testsbase_base}\" in SUBDIRS in ${testsbase_dir}Makefile.am," + fi fi echo " - mention \"-I ${m4base}\" in ACLOCAL_AMFLAGS in Makefile.am," echo " - invoke ${macro_prefix}_EARLY in $configure_ac, right after AC_PROG_CC," @@ -1684,6 +1953,7 @@ func_import () # func_create_testdir testdir modules # Input: +# - local_gnulib_dir from --local-dir # - auxdir directory relative to destdir where to place build aux files func_create_testdir () { @@ -1691,6 +1961,11 @@ func_create_testdir () modules="$2" modules=`for m in $modules; do echo $m; done | LC_ALL=C sort | LC_ALL=C uniq` + # Subdirectory names. + sourcebase=gllib + m4base=glm4 + testsbase=gltests + # Determine final module list. func_modules_transitive_closure echo "Module list with included dependencies:" @@ -1706,11 +1981,13 @@ func_create_testdir () # Create directories. for d in `echo "$files" | sed -n -e 's,^\(.*\)/[^/]*,\1,p'`; do - if test "$d" = build-aux; then - mkdir -p "$testdir/$auxdir" - else - mkdir -p "$testdir/$d" - fi + case "$d" in + build-aux) mkdir -p "$testdir/$auxdir" ;; + lib) mkdir -p "$testdir/$sourcebase" ;; + m4) mkdir -p "$testdir/$m4base" ;; + tests) mkdir -p "$testdir/$testsbase" ;; + *) mkdir -p "$testdir/$d" ;; + esac done # Copy files or make symbolic links. @@ -1718,6 +1995,9 @@ func_create_testdir () func_lookup_file "$f" case "$f" in build-aux/*) g=`echo "$f" | sed -e "s,^build-aux/,$auxdir/,"` ;; + lib/*) g=`echo "$f" | sed -e "s,^lib/,$sourcebase/,"` ;; + m4/*) g=`echo "$f" | sed -e "s,^m4/,$m4base/,"` ;; + tests/*) g=`echo "$f" | sed -e "s,^tests/,$testsbase/,"` ;; *) g="$f" ;; esac if test -n "$lookedup_tmp"; then @@ -1732,12 +2012,12 @@ func_create_testdir () fi done - # Create lib/Makefile.am. - mkdir -p "$testdir/lib" - func_emit_lib_Makefile_am > "$testdir/lib/Makefile.am" + # Create $sourcebase/Makefile.am. + mkdir -p "$testdir/$sourcebase" + func_emit_lib_Makefile_am > "$testdir/$sourcebase/Makefile.am" - # Create m4/Makefile.am. - mkdir -p "$testdir/m4" + # Create $m4base/Makefile.am. + mkdir -p "$testdir/$m4base" (echo "## Process this file with automake to produce Makefile.in." echo echo "EXTRA_DIST =" @@ -1747,12 +2027,12 @@ func_create_testdir () echo "EXTRA_DIST += "`echo "$f" | sed -e 's,^m4/,,'` ;; esac done - ) > "$testdir/m4/Makefile.am" + ) > "$testdir/$m4base/Makefile.am" - subdirs="lib m4" + subdirs="$sourcebase $m4base" subdirs_with_configure_ac="" - if test -f "$testdir"/m4/gettext.m4; then + if test -f "$testdir"/$m4base/gettext.m4; then # Avoid stupid error message from automake: # "AM_GNU_GETTEXT used but `po' not in SUBDIRS" mkdir -p "$testdir/po" @@ -1762,13 +2042,10 @@ func_create_testdir () fi if test -n "$inctests"; then - test -d "$testdir/tests" || mkdir "$testdir/tests" - # Create tests/Makefile.am. - sourcebase=lib - m4base=m4 - testsbase=tests - func_emit_tests_Makefile_am > "$testdir/tests/Makefile.am" - # Create tests/configure.ac. + test -d "$testdir/$testsbase" || mkdir "$testdir/$testsbase" + # Create $testsbase/Makefile.am. + func_emit_tests_Makefile_am > "$testdir/$testsbase/Makefile.am" + # Create $testsbase/configure.ac. (echo "# Process this file with autoconf to produce a configure script." echo "AC_INIT([dummy], [0])" echo "AC_CONFIG_AUX_DIR([../$auxdir])" @@ -1781,16 +2058,16 @@ func_create_testdir () echo "AC_PROG_MAKE_SET" echo "AC_PROG_RANLIB" echo - if grep AC_GNU_SOURCE "$testdir"/m4/*.m4 >/dev/null 2>/dev/null; then + if grep AC_GNU_SOURCE "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then echo "AC_GNU_SOURCE" echo fi - if grep gl_USE_SYSTEM_EXTENSIONS "$testdir"/m4/*.m4 >/dev/null 2>/dev/null; then + if grep gl_USE_SYSTEM_EXTENSIONS "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then echo "gl_USE_SYSTEM_EXTENSIONS" echo fi - if grep gl_LOCK "$testdir"/m4/*.m4 >/dev/null 2>/dev/null; then - echo "gl_LOCK" + if grep gl_LOCK "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then + echo "gl_LOCK_EARLY" echo fi if test "$libtool" = true; then @@ -1798,6 +2075,14 @@ func_create_testdir () else echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])" fi + # Wrap the set of autoconf snippets into an autoconf macro that is then + # invoked. This is needed because autoconf does not support AC_REQUIRE + # at the top level: + # error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an AC_DEFUN'd macro + # but we want the AC_REQUIRE to have its normal meaning (provide one + # expansion of the required macro before the current point, and only one + # expansion total). + echo "AC_DEFUN([gl_INIT], [" if test "$auxdir" != "build-aux"; then sed_replace_build_aux=' :a @@ -1826,15 +2111,17 @@ func_create_testdir () | sed -e "$sed_replace_build_aux" fi done + echo "])" + echo "gl_INIT" echo - # Usually tests/config.h will be a superset of config.h. Verify this by - # "merging" config.h into tests/config.h; look out for gcc warnings. + # Usually $testsbase/config.h will be a superset of config.h. Verify this + # by "merging" config.h into $testsbase/config.h; look out for gcc warnings. echo "AH_TOP([#include \"../config.h\"])" echo echo "AC_OUTPUT([Makefile])" - ) > "$testdir/tests/configure.ac" - subdirs="$subdirs tests" - subdirs_with_configure_ac="$subdirs_with_configure_ac tests" + ) > "$testdir/$testsbase/configure.ac" + subdirs="$subdirs $testsbase" + subdirs_with_configure_ac="$subdirs_with_configure_ac $testsbase" fi # Create Makefile.am. @@ -1844,7 +2131,7 @@ func_create_testdir () echo echo "SUBDIRS = $subdirs" echo - echo "ACLOCAL_AMFLAGS = -I m4" + echo "ACLOCAL_AMFLAGS = -I $m4base" ) > "$testdir/Makefile.am" # Create configure.ac. @@ -1860,18 +2147,22 @@ func_create_testdir () echo "AC_PROG_CC" echo "AC_PROG_INSTALL" echo "AC_PROG_MAKE_SET" + echo + echo "m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace" + echo "m4_pattern_allow([^gl_ES$])dnl a valid locale name" + echo echo "AC_PROG_RANLIB" echo - if grep AC_GNU_SOURCE "$testdir"/m4/*.m4 >/dev/null 2>/dev/null; then + if grep AC_GNU_SOURCE "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then echo "AC_GNU_SOURCE" echo fi - if grep gl_USE_SYSTEM_EXTENSIONS "$testdir"/m4/*.m4 >/dev/null 2>/dev/null; then + if grep gl_USE_SYSTEM_EXTENSIONS "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then echo "gl_USE_SYSTEM_EXTENSIONS" echo fi - if grep gl_LOCK "$testdir"/m4/*.m4 >/dev/null 2>/dev/null; then - echo "gl_LOCK" + if grep gl_LOCK "$testdir/$m4base"/*.m4 >/dev/null 2>/dev/null; then + echo "gl_LOCK_EARLY" echo fi if test "$libtool" = true; then @@ -1879,6 +2170,14 @@ func_create_testdir () else echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])" fi + # Wrap the set of autoconf snippets into an autoconf macro that is then + # invoked. This is needed because autoconf does not support AC_REQUIRE + # at the top level: + # error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an AC_DEFUN'd macro + # but we want the AC_REQUIRE to have its normal meaning (provide one + # expansion of the required macro before the current point, and only one + # expansion total). + echo "AC_DEFUN([gl_INIT], [" if test "$auxdir" != "build-aux"; then sed_replace_build_aux=' :a @@ -1897,6 +2196,8 @@ func_create_testdir () | sed -e "$sed_replace_build_aux" fi done + echo "])" + echo "gl_INIT" echo if test -n "$subdirs_with_configure_ac"; then echo "AC_CONFIG_SUBDIRS(["`echo $subdirs_with_configure_ac`"])" @@ -1918,10 +2219,10 @@ func_create_testdir () echo "executing ${AUTORECONF} --force --install" ${AUTORECONF} --force --install ) - if grep '^BUILT_SOURCES *+=' "$testdir/lib/Makefile.am" > /dev/null; then + if grep '^BUILT_SOURCES *+=' "$testdir/$sourcebase/Makefile.am" > /dev/null; then (cd "$testdir" ./configure - cd lib + cd "$sourcebase" echo 'built_sources: $(BUILT_SOURCES)' >> Makefile make built_sources cd .. @@ -1932,6 +2233,7 @@ func_create_testdir () # func_create_megatestdir megatestdir allmodules # Input: +# - local_gnulib_dir from --local-dir # - auxdir directory relative to destdir where to place build aux files func_create_megatestdir () {