Makefile.in 35.6 KB
Newer Older
1 2 3 4
# DIST: This is the distribution Makefile for Emacs.  configure can
# DIST: make most of the changes to this file you might want, so try
# DIST: that first.

5
# Copyright (C) 1992-2012 Free Software Foundation, Inc.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

# This file is part of GNU Emacs.

# GNU Emacs is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

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

### Commentary:

# make all	to compile and build Emacs.
# make install	to install it.
# make TAGS	to update tags tables.
#
# make clean  or  make mostlyclean
#      Delete all files from the current directory that are normally
#      created by building the program.	 Don't delete the files that
#      record the configuration.  Also preserve files that could be made
#      by building, but normally aren't because the distribution comes
#      with them.
#
#      Delete `.dvi' files here if they are not part of the distribution.
#
# make distclean
#      Delete all files from the current directory that are created by
#      configuring or building the program.  If you have unpacked the
#      source and built the program without creating any other files,
#      `make distclean' should leave only the files that were in the
#      distribution.
#
# make maintainer-clean
#      Delete everything from the current directory that can be
#      reconstructed with this Makefile.  This typically includes
#      everything deleted by distclean, plus more: .elc files,
#      C source files produced by Bison, tags tables, info files,
#      and so on.
#
# make extraclean
#      Still more severe - delete backup and autosave files, too.
#
# make bootstrap
#      Removes all the compiled files to force a new bootstrap from a
#      clean slate, and then build in the normal way.

SHELL = /bin/sh

# This may not work with certain non-GNU make's.  It only matters when
# inheriting a CDPATH not starting with the current directory.
CDPATH=

# If Make doesn't predefine MAKE, set it here.
@SET_MAKE@

# ==================== Things `configure' Might Edit ====================

69
cache_file = @cache_file@
70
CONFIGURE_FLAGS = --cache-file=$(cache_file)
71

72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
CC=@CC@
CFLAGS=@CFLAGS@
LDFLAGS=@LDFLAGS@
CPPFLAGS=@CPPFLAGS@
EXEEXT=@EXEEXT@

### These help us choose version- and architecture-specific directories
### to install files in.

### This should be the number of the Emacs version we're building,
### like `18.59' or `19.0'.
version=@version@

### This should be the name of the configuration we're building Emacs
### for, like `mips-dec-ultrix' or `sparc-sun-sunos'.
configuration=@configuration@

# ==================== Where To Install Things ====================

91 92 93 94
# Location to install Emacs.app under GNUstep / Mac OS X.
# Later values may use these.
ns_appbindir=@ns_appbindir@
ns_appresdir=@ns_appresdir@
95 96
# Either yes or no depending on whether this is a relocatable Emacs.app.
ns_self_contained=@ns_self_contained@
97

98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
# The default location for installation.  Everything is placed in
# subdirectories of this directory.  The default values for many of
# the variables below are expressed in terms of this one, so you may
# not need to change them.  This defaults to /usr/local.
prefix=@prefix@

# Like `prefix', but used for architecture-specific files.
exec_prefix=@exec_prefix@

# Where to install Emacs and other binaries that people will want to
# run directly (like etags).
bindir=@bindir@

# The root of the directory tree for read-only architecture-independent
# data files.  ${datadir}, ${infodir} and ${mandir} are based on this.
datarootdir=@datarootdir@

# Where to install architecture-independent data files.	 ${lispdir}
# and ${etcdir} are subdirectories of this.
datadir=@datadir@

# Where to install and expect the files that Emacs modifies as it
# runs.  These files are all architecture-independent.
# Right now, this is not used.
sharedstatedir=@sharedstatedir@

# Where to install and expect executable files to be run by Emacs
125 126 127 128
# rather than directly by users (and other architecture-dependent
# data, although Emacs does not have any).  The executables
# are actually installed in ${archlibdir}, which is (normally)
# a subdirectory of this.
129 130 131
libexecdir=@libexecdir@

# Where to install Emacs's man pages.
132
# Note they contain cross-references that expect them to be in section 1.
133 134 135
mandir=@mandir@
man1dir=$(mandir)/man1

136
# Where to install and expect the info files describing Emacs.
137
infodir=@infodir@
138
# Info files not in the doc/misc directory (we get those via make echo-info).
139 140
INFO_EXT=@INFO_EXT@
INFO_NONMISC=emacs$(INFO_EXT) eintr$(INFO_EXT) elisp$(INFO_EXT)
141

142 143 144
# If no makeinfo was found and configured --without-makeinfo, "no"; else "yes".
HAVE_MAKEINFO=@HAVE_MAKEINFO@

145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
# Directory for local state files for all programs.
localstatedir=@localstatedir@

# Where to look for bitmap files.
bitmapdir=@bitmapdir@

# Where to find the source code.  The source code for Emacs's C kernel is
# expected to be in ${srcdir}/src, and the source code for Emacs's
# utility programs is expected to be in ${srcdir}/lib-src.  This is
# set by the configure script's `--srcdir' option.

# We use $(srcdir) explicitly in dependencies so as not to depend on VPATH.
srcdir=@srcdir@

# Where the manpage source files are kept.
mansrcdir=$(srcdir)/doc/man

# Tell make where to find source files; this is needed for the makefiles.
VPATH=@srcdir@

# Where to find the application default.
x_default_search_path=@x_default_search_path@

# Where the etc/emacs.desktop file is to be installed.
desktopdir=$(datarootdir)/applications

# Where the etc/images/icons/hicolor directory is to be installed.
icondir=$(datarootdir)/icons

# The source directory for the icon files.
iconsrcdir=$(srcdir)/etc/images/icons

# ==================== Emacs-specific directories ====================

# These variables hold the values Emacs will actually use.  They are
# based on the values of the standard Make variables above.

