Source

XEmacs / Makefile.in

  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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
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
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
## DIST: This is the distribution Makefile for XEmacs.  configure can
## DIST: make most of the changes to this file you might want, so try
## DIST: that first.

## This file is part of XEmacs.

## XEmacs 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 2, or (at your option) any
## later version.

## XEmacs 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 XEmacs; see the file COPYING.  If not, write to
## the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
## Boston, MA 02111-1307, USA.

## make all	to compile and build XEmacs.
## make install	to build and install it.
## make install-only	to install after a previous complete build
## 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 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.

@SET_MAKE@
RECURSIVE_MAKE=@RECURSIVE_MAKE@
SHELL = /bin/sh
LANG = C
RM = rm -f
pwd = /bin/pwd

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

CC=@CC@
CPP=@CPP@
LN_S=@LN_S@
CFLAGS=@CFLAGS@
CPPFLAGS=@CPPFLAGS@

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

## This should be the number of the XEmacs version we're building,
## like `19.12' or `19.13'.
version=@version@

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

## This will be the name of the generated binary and is set automatically
## by configure.
PROGNAME=@PROGNAME@

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

## 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 XEmacs and other binaries that people will want to
## run directly (like etags).
bindir=@bindir@

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

## Where to find XEmacs packages.
pkgdir=@pkgdir@

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

## Where to install and expect executable files to be run by XEmacs
## rather than directly by users, and other architecture-dependent data
## ${archlibdir} is a subdirectory of this.
libdir=@libdir@

## Where to install XEmacs's man pages, and what extension they should have.
mandir=@mandir@
manext=.1

## Where to install and expect the info files describing XEmacs.  In the
## past, this defaulted to a subdirectory of ${prefix}/lib/xemacs, but
## since there are now many packages documented with the texinfo
## system, it is inappropriate to imply that it is part of XEmacs.
infodir=@infodir@

## Document me.
## See callproc.c for code which references this.
infopath=@infopath@

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

## Where the build is done.
blddir=@blddir@

## ==================== XEmacs-specific directories ====================

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

## Where to install the lisp files distributed with
## XEmacs.  This includes the XEmacs version, so that the
## lisp files for different versions of XEmacs will install
## themselves in separate directories.
lispdir=@lispdir@

## Directory XEmacs should search for lisp files specific
## to this site (i.e. customizations), before consulting
## ${lispdir}.
sitelispdir=@sitelispdir@

## Where XEmacs will search for its lisp files while
## building.  This is only used during the process of
## compiling XEmacs, to help XEmacs find its lisp files
## before they've been installed in their final location.
## It's usually identical to lispdir, 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.
buildlispdir=${srcdir}/lisp

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

## Where to create and expect the locking directory, where
## the XEmacs locking code keeps track of which files are
## currently being edited.
lockdir=@lockdir@

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

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

## Allow the user to specify the install program.
INSTALL = @install_pp@ @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

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

## 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 XEmacs first.
MAKE_SUBDIR = @MAKE_SUBDIR@

## Subdirectories that can be made recursively.
SUBDIR = ${MAKE_SUBDIR} man

## The makefiles of the directories in ${MAKE_SUBDIR}.
SUBDIR_MAKEFILES = @SUBDIR_MAKEFILES@

## Subdirectories to `make install-arch-dep' recursively
INSTALL_ARCH_DEP_SUBDIR = @INSTALL_ARCH_DEP_SUBDIR@

## 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.
COPYDIR = ${srcdir}/etc ${srcdir}/lisp
COPYDESTS = ${etcdir} ${lispdir}
GENERATED_HEADERS = src/paths.h src/Emacs.ad.h src/puresize-adjust.h src/config.h lwlib/config.h src/sheap-adjust.h
GENERATED_LISP = lisp/finder-inf.el

all: ${PROGNAME} all-elc info

${PROGNAME}:	${GENERATED_HEADERS} ${MAKE_SUBDIR} ${GENERATED_LISP}

## For performance and consistency, no built-in rules
.SUFFIXES:

