summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2015-05-16 17:52:27 -0700
committerGlenn Morris <rgm@gnu.org>2015-05-16 17:52:27 -0700
commit46ea93792da1db916305d50272c6465a6dde7c25 (patch)
tree8c242b303c11d05c2693f381b1c2a9ed44650667
parent576fba5f58dd61163cf92a0c3f93859e047ecefd (diff)
* src/lisp.mk: Remove from repository and generate at build-time.
* src/Makefile.in (lisp.mk): New rule to generate from loadup.el. (shortlisp_filter): New variable. (emacs$(EXEEXT), $(etc)/DOC): Depend on lisp.mk. (distclean): Remove lisp.mk. * Makefile.in ($(MAKEFILE_NAME)): No longer depend on src/lisp.mk. * lisp/loadup.el: Tweak layout to make it easier to parse. * make-dist: Do not distribute src/lisp.mk.
-rw-r--r--.gitignore1
-rw-r--r--Makefile.in2
-rw-r--r--lisp/loadup.el36
-rwxr-xr-xmake-dist2
-rw-r--r--src/Makefile.in38
-rw-r--r--src/lisp.mk168
6 files changed, 55 insertions, 192 deletions
diff --git a/.gitignore b/.gitignore
index 4e526beedc..618249c8de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -76,6 +76,7 @@ lib/unistd.h
lib/warn-on-use.h
src/buildobj.h
src/globals.h
+src/lisp.mk
# Lisp-level sources built by 'make'.
*cus-load.el
diff --git a/Makefile.in b/Makefile.in
index a02f0749d3..eec6d31352 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -413,7 +413,7 @@ blessmail: Makefile src
# etc. to be built without running into similar recursion problems.
MAKEFILE_NAME = Makefile
$(MAKEFILE_NAME): config.status $(srcdir)/src/config.in \
- $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN) $(srcdir)/src/lisp.mk
+ $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN)
MAKE='$(MAKE)' ./config.status
# Don't erase these files if make is interrupted while refreshing them.
diff --git a/lisp/loadup.el b/lisp/loadup.el
index b69005f0c0..84fa327050 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -26,20 +26,24 @@
;; This is loaded into a bare Emacs to make a dumpable one.
-;; If you add/remove Lisp files to be loaded here, consider the
-;; following issues:
+;; If you add a file to be loaded here, keep the following points in mind:
-;; i) Any file loaded on any platform should appear in src/lisp.mk.
-;; Use the .el or .elc version as appropriate.
+;; i) If the file is no-byte-compile, explicitly load the .el version.
+;; Such files should (where possible) obey the doc-string conventions
+;; expected by make-docfile. They should also be added to the
+;; uncompiled[] list in make-docfile.c.
+;; ii) If the file is dumped with Emacs (on any platform), put the
+;; load statement at the start of a line (leading whitespace is ok).
+
+;; iii) If the file is _not_ dumped with Emacs, make sure the load
+;; statement is _not_ at the start of a line. See pcase for an example.
+
+;; These rules are so that src/Makefile can construct lisp.mk automatically.
;; This ensures both that the Lisp files are compiled (if necessary)
;; before the emacs executable is dumped, and that they are passed to
;; make-docfile. (Any that are not processed for DOC will not have
-;; doc strings in the dumped Emacs.) Because of this:
-
-;; ii) If the file is loaded uncompiled, it should (where possible)
-;; obey the doc-string conventions expected by make-docfile. It
-;; should also be added to the uncompiled[] list in make-docfile.c.
+;; doc strings in the dumped Emacs.)
;;; Code:
@@ -117,8 +121,7 @@
;; Since loaddefs is not yet loaded, macroexp's uses of pcase will simply
;; fail until pcase is explicitly loaded. This also means that we have to
;; disable eager macro-expansion while loading pcase.
- (let ((macroexp--pending-eager-loads '(skip)))
- (load "emacs-lisp/pcase"))
+ (let ((macroexp--pending-eager-loads '(skip))) (load "emacs-lisp/pcase"))
;; Re-load macroexp so as to eagerly macro-expand its uses of pcase.
(let ((max-lisp-eval-depth (* 2 max-lisp-eval-depth)))
(load "emacs-lisp/macroexp")))
@@ -139,9 +142,7 @@
;; should be updated by overwriting it with an up-to-date copy of
;; loaddefs.el that is uncorrupted by local changes.
;; autogen/update_autogen can be used to periodically update ldefs-boot.
-(condition-case nil
- ;; Don't get confused if someone compiled this by mistake.
- (load "loaddefs.el")
+(condition-case nil (load "loaddefs.el")
;; In case loaddefs hasn't been generated yet.
(file-error (load "ldefs-boot.el")))
@@ -178,8 +179,8 @@
(load "language/romanian")
(load "language/greek")
(load "language/hebrew")
-(load "international/cp51932")
-(load "international/eucjp-ms")
+(load "international/cp51932.el")
+(load "international/eucjp-ms.el")
(load "language/japanese")
(load "language/korean")
(load "language/lao")
@@ -289,7 +290,8 @@
(load "electric")
(load "emacs-lisp/eldoc")
(load "cus-start") ;Late to reduce customize-rogue (needs loaddefs.el anyway)
-(if (not (eq system-type 'ms-dos)) (load "tooltip"))
+(if (not (eq system-type 'ms-dos))
+ (load "tooltip"))
;; This file doesn't exist when building a development version of Emacs
;; from the repository. It is generated just after temacs is built.
diff --git a/make-dist b/make-dist
index bc5874e6b7..6bf01ffa11 100755
--- a/make-dist
+++ b/make-dist
@@ -375,7 +375,7 @@ echo "Making links to 'src'"
echo " (It is ok if ln fails in some cases.)"
ln [a-zA-Z]*.[chm] ../${tempdir}/src
ln [a-zA-Z]*.in ../${tempdir}/src
- ln [a-zA-Z]*.mk ../${tempdir}/src
+ ln deps.mk ../${tempdir}/src
ln README ChangeLog.*[0-9] ../${tempdir}/src
ln makefile.w32-in ../${tempdir}/src
ln .gdbinit .dbxinit ../${tempdir}/src
diff --git a/src/Makefile.in b/src/Makefile.in
index f6fa03a8df..57417fcb3f 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -418,8 +418,36 @@ otherobj= $(TERMCAP_OBJ) $(PRE_ALLOC_OBJ) $(GMALLOC_OBJ) $(RALLOC_OBJ) \
FIRSTFILE_OBJ=@FIRSTFILE_OBJ@
ALLOBJS = $(FIRSTFILE_OBJ) $(VMLIMIT_OBJ) $(obj) $(otherobj)
-include $(srcdir)/lisp.mk
-
+## This is the list of all Lisp files that might be loaded into the
+## dumped Emacs. Some of them are not loaded on all platforms, but
+## the DOC file on every platform uses them (because the DOC file is
+## supposed to be platform-independent).
+## Note that this list should not include lisp files which might not
+## be present, like site-load.el and site-init.el; this makefile
+## expects them all to be either present or buildable.
+##
+## To generate this list from loadup.el, we can either:
+## 1) Extract everything matching (load "..."), in which case
+## we need to add charprop.el by hand; or
+## 2) Extract everything matching (load "...", in which case
+## we need to remove leim-list, site-init, and site-load by hand.
+## There's not much to choose between these two approaches,
+## but the second one seems like it could be more future-proof.
+shortlisp =
+lisp.mk: $(lispsource)/loadup.el
+ @rm -f $@
+ ${AM_V_GEN}( echo "shortlisp = \\"; \
+ sed -n 's/^[ \t]*(load "\([^"]*\)".*/\1/p' $< | \
+ sed -e 's/$$/.elc \\/' -e 's/\.el\.elc/.el/'; \
+ echo "" ) > $@
+
+-include lisp.mk
+shortlisp_filter = leim/leim-list.el site-load.elc site-init.elc
+shortlisp := $(filter-out ${shortlisp_filter},${shortlisp})
+## Place loaddefs.el first, so it gets generated first, since it is on
+## the critical path (relevant in parallel compilations).
+## We don't really need to sort, but may as well use it to remove duplicates.
+shortlisp := loaddefs.el loadup.el $(sort ${shortlisp})
lisp = $(addprefix ${lispsource}/,${shortlisp})
## Construct full set of libraries to be linked.
@@ -454,7 +482,7 @@ $(srcdir)/macuvs.h $(lispsource)/international/charprop.el: \
## since not all pieces are used on all platforms. But DOC depends
## on all of $lisp, and emacs depends on DOC, so it is ok to use $lisp here.
emacs$(EXEEXT): temacs$(EXEEXT) \
- $(etc)/DOC $(lisp) $(leimdir)/leim-list.el \
+ lisp.mk $(etc)/DOC $(lisp) $(leimdir)/leim-list.el \
$(lispsource)/international/charprop.el
ifeq ($(CANNOT_DUMP),yes)
ln -f temacs$(EXEEXT) $@
@@ -475,7 +503,7 @@ endif
## for the first time, this prevents any variation between configurations
## in the contents of the DOC file.
##
-$(etc)/DOC: $(libsrc)/make-docfile$(EXEEXT) $(obj) $(lisp)
+$(etc)/DOC: lisp.mk $(libsrc)/make-docfile$(EXEEXT) $(obj) $(lisp)
$(AM_V_GEN)$(MKDIR_P) $(etc)
-$(AM_V_at)rm -f $(etc)/DOC
$(AM_V_at)$(libsrc)/make-docfile -d $(srcdir) \
@@ -581,7 +609,7 @@ bootstrap-clean: clean
fi
distclean: bootstrap-clean
- rm -f Makefile
+ rm -f Makefile lisp.mk
maintainer-clean: distclean
rm -f TAGS
diff --git a/src/lisp.mk b/src/lisp.mk
deleted file mode 100644
index 32882d1ed3..0000000000
--- a/src/lisp.mk
+++ /dev/null
@@ -1,168 +0,0 @@
-### lisp.mk --- src/Makefile fragment for GNU Emacs
-
-## Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2015 Free Software
-## Foundation, Inc.
-
-## This file is part of GNU Emacs.
-
-## GNU Emacs 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 3 of the License, or
-## (at your option) any later version.
-
-## GNU Emacs 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.
-
-## You should have received a copy of the GNU General Public License
-## along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-### Commentary:
-
-## This is the list of all Lisp files that might be loaded into the
-## dumped Emacs. Some of them are not loaded on all platforms, but
-## the DOC file on every platform uses them (because the DOC file is
-## supposed to be platform-independent).
-## It is arranged like this because it is easier to generate it
-## semi-mechanically from loadup.el this way.
-## Eg something like:
-## sed -e 's/"[ )].*//' -n -e '/(load "/ s/.*load "//p' loadup.el | \
-## grep -vE 'site-|ldefs-boot'
-## minus any duplicates.
-## Note that you can generally just add a ".elc" extension to every file
-## that does not have an explicit .el extension, but beware of any
-## no-byte-compile ones.
-
-## Note that this list should not include lisp files which might not
-## be present, like site-load.el and site-init.el; this makefile
-## expects them all to be either present or buildable.
-
-## Place loaddefs.el first, so it gets generated first, since it is on
-## the critical path (relevant in parallel compilations).
-
-### Code:
-
-shortlisp = \
- loaddefs.el \
- loadup.el \
- emacs-lisp/byte-run.elc \
- emacs-lisp/backquote.elc \
- subr.elc \
- version.elc \
- widget.elc \
- custom.elc \
- emacs-lisp/map-ynp.elc \
- cus-start.elc \
- international/mule.elc \
- international/mule-conf.elc \
- env.elc \
- format.elc \
- bindings.elc \
- files.elc \
- emacs-lisp/macroexp.elc \
- cus-face.elc \
- faces.elc \
- button.elc \
- startup.elc \
- emacs-lisp/cl-preloaded.elc \
- emacs-lisp/nadvice.elc \
- minibuffer.elc \
- abbrev.elc \
- simple.elc \
- help.elc \
- jka-cmpr-hook.elc \
- epa-hook.elc \
- international/mule-cmds.elc \
- case-table.elc \
- international/characters.elc \
- composite.elc \
- international/charprop.el \
- language/chinese.elc \
- language/cyrillic.elc \
- language/indian.elc \
- language/sinhala.elc \
- language/english.elc \
- language/ethiopic.elc \
- language/european.elc \
- language/czech.elc \
- language/slovak.elc \
- language/romanian.elc \
- language/greek.elc \
- language/hebrew.elc \
- international/cp51932.el \
- international/eucjp-ms.el \
- language/japanese.elc \
- language/korean.elc \
- language/lao.elc \
- language/tai-viet.elc \
- language/thai.elc \
- language/tibetan.elc \
- language/vietnamese.elc \
- language/misc-lang.elc \
- language/utf-8-lang.elc \
- language/georgian.elc \
- language/khmer.elc \
- language/burmese.elc \
- language/cham.elc \
- indent.elc \
- window.elc \
- emacs-lisp/cl-generic.elc \
- frame.elc \
- term/tty-colors.elc \
- font-core.elc \
- facemenu.elc \
- emacs-lisp/syntax.elc \
- font-lock.elc \
- jit-lock.elc \
- mouse.elc \
- scroll-bar.elc \
- select.elc \
- emacs-lisp/timer.elc \
- isearch.elc \
- rfn-eshadow.elc \
- menu-bar.elc \
- emacs-lisp/lisp.elc \
- textmodes/page.elc \
- register.elc \
- textmodes/paragraphs.elc \
- progmodes/prog-mode.elc \
- emacs-lisp/lisp-mode.elc \
- progmodes/elisp-mode.elc \
- textmodes/text-mode.elc \
- textmodes/fill.elc \
- newcomment.elc \
- replace.elc \
- emacs-lisp/tabulated-list.elc \
- buff-menu.elc \
- fringe.elc \
- emacs-lisp/regexp-opt.elc \
- image.elc \
- international/fontset.elc \
- dnd.elc \
- tool-bar.elc \
- dynamic-setting.elc \
- x-dnd.elc \
- term/common-win.elc \
- term/x-win.elc \
- w32-vars.elc \
- term/w32-win.elc \
- ls-lisp.elc \
- disp-table.elc \
- dos-w32.elc \
- w32-fns.elc \
- dos-fns.elc \
- dos-vars.elc \
- term/pc-win.elc \
- term/internal.elc \
- term/ns-win.elc \
- mwheel.elc \
- emacs-lisp/float-sup.elc \
- vc/vc-hooks.elc \
- vc/ediff-hook.elc \
- electric.elc \
- emacs-lisp/eldoc.elc \
- uniquify.elc \
- tooltip.elc
-
-### lisp.mk ends here