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.
This commit is contained in:
Paul Smith 2006-03-10 02:20:45 +00:00
parent afc4906aca
commit 6d8d9b74d9
18 changed files with 140 additions and 100 deletions

View file

@ -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
@ -25,6 +39,17 @@
(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

View 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

View 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
],

View 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$]])

View file

@ -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.

View 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.

View 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. */

View 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

10
job.c
View file

@ -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();

View file

@ -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;

View 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

View 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;

View 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

View 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;

View 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;
}

View 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;

View 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) {

View 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) {