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

3
# Copyright (C) 2000-2014 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
# Set load-prefer-newer for the benefit of the non-bootstrappers.
92 93
BYTE_COMPILE_FLAGS = $(BIG_STACK_OPTS) \
  --eval '(setq load-prefer-newer t)' $(BYTE_COMPILE_EXTRA_FLAGS)
94

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

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

109
# The actual Emacs command run in the targets below.
110 111
# Prevent any setting of EMACSLOADPATH in user environment causing problems.
emacs = EMACSLOADPATH= '$(EMACS)' $(EMACSOPT)
112

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

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

127 128 129 130 131 132 133 134 135
# Find all subdirectories except `obsolete', `term', and `leim' (and subdirs).
# We don't want the leim files listed as packages, especially
# since many share basenames with files in language/.
setwins_finder=for file in `find ${srcdir} -type d -print`; do \
	   case $$file in ${srcdir}*/obsolete | ${srcdir}*/term | ${srcdir}*/leim* ) ;; \
	     *) wins="$$wins$${wins:+ }$$file" ;; \
	   esac; \
        done

136 137
# Find all subdirectories in which we might want to create subdirs.el.
setwins_for_subdirs=for file in `find ${srcdir} -type d -print`; do \
138 139 140
	   case $$file in \
	     ${srcdir}*/cedet* | ${srcdir}*/leim* ) ;; \
	     *) wins="$$wins$${wins:+ }$$file" ;; \
141 142 143
	   esac; \
        done

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

148 149
doit:

150 151
.PHONY: all doit custom-deps finder-data autoloads update-subdirs

152
# custom-deps and finder-data both used to scan _all_ the *.el files.
Glenn Morris's avatar
Glenn Morris committed
153 154
# This could lead to problems in parallel builds if automatically
# generated *.el files (eg loaddefs etc) were being changed at the same time.
155 156 157
# 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
158
# However, this meant that running these targets modified loaddefs.el,
159 160 161 162
# 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
163 164 165
# 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).
166 167 168
$(lisp)/cus-load.el:
	$(MAKE) $(MFLAGS) custom-deps
custom-deps: doit
169
	$(setwins_almost); \
170
	echo Directories: $$wins; \
171
	$(emacs) -l cus-dep \
Eli Zaretskii's avatar
Eli Zaretskii committed
172
	  --eval '(setq generated-custom-dependencies-file (unmsys--file-name "$(srcdir)/cus-load.el"))' \
173
	  -f custom-make-dependencies $$wins
174

175 176 177
$(lisp)/finder-inf.el:
	$(MAKE) $(MFLAGS) finder-data
finder-data: doit
178
	$(setwins_finder); \
179
	echo Directories: $$wins; \
180
	$(emacs) -l finder \
Eli Zaretskii's avatar
Eli Zaretskii committed
181
	  --eval '(setq generated-finder-keywords-file (unmsys--file-name "$(srcdir)/finder-inf.el"))' \
182
	  -f finder-compile-keywords-make-dist $$wins
183

184
# The chmod +w is to handle env var CVSREAD=1.
185
# Use expand-file-name rather than $abs_scrdir so that Emacs does not
186
# get confused when it compares file-names for equality.
187 188 189 190
#
# 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.
191
autoloads: $(LOADDEFS) doit
192
	cd $(lisp) && chmod +w $(AUTOGEN_VCS)
193
	$(setwins_almost); \
194
	echo Directories: $$wins; \
195
	$(emacs) -l autoload \
196
	    --eval '(setq autoload-builtin-package-versions t)' \
197
	    --eval '(setq generated-autoload-file (expand-file-name (unmsys--file-name "$(srcdir)/loaddefs.el")))' \
198
	    -f batch-update-autoloads $$wins
199 200 201 202 203 204 205 206 207 208 209
	$(MAKE) $(MFLAGS) obsolete-autoloads

