Commit | Line | Data |
---|---|---|
bbece175 GM |
1 | ### @configure_input@ |
2 | ||
ba318903 | 3 | # Copyright (C) 2000-2014 Free Software Foundation, Inc. |
b3ae7a0a GM |
4 | |
5 | # This file is part of GNU Emacs. | |
6 | ||
eb3fa2cf | 7 | # GNU Emacs is free software: you can redistribute it and/or modify |
b3ae7a0a | 8 | # it under the terms of the GNU General Public License as published by |
eb3fa2cf GM |
9 | # the Free Software Foundation, either version 3 of the License, or |
10 | # (at your option) any later version. | |
b3ae7a0a GM |
11 | |
12 | # GNU Emacs is distributed in the hope that it will be useful, | |
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | # GNU General Public License for more details. | |
16 | ||
17 | # You should have received a copy of the GNU General Public License | |
eb3fa2cf | 18 | # along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
7ec641b8 | 19 | |
50b13cde | 20 | SHELL = @SHELL@ |
261f3289 | 21 | |
82c3d67a AS |
22 | srcdir = @srcdir@ |
23 | top_srcdir = @top_srcdir@ | |
82c3d67a AS |
24 | lisp = $(srcdir) |
25 | VPATH = $(srcdir) | |
dce6b995 | 26 | |
5e00cfa5 EZ |
27 | # Empty for all systems except MinGW, where xargs needs an explicit |
28 | # limitation. | |
29 | XARGS_LIMIT = @XARGS_LIMIT@ | |
30 | ||
7ec641b8 GM |
31 | # You can specify a different executable on the make command line, |
32 | # e.g. "make EMACS=../src/emacs ...". | |
33 | ||
18ba6a33 GM |
34 | # We never change directory before running Emacs, so a relative file |
35 | # name is fine, and makes life easier. If we need to change | |
36 | # directory, we can use emacs --chdir. | |
37 | EMACS = ../src/emacs | |
7ec641b8 | 38 | |
198a7a97 | 39 | # Command line flags for Emacs. |
7ec641b8 | 40 | |
66b7b0fe | 41 | EMACSOPT = -batch --no-site-file --no-site-lisp |
7ec641b8 | 42 | |
fc5e09b3 | 43 | # Extra flags to pass to the byte compiler |
0118d12c | 44 | BYTE_COMPILE_EXTRA_FLAGS = |
fc5e09b3 DN |
45 | # For example to not display the undefined function warnings you can use this: |
46 | # BYTE_COMPILE_EXTRA_FLAGS = --eval '(setq byte-compile-warnings (quote (not unresolved)))' | |
47 | # The example above is just for developers, it should not be used by default. | |
48 | ||
2537fa5d | 49 | # Automatically generated autoload files, apart from lisp/loaddefs.el. |
e9906608 GM |
50 | # Note this includes only those files that need special rules to |
51 | # build; ie it does not need to include things created via | |
52 | # generated-autoload-file (eg calc/calc-loaddefs.el). | |
2537fa5d | 53 | LOADDEFS = $(lisp)/calendar/cal-loaddefs.el \ |
099659f9 GM |
54 | $(lisp)/calendar/diary-loaddefs.el \ |
55 | $(lisp)/calendar/hol-loaddefs.el \ | |
0f34aa77 MA |
56 | $(lisp)/mh-e/mh-loaddefs.el \ |
57 | $(lisp)/net/tramp-loaddefs.el | |
2537fa5d | 58 | |
6b61353c KH |
59 | # Elisp files auto-generated. |
60 | AUTOGENEL = loaddefs.el \ | |
2537fa5d | 61 | $(LOADDEFS) \ |
6b61353c KH |
62 | cus-load.el \ |
63 | finder-inf.el \ | |
64 | subdirs.el \ | |
aff6371e | 65 | emacs-lisp/cl-loaddefs.el \ |
6b6a6f9e | 66 | calc/calc-loaddefs.el \ |
5da62d41 GM |
67 | eshell/esh-groups.el \ |
68 | cedet/semantic/loaddefs.el \ | |
69 | cedet/ede/loaddefs.el \ | |
b040b60e GM |
70 | cedet/srecode/loaddefs.el \ |
71 | org/org-loaddefs.el | |
6b61353c | 72 | |
c0274801 GM |
73 | # Versioned files that are the value of someone's `generated-autoload-file'. |
74 | # Note that update_loaddefs parses this. | |
75 | AUTOGEN_VCS = \ | |
76 | ps-print.el \ | |
29996568 | 77 | obsolete/emulation/tpu-edt.el \ |
c0274801 GM |
78 | mail/rmail.el \ |
79 | dired.el \ | |
80 | ibuffer.el \ | |
81 | htmlfontify.el \ | |
41116c5a GM |
82 | emacs-lisp/eieio.el \ |
83 | textmodes/reftex.el | |
c0274801 | 84 | |
b9598260 SM |
85 | # Value of max-lisp-eval-depth when compiling initially. |
86 | # During bootstrapping the byte-compiler is run interpreted when compiling | |
87 | # itself, and uses more stack than usual. | |
88 | # | |
642b6d30 | 89 | BIG_STACK_DEPTH = 2200 |
b9598260 SM |
90 | BIG_STACK_OPTS = --eval "(setq max-lisp-eval-depth $(BIG_STACK_DEPTH))" |
91 | ||
1f41ee56 | 92 | # Set load-prefer-newer for the benefit of the non-bootstrappers. |
f952002e PE |
93 | BYTE_COMPILE_FLAGS = $(BIG_STACK_OPTS) \ |
94 | --eval '(setq load-prefer-newer t)' $(BYTE_COMPILE_EXTRA_FLAGS) | |
2ec42da9 | 95 | |
170a9e70 | 96 | # Files to compile before others during a bootstrap. This is done to |
36cec983 SM |
97 | # speed up the bootstrap process. They're ordered by size, so we use |
98 | # the slowest-compiler on the smallest file and move to larger files as the | |
99 | # compiler gets faster. `autoload.elc' comes last because it is not used by | |
100 | # the compiler (so its compilation does not speed up subsequent compilations), | |
101 | # it's only placed here so as to speed up generation of the loaddefs.el file. | |
d849789b | 102 | |
dce6b995 | 103 | COMPILE_FIRST = \ |
0c747cb1 | 104 | $(lisp)/emacs-lisp/macroexp.elc \ |
36cec983 SM |
105 | $(lisp)/emacs-lisp/cconv.elc \ |
106 | $(lisp)/emacs-lisp/byte-opt.elc \ | |
107 | $(lisp)/emacs-lisp/bytecomp.elc \ | |
b4945b95 | 108 | $(lisp)/emacs-lisp/autoload.elc |
d849789b | 109 | |
e088b01d GM |
110 | # Prevent any settings in the user environment causing problems. |
111 | unexport EMACSDATA EMACSDOC EMACSPATH | |
112 | ||
7ec641b8 | 113 | # The actual Emacs command run in the targets below. |
f952002e PE |
114 | # Prevent any setting of EMACSLOADPATH in user environment causing problems. |
115 | emacs = EMACSLOADPATH= '$(EMACS)' $(EMACSOPT) | |
7ec641b8 | 116 | |
80c382e5 | 117 | # Common command to find subdirectories |
0a8b75e2 GM |
118 | setwins=for file in `find . -type d -print`; do \ |
119 | case $$file in */.* ) ;; \ | |
f8ccce03 | 120 | *) wins="$$wins$${wins:+ }$$file" ;; \ |
f83a4f35 | 121 | esac; \ |
65de43ad | 122 | done |
8464af45 | 123 | |
10498e1c | 124 | # Find all subdirectories except `obsolete' and `term'. |
65de43ad | 125 | setwins_almost=for file in `find ${srcdir} -type d -print`; do \ |
6b4ac03e | 126 | case $$file in ${srcdir}*/obsolete | ${srcdir}*/term ) ;; \ |
cb6c95a3 | 127 | *) wins="$$wins$${wins:+ }$$file" ;; \ |
865e97c1 GM |
128 | esac; \ |
129 | done | |
80c382e5 | 130 | |
459d74ef GM |
131 | # Find all subdirectories except `obsolete', `term', and `leim' (and subdirs). |
132 | # We don't want the leim files listed as packages, especially | |
133 | # since many share basenames with files in language/. | |
134 | setwins_finder=for file in `find ${srcdir} -type d -print`; do \ | |
135 | case $$file in ${srcdir}*/obsolete | ${srcdir}*/term | ${srcdir}*/leim* ) ;; \ | |
136 | *) wins="$$wins$${wins:+ }$$file" ;; \ | |
137 | esac; \ | |
138 | done | |
139 | ||
65de43ad GM |
140 | # Find all subdirectories in which we might want to create subdirs.el. |
141 | setwins_for_subdirs=for file in `find ${srcdir} -type d -print`; do \ | |
cb6c95a3 GM |
142 | case $$file in \ |
143 | ${srcdir}*/cedet* | ${srcdir}*/leim* ) ;; \ | |
144 | *) wins="$$wins$${wins:+ }$$file" ;; \ | |
15120dec CY |
145 | esac; \ |
146 | done | |
147 | ||
7fae72ef | 148 | # cus-load and finder-inf are not explicitly requested by anything, so |
fc46d219 | 149 | # we add them here to make sure they get built. |
fd471993 | 150 | all: compile-main $(lisp)/cus-load.el $(lisp)/finder-inf.el |
49f6eb95 | 151 | |
80c382e5 SM |
152 | doit: |
153 | ||
0aee6912 PE |
154 | .PHONY: all doit custom-deps finder-data autoloads update-subdirs |
155 | ||
2fe51632 | 156 | # custom-deps and finder-data both used to scan _all_ the *.el files. |
7fae72ef GM |
157 | # This could lead to problems in parallel builds if automatically |
158 | # generated *.el files (eg loaddefs etc) were being changed at the same time. | |
2fe51632 GM |
159 | # One solution was to add autoloads as a prerequisite: |
160 | # http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-01/msg00469.html | |
161 | # http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-12/msg00171.html | |
7fae72ef | 162 | # However, this meant that running these targets modified loaddefs.el, |
2fe51632 GM |
163 | # every time (due to time-stamping). Calling these rules from |
164 | # bootstrap-after would modify loaddefs after src/emacs, resulting | |
165 | # in make install remaking src/emacs for no real reason: | |
166 | # http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg00311.html | |
7fae72ef GM |
167 | # Nowadays these commands don't scan automatically generated files, |
168 | # since they will never contain any useful information | |
169 | # (see finder-no-scan-regexp and custom-dependencies-no-scan-regexp). | |
fc46d219 SM |
170 | $(lisp)/cus-load.el: |
171 | $(MAKE) $(MFLAGS) custom-deps | |
172 | custom-deps: doit | |
65de43ad | 173 | $(setwins_almost); \ |
4746aeeb | 174 | echo Directories: $$wins; \ |
65de43ad | 175 | $(emacs) -l cus-dep \ |
3ef8e0d1 | 176 | --eval '(setq generated-custom-dependencies-file (unmsys--file-name "$(srcdir)/cus-load.el"))' \ |
65de43ad | 177 | -f custom-make-dependencies $$wins |
009368b9 | 178 | |
fc46d219 SM |
179 | $(lisp)/finder-inf.el: |
180 | $(MAKE) $(MFLAGS) finder-data | |
181 | finder-data: doit | |
459d74ef | 182 | $(setwins_finder); \ |
4746aeeb | 183 | echo Directories: $$wins; \ |
65de43ad | 184 | $(emacs) -l finder \ |
3ef8e0d1 | 185 | --eval '(setq generated-finder-keywords-file (unmsys--file-name "$(srcdir)/finder-inf.el"))' \ |
18ba6a33 | 186 | -f finder-compile-keywords-make-dist $$wins |
009368b9 | 187 | |
c0274801 | 188 | # The chmod +w is to handle env var CVSREAD=1. |
6a8b929e | 189 | # Use expand-file-name rather than $abs_scrdir so that Emacs does not |
ca7dd4cd | 190 | # get confused when it compares file-names for equality. |
cb6c95a3 GM |
191 | # |
192 | # Note that we set no-update-autoloads in _generated_ leim files. | |
193 | # If you want to allow autoloads in such files, remove that, | |
194 | # and make this depend on leim. | |
ee2e93e2 | 195 | autoloads: $(LOADDEFS) doit |
c0274801 | 196 | cd $(lisp) && chmod +w $(AUTOGEN_VCS) |
65de43ad | 197 | $(setwins_almost); \ |
4746aeeb | 198 | echo Directories: $$wins; \ |
65de43ad | 199 | $(emacs) -l autoload \ |
66bd25ab | 200 | --eval '(setq autoload-builtin-package-versions t)' \ |
ceac12b7 | 201 | --eval '(setq generated-autoload-file (expand-file-name (unmsys--file-name "$(srcdir)/loaddefs.el")))' \ |
66bd25ab | 202 | -f batch-update-autoloads $$wins |
6730259f GM |
203 | $(MAKE) $(MFLAGS) obsolete-autoloads |
204 | ||
205 | # The obsolete/ subdirectory is normally not scanned for autoloads. | |
206 | # Sometimes we still want to autoload something from that directory, | |
207 | # eg iswitchb. | |
208 | .PHONY: obsolete-autoloads | |
209 | obsolete-autoloads: ${lisp}/obsolete/*.el | |
210 | $(emacs) -l autoload \ | |
211 | --eval '(setq generate-autoload-cookie ";;;###obsolete-autoload")' \ | |
212 | --eval '(setq generated-autoload-file (expand-file-name (unmsys--file-name "$(srcdir)/loaddefs.el")))' \ | |
213 | -f batch-update-autoloads ${lisp}/obsolete | |
f83a4f35 | 214 | |
b4945b95 | 215 | # This is required by the bootstrap-emacs target in ../src/Makefile, so |
fc46d219 | 216 | # we know that if we have an emacs executable, we also have a subdirs.el. |
cd1b15b8 | 217 | $(lisp)/subdirs.el: |
cc953d27 | 218 | $(MAKE) $(MFLAGS) update-subdirs |
98b918b6 | 219 | update-subdirs: doit |
65de43ad | 220 | $(setwins_for_subdirs); \ |
98b918b6 | 221 | for file in $$wins; do \ |
65de43ad | 222 | $(srcdir)/../build-aux/update-subdirs $$file; \ |
98b918b6 RS |
223 | done; |
224 | ||
0aee6912 PE |
225 | .PHONY: updates bzr-update update-authors |
226 | ||
60198fc9 | 227 | # Some modes of make-dist use this. |
600bc46c | 228 | updates: update-subdirs autoloads finder-data custom-deps |
c48c3772 | 229 | |
60198fc9 GM |
230 | # This is useful after "bzr up"; but it doesn't do anything that a |
231 | # plain "make" at top-level doesn't. | |
a358bac2 GM |
232 | # The only difference between this and this directory's "all" rule |
233 | # is that this runs "autoloads" as well (because it uses "compile" | |
234 | # rather than "compile-main"). In a bootstrap, $(lisp) in src/Makefile | |
235 | # triggers this directory's autoloads rule. | |
211b896b | 236 | bzr-update: compile finder-data custom-deps |
38c1ba62 | 237 | |
fbb43902 GM |
238 | # Update the AUTHORS file. |
239 | ||
240 | update-authors: | |
82c3d67a | 241 | $(emacs) -l authors -f batch-update-authors $(top_srcdir)/etc/AUTHORS $(top_srcdir) |
fbb43902 | 242 | |
b0b9e592 GM |
243 | |
244 | ETAGS = ../lib-src/etags | |
245 | ||
c617f3d0 GM |
246 | lisptagsfiles1 = $(srcdir)/*.el |
247 | lisptagsfiles2 = $(srcdir)/*/*.el | |
248 | lisptagsfiles3 = $(srcdir)/*/*/*.el | |
249 | lisptagsfiles4 = $(srcdir)/*/*/*/*.el | |
b0b9e592 | 250 | |
bd9565cd EZ |
251 | ## The echo | sed | xargs is to stop the command line getting too long |
252 | ## on MS Windows, when the MSYS Bash passes it to a MinGW compiled | |
253 | ## etags. It might be better to use find in a similar way to | |
254 | ## compile-main. But maybe this is not even necessary any more now | |
255 | ## that this uses relative filenames. | |
c617f3d0 | 256 | TAGS: $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4) |
b0b9e592 GM |
257 | rm -f $@ |
258 | touch $@ | |
259 | echo $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4) | \ | |
c617f3d0 GM |
260 | sed -e 's,$(srcdir)/[^ ]*loaddefs[^ ]*,,g' \ |
261 | -e 's,$(srcdir)/ldefs-boot[^ ]*,,' \ | |
262 | -e 's,$(srcdir)/[^ ]*esh-groups.el[^ ]*,,' | \ | |
b0b9e592 GM |
263 | xargs $(XARGS_LIMIT) "$(ETAGS)" -a -o $@ |
264 | ||
7ec641b8 | 265 | |
768efd84 SM |
266 | # The src/Makefile.in has its own set of dependencies and when they decide |
267 | # that one Lisp file needs to be re-compiled, we had better recompile it as | |
268 | # well, otherwise every subsequent make will again call us, until we finally | |
269 | # end up deciding that yes, the file deserves recompilation. | |
270 | # One option is to try and reproduce exactly the same dependencies here as | |
271 | # we have in src/Makefile.in, but it turns out to be painful | |
272 | # (e.g. src/Makefile.in may have a dependency for ../lisp/foo.elc where we | |
273 | # only know of $(lisp)/foo.elc). So instead we provide a direct way for | |
274 | # src/Makefile.in to rebuild a particular Lisp file, no questions asked. | |
12464992 GM |
275 | # Use byte-compile-refresh-preloaded to try and work around some of |
276 | # the most common problems of not bootstrapping from a clean state. | |
0aee6912 | 277 | .PHONY: compile-onefile |
768efd84 SM |
278 | compile-onefile: |
279 | @echo Compiling $(THEFILE) | |
384ca163 SM |
280 | @# Use byte-compile-refresh-preloaded to try and work around some of |
281 | @# the most common bootstrapping problems. | |
7200d79c SM |
282 | @$(emacs) $(BYTE_COMPILE_FLAGS) \ |
283 | -l bytecomp -f byte-compile-refresh-preloaded \ | |
f43cb649 | 284 | -f batch-byte-compile $(THEFILE) |
768efd84 | 285 | |
ef7f89b2 GM |
286 | # Files MUST be compiled one by one. If we compile several files in a |
287 | # row (i.e., in the same instance of Emacs) we can't make sure that | |
938cbd34 LK |
288 | # the compilation environment is clean. We also set the load-path of |
289 | # the Emacs used for compilation to the current directory and its | |
290 | # subdirectories, to make sure require's and load's in the files being | |
291 | # compiled find the right files. | |
29ad9e56 | 292 | |
ef7f89b2 GM |
293 | .SUFFIXES: .elc .el |
294 | ||
295 | # An old-fashioned suffix rule, which, according to the GNU Make manual, | |
296 | # cannot have prerequisites. | |
ef7f89b2 GM |
297 | .el.elc: |
298 | @echo Compiling $< | |
d032d5e7 SM |
299 | @# The BIG_STACK_OPTS are only needed to byte-compile the byte-compiler |
300 | @# files, which is normally done in compile-first, but may also be | |
301 | @# recompiled via this rule. | |
2ec42da9 | 302 | @$(emacs) $(BYTE_COMPILE_FLAGS) \ |
f43cb649 | 303 | -f batch-byte-compile $< |
ef7f89b2 | 304 | |
111a9dff | 305 | .PHONY: compile-first compile-main compile compile-always |
ef7f89b2 | 306 | |
768efd84 | 307 | compile-first: $(COMPILE_FIRST) |
61b92c33 | 308 | |
111a9dff SM |
309 | # In `compile-main' we could directly do |
310 | # ... | xargs $(MAKE) $(MFLAGS) EMACS="$(EMACS)" | |
311 | # and it works, but it generates a lot of messages like | |
e43817c1 | 312 | # make[2]: gnus/gnus-mlspl.elc is up to date. |
111a9dff SM |
313 | # so instead, we use "xargs echo" to split the list of file into manageable |
314 | # chunks and then use an intermediate `compile-targets' target so the | |
315 | # actual targets (the .elc files) are not mentioned as targets on the | |
316 | # make command line. | |
317 | ||
318 | ||
319 | .PHONY: compile-targets | |
320 | # TARGETS is set dynamically in the recursive call from `compile-main'. | |
321 | compile-targets: $(TARGETS) | |
322 | ||
323 | # Compile all the Elisp files that need it. Beware: it approximates | |
324 | # `no-byte-compile', so watch out for false-positives! | |
f9b697dd | 325 | compile-main: leim semantic compile-clean |
74cf04fb | 326 | @(cd $(lisp) && $(setwins); \ |
111a9dff SM |
327 | els=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.el |g'`; \ |
328 | for el in $$els; do \ | |
329 | test -f $$el || continue; \ | |
330 | test ! -f $${el}c && GREP_OPTIONS= grep '^;.*no-byte-compile: t' $$el > /dev/null && continue; \ | |
331 | echo "$${el}c"; \ | |
5e00cfa5 | 332 | done | xargs $(XARGS_LIMIT) echo) | \ |
111a9dff SM |
333 | while read chunk; do \ |
334 | $(MAKE) $(MFLAGS) compile-targets EMACS="$(EMACS)" TARGETS="$$chunk"; \ | |
335 | done | |
ef7f89b2 | 336 | |
64cb11cc SM |
337 | .PHONY: compile-clean |
338 | # Erase left-over .elc files that do not have a corresponding .el file. | |
339 | compile-clean: | |
74cf04fb | 340 | @cd $(lisp) && $(setwins); \ |
64cb11cc | 341 | elcs=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.elc |g'`; \ |
290fe464 | 342 | for el in `echo $$elcs | sed -e 's/\.elc/\.el/g'`; do \ |
64cb11cc SM |
343 | if test -f "$$el" -o \! -f "$${el}c"; then :; else \ |
344 | echo rm "$${el}c"; \ | |
345 | rm "$${el}c"; \ | |
346 | fi \ | |
347 | done | |
348 | ||
f9b697dd | 349 | .PHONY: leim semantic |
cb6c95a3 GM |
350 | leim: |
351 | cd ../leim && $(MAKE) $(MFLAGS) all EMACS="$(EMACS)" | |
352 | ||
f9b697dd GM |
353 | # FIXME. Yuck. |
354 | semantic: | |
355 | case ${EMACS} in \ | |
356 | .*) EMACS="../${EMACS}" ;; \ | |
357 | *) EMACS="${EMACS}" ;; \ | |
358 | esac; \ | |
359 | cd ../admin/grammars && $(MAKE) $(MFLAGS) all EMACS="$${EMACS}" | |
360 | ||
ef7f89b2 GM |
361 | # Compile all Lisp files, but don't recompile those that are up to |
362 | # date. Some .el files don't get compiled because they set the | |
363 | # local variable no-byte-compile. | |
364 | # Calling make recursively because suffix rule cannot have prerequisites. | |
2c01ac6a GM |
365 | # Explicitly pass EMACS (sometimes ../src/bootstrap-emacs) to those |
366 | # sub-makes that run rules that use it, for the sake of some non-GNU makes. | |
fd471993 | 367 | compile: $(LOADDEFS) autoloads compile-first |
b8e3b0a9 | 368 | $(MAKE) $(MFLAGS) compile-main EMACS="$(EMACS)" |
2fe51632 | 369 | |
938cbd34 LK |
370 | # Compile all Lisp files. This is like `compile' but compiles files |
371 | # unconditionally. Some files don't actually get compiled because they | |
372 | # set the local variable no-byte-compile. | |
ef7f89b2 | 373 | compile-always: doit |
74cf04fb | 374 | cd $(lisp) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc |
b8e3b0a9 | 375 | $(MAKE) $(MFLAGS) compile EMACS="$(EMACS)" |
938cbd34 | 376 | |
74cf04fb | 377 | .PHONY: backup-compiled-files compile-after-backup |
fd471993 | 378 | |
a9b67cf4 GM |
379 | # Backup compiled Lisp files in elc.tar.gz. If that file already |
380 | # exists, make a backup of it. | |
381 | ||
382 | backup-compiled-files: | |
dce6b995 | 383 | -mv $(lisp)/elc.tar.gz $(lisp)/elc.tar.gz~ |
5da62d41 | 384 | -tar czf $(lisp)/elc.tar.gz $(lisp)/*.elc $(lisp)/*/*.elc $(lisp)/*/*/*.elc $(lisp)/*/*/*/*.elc |
a9b67cf4 GM |
385 | |
386 | # Compile Lisp files, but save old compiled files first. | |
387 | ||
61b92c33 | 388 | compile-after-backup: backup-compiled-files compile-always |
a9b67cf4 | 389 | |
50394322 GM |
390 | # This does the same job as the "compile" rule, but in a different way. |
391 | # Rather than spawning a separate Emacs instance to compile each file, | |
392 | # it uses the same Emacs instance to compile everything. | |
393 | # This is faster on a single core, since it avoids the overhead of | |
394 | # starting Emacs many times (it was 33% faster on a test with a | |
395 | # random 10% of the .el files needing recompilation). | |
396 | # Unlike compile, this is not parallelizable; so if you have more than | |
97671cbb | 397 | # one core and use make -j#, compile will be (much) faster. |
50394322 GM |
398 | # This rule also produces less accurate compilation warnings. |
399 | # The environment of later files is affected by definitions in | |
400 | # earlier ones, so it does not produce some warnings that it should. | |
401 | # It can also produces spurious warnings about "invalid byte code" if | |
402 | # files that use byte-compile-dynamic are updated. | |
403 | # There is no reason to use this rule unless you only have a single | |
404 | # core and CPU time is an issue. | |
0aee6912 | 405 | .PHONY: compile-one-process |
50394322 | 406 | compile-one-process: doit $(LOADDEFS) compile-first $(lisp)/progmodes/cc-mode.elc |
2ec42da9 SM |
407 | $(emacs) $(BYTE_COMPILE_FLAGS) \ |
408 | --eval "(batch-byte-recompile-directory 0)" $(lisp) | |
7ec641b8 | 409 | |
1eee3de4 | 410 | # Update MH-E internal autoloads. These are not to be confused with |
2537fa5d | 411 | # the autoloads for the MH-E entry points, which are already in loaddefs.el. |
e9906608 GM |
412 | MH_E_DIR = $(lisp)/mh-e |
413 | ## MH_E_SRC avoids a circular dependency warning for mh-loaddefs.el. | |
414 | MH_E_SRC = $(MH_E_DIR)/mh-acros.el $(MH_E_DIR)/mh-alias.el \ | |
415 | $(MH_E_DIR)/mh-buffers.el $(MH_E_DIR)/mh-compat.el \ | |
416 | $(MH_E_DIR)/mh-comp.el $(MH_E_DIR)/mh-e.el \ | |
417 | $(MH_E_DIR)/mh-folder.el $(MH_E_DIR)/mh-funcs.el \ | |
418 | $(MH_E_DIR)/mh-gnus.el $(MH_E_DIR)/mh-identity.el \ | |
419 | $(MH_E_DIR)/mh-inc.el $(MH_E_DIR)/mh-junk.el \ | |
420 | $(MH_E_DIR)/mh-letter.el $(MH_E_DIR)/mh-limit.el \ | |
421 | $(MH_E_DIR)/mh-mime.el $(MH_E_DIR)/mh-print.el \ | |
422 | $(MH_E_DIR)/mh-scan.el $(MH_E_DIR)/mh-search.el \ | |
423 | $(MH_E_DIR)/mh-seq.el $(MH_E_DIR)/mh-show.el \ | |
424 | $(MH_E_DIR)/mh-speed.el $(MH_E_DIR)/mh-thread.el \ | |
425 | $(MH_E_DIR)/mh-tool-bar.el $(MH_E_DIR)/mh-utils.el \ | |
426 | $(MH_E_DIR)/mh-xface.el | |
427 | ||
0aee6912 | 428 | .PHONY: mh-autoloads |
e9906608 | 429 | mh-autoloads: $(MH_E_DIR)/mh-loaddefs.el |
fc46d219 | 430 | $(MH_E_DIR)/mh-loaddefs.el: $(MH_E_SRC) |
2537fa5d | 431 | $(emacs) -l autoload \ |
a6f6840e | 432 | --eval "(setq generate-autoload-cookie \";;;###mh-autoload\")" \ |
6be0e22b | 433 | --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \ |
e9906608 GM |
434 | -f batch-update-autoloads $(MH_E_DIR) |
435 | ||
7a6ebb1a | 436 | # Update TRAMP internal autoloads. Maybe we could move tramp*.el into |
0f34aa77 MA |
437 | # an own subdirectory. OTOH, it does not hurt to keep them in |
438 | # lisp/net. | |
439 | TRAMP_DIR = $(lisp)/net | |
72cebfb7 MA |
440 | TRAMP_SRC = $(TRAMP_DIR)/tramp.el $(TRAMP_DIR)/tramp-adb.el \ |
441 | $(TRAMP_DIR)/tramp-cache.el $(TRAMP_DIR)/tramp-cmds.el \ | |
442 | $(TRAMP_DIR)/tramp-compat.el $(TRAMP_DIR)/tramp-ftp.el \ | |
443 | $(TRAMP_DIR)/tramp-gvfs.el $(TRAMP_DIR)/tramp-gw.el \ | |
444 | $(TRAMP_DIR)/tramp-sh.el $(TRAMP_DIR)/tramp-smb.el \ | |
445 | $(TRAMP_DIR)/tramp-uu.el $(TRAMP_DIR)/trampver.el | |
0f34aa77 MA |
446 | |
447 | $(TRAMP_DIR)/tramp-loaddefs.el: $(TRAMP_SRC) | |
448 | $(emacs) -l autoload \ | |
449 | --eval "(setq generate-autoload-cookie \";;;###tramp-autoload\")" \ | |
6be0e22b | 450 | --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \ |
0f34aa77 MA |
451 | -f batch-update-autoloads $(TRAMP_DIR) |
452 | ||
e9906608 GM |
453 | CAL_DIR = $(lisp)/calendar |
454 | ## Those files that may contain internal calendar autoload cookies. | |
455 | ## Avoids circular dependency warning for *-loaddefs.el. | |
456 | CAL_SRC = $(CAL_DIR)/cal-bahai.el $(CAL_DIR)/cal-china.el \ | |
457 | $(CAL_DIR)/cal-coptic.el $(CAL_DIR)/cal-dst.el \ | |
458 | $(CAL_DIR)/cal-french.el $(CAL_DIR)/cal-hebrew.el \ | |
459 | $(CAL_DIR)/cal-html.el $(CAL_DIR)/cal-islam.el \ | |
460 | $(CAL_DIR)/cal-iso.el $(CAL_DIR)/cal-julian.el \ | |
461 | $(CAL_DIR)/cal-mayan.el $(CAL_DIR)/cal-menu.el \ | |
462 | $(CAL_DIR)/cal-move.el $(CAL_DIR)/cal-persia.el \ | |
463 | $(CAL_DIR)/cal-tex.el $(CAL_DIR)/cal-x.el \ | |
464 | $(CAL_DIR)/calendar.el $(CAL_DIR)/diary-lib.el \ | |
465 | $(CAL_DIR)/holidays.el $(CAL_DIR)/lunar.el \ | |
466 | $(CAL_DIR)/solar.el | |
467 | ||
fc46d219 | 468 | $(CAL_DIR)/cal-loaddefs.el: $(CAL_SRC) |
2537fa5d GM |
469 | $(emacs) -l autoload \ |
470 | --eval "(setq generate-autoload-cookie \";;;###cal-autoload\")" \ | |
6be0e22b | 471 | --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \ |
e9906608 | 472 | -f batch-update-autoloads $(CAL_DIR) |
2537fa5d | 473 | |
fc46d219 | 474 | $(CAL_DIR)/diary-loaddefs.el: $(CAL_SRC) |
2537fa5d GM |
475 | $(emacs) -l autoload \ |
476 | --eval "(setq generate-autoload-cookie \";;;###diary-autoload\")" \ | |
6be0e22b | 477 | --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \ |
e9906608 | 478 | -f batch-update-autoloads $(CAL_DIR) |
2537fa5d | 479 | |
fc46d219 | 480 | $(CAL_DIR)/hol-loaddefs.el: $(CAL_SRC) |
2537fa5d GM |
481 | $(emacs) -l autoload \ |
482 | --eval "(setq generate-autoload-cookie \";;;###holiday-autoload\")" \ | |
6be0e22b | 483 | --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \ |
e9906608 | 484 | -f batch-update-autoloads $(CAL_DIR) |
2537fa5d | 485 | |
0aee6912 PE |
486 | .PHONY: bootstrap-clean distclean maintainer-clean |
487 | ||
fc46d219 | 488 | bootstrap-clean: |
74cf04fb | 489 | -cd $(lisp) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc $(AUTOGENEL) |
a9b67cf4 | 490 | |
b7bc82c5 | 491 | distclean: |
9d1c5fb6 | 492 | -rm -f ./Makefile $(lisp)/loaddefs.el~ |
b7bc82c5 SM |
493 | |
494 | maintainer-clean: distclean bootstrap-clean | |
c617f3d0 | 495 | rm -f TAGS |
43280888 | 496 | |
f772cd18 GM |
497 | .PHONY: check-declare |
498 | ||
499 | check-declare: | |
e43817c1 | 500 | $(emacs) -l check-declare --eval '(check-declare-directory "$(lisp)")' |
f772cd18 | 501 | |
4860b1b8 EZ |
502 | # Dependencies |
503 | ||
6014de84 GM |
504 | ## None of the following matters for bootstrap, which is the only way |
505 | ## to ensure a correct compilation of all lisp files. | |
506 | ## Manually specifying dependencies of a handful of lisp files, (and | |
507 | ## ones that don't change very often at that) seems pretty pointless | |
508 | ## to me. | |
509 | ||
510 | # http://debbugs.gnu.org/1004 | |
4860b1b8 EZ |
511 | # CC Mode uses a compile time macro system which causes a compile time |
512 | # dependency in cc-*.elc files on the macros in other cc-*.el and the | |
513 | # version string in cc-defs.el. | |
514 | $(lisp)/progmodes/cc-align.elc $(lisp)/progmodes/cc-awk.elc\ | |
515 | $(lisp)/progmodes/cc-cmds.elc $(lisp)/progmodes/cc-compat.elc\ | |
516 | $(lisp)/progmodes/cc-engine.elc $(lisp)/progmodes/cc-fonts.elc\ | |
517 | $(lisp)/progmodes/cc-langs.elc $(lisp)/progmodes/cc-menus.elc\ | |
518 | $(lisp)/progmodes/cc-mode.elc $(lisp)/progmodes/cc-styles.elc\ | |
1f35fda9 | 519 | $(lisp)/progmodes/cc-vars.elc: \ |
4860b1b8 EZ |
520 | $(lisp)/progmodes/cc-bytecomp.elc $(lisp)/progmodes/cc-defs.elc |
521 | ||
522 | $(lisp)/progmodes/cc-align.elc: \ | |
523 | $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc | |
524 | ||
525 | $(lisp)/progmodes/cc-cmds.elc: \ | |
526 | $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc | |
527 | ||
528 | $(lisp)/progmodes/cc-compat.elc: \ | |
529 | $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-styles.elc \ | |
530 | $(lisp)/progmodes/cc-engine.elc | |
531 | ||
532 | $(lisp)/progmodes/cc-defs.elc: $(lisp)/progmodes/cc-bytecomp.elc \ | |
533 | $(lisp)/emacs-lisp/cl.elc $(lisp)/emacs-lisp/regexp-opt.elc | |
534 | ||
535 | $(lisp)/progmodes/cc-engine.elc: $(lisp)/progmodes/cc-langs.elc \ | |
536 | $(lisp)/progmodes/cc-vars.elc | |
537 | ||
538 | $(lisp)/progmodes/cc-fonts.elc: $(lisp)/progmodes/cc-langs.elc \ | |
539 | $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc \ | |
540 | $(lisp)/font-lock.elc | |
541 | ||
542 | $(lisp)/progmodes/cc-langs.elc: $(lisp)/progmodes/cc-vars.elc \ | |
543 | $(lisp)/emacs-lisp/cl.elc | |
544 | ||
545 | $(lisp)/progmodes/cc-mode.elc: $(lisp)/progmodes/cc-langs.elc \ | |
546 | $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc \ | |
547 | $(lisp)/progmodes/cc-styles.elc $(lisp)/progmodes/cc-cmds.elc \ | |
548 | $(lisp)/progmodes/cc-align.elc $(lisp)/progmodes/cc-menus.elc | |
549 | ||
550 | $(lisp)/progmodes/cc-styles.elc: $(lisp)/progmodes/cc-vars.elc \ | |
551 | $(lisp)/progmodes/cc-align.elc | |
552 | ||
4860b1b8 | 553 | $(lisp)/progmodes/cc-vars.elc: $(lisp)/custom.elc $(lisp)/widget.elc |
2c65e87c | 554 | |
7ec641b8 | 555 | # Makefile ends here. |