From e8de7acdabd271323f615fe450b8ab21f441d119 Mon Sep 17 00:00:00 2001 From: psmith Date: Sun, 1 Oct 2006 05:38:38 +0000 Subject: [PATCH] Fixed a number of documentation bugs, plus some build/install issues: 16304, 16468, 16577, 17701, 17880, 16051, 16652, 16698 Plus some from the mailing list. Imported a patch from Eli to allow Cygwin builds to support DOS-style pathnames. --- ChangeLog | 66 ++++++++++++++++++++++++++++++ README.OS2.template | 18 ++++---- README.cvs | 7 ++++ config.h.W32.template | 7 ++++ config/.cvsignore | 4 ++ config/dospaths.m4 | 2 +- configure.in | 6 ++- doc/make.texi | 86 ++++++++++++++++++++++++++++----------- job.c | 6 +++ maintMakefile | 15 +++---- make.1 | 2 +- make.h | 18 ++++---- remake.c | 6 +-- tests/ChangeLog | 11 +++++ tests/run_make_tests.pl | 5 --- tests/scripts/variables/automatic | 21 +++++----- tests/test_driver.pl | 10 +++-- variable.c | 2 +- variable.h | 2 +- 19 files changed, 217 insertions(+), 77 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3986793..1eb3ca3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,69 @@ +2006-09-30 Paul Smith + + * doc/make.texi (MAKEFILE_LIST Variable): Modify reference to + point to lastword since the example was updated. + Fixes Savannah bug #16304. + (Secondary Expansion): Correct example description. + Fixes Savannah bug #16468. + (Makefile Contents): Clarify that comments cannot appear within + variable references or function calls. + Fixes Savannah bug #16577. + (Special Targets): Clarify how .NOTPARALLEL works in recursion. + Fixes Savannah bug #17701. + Reported by Ralf Wildenhues : + (Prerequisite Types): Added an example of using order-only + prerequisites. Fixes Savannah bug #17880. + (Rule Syntax): "lise" -> "list" + (Multiple Rules): ... -> @dots{} + (Splitting Lines): ditto. + + * remake.c (update_file_1): Prereqs that don't exist should be + considered changed, for the purposes of $?. + Fixes Savannah bug #16051. + + * make.1: Remove extraneous "+". + Fixes Savannah bug #16652. + +2006-09-06 Paul D. Smith + + * configure.in: Include sys/types.h when checking for sys/wait.h. + +2006-08-18 Eli Zaretskii + + * configure.in (PATH_SEPARATOR_CHAR): Define to the value of + $PATH_SEPARATOR. + + * make.h (PATH_SEPARATOR_CHAR): Define only if still undefined. + Normally, it is defined in config.h. + + * config/dospaths.m4 : Define to yes on Cygwin as + well. + + * job.c (construct_command_argv_internal) [HAVE_DOS_PATHS]: Define + sh_chars_sh for Windows platforms that emulate Unix. + +2006-05-07 Paul D. Smith + + * README.OS2.template: Updates provided by Andreas Buening + . + +2006-04-30 Paul D. Smith + + * make.h: Include if HAVE_DIRECT_H. + * config.h.W32.template (HAVE_DIRECT_H): Set it if it's available. + +2006-04-26 Paul D. Smith + + * README.cvs: Add a reminder to notify the GNU translation robot. + + * doc/make.texi: Change @direcategory (requested by Karl Berry). + +2006-04-20 Paul D. Smith + + * maintMakefile (po-check): Use Perl instead of grep -E, for systems + that don't have extended grep. + (cvsclean): Use $(PERL) instead of perl. + 2006-04-09 Paul D. Smith * maintMakefile: Add some extra warning options (GCC 4.1 only?) diff --git a/README.OS2.template b/README.OS2.template index 77b6bf0..0495b2e 100644 --- a/README.OS2.template +++ b/README.OS2.template @@ -13,7 +13,7 @@ GNU make supports both shell types. The following list defines the order that is used to determine the shell: 1. The shell specified by the environment variable MAKESHELL. - 2. The shell specified by the SHELL variable within a Makefile. As on + 2. The shell specified by the SHELL variable within a Makefile. Like Unix, SHELL is NOT taken from the environment. 3. The shell specified by the COMSPEC environment variable. 4. The shell specified by the OS2_SHELL environment variable. @@ -64,7 +64,7 @@ A standard Unix like build environment: - GNU texinfo (you can use 3.1 (gnuinfo.zip), but I recommend 4.0) If you want to recreate the configuration files (developers only!) -you need also: GNU m4 1.4, autoconf 2.59, automake 1.8.2 (or compatible) +you need also: GNU m4 1.4, autoconf 2.59, automake 1.9.6 (or compatible) III. ***** COMPILATION AND INSTALLATION ***** @@ -83,7 +83,7 @@ b) Installation into x:/usr Note: Although it is possible to compile make using "./configure", "make", "make install" this is not recommended. In particular, - you must ALWAYS use LDFLAGS="-Zstack 0x8000" because the default + you must ALWAYS use LDFLAGS="-Zstack 0x6000" because the default stack size is far to small and make will not work properly! Recommended environment variables and installation options: @@ -91,13 +91,13 @@ Recommended environment variables and installation options: export ac_executable_extensions=".exe" export CPPFLAGS="-D__ST_MT_ERRNO__" export CFLAGS="-O2 -Zomf -Zmt" - export LDFLAGS="-Zcrtdll -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x8000" + export LDFLAGS="-Zcrtdll -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x6000" export RANLIB="echo" ./configure --prefix=x:/usr --infodir=x:/usr/share/info --mandir=x:/usr/share/man --without-included-gettext make AR=emxomfar make install -Note: If you use gcc 2.9.x or higher I recommend to set also LIBS="-lgcc" +Note: If you use gcc 2.9.x I recommend to set also LIBS="-lgcc" Note: You can add -DNO_CMD_DEFAULT and -DNO_CHDIR2 to CPPFLAGS. See section I. for details. @@ -148,15 +148,15 @@ To run the testsuite do the following: export CPPFLAGS="-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2" export CFLAGS="-Zomf -O2 -Zmt" - export LDFLAGS="-Zcrtdll -s -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x8000" + export LDFLAGS="-Zcrtdll -s -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x6000" export RANLIB="echo" ./configure --prefix=x:/usr --disable-nls make AR=emxomfar make check -All tests should work fine with the exception of "default_names" which -is because OS/2 file systems are not case sensitive ("makefile" and -"Makefile" specify the same file). +All tests should work fine with the exception of one of the "INCLUDE_DIRS" +tests which will fail if your /usr/include directory is on a drive different +from the make source tree. ------------------------------------------------------------------------------- diff --git a/README.cvs b/README.cvs index 9194f00..59a9d95 100644 --- a/README.cvs +++ b/README.cvs @@ -169,6 +169,13 @@ what you do: It will ask for the GPG passphrase _THREE_ times. Sigh. +For both final releases and pre-releases, send an email with the URL of +the package to the GNU translation robot to allow the translators to +work on it: + + + + Where to Announce ----------------- diff --git a/config.h.W32.template b/config.h.W32.template index e1d92ca..fc7fccc 100644 --- a/config.h.W32.template +++ b/config.h.W32.template @@ -81,6 +81,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ */ #define HAVE_DIRENT_H 1 +/* Define to 1 if you have the header file, and it defines getcwd() + and chdir(). + */ +#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(__INTERIX) +# define HAVE_DIRECT_H 1 +#endif + /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ /* #undef HAVE_DOPRNT */ diff --git a/config/.cvsignore b/config/.cvsignore index 8789912..b95b83b 100644 --- a/config/.cvsignore +++ b/config/.cvsignore @@ -3,5 +3,9 @@ config.* mkinstalldirs texinfo.tex mdate-sh +compile +depcomp +install-sh +missing Makefile Makefile.in diff --git a/config/dospaths.m4 b/config/dospaths.m4 index 1f40640..3d55cee 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__ && !defined __MSYS__ +#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __EMX__ && !defined __MSYS__ && !defined __CYGWIN__ neither MSDOS nor Windows nor OS2 #endif ], diff --git a/configure.in b/configure.in index bbc1d3d..b6faa37 100644 --- a/configure.in +++ b/configure.in @@ -19,7 +19,7 @@ AC_INIT([GNU make],[3.81.90],[bug-make@gnu.org]) AC_PREREQ(2.59) -AC_REVISION([[$Id: configure.in,v 1.144 2006/04/09 22:09:24 psmith Exp $]]) +AC_REVISION([[$Id: configure.in,v 1.145 2006/10/01 05:38:38 psmith Exp $]]) # Autoconf setup AC_CONFIG_AUX_DIR(config) @@ -191,7 +191,7 @@ AC_CHECK_DECLS([sys_siglist, _sys_siglist, __sys_siglist], , , # Check out the wait reality. -AC_CHECK_HEADERS(sys/wait.h) +AC_CHECK_HEADERS(sys/wait.h,,,[[#include ]]) AC_CHECK_FUNCS(waitpid wait3) AC_MSG_CHECKING(for union wait) AC_CACHE_VAL(make_cv_union_wait, [dnl @@ -381,6 +381,8 @@ case "$host" in ;; esac +AC_DEFINE_UNQUOTED(PATH_SEPARATOR_CHAR,'$PATH_SEPARATOR',[Define to the character that separates directories in PATH.]) + # Include the Maintainer's Makefile section, if it's here. MAINT_MAKEFILE=/dev/null diff --git a/doc/make.texi b/doc/make.texi index be22ea3..a4f84f4 100644 --- a/doc/make.texi +++ b/doc/make.texi @@ -4,7 +4,7 @@ @include version.texi @set EDITION 0.70 -@set RCSID $Id: make.texi,v 1.45 2006/04/01 06:36:40 psmith Exp $ +@set RCSID $Id: make.texi,v 1.46 2006/10/01 05:38:38 psmith Exp $ @settitle GNU @code{make} @setchapternewpage odd @@ -50,7 +50,7 @@ Software Foundation raise funds for GNU development.'' @c ISPELL CHECK: done, 2000-06-25 --Martin Buchholz -@dircategory GNU Packages +@dircategory Software development @direntry * Make: (make). Remake files automatically. @end direntry @@ -1009,6 +1009,10 @@ it) is effectively blank, and is ignored. If you want a literal appear on any line in the makefile, although they are treated specially in certain situations. +You cannot use comments within variable references or function calls: +any instance of @code{#} will be treated literally (rather than as the +start of a comment) inside a variable reference or function call. + Within a command script (if the line begins with a TAB character) the entire line is passed to the shell, just as with any other line that begins with a TAB. The shell decides how to interpret the text: @@ -1251,10 +1255,10 @@ name2 = inc.mk @end group @end example -@xref{Text Functions}, for more information on the @code{word} and -@code{words} functions used above. @xref{Flavors, The Two Flavors of -Variables}, for more information on simply-expanded (@code{:=}) -variable definitions. +@xref{Text Functions}, for more information on the @code{lastword} +function used above. @xref{Flavors, The Two Flavors of Variables}, +for more information on simply-expanded (@code{:=}) variable +definitions. @node Special Variables, Remaking Makefiles, MAKEFILE_LIST Variable, Makefiles @comment node-name, next, previous, up @@ -1744,7 +1748,7 @@ In the first prerequisite list, all three variables (@code{$$<}, second, they will have values @code{foo.1}, @code{foo.1 bar.1}, and @code{foo.1 bar.1} respectively. In the third they will have values @code{foo.1}, @code{foo.1 bar.1 foo.2 bar.2}, and @code{foo.1 bar.1 -foo.2 bar.2} respectively. +foo.2 bar.2 foo.1 foo.1 bar.1 foo.1 bar.1} respectively. Rules undergo secondary expansion in makefile order, except that the rule with the command script is always evaluated last. @@ -1937,7 +1941,7 @@ references, if you really want a dollar sign in a target or prerequisite you must write two of them, @samp{$$} (@pxref{Using Variables, ,How to Use Variables}). If you have enabled secondary expansion (@pxref{Secondary Expansion}) and you want a literal dollar -sign in the prerequisites lise, you must actually write @emph{four} +sign in the prerequisites list, you must actually write @emph{four} dollar signs (@samp{$$$$}). You may split a long line by inserting a backslash followed by a @@ -2000,10 +2004,41 @@ symbol are normal; any prerequisites to the right are order-only: The normal prerequisites section may of course be empty. Also, you may still declare multiple lines of prerequisites for the same target: -they are appended appropriately. Note that if you declare the same -file to be both a normal and an order-only prerequisite, the normal -prerequisite takes precedence (since they are a strict superset of the -behavior of an order-only prerequisite). +they are appended appropriately (normal prerequisites are appended to +the list of normal prerequisites; order-only prerequisites are +appended to the list of order-only prerequisites). Note that if you +declare the same file to be both a normal and an order-only +prerequisite, the normal prerequisite takes precedence (since they +have a strict superset of the behavior of an order-only prerequisite). + +Consider an example where your targets are to be placed in a separate +directory, and that directory might not exist before @code{make} is +run. In this situation, you want the directory to be created before +any targets are placed into it but, because the timestamps on +directories change whenever a file is added, removed, or renamed, we +certainly don't want to rebuild all the targets whenever the +directory's timestamp changes. One way to manage this is with +order-only prerequisites: make the directory an order-only +prerequisite on all the targets: + +@example +OBJDIR := objdir +OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o) + +$(OBJDIR)/%.o : %.c + $(COMPILE.c) $(OUTPUT_OPTION) $< + +all: $(OBJS) + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + mkdir $(OBJDIR) +@end example + +Now the rule to create the @file{objdir} directory will be run, if +needed, before any @samp{.o} is built, but no @samp{.o} will be built +because the @file{objdir} directory timestamp changed. @node Wildcards, Directory Search, Prerequisite Types, Rules @section Using Wildcard Characters in File Names @@ -2995,11 +3030,11 @@ Sub-@code{make}}. @item .NOTPARALLEL @cindex parallel execution, overriding -If @code{.NOTPARALLEL} is mentioned as a target, then this invocation of -@code{make} will be run serially, even if the @samp{-j} option is -given. Any recursively invoked @code{make} command will still be run in -parallel (unless its makefile contains this target). Any prerequisites -on this target are ignored. +If @code{.NOTPARALLEL} is mentioned as a target, then this invocation +of @code{make} will be run serially, even if the @samp{-j} option is +given. Any recursively invoked @code{make} command will still run +commands in parallel (unless its makefile also contains this target). +Any prerequisites on this target are ignored. @end table Any defined implicit rule suffix also counts as a special target if it @@ -3093,7 +3128,7 @@ more than one rule gives commands for the same file, @code{make} uses the last set given and prints an error message. (As a special case, if the file's name begins with a dot, no error message is printed. This odd behavior is only for compatibility with other implementations -of @code{make}... you should avoid using it). Occasionally it is +of @code{make}@dots{} you should avoid using it). Occasionally it is useful to have the same target invoke multiple commands which are defined in different parts of your makefile; you can use @dfn{double-colon rules} (@pxref{Double-Colon}) for this. @@ -3652,11 +3687,12 @@ hello world @end example @noindent -Notice how the backslash/newline pair was removed inside the string quoted -with double quotes (@code{"..."}), but not from the string quoted with single -quotes (@code{'...'}). This is the way the default shell (@file{/bin/sh}) -handles backslash/newline pairs. If you specify a different shell in your -makefiles it may treat them differently. +Notice how the backslash/newline pair was removed inside the string +quoted with double quotes (@code{"@dots{}"}), but not from the string +quoted with single quotes (@code{'@dots{}'}). This is the way the +default shell (@file{/bin/sh}) handles backslash/newline pairs. If +you specify a different shell in your makefiles it may treat them +differently. Sometimes you want to split a long line inside of single quotes, but you don't want the backslash-newline to appear in the quoted content. @@ -3942,7 +3978,9 @@ GNU @code{make} knows how to execute several commands at once. Normally, @code{make} will execute only one command at a time, waiting for it to finish before executing the next. However, the @samp{-j} or @samp{--jobs} option tells @code{make} to execute many commands -simultaneously.@refill +simultaneously. You can inhibit parallelism in a particular makefile +with the @code{.NOTPARALLEL} pseudo-target (@pxref{Special +Targets,Special Built-in Target Names}).@refill On MS-DOS, the @samp{-j} option has no effect, since that system doesn't support multi-processing. diff --git a/job.c b/job.c index 50c6d8f..79bdb0d 100644 --- a/job.c +++ b/job.c @@ -2307,6 +2307,12 @@ construct_command_argv_internal (char *line, char **restp, char *shell, "login", "logout", "read", "readonly", "set", "shift", "switch", "test", "times", "trap", "umask", "wait", "while", 0 }; +# ifdef HAVE_DOS_PATHS + /* This is required if the MSYS/Cygwin ports (which do not define + WINDOWS32) are compiled with HAVE_DOS_PATHS defined, which uses + sh_chars_sh[] directly (see below). */ + static char *sh_chars_sh = sh_chars; +# endif /* HAVE_DOS_PATHS */ #endif int i; char *p; diff --git a/maintMakefile b/maintMakefile index 457a39e..4599e15 100644 --- a/maintMakefile +++ b/maintMakefile @@ -91,11 +91,12 @@ CVS-CLEAN-FILES += $(maintFILES) $(TEMPLATES) $(MTEMPLATES) NMakefile \ # This rule tries to clean the tree right down to how it looks when you do a # virgin CVS checkout. -# This is potentially dangerous since it removes _ANY FILE_ that is not in -# CVS. Including files you might mean to add to CVS but haven't yet... -# I only use this in subdirectories where it's unlikely we have any new -# files. Stil... -cvsclean = perl -e '$$k{CVS} = 1; open(E,"< CVS/Entries") || die "CVS/Entries: $$!\n"; while (defined ($$_ = )) { m%^/([^/]*)% or next; $$k{$$1} = 1; } close(E) || die "CVS/Entries: $$!\n"; opendir(D, ".") || die ".: $$!\n"; while (defined ($$_ = readdir(D))) { -f $$_ && ! exists $$k{$$_} && unlink($$_); } closedir(D) || die ".: $$!\n";' +# This target is potentially dangerous since it removes _ANY FILE_ that +# is not in CVS. Including files you might mean to add to CVS but +# haven't yet... I only use this in subdirectories where it's unlikely +# we have any new files. Still... be careful!! + +cvsclean = $(PERL) -e '$$k{CVS} = 1; open(E,"< CVS/Entries") || die "CVS/Entries: $$!\n"; while (defined ($$_ = )) { m%^/([^/]*)% or next; $$k{$$1} = 1; } close(E) || die "CVS/Entries: $$!\n"; opendir(D, ".") || die ".: $$!\n"; while (defined ($$_ = readdir(D))) { -f $$_ && ! exists $$k{$$_} && unlink($$_); } closedir(D) || die ".: $$!\n";' .PHONY: cvs-clean cvs-clean: maintainer-clean @@ -214,8 +215,8 @@ changelog-check: # Ignore make.h; it defines _(). po-check: if test -f po/POTFILES.in; then \ - grep -E -v '^(#|$$)' po/POTFILES.in | sort > $@-1; \ - grep -E -l '\b_\(' *.c *.h | grep -v make.h | sort > $@-2; \ + grep '^[^#]' po/POTFILES.in | sort > $@-1; \ + $(PERL) -wn -e 'if (/\b_\(/) { $$ARGV eq "make.h" || print "$$ARGV\n" and close ARGV }' *.c *.h | sort > $@-2; \ diff -u $@-1 $@-2 || exit 1; \ rm -f $@-1 $@-2; \ fi diff --git a/make.1 b/make.1 index d11c4e6..5958b2e 100644 --- a/make.1 +++ b/make.1 @@ -164,7 +164,7 @@ for debugging while remaking makefiles. Give variables taken from the environment precedence over variables from makefiles. .TP 0.5i -+\fB\-f\fR \fIfile\fR, \fB\-\-file\fR=\fIfile\fR, \fB\-\-makefile\fR=\fIFILE\fR +\fB\-f\fR \fIfile\fR, \fB\-\-file\fR=\fIfile\fR, \fB\-\-makefile\fR=\fIFILE\fR Use .I file as a makefile. diff --git a/make.h b/make.h index 949f35a..316d9c7 100644 --- a/make.h +++ b/make.h @@ -311,16 +311,18 @@ int strcmpi (const char *,const char *); #define S_(msg1,msg2,num) ngettext (msg1,msg2,num) /* Handle other OSs. */ -#if defined(HAVE_DOS_PATHS) -# define PATH_SEPARATOR_CHAR ';' -#elif defined(VMS) -# define PATH_SEPARATOR_CHAR ',' -#else -# define PATH_SEPARATOR_CHAR ':' +#ifndef PATH_SEPARATOR_CHAR +# if defined(HAVE_DOS_PATHS) +# define PATH_SEPARATOR_CHAR ';' +# elif defined(VMS) +# define PATH_SEPARATOR_CHAR ',' +# else +# define PATH_SEPARATOR_CHAR ':' +# endif #endif -/* This is needed for getcwd() and chdir(). */ -#if defined(_MSC_VER) || defined(__BORLANDC__) +/* This is needed for getcwd() and chdir(), on some W32 systems. */ +#if defined(HAVE_DIRECT_H) # include #endif diff --git a/remake.c b/remake.c index 363b929..8d17ce7 100644 --- a/remake.c +++ b/remake.c @@ -535,11 +535,9 @@ 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. - This causes the Linux kernel build to break. We'll defer this - fix until GNU make 3.82 to give them time to update. */ + it was built, OR it doesn't exist. */ 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 3e3520f..2fca415 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,14 @@ +2006-10-01 Paul Smith + + * run_make_tests.pl (set_more_defaults): Remove setting of LANG in + ENV here. This doesn't always work. + * test_driver.pl (toplevel): Set LC_ALL to 'C' in the make + environment. Fixes Savannah bug #16698. + +2006-09-30 Paul Smith + + * scripts/variables/automatic: Add back the test for bug #8154. + 2006-04-01 Paul D. Smith * scripts/functions/realpath: Don't run tests with multiple diff --git a/tests/run_make_tests.pl b/tests/run_make_tests.pl index 689ce2e..0419fef 100755 --- a/tests/run_make_tests.pl +++ b/tests/run_make_tests.pl @@ -228,11 +228,6 @@ sub set_more_defaults local($string); local($index); - # Make sure we're in the C locale for those systems that support it, - # so sorting, etc. is predictable. - # - $ENV{LANG} = 'C'; - # find the type of the port. We do this up front to have a single # point of change if it needs to be tweaked. # diff --git a/tests/scripts/variables/automatic b/tests/scripts/variables/automatic index 7237fe2..c0fdff8 100644 --- a/tests/scripts/variables/automatic +++ b/tests/scripts/variables/automatic @@ -95,17 +95,16 @@ mbr.src: ; @:', # Make sure that nonexistent prerequisites are listed in $?, since they are # considered reasons for the target to be rebuilt. # -# This was undone due to Savannah bug #16002. We'll re-do it in the next -# release. See Savannah bug #16051. +# See also Savannah bugs #16002 and #16051. -#touch('foo'); -# -#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 a13ee1c..5a1a4bd 100644 --- a/tests/test_driver.pl +++ b/tests/test_driver.pl @@ -28,7 +28,7 @@ # this routine controls the whole mess; each test suite sets up a few # variables and then calls &toplevel, which does all the real work. -# $Id: test_driver.pl,v 1.19 2006/03/10 02:20:45 psmith Exp $ +# $Id: test_driver.pl,v 1.20 2006/10/01 05:38:38 psmith Exp $ # The number of test categories we've run @@ -78,9 +78,9 @@ sub resetENV sub toplevel { # Pull in benign variables from the user's environment - # + foreach (# UNIX-specific things - 'TZ', 'LANG', 'TMPDIR', 'HOME', 'USER', 'LOGNAME', 'PATH', + 'TZ', 'TMPDIR', 'HOME', 'USER', 'LOGNAME', 'PATH', # Purify things 'PURIFYOPTIONS', # Windows NT-specific stuff @@ -92,6 +92,10 @@ sub toplevel $makeENV{$_} = $ENV{$_} if $ENV{$_}; } + # Make sure our compares are not foiled by locale differences + + $makeENV{LC_ALL} = 'C'; + # Replace the environment with the new one # %origENV = %ENV; diff --git a/variable.c b/variable.c index 37d3f72..098a941 100644 --- a/variable.c +++ b/variable.c @@ -437,7 +437,7 @@ lookup_variable_in_set (const char *name, unsigned int length, rule, then we will use the "root" double-colon target's variable set as the parent of FILE's variable set. - If we're READing a makefile, don't do the pattern variable search now, + If we're READING a makefile, don't do the pattern variable search now, since the pattern variable might not have been defined yet. */ void diff --git a/variable.h b/variable.h index a404abb..783fb62 100644 --- a/variable.h +++ b/variable.h @@ -138,7 +138,7 @@ void free_variable_set (struct variable_set_list *); struct variable_set_list *push_new_variable_scope (void); void pop_variable_scope (void); void define_automatic_variables (void); -void initialize_file_variables (struct file *file, int read); +void initialize_file_variables (struct file *file, int reading); void print_file_variables (struct file *file); void print_variable_set (struct variable_set *set, char *prefix); void merge_variable_set_lists (struct variable_set_list **to_list, -- 2.11.4.GIT