Makefile.in 17 KB
Newer Older
Jim Blandy's avatar
Jim Blandy committed
1 2 3
# 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.
Jim Blandy's avatar
Jim Blandy committed
4

Jim Blandy's avatar
Jim Blandy committed
5 6
# make all	to compile and build Emacs.
# make install	to install it.
7
# make TAGS	to update tags tables.
Jim Blandy's avatar
Jim Blandy committed
8
#
9 10
# make clean  or  make mostlyclean
#      Delete all files from the current directory that are normally
11
#      created by building the program.	 Don't delete the files that
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#      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 realclean
#      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.
#
# make extraclean
#      Still more severe - delete backup and autosave files, too.
Jim Blandy's avatar
Jim Blandy committed
33 34

SHELL = /bin/sh
35
MAKE = make  # BSD doesn't have it as a default.
Jim Blandy's avatar
Jim Blandy committed
36

37
# ==================== Things `configure' Might Edit ====================
Jim Blandy's avatar
Jim Blandy committed
38

39
CC=@CC@
40
CPP=@CPP@
41
C_SWITCH_SYSTEM=@c_switch_system@
42
ALLOCA=@ALLOCA@
43 44
LN_S=@LN_S@
CFLAGS=@CFLAGS@
45
C_SWITCH_X_SITE=@C_SWITCH_X_SITE@
Jim Blandy's avatar
Jim Blandy committed
46
LD_SWITCH_X_SITE=@LD_SWITCH_X_SITE@
Jim Blandy's avatar
Jim Blandy committed
47
YACC=@YACC@
48 49 50 51 52 53

### 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'.
54
version=@version@
55 56 57

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

### Libraries which should be edited into lib-src/Makefile.
libsrc_libs=@libsrc_libs@
62

63 64
# ==================== Where To Install Things ====================

Jim Blandy's avatar
Jim Blandy committed
65
# The default location for installation.  Everything is placed in
66 67
# subdirectories of this directory.  The default values for many of
# the variables below are expressed in terms of this one, so you may
68 69
# not need to change them.  This defaults to /usr/local.
prefix=@prefix@
Jim Blandy's avatar
Jim Blandy committed
70

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

Jim Blandy's avatar
Jim Blandy committed
74 75
# Where to install Emacs and other binaries that people will want to
# run directly (like etags).
76
bindir=@bindir@
Jim Blandy's avatar
Jim Blandy committed
77

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

# Where to install and expect the files that Emacs modifies as it
83
# runs.	 These files are all architecture-independent. Right now, the
84 85
# only such data is the locking directory; ${lockdir} is a
# subdirectory of this.
86
statedir=@statedir@
87 88 89

# Where to install and expect executable files to be run by Emacs
# rather than directly by users, and other architecture-dependent
90
# data.	 ${archlibdir} is a subdirectory of this.
91
libdir=${exec_prefix}/lib
92 93

# Where to install Emacs's man pages, and what extension they should have.
94
mandir=@mandir@
95 96 97 98 99 100
manext=.1

# Where to install and expect the info files describing Emacs.	In the
# past, this defaulted to a subdirectory of ${prefix}/lib/emacs, but
# since there are now many packages documented with the texinfo
# system, it is inappropriate to imply that it is part of Emacs.
101
infodir=@infodir@
Jim Blandy's avatar
Jim Blandy committed
102

103
# Where to find the source code.  The source code for Emacs's C kernel is
104 105 106
# 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.
107
srcdir=@srcdir@
Jim Blandy's avatar
Jim Blandy committed
108

Roland McGrath's avatar
Roland McGrath committed
109 110 111
# Tell make where to find source files; this is needed for the makefiles.
VPATH=@srcdir@

112 113
# ==================== Emacs-specific directories ====================

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

117 118 119 120 121
# Where to install the lisp files distributed with
# Emacs.  This includes the Emacs version, so that the
# lisp files for different versions of Emacs will install
# themselves in separate directories.
lispdir=@lispdir@
122