.NO_PARALLEL:	${GENERATED_HEADERS} ${MAKE_SUBDIR} dump-elcs
.PHONY: ${SUBDIR} all beta all-elc all-elcs dump-elc dump-elcs autoloads finder

## Convenience target for XEmacs beta testers
beta: clean all-elc finder

## Convenience target for XEmacs maintainers
## This would run `make-xemacsdist' if I were really confident that everything
## was turnkey.
dist: all-elc info

## Convenience target for XEmacs maintainers
## Updates some rarely generated files:
## - configure from configure.in
## - config.values.in from configure
## - src/depend from src/*.[ch]
.PHONY: config configure depend
config: configure depend
configure: ${srcdir}/configure
${srcdir}/configure: ${srcdir}/configure.in
	cd ${srcdir} && autoconf
	cd ${srcdir} && /bin/sh lib-src/config.values.sh

depend ${srcdir}/src/depend:
	cd ${srcdir}/src && \
		perl ./make-src-depend > depend.tmp && \
		$(RM) depend && mv depend.tmp depend

## Build XEmacs and recompile out-of-date and missing .elc files along
## the way.
all-elc all-elcs: lib-src lwlib dump-elcs src
	MAKE='$(MAKE)' EMACS='./src/$(PROGNAME)' sh ${srcdir}/lib-src/update-elc.sh

## Sub-target for all-elc.
dump-elc dump-elcs: ${GENERATED_HEADERS} FRC.dump-elcs
	cd ./src && $(RECURSIVE_MAKE) dump-elcs

autoloads: src
	MAKE='$(MAKE)' EMACS='./src/$(PROGNAME)' sh ${srcdir}/lib-src/update-autoloads.sh

custom-loads:
	MAKE='$(MAKE)' EMACS='./src/$(PROGNAME)' sh ${srcdir}/lib-src/update-custom.sh

finder: src
	@echo "Building finder database ..."
	@(cd ./lisp; \
		${blddir}/src/${PROGNAME} -batch -vanilla \
		-eval '(setq finder-compile-keywords-quiet t)' \
		-l finder -f finder-compile-keywords )
	@echo "Building finder database ...(done)"

lisp/finder-inf.el:
	@echo "Building finder database ..."
	@(cd ./lisp; \
		${blddir}/src/${PROGNAME} -batch -vanilla \
		-eval '(setq finder-compile-keywords-quiet t)' \
		-l finder -f finder-compile-keywords )
	@echo "Building finder database ...(done)"

## We have to force the building of Emacs.ad.h as well in order to get it
## updated correctly when VPATH is being used.  Since we use move-if-change,
## it will only actually change if the user modified ${etcdir}/Emacs.ad.
src/Emacs.ad.h: ${srcdir}/etc/Emacs.ad
	@echo "Producing \`src/Emacs.ad.h' from \`etc/Emacs.ad'."
	@$(RM) src/Emacs.ad.h
	@(echo "/*	Do not edit this file!" ; \
	  echo "  	Automatically generated from ${srcdir}/etc/Emacs.ad" ; \
	  echo " */" ; \
	  /bin/sh ${srcdir}/lib-src/ad2c ${srcdir}/etc/Emacs.ad ) > \
	  src/Emacs.ad.h

src/puresize-adjust.h:	${srcdir}/src/puresize.h
	@echo "Resetting \`src/puresize-adjust.h'."; \
	(echo "/*	Do not edit this file!" ; \
	 echo "  	Automatically generated by XEmacs */" ; \
	 echo "#define PURESIZE_ADJUSTMENT 0") > $@

src/sheap-adjust.h:
	@echo "Resetting \`src/sheap-adjust.h'."; \
	(echo "/*	Do not edit this file!" ; \
	 echo "  	Automatically generated by XEmacs */" ; \
	 echo "#define SHEAP_ADJUSTMENT 0") > $@

src: @SRC_SUBDIR_DEPS@ FRC.src
pkg-src/tree-x: pkg-src/FRC.tree-x
lib-src: FRC.lib-src
lwlib:	FRC.lwlib
dynodump: FRC.dynodump
FRC.src FRC.lib-src FRC.lwlib FRC.dynodump pkg-src/FRC.tree-x:
FRC.lisp.finder-inf.el:

