Makefile.in 20.4 KB
Newer Older
1 2
### @configure_input@

3
# Copyright (C) 2000-2013 Free Software Foundation, Inc.
Gerd Moellmann's avatar
Gerd Moellmann committed
4 5 6

# This file is part of GNU Emacs.

7
# GNU Emacs is free software: you can redistribute it and/or modify
Gerd Moellmann's avatar
Gerd Moellmann committed
8
# it under the terms of the GNU General Public License as published by
9 10
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
Gerd Moellmann's avatar
Gerd Moellmann committed
11 12 13 14 15 16 17

# 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
18
# along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
19

20
SHELL = @SHELL@
21

22
srcdir = @srcdir@
23
abs_srcdir = @abs_srcdir@
24 25
top_srcdir = @top_srcdir@
abs_top_builddir = @abs_top_builddir@
26
abs_lisp = $(abs_srcdir)
27 28
lisp = $(srcdir)
VPATH = $(srcdir)
Gerd Moellmann's avatar
Gerd Moellmann committed
29

30 31 32 33
# Empty for all systems except MinGW, where xargs needs an explicit
# limitation.
XARGS_LIMIT = @XARGS_LIMIT@

34 35 36
# You can specify a different executable on the make command line,
# e.g. "make EMACS=../src/emacs ...".

37 38
# We sometimes change directory before running Emacs (typically when
# building out-of-tree, we chdir to the source directory), so we need
Eli Zaretskii's avatar
Eli Zaretskii committed
39
# to use an absolute file name.
40
EMACS = ${abs_top_builddir}/src/emacs
41

42
# Command line flags for Emacs.
43

44
EMACSOPT = -batch --no-site-file --no-site-lisp
45

46
# Extra flags to pass to the byte compiler
47
BYTE_COMPILE_EXTRA_FLAGS =
48 49 50 51
# For example to not display the undefined function warnings you can use this:
# BYTE_COMPILE_EXTRA_FLAGS = --eval '(setq byte-compile-warnings (quote (not unresolved)))'
# The example above is just for developers, it should not be used by default.

Glenn Morris's avatar
Glenn Morris committed
52
# Automatically generated autoload files, apart from lisp/loaddefs.el.
Glenn Morris's avatar
Glenn Morris committed
53 54 55
# Note this includes only those files that need special rules to
# build; ie it does not need to include things created via
# generated-autoload-file (eg calc/calc-loaddefs.el).
Glenn Morris's avatar
Glenn Morris committed
56
LOADDEFS = $(lisp)/calendar/cal-loaddefs.el \
Glenn Morris's avatar
Glenn Morris committed
57 58
	$(lisp)/calendar/diary-loaddefs.el \
	$(lisp)/calendar/hol-loaddefs.el \
59 60
	$(lisp)/mh-e/mh-loaddefs.el \
	$(lisp)/net/tramp-loaddefs.el
Glenn Morris's avatar
Glenn Morris committed
61

Kenichi Handa's avatar
Kenichi Handa committed
62 63
# Elisp files auto-generated.
AUTOGENEL = loaddefs.el \
Glenn Morris's avatar
Glenn Morris committed
64
	$(LOADDEFS) \
Kenichi Handa's avatar
Kenichi Handa committed
65 66 67
	cus-load.el \
	finder-inf.el \
	subdirs.el \
68
	emacs-lisp/cl-loaddefs.el \
69
	calc/calc-loaddefs.el \
Glenn Morris's avatar
Glenn Morris committed
70 71 72
	eshell/esh-groups.el \
	cedet/semantic/loaddefs.el \
	cedet/ede/loaddefs.el \
73 74
	cedet/srecode/loaddefs.el \
	org/org-loaddefs.el
Kenichi Handa's avatar
Kenichi Handa committed
75

76 77 78 79 80 81 82 83 84 85 86
# Versioned files that are the value of someone's `generated-autoload-file'.
# Note that update_loaddefs parses this.
AUTOGEN_VCS = \
	ps-print.el \
	emulation/tpu-edt.el \
	mail/rmail.el \
	dired.el \
	ibuffer.el \
	htmlfontify.el \
	emacs-lisp/eieio.el

