Makefile.in 20.6 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
# Prevent any setting of EMACSLOADPATH in user environment causing problems.
109
emacs = EMACSLOADPATH= "$(EMACS)" $(EMACSOPT)
110

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

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

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

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

137 138
doit:

139 140
.PHONY: all doit custom-deps finder-data autoloads update-subdirs

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

164 165 166
$(lisp)/finder-inf.el:
	$(MAKE) $(MFLAGS) finder-data
finder-data: doit
167
	$(setwins_almost); \
168
	echo Directories: $$wins; \
169 170
	$(emacs) -l finder \
	  --eval '(setq generated-finder-keywords-file "$(srcdir)/finder-inf.el")' \
171
	  -f finder-compile-keywords-make-dist $$wins
172

173
# The chmod +w is to handle env var CVSREAD=1.
174
# Use expand-file-name rather than $abs_scrdir so that Emacs does not
175
# get confused when it compares file-names for equality.
176 177 178 179
#
# Note that we set no-update-autoloads in _generated_ leim files.
# If you want to allow autoloads in such files, remove that,
# and make this depend on leim.
180
autoloads: $(LOADDEFS) doit
181
	cd $(lisp) && chmod +w $(AUTOGEN_VCS)
182
	$(setwins_almost); \
183
	echo Directories: $$wins; \
184
	$(emacs) -l autoload \
185
	    --eval '(setq autoload-builtin-package-versions t)' \
186
	    --eval '(setq generated-autoload-file (expand-file-name "$(srcdir)/loaddefs.el"))' \
187
	    -f batch-update-autoloads $$wins
188

189
# This is required by the bootstrap-emacs target in ../src/Makefile, so
190
# we know that if we have an emacs executable, we also have a subdirs.el.
191
$(lisp)/subdirs.el:
192
	$(MAKE) $(MFLAGS) update-subdirs
193
update-subdirs: doit
194
	$(setwins_for_subdirs); \
195
	for file in $$wins; do \
196
	   $(srcdir)/../build-aux/update-subdirs $$file; \
197 198
	done;

199 200
.PHONY: updates bzr-update update-authors

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

204 205
# 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
206 207 208 209
# 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.
210
bzr-update: compile finder-data custom-deps
211

212 213 214
# Update the AUTHORS file.

update-authors:
215
	$(emacs) -l authors -f batch-update-authors $(top_srcdir)/etc/AUTHORS $(top_srcdir)
216

217 218 219

ETAGS = ../lib-src/etags

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

225 226 227 228 229
## 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.
230
TAGS: $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4)
231 232 233
	rm -f $@
	touch $@
	echo $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4) | \
234 235 236
	  sed -e 's,$(srcdir)/[^ ]*loaddefs[^ ]*,,g' \
	    -e 's,$(srcdir)/ldefs-boot[^ ]*,,' \
	    -e 's,$(srcdir)/[^ ]*esh-groups.el[^ ]*,,' | \
237 238
	    xargs $(XARGS_LIMIT) "$(ETAGS)" -a -o $@

239

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

260 261
# 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
262 263 264 265
# 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
266

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

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

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

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

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

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

323 324 325 326
.PHONY: leim
leim:
	cd ../leim && $(MAKE) $(MFLAGS) all EMACS="$(EMACS)"

327 328 329 330
# 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.
331 332
# 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.
333
compile: $(LOADDEFS) autoloads compile-first
334
	$(MAKE) $(MFLAGS) compile-main EMACS="$(EMACS)"
335

Lute Kamstra's avatar
Lute Kamstra committed
336 337 338
# 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.
339
compile-always: doit
Glenn Morris's avatar
Glenn Morris committed
340
	cd $(lisp) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc
341
	$(MAKE) $(MFLAGS) compile EMACS="$(EMACS)"
Lute Kamstra's avatar
Lute Kamstra committed
342

Glenn Morris's avatar
Glenn Morris committed
343
.PHONY: backup-compiled-files compile-after-backup
344

345 346 347 348
# 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
349
	-mv $(lisp)/elc.tar.gz $(lisp)/elc.tar.gz~
Glenn Morris's avatar
Glenn Morris committed
350
	-tar czf $(lisp)/elc.tar.gz $(lisp)/*.elc $(lisp)/*/*.elc $(lisp)/*/*/*.elc $(lisp)/*/*/*/*.elc
351 352 353

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

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

356 357 358 359 360 361 362
# 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
363
# one core and use make -j#, compile will be (much) faster.
364 365 366 367 368 369 370
# 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.
371
.PHONY: compile-one-process
372
compile-one-process: doit $(LOADDEFS) compile-first $(lisp)/progmodes/cc-mode.elc
373 374
	$(emacs) $(BYTE_COMPILE_FLAGS) \
	    --eval "(batch-byte-recompile-directory 0)" $(lisp)
375

376
# Update MH-E internal autoloads. These are not to be confused with
Glenn Morris's avatar
Glenn Morris committed
377
# the autoloads for the MH-E entry points, which are already in loaddefs.el.
Glenn Morris's avatar
Glenn Morris committed
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393
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

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

403
# Update TRAMP internal autoloads. Maybe we could move tramp*.el into
404 405 406
# 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
407 408 409 410 411 412
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
413 414 415 416

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

Glenn Morris's avatar
Glenn Morris committed
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435
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

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

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

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

457 458
.PHONY: bootstrap-clean distclean maintainer-clean

459
bootstrap-clean:
Glenn Morris's avatar
Glenn Morris committed
460
	-cd $(lisp) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc $(AUTOGENEL)
461

462
distclean:
463
	-rm -f ./Makefile $(lisp)/loaddefs.el~
464 465

maintainer-clean: distclean bootstrap-clean
466
	rm -f TAGS
Gerd Moellmann's avatar
Gerd Moellmann committed
467

Glenn Morris's avatar
Glenn Morris committed
468 469 470
.PHONY: check-declare

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

473 474
# Dependencies

475 476 477 478 479 480 481
## 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
482 483 484 485 486 487 488 489
# 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\
490
 $(lisp)/progmodes/cc-vars.elc: \
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 520 521 522 523 524
   $(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
525

526
# Makefile ends here.