182
# Where to install the lisp, leim files distributed with
183 184 185 186
# Emacs.  This includes the Emacs version, so that the
# lisp files for different versions of Emacs will install
# themselves in separate directories.
lispdir=@lispdir@
187
leimdir=@leimdir@
188

189 190 191 192 193 194 195
# Directories Emacs should search for standard lisp files.
# The default is ${lispdir}:${leimdir}.
standardlisppath=@standardlisppath@

# Directories Emacs should search for lisp files specific to this
# site (i.e. customizations), before consulting ${standardlisppath}.
# This should be a colon-separated list of directories.
196 197 198 199 200 201
locallisppath=@locallisppath@

# Where Emacs will search to find its lisp files.  Before
# changing this, check to see if your purpose wouldn't
# better be served by changing locallisppath.  This
# should be a colon-separated list of directories.
202
# The default is ${locallisppath}:${standardlisppath}.
203 204 205 206 207 208
lisppath=@lisppath@

# Where Emacs will search for its lisp files while
# building.  This is only used during the process of
# compiling Emacs, to help Emacs find its lisp files
# before they've been installed in their final location.
209 210
# This should be a colon-separated list of directories.
# Normally it points to the lisp/ directory in the sources.
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
buildlisppath=${srcdir}/lisp

# Where to install the other architecture-independent
# data files distributed with Emacs (like the tutorial,
# the cookie recipes and the Zippy database). This path
# usually contains the Emacs version number, so the data
# files for multiple versions of Emacs may be installed
# at once.
etcdir=@etcdir@

# Where to put executables to be run by Emacs rather than
# the user.  This path usually includes the Emacs version
# and configuration name, so that multiple configurations
# for multiple versions of Emacs may be installed at
# once.
archlibdir=@archlibdir@

# Where to put the docstring file.
docdir=@docdir@

# Where to install Emacs game score files.
gamedir=@gamedir@

# ==================== Utility Programs for the Build ====================

# Allow the user to specify the install program.
237 238 239
# Note that if the system does not provide a suitable install,
# configure will use build-aux/install-sh.  Annoyingly, it does
# not use an absolute path.  So we must take care to always run
240
# INSTALL-type commands from the directory containing the Makefile.
241
# This explains (I think) the cd thisdir seen in several install rules.
242 243 244 245 246 247
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_INFO = @INSTALL_INFO@
# By default, we uphold the dignity of our programs.
INSTALL_STRIP =
248
MKDIR_P = @MKDIR_P@
249
LN_S = @LN_S@
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264

# We use gzip to compress installed .el files.
GZIP_PROG = @GZIP_PROG@
# If non-nil, gzip the installed Info and man pages.
GZIP_INFO = @GZIP_INFO@

# ============================= Targets ==============================

# Program name transformation.
TRANSFORM = @program_transform_name@

# What emacs should be called when installed.
EMACS = `echo emacs${EXEEXT} | sed '$(TRANSFORM)'`
EMACSFULL = `echo emacs-${version}${EXEEXT} | sed '$(TRANSFORM)'`

265 266
# Subdirectories to make recursively.
SUBDIR = lib lib-src src lisp leim
267 268

# The subdir makefiles created by config.status.
269
SUBDIR_MAKEFILES_IN = @SUBDIR_MAKEFILES_IN@
Glenn Morris's avatar
Glenn Morris committed
270
SUBDIR_MAKEFILES = `echo $(SUBDIR_MAKEFILES_IN:.in=) | sed 's|$(srcdir)/||g'`
271 272 273

# Subdirectories to install, and where they'll go.
# lib-src's makefile knows how to install it, so we don't do that here.
274 275 276 277
# Directories that cannot simply be copied, eg info,
# are treated separately.
# quail appears twice because in out-of-tree builds, it exists twice.
COPYDIR = ${srcdir}/etc ${srcdir}/lisp ${srcdir}/leim/ja-dic ${srcdir}/leim/quail leim/quail
278
COPYDESTS = $(DESTDIR)${etcdir} $(DESTDIR)${lispdir} $(DESTDIR)${leimdir}/ja-dic $(DESTDIR)${leimdir}/quail $(DESTDIR)${leimdir}/quail
279

280
all: ${SUBDIR}
281

282 283
.PHONY: all ${SUBDIR} blessmail epaths-force FRC

284 285 286
removenullpaths=sed -e 's/^://g' -e 's/:$$//g' -e 's/::/:/g'