87 88 89 90
# Value of max-lisp-eval-depth when compiling initially.
# During bootstrapping the byte-compiler is run interpreted when compiling
# itself, and uses more stack than usual.
#
91
BIG_STACK_DEPTH = 2200
92 93
BIG_STACK_OPTS = --eval "(setq max-lisp-eval-depth $(BIG_STACK_DEPTH))"

94 95
BYTE_COMPILE_FLAGS = $(BIG_STACK_OPTS) $(BYTE_COMPILE_EXTRA_FLAGS)

96
# Files to compile before others during a bootstrap.  This is done to
Stefan Monnier's avatar
Stefan Monnier committed
97 98 99 100 101
# speed up the bootstrap process.  They're ordered by size, so we use
# the slowest-compiler on the smallest file and move to larger files as the
# compiler gets faster.  `autoload.elc' comes last because it is not used by
# the compiler (so its compilation does not speed up subsequent compilations),
# it's only placed here so as to speed up generation of the loaddefs.el file.
Gerd Moellmann's avatar
Gerd Moellmann committed
102

Gerd Moellmann's avatar
Gerd Moellmann committed
103
COMPILE_FIRST = \
Stefan Monnier's avatar
Stefan Monnier committed
104
	$(lisp)/emacs-lisp/macroexp.elc \
Stefan Monnier's avatar
Stefan Monnier committed
105 106 107
	$(lisp)/emacs-lisp/cconv.elc    \
	$(lisp)/emacs-lisp/byte-opt.elc \
	$(lisp)/emacs-lisp/bytecomp.elc \
108
	$(lisp)/emacs-lisp/autoload.elc
Gerd Moellmann's avatar
Gerd Moellmann committed
109

110 111
# The actual Emacs command run in the targets below.

112
emacs = EMACSLOADPATH="$(abs_lisp)" LC_ALL=C "$(EMACS)" $(EMACSOPT)
113

114
# Common command to find subdirectories
115
setwins=subdirs=`find . -type d -print`; \
116
	for file in $$subdirs; do \
117
	   case $$file in */.* | */.*/* | */=* ) ;; \
118
		*) wins="$$wins$${wins:+ }$$file" ;; \
119
	   esac; \
120
        done
121

122
# Find all subdirectories except `obsolete' and `term'.
123
setwins_almost=subdirs=`find . -type d -print`; \
124
	for file in $$subdirs; do \
125
	   case $$file in */.* | */.*/* | */=* | */obsolete | */term ) ;; \
126
		*) wins="$$wins$${wins:+ }$$file" ;; \
127 128
	   esac; \
        done
129

130
# Find all subdirectories in which we might want to create subdirs.el
131
setwins_for_subdirs=subdirs=`find . -type d -print`; \
132
	for file in $$subdirs; do \
133
	   case $$file in */.* | */.*/* | */=* | */cedet* ) ;; \
134
		*) wins="$$wins$${wins:+ }$$file" ;; \
135 136 137
	   esac; \
        done

Glenn Morris's avatar
Glenn Morris committed
138
# cus-load and finder-inf are not explicitly requested by anything, so
139
# we add them here to make sure they get built.
140
all: compile-main $(lisp)/cus-load.el $(lisp)/finder-inf.el
141

142 143
doit:

144 145
.PHONY: all doit custom-deps finder-data autoloads update-subdirs

146
# custom-deps and finder-data both used to scan _all_ the *.el files.
Glenn Morris's avatar
Glenn Morris committed
147 148
# This could lead to problems in parallel builds if automatically
# generated *.el files (eg loaddefs etc) were being changed at the same time.
149 150 151
# One solution was to add autoloads as a prerequisite:
# http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-01/msg00469.html
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-12/msg00171.html
Glenn Morris's avatar
Glenn Morris committed
152
# However, this meant that running these targets modified loaddefs.el,
153 154 155 156
# every time (due to time-stamping).  Calling these rules from
# bootstrap-after would modify loaddefs after src/emacs, resulting
# in make install remaking src/emacs for no real reason:
# http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg00311.html
Glenn Morris's avatar
Glenn Morris committed
157 158 159
# Nowadays these commands don't scan automatically generated files,
# since they will never contain any useful information
# (see finder-no-scan-regexp and custom-dependencies-no-scan-regexp).
160 161 162
$(lisp)/cus-load.el:
	$(MAKE) $(MFLAGS) custom-deps
custom-deps: doit
Glenn Morris's avatar
Glenn Morris committed
163
	cd $(lisp) && $(setwins_almost); \
