Numerous updates to tests for issues found on Cygwin and Windows.
authorPaul Smith <psmith@gnu.org>
Fri, 10 Mar 2006 02:20:45 +0000 (02:20 +0000)
committerPaul Smith <psmith@gnu.org>
Fri, 10 Mar 2006 02:20:45 +0000 (02:20 +0000)
Revert a fix for $? including non-existent files as it shows a bug
in the Linux kernel build.  Give them a release to fix this.
Add some changes from Eli Z. for Windows changes.

18 files changed:
ChangeLog
config/ChangeLog
config/dospaths.m4
configure.in
expand.c
glob/ChangeLog
glob/glob.c
implicit.c
job.c
remake.c
tests/ChangeLog
tests/scripts/features/escape
tests/scripts/functions/foreach
tests/scripts/functions/origin
tests/scripts/options/symlinks
tests/scripts/variables/automatic
tests/test_driver.pl
w32/subproc/sub_proc.c

index b32ece5..04f4672 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2006-03-09  Paul Smith  <psmith@gnu.org>
+
+       * remake.c (update_file_1): Revert the change of 3 Jan 2006 which
+       listed non-existent files as changed.  Turns out there's a bug in
+       the Linux kernel builds which means that this change causes
+       everything to rebuild every time.  We will re-introduce this fix
+       in the next release, to give them time to fix their build system.
+       Fixes Savannah bug #16002.
+       Introduces Savannah bug #16051.
+       
+       * implicit.c (pattern_search) [DOS_PATHS]: Look for DOS paths if
+       we *don't* find UNIX "/".
+       Reported by David Ergo <david.ergo@alterface.com>
+
 2006-03-04  Eli Zaretskii  <eliz@gnu.org>
 
        * variable.c (do_variable_definition) [WINDOWS32]: Call the shell
        (enter_file) [VMS]: Ditto.
        Patch provided by Hartmut Becker <Hartmut.Becker@hp.com>.
 