# Generate epaths.h from epaths.in.  This target is invoked by `configure'.
287
# See comments in configure.ac for why it is done this way, as opposed
288 289 290
# to just letting configure generate epaths.h from epaths.in in a
# similar way to how Makefile is made from Makefile.in.
epaths-force: FRC
291 292 293
	@(standardlisppath=`echo "${standardlisppath}" | ${removenullpaths}` ; \
	  locallisppath=`echo "${locallisppath}" | ${removenullpaths}` ; \
	  buildlisppath=`echo "${buildlisppath}" | ${removenullpaths}` ; \
294 295 296
	  x_default_search_path=`echo ${x_default_search_path}`; \
	  gamedir=`echo ${gamedir}`; \
	  sed < ${srcdir}/src/epaths.in > epaths.h.$$$$		\
297 298
	  -e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "'"$${standardlisppath}"'";' \
	  -e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${locallisppath}"'";' \
299 300 301 302 303 304 305
	  -e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "'"$${buildlisppath}"'";' \
	  -e 's;\(#.*PATH_EXEC\).*$$;\1 "${archlibdir}";'		\
	  -e 's;\(#.*PATH_INFO\).*$$;\1 "${infodir}";'			\
	  -e 's;\(#.*PATH_DATA\).*$$;\1 "${etcdir}";'			\
	  -e 's;\(#.*PATH_BITMAPS\).*$$;\1 "${bitmapdir}";'		\
	  -e 's;\(#.*PATH_X_DEFAULTS\).*$$;\1 "${x_default_search_path}";' \
	  -e 's;\(#.*PATH_GAME\).*$$;\1 "${gamedir}";' \
306
	  -e 's;\(#.*PATH_DOC\).*$$;\1 "${docdir}";') &&		\
307
	${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
308

Paul Eggert's avatar
Paul Eggert committed
309 310
lib-src src: lib

311 312
src:	lib-src FRC

313 314 315
# We need to build `emacs' in `src' to compile the *.elc files in `lisp'
# and `leim'.
lisp leim: src
316 317

# These targets should be "${SUBDIR} without `src'".
318
lib lib-src lisp leim: Makefile FRC
319
	cd $@ && $(MAKE) all $(MFLAGS)                         \
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339
	  CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
	  LDFLAGS='${LDFLAGS}' MAKE='${MAKE}'

# Pass to src/Makefile.in an additional BOOTSTRAPEMACS variable which
# is either set to bootstrap-emacs (in case bootstrap-emacs has not been
# constructed yet) or the empty string (otherwise).
# src/Makefile.in uses it to implement conditional dependencies, so that
# files that need bootstrap-emacs to be built do not additionally need
# to be kept fresher than bootstrap-emacs.  Otherwise changing a single
# file src/foo.c forces dumping a new bootstrap-emacs, then re-byte-compiling
# all preloaded elisp files, and only then dump the actual src/emacs, which
# is not wrong, but is overkill in 99.99% of the cases.
src: Makefile FRC
	boot=bootstrap-emacs$(EXEEXT);                         \
	if [ ! -x "src/$$boot" ]; then                                     \
	    cd $@; $(MAKE) all $(MFLAGS)                                   \
	      CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}'         \
	      LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' BOOTSTRAPEMACS="$$boot"; \
	fi;
	if [ -r .bzr/checkout/dirstate ]; then 			\
340
	    vcswitness="`pwd`/.bzr/checkout/dirstate"; 	\
341 342 343 344 345 346 347
	fi; 							\
	cd $@; $(MAKE) all $(MFLAGS)                           \
	  CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
	  LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' BOOTSTRAPEMACS=""	\
	  VCSWITNESS="$$vcswitness"

blessmail: Makefile src FRC
348
	cd lib-src && $(MAKE) maybe-blessmail $(MFLAGS) \
349 350 351 352 353
	  MAKE='${MAKE}' archlibdir='$(archlibdir)'

# We used to have one rule per */Makefile.in, but that leads to race
# conditions with parallel makes, so let's assume that the time stamp on
# ./Makefile is representative of the time stamp on all the other Makefiles.
354 355 356 357
#
# config.status overrides MAKEFILE_NAME with a bogus name when creating
# src/epaths.h, so that 'make epaths-force' does not recursively invoke
# config.status and overwrite config.status while executing it (Bug#11214).
358 359 360 361
#
# 'make bootstrap' overrides MAKEFILE_NAME to a nonexistent file but
# then attempts to build that file.  This forces 'Makefile', 'lib/Makefile',
# etc. to be built without running into similar recursion problems.
362 363
MAKEFILE_NAME = Makefile
$(MAKEFILE_NAME): config.status $(srcdir)/src/config.in \
364
          $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN) $(srcdir)/src/lisp.mk
365
	MAKE='$(MAKE)' ./config.status
366

367 368
# Don't erase these files if make is interrupted while refreshing them.
.PRECIOUS: Makefile config.status
369

370
config.status: ${srcdir}/configure ${srcdir}/lisp/version.el
371 372 373
	if [ -x ./config.status ]; then	\
	    ./config.status --recheck;	\
	else				\
374
	    $(srcdir)/configure $(CONFIGURE_FLAGS); \
375
	fi
376

377
AUTOCONF_INPUTS = $(srcdir)/configure.ac $(srcdir)/aclocal.m4
378 379 380 381

$(srcdir)/configure: $(AUTOCONF_INPUTS)
	cd ${srcdir} && autoconf

382
ACLOCAL_INPUTS = $(srcdir)/m4/gnulib-comp.m4
Paul Eggert's avatar
Paul Eggert committed
383 384 385
$(srcdir)/aclocal.m4: $(ACLOCAL_INPUTS)
	cd $(srcdir) && aclocal -I m4

386 387
AUTOMAKE_INPUTS = $(srcdir)/aclocal.m4 $(srcdir)/lib/Makefile.am \
  $(srcdir)/lib/gnulib.mk
Paul Eggert's avatar
Paul Eggert committed
388 389
$(srcdir)/lib/Makefile.in: $(AUTOMAKE_INPUTS)
	cd $(srcdir) && automake --gnu -a -c lib/Makefile
390 391 392 393

# Regenerate files that this makefile would have made, if this makefile
# had been built by Automake.  The name 'am--refresh' is for
# compatibility with subsidiary Automake-generated makefiles.
394
am--refresh: $(srcdir)/aclocal.m4 $(srcdir)/configure $(srcdir)/src/config.in
395
.PHONY: am--refresh
Paul Eggert's avatar
Paul Eggert committed
396

397 398 399 400 401 402 403 404 405 406 407 408 409
$(srcdir)/src/config.in: $(srcdir)/src/stamp-h.in
	@ # Usually, there's no need to rebuild src/config.in just
	@ # because stamp-h.in has changed (since building stamp-h.in
	@ # refreshes config.in as well), but if config.in is missing
	@ # then we really need to do something more.
	[ -r "$@" ] || ( cd ${srcdir} && autoheader )
