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.
This commit is contained in:
Paul Smith 2006-10-01 05:38:38 +00:00
parent c25294ad3b
commit 7595f38f62
19 changed files with 214 additions and 74 deletions

View file

@ -1,3 +1,69 @@
2006-09-30 Paul Smith <psmith@paulandlesley.org>
* 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 <Ralf.Wildenhues@gmx.de>:
(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 <psmith@gnu.org>
* configure.in: Include sys/types.h when checking for sys/wait.h.
2006-08-18 Eli Zaretskii <eliz@gnu.org>
* 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 <ac_cv_dos_paths>: 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 <psmith@gnu.org>
* README.OS2.template: Updates provided by Andreas Buening
<andreas.buening@nexgo.de>.
2006-04-30 Paul D. Smith <psmith@gnu.org>
* make.h: Include <direct.h> if HAVE_DIRECT_H.
* config.h.W32.template (HAVE_DIRECT_H): Set it if it's available.
2006-04-26 Paul D. Smith <psmith@gnu.org>
* 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 <psmith@gnu.org>
* 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 <psmith@gnu.org>
* maintMakefile: Add some extra warning options (GCC 4.1 only?)

View file

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

View file

@ -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:
<translation@iro.umontreal.ca>
Where to Announce
-----------------

View file

@ -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 <direct.h> 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 */

View file

@ -3,5 +3,9 @@ config.*
mkinstalldirs
texinfo.tex
mdate-sh
compile
depcomp
install-sh
missing
Makefile Makefile.in

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__ && !defined __MSYS__
#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __EMX__ && !defined __MSYS__ && !defined __CYGWIN__
neither MSDOS nor Windows nor OS2
#endif
],

View file

@ -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 <sys/types.h>]])
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

View file

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

6
job.c
View file

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

View file

@ -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 ($$_ = <E>)) { 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 ($$_ = <E>)) { 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

2
make.1
View file

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

18
make.h
View file

@ -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 <direct.h>
#endif

View file

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

View file

@ -1,3 +1,14 @@
2006-10-01 Paul Smith <psmith@paulandlesley.org>
* 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 <psmith@paulandlesley.org>
* scripts/variables/automatic: Add back the test for bug #8154.
2006-04-01 Paul D. Smith <psmith@gnu.org>
* scripts/functions/realpath: Don't run tests with multiple

View file

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

View file

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

View file

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

View file

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

View file

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