+2006-02-24  Eli Zaretskii  <eliz@gnu.org>
+
+       * job.c (construct_command_argv_internal): Fix last change.
+
+       * w32/subproc/sub_proc.c (process_pipe_io): Make dwStdin,
+        dwStdout, and dwStderr unsigned int: avoids compiler warnings in
+        the calls to _beginthreadex.
+
+       * expand.c (recursively_expand_for_file): Initialize `save' to
+        prevent compiler warnings.
+
 2006-02-18  Eli Zaretskii  <eliz@gnu.org>
 
         * job.c (construct_command_argv_internal): Don't create a temporary
index 1cf3b32..3aebc08 100644 (file)
@@ -1,3 +1,8 @@
+2006-03-09  Paul Smith  <psmith@gnu.org>
+
+       * dospaths.m4: Add MSYS to the list of targets allowing DOS-style
+       pathnames.  Reported by David Ergo <david.ergo@alterface.com>.
+
 2005-07-01  Paul D. Smith  <psmith@gnu.org>
 
        * Makefile.am (EXTRA_DIST): Added more M4 files to EXTRA_DIST, so
index 014fa05..1f40640 100644 (file)
@@ -22,7 +22,7 @@ AC_DEFUN([pds_AC_DOS_PATHS],
     AC_CACHE_CHECK([whether system uses MSDOS-style paths], [ac_cv_dos_paths],
       [
         AC_COMPILE_IFELSE([
-#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __EMX__
+#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __EMX__ && !defined __MSYS__
 neither MSDOS nor Windows nor OS2
 #endif
 ],
index b072f0f..501187b 100644 (file)
@@ -16,7 +16,7 @@
 # GNU Make; see the file COPYING.  If not, write to the Free Software
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 
-AC_INIT([GNU make],[3.81rc1],[bug-make@gnu.org])
+AC_INIT([GNU make],[3.81rc2],[bug-make@gnu.org])
 
 AC_PREREQ(2.59)
 AC_REVISION([[$Id$]])
index 39f0d19..5c7934e 100644 (file)
--- a/expand.c
+++ b/expand.c
@@ -101,7 +101,7 @@ recursively_expand_for_file (struct variable *v, struct file *file)
   char *value;
   const struct floc *this_var;
   const struct floc **saved_varp;
-  struct variable_set_list *save;
+  struct variable_set_list *save = 0;
   int set_reading = 0;
 
   /* Don't install a new location if this location is empty.
index 570c19c..68727be 100644 (file)
@@ -1,3 +1,8 @@
+2006-02-24  Eli Zaretskii  <eliz@gnu.org>
+
+       * glob.c (my_malloc) [WINDOWS32]: Provide a full ISO C prototype,
+        to avoid compiler warnings.
+
 2005-06-25  Paul D. Smith  <psmith@gnu.org>
 
        * fnmatch.h, glob.h [WINDOWS32]: Fix ifdefs in headers.
index 8deb273..a5e6a19 100644 (file)
@@ -188,12 +188,13 @@ __inline
 # ifndef __SASC
 #  ifdef WINDOWS32
 static void *
+my_realloc (void *p, unsigned int n)
 #  else
 static char *
-# endif
 my_realloc (p, n)
      char *p;
      unsigned int n;
+# endif
 {
   /* These casts are the for sake of the broken Ultrix compiler,
      which warns of illegal pointer combinations otherwise.  */
index b8f1054..8085ea1 100644 (file)
@@ -354,7 +354,7 @@ pattern_search (struct file *file, int archive,
               check_lastslash = strchr (target, '/') == 0;
 #ifdef HAVE_DOS_PATHS
               /* Didn't find it yet: check for DOS-type directories.  */
-              if (!check_lastslash)
+              if (check_lastslash)
                 {
                   char *b = strrchr (target, '\\');
                   check_lastslash = !(b ? b > lastslash
diff --git a/job.c b/job.c
index 3ef4c75..a81cd81 100644 (file)
--- a/job.c
+++ b/job.c
@@ -2770,9 +2770,13 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
     /* Some shells do not work well when invoked as 'sh -c xxx' to run a
        command line (e.g. Cygnus GNUWIN32 sh.exe on WIN32 systems).  In these
        cases, run commands via a script file.  */
-    if (just_print_flag)
-      ; /* Do nothing here.  */
-    if ((no_default_sh_exe || batch_mode_shell) && batch_filename_ptr) {
+    if (just_print_flag) {
+      /* Need to allocate new_argv, although it's unused, because
+        start_job_command will want to free it and its 0'th element.  */
+      new_argv = (char **) xmalloc(2 * sizeof (char *));
+      new_argv[0] = xstrdup ("");
+      new_argv[1] = NULL;
+    } else if ((no_default_sh_exe || batch_mode_shell) && batch_filename_ptr) {
       int temp_fd;
       FILE* batch = NULL;
       int id = GetCurrentProcessId();
index 8a943d6..da231b4 100644 (file)
--- a/remake.c
+++ b/remake.c
@@ -530,9 +530,11 @@ update_file_1 (struct file *file, unsigned int depth)
 
       if (!running)
         /* The prereq is considered changed if the timestamp has changed while
-           it was built, OR it doesn't exist.  */
+           it was built, OR it doesn't exist.
+          This causes the Linux kernel build to break.  We'll defer this
+          fix until GNU make 3.82 to give them time to update.  */
        d->changed = ((file_mtime (d->file) != mtime)
-                      || (mtime == NONEXISTENT_MTIME));
+                      /* || (mtime == NONEXISTENT_MTIME) */);
 
       lastd = d;
       d = d->next;
index 3db7cc3..05dfaec 100644 (file)
@@ -1,3 +1,15 @@
+2006-03-09  Paul Smith  <psmith@gnu.org>
+
+       * scripts/features/escape: Use "pre:" not "p:" to avoid conflicts
+       with DOS drive letters.  Fixes Savannah bug #15947.
+
+       * test_driver.pl (run_each_test): Set the status properly even
+       when a test fails to execute.  Fixes Savannah bug #15942.
+
+       * scripts/functions/foreach: Use a different environment variable
+       other than PATH to avoid differences with Windows platforms.
+       Fixes Savannah bug #15938.
+
 2006-03-05  Paul D. Smith  <psmith@gnu.org>
 
        * run_make_tests.pl (set_more_defaults): Add CYGWIN_NT as a port
index 88b372a..97a2994 100644 (file)
@@ -6,55 +6,53 @@ Make sure that escaping of `:' works in target names.
 Make sure escaping of whitespace works in target names.
 Make sure that escaping of '#' works.";
 
