aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--Makefile.in15
-rw-r--r--src/ChangeLog10
-rw-r--r--src/Makefile.in40
4 files changed, 27 insertions, 40 deletions
diff --git a/ChangeLog b/ChangeLog
index fb4bea3592f..3a5797a7caa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
12014-06-27 Glenn Morris <rgm@gnu.org> 12014-06-27 Glenn Morris <rgm@gnu.org>
2 2
3 * Makefile.in (src): No more need to pass BOOTSTRAPEMACS.
4
3 * make-dist: Exclude test/automated/*.log. 5 * make-dist: Exclude test/automated/*.log.
4 6
52014-06-26 Glenn Morris <rgm@gnu.org> 72014-06-26 Glenn Morris <rgm@gnu.org>
diff --git a/Makefile.in b/Makefile.in
index ce44aa5de84..0fd9f980ca9 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -368,16 +368,6 @@ lisp: src
368lib lib-src lisp nt: Makefile 368lib lib-src lisp nt: Makefile
369 $(MAKE) -C $@ all 369 $(MAKE) -C $@ all
370 370
371# Pass to src/Makefile.in an additional BOOTSTRAPEMACS variable which
372# is either set to bootstrap-emacs (in case bootstrap-emacs has not been
373# constructed yet) or the empty string (otherwise).
374# src/Makefile.in uses it to implement conditional dependencies, so that
375# files that need bootstrap-emacs to be built do not additionally need
376# to be kept fresher than bootstrap-emacs. Otherwise changing a single
377# file src/foo.c forces dumping a new bootstrap-emacs, then re-byte-compiling
378# all preloaded elisp files, and only then dump the actual src/emacs, which
379# is not wrong, but is overkill in 99.99% of the cases.
380#
381# Note the use of single quotes in the value of vcswitness. 371# Note the use of single quotes in the value of vcswitness.
382# This passes an unexpanded $srcdir to src's Makefile, which then 372# This passes an unexpanded $srcdir to src's Makefile, which then
383# expands it using its own value of srcdir (which points to the 373# expands it using its own value of srcdir (which points to the
@@ -386,10 +376,7 @@ src: Makefile
386 dirstate='.bzr/checkout/dirstate'; \ 376 dirstate='.bzr/checkout/dirstate'; \
387 vcswitness='$$(srcdir)/../'$$dirstate; \ 377 vcswitness='$$(srcdir)/../'$$dirstate; \
388 [ -r "$(srcdir)/$$dirstate" ] || vcswitness=''; \ 378 [ -r "$(srcdir)/$$dirstate" ] || vcswitness=''; \
389 cd $@ || exit; \ 379 $(MAKE) -C $@ all VCSWITNESS="$$vcswitness"
390 boot=bootstrap-emacs$(EXEEXT); \
391 [ ! -x "$$boot" ] || boot=''; \
392 $(MAKE) all BOOTSTRAPEMACS="$$boot" VCSWITNESS="$$vcswitness"
393 380
394blessmail: Makefile src 381blessmail: Makefile src
395 $(MAKE) -C lib-src maybe-blessmail 382 $(MAKE) -C lib-src maybe-blessmail
diff --git a/src/ChangeLog b/src/ChangeLog
index da46ead2b93..b25e2d487d7 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,13 @@
12014-06-27 Glenn Morris <rgm@gnu.org>
2
3 * Makefile.in: Replace BOOTSTRAPEMACS sleight-of-hand
4 with an order-only dependence on bootstrap-emacs. (Bug#2151)
5 (.el.elc): Replace suffix rule with pattern rule.
6 (%.elc): New pattern rule, with order-only prerequisite.
7 ($(lisp)): No more need to depend on BOOTSTRAPEMACS.
8 ($(lispsource)/loaddefs.el): Use an order-only prerequisite
9 in place of BOOTSTRAPEMACS.
10
12014-06-26 Dmitry Antipov <dmantipov@yandex.ru> 112014-06-26 Dmitry Antipov <dmantipov@yandex.ru>
2 12
3 * fns.c (Fcompare_strings): Use FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE. 13 * fns.c (Fcompare_strings): Use FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE.
diff --git a/src/Makefile.in b/src/Makefile.in
index 5bed189f16a..748f38e55bd 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,7 +1,7 @@
1### @configure_input@ 1### @configure_input@
2 2
3# Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2014 Free Software 3# Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2014
4# Foundation, Inc. 4# Free Software Foundation, Inc.
5 5
6# This file is part of GNU Emacs. 6# This file is part of GNU Emacs.
7 7
@@ -594,40 +594,28 @@ tags: TAGS ../lisp/TAGS $(lwlibdir)/TAGS
594## such as loaddefs.el or *.elc can typically be produced by any old 594## such as loaddefs.el or *.elc can typically be produced by any old
595## Emacs executable, so we would like to avoid rebuilding them whenever 595## Emacs executable, so we would like to avoid rebuilding them whenever
596## we build a new Emacs executable. 596## we build a new Emacs executable.
597##
598## (In other words, changing a single file src/foo.c would force
599## dumping a new bootstrap-emacs, then re-byte-compiling all preloaded
600## elisp files, and only then dump the actual src/emacs, which is not
601## wrong, but is overkill in 99.99% of the cases.)
602##
597## To solve the circularity, we use 2 different Emacs executables, 603## To solve the circularity, we use 2 different Emacs executables,
598## "emacs" is the main target and "bootstrap-emacs" is the one used 604## "emacs" is the main target and "bootstrap-emacs" is the one used
599## to build the *.elc and loaddefs.el files. 605## to build the *.elc and loaddefs.el files.
600## To solve the freshness issue, we used to use a third file "witness-emacs" 606## To solve the freshness issue, in the past we tried various clever tricks,
601## which was used to witness the fact that there is a bootstrap-emacs 607## but now that we require GNU make, we can simply specify
602## executable, and then have dependencies on witness-emacs rather than 608## bootstrap-emacs$(EXEEXT) as an order-only prerequisite.
603## bootstrap-emacs, but that lead to problems in parallel builds (because
604## witness-emacs needed to be free from dependencies (to avoid rebuilding
605## it), so it was compiled in parallel, leading typically to having 2
606## processes dumping bootstrap-emacs at the same time).
607## So instead, we replace the witness-emacs dependencies by conditional
608## bootstrap-dependencies (via $(BOOTSTRAPEMACS)). Of course, since we do
609## not want to rely on GNU Make features, we have to rely on an external
610## script to do the conditional part of the dependency
611## (i.e. see the $(SUBDIR) rule ../Makefile.in).
612
613.SUFFIXES: .elc .el
614
615## These suffix rules do not allow additional dependencies, sadly, so
616## instead of adding a $(BOOTSTRAPEMACS) dependency here, we add it
617## separately below.
618## With GNU Make, we would just say "%.el : %.elc $(BOOTSTRAPEMACS)"
619.el.elc:
620 @$(MAKE) -C ../lisp compile-onefile THEFILE=$< EMACS="$(bootstrap_exe)"
621 609
622## Since the .el.elc rule cannot specify an extra dependency, we do it here. 610%.elc: %.el | bootstrap-emacs$(EXEEXT)
623$(lisp): $(BOOTSTRAPEMACS) 611 @$(MAKE) -C ../lisp compile-onefile THEFILE=$< EMACS="$(bootstrap_exe)"
624 612
625## VCSWITNESS points to the file that holds info about the current checkout. 613## VCSWITNESS points to the file that holds info about the current checkout.
626## We use it as a heuristic to decide when to rebuild loaddefs.el. 614## We use it as a heuristic to decide when to rebuild loaddefs.el.
627## If empty it is ignored; the parent makefile can set it to some other value. 615## If empty it is ignored; the parent makefile can set it to some other value.
628VCSWITNESS = 616VCSWITNESS =
629 617
630$(lispsource)/loaddefs.el: $(BOOTSTRAPEMACS) $(VCSWITNESS) 618$(lispsource)/loaddefs.el: $(VCSWITNESS) | bootstrap-emacs$(EXEEXT)
631 $(MAKE) -C ../lisp autoloads EMACS="$(bootstrap_exe)" 619 $(MAKE) -C ../lisp autoloads EMACS="$(bootstrap_exe)"
632 620
633## Dump an Emacs executable named bootstrap-emacs containing the 621## Dump an Emacs executable named bootstrap-emacs containing the