123 124 125 126 127
# Directories Emacs should search for lisp files specific
# to this site (i.e. customizations), before consulting
# ${lispdir}.  This should be a colon-separated list of
# directories.
locallisppath=@locallisppath@
128 129 130 131

# 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
Jim Blandy's avatar
Jim Blandy committed
132
# should be a colon-separated list of directories.
133
lisppath=@lisppath@
Jim Blandy's avatar
Jim Blandy committed
134

135 136 137 138 139 140 141 142
# 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.
# It's usually identical to lisppath, except that the
# entry for the directory containing the installed lisp
# files has been replaced with ../lisp.  This should be a
# colon-separated list of directories.
143
buildlisppath=${srcdir}/lisp
Jim Blandy's avatar
Jim Blandy committed
144

145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
# 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 create and expect the locking directory, where
# the Emacs locking code keeps track of which files are
# currently being edited.
lockdir=@lockdir@

# 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@
164

Jim Blandy's avatar
Jim Blandy committed
165 166 167
# ==================== Utility Programs for the Build ====================

# Allow the user to specify the install program.
168
INSTALL = @INSTALL@
169 170
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
Jim Blandy's avatar
Jim Blandy committed
171 172

# ============================= Targets ==============================
Jim Blandy's avatar
Jim Blandy committed
173 174 175 176

# Subdirectories to make recursively.  `lisp' is not included
# because the compiled lisp files are part of the distribution
# and you cannot remake them without installing Emacs first.
Jim Blandy's avatar
Jim Blandy committed
177
SUBDIR = lib-src src
Jim Blandy's avatar
Jim Blandy committed
178

179
# The makefiles of the directories in $SUBDIR.
180
SUBDIR_MAKEFILES = lib-src/Makefile src/Makefile oldXMenu/Makefile
181

182 183 184 185 186
# Subdirectories to install, and where they'll go.
# lib-src's makefile knows how to install it, so we don't do that here.
# When installing the info files, we need to do special things to
# avoid nuking an existing dir file, so we don't do that here;
# instead, we have written out explicit code in the `install' targets.
187 188
COPYDIR = ${srcdir}/etc ${srcdir}/lisp
COPYDESTS = ${etcdir} ${lispdir}
Jim Blandy's avatar
Jim Blandy committed
189 190 191

all:	src/paths.h ${SUBDIR}

Jim Blandy's avatar
Jim Blandy committed
192 193
removenullpaths=sed -e 's/^://' -e 's/:$$//' -e 's/::/:/'

194 195 196 197 198
# We force the rebuilding of src/paths.h because the user might give
# make different values for the various directories.  Since we use
# move-if-change, src/paths.h only actually changes if the user did
# something notable, so the only unnecessary work we do is in building
# src/paths.h.tmp, which isn't much.
Jim Blandy's avatar
Jim Blandy committed
199
# Note that sed is not in /bin on 386bsd.
200
src/paths.h: Makefile ${srcdir}/src/paths.h.in FRC.src.paths.h
201 202 203 204 205 206 207
	@echo "Producing \`src/paths.h' from \`src/paths.h.in'."
	@(lisppath=`echo ${lisppath} | ${removenullpaths}` ;		\
	  buildlisppath=`echo ${buildlisppath} | ${removenullpaths}` ;	\
	  sed < ${srcdir}/src/paths.h.in > src/paths.h.tmp		\
	  -e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "'$${lisppath}'";'	\
	  -e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "'$${buildlisppath}'";' \
	  -e 's;\(#.*PATH_EXEC\).*$$;\1 "${archlibdir}";'		\
208
	  -e 's;\(#.*PATH_INFO\).*$$;\1 "${infodir}";'			\
209 210
	  -e 's;\(#.*PATH_DATA\).*$$;\1 "${etcdir}";'			\
	  -e 's;\(#.*PATH_LOCK\).*$$;\1 "${lockdir}/";')
211
	@${srcdir}/move-if-change src/paths.h.tmp src/paths.h
