X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=gnulib-tool;h=ed71b1c3076bee2fd7d88674eb8c27914e87913e;hb=81040496d5e98d7913ea385763c3e4b4e85d74f5;hp=8e6fec4412e1aeb2f732725ebf96e04d4c092319;hpb=913936b4f544c8578e17632fc5e980e9cef599fa;p=gnulib.git diff --git a/gnulib-tool b/gnulib-tool index 8e6fec441..ed71b1c30 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -1602,7 +1602,7 @@ func_execute_command () echo "executing $*" "$@" else - # Commands like automake produce output to stderr even when the succeed. + # Commands like automake produce output to stderr even when they succeed. # Turn this output off if the command succeeds. "$@" > "$tmp"/cmdout 2>&1 cmdret=$? @@ -1686,7 +1686,7 @@ func_emit_lib_Makefile_am () echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@" fi } > amsnippet.tmp - # Skip the contents if its entirely empty. + # Skip the contents if it's entirely empty. if grep '[^ ]' amsnippet.tmp > /dev/null ; then echo "## begin gnulib module $module" echo @@ -1737,7 +1737,7 @@ func_emit_lib_Makefile_am () echo "AM_CPPFLAGS =" fi echo - if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *= *$libname\\.$libext\$" allsnippets.tmp > /dev/null; then + 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. : @@ -1748,7 +1748,7 @@ func_emit_lib_Makefile_am () echo echo "${libname}_${libext}_SOURCES =" # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However, - # automake during its analyses looks for $(LIBOBJS), not for @LIBOBJS@. + # automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@. echo "${libname}_${libext}_LIBADD = \$(${macro_prefix}_${perhapsLT}LIBOBJS)" echo "${libname}_${libext}_DEPENDENCIES = \$(${macro_prefix}_${perhapsLT}LIBOBJS)" echo "EXTRA_${libname}_${libext}_SOURCES =" @@ -1774,7 +1774,7 @@ func_emit_lib_Makefile_am () } # func_emit_po_Makevars -# emits the contents of po/ makefile parametrization to standard output. +# emits the contents of po/ makefile parameterization to standard output. # Input: # - local_gnulib_dir from --local-dir # - sourcebase directory relative to destdir where to place source code @@ -1912,7 +1912,7 @@ func_emit_tests_Makefile_am () echo "libtests_a_DEPENDENCIES += @${perhapsLT}ALLOCA@" fi } > amsnippet.tmp - # Skip the contents if its entirely empty. + # Skip the contents if it's entirely empty. if grep '[^ ]' amsnippet.tmp > /dev/null ; then echo "## begin gnulib module $module" echo @@ -2000,7 +2000,7 @@ func_emit_tests_Makefile_am () if $use_libtests; then echo "libtests_a_SOURCES =" # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However, - # automake during its analyses looks for $(LIBOBJS), not for @LIBOBJS@. + # automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@. echo "libtests_a_LIBADD = \$(${macro_prefix}tests_LIBOBJS)" echo "libtests_a_DEPENDENCIES = \$(${macro_prefix}tests_LIBOBJS)" echo "EXTRA_libtests_a_SOURCES =" @@ -2046,6 +2046,14 @@ func_emit_initmacro_start () # We let automake know about the files to be distributed through the # EXTRA_lib_SOURCES variable. echo " m4_pushdef([AC_LIBSOURCES], m4_defn([${macro_prefix_arg}_LIBSOURCES]))" + # Create data variables for checking the presence of files that are mentioned + # as AC_LIBSOURCES arguments. These are m4 variables, not shell variables, + # because we want the check to happen when the configure file is created, + # not when it is run. ${macro_prefix_arg}_LIBSOURCES_LIST is the list of + # files to check for. ${macro_prefix_arg}_LIBSOURCES_DIR is the subdirectory + # in which to expect them. + echo " m4_pushdef([${macro_prefix_arg}_LIBSOURCES_LIST], [])" + echo " m4_pushdef([${macro_prefix_arg}_LIBSOURCES_DIR], [])" echo " gl_COMMON" } @@ -2055,6 +2063,23 @@ func_emit_initmacro_start () func_emit_initmacro_end () { macro_prefix_arg="$1" + # Check the presence of files that are mentioned as AC_LIBSOURCES arguments. + # The check is performed only when autoconf is run from the directory where + # the configure.ac resides; if it is run from a different directory, the + # check is skipped. + echo " m4_ifval(${macro_prefix_arg}_LIBSOURCES_LIST, [" + echo " m4_syscmd([test ! -d ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[ ||" + echo " for gl_file in ]${macro_prefix_arg}_LIBSOURCES_LIST[ ; do" + echo " if test ! -r ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[/\$gl_file ; then" + echo " echo \"missing file ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[/\$gl_file\" >&2" + echo " exit 1" + echo " fi" + echo " done])dnl" + echo " m4_if(m4_sysval, [0], []," + echo " [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])" + echo " ])" + echo " m4_popdef([${macro_prefix_arg}_LIBSOURCES_DIR])" + echo " m4_popdef([${macro_prefix_arg}_LIBSOURCES_LIST])" echo " m4_popdef([AC_LIBSOURCES])" echo " m4_popdef([AC_REPLACE_FUNCS])" echo " m4_popdef([AC_LIBOBJ])" @@ -2090,13 +2115,6 @@ func_emit_initmacro_done () echo " ${macro_prefix_arg}_LIBOBJS=\"\$${macro_prefix_arg}_LIBOBJS \$1.\$ac_objext\"" echo "])" echo - echo "# m4_foreach_w is provided by autoconf-2.59c and later." - echo "# This definition is to accommodate developers using versions" - echo "# of autoconf older than that." - echo "m4_ifndef([m4_foreach_w]," - echo " [m4_define([m4_foreach_w]," - echo " [m4_foreach([\$1], m4_split(m4_normalize([\$2]), [ ]), [\$3])])])" - echo echo "# Like AC_REPLACE_FUNCS, except that the module name goes" echo "# into ${macro_prefix_arg}_LIBOBJS instead of into LIBOBJS." echo "AC_DEFUN([${macro_prefix_arg}_REPLACE_FUNCS], [" @@ -2105,15 +2123,14 @@ func_emit_initmacro_done () echo "])" echo echo "# Like AC_LIBSOURCES, except the directory where the source file is" - echo "# expected is derived from the gnulib-tool parametrization," + echo "# expected is derived from the gnulib-tool parameterization," echo "# and alloca is special cased (for the alloca-opt module)." echo "# We could also entirely rely on EXTRA_lib..._SOURCES." echo "AC_DEFUN([${macro_prefix_arg}_LIBSOURCES], [" echo " m4_foreach([_gl_NAME], [\$1], [" echo " m4_if(_gl_NAME, [alloca.c], [], [" - echo " m4_syscmd([test -r $sourcebase_arg/]_gl_NAME[ || test ! -d $sourcebase_arg])dnl" - echo " m4_if(m4_sysval, [0], []," - echo " [AC_FATAL([missing $sourcebase_arg/]_gl_NAME)])" + echo " m4_define([${macro_prefix_arg}_LIBSOURCES_DIR], [$sourcebase_arg])" + echo " m4_append([${macro_prefix_arg}_LIBSOURCES_LIST], _gl_NAME, [ ])" echo " ])" echo " ])" echo "])" @@ -2180,6 +2197,13 @@ func_import () s,^.*gl_LOCAL_DIR([[ ]*\([^])]*\).*$,cached_local_gnulib_dir="\1",p } /gl_MODULES(/ { + ta + :a + s/)/)/ + tb + N + ba + :b s,^.*gl_MODULES([[ ]*\([^])]*\).*$,cached_specified_modules="\1",p } /gl_AVOID(/ { @@ -2858,7 +2882,7 @@ func_import () func_append added_files "$pobase/$file$nl" fi done - # Create po makefile parametrization, part 1. + # Create po makefile parameterization, part 1. func_dest_tmpfilename $pobase/Makevars func_emit_po_Makevars > "$tmpfile" if test -f "$destdir"/$pobase/Makevars; then @@ -2884,7 +2908,7 @@ func_import () fi func_append added_files "$pobase/Makevars$nl" fi - # Create po makefile parametrization, part 2. + # Create po makefile parameterization, part 2. func_dest_tmpfilename $pobase/POTFILES.in func_emit_po_POTFILES_in > "$tmpfile" if test -f "$destdir"/$pobase/POTFILES.in; then @@ -2987,7 +3011,9 @@ func_import () esac ;; esac echo "gl_LOCAL_DIR([$relative_local_gnulib_dir])" - echo "gl_MODULES(["`echo $specified_modules`"])" + echo "gl_MODULES([" + echo "$specified_modules" | sed 's/^/ /g' + echo "])" echo "gl_AVOID([$avoidlist])" echo "gl_SOURCE_BASE([$sourcebase])" echo "gl_M4_BASE([$m4base])" @@ -3223,6 +3249,8 @@ func_import () # Update the .cvsignore and .gitignore files. { echo "$added_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|A|\1,' echo "$removed_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|R|\1,' + # Treat gnulib-comp.m4 like an added file, even if it already existed. + echo "$m4base/|A|gnulib-comp.m4" } | LC_ALL=C sort -t'|' -k1,1 > "$tmp"/fileset-changes { # Rearrange file descriptors. Needed because "while ... done < ..." # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. @@ -3230,9 +3258,20 @@ func_import () func_update_ignorelist () { ignore="$1" + if test "$ignore" = .gitignore; then + # In a .gitignore file, "foo" applies to the current directory and all + # subdirectories, whereas "/foo" applies to the current directory only. + anchor='/' + escaped_anchor='\/' + doubly_escaped_anchor='\\/' + else + anchor='' + escaped_anchor='' + doubly_escaped_anchor='' + fi if test -f "$destdir/$dir$ignore"; then if test -n "$dir_added" || test -n "$dir_removed"; then - LC_ALL=C sort "$destdir/$dir$ignore" > "$tmp"/ignore + sed -e "s|^$anchor||" < "$destdir/$dir$ignore" | LC_ALL=C sort > "$tmp"/ignore echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \ | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-added echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \ @@ -3241,9 +3280,12 @@ func_import () 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 > "$tmp"/sed-ignore-removed - cat "$destdir/$dir$ignore"~ "$tmp"/ignore-added \ - | sed -f "$tmp"/sed-ignore-removed \ + { 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 + } > "$tmp"/sed-ignore-removed + { cat "$destdir/$dir$ignore"~ + sed -e "s|^|$anchor|" < "$tmp"/ignore-added + } | sed -f "$tmp"/sed-ignore-removed \ > "$destdir/$dir$ignore" else echo "Update $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)" @@ -3260,7 +3302,7 @@ func_import () # Automake generates Makefile rules that create .dirstamp files. echo ".dirstamp" fi - echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u + echo "$dir_added" | sed -e '/^$/d' -e "s|^|$anchor|" | LC_ALL=C sort -u } > "$destdir/$dir$ignore" else echo "Create $destdir/$dir$ignore" @@ -3384,6 +3426,18 @@ func_import () fi fi echo " - mention \"-I ${m4base}\" in ACLOCAL_AMFLAGS in Makefile.am," + { + # Find the first parent directory of $m4base that contains a Makefile.am. + sed_last='s,^.*/\([^/][^/]*\)//*$,\1/, +s,//*$,/,' + sed_butlast='s,[^/][^/]*//*$,,' + dir1="${m4base}/"; dir2="" + while test -n "$dir1" && test ! -f "${destdir}/${dir1}Makefile.am"; do + dir2=`echo "$dir1" | sed -e "$sed_last"`"$dir2" + dir1=`echo "$dir1" | sed -e "$sed_butlast"` + done + echo " - mention ${dir2}gnulib-cache.m4 in EXTRA_DIST in ${dir1}Makefile.am." + } echo " - invoke ${macro_prefix}_EARLY in $configure_ac, right after AC_PROG_CC," echo " - invoke ${macro_prefix}_INIT in $configure_ac." }