Bug fixes and automake changes.
authorPaul Smith <psmith@gnu.org>
Mon, 18 Aug 1997 18:11:04 +0000 (18:11 +0000)
committerPaul Smith <psmith@gnu.org>
Mon, 18 Aug 1997 18:11:04 +0000 (18:11 +0000)
30 files changed:
AUTHORS [new file with mode: 0644]
ChangeLog
GNUmakefile
Makefile.am [new file with mode: 0644]
NEWS
README.DOS.template
README.template
acconfig.h
build.template
configure.in
file.c
filedef.h
function.c
glob/ChangeLog
glob/Makefile.am [new file with mode: 0644]
glob/configure.in
glob/fnmatch.h
glob/glob.c
glob/glob.h
job.c
main.c
maintMakefile [new file with mode: 0644]
make.1
make.h
make.texinfo
read.c
remake.c
variable.c
version.c
vpath.c

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
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 :)
index d73049ddc11df991a9683c73fafebab7e9f0208d..6bdd8ce5bdad762d729d3deb6995a6c1d0f54389 100644 (file)
--- 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
index a4d3b36b8cbce4210695bc27b0c29402791a5c0f..272e37b0f0c47998a194b355e1faf79a69322b68 100644 (file)
-# 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 $@
-\f
-# 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 (file)
index 0000000..6960f08
--- /dev/null
@@ -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 e79cbe7cd78a8cac2aacb5c901c2a02a49a9b6e4..197e1b28ea3672732c34a5442271c82fd9729ee0 100644 (file)
--- 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
index 49fd0e7a6cb9dbd50351280b1399e5dd83b89c06..6226f7b14ce49366ebe0fcee07c092dc71797a54 100644 (file)
@@ -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
index 0d3bbfc3a3f23f81bb436439a0742df0756e8ee3..735815c8c49af8c9061472fb8dd7a9a2cb56bc2a 100644 (file)
@@ -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.
index e3366488f937775f01772c10d3e009cc5e9f2e1a..d20cae178386c30449fe558037a976d8b8c0275f 100644 (file)
@@ -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
 
index 1e65ac58c7b717c34c6ad20ea0526ab2ef54f0b1..40307ff6648ff2596dbb24f67b69f632f7254410 100644 (file)
@@ -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.
index c6f658349f259af44b02b51bfb2ec28e004398f8..4eb60910c7bc50ce637f735e5edeea35514088c3 100644 (file)
@@ -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 b264d9d51dd992c621fa726de5a65187e965ba42..dbb8fc3e0ae95f5e5fcb5005ae2424307e01235f 100644 (file)
--- 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;
index b5beac9a6da8ac6b2aaa399204a9ca7dc5ea9870..5da41d83698bcd4b0ba809c1110dbf944b6767d8 100644 (file)
--- 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 ();
 
 
index 125a994fdfab5b6c7db894e368b444c1cdc218da..a6496fa2fe9509200a1efd8cd4f824a7d94455b5 100644 (file)
@@ -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;
index de04c4b94398be9b10ea742be267a0bf07847efa..92c5e7c08b85e19e1383edba095444edd7184e33 100644 (file)
@@ -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 (file)
index 0000000..3c4ab7a
--- /dev/null
@@ -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
index 8dc68e42483629533896b231183217c971e95102..cf0a408d4454ad4a5b65cfa04869cc5bb3603837 100644 (file)
@@ -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
index 20ed659f3bf63c922e7f02528b9321a5ff66da92..38b7255f4d2bf96ea87f1e3449cac20e43c6b8f0 100644 (file)
@@ -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
index 84747662dce53ea09322be7b4ac9fd85f8412df9..6a82fe02545d5a70134742111b0b206bc1ec6cc2 100644 (file)
@@ -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>
 \f
-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))
index d4d7e7bfc5fed13dbf27937724b8a920c1227eab..515514a4c29050647fabc694ddcf55a9b8dce80b 100644 (file)
@@ -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 f00b6af3e71ac51db566baffeda507fff036257d..9d11ffc9f824c54191b965564df86599a821c101 100644 (file)
--- 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 92dbe8de7bd78c5fd39a43166055d576b4a862a2..e3518d5d1ad69ab503346bc1b8d981da66ed9f22 100644 (file)
--- 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;
 \f
 /* 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 (file)
index 0000000..aeb5616
--- /dev/null
@@ -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 a8c410892ada7337727064d84e06b4a25fda7909..1bd37a7e9c36fcd2ec581af80548aead7b1a052f 100644 (file)
--- 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 4dd14884cd4d5dc7eedeeab935b60298b3172f17..1889d85e76484e9949c4f8a9ea7aa3016daa8fa0 100644 (file)
--- 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
index 14b38fc1a43fefbb3f1e903ef9ea65d5f82ccde7..25c7ec91058dad1c28ebbfce389bd882f4e4e091 100644 (file)
@@ -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 875d5654a424c11acaa061f282503d3d983c8fbd..1a0fae897b322296a02ca028774b4872879fe8f5 100644 (file)
--- 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
        {
index e1a6481c297ad216cd2f6adcc99fb0415307979d..762ce98a8c6defa7b8c4eb2421d5ea6d41da9cbb 100644 (file)
--- 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;
+          }
       }
   }
 
index 8f334c76565592ad2889c5b12d1a2dc240447634..17170580ea61c602daf24db6dbf39df45b7fa38e 100644 (file)
@@ -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;
     }
index 3db32849f6ced7d53a6d7a8d64cd1e7f83bcd462..a2e35fc25c3c06fb253dd6ccb3e3fbd3e62686ae 100644 (file)
--- 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;
 \f
 /*
   Local variables:
diff --git a/vpath.c b/vpath.c
index 3e2a01192f6a825d0ec271e3ac3fb08fa5ab8014..2311ac140375926a7dcd04d08b59a79f8cc3e703 100644 (file)
--- a/vpath.c
+++ b/vpath.c
@@ -310,19 +310,20 @@ construct_vpath_list (pattern, dirpath)
     }
 }
 \f
-/* 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;
 }