Jim Blandy's avatar
Jim Blandy committed
212

213 214
src:	lib-src FRC.src
lib-src: FRC.lib-src
Jim Blandy's avatar
Jim Blandy committed
215 216 217

.RECURSIVE: ${SUBDIR}

218
${SUBDIR}: ${SUBDIR_MAKEFILES} FRC
219 220 221 222 223 224 225 226 227 228 229 230 231
	cd $@; $(MAKE) all $(MFLAGS) \
		CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}'

Makefile: Makefile.in config.status
	./config.status

src/Makefile: src/Makefile.in.in config.status
	./config.status

lib-src/Makefile: lib-src/Makefile.in config.status
	./config.status

oldXMenu/Makefile: oldXMenu/Makefile.in config.status
232 233 234 235
	./config.status

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

Jim Blandy's avatar
Jim Blandy committed
236 237 238
## 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.
239

240 241 242
## On AIX, use tar xBf.
## On Xenix, use tar xpf.

243 244 245 246 247
## 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.
248 249
install: all do-install

250 251
### Note that we copy the DOC-* files from the build etc directory
### as well as lots of things from ${srcdir}/etc.
252 253
do-install: mkdir
	(cd lib-src; \
254
	  $(MAKE) install $(MFLAGS) prefix=${prefix} \
255 256
	    exec_prefix=${exec_prefix} bindir=${bindir} libdir=${libdir} \
	    archlibdir=${archlibdir})
Jim Blandy's avatar
Jim Blandy committed
257
	-set ${COPYDESTS} ; \
258
	 for dir in ${COPYDIR} ; do \
259
	   if [ `(cd $$1 && pwd)` != `(cd $${dir} && pwd)` ] ; then \
260
	     rm -rf $$1 ; \
261
	   fi ; \
262
	   shift ; \
263 264
	 done
	-set ${COPYDESTS} ; \
265
	 mkdir ${COPYDESTS} ; \
Jim Blandy's avatar
Jim Blandy committed
266 267
	 for dir in ${COPYDIR} ; do \
	   dest=$$1 ; shift ; \
268
	   [ -d $${dir} ] \
269
	   && [ `(cd $${dir} && /bin/pwd)` != `(cd $${dest} && /bin/pwd)` ] \
