aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2008-06-22 13:57:28 +0000
committerStefan Monnier2008-06-22 13:57:28 +0000
commitb4945b9599f0651fef5fa2ca2ef6034fa0b5bfaa (patch)
treed61baf573d7a8303e0935741b886a33337e401c7
parent3656581540295dc1d28e2c3341092dba057f2523 (diff)
downloademacs-b4945b9599f0651fef5fa2ca2ef6034fa0b5bfaa.tar.gz
emacs-b4945b9599f0651fef5fa2ca2ef6034fa0b5bfaa.zip
* Makefile.in ${SUBDIR}: Pass additional BOOTSTRAPEMACS argument.
* Makefile.in (${lisp} ${SOME_MACHINE_LISP}, ../lisp/loaddefs.el): Use $(BOOTSTRAPEMACS) rather than witness-emacs. (bootstrap-emacs${EXEEXT}): Merge witness-emacs into it. (witness-emacs): Remove. (lisp, shortlisp): Move loaddefs.el earlier. (mostlyclean): Forget about witness-emacs. * Makefile.in (COMPILE_FIRST): Trim down and add autoload.el.
-rw-r--r--ChangeLog4
-rw-r--r--Makefile.in15
-rw-r--r--lisp/ChangeLog8
-rw-r--r--lisp/Makefile.in11
-rw-r--r--src/ChangeLog9
-rw-r--r--src/Makefile.in48
6 files changed, 61 insertions, 34 deletions
diff --git a/ChangeLog b/ChangeLog
index bf00c773970..a3277e82cbb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
12008-06-22 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * Makefile.in ${SUBDIR}: Pass additional BOOTSTRAPEMACS argument.
4
12008-06-22 Glenn Morris <rgm@gnu.org> 52008-06-22 Glenn Morris <rgm@gnu.org>
2 6
3 * Makefile.in (top_bootclean): Remove obsolete references to lock/. 7 * Makefile.in (top_bootclean): Remove obsolete references to lock/.
diff --git a/Makefile.in b/Makefile.in
index ae92424bf8e..abd61490fbe 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -315,10 +315,21 @@ lib-src: FRC src/config.stamp
315# We need to build `emacs' in `src' to compile the *.elc files in `lisp'. 315# We need to build `emacs' in `src' to compile the *.elc files in `lisp'.
316lisp: src 316lisp: src
317 317
318# Pass to src/Makefile.in an additional BOOTSTRAPEMACS variable which
319# is either set to bootstrap-emacs (in case bootstrap-emacs has not been
320# constructed yet) or the empty string (otherwise).
321# src/Makefile.in uses it to implement conditional dependencies, so that
322# files that need bootstrap-emacs to be built do not additionally need
323# to be kept fresher than bootstrap-emacs. Otherwise changing a single
324# file src/foo.c forces dumping a new bootstrap-emacs, then re-byte-compiling
325# all preloaded elisp files, and only then dump the actual src/emacs, which
326# is not wrong, but is overkill in 99.99% of the cases.
318${SUBDIR}: ${SUBDIR_MAKEFILES} FRC 327${SUBDIR}: ${SUBDIR_MAKEFILES} FRC
319 cd $@; $(MAKE) all $(MFLAGS) \ 328 boot=bootstrap-emacs$(EXEEXT); \
329 if [ -x "src/$$boot" ]; then boot=""; fi; \
330 cd $@; $(MAKE) all $(MFLAGS) \
320 CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \ 331 CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
321 LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' 332 LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' BOOTSTRAPEMACS="$$boot"
322 333
323blessmail: ${SUBDIR_MAKEFILES} src FRC 334blessmail: ${SUBDIR_MAKEFILES} src FRC
324 cd lib-src; $(MAKE) maybe-blessmail $(MFLAGS) \ 335 cd lib-src; $(MAKE) maybe-blessmail $(MFLAGS) \
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index cd261b239d6..9fa1098b70b 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,7 @@
12008-06-22 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * Makefile.in (COMPILE_FIRST): Trim down and add autoload.el.
4
12008-06-21 John Paul Wallington <jpw@pobox.com> 52008-06-21 John Paul Wallington <jpw@pobox.com>
2 6
3 * emacs-lisp/derived.el (define-derived-mode): Add `doc-string' decl. 7 * emacs-lisp/derived.el (define-derived-mode): Add `doc-string' decl.
@@ -21,8 +25,8 @@
21 25
22 * emacs-lisp/debug.el (help-xref-interned): Declare. 26 * emacs-lisp/debug.el (help-xref-interned): Declare.
23 27
24 * emacs-lisp/easy-mmode.el (easy-mmode-set-keymap-parents): Evaluate 28 * emacs-lisp/easy-mmode.el (easy-mmode-set-keymap-parents):
25 definition when compiling. 29 Evaluate definition when compiling.
26 30
27 * progmodes/bug-reference.el (bug-reference-map): Bind down-mouse-1 31 * progmodes/bug-reference.el (bug-reference-map): Bind down-mouse-1
28 rather than mouse-1. 32 rather than mouse-1.
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index d391080f493..7a94886735c 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -63,18 +63,11 @@ AUTOGENEL = loaddefs.el \
63 63
64# Files to compile before others during a bootstrap. This is done to 64# Files to compile before others during a bootstrap. This is done to
65# speed up the bootstrap process. 65# speed up the bootstrap process.
66# Why `subr.elc'? It's dumped so byte-compiling it early shouldn't make
67# any difference!? --Stef
68# Some CC files are compiled first because CC mode tweaks the compilation
69# process, and requiring cc-mode when it is not compiled doesn't work during
70# the bootstrapping.
71 66
72COMPILE_FIRST = \ 67COMPILE_FIRST = \
73 $(lisp)/emacs-lisp/bytecomp.elc \ 68 $(lisp)/emacs-lisp/bytecomp.elc \
74 $(lisp)/emacs-lisp/byte-opt.elc \ 69 $(lisp)/emacs-lisp/byte-opt.elc \
75 $(lisp)/subr.elc \ 70 $(lisp)/emacs-lisp/autoload.elc
76 $(lisp)/progmodes/cc-mode.elc \
77 $(lisp)/progmodes/cc-vars.elc
78 71
79# The actual Emacs command run in the targets below. 72# The actual Emacs command run in the targets below.
80 73
@@ -145,7 +138,7 @@ autoloads: $(LOADDEFS) doit
145 echo Directories: $$wins; \ 138 echo Directories: $$wins; \
146 $(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins 139 $(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
147 140
148# This is required by the witness-emacs target in ../src/Makefile, so 141# This is required by the bootstrap-emacs target in ../src/Makefile, so
149# we know that if we have an emacs executable, we also have a subdirs.el. 142# we know that if we have an emacs executable, we also have a subdirs.el.
150$(lisp)/subdirs.el: 143$(lisp)/subdirs.el:
151 $(MAKE) $(MFLAGS) update-subdirs 144 $(MAKE) $(MFLAGS) update-subdirs
diff --git a/src/ChangeLog b/src/ChangeLog
index 52b7bf078f4..fc0a84128b3 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,12 @@
12008-06-22 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * Makefile.in (${lisp} ${SOME_MACHINE_LISP}, ../lisp/loaddefs.el):
4 Use $(BOOTSTRAPEMACS) rather than witness-emacs.
5 (bootstrap-emacs${EXEEXT}): Merge witness-emacs into it.
6 (witness-emacs): Remove.
7 (lisp, shortlisp): Move loaddefs.el earlier.
8 (mostlyclean): Forget about witness-emacs.
9
12008-06-22 Glenn Morris <rgm@gnu.org> 102008-06-22 Glenn Morris <rgm@gnu.org>
2 11
3 * Makefile.in (witness-emacs): Depend on temacs${EXEEXT}. 12 * Makefile.in (witness-emacs): Depend on temacs${EXEEXT}.
diff --git a/src/Makefile.in b/src/Makefile.in
index 8c85c2c4414..140f944e0d6 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -680,7 +680,11 @@ otherobj= $(termcapobj) lastfile.o $(mallocobj) $(widgetobj) $(LIBOBJS)
680 Files included conditionally here should be included (unconditionally) 680 Files included conditionally here should be included (unconditionally)
681 in SOME_MACHINE_LISP. */ 681 in SOME_MACHINE_LISP. */
682 682
683/* Please loaddefs.el first, so it gets generated first, since it is on
684 the critical path (relevant in parallel compilations). */
685
683lisp= \ 686lisp= \
687 ${lispsource}loaddefs.el \
684 ${lispsource}abbrev.elc \ 688 ${lispsource}abbrev.elc \
685 ${lispsource}buff-menu.elc \ 689 ${lispsource}buff-menu.elc \
686 ${lispsource}button.elc \ 690 ${lispsource}button.elc \
@@ -705,7 +709,6 @@ lisp= \
705 ${lispsource}isearch.elc \ 709 ${lispsource}isearch.elc \
706 ${lispsource}rfn-eshadow.elc \ 710 ${lispsource}rfn-eshadow.elc \
707 ${lispsource}loadup.el \ 711 ${lispsource}loadup.el \
708 ${lispsource}loaddefs.el \
709 ${lispsource}bindings.elc \ 712 ${lispsource}bindings.elc \
710 ${lispsource}emacs-lisp/map-ynp.elc \ 713 ${lispsource}emacs-lisp/map-ynp.elc \
711 ${lispsource}menu-bar.elc \ 714 ${lispsource}menu-bar.elc \
@@ -775,6 +778,7 @@ lisp= \
775 It need not contain the files that are loaded conditionally 778 It need not contain the files that are loaded conditionally
776 because SOME_MACHINE_LISP has those. */ 779 because SOME_MACHINE_LISP has those. */
777shortlisp= \ 780shortlisp= \
781 ../lisp/loaddefs.el \
778 ../lisp/abbrev.elc \ 782 ../lisp/abbrev.elc \
779 ../lisp/buff-menu.elc \ 783 ../lisp/buff-menu.elc \
780 ../lisp/button.elc \ 784 ../lisp/button.elc \
@@ -797,7 +801,6 @@ shortlisp= \
797 ../lisp/isearch.elc \ 801 ../lisp/isearch.elc \
798 ../lisp/rfn-eshadow.elc \ 802 ../lisp/rfn-eshadow.elc \
799 ../lisp/loadup.el \ 803 ../lisp/loadup.el \
800 ../lisp/loaddefs.el \
801 ../lisp/bindings.elc \ 804 ../lisp/bindings.elc \
802 ../lisp/emacs-lisp/map-ynp.elc \ 805 ../lisp/emacs-lisp/map-ynp.elc \
803 ../lisp/env.elc \ 806 ../lisp/env.elc \
@@ -1274,7 +1277,7 @@ ${emacsapp}Contents/MacOS/Emacs: emacs${EXEEXT}
1274mostlyclean: 1277mostlyclean:
1275 rm -f temacs${EXEEXT} prefix-args${EXEEXT} core *.core \#* *.o libXMenu11.a liblw.a 1278 rm -f temacs${EXEEXT} prefix-args${EXEEXT} core *.core \#* *.o libXMenu11.a liblw.a
1276 rm -f ../etc/DOC 1279 rm -f ../etc/DOC
1277 rm -f bootstrap-emacs${EXEEXT} emacs-${version}${EXEEXT} witness-emacs 1280 rm -f bootstrap-emacs${EXEEXT} emacs-${version}${EXEEXT}
1278 rm -f buildobj.lst 1281 rm -f buildobj.lst
1279clean: mostlyclean 1282clean: mostlyclean
1280 rm -f emacs-*.*.*${EXEEXT} emacs${EXEEXT} 1283 rm -f emacs-*.*.*${EXEEXT} emacs${EXEEXT}
@@ -1328,42 +1331,45 @@ tags: TAGS TAGS-LISP $(lwlibdir)TAGS
1328 To solve the circularity, we use 2 different Emacs executables, 1331 To solve the circularity, we use 2 different Emacs executables,
1329 "emacs" is the main target and "bootstrap-emacs" is the one used 1332 "emacs" is the main target and "bootstrap-emacs" is the one used
1330 to build the *.elc and loaddefs.el files. 1333 to build the *.elc and loaddefs.el files.
1331 To solve the freshness issue, we use a third file "witness-emacs" 1334 To solve the freshness issue, we used to use a third file "witness-emacs"
1332 which is used to witness the fact that there is a bootstrap-emacs 1335 which was used to witness the fact that there is a bootstrap-emacs
1333 executable. */ 1336 executable, and then have dependencies on witness-emacs rather than
1337 bootstrap-emacs, but that lead to problems in parallel builds (because
1338 witness-emacs needed to be free from dependencies (to avoid rebuilding
1339 it), so it was compiled in parallel, leading typically to having 2
1340 processes dumping bootstrap-emacs at the same time).
1341 So instead, we replace the witness-emacs dependencies by conditional
1342 bootstrap-dependencies (via ${BOOTSTRAPEMACS}). Of course, since we do
1343 not want to rely on GNU Make features, we have to rely on an external
1344 script to do the conditional part of the dependency
1345 (i.e. see the ${SUBDIR} rule ../Makefile.in). */
1334 1346
1335/* These suffix rules do not allow additional dependencies, sadly, so
1336 adding a bootstrap-emacs%{EXEEXT} dependency does not work --Stef */
1337.SUFFIXES: .elc .el 1347.SUFFIXES: .elc .el
1338 1348
1349/* These suffix rules do not allow additional dependencies, sadly, so
1350 instead of adding a $(BOOTSTRAPEMACS) dependency here, we add it
1351 separately below.
1352 With GNU Make, we would just say "%.el : %.elc $(BOOTSTRAPEMACS)" */
1339.el.elc: 1353.el.elc:
1340 @cd ../lisp; $(MAKE) $(MFLAGS) compile-onefile \ 1354 @cd ../lisp; $(MAKE) $(MFLAGS) compile-onefile \
1341 THEFILE=$< EMACS=../src/bootstrap-emacs${EXEEXT} 1355 THEFILE=$< EMACS=../src/bootstrap-emacs${EXEEXT}
1342 1356
1343/* Since the .el.elc rule cannot specify an extra dependency, we do it here. 1357/* Since the .el.elc rule cannot specify an extra dependency, we do it here. */
1344 The byte-compiler dependency is not necessary, but it substantially 1358${lisp} ${SOME_MACHINE_LISP}: $(BOOTSTRAPEMACS)
1345 speeds up byte-compilation of the other files.
1346 Of course, it also has the downside of forcing a recompilation of all
1347 those files whenever a file in $PRECOMP changes. */
1348${lisp} ${SOME_MACHINE_LISP}: witness-emacs
1349 1359
1350../lisp/loaddefs.el: witness-emacs 1360../lisp/loaddefs.el: $(BOOTSTRAPEMACS)
1351 cd ../lisp; $(MAKE) $(MFLAGS) autoloads EMACS=../src/bootstrap-emacs${EXEEXT} 1361 cd ../lisp; $(MAKE) $(MFLAGS) autoloads EMACS=../src/bootstrap-emacs${EXEEXT}
1352 1362
1353/* Dump an Emacs executable named bootstrap-emacs containing the 1363/* Dump an Emacs executable named bootstrap-emacs containing the
1354 files from loadup.el in source form. */ 1364 files from loadup.el in source form. */
1355 1365
1356bootstrap-emacs${EXEEXT}: temacs${EXEEXT} 1366bootstrap-emacs${EXEEXT}: temacs${EXEEXT}
1367 cd ../lisp; $(MAKE) $(MFLAGS) update-subdirs
1357#ifdef CANNOT_DUMP 1368#ifdef CANNOT_DUMP
1358 ln temacs${EXEEXT} bootstrap-emacs${EXEEXT} 1369 ln temacs${EXEEXT} bootstrap-emacs${EXEEXT}
1359#else 1370#else
1360 $(RUN_TEMACS) --batch --load loadup bootstrap 1371 $(RUN_TEMACS) --batch --load loadup bootstrap
1361 mv -f emacs${EXEEXT} bootstrap-emacs${EXEEXT} 1372 mv -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}
1362#endif /* ! defined (CANNOT_DUMP) */ 1373#endif /* ! defined (CANNOT_DUMP) */
1363
1364witness-emacs: temacs${EXEEXT}
1365 cd ../lisp; $(MAKE) $(MFLAGS) update-subdirs
1366 $(MAKE) $(MFLAGS) bootstrap-emacs${EXEEXT}
1367 touch witness-emacs
1368 @: Compile some files earlier to speed up further compilation. 1374 @: Compile some files earlier to speed up further compilation.
1369 cd ../lisp; $(MAKE) $(MFLAGS) compile-first EMACS=../src/bootstrap-emacs${EXEEXT} 1375 cd ../lisp; $(MAKE) $(MFLAGS) compile-first EMACS=../src/bootstrap-emacs${EXEEXT}