From 6d8d9b74d9c50cb07fe952ac0929f618e4280a55 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Fri, 10 Mar 2006 02:20:45 +0000 Subject: Numerous updates to tests for issues found on Cygwin and Windows. 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. --- ChangeLog | 25 ++++++++++++++++++ config/ChangeLog | 5 ++++ config/dospaths.m4 | 2 +- configure.in | 2 +- expand.c | 2 +- glob/ChangeLog | 5 ++++ glob/glob.c | 3 ++- implicit.c | 2 +- job.c | 10 +++++--- remake.c | 6 +++-- tests/ChangeLog | 12 +++++++++ tests/scripts/features/escape | 54 +++++++++++++++++++-------------------- tests/scripts/functions/foreach | 18 +++++-------- tests/scripts/functions/origin | 44 ++++++++++++------------------- tests/scripts/options/symlinks | 9 ++++--- tests/scripts/variables/automatic | 19 ++++++++------ tests/test_driver.pl | 12 +++------ w32/subproc/sub_proc.c | 10 ++++---- 18 files changed, 140 insertions(+), 100 deletions(-) diff --git a/ChangeLog b/ChangeLog index b32ece5..04f4672 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2006-03-09 Paul Smith + + * 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 + 2006-03-04 Eli Zaretskii * variable.c (do_variable_definition) [WINDOWS32]: Call the shell @@ -25,6 +39,17 @@ (enter_file) [VMS]: Ditto. Patch provided by Hartmut Becker . +2006-02-24 Eli Zaretskii + + * 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 * job.c (construct_command_argv_internal): Don't create a temporary diff --git a/config/ChangeLog b/config/ChangeLog index 1cf3b32..3aebc08 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,8 @@ +2006-03-09 Paul Smith + + * dospaths.m4: Add MSYS to the list of targets allowing DOS-style + pathnames. Reported by David Ergo . + 2005-07-01 Paul D. Smith * Makefile.am (EXTRA_DIST): Added more M4 files to EXTRA_DIST, so diff --git a/config/dospaths.m4 b/config/dospaths.m4 index 014fa05..1f40640 100644 --- a/config/dospaths.m4 +++ b/config/dospaths.m4 @@ -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 ], diff --git a/configure.in b/configure.in index b072f0f..501187b 100644 --- a/configure.in +++ b/configure.in @@ -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$]]) diff --git a/expand.c b/expand.c index 39f0d19..5c7934e 100644 --- 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. diff --git a/glob/ChangeLog b/glob/ChangeLog index 570c19c..68727be 100644 --- a/glob/ChangeLog +++ b/glob/ChangeLog @@ -1,3 +1,8 @@ +2006-02-24 Eli Zaretskii + + * glob.c (my_malloc) [WINDOWS32]: Provide a full ISO C prototype, + to avoid compiler warnings. + 2005-06-25 Paul D. Smith * fnmatch.h, glob.h [WINDOWS32]: Fix ifdefs in headers. diff --git a/glob/glob.c b/glob/glob.c index 8deb273..a5e6a19 100644 --- a/glob/glob.c +++ b/glob/glob.c @@ -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. */ diff --git a/implicit.c b/implicit.c index b8f1054..8085ea1 100644 --- a/implicit.c +++ b/implicit.c @@ -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 --- 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(); diff --git a/remake.c b/remake.c index 8a943d6..da231b4 100644 --- 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; diff --git a/tests/ChangeLog b/tests/ChangeLog index 3db7cc3..05dfaec 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,15 @@ +2006-03-09 Paul Smith + + * 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 * run_make_tests.pl (set_more_defaults): Add CYGWIN_NT as a port diff --git a/tests/scripts/features/escape b/tests/scripts/features/escape index 88b372a..97a2994 100644 --- a/tests/scripts/features/escape +++ b/tests/scripts/features/escape @@ -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; diff --git a/tests/scripts/functions/foreach b/tests/scripts/functions/foreach index 904c160..9d1c464 100644 --- a/tests/scripts/functions/foreach +++ b/tests/scripts/functions/foreach @@ -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 diff --git a/tests/scripts/functions/origin b/tests/scripts/functions/origin index 49e6f38..f7b7eb8 100644 --- a/tests/scripts/functions/origin +++ b/tests/scripts/functions/origin @@ -18,34 +18,24 @@ defined per the following list: # Set an environment variable $extraENV{MAKETEST} = 1; -open(MAKEFILE,"> $makefile"); - -print MAKEFILE < 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; +} diff --git a/tests/scripts/variables/automatic b/tests/scripts/variables/automatic index 847c836..7237fe2 100644 --- a/tests/scripts/variables/automatic +++ b/tests/scripts/variables/automatic @@ -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; diff --git a/tests/test_driver.pl b/tests/test_driver.pl index e61da12..c5ee157 100644 --- a/tests/test_driver.pl +++ b/tests/test_driver.pl @@ -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) { diff --git a/w32/subproc/sub_proc.c b/w32/subproc/sub_proc.c index 9c2c5c5..8ba9ac3 100644 --- a/w32/subproc/sub_proc.c +++ b/w32/subproc/sub_proc.c @@ -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) { -- cgit v1.2.3