270
	   && (echo "Copying $${dir}..." ; \
271
	       (cd $${dir}; tar -cf - . )|(cd $${dest};umask 0; tar -xvf - ); \
272 273 274 275 276 277
	       for subdir in `find $${dest} -type d ! -name RCS -print` ; do \
		 rm -rf $${subdir}/RCS ; \
		 rm -rf $${subdir}/CVS ; \
		 rm -f  $${subdir}/\#* ; \
		 rm -f  $${subdir}/*~ ; \
	       done) ; \
Jim Blandy's avatar
Jim Blandy committed
278
	 done
279 280 281 282 283 284 285
	if [ `(cd ./etc; /bin/pwd)` != `(cd ${srcdir}/etc; /bin/pwd)` ]; \
	then \
	   echo "Copying etc/DOC* ..." ; \
	   (cd etc; tar -cf - DOC*)|(cd ${etcdir}; umask 0; tar -xvf - ); \
	else true; fi
	if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
	then (cd ${srcdir}/info ; \
286 287 288
	     if [ ! -f ${infodir}/dir ] && [ -f dir ]; then \
	       ${INSTALL_DATA} dir ${infodir}/dir ; \
	     fi ; \
289
	     for f in cl* emacs* forms* gnus* info* sc* vip* ; do \
290
	       ${INSTALL_DATA} $$f ${infodir}/$$f ; \
291 292
	     done); \
	else true; fi
293
	cd ${srcdir}/etc; for page in emacs etags ctags ; do \
294
	  ${INSTALL_DATA} $${page}.1 ${mandir}/$${page}${manext} ; \
295
	done
296
	${INSTALL_PROGRAM} src/emacs ${bindir}/emacs-${version}
297
	-chmod 1755  ${bindir}/emacs-${version}
298
	rm -f ${bindir}/emacs
299
	-ln ${bindir}/emacs-${version} ${bindir}/emacs
Jim Blandy's avatar
Jim Blandy committed
300

301
### Build all the directories we're going to install Emacs in.	Since
302 303 304
### we may be creating several layers of directories (for example,
### /usr/local/lib/emacs/19.0/mips-dec-ultrix4.2), we use make-path
### instead of mkdir.  Not all systems' mkdirs have the `-p' flag.
305
mkdir: FRC.mkdir
306
	./lib-src/make-path ${COPYDESTS} ${lockdir} ${infodir} ${mandir} \
307 308
	  ${bindir} ${datadir} ${libdir} \
	  `echo ${locallisppath} | sed 's/:/ /'`
309
	-chmod 777 ${COPYDESTS} ${lockdir}
Jim Blandy's avatar
Jim Blandy committed
310

311 312 313
### Delete all the installed files that the `install' target would
### create (but not the noninstalled files such as `make all' would
### create).
314 315
###
### Don't delete the lisp and etc directories if they're in the source tree.
316
uninstall:
317
	(cd lib-src; 					\
318
	 $(MAKE) $(MFLAGS) uninstall			\
319
	    prefix=${prefix} exec_prefix=${exec_prefix}	\
320
	    bindir=${bindir} libdir=${libdir} archlibdir=${archlibdir})
321 322 323 324 325 326 327 328 329 330 331
	for dir in ${lispdir} ${etcdir} ; do 		\
	  case `(cd $${dir} ; pwd)` in			\
	    `(cd ${srcdir} ; pwd)`* ) ;;		\
	    * ) rm -rf $${dir} ;;			\
	  esac ;					\
	  case $${dir} in				\
	    ${datadir}/emacs/${version}/* )		\
	      rm -rf ${datadir}/emacs/${version}	\
	    ;;						\
	  esac ;					\
	done
332 333 334 335 336
	(cd ${infodir}; rm -f cl* emacs* forms* info* vip*)
	(cd ${mandir};  rm -f emacs.1 etags.1 ctags.1)
	(cd ${bindir};  rm -f emacs-${version} emacs)


337 338
### Some makes seem to remember that they've built something called FRC,
### so you can only use a given FRC once per makefile.
339
FRC FRC.src.paths.h FRC.src FRC.lib-src FRC.mkdir:
340
FRC.mostlyclean FRC.clean FRC.distclean FRC.realclean:
341 342 343 344

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

### `mostlyclean'
345 346 347 348 349
###      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.mostlyclean
350 351 352 353
	(cd src;      $(MAKE) $(MFLAGS) mostlyclean)
	(cd oldXMenu; $(MAKE) $(MFLAGS) mostlyclean)
	(cd lib-src;  $(MAKE) $(MFLAGS) mostlyclean)
	-(cd man;     $(MAKE) $(MFLAGS) mostlyclean)
354 355 356 357 358 359 360

### `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.
361
### 
362 363
###      Delete `.dvi' files here if they are not part of the distribution.
clean: FRC.clean
364 365 366 367
	(cd src;      $(MAKE) $(MFLAGS) clean)
	(cd oldXMenu; $(MAKE) $(MFLAGS) clean)
	(cd lib-src;  $(MAKE) $(MFLAGS) clean)
	-(cd man;     $(MAKE) $(MFLAGS) clean)
Jim Blandy's avatar
Jim Blandy committed
368

369
### `distclean'
370 371 372 373 374 375 376 377
###      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=\
	rm -f config.status build-install ; \
	rm -f Makefile ${SUBDIR_MAKEFILES} ; \
378
	(cd lock ; rm -f *)
379
distclean: FRC.distclean
380 381 382 383
	(cd src;      $(MAKE) $(MFLAGS) distclean)
	(cd oldXMenu; $(MAKE) $(MFLAGS) distclean)
	(cd lib-src;  $(MAKE) $(MFLAGS) distclean)
	(cd man;      $(MAKE) $(MFLAGS) distclean)
384 385
	${top_distclean}
	
Jim Blandy's avatar
Jim Blandy committed
386

387
### `realclean'
388 389 390 391 392 393 394 395 396 397 398
###      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 realclean' should not delete
###      `configure' even if `configure' can be remade using a rule in the
###      Makefile.  More generally, `make realclean' should not delete
###      anything that needs to exist in order to run `configure' and then
###      begin to build the program.
realclean: FRC.realclean
399 400 401 402
	(cd src;      $(MAKE) $(MFLAGS) realclean)
	(cd oldXMenu; $(MAKE) $(MFLAGS) realclean)
	(cd lib-src;  $(MAKE) $(MFLAGS) realclean)
	-(cd man;     $(MAKE) $(MFLAGS) realclean)
403
	${top_distclean}
Jim Blandy's avatar
Jim Blandy committed
404

405 406 407 408 409
### 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:
410
	for i in ${SUBDIR}; do (cd $$i; $(MAKE) $(MFLAGS) extraclean); done
411 412 413 414
	-(cd lock; rm *)
	-rm config.status config-tmp-*
	-rm -f *~ \#*

415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
### Unlocking and relocking.  The idea of these productions is to reduce
### hassles when installing an incremental tar of Emacs.  Do `make unlock'
### before unlocking the file to take the write locks off all sources so
### that tar xvof will overwrite them without fuss.  Then do `make relock'
### afterward so that VC mode will know which files should be checked in
### if you want to mung them.
###
### Note: it's no disaster if these productions miss a file or two; tar
### and VC will swiftly let you know if this happens, and it is easily
### corrected.
SOURCES = ChangeLog GETTING.GNU.SOFTWARE INSTALL Makefile.in PROBLEMS \
	README build-install.in configure make-dist move-if-change

unlock:
	chmod u+w $(SOURCES) cpp/*
	-(cd elisp; chmod u+w Makefile README *.texi)
431 432 433
	(cd etc; $(MAKE) $(MFLAGS) unlock)
	(cd lib-src; $(MAKE) $(MFLAGS) unlock)
	(cd lisp; $(MAKE) $(MFLAGS) unlock)
434 435 436
	(cd lisp/term; chmod u+w README *.el)
	(cd man; chmod u+w *texi* ChangeLog split-man)
	(cd oldXMenu; chmod u+w *.[ch] Makefile README)
437
	(cd src; $(MAKE) $(MFLAGS) unlock)
438 439 440 441

relock:
	chmod u-w $(SOURCES) cpp/*
	-(cd elisp; chmod u-w Makefile README *.texi)
442 443 444
	(cd etc; $(MAKE) $(MFLAGS) relock)
	(cd lib-src; $(MAKE) $(MFLAGS) relock)
	(cd lisp; $(MAKE) $(MFLAGS) relock)
445 446 447
	(cd lisp/term; chmod u+w README *.el)
	(cd man; chmod u+w *texi* ChangeLog split-man)
	(cd oldXMenu; chmod u+w *.[ch] Makefile README)
448
	(cd src; $(MAKE) $(MFLAGS) relock)
449

Jim Blandy's avatar
Jim Blandy committed
450
TAGS tags:	lib-src
451 452
	(cd ${srcdir}/src; \
	 ../lib-src/etags *.[ch] ../lisp/*.el ../lisp/term/*.el)
Jim Blandy's avatar
Jim Blandy committed
453 454 455

check:
	@echo "We don't have any tests for GNU Emacs yet."
Jim Blandy's avatar
Jim Blandy committed
456 457

dist:
458
	cd ${srcdir}; make-dist
459 460

info:
461
	(cd ${srcdir}/man; $(MAKE) $(MFLAGS) info)
462
dvi:
463
	(cd ${srcdir}/man; $(MAKE) $(MFLAGS) dvi)