-open(MAKEFILE,"> $makefile");
-
-print MAKEFILE <<'EOF';
-$(path)foo : ; @echo cp $^ $@
-
-foo\ bar: ; @echo 'touch "$@"'
-
-sharp: foo\#bar.ext
-foo\#bar.ext: ; @echo foo\#bar.ext = '$@'
-EOF
 
 close(MAKEFILE);
 
 
 # TEST 1
 
-&run_make_with_options($makefile, "", &get_logfile);
-$answer = "cp foo\n";
-&compare_output($answer,&get_logfile(1));
+run_make_test('
+$(path)foo : ; @echo "touch ($@)"
+
+foo\ bar: ; @echo "touch ($@)"
+
+sharp: foo\#bar.ext
+foo\#bar.ext: ; @echo "foo#bar.ext = ($@)"',
+             '',
+             'touch (foo)');
 
 # TEST 2: This one should fail, since the ":" is unquoted.
 
-&run_make_with_options($makefile, "path=p:", &get_logfile, 512);
-$answer = "$makefile:1: *** target pattern contains no `%'.  Stop.\n";
-&compare_output($answer,&get_logfile(1));
+run_make_test(undef,
+             'path=pre:',
+             "#MAKEFILE#:2: *** target pattern contains no `%'.  Stop.",
+             512);
 
 # TEST 3: This one should work, since we escape the ":".
 
-&run_make_with_options($makefile, "'path=p\\:'", &get_logfile, 0);
-$answer = "cp p:foo\n";
-&compare_output($answer,&get_logfile(1));
+run_make_test(undef,
+             "'path=pre\\:'",
+             'touch (pre:foo)');
 
 # TEST 4: This one should fail, since the escape char is escaped.
 
-&run_make_with_options($makefile, "'path=p\\\\:'", &get_logfile, 512);
-$answer = "$makefile:1: *** target pattern contains no `%'.  Stop.\n";
-&compare_output($answer,&get_logfile(1));
+run_make_test(undef,
+             "'path=pre\\\\:'",
+             "#MAKEFILE#:2: *** target pattern contains no `%'.  Stop.",
+             512);
 
 # TEST 5: This one should work
 
-&run_make_with_options($makefile, "'foo bar'", &get_logfile, 0);
-$answer = "touch \"foo bar\"\n";
-&compare_output($answer,&get_logfile(1));
+run_make_test(undef,
+             "'foo bar'",
+             'touch (foo bar)');
 
 # TEST 6: Test escaped comments
 
-&run_make_with_options($makefile, "sharp", &get_logfile, 0);
-$answer = "foo#bar.ext = foo#bar.ext\n";
-&compare_output($answer,&get_logfile(1));
+run_make_test(undef,
+             'sharp',
+             'foo#bar.ext = (foo#bar.ext)');
 
 # This tells the test driver that the perl test script executed properly.
 1;
index 904c160..9d1c464 100644 (file)
@@ -1,10 +1,7 @@
 #                                                                    -*-perl-*-
+# $Id$
 
-# Updated 16 June 1993 variable "MAKE" is default was environment override
-# For make 3.63 and above
-
-$description = "The following test creates a makefile to verify
-test the foreach function.";
+$description = "Test the foreach function.";
 
 $details = "This is a test of the foreach function in gnu make.
 This function starts with a space separated list of