# The obsolete/ subdirectory is normally not scanned for autoloads.
# Sometimes we still want to autoload something from that directory,
# eg iswitchb.
.PHONY: obsolete-autoloads
obsolete-autoloads: ${lisp}/obsolete/*.el
	$(emacs) -l autoload \
	    --eval '(setq generate-autoload-cookie ";;;###obsolete-autoload")' \
	    --eval '(setq generated-autoload-file (expand-file-name (unmsys--file-name "$(srcdir)/loaddefs.el")))' \
	    -f batch-update-autoloads ${lisp}/obsolete
210

211
# This is required by the bootstrap-emacs target in ../src/Makefile, so
212
# we know that if we have an emacs executable, we also have a subdirs.el.
213
$(lisp)/subdirs.el:
214
	$(MAKE) $(MFLAGS) update-subdirs
215
update-subdirs: doit
216
	$(setwins_for_subdirs); \
217
	for file in $$wins; do \
218
	   $(srcdir)/../build-aux/update-subdirs $$file; \
219 220
	done;

221 222
.PHONY: updates bzr-update update-authors

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

226 227
# 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
228 229 230 231
# 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.
232
bzr-update: compile finder-data custom-deps
233

234 235 236
# Update the AUTHORS file.

update-authors:
237
	$(emacs) -l authors -f batch-update-authors $(top_srcdir)/etc/AUTHORS $(top_srcdir)
238

239 240 241

ETAGS = ../lib-src/etags

242 243 244 245
lisptagsfiles1 = $(srcdir)/*.el
lisptagsfiles2 = $(srcdir)/*/*.el
lisptagsfiles3 = $(srcdir)/*/*/*.el
lisptagsfiles4 = $(srcdir)/*/*/*/*.el
246

247 248 249 250 251
## 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.
252
TAGS: $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4)
253 254 255
	rm -f $@
	touch $@
	echo $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4) | \
256 257 258
	  sed -e 's,$(srcdir)/[^ ]*loaddefs[^ ]*,,g' \
	    -e 's,$(srcdir)/ldefs-boot[^ ]*,,' \
	    -e 's,$(srcdir)/[^ ]*esh-groups.el[^ ]*,,' | \
259 260
	    xargs $(XARGS_LIMIT) "$(ETAGS)" -a -o $@

261

262 263 264 265 266 267 268 269 270
# 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.
271 272
# Use byte-compile-refresh-preloaded to try and work around some of
# the most common problems of not bootstrapping from a clean state.
273
.PHONY: compile-onefile
274 275
compile-onefile:
	@echo Compiling $(THEFILE)
276 277
	@# Use byte-compile-refresh-preloaded to try and work around some of
	@# the most common bootstrapping problems.
278 279
	@$(emacs) $(BYTE_COMPILE_FLAGS) \
		-l bytecomp -f byte-compile-refresh-preloaded \
280
		-f batch-byte-compile $(THEFILE)
281

282 283
# 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
284 285 286 287
# 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
288

289 290 291 292 293 294
.SUFFIXES: .elc .el

# An old-fashioned suffix rule, which, according to the GNU Make manual,
# cannot have prerequisites.
.el.elc:
	@echo Compiling $<
295 296 297
	@# 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.
298
	@$(emacs) $(BYTE_COMPILE_FLAGS) \
299
		-f batch-byte-compile $<
300

301
.PHONY: compile-first compile-main compile compile-always
302

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

305 306 307
# In `compile-main' we could directly do
#    ... | xargs $(MAKE) $(MFLAGS) EMACS="$(EMACS)"
# and it works, but it generates a lot of messages like
308
#    make[2]: gnus/gnus-mlspl.elc is up to date.
309 310 311 312 313 314 315 316 317 318 319 320
# 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!
321
compile-main: leim semantic compile-clean
Glenn Morris's avatar
Glenn Morris committed
322
	@(cd $(lisp) && $(setwins); \
323 324 325 326 327
	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"; \
328
	done | xargs $(XARGS_LIMIT) echo) | \
329 330 331
	while read chunk; do \
	  $(MAKE) $(MFLAGS) compile-targets EMACS="$(EMACS)" TARGETS="$$chunk"; \
	done
332

333 334 335
.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
336
	@cd $(lisp) && $(setwins); \
337
	elcs=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.elc |g'`; \
338
	for el in `echo $$elcs | sed -e 's/\.elc/\.el/g'`; do \
339 340 341 342 343 344
	  if test -f "$$el" -o \! -f "$${el}c"; then :; else \
	    echo rm "$${el}c"; \
	    rm "$${el}c"; \
	  fi \
	done

345
.PHONY: leim semantic
346 347 348
leim:
	cd ../leim && $(MAKE) $(MFLAGS) all EMACS="$(EMACS)"

349 350 351 352 353 354 355 356
# FIXME.  Yuck.
semantic:
	case ${EMACS} in \
	  .*) EMACS="../${EMACS}" ;; \
	   *) EMACS="${EMACS}" ;; \
	esac; \
	cd ../admin/grammars && $(MAKE) $(MFLAGS) all EMACS="$${EMACS}"

357 358 359 360
# 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.
361 362
# 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.
363
compile: $(LOADDEFS) autoloads compile-first
364
	$(MAKE) $(MFLAGS) compile-main EMACS="$(EMACS)"
365

Lute Kamstra's avatar
Lute Kamstra committed
366 367 368
# 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.
369
compile-always: doit
Glenn Morris's avatar
Glenn Morris committed
370
	cd $(lisp) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc
371
	$(MAKE) $(MFLAGS) compile EMACS="$(EMACS)"
Lute Kamstra's avatar
Lute Kamstra committed
372

Glenn Morris's avatar
Glenn Morris committed
373
.PHONY: backup-compiled-files compile-after-backup
374

375 376 377 378
# 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
379
	-mv $(lisp)/elc.tar.gz $(lisp)/elc.tar.gz~
Glenn Morris's avatar
Glenn Morris committed
380
	-tar czf $(lisp)/elc.tar.gz $(lisp)/*.elc $(lisp)/*/*.elc $(lisp)/*/*/*.elc $(lisp)/*/*/*/*.elc
381 382 383

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

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

386 387 388 389 390 391 392
# 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
393
# one core and use make -j#, compile will be (much) faster.
394 395 396 397 398 399 400
# 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.
401
.PHONY: compile-one-process
402
compile-one-process: doit $(LOADDEFS) compile-first $(lisp)/progmodes/cc-mode.elc
403 404
	$(emacs) $(BYTE_COMPILE_FLAGS) \
	    --eval "(batch-byte-recompile-directory 0)" $(lisp)
405

406
# Update MH-E internal autoloads. These are not to be confused with
Glenn Morris's avatar
Glenn Morris committed
407
# the autoloads for the MH-E entry points, which are already in loaddefs.el.
Glenn Morris's avatar
Glenn Morris committed
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423
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

424
.PHONY: mh-autoloads
Glenn Morris's avatar
Glenn Morris committed
425
mh-autoloads: $(MH_E_DIR)/mh-loaddefs.el
426
$(MH_E_DIR)/mh-loaddefs.el: $(MH_E_SRC)
Glenn Morris's avatar
Glenn Morris committed
427
	$(emacs) -l autoload \
428
	   --eval "(setq generate-autoload-cookie \";;;###mh-autoload\")" \
429
	   --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
Glenn Morris's avatar
Glenn Morris committed
430 431
	   -f batch-update-autoloads $(MH_E_DIR)

432
# Update TRAMP internal autoloads. Maybe we could move tramp*.el into
433 434 435
# 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
436 437 438 439 440 441
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
442 443 444 445

$(TRAMP_DIR)/tramp-loaddefs.el: $(TRAMP_SRC)
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###tramp-autoload\")" \
446
	   --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
447 448
	   -f batch-update-autoloads $(TRAMP_DIR)

Glenn Morris's avatar
Glenn Morris committed
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463
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

464
$(CAL_DIR)/cal-loaddefs.el: $(CAL_SRC)
Glenn Morris's avatar
Glenn Morris committed
465 466
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###cal-autoload\")" \
467
	   --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
Glenn Morris's avatar
Glenn Morris committed
468
	   -f batch-update-autoloads $(CAL_DIR)
Glenn Morris's avatar
Glenn Morris committed
469

470
$(CAL_DIR)/diary-loaddefs.el: $(CAL_SRC)
Glenn Morris's avatar
Glenn Morris committed
471 472
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###diary-autoload\")" \
473
	   --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
Glenn Morris's avatar
Glenn Morris committed
474
	   -f batch-update-autoloads $(CAL_DIR)
Glenn Morris's avatar
Glenn Morris committed
475

476
$(CAL_DIR)/hol-loaddefs.el: $(CAL_SRC)
Glenn Morris's avatar
Glenn Morris committed
477 478
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###holiday-autoload\")" \
479
	   --eval "(setq generated-autoload-file (expand-file-name (unmsys--file-name \"$@\")))" \
Glenn Morris's avatar
Glenn Morris committed
480
	   -f batch-update-autoloads $(CAL_DIR)
Glenn Morris's avatar
Glenn Morris committed
481

482 483
.PHONY: bootstrap-clean distclean maintainer-clean

484
bootstrap-clean:
Glenn Morris's avatar
Glenn Morris committed
485
	-cd $(lisp) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc $(AUTOGENEL)
486

487
distclean:
488
	-rm -f ./Makefile $(lisp)/loaddefs.el~
489 490

maintainer-clean: distclean bootstrap-clean
491
	rm -f TAGS
Gerd Moellmann's avatar
Gerd Moellmann committed
492

Glenn Morris's avatar
Glenn Morris committed
493 494 495
.PHONY: check-declare

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

498 499
# Dependencies

500 501 502 503 504 505 506
## 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
507 508 509 510 511 512 513 514
# 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\
515
 $(lisp)/progmodes/cc-vars.elc: \
516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549
   $(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
550

551
# Makefile ends here.