X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=gnulib-tool;h=b0f4c1884e2fdd0b54a434248f801373effaf95b;hb=e349e3d9c187700b118e0bac80aedd2ea8e764bc;hp=ad2d6dbd04c160536da4da1231bf264914f36dd5;hpb=8cc09e9949794a7b0836b2380cf0968b0a3df52d;p=gnulib.git diff --git a/gnulib-tool b/gnulib-tool index ad2d6dbd0..b0f4c1884 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -83,6 +83,10 @@ if (alias) > /dev/null 2>&1 && echo | sed --posix -e d >/dev/null 2>&1; then alias sed='sed --posix' fi +# sed_noop is a sed expression that does nothing. +# An empty expression does not work with the native 'sed' on AIX 6.1. +sed_noop='s,x,x,' + # func_usage # outputs to stdout the --help usage message. func_usage () @@ -212,7 +216,7 @@ q date=`echo "$date" | sed -e "$sed_year_before_time"` # Use GNU date to compute the time in GMT. date=`date -d "$date" -u +"%Y-%m-%d %H:%M:%S"` - version=' '`"$gnulib_dir"/build-aux/git-version-gen /dev/null | sed -e 's/-dirty/-modified/'` + version=' '`cd "$gnulib_dir" && ./build-aux/git-version-gen /dev/null | sed -e 's/-dirty/-modified/'` else if test -d "$gnulib_dir"/CVS \ && (cvs --version) >/dev/null 2>/dev/null; then @@ -258,7 +262,9 @@ func_emit_copyright_notice () } # func_exit STATUS -# exit with status +# exits with a given status. +# This function needs to be used, rather than 'exit', when a 'trap' handler is +# in effect that refers to $?. func_exit () { (exit $1); exit $1 @@ -266,14 +272,16 @@ func_exit () # func_gnulib_dir # locates the directory where the gnulib repository lives +# Input: +# - progname name of this program # Sets variables # - self_abspathname absolute pathname of gnulib-tool # - gnulib_dir absolute pathname of gnulib repository func_gnulib_dir () { - case "$0" in - /*) self_abspathname="$0" ;; - */*) self_abspathname=`pwd`/"$0" ;; + case "$progname" in + /*) self_abspathname="$progname" ;; + */*) self_abspathname=`pwd`/"$progname" ;; *) # Look in $PATH. # Iterate through the elements of $PATH. @@ -320,8 +328,8 @@ func_gnulib_dir () for d in $pathx; do IFS="$save_IFS" test -z "$d" && d=. - if test -x "$d/$0" && test ! -d "$d/$0"; then - self_abspathname="$d/$0" + if test -x "$d/$progname" && test ! -d "$d/$progname"; then + self_abspathname="$d/$progname" break fi done @@ -345,6 +353,8 @@ func_gnulib_dir () # func_tmpdir # creates a temporary directory. +# Input: +# - progname name of this program # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () @@ -369,7 +379,7 @@ func_tmpdir () (umask 077 && mkdir "$tmp") } || { - echo "$0: cannot create a temporary directory in $TMPDIR" >&2 + echo "$progname: cannot create a temporary directory in $TMPDIR" >&2 func_exit 1 } } @@ -392,10 +402,12 @@ fi # func_fatal_error message # outputs to stderr a fatal error message, and terminates the program. +# Input: +# - progname name of this program func_fatal_error () { - echo "gnulib-tool: *** $1" 1>&2 - echo "gnulib-tool: *** Stop." 1>&2 + echo "$progname: *** $1" 1>&2 + echo "$progname: *** Stop." 1>&2 func_exit 1 } @@ -548,6 +560,32 @@ func_ln_if_changed () fi } +# func_reset_sigpipe +# Resets SIGPIPE to its default behaviour. SIGPIPE is signalled when a process +# writes into a pipe with no readers, i.e. a pipe where all readers have +# already closed their file descriptor that read from it or exited entirely. +# The default behaviour is to terminate the current process without an error +# message. +# When "trap '' SIGPIPE" is in effect, the behaviour (at least with bash) is to +# terminate the current process with an error message. +# This function should be called at the beginning of a command that only +# produces output to stdout (i.e. no side effects!), when the command that +# 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. + # Note that Solaris sh does not understand "trap - SIGPIPE". + func_reset_sigpipe () + { + trap - SIGPIPE + } +else + func_reset_sigpipe () + { + : + } +fi + # Ensure an 'echo' command that does not interpret backslashes. # Test cases: # echo '\n' | wc -l prints 1 when OK, 2 when KO @@ -1262,8 +1300,7 @@ func_get_filelist () echo m4/gnulib-common.m4 case "$autoconf_minversion" in 2.59) - #echo m4/onceonly.m4 - echo m4/onceonly_2_57.m4 + echo m4/onceonly.m4 ;; esac } @@ -1343,7 +1380,8 @@ func_get_automake_snippet () done | sed -e 's,^lib/,,'` # Remove $already_mentioned_files from $lib_files. echo "$lib_files" | LC_ALL=C sort -u > "$tmp"/lib-files - extra_files=`for f in $already_mentioned_files; do echo $f; done \ + extra_files=`func_reset_sigpipe; \ + for f in $already_mentioned_files; do echo $f; done \ | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/lib-files` if test -n "$extra_files"; then echo "EXTRA_DIST +=" $extra_files @@ -1510,7 +1548,7 @@ func_modules_transitive_closure () handledmodules=`for m in $handledmodules $inmodules_this_round; do echo $m; done | LC_ALL=C sort -u` # Remove $handledmodules from $inmodules. for m in $inmodules; do echo $m; done | LC_ALL=C sort -u > "$tmp"/queued-modules - inmodules=`echo "$handledmodules" | LC_ALL=C join -v 2 - "$tmp"/queued-modules` + inmodules=`func_reset_sigpipe; echo "$handledmodules" | LC_ALL=C join -v 2 - "$tmp"/queued-modules` done modules=`for m in $outmodules; do echo $m; done | LC_ALL=C sort -u` rm -f "$tmp"/queued-modules @@ -1603,7 +1641,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=$? @@ -1632,6 +1670,10 @@ func_execute_command () # - po_domain prefix of i18n domain to use (without -gnulib suffix) # - actioncmd (optional) command that will reproduce this invocation # - for_test true if creating a package for testing, false otherwise +# - destfile filename relative to destdir of makefile being generated +# Input/Output: +# - makefile_am_edits and makefile_am_edit${edit}_{dir,var,val} +# list of edits to be done to Makefile.am variables # Output: # - uses_subdirs nonempty if object files in subdirs exist func_emit_lib_Makefile_am () @@ -1646,7 +1688,7 @@ func_emit_lib_Makefile_am () if test "$libtool" = true; then libext=la perhapsLT=LT - sed_eliminate_LDFLAGS= + sed_eliminate_LDFLAGS="$sed_noop" else libext=a perhapsLT= @@ -1659,7 +1701,7 @@ func_emit_lib_Makefile_am () # situation. Turn check_PROGRAMS into noinst_PROGRAMS. sed_transform_check_PROGRAMS='s,check_PROGRAMS,noinst_PROGRAMS,g' else - sed_transform_check_PROGRAMS= + sed_transform_check_PROGRAMS="$sed_noop" fi echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!" echo "## Process this file with automake to produce Makefile.in." @@ -1687,7 +1729,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 @@ -1716,6 +1758,7 @@ func_emit_lib_Makefile_am () fi echo if test -z "$makefile_name"; then + echo "SUBDIRS =" echo "noinst_HEADERS =" echo "noinst_LIBRARIES =" echo "noinst_LTLIBRARIES =" @@ -1734,11 +1777,27 @@ func_emit_lib_Makefile_am () echo "CLEANFILES =" echo "DISTCLEANFILES =" echo "MAINTAINERCLEANFILES =" + fi + # Execute edits that apply to the Makefile.am being generated. + edit=0 + while test $edit != $makefile_am_edits; do + edit=`expr $edit + 1` + eval dir=\"\$makefile_am_edit${edit}_dir\" + eval var=\"\$makefile_am_edit${edit}_var\" + eval val=\"\$makefile_am_edit${edit}_val\" + if test -n "$var"; then + if test "${dir}Makefile.am" = "$destfile" || test "./${dir}Makefile.am" = "$destfile"; then + echo "${var} += ${val}" + eval "makefile_am_edit${edit}_var=" + fi + fi + done + if test -z "$makefile_name"; then echo 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. : @@ -1749,7 +1808,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 =" @@ -1775,7 +1834,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 @@ -1865,13 +1924,17 @@ func_emit_po_POTFILES_in () # - macro_prefix prefix of gl_LIBOBJS macros to use # - for_test true if creating a package for testing, false otherwise # - use_libtests true if a libtests.a should be built, false otherwise +# - destfile filename relative to destdir of makefile being generated +# Input/Output: +# - makefile_am_edits and makefile_am_edit${edit}_{dir,var,val} +# list of edits to be done to Makefile.am variables # Output: # - uses_subdirs nonempty if object files in subdirs exist func_emit_tests_Makefile_am () { if test "$libtool" = true; then libext=la - sed_eliminate_LDFLAGS= + sed_eliminate_LDFLAGS="$sed_noop" else libext=a sed_eliminate_LDFLAGS='/^lib_LDFLAGS[ ]*+=/d' @@ -1883,7 +1946,7 @@ func_emit_tests_Makefile_am () # situation. Turn check_PROGRAMS into noinst_PROGRAMS. sed_transform_check_PROGRAMS='s,check_PROGRAMS,noinst_PROGRAMS,g' else - sed_transform_check_PROGRAMS= + sed_transform_check_PROGRAMS="$sed_noop" fi testsbase_inverse=`echo "$testsbase" | sed -e 's,/$,,' | sed -e 's,[^/][^/]*,..,g'` echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!" @@ -1913,7 +1976,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 @@ -1976,6 +2039,20 @@ func_emit_tests_Makefile_am () echo "CLEANFILES =" echo "DISTCLEANFILES =" echo "MAINTAINERCLEANFILES =" + # Execute edits that apply to the Makefile.am being generated. + edit=0 + while test $edit != $makefile_am_edits; do + edit=`expr $edit + 1` + eval dir=\"\$makefile_am_edit${edit}_dir\" + eval var=\"\$makefile_am_edit${edit}_var\" + eval val=\"\$makefile_am_edit${edit}_val\" + if test -n "$var"; then + if test "${dir}Makefile.am" = "$destfile" || test "./${dir}Makefile.am" = "$destfile"; then + echo "${var} += ${val}" + eval "makefile_am_edit${edit}_var=" + fi + fi + done echo echo "AM_CPPFLAGS = \\" echo " -I. -I\$(srcdir) \\" @@ -2001,7 +2078,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 =" @@ -2047,6 +2124,15 @@ 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" } # func_emit_initmacro_end macro_prefix @@ -2055,6 +2141,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 +2193,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 +2201,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 +2275,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(/ { @@ -2382,7 +2484,7 @@ func_import () fi # Determine tests-related module list. echo "$final_modules" | LC_ALL=C sort -u > "$tmp"/final-modules - testsrelated_modules=`echo "$main_modules" | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$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` if test $verbose -ge 1; then echo "Tests-related module list:" echo "$testsrelated_modules" | sed -e 's/^/ /' @@ -2420,6 +2522,7 @@ func_import () # If --lgpl, verify that the licenses of modules are compatible. if test -n "$lgpl"; then + license_incompatibilities= for module in $main_modules; do license=`func_get_license $module` case $license in @@ -2430,13 +2533,13 @@ func_import () yes | 3) case $license in LGPL | LGPLv2+) ;; - *) func_fatal_error "incompatible license on module $module: $license" ;; + *) func_append license_incompatibilities "$module $license$nl" ;; esac ;; 2) case $license in LGPLv2+) ;; - *) func_fatal_error "incompatible license on module $module: $license" ;; + *) func_append license_incompatibilities "$module $license$nl" ;; esac ;; *) func_fatal_error "invalid value lgpl=$lgpl" ;; @@ -2444,6 +2547,13 @@ func_import () ;; esac done + if test -n "$license_incompatibilities"; then + # Format the license incompatibilities as a table. + sed_expand_column1_width50_indent17='s,^\([^ ]*\) ,\1 , +s,^\(.................................................[^ ]*\) *, \1 ,' + license_incompatibilities=`echo "$license_incompatibilities" | sed -e "$sed_expand_column1_width50_indent17"` + func_fatal_error "incompatible license on modules:$nl$license_incompatibilities" + fi fi # Show banner notice of every module. @@ -2671,7 +2781,7 @@ func_import () if test -n "$already_present"; then echo "Updating file $g (backup in ${g}~)" else - echo "Replacing file $g (non-gnulib code backuped in ${g}~) !!" + 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" \ @@ -2687,7 +2797,7 @@ func_import () if test -n "$already_present"; then echo "Update file $g (backup in ${g}~)" else - echo "Replace file $g (non-gnulib code backuped in ${g}~) !!" + echo "Replace file $g (non-gnulib code backed up in ${g}~) !!" fi fi fi @@ -2754,6 +2864,7 @@ func_import () func_append actioncmd " --po-base=$pobase" fi func_append actioncmd " --doc-base=$docbase" + func_append actioncmd " --tests-base=$testsbase" func_append actioncmd " --aux-dir=$auxdir" if test -n "$inctests"; then func_append actioncmd " --with-tests" @@ -2799,8 +2910,61 @@ func_import () # Create normal Makefile.ams. for_test=false + # Setup list of Makefile.am edits that are to be performed afterwards. + # Some of these edits apply to files that we will generate; others are + # under the responsibility of the developer. + makefile_am_edits=0 + # func_note_Makefile_am_edit dir var value + # remembers that ${dir}Makefile.am needs to be edited to that ${var} mentions + # ${value}. + func_note_Makefile_am_edit () + { + makefile_am_edits=`expr $makefile_am_edits + 1` + eval makefile_am_edit${makefile_am_edits}_dir=\"\$1\" + eval makefile_am_edit${makefile_am_edits}_var=\"\$2\" + eval makefile_am_edit${makefile_am_edits}_val=\"\$3\" + } + if test "$makefile_am" = Makefile.am; then + sourcebase_dir=`echo "$sourcebase" | sed -n -e 's,/[^/]*$,/,p'` + sourcebase_base=`basename "$sourcebase"` + func_note_Makefile_am_edit "$sourcebase_dir" SUBDIRS "$sourcebase_base" + fi + if test -n "$pobase"; then + pobase_dir=`echo "$pobase" | sed -n -e 's,/[^/]*$,/,p'` + pobase_base=`basename "$pobase"` + func_note_Makefile_am_edit "$pobase_dir" SUBDIRS "$pobase_base" + fi + if test -n "$inctests"; then + if test "$makefile_am" = Makefile.am; then + testsbase_dir=`echo "$testsbase" | sed -n -e 's,/[^/]*$,/,p'` + testsbase_base=`basename "$testsbase"` + func_note_Makefile_am_edit "$testsbase_dir" SUBDIRS "$testsbase_base" + fi + fi + func_note_Makefile_am_edit "" ACLOCAL_AMFLAGS "-I ${m4base}" + { + # Find the first parent directory of $m4base that contains or will contain + # a Makefile.am. + sed_last='s,^.*/\([^/][^/]*\)//*$,\1/, +s,//*$,/,' + sed_butlast='s,[^/][^/]*//*$,,' + dir1="${m4base}/"; dir2="" + while test -n "$dir1" \ + && ! { test -f "${destdir}/${dir1}Makefile.am" \ + || test "${dir1}Makefile.am" = "$sourcebase/$makefile_am" \ + || test "./${dir1}Makefile.am" = "$sourcebase/$makefile_am" \ + || { test -n "$inctests" \ + && { test "${dir1}Makefile.am" = "$testsbase/$makefile_am" \ + || test "./${dir1}Makefile.am" = "$testsbase/$makefile_am"; }; }; }; do + dir2=`echo "$dir1" | sed -e "$sed_last"`"$dir2" + dir1=`echo "$dir1" | sed -e "$sed_butlast"` + done + func_note_Makefile_am_edit "$dir1" EXTRA_DIST "${dir2}gnulib-cache.m4" + } + # Create library makefile. func_dest_tmpfilename $sourcebase/$makefile_am + destfile="$sourcebase/$makefile_am" modules="$main_modules" func_emit_lib_Makefile_am > "$tmpfile" if test -f "$destdir"/$sourcebase/$makefile_am; then @@ -2858,7 +3022,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 +3048,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 +3151,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])" @@ -3100,7 +3266,7 @@ func_import () ba }' else - sed_replace_build_aux= + sed_replace_build_aux="$sed_noop" fi func_emit_initmacro_start $macro_prefix echo " gl_source_base='$sourcebase'" @@ -3192,6 +3358,7 @@ func_import () if test -n "$inctests"; then # Create tests makefile. func_dest_tmpfilename $testsbase/$makefile_am + destfile="$testsbase/$makefile_am" modules="$testsrelated_modules" func_emit_tests_Makefile_am > "$tmpfile" if test -f "$destdir"/$testsbase/$makefile_am; then @@ -3223,6 +3390,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,20 +3399,36 @@ 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 - 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 \ - | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-removed + 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 + echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \ + | LC_ALL=C join -v 2 "$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 > "$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 +3445,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" @@ -3366,24 +3551,16 @@ func_import () echo " - \"include $makefile_name\" from within \"$testsbase/Makefile.am\"," fi fi - if test "$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 - if test -n "$pobase"; then - pobase_dir=`echo "$pobase" | sed -n -e 's,/[^/]*$,/,p'` - pobase_base=`basename "$pobase"` - echo " - mention \"${pobase_base}\" in SUBDIRS in ${pobase_dir}Makefile.am," - fi - if test -n "$inctests"; then - if test "$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," + edit=0 + while test $edit != $makefile_am_edits; do + edit=`expr $edit + 1` + eval dir=\"\$makefile_am_edit${edit}_dir\" + eval var=\"\$makefile_am_edit${edit}_var\" + eval val=\"\$makefile_am_edit${edit}_val\" + if test -n "$var"; then + echo " - mention \"${val}\" in ${var} in ${dir}Makefile.am," fi - fi - echo " - mention \"-I ${m4base}\" in ACLOCAL_AMFLAGS in Makefile.am," + done echo " - invoke ${macro_prefix}_EARLY in $configure_ac, right after AC_PROG_CC," echo " - invoke ${macro_prefix}_INIT in $configure_ac." } @@ -3540,8 +3717,12 @@ func_create_testdir () # Create Makefile.ams that are for testing. for_test=true + # No special edits are needed. + makefile_am_edits=0 + # Create $sourcebase/Makefile.am. mkdir -p "$testdir/$sourcebase" + destfile="$sourcebase/Makefile.am" func_emit_lib_Makefile_am > "$testdir/$sourcebase/Makefile.am" any_uses_subdirs="$uses_subdirs" @@ -3577,6 +3758,7 @@ func_create_testdir () auxdir=`echo "$testsbase/"|sed 's%[^/][^/]*//*%../%g'`"$auxdir" # Create $testsbase/Makefile.am. use_libtests=false + destfile="$testsbase/Makefile.am" func_emit_tests_Makefile_am > "$testdir/$testsbase/Makefile.am" any_uses_subdirs="$any_uses_subdirs$uses_subdirs" # Create $testsbase/configure.ac. @@ -3747,7 +3929,7 @@ func_create_testdir () ba }' else - sed_replace_build_aux= + sed_replace_build_aux="$sed_noop" fi func_emit_initmacro_start $macro_prefix echo "gl_source_base='$sourcebase'"