@@ -16,14 +13,12 @@ types of foreach loops are tested\n";
 
 # TEST 0
 
-# On WIN32 systems, the user's path is found in %Path% ($Path)
-#
-$pathvar = (($port_type eq 'Windows') ? "Path" : "PATH");
+# Set an environment variable that we can test in the makefile.
+$extraENV{FOOFOO} = 'foo foo';
 
-run_make_test("
+run_make_test("space = ' '".'
 null :=
-space = ' '
-auto_var = udef space CC null $pathvar".' MAKE foo CFLAGS WHITE @ <
+auto_var = udef space CC null FOOFOO MAKE foo CFLAGS WHITE @ <
 foo = bletch null @ garf
 av = $(foreach var, $(auto_var), $(origin $(var)) )
 override WHITE := BLACK
@@ -36,6 +31,7 @@ for2: ; @echo $(fe)',
               "undefined file default file environment default file command line override automatic automatic
 foo.o bletch.o null.o @.o garf.o .o    .o undefined.o file.o default.o file.o environment.o default.o file.o command.o line.o override.o automatic.o automatic.o");
 
+delete $extraENV{FOOFOO};
 
 # TEST 1: Test that foreach variables take precedence over global
 # variables in a global scope (like inside an eval).  Tests bug #11913
index 49e6f38..f7b7eb8 100644 (file)
@@ -18,34 +18,24 @@ defined per the following list:
 # Set an environment variable
 $extraENV{MAKETEST} = 1;
 
-open(MAKEFILE,"> $makefile");
-
-print MAKEFILE <<EOF;
+run_make_test('
 foo := bletch garf
-auto_var = udef CC MAKETEST MAKE foo CFLAGS WHITE \@
-av = \$(foreach var, \$(auto_var), \$(origin \$(var)) )
+auto_var = undefined CC MAKETEST MAKE foo CFLAGS WHITE @
+av = $(foreach var, $(auto_var), $(origin $(var)) )
 override WHITE := BLACK
 all: auto
-\t\@echo \$(origin undefined)
-\t\@echo \$(origin CC)
-\t\@echo \$(origin MAKETEST)
-\t\@echo \$(origin MAKE)
-\t\@echo \$(origin foo)
-\t\@echo \$(origin CFLAGS)
-\t\@echo \$(origin WHITE)
-\t\@echo \$(origin \@)
+       @echo $(origin undefined)
+       @echo $(origin CC)
+       @echo $(origin MAKETEST)
+       @echo $(origin MAKE)
+       @echo $(origin foo)
+       @echo $(origin CFLAGS)
+       @echo $(origin WHITE)
+       @echo $(origin @)
 auto :
-\t\@echo \$(av)
-EOF
-
-close(MAKEFILE);
-
-&run_make_with_options($makefile,
-                      "-e WHITE=WHITE CFLAGS=",
-                      &get_logfile);
-
-# Create the answer to what should be produced by this Makefile
-$answer = "undefined default environment default file command line override automatic
+       @echo $(av)',
+             '-e WHITE=WHITE CFLAGS=',
+             'undefined default environment default file command line override automatic
 undefined
 default
 environment
@@ -53,9 +43,9 @@ default
 file
 command line
 override
-automatic\n";
-
+automatic');
 
-&compare_output($answer,&get_logfile(1));
+# Reset an environment variable
+delete $extraENV{MAKETEST};
 
 1;
index 70cba3c..40d2564 100644 (file)
@@ -10,7 +10,10 @@ $details = "Verify that symlink handling with and without -L works properly.";
 # (in that the symlink() function doesn't fail) but it really doesn't, so
 # check for it explicitly.
 
-if ($port_type ne 'W32' && eval { symlink("",""); 1 }) {
+if ($port_type eq 'W32' || !( eval { symlink("",""); 1 })) {
+  # This test is N/A 
+  -1;
+} else {
 
   # Set up a symlink sym -> dep
   # We'll make both dep and targ older than sym
@@ -60,6 +63,6 @@ if ($port_type ne 'W32' && eval { symlink("",""); 1 }) {
 
 
   rmfiles('targ', 'sym');
-}
 
-1;
+  1;
+}
index 847c836..7237fe2 100644 (file)
@@ -95,14 +95,17 @@ mbr.src: ; @:',
 # Make sure that nonexistent prerequisites are listed in $?, since they are
 # considered reasons for the target to be rebuilt.
 #
-touch('foo');
+# This was undone due to Savannah bug #16002.  We'll re-do it in the next
+# release.  See Savannah bug #16051.
 
-run_make_test('
-foo: bar ; @echo "\$$? = $?"
-bar: ;',
-              '',
-              '$? = bar');
-
-unlink('foo');
+#touch('foo');
+#
+#run_make_test('
+#foo: bar ; @echo "\$$? = $?"
+#bar: ;',
+#              '',
+#              '$? = bar');
+#
+#unlink('foo');
 
 1;
index e61da12..c5ee157 100644 (file)
@@ -427,8 +427,7 @@ sub run_each_test
       $diffext = 'd';
       $baseext = 'b';
       $extext = '';
-   }
-    else {
+    } else {
       $logext = 'log';
       $diffext = 'diff';
       $baseext = 'base';
@@ -459,12 +458,9 @@ sub run_each_test
     if (!defined($code))
     {
       $suite_passed = 0;
-      if (length ($@))
-      {
+      if (length ($@)) {
         warn "\n*** Test died ($testname): $@\n";
-      }
-      else
-      {
+      } else {
         warn "\n*** Couldn't run $perl_testname\n";
       }
     }
@@ -490,7 +486,7 @@ sub run_each_test
         &rmfiles ($base_filename . &num_suffix ($i) );
       }
     }
-    elsif ($code > 0) {
+    elsif (!defined $code || $code > 0) {
       $status = "FAILED ($tests_passed/$tests_run passed)";
     }
     elsif ($code < 0) {
index 9c2c5c5..8ba9ac3 100644 (file)
@@ -685,7 +685,7 @@ process_pipe_io(
        bool_t stdin_eof = FALSE, stdout_eof = FALSE, stderr_eof = FALSE;
        HANDLE childhand = (HANDLE) pproc->pid;
        HANDLE tStdin = NULL, tStdout = NULL, tStderr = NULL;
-       DWORD dwStdin, dwStdout, dwStderr;
+       unsigned int dwStdin, dwStdout, dwStderr;
        HANDLE wait_list[4];
        DWORD wait_count;
        DWORD wait_return;
@@ -704,8 +704,8 @@ process_pipe_io(
                pproc->sv_stdin[0] = 0;
        } else {
                tStdin = (HANDLE) _beginthreadex( 0, 1024,
-                       (unsigned (__stdcall *) (void *))proc_stdin_thread, pproc, 0,
-                       (unsigned int *) &dwStdin);
+                       (unsigned (__stdcall *) (void *))proc_stdin_thread,
+                                                 pproc, 0, &dwStdin);
                if (tStdin == 0) {
                        pproc->last_err = GetLastError();
                        pproc->lerrno = E_SCALL;
@@ -718,10 +718,10 @@ process_pipe_io(
         */
        tStdout = (HANDLE) _beginthreadex( 0, 1024,
                (unsigned (__stdcall *) (void *))proc_stdout_thread, pproc, 0,
-               (unsigned int *) &dwStdout);
+               &dwStdout);
        tStderr = (HANDLE) _beginthreadex( 0, 1024,
                (unsigned (__stdcall *) (void *))proc_stderr_thread, pproc, 0,
-               (unsigned int *) &dwStderr);
+               &dwStderr);
 
        if (tStdout == 0 || tStderr == 0) {