test-c-stack: fix compilation failure on FreeBSD 5.0
[gnulib.git] / gnulib-tool
index 5cb90e9..ed71b1c 100755 (executable)
@@ -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.
     :
@@ -2068,10 +2068,10 @@ func_emit_initmacro_end ()
   # 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 ]${macro_prefix_arg}_LIBSOURCES_DIR[ ||"
+  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 ]${macro_prefix_arg}_LIBSOURCES_DIR[/\$gl_file ; then"
-  echo "          echo \"missing file ]${macro_prefix_arg}_LIBSOURCES_DIR[/\$gl_file\" >&2"
+  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"
@@ -2197,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(/ {
@@ -3004,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])"
@@ -3240,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.
@@ -3247,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 \
@@ -3258,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}~)"
@@ -3277,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"
@@ -3401,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."
 }
@@ -3418,9 +3455,8 @@ func_create_testdir ()
     # Except config-h, which breaks all modules which use HAVE_CONFIG_H.
     # Except fnmatch-posix, which conflicts with fnmatch-gnu. FIXME.
     # Except ftruncate, mountlist, which abort the configuration on mingw. FIXME.
-    # Except gnumakefile, which breaks when there is no file '.tarball-version'.
     modules=`func_all_modules`
-    modules=`for m in $modules; do case $m in config-h | fnmatch-posix | ftruncate | mountlist | gnumakefile) ;; *) echo $m;; esac; done`
+    modules=`for m in $modules; do case $m in config-h | fnmatch-posix | ftruncate | mountlist) ;; *) echo $m;; esac; done`
   fi
   modules=`for m in $modules; do echo $m; done | LC_ALL=C sort -u`
 
@@ -3895,8 +3931,7 @@ func_create_megatestdir ()
   # Then, all modules all together.
   # Except config-h, which breaks all modules which use HAVE_CONFIG_H.
   # Except fnmatch-posix, which conflicts with fnmatch-gnu. FIXME.
-  # Except gnumakefile, which breaks when there is no file '.tarball-version'.
-  allmodules=`for m in $allmodules; do if test $m != config-h && test $m != fnmatch-posix && test $m != gnumakefile; then echo $m; fi; done`
+  allmodules=`for m in $allmodules; do if test $m != config-h && test $m != fnmatch-posix; then echo $m; fi; done`
   func_create_testdir "$megatestdir/ALL" "$allmodules"
   func_append megasubdirs "ALL"