$(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS)
	cd ${srcdir} && autoheader
	rm -f $(srcdir)/src/stamp-h.in
	echo timestamp > $(srcdir)/src/stamp-h.in

# ==================== Installation ====================

410 411 412
.PHONY: install install-arch-dep install-arch-indep install-doc install-info
.PHONY: install-man install-etc install-strip uninstall

413 414 415 416
## If we let lib-src do its own installation, that means we
## don't have to duplicate the list of utilities to install in
## this Makefile as well.

417
install: all install-arch-indep install-doc install-arch-dep blessmail
418 419
	@true

420
## Ensure that $subdir contains a subdirs.el file.
421 422 423 424
## Here and elsewhere, we set the umask so that any created files are
## world-readable.
## TODO it might be good to warn about non-standard permissions of
## pre-existing directories, but that does not seem easy.
425 426 427
write_subdir=if [ -f $${subdir}/subdirs.el ]; \
	then true; \
	else \
428 429
	  umask 022; \
	  ${MKDIR_P} $${subdir}; \
430 431 432
	  (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \
	   echo "    (normal-top-level-add-subdirs-to-load-path))") \
	    > $${subdir}/subdirs.el; \
433
	fi
434

435
### Install the executables that were compiled specifically for this machine.
436 437
### We do install-arch-indep first because the executable needs the
### Lisp files and DOC file to work properly.
438
install-arch-dep: src install-arch-indep install-doc
439
	umask 022; ${MKDIR_P} $(DESTDIR)${bindir}
440
	cd lib-src && \
441 442 443
	  $(MAKE) install $(MFLAGS) prefix=${prefix} \
	    exec_prefix=${exec_prefix} bindir=${bindir} \
	    libexecdir=${libexecdir} archlibdir=${archlibdir} \
444
	    INSTALL_STRIP=${INSTALL_STRIP}
445
	if test "${ns_self_contained}" = "no"; then \
446 447
	  ${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} $(DESTDIR)${bindir}/$(EMACSFULL) || exit 1 ; \
	  chmod 1755 $(DESTDIR)${bindir}/$(EMACSFULL) ; \
448 449 450 451
	  if test "x${NO_BIN_LINK}" = x; then \
	    rm -f $(DESTDIR)${bindir}/$(EMACS) ; \
	    cd $(DESTDIR)${bindir} && $(LN_S) $(EMACSFULL) $(EMACS); \
	  fi; \
452
	else \
453 454 455
	  subdir=${ns_appresdir}/site-lisp; \
	  ${write_subdir} || exit 1; \
	  rm -rf ${ns_appresdir}/share; \
456
	fi
457

458
## In the share directory, we are deleting:
459 460
## applications (with emacs.desktop, also found in etc/)
## emacs (basically empty except for unneeded site-lisp directories)
461 462
## icons (duplicates etc/images/icons/hicolor)

Glenn Morris's avatar
Glenn Morris committed
463 464 465 466
## This is install-etc for everything except self-contained-ns builds.
## For them, it is empty.
INSTALL_ARCH_INDEP_EXTRA = @INSTALL_ARCH_INDEP_EXTRA@

467 468 469 470 471 472 473 474
## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html
## Needs to be the user running install, so configure can't set it.
set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \
	  `id -un 2> /dev/null`; do \
	  [ -n "$${installuser}" ] && break ; \
	done

### Install the files that are machine-independent.
475 476
### Most of them come straight from the distribution; the exception is
### the DOC file, which is copied from the build directory.
477

478 479 480 481 482
## We delete each directory in ${COPYDESTS} before we copy into it;
## that way, we can reinstall over directories that have been put in
## place with their files read-only (perhaps because they are checked
## into RCS).  In order to make this safe, we make sure that the
## source exists and is distinct from the destination.
483

484 485 486 487 488 489 490 491
## We delete etc/DOC* because there may be irrelevant DOC files from
## other builds in the source directory.  This is ok because we just
## deleted the entire installed etc/ directory and recreated it.
## install-doc installs the relevant DOC.

## Note that the Makefiles in the etc directory are potentially useful
## in an installed Emacs, so should not be excluded.

492 493 494 495 496 497 498
## I'm not sure creating locallisppath here serves any useful purpose.
## If it has the default value, then the later write_subdir commands
## will ensure all these components exist.
## This will only do something if locallisppath has a non-standard value.
## Is it really Emacs's job to create those directories?
## Should we also be ensuring they contain subdirs.el files?
## It would be easy to do, just use write_subdir.
Glenn Morris's avatar
Glenn Morris committed
499 500 501 502 503 504

## Note that we use tar instead of plain old cp -R/-r because the latter
## is apparently not portable (even in 2012!).
## http://lists.gnu.org/archive/html/emacs-devel/2012-05/msg00278.html
## I have no idea which platforms Emacs supports where cp -R does not
## work correctly, and therefore no idea when tar can be replaced.
Glenn Morris's avatar
Glenn Morris committed
505 506
## See also these comments from 2004 about cp -r working fine:
## http://lists.gnu.org/archive/html/autoconf-patches/2004-11/msg00005.html
507
install-arch-indep: lisp leim install-info install-man ${INSTALL_ARCH_INDEP_EXTRA}
508
	umask 022 ; \
509 510 511 512 513
	locallisppath='${locallisppath}'; \
	IFS=:; \
	for d in $$locallisppath; do \
	  ${MKDIR_P} "$(DESTDIR)$$d"; \
	done
514 515 516 517
	-set ${COPYDESTS} ; \
	unset CDPATH; \
	$(set_installuser); \
	for dir in ${COPYDIR} ; do \
518
	  [ -d $${dir} ] || exit 1 ; \
519
	  dest=$$1 ; shift ; \
520
	  [ -d $${dest} ] && \
