summaryrefslogtreecommitdiff
path: root/Makefile.in
blob: 8badd9148a17e38c3084969c441078e32c50a370 (plain)
1
2
3
4
5
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
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
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
# 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.

# make all	to compile and build Emacs.
# make install	to install it.
# make install.sysv to install on system V.  Note that on system V you
#		must change mandir to /usr/local/man/man1.
# make install.xenix  to install on Xenix.
# make install.aix    to install on AIX.
# make tags	to update tags tables.
#
# make distclean	to delete everything that wasn't in the distribution.
#	This is a very dangerous thing to do!
# make clean
#	This is a little less dangerous.
# make dist
#	This produces a tar file from the current source tree suitable
#	for redistribution.

SHELL = /bin/sh

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

# The default location for installation.  Everything is placed in
# subdirectories of this directory.  This directory must exist when
# you start installation.  The default values for many of the
# variables below are expressed in terms of this one, so you may not
# need to change them.
prefix=/usr/local

# Where to install Emacs and other binaries that people will want to
# run directly (like etags).
bindir=${prefix}/bin

# A directory under which we will install many of Emacs's files.  The
# default values for many of the variables below are expressed in
# terms of this one, so you may not need to change them.
emacsdir=${prefix}/emacs-19.0

# Where to install and expect the architecture-independent data files
# (like the tutorial and the Zippy database).
datadir=${emacsdir}/etc

# Where to install the elisp files distributed with Emacs.  Strictly
# speaking, all the elisp files should go under datadir (above), since
# both elisp source and compiled elisp are completely portable, but
# it's traditional to give the lisp files their own subdirectory.
lispdir=${emacsdir}/lisp

# Directories Emacs should search for elisp files specific to this
# site (i.e. customizations), before consulting ${lispdir}.  This
# should be a colon-separated list of directories.
locallisppath=${emacsdir}/local-lisp

# Where Emacs will search to find its elisp 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.
lisppath=${locallisppath}:${lispdir}

# Where Emacs will search for its elisp 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.
buildlisppath=../lisp

# Where to install and expect the files that Emacs modifies as it
# runs.	 These files are all architecture-independent.	Right now,
# the only such data is the locking directory.
statedir=${emacsdir}

# Where to create and expect the locking directory, where the Emacs
# locking code keeps track of which files are currently being edited.
lockdir=${statedir}/lock

# Where to install and expect executable files to be run by Emacs
# rather than directly by users, and other architecture-dependent
# data.
libdir=${emacsdir}/arch-lib

# Where to install Emacs's man pages.
mandir=/usr/man/man1

# 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.
infodir=${prefix}/info


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

# Allow the user to specify the install program.
INSTALL = install
INSTALLFLAGS = -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL}


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

# Flags passed down to subdirectory makefiles.
MFLAGS =

# 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.
SUBDIR = lib-src src

# Subdirectories to install, and where they'll go.
COPYDIR = arch-lib etc info lisp
COPYDESTS = ${libdir} ${datadir} ${infodir} ${lispdir}

all:	src/paths.h ${SUBDIR}

removenullpaths=sed -e 's/^://' -e 's/:$$//' -e 's/::/:/'

