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 23 24 25
srcdir = @srcdir@
top_srcdir = @top_srcdir@
lisp = $(srcdir)
VPATH = $(srcdir)
Gerd Moellmann's avatar
Gerd Moellmann committed
26

27 28 29 30
# Empty for all systems except MinGW, where xargs needs an explicit
# limitation.
XARGS_LIMIT = @XARGS_LIMIT@

31 32 33
# You can specify a different executable on the make command line,
# e.g. "make EMACS=../src/emacs ...".

34 35 36 37
# We never change directory before running Emacs, so a relative file
# name is fine, and makes life easier.  If we need to change
# directory, we can use emacs --chdir.
EMACS = ../src/emacs
38

39
# Command line flags for Emacs.
40

41
EMACSOPT = -batch --no-site-file --no-site-lisp
42

43
# Extra flags to pass to the byte compiler
44
BYTE_COMPILE_EXTRA_FLAGS =
45 46 47 48
# 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
49
# Automatically generated autoload files, apart from lisp/loaddefs.el.
Glenn Morris's avatar
Glenn Morris committed
50 51 52
# 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
53
LOADDEFS = $(lisp)/calendar/cal-loaddefs.el \
Glenn Morris's avatar
Glenn Morris committed
54 55
	$(lisp)/calendar/diary-loaddefs.el \
	$(lisp)/calendar/hol-loaddefs.el \
56 57
	$(lisp)/mh-e/mh-loaddefs.el \
	$(lisp)/net/tramp-loaddefs.el
Glenn Morris's avatar
Glenn Morris committed
58

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

73 74 75 76 77 78 79 80 81 82 83
# 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

84 85 86 87
# 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.
#
88
BIG_STACK_DEPTH = 2200
89 90
BIG_STACK_OPTS = --eval "(setq max-lisp-eval-depth $(BIG_STACK_DEPTH))"

91 92
BYTE_COMPILE_FLAGS = $(BIG_STACK_OPTS) $(BYTE_COMPILE_EXTRA_FLAGS)

93
# Files to compile before others during a bootstrap.  This is done to
Stefan Monnier's avatar
Stefan Monnier committed
94 95 96 97 98
# 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
99

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

107
# The actual Emacs command run in the targets below.
108 109
# Prevent any setting of EMACSLOADPATH in user environment causing problems.
emacs = unset EMACSLOADPATH; LC_ALL=C "$(EMACS)" $(EMACSOPT)
110

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

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

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

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

139 140
doit:

141 142
.PHONY: all doit custom-deps finder-data autoloads update-subdirs

143
# custom-deps and finder-data both used to scan _all_ the *.el files.
Glenn Morris's avatar
Glenn Morris committed
144 145
# This could lead to problems in parallel builds if automatically
# generated *.el files (eg loaddefs etc) were being changed at the same time.
146 147 148
# 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
149
# However, this meant that running these targets modified loaddefs.el,
150 151 152 153
# 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
154 155 156
# 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).
157 158 159
$(lisp)/cus-load.el:
	$(MAKE) $(MFLAGS) custom-deps
custom-deps: doit
160
	thisdir=`pwd`; cd $(lisp) && $(setwins_almost); cd "$$thisdir"; \
161
	echo Directories: $$wins; \
162
	$(emacs) --chdir $(lisp) -l cus-dep -f custom-make-dependencies $$wins
163

164 165 166
$(lisp)/finder-inf.el:
	$(MAKE) $(MFLAGS) finder-data
finder-data: doit
167
	thisdir=`pwd`; cd $(lisp) && $(setwins_almost); cd "$$thisdir"; \
168
	echo Directories: $$wins; \
169 170
	$(emacs) --chdir $(lisp) -l finder \
	  -f finder-compile-keywords-make-dist $$wins
171

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

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

194 195
.PHONY: updates bzr-update update-authors

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

199 200
# 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
201 202 203 204
# 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.
205
bzr-update: compile finder-data custom-deps
206

207 208 209
# Update the AUTHORS file.

update-authors:
210
	$(emacs) -l authors -f batch-update-authors $(top_srcdir)/etc/AUTHORS $(top_srcdir)
211

212 213 214

ETAGS = ../lib-src/etags

