aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2017-03-17 11:33:48 -0700
committerPaul Eggert2017-03-17 11:42:34 -0700
commit2f8935099c680f5e25afdf290d351180ee42fa39 (patch)
tree900d6f682b94c4b5f5cfe435fd6910f6ad9b6b3e
parent65faa7bcb59421603ed2b6e961fe4b9ea8cb91b9 (diff)
downloademacs-2f8935099c680f5e25afdf290d351180ee42fa39.tar.gz
emacs-2f8935099c680f5e25afdf290d351180ee42fa39.zip
Fixups for GNU Make switchover
This fixes some minor problems introduced in the recent switch to GNU Make, discovered by further testing. Without some of these changes 'make -j' would sometimes have race conditions caused by missing dependencies. (Bug#26100) * .gitignore: Remove src/stamp-h.in, src/stamp-h1. * Makefile.in ($(MAKEFILE_NAME)): Depend on configure, not src/config.in, since the former's timestamp now represents the latter's. ($(srcdir)/configure): Use plain ./autogen.sh, for consistency with other autogen.sh invocations. ($(srcdir)/src/stamp-h.in): Remove rule, as this file is no longer created. * Makefile.in (top_distclean): * src/Makefile.in (bootstrap-clean): No need to remove stamp-h1, as that was an Automake byproduct and Automake is no longer in use. * lib/Makefile.in, src/Makefile.in: (AUTOCONF_INPUTS, $(top_srcdir)/configure): Remove. (../config.status, Makefile): Simplify by limiting dependencies to files we care about and files in the repository, and by using just one file to represent the timestamps on multiple targets updated by the same rule. * autogen.sh: Do not create or use src/stamp-h.in. Instead, have 'find' test the two output files directly.
-rw-r--r--.gitignore2
-rw-r--r--Makefile.in22
-rwxr-xr-xautogen.sh6
-rw-r--r--lib/Makefile.in8
-rw-r--r--nt/gnulib-cfg.mk2
-rw-r--r--src/Makefile.in10
6 files changed, 15 insertions, 35 deletions
diff --git a/.gitignore b/.gitignore
index 6697a1ec841..ce1866d616b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -121,8 +121,6 @@ deps/
121*.stamp 121*.stamp
122stamp_BLD 122stamp_BLD
123src/gl-stamp 123src/gl-stamp
124src/stamp-h.in
125src/stamp-h1
126 124
127# Object files and debugging. 125# Object files and debugging.
128*.a 126*.a
diff --git a/Makefile.in b/Makefile.in
index 6c25a1bd8e1..cf8ff84212f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -419,8 +419,10 @@ blessmail: Makefile src
419 $(MAKE) -C lib-src maybe-blessmail 419 $(MAKE) -C lib-src maybe-blessmail
420 420
421# We used to have one rule per */Makefile.in, but that leads to race 421# We used to have one rule per */Makefile.in, but that leads to race
422# conditions with parallel makes, so let's assume that the time stamp on 422# conditions with parallel makes, so assume that the timestamp on
423# ./Makefile is representative of the time stamp on all the other Makefiles. 423# ./Makefile represents the timestamp on all the other Makefiles.
424# Similarly, assume the timestamp on ./configure represents the
425# timestamp on src/config.in.
424# 426#
425# config.status overrides MAKEFILE_NAME with a bogus name when creating 427# config.status overrides MAKEFILE_NAME with a bogus name when creating
426# src/epaths.h, so that 'make epaths-force' does not recursively invoke 428# src/epaths.h, so that 'make epaths-force' does not recursively invoke
@@ -430,7 +432,7 @@ blessmail: Makefile src
430# then attempts to build that file. This forces 'Makefile', 'lib/Makefile', 432# then attempts to build that file. This forces 'Makefile', 'lib/Makefile',
431# etc. to be built without running into similar recursion problems. 433# etc. to be built without running into similar recursion problems.
432MAKEFILE_NAME = Makefile 434MAKEFILE_NAME = Makefile
433$(MAKEFILE_NAME): config.status $(srcdir)/src/config.in \ 435$(MAKEFILE_NAME): config.status $(srcdir)/configure \
434 $(srcdir)/lib/gnulib.mk.in \ 436 $(srcdir)/lib/gnulib.mk.in \
435 $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN) $(CONFIG_STATUS_FILES_IN) 437 $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN) $(CONFIG_STATUS_FILES_IN)
436 MAKE='$(MAKE)' ./config.status 438 MAKE='$(MAKE)' ./config.status
@@ -445,16 +447,8 @@ config.status: ${srcdir}/configure
445 $(CFG) $(srcdir)/configure $(CONFIGURE_FLAGS); \ 447 $(CFG) $(srcdir)/configure $(CONFIGURE_FLAGS); \
446 fi 448 fi
447 449
448$(srcdir)/configure $(srcdir)/src/stamp-h.in: \ 450$(srcdir)/configure: $(srcdir)/configure.ac $(srcdir)/m4/*.m4
449 $(srcdir)/configure.ac $(srcdir)/m4/*.m4 451 cd $(srcdir) && ./autogen.sh
450 cd $(srcdir) && ./autogen.sh autoconf
451
452$(srcdir)/src/config.in: $(srcdir)/src/stamp-h.in
453 @ # Usually, there's no need to rebuild src/config.in just
454 @ # because stamp-h.in has changed (since building stamp-h.in
455 @ # refreshes config.in as well), but if config.in is missing
456 @ # then we really need to do something more.
457 $(if $(wildcard $@),,cd $(srcdir) && ./autogen.sh autoconf)
458 452
459# ==================== Installation ==================== 453# ==================== Installation ====================
460 454
@@ -864,7 +858,7 @@ top_bootclean=\
864top_distclean=\ 858top_distclean=\
865 ${top_bootclean}; \ 859 ${top_bootclean}; \
866 rm -f config.status config.log~ \ 860 rm -f config.status config.log~ \
867 Makefile lib/gnulib.mk stamp-h1 ${SUBDIR_MAKEFILES} 861 Makefile lib/gnulib.mk ${SUBDIR_MAKEFILES}
868 862
869distclean_dirs = $(clean_dirs) leim lisp 863distclean_dirs = $(clean_dirs) leim lisp
870 864
diff --git a/autogen.sh b/autogen.sh
index f8e71cb747a..2297bdc8c49 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -242,10 +242,6 @@ Please report any problems with this script to bug-gnu-emacs@gnu.org .'
242 ## Let autoreconf figure out what, if anything, needs doing. 242 ## Let autoreconf figure out what, if anything, needs doing.
243 ## Use autoreconf's -f option in case autoreconf itself has changed. 243 ## Use autoreconf's -f option in case autoreconf itself has changed.
244 autoreconf -fi -I m4 || exit 244 autoreconf -fi -I m4 || exit
245
246 ## Create a timestamp, so that './autogen.sh; make' doesn't
247 ## cause 'make' to needlessly run 'autoheader'.
248 echo timestamp > src/stamp-h.in || exit
249fi 245fi
250 246
251 247
@@ -360,7 +356,7 @@ if test ! -f configure; then
360elif test -e .git && test $git_was_ok = false && test $do_git = false; then 356elif test -e .git && test $git_was_ok = false && test $do_git = false; then
361 echo "You can now run '$0 git'." 357 echo "You can now run '$0 git'."
362elif test ! -f config.status || 358elif test ! -f config.status ||
363 test -n "`find src/stamp-h.in -newer config.status`"; then 359 test -n "`find configure src/config.in -newer config.status`"; then
364 echo "You can now run './configure'." 360 echo "You can now run './configure'."
365fi 361fi
366 362
diff --git a/lib/Makefile.in b/lib/Makefile.in
index 09220e0d178..5c199270acc 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -76,14 +76,10 @@ else
76 MKDEPDIR = : 76 MKDEPDIR = :
77endif 77endif
78 78
79AUTOCONF_INPUTS = $(top_srcdir)/configure.ac $(top_srcdir)/m4/*.m4
80$(top_srcdir)/configure: $(AUTOCONF_INPUTS)
81.PRECIOUS: ../config.status Makefile 79.PRECIOUS: ../config.status Makefile
82../config.status: $(top_srcdir)/configure $(top_srcdir)/lisp/version.el 80../config.status: $(top_srcdir)/configure.ac $(top_srcdir)/m4/*.m4
83Makefile: ../config.status $(srcdir)/Makefile.in
84$(top_srcdir)/configure ../config.status:
85 $(MAKE) -C .. $(notdir $@) 81 $(MAKE) -C .. $(notdir $@)
86Makefile: 82Makefile: ../config.status $(srcdir)/Makefile.in
87 $(MAKE) -C .. src/$@ 83 $(MAKE) -C .. src/$@
88 84
89libgnu_a_OBJECTS = $(gl_LIBOBJS) \ 85libgnu_a_OBJECTS = $(gl_LIBOBJS) \
diff --git a/nt/gnulib-cfg.mk b/nt/gnulib-cfg.mk
index 4095ecfd6e9..175329fb9e7 100644
--- a/nt/gnulib-cfg.mk
+++ b/nt/gnulib-cfg.mk
@@ -16,7 +16,7 @@
16# along with this file. If not, see <http://www.gnu.org/licenses/>. 16# along with this file. If not, see <http://www.gnu.org/licenses/>.
17 17
18 18
19# Gnulib odules to be omitted from Emacs. 19# Gnulib modules to be omitted from Emacs.
20 20
21# Omit them because they either conflict with MinGW headers or 21# Omit them because they either conflict with MinGW headers or
22# headers in nt/inc, or because those modules won't compile with 22# headers in nt/inc, or because those modules won't compile with
diff --git a/src/Makefile.in b/src/Makefile.in
index c9147d08bcf..60aa6866718 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -624,14 +624,10 @@ $(oldXMenudir)/libXMenu11.a: FORCE
624FORCE: 624FORCE:
625.PHONY: FORCE 625.PHONY: FORCE
626 626
627AUTOCONF_INPUTS = $(top_srcdir)/configure.ac $(top_srcdir)/m4/*.m4
628$(top_srcdir)/configure config.in: $(AUTOCONF_INPUTS)
629.PRECIOUS: ../config.status Makefile 627.PRECIOUS: ../config.status Makefile
630../config.status: $(top_srcdir)/configure $(top_srcdir)/lisp/version.el 628../config.status: $(top_srcdir)/configure.ac $(top_srcdir)/m4/*.m4
631Makefile: ../config.status $(srcdir)/Makefile.in
632$(top_srcdir)/configure ../config.status:
633 $(MAKE) -C .. $(notdir $@) 629 $(MAKE) -C .. $(notdir $@)
634config.in Makefile: 630Makefile: ../config.status $(srcdir)/Makefile.in
635 $(MAKE) -C .. src/$@ 631 $(MAKE) -C .. src/$@
636 632
637doc.o: buildobj.h 633doc.o: buildobj.h
@@ -661,7 +657,7 @@ clean: mostlyclean
661## It should remove all files generated during a compilation/bootstrap, 657## It should remove all files generated during a compilation/bootstrap,
662## but not things like config.status or TAGS. 658## but not things like config.status or TAGS.
663bootstrap-clean: clean 659bootstrap-clean: clean
664 rm -f epaths.h config.h config.stamp stamp-h1 660 rm -f epaths.h config.h config.stamp
665 if test -f ./.gdbinit; then \ 661 if test -f ./.gdbinit; then \
666 mv ./.gdbinit ./.gdbinit.save; \ 662 mv ./.gdbinit ./.gdbinit.save; \
667 if test -f "$(srcdir)/.gdbinit"; then rm -f ./.gdbinit.save; \ 663 if test -f "$(srcdir)/.gdbinit"; then rm -f ./.gdbinit.save; \