521
	    [ `cd $${dest} && /bin/pwd` = `cd $${dir} && /bin/pwd` ] && \
522
	    continue ; \
523 524 525 526 527 528 529
	  if [ "$${dir}" = "leim/quail" ]; then \
	    [ `cd $${dir} && /bin/pwd` = `cd ${srcdir}/leim/quail && /bin/pwd` ] && \
	      continue ; \
	  else \
	    rm -rf $${dest} ; \
	    umask 022; ${MKDIR_P} $${dest} ; \
	  fi ; \
530 531 532 533 534 535
	  echo "Copying $${dir} to $${dest}..." ; \
	  (cd $${dir}; tar -chf - . ) \
	    | (cd $${dest}; umask 022; \
	       tar -xvf - && cat > /dev/null) || exit 1; \
	  [ "$${dir}" != "${srcdir}/etc" ] || rm -f $${dest}/DOC* ; \
	  for subdir in `find $${dest} -type d -print` ; do \
536 537 538 539 540 541 542 543
	    rm -f $${subdir}/.gitignore ; \
	    rm -f $${subdir}/.arch-inventory ; \
	    rm -f $${subdir}/.DS_Store ; \
	    rm -f $${subdir}/\#* ; \
	    rm -f $${subdir}/.\#* ; \
	    rm -f $${subdir}/*~ ; \
	    rm -f $${subdir}/*.orig ; \
	    rm -f $${subdir}/ChangeLog* ; \
544
	    [ "$${dir}" != "${srcdir}/etc" ] && \
545
	      rm -f $${subdir}/[mM]akefile*[.-]in $${subdir}/[mM]akefile ; \
546 547
	  done ; \
	  find $${dest} -exec chown $${installuser} {} ';' ;\
548
	done
549 550
	-rm -f $(DESTDIR)${leimdir}/leim-list.el
	${INSTALL_DATA} leim/leim-list.el $(DESTDIR)${leimdir}/leim-list.el
551
	-rm -f $(DESTDIR)${lispdir}/subdirs.el
552
	umask 022; $(srcdir)/build-aux/update-subdirs $(DESTDIR)${lispdir}
553 554 555 556
	subdir=$(DESTDIR)${datadir}/emacs/${version}/site-lisp ; \
	  ${write_subdir}
	subdir=$(DESTDIR)${datadir}/emacs/site-lisp ; \
	  ${write_subdir} || true
557 558 559
	[ -z "${GZIP_PROG}" ] || \
	  ( echo "Compressing *.el ..." ; \
	    unset CDPATH; \
560 561 562 563 564 565 566
	    thisdir=`/bin/pwd`; \
	    for dir in $(DESTDIR)${lispdir} $(DESTDIR)${leimdir}; do \
	      cd $${thisdir} ; \
	      cd $${dir} || exit 1 ; \
	      for f in `find . -name "*.elc" -print`; do \
	        ${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \
	      done ; \
567
	    done )
568 569
	-chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS}

570 571
# The last chmod isn't needed at present.

572 573 574 575
## We install only the relevant DOC file if possible
## (ie DOC-${version}.buildnumber), otherwise DOC-${version}*.
## (Note "otherwise" is inaccurate since 2009-08-23.)

576 577
## Note that install-arch-indep deletes and recreates the entire
## installed etc/ directory, so we need it to run before this does.
578
install-doc: src install-arch-indep
579
	-unset CDPATH; \
Glenn Morris's avatar
Glenn Morris committed
580
	umask 022; ${MKDIR_P} $(DESTDIR)${docdir} ; \
581
	if [ `cd ./etc; /bin/pwd` != `cd $(DESTDIR)${docdir}; /bin/pwd` ]; \
582 583 584 585 586 587 588 589 590
	then \
	   fullversion=`./src/emacs --version | sed -n '1 s/GNU Emacs *//p'`; \
	   if [ -f "./etc/DOC-$${fullversion}" ]; \
	   then \
	     docfile="DOC-$${fullversion}"; \
	   else \
	     docfile="DOC"; \
	   fi; \
	   echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \
591
	   ${INSTALL_DATA} etc/$${docfile} $(DESTDIR)${docdir}/$${docfile}; \
592 593
	   $(set_installuser); \
	     chown $${installuser} $(DESTDIR)${docdir}/$${docfile} || true ; \
594
	else true; fi
595 596

install-info: info
597
	umask 022; ${MKDIR_P} $(DESTDIR)${infodir}
598 599
	-unset CDPATH; \
	thisdir=`/bin/pwd`; \
600
	[ `cd ${srcdir}/info && /bin/pwd` = `cd $(DESTDIR)${infodir} && /bin/pwd` ] || \