215 216 217 218
lisptagsfiles1 = $(srcdir)/*.el
lisptagsfiles2 = $(srcdir)/*/*.el
lisptagsfiles3 = $(srcdir)/*/*/*.el
lisptagsfiles4 = $(srcdir)/*/*/*/*.el
219

220 221 222 223 224
## The echo | sed | xargs is to stop the command line getting too long
## on MS Windows, when the MSYS Bash passes it to a MinGW compiled
## etags.  It might be better 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.
225
TAGS: $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4)
226 227 228
	rm -f $@
	touch $@
	echo $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4) | \
229 230 231
	  sed -e 's,$(srcdir)/[^ ]*loaddefs[^ ]*,,g' \
	    -e 's,$(srcdir)/ldefs-boot[^ ]*,,' \
	    -e 's,$(srcdir)/[^ ]*esh-groups.el[^ ]*,,' | \
232 233
	    xargs $(XARGS_LIMIT) "$(ETAGS)" -a -o $@

234

235 236 237 238 239 240 241 242 243
# 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.
244 245
# Use byte-compile-refresh-preloaded to try and work around some of
# the most common problems of not bootstrapping from a clean state.
246
.PHONY: compile-onefile
247 248
compile-onefile:
	@echo Compiling $(THEFILE)
249 250
	@# Use byte-compile-refresh-preloaded to try and work around some of
	@# the most common bootstrapping problems.
251 252
	@$(emacs) $(BYTE_COMPILE_FLAGS) \
		-l bytecomp -f byte-compile-refresh-preloaded \
253
		-f batch-byte-compile $(THEFILE)
254

255 256
# 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
257 258 259 260
# 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
261

262 263 264 265 266 267
.SUFFIXES: .elc .el

# An old-fashioned suffix rule, which, according to the GNU Make manual,
# cannot have prerequisites.
.el.elc:
	@echo Compiling $<
268 269 270
	@# 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.
271
	@$(emacs) $(BYTE_COMPILE_FLAGS) \
272
		-f batch-byte-compile $<
273

274
.PHONY: compile-first compile-main compile compile-always
275

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

278 279 280
# In `compile-main' we could directly do
#    ... | xargs $(MAKE) $(MFLAGS) EMACS="$(EMACS)"
# and it works, but it generates a lot of messages like
281
#    make[2]: gnus/gnus-mlspl.elc is up to date.
282 283 284 285 286 287 288 289 290 291 292 293
# 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!
294
compile-main: compile-clean
Glenn Morris's avatar
Glenn Morris committed
295
	@(cd $(lisp) && $(setwins); \
296 297 298 299 300
	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"; \
301
	done | xargs $(XARGS_LIMIT) echo) | \
302 303 304
	while read chunk; do \
	  $(MAKE) $(MFLAGS) compile-targets EMACS="$(EMACS)" TARGETS="$$chunk"; \
	done
305

306 307 308
.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
309
	@cd $(lisp) && $(setwins); \
310
	elcs=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.elc |g'`; \
311
	for el in `echo $$elcs | sed -e 's/\.elc/\.el/g'`; do \
312 313 314 315 316 317
	  if test -f "$$el" -o \! -f "$${el}c"; then :; else \
	    echo rm "$${el}c"; \
	    rm "$${el}c"; \
	  fi \
	done

318 319 320 321
# 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.
322 323
# 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.
324
compile: $(LOADDEFS) autoloads compile-first
325
	$(MAKE) $(MFLAGS) compile-main EMACS="$(EMACS)"
326

Lute Kamstra's avatar
Lute Kamstra committed
327 328 329
# 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.
330
compile-always: doit
Glenn Morris's avatar
Glenn Morris committed
331
	cd $(lisp) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc
332
	$(MAKE) $(MFLAGS) compile EMACS="$(EMACS)"
Lute Kamstra's avatar
Lute Kamstra committed
333

Glenn Morris's avatar
Glenn Morris committed
334
.PHONY: backup-compiled-files compile-after-backup
335

336 337 338 339
# 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
340
	-mv $(lisp)/elc.tar.gz $(lisp)/elc.tar.gz~
Glenn Morris's avatar
Glenn Morris committed
341
	-tar czf $(lisp)/elc.tar.gz $(lisp)/*.elc $(lisp)/*/*.elc $(lisp)/*/*/*.elc $(lisp)/*/*/*/*.elc
342 343 344

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

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

347 348 349 350 351 352 353
# 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
354
# one core and use make -j#, compile will be (much) faster.
355 356 357 358 359 360 361
# 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.
362
.PHONY: compile-one-process
363
compile-one-process: doit $(LOADDEFS) compile-first $(lisp)/progmodes/cc-mode.elc
364 365
	$(emacs) $(BYTE_COMPILE_FLAGS) \
	    --eval "(batch-byte-recompile-directory 0)" $(lisp)
366

367
# Update MH-E internal autoloads. These are not to be confused with
Glenn Morris's avatar
Glenn Morris committed
368
# the autoloads for the MH-E entry points, which are already in loaddefs.el.
Glenn Morris's avatar
Glenn Morris committed
369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384
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

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

394
# Update TRAMP internal autoloads. Maybe we could move tramp*.el into
395 396 397
# 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
398 399 400 401 402 403
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
404 405 406 407

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

Glenn Morris's avatar
Glenn Morris committed
412 413 414 415 416 417 418 419 420 421 422 423 424 425 426
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

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

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

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

448 449
.PHONY: bootstrap-clean distclean maintainer-clean

450
bootstrap-clean:
Glenn Morris's avatar
Glenn Morris committed
451
	-cd $(lisp) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc $(AUTOGENEL)
452

453
distclean:
454
	-rm -f ./Makefile $(lisp)/loaddefs.el~
455 456

maintainer-clean: distclean bootstrap-clean
457
	rm -f TAGS
Gerd Moellmann's avatar
Gerd Moellmann committed
458

Glenn Morris's avatar
Glenn Morris committed
459 460 461
.PHONY: check-declare

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

464 465
# Dependencies

466 467 468 469 470 471 472
## 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
473 474 475 476 477 478 479 480
# 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\
481
 $(lisp)/progmodes/cc-vars.elc: \
482 483 484 485 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
   $(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
516

517
# Makefile ends here.