${SUBDIR}: ${SUBDIR_MAKEFILES} ${GENERATED_HEADERS} FRC
	cd ./$@ && $(RECURSIVE_MAKE) all

Makefile: ${srcdir}/Makefile.in config.status
	./config.status

src/Makefile: ${srcdir}/src/Makefile.in.in ${srcdir}/src/depend config.status
	./config.status

lib-src/Makefile: ${srcdir}/lib-src/Makefile.in.in config.status
	./config.status

lwlib/Makefile: ${srcdir}/lwlib/Makefile.in.in config.status
	./config.status

pkg-src/tree-x/Makefile: ${srcdir}/pkg-src/tree-x/Makefile.in.in config.status
	./config.status

src/config.h: ${srcdir}/src/config.h.in
	./config.status && touch $@

src/paths.h: ${srcdir}/src/paths.h.in
	./config.status && touch $@

lwlib/config.h: ${srcdir}/lwlib/config.h.in
	./config.status && touch $@

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

## 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.

## On AIX, use tar xBf.
## On Xenix, use tar xpf.

.PHONY: install-only install install-arch-dep install-arch-indep gzip.el mkdir
.PHONY: check-features

## 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.

## FSF doesn't depend on `all', but rather on ${MAKE_SUBDIR}, so that
## they "won't ever modify src/paths.h".  But that means you can't do
## 'make install' right off the bat because src/paths.h won't exist.
## And, in XEmacs case, src/Emacs.ad.h won't exist either.  I also
## don't see the point in avoiding modifying paths.h.  It creates an
## inconsistency in the build process.  So we go ahead and depend on
## all.  --cet

check-features: all
	${blddir}/src/${PROGNAME} -batch -l check-features.el

install-only: ${MAKE_SUBDIR} check-features install-arch-dep install-arch-indep

install: all check-features install-arch-dep install-arch-indep