601
	  (cd $(DESTDIR)${infodir};  \
602
	   [ -f dir ] || \
603
	     (cd $${thisdir}; \
604
	      ${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir) ; \
605
	   info_misc=`cd $${thisdir}/doc/misc; ${MAKE} echo-info | sed '/ing directory/d'`; \
606
	   cd ${srcdir}/info ; \
607
	   for elt in ${INFO_NONMISC} $${info_misc}; do \
608
	      test "$(HAVE_MAKEINFO)" = "no" && test ! -f $$elt && continue; \
609
	      for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \
610 611
	       (cd $${thisdir}; \
	        ${INSTALL_DATA} ${srcdir}/info/$$f $(DESTDIR)${infodir}/$$f); \
612 613 614
	        ( [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ] ) || continue ; \
	        rm -f $(DESTDIR)${infodir}/$$f.gz; \
	        ${GZIP_PROG} -9n $(DESTDIR)${infodir}/$$f; \
615
	      done; \
616 617
	     (cd $${thisdir}; \
	      ${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \
618
	   done)
619 620

install-man:
621
	umask 022; ${MKDIR_P} $(DESTDIR)${man1dir}
622 623
	thisdir=`/bin/pwd`; \
	cd ${mansrcdir}; \
624
	for page in *.1; do \
625
	  dest=`echo "$${page}" | sed '$(TRANSFORM)'`; \
626
	  (cd $${thisdir}; \
627
	   ${INSTALL_DATA} ${mansrcdir}/$${page} $(DESTDIR)${man1dir}/$${dest}); \
628
	  ( [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ] ) || continue ; \
629 630
	  rm -f $(DESTDIR)${man1dir}/$${dest}.gz; \
	  ${GZIP_PROG} -9n $(DESTDIR)${man1dir}/$${dest}; \
631 632 633
	done

## Install those items from etc/ that need to end up elsewhere.
634 635 636 637

# Like EMACS, but without EXEEXT.
emacs_transform = `echo emacs | sed '$(TRANSFORM)'`

Glenn Morris's avatar
Glenn Morris committed
638 639
install-etc:
	umask 022; ${MKDIR_P} $(DESTDIR)${desktopdir}
640
	tmp=etc/emacs.tmpdesktop; rm -f $${tmp}; \
641 642
	sed -e '/^Exec=emacs/ s/emacs/${emacs_transform}/' \
	  -e '/^Icon=emacs/ s/emacs/${emacs_transform}/' \
643
	  ${srcdir}/etc/emacs.desktop > $${tmp}; \
644
	${INSTALL_DATA} $${tmp} $(DESTDIR)${desktopdir}/${emacs_transform}.desktop; \
645
	rm -f $${tmp}
646
	thisdir=`/bin/pwd`; \
Glenn Morris's avatar
Glenn Morris committed
647 648 649
	cd ${iconsrcdir} || exit 1; umask 022 ; \
	for dir in */*/apps */*/mimetypes; do \
	  [ -d $${dir} ] || continue ; \
650
	  ( cd $${thisdir}; ${MKDIR_P} $(DESTDIR)${icondir}/$${dir} ) ; \
651
	  for icon in $${dir}/emacs[.-]*; do \
Glenn Morris's avatar
Glenn Morris committed
652
	    [ -r $${icon} ] || continue ; \
653
	    dest=`echo "$${icon}" | sed -e 's|.*/||' -e '$(TRANSFORM)'` ; \
654
	    ( cd $${thisdir}; \
655
	      ${INSTALL_DATA} ${iconsrcdir}/$${icon} $(DESTDIR)${icondir}/$${dir}/$${dest} ) \
656
	    || exit 1; \
Glenn Morris's avatar
Glenn Morris committed
657
	  done ; \
658 659 660 661
	done

### Build Emacs and install it, stripping binaries while installing them.
install-strip:
662
	$(MAKE) $(MFLAGS) INSTALL_STRIP=-s install
663 664 665 666 667 668

### Delete all the installed files that the `install' target would
### create (but not the noninstalled files such as `make all' would create).
###
### Don't delete the lisp and etc directories if they're in the source tree.
uninstall:
669
	cd lib-src && 					\
670 671
	 $(MAKE) $(MFLAGS) uninstall			\
	    prefix=${prefix} exec_prefix=${exec_prefix}	\
672
	    bindir=${bindir} libexecdir=${libexecdir} archlibdir=${archlibdir}
673 674 675
	-unset CDPATH; \
	for dir in $(DESTDIR)${lispdir} $(DESTDIR)${etcdir} ; do 	\
	  if [ -d $${dir} ]; then			\
676 677
	    case `cd $${dir} ; /bin/pwd` in		\
	      `cd ${srcdir} ; /bin/pwd`* ) ;;		\
678 679 680 681 682 683 684 685 686 687
	      * ) rm -rf $${dir} ;;			\
	    esac ;					\
	    case $${dir} in				\
	      $(DESTDIR)${datadir}/emacs/${version}/* )		\
	        rm -rf $(DESTDIR)${datadir}/emacs/${version}	\
	      ;;					\
	    esac ;					\
	  fi ;						\
	done
	-rm -rf $(DESTDIR)${libexecdir}/emacs/${version}
688
	thisdir=`/bin/pwd`; \
689 690 691
	(info_misc=`cd doc/misc; ${MAKE} echo-info | sed '/ing directory/d'`; \
	  cd $(DESTDIR)${infodir} && \
	  for elt in ${INFO_NONMISC} $${info_misc}; do \
692 693
	    (cd $${thisdir}; \
	     $(INSTALL_INFO) --remove --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \
694 695
	    if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \
	       ext=.gz; else ext=; fi; \
696
	    rm -f $$elt$$ext $$elt-[1-9]$$ext $$elt-[1-9][0-9]$$ext; \
697
	  done;)
698 699
	(if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \
	    ext=.gz; else ext=; fi; \
700 701
	 cd ${mansrcdir} && for page in *.1; do \
	   rm -f $(DESTDIR)${man1dir}/$$page$$ext; done )
702 703 704 705 706 707 708 709 710 711 712 713
	(cd $(DESTDIR)${bindir}  && rm -f $(EMACSFULL) $(EMACS))
	(cd $(DESTDIR)${icondir} && rm -f hicolor/*x*/apps/emacs.png hicolor/*x*/apps/emacs22.png hicolor/scalable/apps/emacs.svg hicolor/scalable/mimetypes/emacs-document.svg )
	-rm -f $(DESTDIR)${desktopdir}/emacs.desktop
	for file in snake-scores tetris-scores; do \
	  file=$(DESTDIR)${gamedir}/$${file}; \
	  [ -s $${file} ] || rm -f $$file; \
	done

FRC:

# ==================== Cleaning up and miscellanea ====================

714
.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean extraclean
715 716 717 718 719 720 721 722 723 724

