summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>1997-08-18 18:11:04 +0000
committerPaul Smith <psmith@gnu.org>1997-08-18 18:11:04 +0000
commit63dff1e0bcb9e1bdd189e4a3e0d6126389251885 (patch)
treef8b39c21a6c709622d4fcc18f40539477a5ceb1a
parente746a9c9510b2cc83548e8d9108eb24540e7a821 (diff)
downloadmake-63dff1e0bcb9e1bdd189e4a3e0d6126389251885.tar.gz
Bug fixes and automake changes.
-rw-r--r--AUTHORS46
-rw-r--r--ChangeLog69
-rw-r--r--GNUmakefile306
-rw-r--r--Makefile.am63
-rw-r--r--NEWS7
-rw-r--r--README.DOS.template14
-rw-r--r--README.template7
-rw-r--r--acconfig.h6
-rw-r--r--build.template4
-rw-r--r--configure.in13
-rw-r--r--file.c17
-rw-r--r--filedef.h2
-rw-r--r--function.c9
-rw-r--r--glob/ChangeLog21
-rw-r--r--glob/Makefile.am10
-rw-r--r--glob/configure.in5
-rw-r--r--glob/fnmatch.h3
-rw-r--r--glob/glob.c47
-rw-r--r--glob/glob.h23
-rw-r--r--job.c12
-rw-r--r--main.c10
-rw-r--r--maintMakefile33
-rw-r--r--make.114
-rw-r--r--make.h3
-rw-r--r--make.texinfo227
-rw-r--r--read.c4
-rw-r--r--remake.c66
-rw-r--r--variable.c2
-rw-r--r--version.c7
-rw-r--r--vpath.c21
30 files changed, 628 insertions, 443 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..b316c4b
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,46 @@
+-----------------------------------
+
+GNU make and the GNU Make User's Manual were created by:
+ Roland McGrath <roland@gnu.ai.mit.edu>
+ Richard M. Stallman <rms@gnu.ai.mit.edu>
+
+
+Development and maintenance up to GNU make 3.75 by:
+ Roland McGrath <roland@gnu.ai.mit.edu>
+
+
+Development and maintenance starting with GNU make 3.76 by:
+ Paul D. Smith <psmith@gnu.ai.mit.edu>
+
+
+-----------------------------------
+GNU Make porting efforts:
+
+ Port to VMS by:
+ Klaus Kaempf (kkaempf@progis.de)
+
+
+ Port to Amiga by:
+ Aaron Digulla <digulla@fh-konstanz.de>
+
+
+ Port to MS-DOS (DJGPP) and MS-Windows 95/NT by:
+ DJ Delorie <dj@delorie.com>
+ Rob Tulloh <rob_tulloh@tivoli.com>
+ Eli Zaretskii <eliz@is.elta.co.il>
+
+-----------------------------------
+Other contributors:
+
+ Janet Carson <janet_carson@tivoli.com>
+ Paul Eggert <eggert@twinsun.com>
+ Klaus Heinz <kamar@ease.rhein-main.de>
+ Michael Joosten
+ Jim Kelton <jim_kelton@tivoli.com>
+ David Lubbren <uhay@rz.uni-karlsruhe.de>
+ Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+ Carl Staelin (Princeton University)
+ Ian Stewartson (Data Logic Limited)
+
+With suggestions/comments/bug reports from a cast of ... well ...
+hundreds, anyway :)
diff --git a/ChangeLog b/ChangeLog
index d73049d..6bdd8ce 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,72 @@
+Mon Aug 18 09:41:08 1997 Paul D. Smith <psmith@baynetworks.com>
+
+ * Version 3.75.91
+
+Fri Aug 15 13:50:54 1997 Paul D. Smith <psmith@baynetworks.com>
+
+ * read.c (do_define): Remember to count the newline after the endef.
+
+Thu Aug 14 23:14:37 1997 Paul D. Smith <psmith@baynetworks.com>
+
+ * many: Rewrote builds to use Automake 1.2.
+
+ * AUTHORS: New file.
+ * maintMakefile: Contains maintainer-only make snippets.
+ * GNUmakefile: This now only runs the initial auto* tools.
+ * COPYING,texinfo.tex,mkinstalldirs,install-sh: Removed (obtained
+ automatically by automake).
+ * compatMakefile: Removed (not needed anymore).
+ * README,build.sh.in: Removed (built from templates).
+ * config.h.in,Makefile.in: Removed (built by tools).
+
+Wed Aug 13 02:22:08 1997 Paul D. Smith <psmith@baynetworks.com>
+
+ * make.texinfo: Updates for DOS/Windows information (Eli Zaretskii)
+ * README,README.DOS: Ditto.
+
+ * remake.c (update_file_1,f_mtime): Fix GPATH handling.
+ * vpath.c (gpath_search): Ditto.
+
+ * file.c (rename_file): New function: rehash, but also rename to
+ the hashname.
+ * filedef.h: Declare it.
+
+ * variable.c (merge_variable_set_lists): Remove free() of variable
+ set; since various files can share variable sets we don't want to
+ free them here.
+
+Tue Aug 12 10:51:54 1997 Paul D. Smith <psmith@baynetworks.com>
+
+ * configure.in: Require autoconf 2.12
+
+ * make.texinfo: Replace all "cd subdir; $(MAKE)" examples with a
+ more stylistically correct "cd subdir && $(MAKE)".
+
+ * main.c: Global variable `clock_skew_detected' defined.
+ (main): Print final warning if it's set.
+ * make.h: Declare it.
+ * remake.c (f_mtime): Test and set it.
+
+ * job.c (start_job_command): Add special optimizations for
+ "do-nothing" rules, containing just the shell no-op ":". This is
+ useful for timestamp files and can make a real difference if you
+ have a lot of them (requested by Fergus Henderson <fjh@cs.mu.oz.au>).
+
+ * configure.in,Makefile.in: Rewrote to use the new autoconf
+ program_transform_name macro.
+
+ * function.c (function_strip): Strip newlines as well as spaces
+ and TABs.
+
+Fri Jun 6 23:41:04 1997 Rob Tulloh <rob_tulloh@tivoli.com>
+
+ * remake.c (f_mtime): Datestamps on FAT-based files are rounded to
+ even seconds when stored, so if the date check fails on WINDOWS32
+ systems, see if this "off-by-one" error is the problem.
+
+ * General: If your TZ environment variable is not set correctly
+ then all your timestamps will be off by hours. So, set it!
+
Mon Apr 7 02:06:22 1997 Paul D. Smith <psmith@baynetworks.com>
* Version 3.75.1
diff --git a/GNUmakefile b/GNUmakefile
index a4d3b36..272e37b 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -1,299 +1,33 @@
-# GNU Make-specific makefile for GNU Make.
-
-# Copyright (C) 1990, 91, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
-# This file is part of GNU Make.
-#
-# GNU Make is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
+# This is a maintainer's-only makefile
#
-# GNU Make is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
+# It bootstraps a GNU make maintainer's directory
#
-# You should have received a copy of the GNU General Public License
-# along with GNU Make; see the file COPYING. If not, write to
-# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-.PHONY: default
-default:
+.SUFFIXES:
-# Set `ARCH' to a string for the type of machine.
-ifndef ARCH
-ifdef machine
-ARCH = $(machine)
-endif # machine
-endif # not ARCH
+.DEFAULT:
+ [ -f Makefile ] || ./configure
+ $(MAKE) -f Makefile $@
-override srcdir := .
-override CC := $(CC)
+.PHONY: __cfg __cfg_basic
-ifeq ($(ARCH),hp300)
-#customs=yes
-endif
-ifdef customs
-override REMOTE := cstms
-else
-override REMOTE := stub
-endif
+ACCONFIG = acconfig.h
-# Get most of the information from the Unix-compatible makefile.
-include compatMakefile
+__cfg: __cfg_basic config.h.in
+ cd glob && $(MAKE) -f ../GNUmakefile __cfg_basic ACCONFIG=
-MAKE = $(MAKE_COMMAND) $(MAKEOVERRIDES)
+__cfg_basic: aclocal.m4 stamp-h.in configure Makefile.in
-CVS = cvs
+aclocal.m4: configure.in
+ aclocal
-# Remove autoconf magic.
-prefix = /usr/local
-exec_prefix = $(prefix)
-extras := $(filter-out getloadavg.o @%@,$(extras)) getloadavg.o
-LOADLIBES := $(filter-out @%@,$(LOADLIBES))
-ALLOCA := $(filter-out @%@,$(ALLOCA))
-CPPFLAGS := $(filter-out @%@,$(defines) $(CPPFLAGS)) -DHAVE_CONFIG_H
+config.h.in: stamp-h.in
+stamp-h.in: configure.in aclocal.m4 $(ACCONFIG)
+ autoheader
+ echo timestamp > $@
-ifdef AC_MACRODIR
-configure config.h.in: $(patsubst %,$(AC_MACRODIR)/%.m4,acspecific acgeneral)
-config.h.in: $(AC_MACRODIR)/acconfig.h
-endif
configure: configure.in aclocal.m4
- autoconf $(ACFLAGS)
- -test -d CVS && $(CVS) commit -m'autoconf $(ACFLAGS)' $@
-config.h.in: configure.in aclocal.m4
- autoheader $(ACFLAGS)
- -test -d CVS && $(CVS) commit -m'autoheader $(ACFLAGS)' $@
-
-ifdef customs
-defines := $(defines) -Ipmake/customs -Ipmake/lib/include
-LOADLIBES := $(addprefix pmake/customs/,customslib.o rpc.o xlog.o) \
- pmake/lib/sprite/libsprite.a
-endif
-
-ifdef ARCH
-
-ifndef no_libc
-libc_dir = /home/gd2/gnu/libc/$(ARCH)
-ifneq ($(wildcard $(libc_dir)),)
-ifneq ($(wildcard $(libc_dir)/works-for-make),)
-#CPPFLAGS := -I$(libc_dir)/include
-#LDFLAGS := -nostdlib $(libc_dir)/lib/start.o
-#LOADLIBES := $(LOADLIBES) \
-# $(libc_dir)/lib/mcheck-init.o \
-# $(libc_dir)/lib/libc.a \
-# -lgcc \
-# $(libc_dir)/lib/libc.a
-CC := $(CC) -b glibc
-
-# getopt is in libc.
-GETOPT =
-#GETOPT_SRC = Don't clear this or dist will break.
-
-# glob is in libc too.
-GLOB =
-
-else
-
-endif # works-for-make
-endif # $(libc_dir)
-endif # !no_libc
-
-# We know the type of machine, so put the binaries in subdirectories.
-$(ARCH)/%.o: %.c
- $(COMPILE.c) -Iglob $< $(OUTPUT_OPTION)
-$(ARCH)/glob/libglob.a: FORCE
- $(MAKE) -C $(@D) $(@F)
-FORCE:
-objs := $(addprefix $(ARCH)/,$(objs))
-prog := $(ARCH)/make
-
-archpfx = $(ARCH)/
-
-$(archpfx)load.o: load.c
- $(COMPILE.c) $(LOAD_AVG) $< -o $@
-$(archpfx)load.dep: load.c
- $(mkdep) $(LOAD_AVG) $< | sed 's,$*\.o,& $@,' > $@
-
-CPPFLAGS := -I$(ARCH) -Iglob -DHAVE_CONFIG_H $(filter-out @%@,$(CPPFLAGS))
-
-ifneq "$(wildcard $(ARCH)/makefile)" ""
-include $(ARCH)/makefile
-endif
-objs := $(objs) $(addprefix $(ARCH)/,$(ALLOCA) $(extras))
-
-else # Not ARCH
-prog := make
-endif
-
-ifneq "$(findstring gcc,$(CC))" ""
-CFLAGS = -g -Wall -Wtraditional -Wid-clash-31 -Wpointer-arith \
- -Wbad-function-cast -Wconversion
-else
-CFLAGS = -g
-endif
-LDFLAGS = -g
-
-# Define the command to make dependencies.
-mkdep-nolib = $(CC) -MM $(CPPFLAGS)
-mkdep = $(CC) -M $(CPPFLAGS)
-
-depfiles = $(patsubst %.o,%.dep,$(filter %.o,$(objs)))
-
-
-.PHONY: default
-default: $(prog)
-
-$(prog): $(objs) $(globdep) #$(addprefix $(ARCH)/,gmalloc.o mcheck.o)
- $(CC) $(LDFLAGS) $^ $(globlib) $(LOADLIBES) -o $@.new
- mv -f $@.new $@
-
-libc-srcdir = ../libc
-globfiles = $(addprefix glob/,COPYING.LIB configure.in configure Makefile.in \
- Makefile.ami SCOPTIONS SMakefile \
- configure.bat glob.c fnmatch.c glob.h fnmatch.h)
-$(globfiles): stamp-glob ;
-stamp-glob: $(libc-srcdir)/posix/glob.tar
- -rm -f stamp-glob glob/*
- tar xvf $< glob
- $(CVS) commit -m'Updated from libc' glob
- touch $@
-$(libc-srcdir)/posix/glob.tar: force
- $(MAKE) -C $(@D) $(@F) no_deps=t
-.PHONY: force
-force:
-
-# Make the Unix-compatible Makefile to be distributed by appending
-# the automatically-generated dependencies to compatMakefile.
-ifeq ($(mkdep),$(mkdep-nolib))
-nolib-deps = $(depfiles)
-else
-%.dep: %.c
- $(mkdep-nolib) $< | sed -e 's,$*\.o,$(@:.dep=.o) $@,' > $(@:.dep=.dtm)
- mv -f $(@:.dep=.dtm) $@
-nolib-deps = $(patsubst $(archpfx)%,%,$(depfiles))
-endif
-# The distributed Makefile.in should contain deps for remote-stub only.
-Makefile.in: compatMakefile $(nolib-deps:remote-%.dep=remote-stub.dep)
- (sed 's/^MAKE[ ]*=.*$$/@SET_MAKE@/' $<; \
- echo '# Automatically generated dependencies.'; \
- sed -e 's/ [^ ]*\.dep//' -e 's=$(archpfx)==' $(filter-out $<,$^) \
- ) > $@
- $(CVS) commit -mRegenerated $@
-
-.SUFFIXES: .dep
-# Maintain the automatically-generated dependencies.
-ifndef no_deps
--include $(depfiles)
-endif
-$(archpfx)%.dep: %.c
- $(mkdep) $< | sed 's,$*\.o,$(@:.dep=.o) $@,' > $@
-
-ETAGS = etags -T # for v19 etags
-
-# Run the tests.
-.PHONY: tests
-testdir := $(shell ls -d1 make-test-?.? | sort -n +0.10 -0.11 +0.12 | tail -1l)
-tests:# $(testdir)/run_make_tests.pl $(prog)
-# cd $(<D); MAKELEVEL=0 perl $(<F)
-
-build.sh.in: build.template compatMakefile
- sed -e 's@%objs%@$(filter-out remote-% $(GLOB) $(ALLOCA) $(extras),\
- $(patsubst $(archpfx)%,%,$(objs)))\
- $(patsubst %.c,%.o,$(filter %.c,$(globfiles)))@' \
- $< > $@.new
- chmod a+x $@.new
- mv -f $@.new $@
- $(CVS) commit -mRegenerated $@
-
-# Make the distribution tar files.
-
-.PHONY: dist
-# Figure out the version number from the source of `version.c'.
-version := \
- $(strip $(shell sed -e '/=/!d' -e 's/^.*"\(.*\)";$$/\1/' < version.c))
-tarfiles := make # make-doc
-tarfiles := $(addsuffix -$(version).tar,$(tarfiles))
-tarfiles := $(tarfiles:%=%.gz) # no more compress $(tarfiles:%=%.Z)
-# Depend on default and doc so we don't ship anything that won't compile.
-dist: cvs-mark default info dvi tests tarfiles
-.PHONY: tarfiles
-tarfiles: $(tarfiles)
-
-vmsfiles = config.h-vms makefile.com makefile.vms readme.vms \
- vmsdir.h vmsfunctions.c vmsify.c
-amigafiles = README.Amiga config.ami Makefile.ami SCOPTIONS SMakefile \
- amiga.c amiga.h make.lnk
-dosfiles = README.DOS dosbuild.bat
-w32files = README.W32 build_w32.bat config.h.W32 subproc.bat NMakefile \
- $(addprefix w32/,pathstuff.c compat/dirent.c include/dirent.h \
- include/pathstuff.h include/sub_proc.h \
- include/w32err.h subproc/NMakefile \
- subproc/build.bat subproc/misc.c \
- subproc/proc.h subproc/sub_proc.c \
- subproc/w32err.c)
-distfiles=README INSTALL COPYING ChangeLog NEWS \
- configure Makefile.in configure.in build.sh.in mkinstalldirs \
- configh.dos configure.bat \
- $(amigafiles) $(vmsfiles) $(w32files) $(dosfiles) \
- aclocal.m4 acconfig.h $(srcs) remote-*.c $(globfiles) \
- make.texinfo make-stds.texi \
- $(wildcard make.?? make.??s make.toc make.aux) make.man texinfo.tex \
- TAGS tags install-sh \
- make.info make.info*
-
-ifndef dist-flavor
-dist-flavor = alpha
-endif
-.PHONY: cvs-mark
-cvs-mark: $(distfiles)
- $(CVS) tag -F make-$(subst .,-,$(version))
-
-dist: local-inst
-.PHONY: local-inst
-local-inst: $(prog)
- install -c -g kmem -o $(USER) -m 2755 $< /usr/local/gnubin/make
-
-# Put the alpha distribution files in the anonymous FTP directory.
-alpha-files = $(tarfiles) GNUmakefile compatMakefile $(testdir).tar.Z
-dist: alpha
-.PHONY: alpha
-alpha-dir := ~ftp/gnu
-alpha-files := $(addprefix $(alpha-dir)/,$(alpha-files))
-alpha: $(alpha-dir) $(alpha-files)
-$(alpha-dir)/%: %
- @rm -f $@
- cp $< $@
-
-# Implicit rule to make README and README-doc.
-%: %.template version.c
- rm -f $@
- sed 's/VERSION/$(version)/' < $< > $@
-# Make sure I don't edit it by accident.
- chmod a-w $@
- $(CVS) commit -m'Regenerated for $(version)' $@
-
-define make-tar
-@rm -fr make-$(version)
-ln -s . make-$(version)
-tar cvhof $@ $(addprefix make-$(version)/,$^)
-rm -f make-$(version)
-endef
-
-%.Z: %; compress -c $< > $@
-%.gz: %; gzip -9 -c -v $< > $@
-
-make-$(version).tar: $(distfiles)
- $(make-tar)
-
-ifneq (,)
-tests := $(filter-out %~,$(wildcard tests/*))
-make-tests-$(version).tar.Z: $(tests)
- @rm -fr make-tests-$(version)
- ln -s tests make-tests-$(version)
- tar cvhf $(@:.Z=) $(patsubst tests/%,make-tests-$(version)/%,$^)
- rm -f make-tests-$(version)
- compress -f $(@:.Z=)
-endif
+ autoconf
-$(archpfx)loadtest: $(archpfx)load.o
+Makefile.in: configure.in config.h.in Makefile.am aclocal.m4
+ automake --add-missing
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..6960f08
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,63 @@
+# -*-Makefile-*-, or close enough
+
+AUTOMAKE_OPTIONS = 1.2
+
+bin_PROGRAMS = make
+
+make_SOURCES = main.c commands.c job.c dir.c file.c misc.c read.c remake.c \
+ rule.c implicit.c default.c variable.c expand.c function.c \
+ vpath.c version.c ar.c arscan.c remote-$(REMOTE).c \
+ commands.h dep.h filedef.h job.h make.h rule.h variable.h \
+ signame.c signame.h \
+ getopt.c getopt1.c getopt.h
+make_LDADD = @LIBOBJS@ @ALLOCA@ glob/libglob.a
+
+info_TEXINFOS = make.texinfo
+
+INCLUDES = -I$(srcdir)/glob -DLIBDIR=\"$(libdir)\" -DINCLUDEDIR=\"$(includedir)\"
+
+BUILT_SOURCES = README build.sh.in
+
+EXTRA_DIST = make.man $(BUILT_SOURCES) remote-cstms.c \
+ make-stds.texi texinfo.tex SCOPTIONS SMakefile \
+ Makefile.ami README.Amiga config.ami amiga.c amiga.h \
+ NMakefile README.DOS configh.dos configure.bat makefile.com \
+ README.W32 build_w32.bat config.h.W32 subproc.bat make.lnk \
+ config.h-vms makefile.vms readme.vms vmsdir.h vmsfunctions.c \
+ vmsify.c
+
+SUBDIRS = glob
+
+# Look for the make test suite, and run it if found. Look in MAKE_TEST, or
+# in the srcdir and its parent and the distdir and its parent.
+#
+check-local:
+ @here=`pwd`; test=""; \
+ case "$(MAKE_TEST)" in "") \
+ for d1 in $$here $(srcdir); do \
+ for d2 in .. .; do \
+ try=`ls -1 $$d1/$$d2/make-test-*/run_make_tests 2>/dev/null | tail -1`; \
+ case "$$try" in "") : ;; *) test="$$try" ;; esac; \
+ done; done ;; \
+ *) test="$(MAKE_TEST)" ;; \
+ esac; \
+ case "$$test" in \
+ "") echo "Couldn't find make-test-* test suite."; exit 1;; \
+ esac; \
+ testdir=`dirname $$test`; \
+ echo "cd $$testdir && ./run_make_tests -make_path $$here/make"; \
+ cd $$testdir && ./run_make_tests -make_path $$here/make"
+
+# Install the w32 subdirectory
+#
+dist-hook:
+ (cd $(srcdir); \
+ w32=`find w32 -follow \( -name CVS -prune \) -o -type f -print`; \
+ tar chf - $$w32) \
+ | (cd $(distdir); tar xfBp -)
+
+if MAINT_MAKEFILE
+# Note this requires GNU make. Not to worry, since it will only be included
+# in the Makefile if we're in the maintainer's environment.
+include $(srcdir)/maintMakefile
+endif
diff --git a/NEWS b/NEWS
index e79cbe7..197e1b2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,6 @@
GNU make NEWS -*-indented-text-*-
History of user-visible changes.
- 06 Apr 1996
+ 18 Aug 1997
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
See the end for copying conditions.
@@ -21,7 +21,8 @@ Version 3.76
list of words from number S to number E (inclusive) of TEXT.
* Instead of an error, detection of future modification times gives a
- warning and continues.
+ warning and continues. The warning is repeated just before GNU make
+ exits, so it is less likely to be lost.
* Fix the $(basename) and $(suffix) functions so they only operate on
the last filename, not the entire string:
@@ -33,6 +34,8 @@ Version 3.76
$(suffix a.b) b b
$(suffix a.b/c) b/c <empty>
+* The $(strip) function now removes newlines as well as TABs and spaces.
+
* Updates to the Windows 95/NT port from Rob Tulloh (see README.W32).
* Eli Zaretskii has updated the port to 32-bit protected mode on MSDOS
diff --git a/README.DOS.template b/README.DOS.template
index 49fd0e7..6226f7b 100644
--- a/README.DOS.template
+++ b/README.DOS.template
@@ -75,10 +75,10 @@ Notes:
When shell features like redirection or filename wildcards are
involved, Make calls the shell.
- This port supports both DOS shells (the stock COMMAND.COM and
- its 4DOS/NDOS replacements), and Unix-style shells (tested with
- the venerable Stewartson's `ms_sh' 2.3 and the recent DJGPP port
- of `bash' by Daisuke Aoyama <jack@st.rim.or.jp>).
+ This port supports both DOS shells (the stock COMMAND.COM and its
+ 4DOS/NDOS replacements), and Unix-style shells (tested with the
+ venerable Stewartson's `ms_sh' 2.3 and the DJGPP port of `bash' by
+ Daisuke Aoyama <jack@st.rim.or.jp>).
When the $SHELL variable points to a Unix-style shell, Make
works just like you'd expect on Unix, calling the shell for any
@@ -204,8 +204,8 @@ Notes:
doesn't include characters illegal on MSDOS FAT filesystems,
will be automatically down-cased.) User reports that I have
indicate that this default behavior is generally what you'd
- expect; however, since this is the first DJGPP port of Make that
- supports long filenames, your input is most welcome.
+ expect; however, since support for long filenames in the DJGPP
+ port of GNU Make is relatively new, your input is most welcome.
In any case, if you hit a situation where you must force Make to
get the 8+3 DOS filenames in upper case, set FNCASE=y in the
@@ -218,7 +218,7 @@ Notes:
make implicit assumptions about the pathname syntax. In
particular, the directories are assumed to be separated by `/',
and any pathname which doesn't begin with a `/' is assumed to be
- releative to the current directory. This port attempts to
+ relative to the current directory. This port attempts to
support DOS-style pathnames which might include the drive letter
and use backslashes instead of forward slashes. However, this
support is not complete; I feel that pursuing this support too
diff --git a/README.template b/README.template
index 0d3bbfc..735815c 100644
--- a/README.template
+++ b/README.template
@@ -1,4 +1,4 @@
-This directory contains the VERSION test release of GNU Make.
+This directory contains the %VERSION% test release of GNU Make.
All bugs reported for previous test releases have been fixed.
Some bugs surely remain.
@@ -16,8 +16,9 @@ Make, try using `build.sh' instead.
See README.W32 for details about GNU Make on Windows NT or 95.
See README.Amiga for details about GNU Make on AmigaDOS.
-The MSDOS port of GNU Make is available as part of DJGPP; see the
-WWW page http://www.delorie.com/djgpp/ for more information.
+A precompiled binary of the MSDOS port of GNU Make is available as part
+of DJGPP; see the WWW page http://www.delorie.com/djgpp/ for more
+information.
It has been reported that the XLC 1.2 compiler on AIX 3.2 is buggy such
that if you compile make with `cc -O' on AIX 3.2, it will not work correctly.
diff --git a/acconfig.h b/acconfig.h
index e336648..d20cae1 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -1,3 +1,9 @@
+/* Name of this package (needed by automake) */
+#undef PACKAGE
+
+/* Version of this package (needed by automake) */
+#undef VERSION
+
/* Define to the name of the SCCS `get' command. */
#undef SCCS_GET
diff --git a/build.template b/build.template
index 1e65ac5..40307ff 100644
--- a/build.template
+++ b/build.template
@@ -4,7 +4,7 @@
# Copyright (C) 1993, 1994 Free Software Foundation, Inc.
# This file is part of GNU Make.
-#
+#
# GNU Make is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
@@ -14,7 +14,7 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License
# along with GNU Make; see the file COPYING. If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
diff --git a/configure.in b/configure.in
index c6f6583..4eb6091 100644
--- a/configure.in
+++ b/configure.in
@@ -1,14 +1,21 @@
dnl Process this file with autoconf to produce a configure script.
AC_REVISION([$Id$])
-AC_PREREQ(2.10)dnl dnl Minimum Autoconf version required.
+AC_PREREQ(2.12)dnl dnl Minimum Autoconf version required.
AC_INIT(vpath.c)dnl dnl A distinctive file to look for in srcdir.
-AC_CONFIG_HEADER(config.h)
-AC_CONFIG_SUBDIRS(glob) dnl Run configure in glob subdirectory.
+
+AM_INIT_AUTOMAKE(make, 3.75.91)
+AM_CONFIG_HEADER(config.h)
+AC_CONFIG_SUBDIRS(glob)
+
+AM_CONDITIONAL(MAINT_MAKEFILE, test -r $srcdir/maintMakefile)
+
+dnl Regular configure stuff
AC_PROG_MAKE_SET
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_CPP dnl Later checks need this.
+AC_ARG_PROGRAM
AC_AIX
AC_ISC_POSIX
AC_MINIX
diff --git a/file.c b/file.c
index b264d9d..dbb8fc3 100644
--- a/file.c
+++ b/file.c
@@ -187,6 +187,23 @@ rehash_file (file, name)
file_hash_enter (file, name, oldhash, file->name);
}
+/* Rename FILE to NAME. This is not as simple as resetting
+ the `name' member, since it must be put in a new hash bucket,
+ and possibly merged with an existing file called NAME. */
+
+void
+rename_file (file, name)
+ register struct file *file;
+ char *name;
+{
+ rehash_file(file, name);
+ while (file)
+ {
+ file->name = file->hname;
+ file = file->prev;
+ }
+}
+
void
file_hash_enter (file, name, oldhash, oldname)
register struct file *file;
diff --git a/filedef.h b/filedef.h
index b5beac9..5da41d8 100644
--- a/filedef.h
+++ b/filedef.h
@@ -91,7 +91,7 @@ extern struct file *default_goal_file, *suffix_file, *default_file;
extern struct file *lookup_file (), *enter_file ();
extern void remove_intermediates (), snap_deps ();
-extern void rehash_file (), file_hash_enter ();
+extern void rename_file (), rehash_file (), file_hash_enter ();
extern void set_command_state ();
diff --git a/function.c b/function.c
index 125a994..a6496fa 100644
--- a/function.c
+++ b/function.c
@@ -1049,8 +1049,15 @@ expand_function (o, function, text, end)
text = expand_argument (text, end);
p2 = text;
- while ((p = find_next_token (&p2, &i)) != 0)
+ while (*p2 != '\0')
{
+ while (isspace(*p2))
+ ++p2;
+ p = p2;
+ for (i=0; *p2 != '\0' && !isspace(*p2); ++p2, ++i)
+ {}
+ if (!i)
+ break;
o = variable_buffer_output (o, p, i);
o = variable_buffer_output (o, " ", 1);
doneany = 1;
diff --git a/glob/ChangeLog b/glob/ChangeLog
index de04c4b..92c5e7c 100644
--- a/glob/ChangeLog
+++ b/glob/ChangeLog
@@ -1,3 +1,24 @@
+Tue Aug 12 10:52:34 1997 Paul D. Smith <psmith@baynetworks.com>
+
+ * configure.in: Require autoconf 2.12.
+
+ * glob: Updates from latest GNU libc glob code.
+
+ * glob.c,glob.h,fnmatch.h: Change all WIN32 references to WINDOWS32.
+
+ * glob.h: OSF4 defines macros in such a way that GLOB_ALTDIRFUNC
+ is not defined. Added a test to the #if which defines it if
+ _GNU_SOURCE is defined; that's set by both glob.c and GNU make.
+
+ * glob.c: SunOS4 w/ cc needs #include <stdio.h>, since assert.h
+ requires stderr but doesn't include stdio.h :-/.
+ (next_brace_sub): De-protoize function definition.
+ (glob): Cast __alloca(); on SunOS4 it uses the default return type
+ of int.
+ (glob): Irix defines getlogin_r() to return a char*; move the
+ extern for that into the _LIBC area since it isn't used except in
+ LIBC anyway. Likewise, move extern getlogin() into the "else".
+
Sat Jul 20 21:55:31 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
Win32 hacks from <Rob_Tulloh@tivoli.com>.
diff --git a/glob/Makefile.am b/glob/Makefile.am
new file mode 100644
index 0000000..3c4ab7a
--- /dev/null
+++ b/glob/Makefile.am
@@ -0,0 +1,10 @@
+# -*-Makefile-*-, or close enough
+
+AUTOMAKE_OPTIONS = 1.2 foreign
+
+noinst_LIBRARIES = libglob.a
+
+libglob_a_SOURCES = glob.c glob.h fnmatch.c fnmatch.h
+
+EXTRA_DIST = COPYING.LIB Makefile.ami SCOPTIONS SMakefile \
+ configure.bat
diff --git a/glob/configure.in b/glob/configure.in
index 8dc68e4..cf0a408 100644
--- a/glob/configure.in
+++ b/glob/configure.in
@@ -1,6 +1,9 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(fnmatch.c) dnl A distinctive file to look for in srcdir.
-AC_PREREQ(2.1) dnl Minimum Autoconf version required.
+AC_PREREQ(2.12) dnl Minimum Autoconf version required.
+
+AM_INIT_AUTOMAKE(glob, 0.0, nodefs)
+
AC_PROG_CC
AC_CHECK_PROG(AR, ar, ar, ar)
AC_PROG_RANLIB
diff --git a/glob/fnmatch.h b/glob/fnmatch.h
index 20ed659..38b7255 100644
--- a/glob/fnmatch.h
+++ b/glob/fnmatch.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1993, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 1993, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,7 +17,6 @@
Boston, MA 02111-1307, USA. */
#ifndef _FNMATCH_H
-
#define _FNMATCH_H 1
#ifdef __cplusplus
diff --git a/glob/glob.c b/glob/glob.c
index 8474766..6a82fe0 100644
--- a/glob/glob.c
+++ b/glob/glob.c
@@ -37,6 +37,8 @@
/* #define NDEBUG 1 */
#include <assert.h>
+#include <stdio.h> /* Needed on stupid SunOS for assert. */
+
/* Comment out all this code if we are using the GNU C Library, and are not
actually compiling the library itself. This code is part of the GNU C
@@ -250,7 +252,6 @@ extern char *alloca ();
#undef GLOB_PERIOD
#include <glob.h>
-static int glob_pattern_p __P ((const char *pattern, int quote));
static int glob_in_dir __P ((const char *pattern, const char *directory,
int flags,
int (*errfunc) __P ((const char *, int)),
@@ -266,7 +267,8 @@ static
inline
#endif
const char *
-next_brace_sub (const char *begin)
+next_brace_sub (begin)
+ const char *begin;
{
unsigned int depth = 0;
const char *cp = begin;
@@ -288,7 +290,7 @@ next_brace_sub (const char *begin)
while (*cp != '\0' && (*cp != '}' || depth > 0))
{
if (*cp == '}')
- ++depth;
+ --depth;
++cp;
}
if (*cp == '\0')
@@ -308,7 +310,7 @@ next_brace_sub (const char *begin)
If a directory cannot be opened or read and ERRFUNC is not nil,
it is called with the pathname that caused the error, and the
`errno' value from the failing call; if it returns non-zero
- `glob' returns GLOB_ABEND; if it returns zero, the error is ignored.
+ `glob' returns GLOB_ABORTED; if it returns zero, the error is ignored.
If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
Otherwise, `glob' returns zero. */
int
@@ -511,11 +513,9 @@ glob (pattern, flags, errfunc, pglob)
#else
if (home_dir == NULL || home_dir[0] == '\0')
{
- extern char *getlogin __P ((void));
- extern int getlogin_r __P ((char *, size_t));
int success;
-
#if defined HAVE_GETLOGIN_R || defined _LIBC
+ extern int getlogin_r __P ((char *, size_t));
size_t buflen = sysconf (_SC_LOGIN_NAME_MAX) + 1;
char *name;
@@ -523,11 +523,13 @@ glob (pattern, flags, errfunc, pglob)
/* `sysconf' does not support _SC_LOGIN_NAME_MAX. Try
a moderate value. */
buflen = 16;
- name = __alloca (buflen);
+ name = (char *) __alloca (buflen);
success = getlogin_r (name, buflen) >= 0;
#else
+ extern char *getlogin __P ((void));
char *name;
+
success = (name = getlogin ()) != NULL;
#endif
if (success)
@@ -537,7 +539,7 @@ glob (pattern, flags, errfunc, pglob)
char *pwtmpbuf;
struct passwd pwbuf, *p;
- pwtmpbuf = __alloca (pwbuflen);
+ pwtmpbuf = (char *) __alloca (pwbuflen);
success = (__getpwnam_r (name, &pwbuf, pwtmpbuf,
pwbuflen, &p) >= 0);
@@ -560,7 +562,7 @@ glob (pattern, flags, errfunc, pglob)
{
char *newp;
size_t home_len = strlen (home_dir);
- newp = __alloca (home_len + dirlen);
+ newp = (char *) __alloca (home_len + dirlen);
memcpy (newp, home_dir, home_len);
memcpy (&newp[home_len], &dirname[1], dirlen);
dirname = newp;
@@ -577,7 +579,7 @@ glob (pattern, flags, errfunc, pglob)
user_name = dirname + 1;
else
{
- user_name = __alloca (end_name - dirname);
+ user_name = (char *) __alloca (end_name - dirname);
memcpy (user_name, dirname + 1, end_name - dirname);
user_name[end_name - dirname - 1] = '\0';
}
@@ -586,7 +588,7 @@ glob (pattern, flags, errfunc, pglob)
{
#if defined HAVE_GETPWNAM_R || defined _LIBC
size_t buflen = sysconf (_SC_GETPW_R_SIZE_MAX);
- char *pwtmpbuf = __alloca (buflen);
+ char *pwtmpbuf = (char *) __alloca (buflen);
struct passwd pwbuf, *p;
if (__getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) >= 0)
home_dir = p->pw_dir;
@@ -606,18 +608,18 @@ glob (pattern, flags, errfunc, pglob)
char *newp;
size_t home_len = strlen (home_dir);
size_t rest_len = end_name == NULL ? 0 : strlen (end_name);
- newp = __alloca (home_len + rest_len + 1);
+ newp = (char *) __alloca (home_len + rest_len + 1);
memcpy (newp, home_dir, home_len);
memcpy (&newp[home_len], end_name, rest_len);
newp[home_len + rest_len] = '\0';
dirname = newp;
}
}
-#endif /* Not Amiga && not Windows32. */
+#endif /* Not Amiga && not WINDOWS32. */
}
#endif /* Not VMS. */
- if (glob_pattern_p (dirname, !(flags & GLOB_NOESCAPE)))
+ if (__glob_pattern_p (dirname, !(flags & GLOB_NOESCAPE)))
{
/* The directory name contains metacharacters, so we
have to glob for the directory, and then glob for
@@ -648,7 +650,7 @@ glob (pattern, flags, errfunc, pglob)
{
globfree (&dirs);
globfree (&files);
- return GLOB_ABEND;
+ return GLOB_ABORTED;
}
}
#endif /* SHELL. */
@@ -844,8 +846,8 @@ prefix_array (dirname, array, n)
/* Return nonzero if PATTERN contains any metacharacters.
Metacharacters can be quoted with backslashes if QUOTE is nonzero. */
-static int
-glob_pattern_p (pattern, quote)
+int
+__glob_pattern_p (pattern, quote)
const char *pattern;
int quote;
{
@@ -876,6 +878,9 @@ glob_pattern_p (pattern, quote)
return 0;
}
+#ifdef _LIBC
+weak_alias (__glob_pattern_p, glob_pattern_p)
+#endif
/* Like `glob', but PATTERN is a final pathname component,
@@ -900,7 +905,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
struct globlink *names = NULL;
size_t nfound = 0;
- if (!glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE)))
+ if (!__glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE)))
{
stream = NULL;
flags |= GLOB_NOCHECK;
@@ -916,7 +921,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
{
if ((errfunc != NULL && (*errfunc) (directory, errno)) ||
(flags & GLOB_ERR))
- return GLOB_ABEND;
+ return GLOB_ABORTED;
}
else
while (1)
@@ -958,7 +963,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
}
if (nfound == 0 && (flags & GLOB_NOMAGIC) &&
- ! glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE)))
+ ! __glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE)))
flags |= GLOB_NOCHECK;
if (nfound == 0 && (flags & GLOB_NOCHECK))
diff --git a/glob/glob.h b/glob/glob.h
index d4d7e7b..515514a 100644
--- a/glob/glob.h
+++ b/glob/glob.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib.
@@ -19,7 +19,6 @@
Boston, MA 02111-1307, USA. */
#ifndef _GLOB_H
-
#define _GLOB_H 1
#ifdef __cplusplus
@@ -55,7 +54,7 @@ extern "C"
GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \
GLOB_NOMAGIC|GLOB_TILDE)
-#if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_BSD_SOURCE)
+#if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_BSD_SOURCE) || defined (_GNU_SOURCE)
#define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */
#define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */
#define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */
@@ -65,9 +64,15 @@ extern "C"
/* Error returns from `glob'. */
#define GLOB_NOSPACE 1 /* Ran out of memory. */
-#define GLOB_ABEND 2 /* Read error. */
+#define GLOB_ABORTED 2 /* Read error. */
#define GLOB_NOMATCH 3 /* No matches found. */
+#ifdef _GNU_SOURCE
+/* Previous versions of this file defined GLOB_ABEND instead of
+ GLOB_ABORTED. Provide a compatibility definition here. */
+# define GLOB_ABEND GLOB_ABORTED
+#endif
+
/* Structure describing a globbing run. */
#if !defined (_AMIGA) && !defined (VMS) /* Buggy compiler. */
struct stat;
@@ -104,6 +109,16 @@ extern int glob __P ((const char *__pattern, int __flags,
extern void globfree __P ((glob_t *__pglob));
+#ifdef _GNU_SOURCE
+/* Return nonzero if PATTERN contains any metacharacters.
+ Metacharacters can be quoted with backslashes if QUOTE is nonzero.
+
+ This function is not part of the interface specified by POSIX.2
+ but several programs want to use it. */
+extern int __glob_pattern_p __P ((__const char *__pattern, int __quote));
+extern int glob_pattern_p __P ((__const char *__pattern, int __quote));
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/job.c b/job.c
index f00b6af..9d11ffc 100644
--- a/job.c
+++ b/job.c
@@ -785,6 +785,18 @@ start_job_command (child)
message (0, (just_print_flag || (!(flags & COMMANDS_SILENT) && !silent_flag))
? "%s" : (char *) 0, p);
+ /* Optimize an empty command. People use this for timestamp rules,
+ and forking a useless shell all the time leads to inefficiency. */
+
+ if ((argv[0] && !strcmp(argv[0], "/bin/sh"))
+ && (argv[1] && !strcmp(argv[1], "-c"))
+ && (argv[2] && !strcmp(argv[2], ":"))
+ && argv[3] == NULL)
+ {
+ set_command_state (child->file, cs_running);
+ goto next_command;
+ }
+
/* Tell update_goal_chain that a command has been started on behalf of
this target. It is important that this happens here and not in
reap_children (where we used to do it), because reap_children might be
diff --git a/main.c b/main.c
index 92dbe8d..e3518d5 100644
--- a/main.c
+++ b/main.c
@@ -392,6 +392,12 @@ struct file *default_file;
This turns on pedantic compliance with POSIX.2. */
int posix_pedantic;
+
+/* Nonzero if some rule detected clock skew; we keep track so (a) we only
+ print one warning about it during the run, and (b) we can print a final
+ warning at the end of the run. */
+
+int clock_skew_detected;
/* Mask of signals that are being caught with fatal_error_signal. */
@@ -1554,6 +1560,10 @@ int main (int argc, char ** argv)
fatal ("No targets");
}
+ /* If we detected some clock skew, generate one last warning */
+ if (clock_skew_detected)
+ error("*** Warning: Clock skew detected. Your build may be incomplete.");
+
/* Exit. */
die (status);
}
diff --git a/maintMakefile b/maintMakefile
new file mode 100644
index 0000000..aeb5616
--- /dev/null
+++ b/maintMakefile
@@ -0,0 +1,33 @@
+# Maintainer-only makefile segment. This contains things that are relevant
+# only if you have the full copy of the GNU make sources, not a dist copy.
+#
+
+# Find the glob source files... this might be dangerous, but we're maintainers!
+#
+globsrc := $(wildcard glob/*.c)
+
+# General rule for turning a .template into a regular file.
+#
+README : % : %.template configure.in
+ rm -f $@
+ sed 's/%VERSION%/$(version)/' < $< > $@
+ chmod a-w $@
+
+# Construct build.sh.in
+#
+build.sh.in: build.template Makefile.am
+ rm -f $@
+ sed -e 's@%objs%@$(filter-out remote-%, $(make_OBJECTS)\
+ $(patsubst %.c,%.o,$(globsrc)))@' \
+ $< > $@
+ chmod a-w+x $@
+
+# Put the alpha distribution files up for anonymous FTP.
+#
+ALPHA := ~ftp/gnu
+TARFILE := $(distdir).tar.gz
+
+.PHONY: alpha
+alpha: $(ALPHA) $(TARFILE)
+ @rm -f $(ALPHA)/$(TARFILE)
+ cp -p $(TARFILE) $(ALPHA)
diff --git a/make.1 b/make.1
index a8c4108..1bd37a7 100644
--- a/make.1
+++ b/make.1
@@ -8,7 +8,7 @@ make \- GNU make utility to maintain groups of programs
makefile ] [ option ] ...
target ...
.SH WARNING
-This man paage is an extract of the documentation of
+This man page is an extract of the documentation of
.I GNU make .
It is updated only occasionally, because the GNU project does not use nroff.
For complete, current documentation, refer to the Info file
@@ -110,7 +110,7 @@ or if the target does not exist.
.B \-b
.TP 0.5i
.B \-m
-These options are ignored for compatibility with other versions of
+These options are ignored for compatibility with other versions of
.IR make .
.TP 0.5i
.BI "\-C " dir
@@ -157,7 +157,7 @@ If several
.B \-I
options are used to specify several directories, the directories are
searched in the order specified.
-Unlike the arguments to other flags of
+Unlike the arguments to other flags of
.IR make ,
directories given with
.B \-I
@@ -236,11 +236,11 @@ Silent operation; do not print the commands as they are executed.
Cancel the effect of the
.B \-k
option.
-This is never necessary except in a recursive
+This is never necessary except in a recursive
.I make
where
.B \-k
-might be inherited from the top-level
+might be inherited from the top-level
.I make
via MAKEFLAGS or if you set
.B \-k
@@ -254,7 +254,7 @@ future invocations of
.IR make .
.TP 0.5i
.B \-v
-Print the version of the
+Print the version of the
.I make
program plus a copyright, a list of authors and a notice that there
is no warranty.
@@ -285,7 +285,7 @@ it is almost the same as running a
.I touch
command on the given file before running
.IR make ,
-except that the modification time is changed only in the imagination of
+except that the modification time is changed only in the imagination of
.IR make .
.SH "SEE ALSO"
.PD 0
diff --git a/make.h b/make.h
index 4dd1488..1889d85 100644
--- a/make.h
+++ b/make.h
@@ -376,7 +376,7 @@ extern void child_access ();
#endif
/* We omit these declarations on non-POSIX systems which define _POSIX_VERSION,
- because such systems often declare the in header files anyway. */
+ because such systems often declare them in header files anyway. */
#if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) && !defined(WINDOWS32)
@@ -407,6 +407,7 @@ extern int debug_flag, print_data_base_flag, question_flag, touch_flag;
extern int env_overrides, no_builtin_rules_flag, print_version_flag;
extern int print_directory_flag, warn_undefined_variables_flag;
extern int posix_pedantic;
+extern int clock_skew_detected;
extern unsigned int job_slots;
#ifndef NO_FLOAT
diff --git a/make.texinfo b/make.texinfo
index 14b38fc..25c7ec9 100644
--- a/make.texinfo
+++ b/make.texinfo
@@ -37,7 +37,7 @@ and issues the commands to recompile them.
This is Edition @value{EDITION}, last updated @value{UPDATED},
of @cite{The GNU Make Manual}, for @code{make}, Version @value{VERSION}.
-Copyright (C) 1988, '89, '90, '91, '92, '93, '94, '95, '96
+Copyright (C) 1988, '89, '90, '91, '92, '93, '94, '95, '96, '97
Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
@@ -264,7 +264,7 @@ Functions for Transforming Text
* Syntax of Functions:: How to write a function call.
* Text Functions:: General-purpose text manipulation functions.
-* Filename Functions:: Functions for manipulating file names.
+* File Name Functions:: Functions for manipulating file names.
* Foreach Function:: Repeat some text with controlled variation.
* Origin Function:: Find where a variable got its value.
* Shell Function:: Substitute the output of a shell command.
@@ -1102,6 +1102,8 @@ makefile as has been traditionally done with other versions of
@cindex @code{-I}
@cindex @code{--include-dir}
+@cindex included makefiles, default directries
+@cindex default directries for included makefiles
@findex /usr/gnu/include
@findex /usr/local/include
@findex /usr/include
@@ -1112,7 +1114,10 @@ First, any directories you have specified with the @samp{-I} or
(@pxref{Options Summary, ,Summary of Options}).
Then the following directories (if they exist)
are searched, in this order:
-@file{@var{prefix}/include} (normally @file{/usr/local/include})
+@file{@var{prefix}/include} (normally @file{/usr/local/include}
+@footnote{GNU Make compiled for MS-DOS and MS-Windows behaves as if
+@var{prefix} has been defined to be the root of the DJGPP tree
+hierarchy.})
@file{/usr/gnu/include},
@file{/usr/local/include}, @file{/usr/include}.
@@ -1464,7 +1469,10 @@ significance. If alone, or followed by a slash, it represents your home
directory. For example @file{~/bin} expands to @file{/home/you/bin}.
If the @samp{~} is followed by a word, the string represents the home
directory of the user named by that word. For example @file{~john/bin}
-expands to @file{/home/john/bin}.@refill
+expands to @file{/home/john/bin}. On systems which don't have a home
+directory for each user (such as MS-DOS or MS-Windows), this
+functionality can be simulated by setting the environment variable
+@var{HOME}.@refill
Wildcard expansion happens automatically in targets, in dependencies,
and in commands (where the shell does the expansion). In other
@@ -1578,6 +1586,24 @@ expansion, but you need more sophisticated techniques, including the
These are described in the following section.
@end iftex
+@cindex wildcards and MS-DOS/MS-Windows backslashes
+@cindex backslashes in pathnames and wildcard expansion
+
+Microsoft operating systems (MS-DOS and MS-Windows) use backslashes to
+separate directories in pathnames, like so:
+
+@example
+ c:\foo\bar\baz.c
+@end example
+
+This is equivalent to the Unix-style @file{c:/foo/bar/baz.c} (the
+@file{c:} part is the so-called drive letter). When @code{make} runs on
+these systems, it supports backslashes as well as the Unix-style forward
+slashes in pathnames. However, this support does @emph{not} include the
+wildcard expansion, where backslash is a quote character. Therefore,
+you @emph{must} use Unix-style slashes in these cases.
+
+
@node Wildcard Function, , Wildcard Pitfall, Wildcards
@subsection The Function @code{wildcard}
@findex wildcard
@@ -1676,13 +1702,15 @@ Thus, if a file that is listed as a target or dependency does not exist
in the current directory, @code{make} searches the directories listed in
@code{VPATH} for a file with that name. If a file is found in one of
them, that file may become the dependency (see below). Rules may then
-specify the names of source files in the dependencies as if they all
+specify the names of files in the dependency list as if they all
existed in the current directory. @xref{Commands/Search, ,Writing Shell
Commands with Directory Search}.
In the @code{VPATH} variable, directory names are separated by colons or
blanks. The order in which directories are listed is the order followed
-by @code{make} in its search.
+by @code{make} in its search. (On MS-DOS and MS-Windows, semi-colons
+are used as separators of directory names in @code{VPATH}, since the
+colon can be used in the pathname itself, after the drive letter.)
For example,
@@ -1715,11 +1743,12 @@ is found in the directory @file{src}.
@subsection The @code{vpath} Directive
@findex vpath
-Similar to the @code{VPATH} variable but more selective is the @code{vpath}
-directive (note lower case), which allows you to specify a search path for a particular class
-of file names, those that match a particular pattern. Thus you can supply
-certain search directories for one class of file names and other directories
-(or none) for other file names.
+Similar to the @code{VPATH} variable, but more selective, is the
+@code{vpath} directive (note lower case), which allows you to specify a
+search path for a particular class of file names: those that match a
+particular pattern. Thus you can supply certain search directories for
+one class of file names and other directories (or none) for other file
+names.
There are three forms of the @code{vpath} directive:
@@ -1729,8 +1758,8 @@ Specify the search path @var{directories} for file names that match
@var{pattern}.
The search path, @var{directories}, is a list of directories to be
-searched, separated by colons or blanks, just like the search path used
-in the @code{VPATH} variable.
+searched, separated by colons (semi-colons on MS-DOS and MS-Windows) or
+blanks, just like the search path used in the @code{VPATH} variable.
@item vpath @var{pattern}
Clear out the search path associated with @var{pattern}.
@@ -1817,7 +1846,7 @@ will look for a file ending in @samp{.c} in @file{foo}, then
When a dependency is found through directory search, regardless of type
(general or selective), the pathname located may not be the one that
-@code{make} actually provides you in the dependency list. Sometimes,
+@code{make} actually provides you in the dependency list. Sometimes
the path discovered through directory search is thrown away.
The algorithm @code{make} uses to decide whether to keep or abandon a
@@ -1829,7 +1858,7 @@ If a target file does not exist at the path specified in the makefile,
directory search is performed.
@item
-If the directory search is successful that path is kept, and this file
+If the directory search is successful, that path is kept and this file
is tentatively stored as the target.
@item
@@ -1843,17 +1872,20 @@ rebuilt:
@item
If the target does @emph{not} need to be rebuilt, the path to the file
found during directory search is used for any dependency lists which
-contain this target.
+contain this target. In short, if @code{make} doesn't need to rebuild
+the target then you use the path found via directory search.
@item
If the target @emph{does} need to be rebuilt (is out-of-date), the
pathname found during directory search is @emph{thrown away}, and the
-target is rebuilt using the filename specified in the makefile.
+target is rebuilt using the file name specified in the makefile. In
+short, if @code{make} must rebuild, then the target is rebuilt locally,
+not in the directory found via directory search.
@end enumerate
@end enumerate
-This may seem overly complex, but in fact it is almost always exactly
-what you want.
+This algorithm may seem complex, but in practice it is quite often
+exactly what you want.
@cindex traditional directory search
@cindex directory search, traditional
@@ -1958,7 +1990,9 @@ handles it specially by searching for the file @file{lib@var{name}.a} in
the current directory, in directories specified by matching @code{vpath}
search paths and the @code{VPATH} search path, and then in the
directories @file{/lib}, @file{/usr/lib}, and @file{@var{prefix}/lib}
-(normally @file{/usr/local/lib}).
+(normally @file{/usr/local/lib}, but MS-DOS/MS-Windows versions of
+@code{make} behave as if @var{prefix} is defined to be the root of the
+DJGPP installation tree).
For example,
@@ -2834,13 +2868,15 @@ by making a new subshell for each line. (In practice, @code{make} may
take shortcuts that do not affect the results.)
@cindex @code{cd} (shell command)
-@strong{Please note:} this implies that shell commands such as
-@code{cd} that set variables local to each process will not affect the
-following command lines. If you want to use @code{cd} to affect the
-next command, put the two on a single line with a semicolon between
-them. Then @code{make} will consider them a single command and pass
-them, together, to a shell which will execute them in sequence. For
-example:
+@strong{Please note:} this implies that shell commands such as @code{cd}
+that set variables local to each process will not affect the following
+command lines. @footnote{On MS-DOS, the value of current working
+directory is @strong{global}, so changing it @emph{will} affect the
+following command lines on those systems.} If you want to use @code{cd}
+to affect the next command, put the two on a single line with a
+semicolon between them. Then @code{make} will consider them a single
+command and pass them, together, to a shell which will execute them in
+sequence. For example:
@example
foo : bar/lose
@@ -2871,13 +2907,75 @@ foo : bar/lose
The program used as the shell is taken from the variable @code{SHELL}.
By default, the program @file{/bin/sh} is used.
+@vindex COMSPEC
+On MS-DOS, if @code{SHELL} is not set, the value of the variable
+@code{COMSPEC} (which is always set) is used instead.
+
+@cindex @code{SHELL}, MS-DOS specifics
+The processing of lines that set the variable @code{SHELL} in Makefiles
+is different on MS-DOS. The stock shell, @file{command.com}, is
+ridiculously limited in its functionality and many users of @code{make}
+tend to install a replacement shell. Therefore, on MS-DOS, @code{make}
+examines the value of @code{SHELL}, and changes its behavior based on
+whether it points to a Unix-style or DOS-style shell. This allows
+reasonable functionality even if @code{SHELL} points to
+@file{command.com}.
+
+If @code{SHELL} points to a Unix-style shell, @code{make} on MS-DOS
+additionally checks whether that shell can indeed be found; if not, it
+ignores the line that sets @code{SHELL}. In MS-DOS, GNU @code{make}
+searches for the shell in the following places:
+
+@enumerate
+@item
+In the precise place pointed to by the value of @code{SHELL}. For
+example, if the makefile specifies @samp{SHELL = /bin/sh}, @code{make}
+will look in the directory @file{/bin} on the current drive.
+
+@item
+In the current directory.
+
+@item
+In each of the directories in the @code{PATH} variable, in order.
+
+@end enumerate
+
+In every directory it examines, @code{make} will first look for the
+specific file (@file{sh} in the example above). If this is not found,
+it will also look in that directory for that file with one of the known
+extensions which identify executable files. For example @file{.exe},
+@file{.com}, @file{.bat}, @file{.btm}, @file{.sh}, and some others.
+
+If any of these attempts is successful, the value of @code{SHELL} will
+be set to the full pathname of the shell as found. However, if none of
+these is found, the value of @code{SHELL} will not be changed, and thus
+the line that sets it will be effectively ignored. This is so
+@code{make} will only support features specific to a Unix-style shell if
+such a shell is actually installed on the system where @code{make} runs.
+
+Note that this extended search for the shell is limited to the cases
+where @code{SHELL} is set from the Makefile; if it is set in the
+environment or command line, you are expected to set it to the full
+pathname of the shell, exactly as things are on Unix.
+
+The effect of the above DOS-specific processing is that a Makefile that
+says @samp{SHELL = /bin/sh} (as many Unix makefiles do), will work
+on MS-DOS unaltered if you have e.g. @file{sh.exe} installed in some
+directory along your @code{PATH}.
+
@cindex environment, @code{SHELL} in
Unlike most variables, the variable @code{SHELL} is never set from the
environment. This is because the @code{SHELL} environment variable is
used to specify your personal choice of shell program for interactive
-use. It would be very bad for personal choices like this to affect
-the functioning of makefiles. @xref{Environment, ,Variables from the
-Environment}.
+use. It would be very bad for personal choices like this to affect the
+functioning of makefiles. @xref{Environment, ,Variables from the
+Environment}. However, on MS-DOS and MS-Windows the value of
+@code{SHELL} in the environment @strong{is} used, since on those systems
+most users do not set this variable, and therefore it is most likely set
+specifically to be used by @code{make}. On MS-DOS, if the setting of
+@code{SHELL} is not suitable for @code{make}, you can set the variable
+@code{MAKESHELL} to the shell that @code{make} should use; this will
+override the value of @code{SHELL}.
@node Parallel, Errors, Execution, Commands
@section Parallel Execution
@@ -2894,6 +2992,9 @@ 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
+On MS-DOS, the @samp{-j} option has no effect, since that system doesn't
+support multi-processing.
+
If the @samp{-j} option is followed by an integer, this is the number of
commands to execute at once; this is called the number of @dfn{job slots}.
If there is nothing looking like an integer after the @samp{-j} option,
@@ -3110,7 +3211,7 @@ subdirectory. You can do it by writing this:
@example
subsystem:
- cd subdir; $(MAKE)
+ cd subdir && $(MAKE)
@end example
@noindent
@@ -3146,13 +3247,13 @@ not the explicit command name @samp{make}, as shown here:
@example
@group
subsystem:
- cd subdir; $(MAKE)
+ cd subdir && $(MAKE)
@end group
@end example
The value of this variable is the file name with which @code{make} was
invoked. If this file name was @file{/bin/make}, then the command executed
-is @samp{cd subdir; /bin/make}. If you use a special version of
+is @samp{cd subdir && /bin/make}. If you use a special version of
@code{make} to run the top-level makefile, the same special version will be
executed for recursive invocations.
@cindex @code{cd} (shell command)
@@ -3169,7 +3270,7 @@ Consider the command @samp{make -t} in the above example. (The
any commands; see @ref{Instead of Execution}.) Following the usual
definition of @samp{-t}, a @samp{make -t} command in the example would
create a file named @file{subsystem} and do nothing else. What you
-really want it to do is run @samp{@w{cd subdir;} @w{make -t}}; but that would
+really want it to do is run @samp{@w{cd subdir &&} @w{make -t}}; but that would
require executing the command, and @samp{-t} says not to execute
commands.@refill
@cindex @code{-t}, and recursion
@@ -3420,7 +3521,7 @@ value of @code{MAKEFLAGS}, like this:
@example
subsystem:
- cd subdir; $(MAKE) MAKEFLAGS=
+ cd subdir && $(MAKE) MAKEFLAGS=
@end example
@vindex MAKEOVERRIDES
@@ -3459,7 +3560,7 @@ this:
@example
subsystem:
- cd subdir; $(MAKE) $(MFLAGS)
+ cd subdir && $(MAKE) $(MFLAGS)
@end example
@noindent
@@ -4585,7 +4686,9 @@ Such problems would be especially likely with the variable @code{SHELL},
which is normally present in the environment to specify the user's choice
of interactive shell. It would be very undesirable for this choice to
affect @code{make}. So @code{make} ignores the environment value of
-@code{SHELL}.@refill
+@code{SHELL} (except on MS-DOS and MS-Windows, where @code{SHELL} is
+usually not set. @xref{Execution, ,Special handling of SHELL on
+MS-DOS}.)@refill
@node Conditionals, Functions, Using Variables, Top
@chapter Conditional Parts of Makefiles
@@ -4882,7 +4985,7 @@ call, just as a variable might be substituted.
@menu
* Syntax of Functions:: How to write a function call.
* Text Functions:: General-purpose text manipulation functions.
-* Filename Functions:: Functions for manipulating file names.
+* File Name Functions:: Functions for manipulating file names.
* Foreach Function:: Repeat some text with controlled variation.
* Origin Function:: Find where a variable got its value.
* Shell Function:: Substitute the output of a shell command.
@@ -4951,7 +5054,7 @@ bar:= $(subst $(space),$(comma),$(foo))
Here the @code{subst} function replaces each space with a comma, through
the value of @code{foo}, and substitutes the result.
-@node Text Functions, Filename Functions, Syntax of Functions, Functions
+@node Text Functions, File Name Functions, Syntax of Functions, Functions
@section Functions for String Substitution and Analysis
@cindex functions, for text
@@ -5215,7 +5318,7 @@ used so that the new value is assigned even if the previous value of
@code{CFLAGS} was specified with a command argument (@pxref{Override
Directive, , The @code{override} Directive}).
-@node Filename Functions, Foreach Function, Text Functions, Functions
+@node File Name Functions, Foreach Function, Text Functions, Functions
@section Functions for File Names
@cindex functions, for file names
@cindex file name functions
@@ -5282,11 +5385,11 @@ file names.
For example,
@example
-$(suffix src/foo.c hacks)
+$(suffix src/foo.c src-1.0/bar.c hacks)
@end example
@noindent
-produces the result @samp{.c}.
+produces the result @samp{.c .c}.
@item $(basename @var{names}@dots{})
@findex basename
@@ -5294,15 +5397,16 @@ produces the result @samp{.c}.
@cindex file name, basename of
Extracts all but the suffix of each file name in @var{names}. If the
file name contains a period, the basename is everything starting up to
-(and not including) the last period. Otherwise, the basename is the
-entire file name. For example,
+(and not including) the last period. Periods in the directory part are
+ignored. If there is no period, the basename is the entire file name.
+For example,
@example
-$(basename src/foo.c hacks)
+$(basename src/foo.c src-1.0/bar hacks)
@end example
@noindent
-produces the result @samp{src/foo hacks}.
+produces the result @samp{src/foo src-1.0/bar hacks}.
@c plural convention with dots (be consistent)
@item $(addsuffix @var{suffix},@var{names}@dots{})
@@ -5429,7 +5533,7 @@ that match the pattern.
@xref{Wildcards, ,Using Wildcard Characters in File Names}.
@end table
-@node Foreach Function, Origin Function, Filename Functions, Functions
+@node Foreach Function, Origin Function, File Name Functions, Functions
@section The @code{foreach} Function
@findex foreach
@cindex words, iterating over
@@ -6197,6 +6301,7 @@ argument, @code{make} runs as many jobs simultaneously as possible. If
there is more than one @samp{-j} option, the last one is effective.
@xref{Parallel, ,Parallel Execution},
for more information on how commands are run.
+Note that this option is ignored on MS-DOS.
@item -k
@cindex @code{-k}
@@ -7355,7 +7460,7 @@ variants that get just the file's directory name or just the file name
within the directory. The variant variables' names are formed by
appending @samp{D} or @samp{F}, respectively. These variants are
semi-obsolete in GNU @code{make} since the functions @code{dir} and
-@code{notdir} can be used to get a similar effect (@pxref{Filename
+@code{notdir} can be used to get a similar effect (@pxref{File Name
Functions, , Functions for File Names}). Note, however, that the
@samp{F} variants all omit the trailing slash which always appears in
the output of the @code{dir} function. Here is a table of the variants:
@@ -8529,43 +8634,43 @@ Sort the words in @var{list} lexicographically, removing duplicates.@*
@item $(dir @var{names}@dots{})
Extract the directory part of each file name.@*
-@xref{Filename Functions, ,Functions for File Names}.
+@xref{File Name Functions, ,Functions for File Names}.
@item $(notdir @var{names}@dots{})
Extract the non-directory part of each file name.@*
-@xref{Filename Functions, ,Functions for File Names}.
+@xref{File Name Functions, ,Functions for File Names}.
@item $(suffix @var{names}@dots{})
Extract the suffix (the last @samp{.} and following characters) of each file name.@*
-@xref{Filename Functions, ,Functions for File Names}.
+@xref{File Name Functions, ,Functions for File Names}.
@item $(basename @var{names}@dots{})
Extract the base name (name without suffix) of each file name.@*
-@xref{Filename Functions, ,Functions for File Names}.
+@xref{File Name Functions, ,Functions for File Names}.
@item $(addsuffix @var{suffix},@var{names}@dots{})
Append @var{suffix} to each word in @var{names}.@*
-@xref{Filename Functions, ,Functions for File Names}.
+@xref{File Name Functions, ,Functions for File Names}.
@item $(addprefix @var{prefix},@var{names}@dots{})
Prepend @var{prefix} to each word in @var{names}.@*
-@xref{Filename Functions, ,Functions for File Names}.
+@xref{File Name Functions, ,Functions for File Names}.
@item $(join @var{list1},@var{list2})
Join two parallel lists of words.@*
-@xref{Filename Functions, ,Functions for File Names}.
+@xref{File Name Functions, ,Functions for File Names}.
@item $(word @var{n},@var{text})
Extract the @var{n}th word (one-origin) of @var{text}.@*
-@xref{Filename Functions, ,Functions for File Names}.
+@xref{File Name Functions, ,Functions for File Names}.
@item $(words @var{text})
Count the number of words in @var{text}.@*
-@xref{Filename Functions, ,Functions for File Names}.
+@xref{File Name Functions, ,Functions for File Names}.
@item $(firstword @var{names}@dots{})
Extract the first word of @var{names}.@*
-@xref{Filename Functions, ,Functions for File Names}.
+@xref{File Name Functions, ,Functions for File Names}.
@item $(wildcard @var{pattern}@dots{})
Find file names matching a shell file name pattern (@emph{not} a
@@ -8669,6 +8774,12 @@ The name of the system default command interpreter, usually @file{/bin/sh}.
You can set @code{SHELL} in the makefile to change the shell used to run
commands. @xref{Execution, ,Command Execution}.
+@item MAKESHELL
+
+On MS-DOS only, the name of the command interpreter that is to be used
+by @code{make}. This value takes precedence over the value of
+@code{SHELL}. @xref{Execution, ,MAKESHELL variable}.
+
@item MAKE
The name with which @code{make} was invoked.
diff --git a/read.c b/read.c
index 875d565..1a0fae8 100644
--- a/read.c
+++ b/read.c
@@ -474,7 +474,7 @@ read_makefile (filename, flags)
++p2;
if (*p2 == '\0')
p2 = NULL;
- else if (*p2 == ':')
+ else if (p2[0] == ':' && p2[1] == '\0')
goto check_var;
/* We must first check for conditional and `define' directives before
@@ -928,7 +928,7 @@ do_define (name, namelen, origin, lineno, infile, filename)
(void) define_variable (var, strlen (var), definition, origin, 1);
free (definition);
freebuffer (&lb);
- return lineno;
+ return (lineno + nlines);
}
else
{
diff --git a/remake.c b/remake.c
index e1a6481..762ce98 100644
--- a/remake.c
+++ b/remake.c
@@ -597,34 +597,17 @@ update_file_1 (file, depth)
DEBUGPR ("Must remake target `%s'.\n");
- /* It needs to be remade. If it's VPATH and not GPATH, toss the VPATH */
+ /* It needs to be remade. If it's VPATH and not reset via GPATH, toss the
+ VPATH */
if (!streq(file->name, file->hname))
{
- char *name = file->name;
-
- if (gpath_search (&name, NULL))
- {
- register struct file *fp = file;
-
- /* Since we found the file on GPATH, convert it to use the
- VPATH filename. */
- while (fp)
- {
- fp->name = fp->hname;
- fp = fp->prev;
- }
- DEBUGPR (" Using VPATH `%s' due to GPATH.\n");
- }
- else
+ if (debug_flag)
{
- if (debug_flag)
- {
- print_spaces (depth);
- printf(" Ignoring VPATH name `%s'.\n", file->hname);
- fflush(stdout);
- }
- file->ignore_vpath = 1;
+ print_spaces (depth);
+ printf(" Ignoring VPATH name `%s'.\n", file->hname);
+ fflush(stdout);
}
+ file->ignore_vpath = 1;
}
/* Now, take appropriate actions to remake the file. */
@@ -1070,6 +1053,17 @@ f_mtime (file, search)
/* vpath_search and library_search store zero in MTIME
if they didn't need to do a stat call for their work. */
file->last_mtime = mtime;
+
+ /* If we found it in VPATH, see if it's in GPATH too; if so,
+ change the name right now; if not, defer until after the
+ dependencies are updated. */
+ if (gpath_search (name, strlen(name) - strlen(file->name) - 1))
+ {
+ rename_file (file, name);
+ check_renamed (file);
+ return file_mtime (file);
+ }
+
rehash_file (file, name);
check_renamed (file);
mtime = name_mtime (name);
@@ -1080,10 +1074,12 @@ f_mtime (file, search)
{
/* Files can have bogus timestamps that nothing newly made will be
"newer" than. Updating their dependents could just result in loops.
- So notify the user of the anomaly with a warning. */
+ So notify the user of the anomaly with a warning.
+
+ We only need to do this once, for now. */
static time_t now = 0;
- if (mtime != -1 && mtime > now && ! file->updated)
+ if (!clock_skew_detected && mtime != -1 && mtime > now && ! file->updated)
{
/* This file's time appears to be in the future.
Update our concept of the present, and compare again. */
@@ -1096,9 +1092,21 @@ f_mtime (file, search)
extern time_t time ();
time (&now);
#endif
- if (mtime > now)
- error ("*** Warning: File `%s' has modification time in the future",
- file->name);
+#ifdef WINDOWS32
+ /*
+ * FAT filesystems round time to nearest even second(!). Just
+ * allow for any file (NTFS or FAT) to perhaps suffer from this
+ * braindamage.
+ */
+ if (mtime > now && (((mtime % 2) == 0) && ((mtime-1) > now)))
+#else
+ if (mtime > now)
+#endif
+ {
+ error("*** Warning: File `%s' has modification time in the future",
+ file->name);
+ clock_skew_detected = 1;
+ }
}
}
diff --git a/variable.c b/variable.c
index 8f334c7..1717058 100644
--- a/variable.c
+++ b/variable.c
@@ -333,8 +333,6 @@ merge_variable_set_lists (setlist0, setlist1)
merge_variable_sets (list0->set, next->set);
- free ((char *) next);
-
last0 = list0;
list0 = list0->next;
}
diff --git a/version.c b/version.c
index 3db3284..a2e35fc 100644
--- a/version.c
+++ b/version.c
@@ -1,4 +1,9 @@
-char *version_string = "3.75.1";
+/* We use <config.h> instead of "config.h" so that a compilation
+ using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
+ (which it would do because make.h was found in $srcdir). */
+#include <config.h>
+
+char *version_string = VERSION;
/*
Local variables:
diff --git a/vpath.c b/vpath.c
index 3e2a011..2311ac1 100644
--- a/vpath.c
+++ b/vpath.c
@@ -310,19 +310,20 @@ construct_vpath_list (pattern, dirpath)
}
}
-/* Search the GPATH list for a directory where the name pointed to by FILE
- exists. If it is found, we set *FILE to the newly malloc'd name of the
- existing file, *MTIME_PTR (if MTIME_PTR is not NULL) to its modtime (or
- zero if no stat call was done), and return 1. Otherwise we return 0. */
+/* Search the GPATH list for a pathname string that matches the one passed
+ in. If it is found, return 1. Otherwise we return 0. */
int
-gpath_search (file, mtime_ptr)
- char **file;
- time_t *mtime_ptr;
+gpath_search (file, len)
+ char *file;
+ int len;
{
- if (gpaths != 0
- && selective_vpath_search (gpaths, file, mtime_ptr))
- return 1;
+ register char **gp;
+
+ if (gpaths && (len <= gpaths->maxlen))
+ for (gp = gpaths->searchpath; *gp != NULL; ++gp)
+ if (!strncmp(*gp, file, len) && (*gp)[len] == '\0')
+ return 1;
return 0;
}