install-arch-dep: mkdir
	for subdir in ${INSTALL_ARCH_DEP_SUBDIR}; do \
	(cd ./$${subdir} && $(RECURSIVE_MAKE) install prefix=${prefix} \
	    exec_prefix=${exec_prefix} bindir=${bindir} libdir=${libdir} \
	    archlibdir=${archlibdir}) ; done
	if test "`(cd ${archlibdir} && $(pwd))`" != \
		"`(cd ./lib-src && $(pwd))`"; then \
	   if test -f ../Installation; then \
		${INSTALL_DATA} ../Installation ${archlibdir}/Installation; \
	   fi; \
	   for f in DOC config.values; do \
		${INSTALL_DATA} lib-src/$${f} ${archlibdir}/$${f}; \
	   done ; \
	   for subdir in `find ${archlibdir} -type d ! -name RCS ! -name SCCS ! -name CVS -print` ; \
	     do (cd $${subdir} && $(RM) -r RCS CVS SCCS \#* *~) ; done ; \
	else true; fi
	${INSTALL_PROGRAM} src/${PROGNAME} ${bindir}/${PROGNAME}-${version}
	-chmod 0755 ${bindir}/${PROGNAME}-${version}
	cd ${bindir} && $(RM) ./${PROGNAME} && ${LN_S} ${PROGNAME}-${version} ./${PROGNAME}
	if test "${prefix}" != "${exec_prefix}"; then \
	  for dir in \
		lib/${PROGNAME} \
	 	lib/${PROGNAME}-${version}/etc \
		lib/${PROGNAME}-${version}/info \
		lib/${PROGNAME}-${version}/lisp; do \
	    if test ! -d ${exec_prefix}/$${dir}; then \
	      $(LN_S) ${prefix}/$${dir} ${exec_prefix}/$${dir}; fi; \
	  done; \
	fi

install-arch-indep: mkdir info
	-@set ${COPYDESTS} ; \
	 for dir in ${COPYDIR} ; do \
	   if test "`(cd $$1 && $(pwd))`" != \
		   "`(cd $${dir} && $(pwd))`"; then \
	     : do nothing - echo "rm -rf $$1" ; \
	   fi ; \
	   shift ; \
	 done
	-set ${COPYDESTS} ; \
	 for dir in ${COPYDESTS} ; do \
	   if test ! -d $${dir} ; then mkdir $${dir} ; fi ; \
	 done ; \
	 for dir in ${COPYDIR} ; do \
	   dest=$$1 ; shift ; \
	   test -d $${dir} \
	     -a "`(cd $${dir} && $(pwd))`" != \
		"`(cd $${dest} && $(pwd))`" \
	   && (echo "Copying $${dir}..." ; \
	       (cd $${dir} && tar -cf - . ) | \
		(cd $${dest} && umask 022 && tar -xf - );\
	       chmod 0755 $${dest}; \
	       for subdir in `find $${dest} -type d ! -name RCS ! -name SCCS ! -name CVS -print` ; do \
		 (cd $${subdir} && $(RM) -r RCS CVS SCCS \#* *~) ; \
	       done) ; \
	 done
	if test "`(cd ${srcdir}/info && $(pwd))`" != \
		"`(cd ${infodir} && $(pwd))`" && cd ${srcdir}/info; then \
	  if test ! -f ${infodir}/dir -a -f dir ; then \
	    ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir ; \
	  fi ; \
	  for file in *.info* ; do \
	    ${INSTALL_DATA} $${file} ${infodir}/$${file} ; \
	    chmod 0644 ${infodir}/$${file}; \
	  done ; \
	fi
	## Note it's `xemacs' not ${PROGNAME}
	cd ${srcdir}/etc && \
	  for page in xemacs etags ctags gnuserv gnuclient gnuattach gnudoit; do \
	    ${INSTALL_DATA} ${srcdir}/etc/$${page}.1 ${mandir}/$${page}${manext} ; \
	    chmod 0644 ${mandir}/$${page}${manext} ; \
	  done
	@echo "If you would like to save approximately 2M of disk space, do"
	@echo "make gzip-el"
	@echo "or you may run "
	@echo ${srcdir}/lib-src/gzip-el.sh lispdir " from the command line."
	@echo "Where lispdir is where the lisp files were installed, i.e.,"
	@echo "${lispdir}"

gzip-el:
	${srcdir}/lib-src/gzip-el.sh ${lispdir}

MAKEPATH=./lib-src/make-path
## Build all the directories to install XEmacs in.
## Since we may be creating several layers of directories,
## (e.g. /usr/local/lib/${PROGNAME}-20.5/sparc-sun-solaris2.6), we use
## make-path instead of mkdir.  Not all mkdirs have the `-p' flag.
mkdir: FRC.mkdir
	${MAKEPATH} ${COPYDESTS} ${lockdir} ${infodir} ${archlibdir} \
	  ${mandir} ${bindir} ${datadir} ${libdir} ${pkgdir}
	-chmod 0777 ${lockdir}

## 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.
#### This target has not been updated in sometime and until it is it
#### would be extremely dangerous for anyone to use it.
#uninstall:
#	(cd ./lib-src; 					\
#	 $(RECURSIVE_MAKE) uninstall			\
#	    prefix=${prefix} exec_prefix=${exec_prefix}	\
#	    bindir=${bindir} libdir=${libdir} archlibdir=${archlibdir})
#	for dir in ${lispdir} ${etcdir} ; do 		\
#	  case `(cd $${dir} ; $(pwd))` in			\
#	    `(cd ${srcdir} ; $(pwd))`* ) ;;		\
#	    * ) $(RM) $${dir} ;;			\
#	  esac ;					\
#	  case $${dir} in				\
#	    ${datadir}/${PROGNAME}/${version}/* )		\
#	      $(RM) -r ${datadir}/${PROGNAME}/${version}	\
#	    ;;						\
#	  esac ;					\
#	done
#	cd ${infodir} && $(RM) cl* ${PROGNAME}* forms* info* vip*
#	cd ${mandir} && $(RM) xemacs.1 etags.1 ctags.1 gnuserv.1
#	cd ${bindir} && $(RM) ${PROGNAME}-${version} ${PROGNAME}


## Some makes seem to remember that they've built something called FRC,
## so you can only use a given FRC once per makefile.
FRC FRC.src.paths.h FRC.mkdir FRC.dump-elcs FRC.info:
FRC.mostlyclean FRC.clean FRC.distclean FRC.realclean FRC.tags:

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

.PHONY: mostlyclean clean distclean realclean extraclean

## `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.mostlyclean
	for d in $(SUBDIR); do (cd ./$$d && $(RECURSIVE_MAKE) $@); done

## `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.clean
	for d in $(SUBDIR); do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
	$(RM) core

## `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=\
	$(RM) config.status config.log config-tmp-* build-install Installation ; \
	for d in src lib-src lwlib dynodump ; do \
	  $(RM) $$d/Makefile $$d/Makefile.in ; \
	done ; \
	$(RM) core .sbinit Makefile lock/*; \
	$(RM) lisp/finder-inf.el* Installation.el Installation.elc; \
	$(RM) packages mule-packages site-lisp

distclean: FRC.distclean
	for d in $(SUBDIR); do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
	-${top_distclean}

## `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.

##      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
	for d in $(SUBDIR); do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
	-${top_distclean}
	$(RM) TAGS

## 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:
	for d in $(SUBDIR); do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
	$(RM) *~ \#*
	-${top_distclean}

## Unlocking and relocking.  The idea of these productions is to reduce
## hassles when installing an incremental tar of XEmacs.  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

.PHONY: unlock relock TAGS tags check dist info dvi mcs

unlock:
	chmod u+w $(SOURCES) cpp/*
	-cd ./elisp && chmod u+w Makefile README *.texi
	for d in src etc lib-src lisp; do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
	cd ./lisp/term && chmod u+w README *.el
	cd ./man && chmod u+w *texi* ChangeLog split-man
	cd ./lwlib && chmod u+w *.[ch] Makefile.in.in

relock:
	chmod u-w $(SOURCES) cpp/*
	-cd ./elisp && chmod u-w Makefile README *.texi
	for d in src etc lib-src lisp; do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
	cd ./lisp/term && chmod u+w README *.el
	cd ./man && chmod u+w *texi* ChangeLog split-man
	cd ./lwlib && chmod u+w *.[ch] Makefile.in.in

PRUNE_VC = -name SCCS -prune -o -name RCS -prune -o -name CVS -prune -o
TAGS tags: FRC.tags
	@echo "If you don't have a copy of etags around, then do 'make lib-src' first."
	$(RM) ${srcdir}/TAGS
	@PATH=`$(pwd)`/lib-src:$$PATH HOME=/-=-; export PATH HOME; \
	  echo "Using etags from `which etags`."
	PATH=`$(pwd)`/lib-src:$$PATH ; export PATH; cd ${srcdir} && \
	find src lwlib lib-src ${PRUNE_VC} -name '*.[ch]' -print | \
	  xargs etags -a -r '/[ 	]*DEF\(VAR\|INE\)_[A-Z_]+[ 	]*([ 	]*"\([^"]+\)"/\2/'; \
	find lisp ${PRUNE_VC} -name '*.el' -print | \
	  xargs etags -a -l none -r "/^(def\\(var\\|un\\|alias\\|const\\|macro\\)[ 	]+'?\\([^ 	]+\\)/\\2/"

## We have automated tests!
testdir = ${srcdir}/tests
tests   = ${testdir}/basic-lisp.el ${testdir}/database.el

check:
	src/${PROGNAME} -batch -l ${testdir}/test-emacs.el -f batch-test-emacs ${tests}

info: FRC.info
	cd ${srcdir}/man && $(RECURSIVE_MAKE) $@

dvi:
	cd ${srcdir}/man && $(RECURSIVE_MAKE) $@

## Fix up version information in executables (Solaris-only)
mcs:
	date=`LANG=C LC_ALL=C date -u '+%e %b %Y'`; \
	ident="@(#)RELEASE VERSION XEmacs ${version} $${date}"; \
	for f in `file lib-src/* src/${PROGNAME} | grep ELF | sed -e 's/:.*//'`; do \
	  mcs -da "$${ident} `echo $${f} | sed 's/.*\///'`" $${f}; \
	done
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.