### `mostlyclean'
###      Like `clean', but may refrain from deleting a few files that people
###      normally don't want to recompile.  For example, the `mostlyclean'
###      target for GCC does not delete `libgcc.a', because recompiling it
###      is rarely necessary and takes a lot of time.
mostlyclean: FRC
	(cd src;      $(MAKE) $(MFLAGS) mostlyclean)
	(cd oldXMenu; $(MAKE) $(MFLAGS) mostlyclean)
	(cd lwlib;    $(MAKE) $(MFLAGS) mostlyclean)
Paul Eggert's avatar
Paul Eggert committed
725
	(cd lib;      $(MAKE) $(MFLAGS) mostlyclean)
726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741
	(cd lib-src;  $(MAKE) $(MFLAGS) mostlyclean)
	-(cd doc/emacs &&   $(MAKE) $(MFLAGS) mostlyclean)
	-(cd doc/misc &&   $(MAKE) $(MFLAGS) mostlyclean)
	-(cd doc/lispref &&   $(MAKE) $(MFLAGS) mostlyclean)
	-(cd doc/lispintro &&   $(MAKE) $(MFLAGS) mostlyclean)
	(cd leim;     $(MAKE) $(MFLAGS) mostlyclean)

### `clean'
###      Delete all files from the current directory that are normally
###      created by building the program.  Don't delete the files that
###      record the configuration.  Also preserve files that could be made
###      by building, but normally aren't because the distribution comes
###      with them.
###
###      Delete `.dvi' files here if they are not part of the distribution.
clean: FRC
742
	-rm -f etc/emacs.tmpdesktop
743 744 745
	(cd src;      $(MAKE) $(MFLAGS) clean)
	(cd oldXMenu; $(MAKE) $(MFLAGS) clean)
	(cd lwlib;    $(MAKE) $(MFLAGS) clean)
Paul Eggert's avatar
Paul Eggert committed
746
	(cd lib;      $(MAKE) $(MFLAGS) clean)
747 748 749 750 751 752
	(cd lib-src;  $(MAKE) $(MFLAGS) clean)
	-(cd doc/emacs &&   $(MAKE) $(MFLAGS) clean)
	-(cd doc/misc &&   $(MAKE) $(MFLAGS) clean)
	-(cd doc/lispref &&   $(MAKE) $(MFLAGS) clean)
	-(cd doc/lispintro &&   $(MAKE) $(MFLAGS) clean)
	(cd leim;     $(MAKE) $(MFLAGS) clean)
753
	(cd nextstep && $(MAKE) $(MFLAGS) clean)
754 755 756 757 758 759 760 761 762 763 764 765 766

### `bootclean'
###      Delete all files that need to be remade for a clean bootstrap.
top_bootclean=\
	rm -f config.cache config.log
### `distclean'
###      Delete all files from the current directory that are created by
###      configuring or building the program.  If you have unpacked the
###      source and built the program without creating any other files,
###      `make distclean' should leave only the files that were in the
###      distribution.
top_distclean=\
	${top_bootclean}; \
767
	rm -f config.status config.log~ Makefile stamp-h1 ${SUBDIR_MAKEFILES}
768 769 770 771
distclean: FRC
	(cd src;      $(MAKE) $(MFLAGS) distclean)
	(cd oldXMenu; $(MAKE) $(MFLAGS) distclean)
	(cd lwlib;    $(MAKE) $(MFLAGS) distclean)
Paul Eggert's avatar
Paul Eggert committed
772
	(cd lib;      $(MAKE) $(MFLAGS) distclean)
773 774 775 776 777 778 779
	(cd lib-src;  $(MAKE) $(MFLAGS) distclean)
	(cd doc/emacs &&    $(MAKE) $(MFLAGS) distclean)
	(cd doc/misc &&    $(MAKE) $(MFLAGS) distclean)
	(cd doc/lispref &&    $(MAKE) $(MFLAGS) distclean)
	(cd doc/lispintro &&    $(MAKE) $(MFLAGS) distclean)
	(cd leim;     $(MAKE) $(MFLAGS) distclean)
	(cd lisp;     $(MAKE) $(MFLAGS) distclean)
780
	(cd nextstep && $(MAKE) $(MFLAGS) distclean)
781 782 783 784 785 786 787 788 789
	${top_distclean}

### `bootstrap-clean'
###      Delete everything that can be reconstructed by `make' and that
###      needs to be deleted in order to force a bootstrap from a clean state.
bootstrap-clean: FRC
	(cd src;      $(MAKE) $(MFLAGS) bootstrap-clean)
	(cd oldXMenu; $(MAKE) $(MFLAGS) maintainer-clean)
	(cd lwlib;    $(MAKE) $(MFLAGS) maintainer-clean)
Paul Eggert's avatar
Paul Eggert committed
790
	(cd lib;      $(MAKE) $(MFLAGS) maintainer-clean)
791 792 793 794 795 796 797
	(cd lib-src;  $(MAKE) $(MFLAGS) maintainer-clean)
	-(cd doc/emacs &&   $(MAKE) $(MFLAGS) maintainer-clean)
	-(cd doc/misc &&   $(MAKE) $(MFLAGS) maintainer-clean)
	-(cd doc/lispref &&   $(MAKE) $(MFLAGS) maintainer-clean)
	-(cd doc/lispintro &&   $(MAKE) $(MFLAGS) maintainer-clean)
	(cd leim;     $(MAKE) $(MFLAGS) maintainer-clean)
	(cd lisp;     $(MAKE) $(MFLAGS) bootstrap-clean)
798
	(cd nextstep && $(MAKE) $(MFLAGS) maintainer-clean)
799
	[ ! -f config.log ] || mv -f config.log config.log~
800 801 802 803 804 805 806 807 808 809 810 811 812
	${top_bootclean}

