summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2005-02-10 00:10:57 +0000
committerPaul Smith <psmith@gnu.org>2005-02-10 00:10:57 +0000
commitc90f47e8320b41e3a5bfeb654543d9474f763e5d (patch)
treef1e18c8945deebecf1529c040d01602d9c997eaa
parent939167cfc151eae77c0d2a9d01fe2e73cab1a1b1 (diff)
downloadgunmake-c90f47e8320b41e3a5bfeb654543d9474f763e5d.tar.gz
Flush stdout after printing directory info.
Fix references to MINGW #define constants. Remove WINDOWS32 ifdef from sub_proc.h. Only add variables to the command line for recursion once. New features in run_make_test: #PWD# and #MAKEPATH# replacements. Test the multi-variable fix in the recursion regression test.
-rw-r--r--ChangeLog16
-rw-r--r--dir.c4
-rw-r--r--main.c25
-rw-r--r--tests/ChangeLog5
-rwxr-xr-xtests/run_make_tests.pl4
-rw-r--r--tests/scripts/features/recursion104
-rw-r--r--w32/include/sub_proc.h7
7 files changed, 96 insertions, 69 deletions
diff --git a/ChangeLog b/ChangeLog
index 09f0ffe..dc4c899 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,22 @@
Also, the ftp://ftp.gnu.org/GNUinfo site was removed so I'm
downloading the .texi files from Savannah now.
+ Fixed these issues reported by Markus Mauhart <qwe123@chello.at>:
+
+ * main.c (handle_non_switch_argument): Only add variables to
+ command_variables if they're not already there: duplicate settings
+ waste space and can be confusing to read.
+
+ * w32/include/sub_proc.h: Remove WINDOWS32. It's not needed since
+ this header is never included by non-WINDOWS32 code, and it
+ requires <config.h> to define which isn't always included first.
+
+ * dir.c (read_dirstream) [MINGW]: Use proper macro names when
+ testing MINGW32 versions.
+
+ * main.c (log_working_directory): flush stdout to be sure the WD
+ change is printed before any stderr messages show up.
+
2005-02-01 Paul D. Smith <psmith@gnu.org>
* maintMakefile (po_repo): Update the GNU translation site URL.
diff --git a/dir.c b/dir.c
index 9ab4ffc..976e0b4 100644
--- a/dir.c
+++ b/dir.c
@@ -1131,8 +1131,8 @@ read_dirstream (__ptr_t stream)
}
d = (struct dirent *) buf;
#ifdef __MINGW32__
-# if __MINGW32_VERSION_MAJOR < 3 || (__MINGW32_VERSION_MAJOR == 3 && \
- __MINGW32_VERSION_MINOR == 0)
+# if __MINGW32_MAJOR_VERSION < 3 || (__MINGW32_MAJOR_VERSION == 3 && \
+ __MINGW32_MINOR_VERSION == 0)
d->d_name = xmalloc(len);
# endif
#endif
diff --git a/main.c b/main.c
index 1086908..726729b 100644
--- a/main.c
+++ b/main.c
@@ -2150,13 +2150,21 @@ handle_non_switch_argument (char *arg, int env)
v = try_variable_definition (0, arg, o_command, 0);
if (v != 0)
{
- /* It is indeed a variable definition. Record a pointer to
- the variable for later use in define_makeflags. */
- struct command_variable *cv
- = (struct command_variable *) xmalloc (sizeof (*cv));
- cv->variable = v;
- cv->next = command_variables;
- command_variables = cv;
+ /* It is indeed a variable definition. If we don't already have this
+ one, record a pointer to the variable for later use in
+ define_makeflags. */
+ struct command_variable *cv;
+
+ for (cv = command_variables; cv != 0; cv = cv->next)
+ if (cv->variable == v)
+ break;
+
+ if (! cv) {
+ cv = (struct command_variable *) xmalloc (sizeof (*cv));
+ cv->variable = v;
+ cv->next = command_variables;
+ command_variables = cv;
+ }
}
else if (! env)
{
@@ -2907,4 +2915,7 @@ log_working_directory (int entering)
else
printf (_("%s[%u]: Leaving directory `%s'\n"),
program, makelevel, starting_directory);
+
+ /* Flush stdout to be sure this comes before any stderr output. */
+ fflush (stdout);
}
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 9f68a05..ffaf1b1 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,8 @@
+2005-02-09 Paul D. Smith <psmith@gnu.org>
+
+ * scripts/features/recursion: Test command line variable settings:
+ only one instance of a given variable should be provided.
+
2004-11-30 Boris Kolpackov <boris@kolpackov.net>
* tests/scripts/functions/abspath: New file: test `abspath'
diff --git a/tests/run_make_tests.pl b/tests/run_make_tests.pl
index 9b9104f..aeba4e8 100755
--- a/tests/run_make_tests.pl
+++ b/tests/run_make_tests.pl
@@ -81,7 +81,9 @@ sub run_make_test
# Replace @MAKEFILE@ with the makefile name and @MAKE@ with the path to
# make
$makestring =~ s/#MAKEFILE#/$makefile/g;
+ $makestring =~ s/#MAKEPATH#/$mkpath/g;
$makestring =~ s/#MAKE#/$make_name/g;
+ $makestring =~ s/#PWD#/$pwd/g;
# Populate the makefile!
open(MAKEFILE, "> $makefile") || die "Failed to open $makefile: $!\n";
@@ -93,7 +95,9 @@ sub run_make_test
$answer && $answer !~ /\n$/s and $answer .= "\n";
$answer =~ s/#MAKEFILE#/$makefile/g;
+ $answer =~ s/#MAKEPATH#/$mkpath/g;
$answer =~ s/#MAKE#/$make_name/g;
+ $answer =~ s/#PWD#/$pwd/g;
&run_make_with_options($makefile, $options, &get_logfile(0), $err_code);
&compare_output($answer, &get_logfile(1));
diff --git a/tests/scripts/features/recursion b/tests/scripts/features/recursion
index 444f7ce..b9dfd4f 100644
--- a/tests/scripts/features/recursion
+++ b/tests/scripts/features/recursion
@@ -1,61 +1,55 @@
# -*-perl-*-
-$description = "The following test creates a makefile to ...\n";
+$description = "Test recursion.";
$details = "DETAILS";
-open(MAKEFILE,"> $makefile");
-
-# The Contents of the MAKEFILE ...
-
-print MAKEFILE "all: \n"
- ."\t\$(MAKE) -f $makefile foo \n"
- ."foo: \n"
- ."\t\@echo \$(MAKE) \n"
- ."\t\@echo MAKELEVEL = \$(MAKELEVEL)\n"
- ."\t\$(MAKE) -f $makefile last \n"
- ."last: \n"
- ."\t\@echo \$(MAKE) \n"
- ."\t\@echo MAKELEVEL = \$(MAKELEVEL) \n"
- ."\t\@echo THE END\n";
-
-# END of Contents of MAKEFILE
-
-close(MAKEFILE);
-
-if ($vos)
-{
- $answer = "$make_name: Entering directory \`$pwd\'\n"
- ."make 'CFLAGS=-O' -f $makefile foo \n"
- ."make CFLAGS=-O\n"
- ."MAKELEVEL = 0\n"
- ."make 'CFLAGS=-O' -f $makefile last \n"
- ."make CFLAGS=-O\n"
- ."MAKELEVEL = 0\n"
- ."THE END\n"
- ."$make_name: Leaving directory `$pwd'\n";
-}
-else
-{
- $answer = "$make_name: Entering directory `$pwd'\n"
- ."$mkpath -f $makefile foo \n"
- ."${make_name}[1]: Entering directory `$pwd'\n"
- ."$mkpath\n"
- ."MAKELEVEL = 1\n"
- ."$mkpath -f $makefile last \n"
- ."${make_name}[2]: Entering directory `$pwd'\n"
- ."$mkpath\n"
- ."MAKELEVEL = 2\n"
- ."THE END\n"
- ."${make_name}[2]: Leaving directory `$pwd'\n"
- ."${make_name}[1]: Leaving directory `$pwd'\n"
- ."$make_name: Leaving directory `$pwd'\n";
-}
-
-$mkoptions = "CFLAGS=-O -w";
-$mkoptions .= " -j 2" if ($parallel_jobs);
-
-&run_make_with_options($makefile,$mkoptions,&get_logfile,0);
-
-&compare_output($answer,&get_logfile(1));
+# Test some basic recursion.
+run_make_test('
+all:
+ $(MAKE) -f #MAKEFILE# foo
+foo:
+ @echo $(MAKE)
+ @echo MAKELEVEL = $(MAKELEVEL)
+ $(MAKE) -f #MAKEFILE# last
+last:
+ @echo $(MAKE)
+ @echo MAKELEVEL = $(MAKELEVEL)
+ @echo THE END
+',
+ ('CFLAGS=-O -w' . ($parallel_jobs ? '-j 2' : '')),
+ ($vos
+ ? "#MAKE#: Entering directory `#PWD#'
+make 'CFLAGS=-O' -f #MAKEFILE# foo
+make CFLAGS=-O
+MAKELEVEL = 0
+make 'CFLAGS=-O' -f #MAKEFILE# last
+make CFLAGS=-O
+MAKELEVEL = 0
+THE END
+#MAKE#: Leaving directory `#PWD#'"
+ : "#MAKE#: Entering directory `#PWD#'
+#MAKEPATH# -f #MAKEFILE# foo
+#MAKE#[1]: Entering directory `#PWD#'
+#MAKEPATH#
+MAKELEVEL = 1
+#MAKEPATH# -f #MAKEFILE# last
+#MAKE#[2]: Entering directory `#PWD#'
+#MAKEPATH#
+MAKELEVEL = 2
+THE END
+#MAKE#[2]: Leaving directory `#PWD#'
+#MAKE#[1]: Leaving directory `#PWD#'
+#MAKE#: Leaving directory `#PWD#'"));
+
+
+# Test command line overrides.
+run_make_test('
+recur: all ; @$(MAKE) --no-print-directory -f #MAKEFILE# a=AA all
+all: ; @echo "MAKEOVERRIDES = $(MAKEOVERRIDES)"
+',
+ 'a=ZZ',
+ 'MAKEOVERRIDES = a=ZZ
+MAKEOVERRIDES = a=AA
+');
1;
diff --git a/w32/include/sub_proc.h b/w32/include/sub_proc.h
index d7478bb..2654b34 100644
--- a/w32/include/sub_proc.h
+++ b/w32/include/sub_proc.h
@@ -2,7 +2,7 @@
#define SUB_PROC_H
/*
- * Component Name:
+ * Component Name:
*
* $Date$
*
@@ -13,8 +13,6 @@
/* $Id$ */
-#ifdef WINDOWS32
-
#define EXTERN_DECL(entry, args) extern entry args
#define VOID_DECL void
@@ -23,7 +21,7 @@ EXTERN_DECL(HANDLE process_init_fd, (HANDLE stdinh, HANDLE stdouth,
HANDLE stderrh));
EXTERN_DECL(long process_begin, (HANDLE proc, char **argv, char **envp,
char *exec_path, char *as_user));
-EXTERN_DECL(long process_pipe_io, (HANDLE proc, char *stdin_data,
+EXTERN_DECL(long process_pipe_io, (HANDLE proc, char *stdin_data,
int stdin_data_len));
EXTERN_DECL(long process_file_io, (HANDLE proc));
EXTERN_DECL(void process_cleanup, (HANDLE proc));
@@ -44,4 +42,3 @@ EXTERN_DECL(int process_errcnt, (HANDLE proc));
EXTERN_DECL(void process_pipes, (HANDLE proc, int pipes[3]));
#endif
-#endif