164
	echo Directories: $$wins; \
165
	$(emacs) -l cus-dep -f custom-make-dependencies $$wins
166

167 168 169
$(lisp)/finder-inf.el:
	$(MAKE) $(MFLAGS) finder-data
finder-data: doit
Glenn Morris's avatar
Glenn Morris committed
170
	cd $(lisp) && $(setwins_almost); \
171
	echo Directories: $$wins; \
172
	$(emacs) -l finder -f finder-compile-keywords-make-dist $$wins
173

174
# The chmod +w is to handle env var CVSREAD=1.
175 176
# Use expand-file-name rather than $abs_lisp so that Emacs does not
# get confused when it compares file-names for equality.
177
autoloads: $(LOADDEFS) doit
178
	cd $(lisp) && chmod +w $(AUTOGEN_VCS)
Glenn Morris's avatar
Glenn Morris committed
179
	cd $(lisp) && $(setwins_almost); \
180
	echo Directories: $$wins; \
181 182
	$(emacs) -l autoload \
	    --eval '(setq autoload-builtin-package-versions t)' \
183
	    --eval '(setq generated-autoload-file (expand-file-name "loaddefs.el"))' \
184
	    -f batch-update-autoloads $$wins
185

186
# This is required by the bootstrap-emacs target in ../src/Makefile, so
187
# we know that if we have an emacs executable, we also have a subdirs.el.
188
$(lisp)/subdirs.el:
189
	$(MAKE) $(MFLAGS) update-subdirs
190
update-subdirs: doit
Glenn Morris's avatar
Glenn Morris committed
191
	cd $(lisp) && $(setwins_for_subdirs); \
192
	for file in $$wins; do \
193
	   ../build-aux/update-subdirs $$file; \
194 195
	done;

196 197
.PHONY: updates bzr-update update-authors

198
# Some modes of make-dist use this.
199
updates: update-subdirs autoloads finder-data custom-deps
Per Abrahamsen's avatar
Per Abrahamsen committed
200

201 202
# This is useful after "bzr up"; but it doesn't do anything that a
# plain "make" at top-level doesn't.
Glenn Morris's avatar
Glenn Morris committed
203 204 205 206
# The only difference between this and this directory's "all" rule
# is that this runs "autoloads" as well (because it uses "compile"
# rather than "compile-main").  In a bootstrap, $(lisp) in src/Makefile
# triggers this directory's autoloads rule.
207
bzr-update: compile finder-data custom-deps
208

209 210 211
# Update the AUTHORS file.

update-authors:
212
	$(emacs) -l authors -f batch-update-authors $(top_srcdir)/etc/AUTHORS $(top_srcdir)
213

214 215 216

ETAGS = ../lib-src/etags

