mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-23 01:44:52 +01:00
68720286eb
Previously, we simply byte compiled each Elisp source file independently. This is actually the wrong thing to do and can lead to issues with macros and performance issues with substitutions because 1) when the byte compiler encounters a (require 'x) form, it will load x.elc in preference to x.el, even if x.el is newer, and as a result may load old macro and substitution definitions and 2) if we update a macro or substitution definition in one file, we currently won't re-compile other files that depend on the file containing the definition. This patch addresses these problems by computing make dependency rules from the (require 'x) forms in the Elisp source files, which we inject into make's dependency database.
58 lines
1.6 KiB
Makefile
58 lines
1.6 KiB
Makefile
# -*- makefile -*-
|
|
|
|
dir := emacs
|
|
emacs_sources := \
|
|
$(dir)/notmuch-lib.el \
|
|
$(dir)/notmuch.el \
|
|
$(dir)/notmuch-query.el \
|
|
$(dir)/notmuch-show.el \
|
|
$(dir)/notmuch-wash.el \
|
|
$(dir)/notmuch-hello.el \
|
|
$(dir)/notmuch-mua.el \
|
|
$(dir)/notmuch-address.el \
|
|
$(dir)/notmuch-maildir-fcc.el \
|
|
$(dir)/notmuch-message.el \
|
|
$(dir)/notmuch-crypto.el \
|
|
$(dir)/notmuch-tag.el \
|
|
$(dir)/coolj.el \
|
|
$(dir)/notmuch-print.el
|
|
|
|
emacs_images := \
|
|
$(srcdir)/$(dir)/notmuch-logo.png
|
|
|
|
emacs_bytecode = $(emacs_sources:.el=.elc)
|
|
|
|
# Because of defmacro's and defsubst's, we have to account for load
|
|
# dependencies between Elisp files when byte compiling. Otherwise,
|
|
# the byte compiler may load an old .elc file when processing a
|
|
# "require" or we may fail to rebuild a .elc that depended on a macro
|
|
# from an updated file.
|
|
$(dir)/.eldeps: $(dir)/Makefile.local $(dir)/make-deps.el $(emacs_sources)
|
|
$(call quiet,EMACS) --directory emacs -batch -l make-deps.el \
|
|
-f batch-make-deps $(emacs_sources) > $@.tmp && \
|
|
(cmp -s $@.tmp $@ || mv $@.tmp $@)
|
|
-include $(dir)/.eldeps
|
|
CLEAN+=$(dir)/.eldeps $(dir)/.eldeps.tmp
|
|
|
|
%.elc: %.el $(global_deps)
|
|
$(call quiet,EMACS) --directory emacs -batch -f batch-byte-compile $<
|
|
|
|
ifeq ($(WITH_EMACS),1)
|
|
ifeq ($(HAVE_EMACS),1)
|
|
all: $(emacs_bytecode)
|
|
endif
|
|
|
|
install: install-emacs
|
|
endif
|
|
|
|
.PHONY: install-emacs
|
|
install-emacs:
|
|
mkdir -p "$(DESTDIR)$(emacslispdir)"
|
|
install -m0644 $(emacs_sources) "$(DESTDIR)$(emacslispdir)"
|
|
ifeq ($(HAVE_EMACS),1)
|
|
install -m0644 $(emacs_bytecode) "$(DESTDIR)$(emacslispdir)"
|
|
endif
|
|
mkdir -p "$(DESTDIR)$(emacsetcdir)"
|
|
install -m0644 $(emacs_images) "$(DESTDIR)$(emacsetcdir)"
|
|
|
|
CLEAN := $(CLEAN) $(emacs_bytecode)
|