### `maintainer-clean'
###      Delete everything from the current directory that can be
###      reconstructed with this Makefile.  This typically includes
###      everything deleted by distclean, plus more: C source files
###      produced by Bison, tags tables, info files, and so on.
###
###      One exception, however: `make maintainer-clean' should not delete
###      `configure' even if `configure' can be remade using a rule in the
###      Makefile.  More generally, `make maintainer-clean' should not delete
###      anything that needs to exist in order to run `configure' and then
###      begin to build the program.
Paul Eggert's avatar
Paul Eggert committed
813 814
top_maintainer_clean=\
	${top_distclean}; \
815
	rm -fr autom4te.cache
816 817 818
maintainer-clean: bootstrap-clean FRC
	(cd src;      $(MAKE) $(MFLAGS) maintainer-clean)
	(cd lisp;     $(MAKE) $(MFLAGS) maintainer-clean)
Paul Eggert's avatar
Paul Eggert committed
819
	${top_maintainer_clean}
820 821 822 823 824 825

### This doesn't actually appear in the coding standards, but Karl
### says GCC supports it, and that's where the configuration part of
### the coding standards seem to come from.  It's like distclean, but
### it deletes backup and autosave files too.
extraclean:
826
	for i in ${SUBDIR}; do (cd $$i; $(MAKE) $(MFLAGS) extraclean); done
Paul Eggert's avatar
Paul Eggert committed
827
	${top_maintainer_clean}
828 829 830 831 832
	-rm -f config-tmp-*
	-rm -f *~ \#*

# The src subdir knows how to do the right thing
# even when the build directory and source dir are different.
833
.PHONY: TAGS tags
Paul Eggert's avatar
Paul Eggert committed
834
TAGS tags: lib lib-src src
835
	cd src; $(MAKE) $(MFLAGS) tags
836 837

check:
838
	@if test ! -d test/automated; then \
839 840 841 842 843
	  echo "You do not seem to have the test/ directory."; \
	  echo "Maybe you are using a release tarfile, rather than a repository checkout."; \
	else \
	  cd test/automated && $(MAKE) $(MFLAGS) check; \
	fi
844 845 846 847

dist:
	cd ${srcdir}; ./make-dist

848
.PHONY: info dvi dist check html info-real force-info check-info-dir
849

850
info-real:
851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868
	(cd doc/emacs; $(MAKE) $(MFLAGS) info)
	(cd doc/misc; $(MAKE) $(MFLAGS) info)
	(cd doc/lispref; $(MAKE) $(MFLAGS) info)
	(cd doc/lispintro; $(MAKE) $(MFLAGS) info)

force-info:
# Note that man/Makefile knows how to put the info files in $(srcdir),
# so we can do ok running make in the build dir.
# This used to have a clause that exited with an error if MAKEINFO = no.
# But it is inappropriate to do so without checking if makeinfo is
# actually needed - it is not if the info files are up-to-date.  (Bug#3982)
# Only the doc/*/Makefiles can decide that, so we let those rules run
# and give a standard error if makeinfo is needed but missing.
# While it would be nice to give a more detailed error message, that
# would require changing every rule in doc/ that builds an info file,
# and it's not worth it.  This case is only relevant if you download a
# release, then change the .texi files.
info: force-info
869
	@if test "$(HAVE_MAKEINFO)" = "no"; then \
870 871 872 873 874 875 876 877 878 879 880 881 882 883
	  echo "Configured --without-makeinfo, not building manuals" ; \
	else \
	  $(MAKE) $(MFLAGS) info-real ; \
	fi

# The info/dir file must be updated by hand when new manuals are added.
check-info-dir: info
	cd info ; \
	missing= ; \
	for file in *; do \
	  test -f "$${file}" || continue ; \
	  case $${file} in \
	    *-[0-9]*|COPYING|dir) continue ;; \
	  esac ; \
884
	  file=`echo $${file} | sed 's/\.info//'` ; \
885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905
	  grep -q -F ": ($${file})." dir || missing="$${missing} $${file}" ; \
	done ; \
	if test -n "$${missing}"; then \
	  echo "Missing info/dir entries: $${missing}" ; \
	  exit 1 ; \
	fi ; \
	echo "info/dir is OK"

dvi:
	(cd doc/emacs; $(MAKE) $(MFLAGS) dvi)
	(cd doc/misc; $(MAKE) $(MFLAGS) dvi)
	(cd doc/lispref; $(MAKE) $(MFLAGS) elisp.dvi)
	(cd doc/lispintro; $(MAKE) $(MFLAGS) emacs-lisp-intro.dvi)

#### Bootstrapping.

### This first cleans the lisp subdirectory, removing all compiled
### Lisp files.  Then re-run make to build all the files anew.

.PHONY: bootstrap

906
# Bootstrapping does the following:
907
#  * Remove files to start from a bootstrap-clean slate.
908
#  * Run autogen.sh, falling back on copy_autogen if autogen.sh fails.
909
#  * Rebuild Makefile, to update the build procedure itself.
910
#  * Do the actual build.
911
bootstrap: bootstrap-clean FRC
912
	cd $(srcdir) && { ./autogen.sh || autogen/copy_autogen; }
913
	$(MAKE) $(MFLAGS) MAKEFILE_NAME=force-Makefile force-Makefile
914 915 916 917 918
	$(MAKE) $(MFLAGS) info all

.PHONY: check-declare

check-declare:
919
	@if [ ! -f $(srcdir)/src/emacs ]; then \
920 921 922 923 924
	  echo "You must build Emacs to use this command"; \
	  exit 1; \
	fi
	(cd leim; $(MAKE) $(MFLAGS) $@)
	(cd lisp; $(MAKE) $(MFLAGS) $@)