src/paths.h: Makefile src/paths.h.in
	lisppath=`echo ${lisppath} | ${removenullpaths}` ;		\
	buildlisppath=`echo ${buildlisppath} | ${removenullpaths}` ;	\
	/bin/sed < 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 "${libdir}";'			\
	-e 's;\(#.*PATH_DATA\).*$$;\1 "${datadir}";'			\
	-e 's;\(#.*PATH_LOCK\).*$$;\1 "${lockdir}/";'
	./move-if-change src/paths.h.tmp src/paths.h

src:	lib-src

.RECURSIVE: ${SUBDIR}

${SUBDIR}: FRC
	cd $@; make ${MFLAGS} all

install: all mkdir lockdir
	-set ${COPYDESTS} ; \
	 for dir in ${COPYDIR} ; do \
	   dest=$$1 ; shift ; \
	   if [ `/bin/pwd`/$${dir} != `(cd $${dest}; /bin/pwd)` ] ; then \
	     (cd $${dir}; tar cf - . ) | (cd $${dest}; umask 0; tar xf - ) ; \
	     for subdir in `find $${dest} -type d ! -name RCS -print` ; do \
	       rm -rf $${subdir}/RCS ; \
	       rm -f  $${subdir}/\#* ; \
	       rm -f  $${subdir}/*~ ; \
	     done ; \
	   fi ; \
	 done
	${INSTALL_PROGRAM} ${INSTALLFLAGS} -c arch-lib/emacsclient ${bindir}/emacsclient
	${INSTALL_PROGRAM} ${INSTALLFLAGS} -c arch-lib/etags ${bindir}/etags
	${INSTALL_PROGRAM} ${INSTALLFLAGS} -c arch-lib/ctags ${bindir}/ctags
	${INSTALL_PROGRAM} ${INSTALLFLAGS} -c -m 1755 src/xemacs ${bindir}/xemacs
	${INSTALL_DATA} ${INSTALLFLAGS} -c -m 444 etc/emacs.1 ${mandir}/emacs.1
	-rm -f ${bindir}/emacs
	mv ${bindir}/xemacs ${bindir}/emacs

install.sysv: all mkdir lockdir
	-set ${COPYDESTS} ; \
	 for dir in ${COPYDIR} ; do \
	   dest=$$1 ; shift ; \
	   if [ `/bin/pwd`/$${dir} != `(cd $${dest}; /bin/pwd)` ] ; then \
	     (cd $${dir}; find . -print | cpio -pdum ${dest} ) ; \
	     for subdir in `find $${dest} -type d ! -name RCS -print` ; do \
	       rm -rf $${subdir}/RCS ; \
	       rm -f  $${subdir}/\#* ; \
	       rm -f  $${subdir}/*~ ; \
	     done ; \
	   fi ; \
	 done
	-cpset arch-lib/emacsclient ${bindir}/emacsclient 755 bin bin
	-cpset arch-lib/etags ${bindir}/etags 755 bin bin
	-cpset arch-lib/ctags ${bindir}/ctags 755 bin bin
	-cpset etc/emacs.1 ${mandir}/emacs.1 444 bin bin
	-/bin/rm -f ${bindir}/emacs
	-cpset src/xemacs ${bindir}/emacs 1755 bin bin
  
install.xenix: all mkdir lockdir
	-set ${COPYDESTS} ; \
	 for dir in ${COPYDIR} ; do \
	   dest=$$1 ; shift ; \
	   if [ `/bin/pwd`/$${dir} != `(cd $${dest}; /bin/pwd)` ] ; then \
	     (cd $${dir}; tar cf - . ) | (cd $${dest}; umask 0; tar xpf - ) ; \
	     for subdir in `find $${dest} -type d ! -name RCS -print` ; do \
	       rm -rf $${subdir}/RCS ; \
	       rm -f  $${subdir}/\#* ; \
	       rm -f  $${subdir}/*~ ; \
	     done ; \
	   fi ; \
	 done
	cp arch-lib/etags arch-lib/ctags arch-lib/emacsclient ${bindir}
	chmod 755 ${bindir}/etags ${bindir}/ctags ${bindir}/emacsclient
	cp etc/emacs.1 ${mandir}/emacs.1
	chmod 444 ${mandir}/emacs.1
	-mv -f ${bindir}/emacs ${bindir}/emacs.old
	cp src/xemacs ${bindir}/emacs
	chmod 1755 ${bindir}/emacs
	-rm -f ${bindir}/emacs.old

install.aix: all mkdir lockdir
	-set ${COPYDESTS} ; \
	 for dir in ${COPYDIR} ; do \
	   dest=$$1 ; shift ; \
	   if [ `/bin/pwd`/$${dir} != `(cd $${dest}; /bin/pwd)` ] ; then \
	     (cd $${dir}; tar cf - . ) | (cd $${dest}; umask 0; tar xBf - ) ; \
	     for subdir in `find $${dest} -type d ! -name RCS -print` ; do \
	       rm -rf $${subdir}/RCS ; \
	       rm -f  $${subdir}/\#* ; \
	       rm -f  $${subdir}/*~ ; \
	     done ; \
	   fi ; \
	 done
	${INSTALL_PROGRAM} ${INSTALLFLAGS} -f ${bindir} etc/emacsclient
	${INSTALL_PROGRAM} ${INSTALLFLAGS} -f ${bindir} etc/etags
	${INSTALL_PROGRAM} ${INSTALLFLAGS} -f ${bindir} etc/ctags
	${INSTALL_PROGRAM} ${INSTALLFLAGS} -M 1755 -f ${bindir} src/xemacs
	${INSTALL_DATA} ${INSTALLFLAGS} -M 444 -f ${mandir} etc/emacs.1
	-rm -f ${bindir}/emacs
	mv ${bindir}/xemacs ${bindir}/emacs

# Build all the directories
mkdir: FRC
	# If any of the directories are below ${emacsdir}, create it.
	-for dir in ${COPYDESTS}; do \
	   case "$${dir}" in \
	     ${emacsdir}/* ) \
	       if [ ! -d ${emacsdir} ]; then \
		 mkdir ${emacsdir} ; \
		 chmod 777 ${emacsdir} ; \
	       fi ; \
	       break\
	     ;; \
	   esac ; \
	 done
	-mkdir ${COPYDESTS}
	-chmod 777 ${COPYDESTS}

lockdir:
	# If the lockdir needs ${emacsdir}, create it.
	-case "${lockdir}" in \
	   ${statedir}/* ) \
	     if [ ! -d ${emacsdir} ]; then \
	       mkdir ${emacsdir} ; \
	       chmod 777 ${emacsdir} ; \
	     fi \
	   ;; \
	 esac
	-mkdir ${LOCKDIR}
	-chmod 777 ${LOCKDIR}

FRC:

clean mostlyclean:
	cd src; make clean
	if [ `/bin/pwd` != `(cd ${emacsdir}; /bin/pwd)` ] ; then \
		(cd etc; make clean); \
		(cd lib-src; make clean); \
	else true; \
	fi
	cd oldXMenu; make clean

distclean:
	for i in ${SUBDIR}; do (cd $$i; make ${MFLAGS} distclean); done
	-(cd lock; rm *)
	-rm config.status config-tmp-*
	-rm #*# *~

realclean:
	for i in ${SUBDIR}; do (cd $$i; make ${MFLAGS} realclean); done
	(cd lock; rm *)
	rm config.status

TAGS tags:	lib-src
	cd src; ../arch-lib/etags *.[ch] ../lisp/*.el ../lisp/term/*.el

check:
	@echo "We don't have any tests for GNU Emacs yet."

dist:
	make-dist