217 218 219 220
lisptagsfiles1 = $(srcdir)/*.el
lisptagsfiles2 = $(srcdir)/*/*.el
lisptagsfiles3 = $(srcdir)/*/*/*.el
lisptagsfiles4 = $(srcdir)/*/*/*/*.el
221 222 223 224 225

## Apparently the echo | sed | xargs is to stop the command line
## getting too long on MS Windows.  It will make no difference on
## POSIX systems, where the shell does the globbing right away, before
## passing the expanded arguments to echo.
226 227 228 229
## The POSIX way would be to use find in a similar way to compile-main.
## But maybe this is not even necessary any more now that this uses
## relative filenames.
TAGS: $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4)
230 231 232
	rm -f $@
	touch $@
	echo $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4) | \
233 234 235
	  sed -e 's,$(srcdir)/[^ ]*loaddefs[^ ]*,,g' \
	    -e 's,$(srcdir)/ldefs-boot[^ ]*,,' \
	    -e 's,$(srcdir)/[^ ]*esh-groups.el[^ ]*,,' | \
236 237
	    xargs $(XARGS_LIMIT) "$(ETAGS)" -a -o $@

238

239 240 241 242 243 244 245 246 247
# The src/Makefile.in has its own set of dependencies and when they decide
# that one Lisp file needs to be re-compiled, we had better recompile it as
# well, otherwise every subsequent make will again call us, until we finally
# end up deciding that yes, the file deserves recompilation.
# One option is to try and reproduce exactly the same dependencies here as
# we have in src/Makefile.in, but it turns out to be painful
# (e.g. src/Makefile.in may have a dependency for ../lisp/foo.elc where we
# only know of $(lisp)/foo.elc).  So instead we provide a direct way for
# src/Makefile.in to rebuild a particular Lisp file, no questions asked.
248 249
# Use byte-compile-refresh-preloaded to try and work around some of
# the most common problems of not bootstrapping from a clean state.
250
.PHONY: compile-onefile
251 252
compile-onefile:
	@echo Compiling $(THEFILE)
253 254
	@# Use byte-compile-refresh-preloaded to try and work around some of
	@# the most common bootstrapping problems.
255 256
	@$(emacs) $(BYTE_COMPILE_FLAGS) \
		-l bytecomp -f byte-compile-refresh-preloaded \
257
		-f batch-byte-compile $(THEFILE)
258

259 260
# Files MUST be compiled one by one. If we compile several files in a
# row (i.e., in the same instance of Emacs) we can't make sure that
Lute Kamstra's avatar
Lute Kamstra committed
261 262 263 264
# the compilation environment is clean.  We also set the load-path of
# the Emacs used for compilation to the current directory and its
# subdirectories, to make sure require's and load's in the files being
# compiled find the right files.
Stefan Monnier's avatar
Stefan Monnier committed
265

266 267 268 269 270 271
.SUFFIXES: .elc .el

# An old-fashioned suffix rule, which, according to the GNU Make manual,
# cannot have prerequisites.
.el.elc:
	@echo Compiling $<
272 273 274
	@# The BIG_STACK_OPTS are only needed to byte-compile the byte-compiler
	@# files, which is normally done in compile-first, but may also be
	@# recompiled via this rule.
275
	@$(emacs) $(BYTE_COMPILE_FLAGS) \
276
		-f batch-byte-compile $<
277

278
.PHONY: compile-first compile-main compile compile-always
279

280
compile-first: $(COMPILE_FIRST)
Richard M. Stallman's avatar
Richard M. Stallman committed
281

282 283 284
# In `compile-main' we could directly do
#    ... | xargs $(MAKE) $(MFLAGS) EMACS="$(EMACS)"
# and it works, but it generates a lot of messages like
285
#    make[2]: gnus/gnus-mlspl.elc is up to date.
286 287 288 289 290 291 292 293 294 295 296 297
# so instead, we use "xargs echo" to split the list of file into manageable
# chunks and then use an intermediate `compile-targets' target so the
# actual targets (the .elc files) are not mentioned as targets on the
# make command line.


.PHONY: compile-targets
# TARGETS is set dynamically in the recursive call from `compile-main'.
compile-targets: $(TARGETS)

# Compile all the Elisp files that need it.  Beware: it approximates
# `no-byte-compile', so watch out for false-positives!
298
compile-main: compile-clean
Glenn Morris's avatar
Glenn Morris committed
299
	@(cd $(lisp) && $(setwins); \
300 301 302 303 304
	els=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.el |g'`; \
	for el in $$els; do \
	  test -f $$el || continue; \
	  test ! -f $${el}c && GREP_OPTIONS= grep '^;.*no-byte-compile: t' $$el > /dev/null && continue; \
	  echo "$${el}c"; \
305
	done | xargs $(XARGS_LIMIT) echo) | \
306 307 308
	while read chunk; do \
	  $(MAKE) $(MFLAGS) compile-targets EMACS="$(EMACS)" TARGETS="$$chunk"; \
	done
309

310 311 312
.PHONY: compile-clean
# Erase left-over .elc files that do not have a corresponding .el file.
compile-clean:
Glenn Morris's avatar
Glenn Morris committed
313
	@cd $(lisp) && $(setwins); \
314
	elcs=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.elc |g'`; \
315
	for el in `echo $$elcs | sed -e 's/\.elc/\.el/g'`; do \
316 317 318 319 320 321
	  if test -f "$$el" -o \! -f "$${el}c"; then :; else \
	    echo rm "$${el}c"; \
	    rm "$${el}c"; \
	  fi \
	done

322 323 324 325
# Compile all Lisp files, but don't recompile those that are up to
# date.  Some .el files don't get compiled because they set the
# local variable no-byte-compile.
# Calling make recursively because suffix rule cannot have prerequisites.
326 327
# Explicitly pass EMACS (sometimes ../src/bootstrap-emacs) to those
# sub-makes that run rules that use it, for the sake of some non-GNU makes.
328
compile: $(LOADDEFS) autoloads compile-first
329
	$(MAKE) $(MFLAGS) compile-main EMACS="$(EMACS)"
330

Lute Kamstra's avatar
Lute Kamstra committed
331 332 333
# Compile all Lisp files.  This is like `compile' but compiles files
# unconditionally.  Some files don't actually get compiled because they
# set the local variable no-byte-compile.
334
compile-always: doit
Glenn Morris's avatar
Glenn Morris committed
335
	cd $(lisp) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc
336
	$(MAKE) $(MFLAGS) compile EMACS="$(EMACS)"
Lute Kamstra's avatar
Lute Kamstra committed
337

Glenn Morris's avatar
Glenn Morris committed
338
.PHONY: backup-compiled-files compile-after-backup
339

340 341 342 343
# Backup compiled Lisp files in elc.tar.gz.  If that file already
# exists, make a backup of it.

backup-compiled-files:
Gerd Moellmann's avatar
Gerd Moellmann committed
344
	-mv $(lisp)/elc.tar.gz $(lisp)/elc.tar.gz~
Glenn Morris's avatar
Glenn Morris committed
345
	-tar czf $(lisp)/elc.tar.gz $(lisp)/*.elc $(lisp)/*/*.elc $(lisp)/*/*/*.elc $(lisp)/*/*/*/*.elc
346 347 348

# Compile Lisp files, but save old compiled files first.

Richard M. Stallman's avatar
Richard M. Stallman committed
349
compile-after-backup: backup-compiled-files compile-always
350

351 352 353 354 355 356 357
# This does the same job as the "compile" rule, but in a different way.
# Rather than spawning a separate Emacs instance to compile each file,
# it uses the same Emacs instance to compile everything.
# This is faster on a single core, since it avoids the overhead of
# starting Emacs many times (it was 33% faster on a test with a
# random 10% of the .el files needing recompilation).
# Unlike compile, this is not parallelizable; so if you have more than
Glenn Morris's avatar
Glenn Morris committed
358
# one core and use make -j#, compile will be (much) faster.
359 360 361 362 363 364 365
# This rule also produces less accurate compilation warnings.
# The environment of later files is affected by definitions in
# earlier ones, so it does not produce some warnings that it should.
# It can also produces spurious warnings about "invalid byte code" if
# files that use byte-compile-dynamic are updated.
# There is no reason to use this rule unless you only have a single
# core and CPU time is an issue.
366
.PHONY: compile-one-process
367
compile-one-process: doit $(LOADDEFS) compile-first $(lisp)/progmodes/cc-mode.elc
368 369
	$(emacs) $(BYTE_COMPILE_FLAGS) \
	    --eval "(batch-byte-recompile-directory 0)" $(lisp)
370

371
# Update MH-E internal autoloads. These are not to be confused with
Glenn Morris's avatar
Glenn Morris committed
372
# the autoloads for the MH-E entry points, which are already in loaddefs.el.
Glenn Morris's avatar
Glenn Morris committed
373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388
MH_E_DIR = $(lisp)/mh-e
## MH_E_SRC avoids a circular dependency warning for mh-loaddefs.el.
MH_E_SRC = $(MH_E_DIR)/mh-acros.el $(MH_E_DIR)/mh-alias.el    \
	$(MH_E_DIR)/mh-buffers.el  $(MH_E_DIR)/mh-compat.el   \
	$(MH_E_DIR)/mh-comp.el     $(MH_E_DIR)/mh-e.el        \
	$(MH_E_DIR)/mh-folder.el   $(MH_E_DIR)/mh-funcs.el    \
	$(MH_E_DIR)/mh-gnus.el     $(MH_E_DIR)/mh-identity.el \
	$(MH_E_DIR)/mh-inc.el      $(MH_E_DIR)/mh-junk.el     \
	$(MH_E_DIR)/mh-letter.el   $(MH_E_DIR)/mh-limit.el    \
	$(MH_E_DIR)/mh-mime.el     $(MH_E_DIR)/mh-print.el    \
	$(MH_E_DIR)/mh-scan.el     $(MH_E_DIR)/mh-search.el   \
	$(MH_E_DIR)/mh-seq.el      $(MH_E_DIR)/mh-show.el     \
	$(MH_E_DIR)/mh-speed.el    $(MH_E_DIR)/mh-thread.el   \
	$(MH_E_DIR)/mh-tool-bar.el $(MH_E_DIR)/mh-utils.el    \
	$(MH_E_DIR)/mh-xface.el

389
.PHONY: mh-autoloads
Glenn Morris's avatar
Glenn Morris committed
390
mh-autoloads: $(MH_E_DIR)/mh-loaddefs.el
391
$(MH_E_DIR)/mh-loaddefs.el: $(MH_E_SRC)
Glenn Morris's avatar
Glenn Morris committed
392
	$(emacs) -l autoload \
393
	   --eval "(setq generate-autoload-cookie \";;;###mh-autoload\")" \
394
	   --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
395
	   --eval "(setq make-backup-files nil)" \
Glenn Morris's avatar
Glenn Morris committed
396 397
	   -f batch-update-autoloads $(MH_E_DIR)

398
# Update TRAMP internal autoloads. Maybe we could move tramp*.el into
399 400 401
# an own subdirectory. OTOH, it does not hurt to keep them in
# lisp/net.
TRAMP_DIR = $(lisp)/net
Michael Albinus's avatar
Michael Albinus committed
402 403 404 405 406 407
TRAMP_SRC = $(TRAMP_DIR)/tramp.el    $(TRAMP_DIR)/tramp-adb.el	\
	$(TRAMP_DIR)/tramp-cache.el  $(TRAMP_DIR)/tramp-cmds.el	\
	$(TRAMP_DIR)/tramp-compat.el $(TRAMP_DIR)/tramp-ftp.el	\
	$(TRAMP_DIR)/tramp-gvfs.el   $(TRAMP_DIR)/tramp-gw.el	\
	$(TRAMP_DIR)/tramp-sh.el     $(TRAMP_DIR)/tramp-smb.el	\
	$(TRAMP_DIR)/tramp-uu.el     $(TRAMP_DIR)/trampver.el
408 409 410 411

$(TRAMP_DIR)/tramp-loaddefs.el: $(TRAMP_SRC)
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###tramp-autoload\")" \
412
	   --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
413 414 415
	   --eval "(setq make-backup-files nil)" \
	   -f batch-update-autoloads $(TRAMP_DIR)

Glenn Morris's avatar
Glenn Morris committed
416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
CAL_DIR = $(lisp)/calendar
## Those files that may contain internal calendar autoload cookies.
## Avoids circular dependency warning for *-loaddefs.el.
CAL_SRC = $(CAL_DIR)/cal-bahai.el $(CAL_DIR)/cal-china.el  \
	$(CAL_DIR)/cal-coptic.el  $(CAL_DIR)/cal-dst.el    \
	$(CAL_DIR)/cal-french.el  $(CAL_DIR)/cal-hebrew.el \
	$(CAL_DIR)/cal-html.el    $(CAL_DIR)/cal-islam.el  \
	$(CAL_DIR)/cal-iso.el     $(CAL_DIR)/cal-julian.el \
	$(CAL_DIR)/cal-mayan.el   $(CAL_DIR)/cal-menu.el   \
	$(CAL_DIR)/cal-move.el    $(CAL_DIR)/cal-persia.el \
	$(CAL_DIR)/cal-tex.el     $(CAL_DIR)/cal-x.el      \
	$(CAL_DIR)/calendar.el    $(CAL_DIR)/diary-lib.el  \
	$(CAL_DIR)/holidays.el    $(CAL_DIR)/lunar.el      \
	$(CAL_DIR)/solar.el

431
$(CAL_DIR)/cal-loaddefs.el: $(CAL_SRC)
Glenn Morris's avatar
Glenn Morris committed
432 433
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###cal-autoload\")" \
434
	   --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
Glenn Morris's avatar
Glenn Morris committed
435
	   --eval "(setq make-backup-files nil)" \
Glenn Morris's avatar
Glenn Morris committed
436
	   -f batch-update-autoloads $(CAL_DIR)
Glenn Morris's avatar
Glenn Morris committed
437

438
$(CAL_DIR)/diary-loaddefs.el: $(CAL_SRC)
Glenn Morris's avatar
Glenn Morris committed
439 440
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###diary-autoload\")" \
441
	   --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
Glenn Morris's avatar
Glenn Morris committed
442
	   --eval "(setq make-backup-files nil)" \
Glenn Morris's avatar
Glenn Morris committed
443
	   -f batch-update-autoloads $(CAL_DIR)
Glenn Morris's avatar
Glenn Morris committed
444

445
$(CAL_DIR)/hol-loaddefs.el: $(CAL_SRC)
Glenn Morris's avatar
Glenn Morris committed
446 447
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###holiday-autoload\")" \
448
	   --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
Glenn Morris's avatar
Glenn Morris committed
449
	   --eval "(setq make-backup-files nil)" \
Glenn Morris's avatar
Glenn Morris committed
450
	   -f batch-update-autoloads $(CAL_DIR)
Glenn Morris's avatar
Glenn Morris committed
451

452 453
.PHONY: bootstrap-clean distclean maintainer-clean

454
bootstrap-clean:
Glenn Morris's avatar
Glenn Morris committed
455
	-cd $(lisp) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc $(AUTOGENEL)
456

457
distclean:
458
	-rm -f ./Makefile $(lisp)/loaddefs.el~
459 460

maintainer-clean: distclean bootstrap-clean
461
	rm -f TAGS
Gerd Moellmann's avatar
Gerd Moellmann committed
462

Glenn Morris's avatar
Glenn Morris committed
463 464 465
.PHONY: check-declare

check-declare:
466
	$(emacs) -l check-declare --eval '(check-declare-directory "$(lisp)")'
Glenn Morris's avatar
Glenn Morris committed
467

468 469
# Dependencies

470 471 472 473 474 475 476
## None of the following matters for bootstrap, which is the only way
## to ensure a correct compilation of all lisp files.
## Manually specifying dependencies of a handful of lisp files, (and
## ones that don't change very often at that) seems pretty pointless
## to me.

# http://debbugs.gnu.org/1004
477 478 479 480 481 482 483 484
# CC Mode uses a compile time macro system which causes a compile time
# dependency in cc-*.elc files on the macros in other cc-*.el and the
# version string in cc-defs.el.
$(lisp)/progmodes/cc-align.elc $(lisp)/progmodes/cc-awk.elc\
 $(lisp)/progmodes/cc-cmds.elc $(lisp)/progmodes/cc-compat.elc\
 $(lisp)/progmodes/cc-engine.elc $(lisp)/progmodes/cc-fonts.elc\
 $(lisp)/progmodes/cc-langs.elc $(lisp)/progmodes/cc-menus.elc\
 $(lisp)/progmodes/cc-mode.elc $(lisp)/progmodes/cc-styles.elc\
485
 $(lisp)/progmodes/cc-vars.elc: \
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519
   $(lisp)/progmodes/cc-bytecomp.elc $(lisp)/progmodes/cc-defs.elc

$(lisp)/progmodes/cc-align.elc: \
   $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc

$(lisp)/progmodes/cc-cmds.elc: \
   $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc

$(lisp)/progmodes/cc-compat.elc: \
   $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-styles.elc \
   $(lisp)/progmodes/cc-engine.elc

$(lisp)/progmodes/cc-defs.elc: $(lisp)/progmodes/cc-bytecomp.elc \
   $(lisp)/emacs-lisp/cl.elc $(lisp)/emacs-lisp/regexp-opt.elc

$(lisp)/progmodes/cc-engine.elc: $(lisp)/progmodes/cc-langs.elc \
   $(lisp)/progmodes/cc-vars.elc

$(lisp)/progmodes/cc-fonts.elc: $(lisp)/progmodes/cc-langs.elc \
   $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc \
   $(lisp)/font-lock.elc

$(lisp)/progmodes/cc-langs.elc: $(lisp)/progmodes/cc-vars.elc \
   $(lisp)/emacs-lisp/cl.elc

$(lisp)/progmodes/cc-mode.elc: $(lisp)/progmodes/cc-langs.elc \
   $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc \
   $(lisp)/progmodes/cc-styles.elc $(lisp)/progmodes/cc-cmds.elc \
   $(lisp)/progmodes/cc-align.elc $(lisp)/progmodes/cc-menus.elc

$(lisp)/progmodes/cc-styles.elc: $(lisp)/progmodes/cc-vars.elc \
   $(lisp)/progmodes/cc-align.elc

$(lisp)/progmodes/cc-vars.elc: $(lisp)/custom.elc $(lisp)/widget.elc
520

521
# Makefile ends here.