comparison src/Makefile.in.in @ 1315:70921960b980

[xemacs-hg @ 2003-02-20 08:19:28 by ben] check in makefile fixes et al Makefile.in.in: Major surgery. Move all stuff related to building anything in the src/ directory into src/. Simplify the dependencies -- everything in src/ is dependent on the single entry `src' in MAKE_SUBDIRS. Remove weirdo targets like `all-elc[s]', dump-elc[s], etc. mule/mule-msw-init.el: Removed. Delete this file. mule/mule-win32-init.el: New file, with stuff from mule-msw-init.el -- not just for MS Windows native, boys and girls! bytecomp.el: Change code inserted to catch trying to load a Mule-only .elc file in a non-Mule XEmacs. Formerly you got the rather cryptic "The required feature `mule' cannot be provided". Now you get "Loading this file requires Mule support". finder.el: Remove dependency on which directory this function is invoked from. update-elc.el: Don't mess around with ../src/BYTECOMPILE_CHANGE. Now that Makefile.in.in and xemacs.mak are in sync, both of them use NEEDTODUMP and the other one isn't used. dumped-lisp.el: Rewrite in terms of `list' and `nconc' instead of assemble-list, so we can have arbitrary forms, not just `when-feature'. very-early-lisp.el: Nuke this file. finder-inf.el, packages.el, update-elc.el, update-elc-2.el, loadup.el, make-docfile.el: Eliminate references to very-early-lisp. msw-glyphs.el: Comment clarification. xemacs.mak: Add macros DO_TEMACS, DO_XEMACS, and a few others; this macro section is now completely in sync with src/Makefile.in.in. Copy check-features, load-shadows, and rebuilding finder-inf.el from src/Makefile.in.in. The main build/dump/recompile process is now synchronized with src/Makefile.in.in. Change `WARNING' to `NOTE' and `error checking' to `error-checking' TO avoid tripping faux warnings and errors in the VC++ IDE. Makefile.in.in: Major surgery. Move all stuff related to building anything in the src/ directory from top-level Makefile.in.in to here. Simplify the dependencies. Rearrange into logical subsections. Synchronize the main compile/dump/build-elcs section with xemacs.mak, which is already clean and in good working order. Remove weirdo targets like `all-elc[s]', dump-elc[s], etc. Add additional levels of macros \(e.g. DO_TEMACS, DO_XEMACS, TEMACS_BATCH, XEMACS_BATCH, XEMACS_BATCH_PACKAGES) to factor out duplicated stuff. Clean up handling of "HEAP_IN_DATA" (Cygwin) so it doesn't need to ignore the return value from dumping. Add .NO_PARALLEL since various aspects of building and dumping must be serialized but do not always have dependencies between them (this is impossible in some cases). Everything related to src/ now gets built in one pass in this directory by just running `make' (except the Makefiles themselves and config.h, paths.h, Emacs.ad.h, and other generated .h files). console.c: Update list of possibly valid console types. emacs.c: Rationalize the specifying and handling of the type of the first frame. This was originally prompted by a workspace in which I got GTK to compile under C++ and in the process fixed it so it could coexist with X in the same build -- hence, a combined TTY/X/MS-Windows/GTK build is now possible under Cygwin. (However, you can't simultaneously *display* more than one kind of device connection -- but getting that to work is not that difficult. Perhaps a project for a bored grad student. I (ben) would do it but don't see the use.) To make sense of this, I added new switches that can be used to specifically indicate the window system: -x [aka --use-x], -tty \[aka --use-tty], -msw [aka --use-ms-windows], -gtk [aka --use-gtk], and -gnome [aka --use-gnome, same as --use-gtk]. -nw continues as an alias for -tty. When none have been given, XEmacs checks for other parameters implying particular device types (-t -> tty, -display -> x [or should it have same treatment as DISPLAY below?]), and has ad-hoc logic afterwards: if env var DISPLAY is set, use x (or gtk? perhaps should check whether gnome is running), else MS Windows if it exsits, else TTY if it exists, else stream, and you must be running in batch mode. This also fixes an existing bug whereby compiling with no x, no mswin, no tty, when running non- interactively (e.g. to dump) I get "sorry, must have TTY support". emacs.c: Turn on Vstack_trace_on_error so that errors are debuggable even when occurring extremely early in reinitialization. emacs.c: Try to make sure that the user can see message output under Windows (i.e. it doesn't just disappear right away) regardless of when it occurs, e.g. in the middle of creating the first frame. emacs.c: Define new function `emacs-run-status', indicating whether XEmacs is noninteractive or interactive, whether raw, post-dump/pdump-load or run-temacs, whether we are dumping, whether pdump is in effect. event-stream.c: It's "mommas are fat", not "momas are fat". Fix other typo. event-stream.c: Conditionalize in_menu_callback check on HAVE_MENUBARS, because it won't exist on w/o menubar support, lisp.h: More hackery on RETURN_NOT_REACHED. Cygwin v3.2 DOES complain here if RETURN_NOT_REACHED() is blank, as it is for GCC 2.5+. So make it blank only for GCC 2.5 through 2.999999999999999. Declare Vstack_trace_on_error. profile.c: Need to include "profile.h" to fix warnings. sheap.c: Don't fatal() when need to rerun Make, just stderr_out() and exit(0). That way we can distinguish between a dumping failing expectedly (due to lack of stack space, triggering another dump) and unexpectedly, in which case, we want to stop building. (or go on, if -K is given) syntax.c, syntax.h: Use ints where they belong, and enum syntaxcode's where they belong, and fix warnings thereby. syntax.h: Fix crash caused by an edge condition in the syntax-cache macros. text.h: Spacing fixes. xmotif.h: New file, to get around shadowing warnings. EmacsManager.c, event-Xt.c, glyphs-x.c, gui-x.c, input-method-motif.c, xmmanagerp.h, xmprimitivep.h: Include xmotif.h. alloc.c: Conditionalize in_malloc on ERROR_CHECK_MALLOC. config.h.in, file-coding.h, fileio.c, getloadavg.c, select-x.c, signal.c, sysdep.c, sysfile.h, systime.h, text.c, unicode.c: Eliminate HAVE_WIN32_CODING_SYSTEMS, use WIN32_ANY instead. Replace defined (WIN32_NATIVE) || defined (CYGWIN) with WIN32_ANY. lisp.h: More futile attempts to walk and chew gum at the same time when dealing with subr's that don't return.
author ben
date Thu, 20 Feb 2003 08:19:44 +0000
parents f99d3d25df86
children 70841e88fbee
comparison
equal deleted inserted replaced
1314:15a91d7ae2d1 1315:70921960b980
1 ## Makefile for src subdirectory in XEmacs. 1 ## Makefile for src subdirectory in XEmacs.
2 ## Copyright (C) 1985, 1987, 1988, 1993, 1994 Free Software Foundation, Inc. 2 ## Copyright (C) 1985, 1987, 1988, 1993, 1994 Free Software Foundation, Inc.
3 ## Copyright (C) 1994, 1995 Board of Trustees, University of Illinois 3 ## Copyright (C) 1994, 1995 Board of Trustees, University of Illinois
4 ## Copyright (C) 1996, 1997 Sun Microsystems, Inc. 4 ## Copyright (C) 1996, 1997 Sun Microsystems, Inc.
5 ## Copyright (C) 1998, 1999 J. Kean Johnston. 5 ## Copyright (C) 1998, 1999 J. Kean Johnston.
6 ## Copyright (C) 2001, 2002 Ben Wing. 6 ## Copyright (C) 2001, 2002, 2003 Ben Wing.
7 7
8 ## This file is part of XEmacs. 8 ## This file is part of XEmacs.
9 9
10 ## XEmacs is free software; you can redistribute it and/or modify it 10 ## XEmacs is free software; you can redistribute it and/or modify it
11 ## under the terms of the GNU General Public License as published by the 11 ## under the terms of the GNU General Public License as published by the
21 ## along with XEmacs; see the file COPYING. If not, write to 21 ## along with XEmacs; see the file COPYING. If not, write to
22 ## the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 22 ## the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ## Boston, MA 02111-1307, USA. 23 ## Boston, MA 02111-1307, USA.
24 24
25 ## Synched up with: Not synched with FSF. 25 ## Synched up with: Not synched with FSF.
26
27 .PHONY: all
28 all: build-the-mofo
26 29
27 PROGNAME=@PROGNAME@ 30 PROGNAME=@PROGNAME@
28 31
29 #define NOT_C_CODE 32 #define NOT_C_CODE
30 #include "config.h" 33 #include "config.h"
35 DUMP_ID = dump-id.o 38 DUMP_ID = dump-id.o
36 #else 39 #else
37 DUMP_TARGET = ${PROGNAME} 40 DUMP_TARGET = ${PROGNAME}
38 EXE_TARGET = temacs 41 EXE_TARGET = temacs
39 #endif 42 #endif
40
41 all: ${DUMP_TARGET}
42 .PHONY : all release dump-elc dump-elcs all-elc all-elcs lint
43 43
44 ## For performance and consistency, no built-in rules. 44 ## For performance and consistency, no built-in rules.
45 .SUFFIXES: 45 .SUFFIXES:
46 .SUFFIXES: .c .h .o .i .s .dep 46 .SUFFIXES: .c .h .o .i .s .dep
47 47
131 X11_libs = $(LIBI18N) 131 X11_libs = $(LIBI18N)
132 #endif /* HAVE_X_WINDOWS */ 132 #endif /* HAVE_X_WINDOWS */
133 133
134 ######################################################################### 134 #########################################################################
135 135
136 ## Object files needed for compilation. 136 ## Object files needed for compilation, and other rebuilt files.
137 137
138 ## NOTE: Some of the object files are specified in this file, and 138 ## NOTE: Some of the object files are specified in this file, and others in
139 ## others in configure.in. The general rule is that they be specified 139 ## configure.in. The general rule is that they be specified here whenever
140 ## here whenever they have clear dependencies on configure defines. 140 ## possible -- in practice, that means that they have clear dependencies on
141 ## They should be in configure.in when there is no configure define or 141 ## configure defines. They should be in configure.in when there is no
142 ## when there is extremely hairy code to determine which files are 142 ## configure define or when there is extremely hairy code to determine
143 ## needed (e.g. native sound support) and it would be pointless to 143 ## which files are needed (e.g. native sound support) and it would be
144 ## duplicate that code. 144 ## pointless to duplicate that code.
145 145
146 gui_objs= gui.o 146 gui_objs= gui.o
147 #ifdef HAVE_MENUBARS 147 #ifdef HAVE_MENUBARS
148 gui_objs += menubar.o 148 gui_objs += menubar.o
149 #endif 149 #endif
374 374
375 #ifdef HAVE_X_WINDOWS 375 #ifdef HAVE_X_WINDOWS
376 376
377 # ifdef EXTERNAL_WIDGET 377 # ifdef EXTERNAL_WIDGET
378 external_widget_objs = ExternalShell.o extw-Xt-nonshared.o extw-Xlib-nonshared.o 378 external_widget_objs = ExternalShell.o extw-Xt-nonshared.o extw-Xlib-nonshared.o
379
380 # ifdef LWLIB_USES_MOTIF
381 # ifdef EXTW_LINK
382 motif_other_files = libextcli_Xm.a libextcli_Xm.so.1
383 # else
384 motif_other_files = libextcli_Xm.a
385 # endif
386 #endif /* LWLIB_USES_MOTIF */
387
388 # ifdef EXTW_LINK
389 shared_other_files = libextcli_Xt.so.1 libextcli_Xlib.so.1
390 # endif
391 other_files=\
392 ${motif_other_files}\
393 libextcli_Xt.a libextcli_Xlib.a\
394 ${shared_other_files}
395
396 # endif /* EXTERNAL_WIDGET */
397
398 # if defined (HAVE_OFFIX_DND) || defined (HAVE_CDE)
399 dnd_objs = @dnd_objs@
400 # endif /* HAVE_OFFIX_DND || HAVE_CDE */
401
402 X11_objs = EmacsFrame.o EmacsShell.o TopLevelEmacsShell.o TransientEmacsShell.o EmacsManager.o $(external_widget_objs) $(dnd_objs)
403 #endif /* HAVE_X_WINDOWS */
404
405 ## define otherobjs as list of object files that make-docfile
406 ## should not be told about.
407 otherobjs = lastfile.o $(mallocobjs) $(rallocobjs) $(X11_objs)
408 otherrtls = $(otherobjs:.o=.c.rtl)
409 othersrcs = $(otherobjs:.o=.c)
410
411 LIBES = $(lwlib_libs) $(malloclib) $(ld_libs_all) $(lib_gcc)
412
413 #ifdef I18N3
414 mo_dir = ${etcdir}
415 mo_file = ${mo_dir}emacs.mo
416 #endif
417
418 #########################################################################
419
420 ## Primary rebuilding process
421
422 DO_TEMACS = ${DUMPENV} ./${EXE_TARGET}
423 DO_XEMACS = ./${PROGNAME}
424 LISP = ${srcdir}/../lisp
425
426 BATCH = -no-packages -batch
427 BATCH_PACKAGES = -vanilla -batch
428 TEMACS_BATCH = $(DO_TEMACS) -nd $(BATCH)
429 XEMACS_BATCH = $(DO_XEMACS) $(BATCH)
430 XEMACS_BATCH_PACKAGES = $(DO_XEMACS) $(BATCH_PACKAGES)
431 temacs_loadup_args = -l $(LISP)/loadup.el
432 dump_temacs_args = $(temacs_loadup_args) dump
433 run_temacs_args = $(temacs_loadup_args) run-temacs
434 dump_temacs = $(TEMACS_BATCH) $(dump_temacs_args)
435
436 debug_temacs = gdb $(EXE_TARGET)
437
438 .PHONY : build-the-mofo release update-elc update-elc-2 load-shadows
439
440 ## Compile, dump, and make sure all .elc files are up-to-date.
441
442 ## NOTE: The dependencies would (should) look like the following
443 ## commented-out statement in linear order, but apparently this causes
444 ## problems with some versions of `make' because there is insufficient
445 ## serialization of the build steps. Evidently the .NO_PARALLEL directive
446 ## doesn't help. `make' really seems to be designed to have all
447 ## dependencies proceed upward, not across, and to be all calculable before
448 ## actually running anything. The problem here is that update-elc may
449 ## touch NEEDTODUMP and thus create an additional dependency
450 ## -- but *NOT UNTIL* that step is run. There is no way I can come up with
451 ## to express such a dependency in upward fashion.
452
453 ## build-the-mofo: ${EXE_TARGET} update-elc ${libsrc}DOC $(mo_file) ${other_files} ${DUMP_TARGET} update-elc-2 $(LISP)/finder-inf.el load-shadows
454
455 build-the-mofo: ${EXE_TARGET} update-elc ${libsrc}DOC $(mo_file) ${other_files} ${DUMP_TARGET} load-shadows
456 .NO_PARALLEL: ${EXE_TARGET} update-elc ${libsrc}DOC ${DUMP_TARGET} update-elc-2
457
458 release: all
459 -if [ -w $(LISP) ]; then \
460 w=`pwd`; cd ${srcdir} && $${w}/${EXE_TARGET} -nd ${BATCH} -l $(LISP)/inc-vers; \
461 else true; fi
462 -${dump_temacs}
463 touch release
464
465 update-elc: $(EXE_TARGET)
466 $(TEMACS_BATCH) -l $(LISP)/update-elc.el
467
468 ## Update out-of-date .elcs, other than needed for dumping.
469 update-elc-2: $(EXE_TARGET) $(DUMP_TARGET)
470 $(XEMACS_BATCH) -no-autoloads -l update-elc-2.el -f batch-update-elc-2 $(LISP)
471
472 $(LISP)/finder-inf.el: update-elc-2 $(EXE_TARGET) $(DUMP_TARGET)
473 @echo "Building finder database ..."
474 $(XEMACS_BATCH) -eval '(setq finder-compile-keywords-quiet t)' \
475 -l finder -f finder-compile-keywords
476 @echo "Building finder database ...(done)"
477
478 load-shadows: $(LISP)/finder-inf.el $(EXE_TARGET) $(DUMP_TARGET)
479 #ifndef QUICK_BUILD
480 @echo "Testing for Lisp shadows ..."
481 @$(XEMACS_BATCH) -f list-load-path-shadows
482 #endif
483
484 ## This file is touched by update-elc.el when redumping is necessary.
485 NEEDTODUMP:
486 touch NEEDTODUMP
487
488 ${DUMP_TARGET}: ${EXE_TARGET} NEEDTODUMP
489 #ifdef HEAP_IN_DATA
490 @$(RM) $@ && touch SATISFIED
491 ${dump_temacs}
492 @if test -f SATISFIED; then $(RM) SATISFIED; else $(RM) $@; \
493 $(RECURSIVE_MAKE) $@; fi
494 #else
495 @$(RM) $@
496 ${dump_temacs}
497 #endif
498
499 #ifdef DYNODUMP
500 dynodump_deps = ../dynodump/dynodump.so
501 ../dynodump/dynodump.so:
502 cd ../dynodump && $(RECURSIVE_MAKE)
503 #endif /* DYNODUMP */
504
505 link_deps = $(start_files) ${objs} ${otherobjs} $(lwlib_deps) $(dynodump_deps)
506
507 temacs_deps = $(link_deps) ${DUMP_ID}
508
509 temacs_link_args = \
510 ${start_flags} ${ldflags} \
511 -o $@ ${start_files} ${objs} ${otherobjs} ${DUMP_ID} ${LIBES}
512
513 ${EXE_TARGET}: $(temacs_deps)
514 $(LD) $(temacs_link_args)
515
516 dump-id.c: ${libsrc}make-dump-id ${link_deps}
517 ${libsrc}make-dump-id
518
519 obj_src = $(objs:.o=.c)
520
521 ${libsrc}DOC: ${libsrc}make-docfile NEEDTODUMP ${temacs_deps}
522 #ifdef QUICK_BUILD
523 if test ! -f $@ ; then \
524 #else
525 if true ; then \
526 #endif
527 $(TEMACS_BATCH) -l $(LISP)/make-docfile.el -- \
528 -o ${libsrc}DOC -d ${srcdir} -i ${libsrc}../site-packages \
529 ${obj_src} ${mallocdocsrc} ${rallocdocsrc} \
530 ${extra_doc_files} ; fi
531
532 ${libsrc}make-dump-id:
533 cd ${libsrc} && $(RECURSIVE_MAKE) make-dump-id
534
535 ${libsrc}make-docfile:
536 cd ${libsrc} && $(RECURSIVE_MAKE) make-docfile
537
538 .PHONY: fastdump
539 fastdump: ${EXE_TARGET}
540 @$(RM) ${DUMP_TARGET} && touch SATISFIED
541 -${dump_temacs}
542 @$(XEMACS_BATCH) -f list-load-path-shadows
543
544 .PHONY: all-elc
545 all-elc:
546 cd .. && $(RECURSIVE_MAKE)
547
548 #########################################################################
549
550 ## Subsidiary dependency rules
551
552 #ifdef I18N3
553
554 # if defined(SPARC) && !defined(USG)
555 xgettext= /usr/openwin/bin/xgettext
556 xgettext_args= -o emacs -m_X messages
557 msgfmt= /usr/openwin/bin/msgfmt
558 # else
559 xgettext= xgettext
560 xgettext_args= -s -d emacs -M_X messages
561 msgfmt= msgfmt
562 #endif
563
564 ${mo_dir}emacs.po: ${libsrc}make-msgfile ${libsrc}make-po ${objs}
565 ${libsrc}make-msgfile -o ${libsrc}messages ${objs}
566 cd ${libsrc} && ${xgettext} ${xgettext_args}
567 $(RM) ${mo_dir}emacs.po
568 cd ${libsrc} && ${libsrc}make-po -a ${mo_dir}emacs.po DOC
569
570 ${mo_dir}emacs.mo: ${mo_dir}emacs.po
571 cd ${mo_dir} && ${msgfmt} -o emacs.mo emacs.po
572
573 ${libsrc}make-msgfile:
574 cd ${libsrc} && $(RECURSIVE_MAKE) make-msgfile
575
576 ${libsrc}make-po:
577 cd ${libsrc} && $(RECURSIVE_MAKE) make-po
578
579 #endif /* I18N3 */
580
581 TopLevelEmacsShell.o : ${srcdir}/EmacsShell-sub.c config.h xintrinsicp.h EmacsShellP.h
582 $(CC) -c $(cflags) -DDEFINE_TOP_LEVEL_EMACS_SHELL ${srcdir}/EmacsShell-sub.c
583 mv EmacsShell-sub.o TopLevelEmacsShell.o
584
585 TopLevelEmacsShell.c.rtl : ${srcdir}/EmacsShell-sub.c config.h xintrinsicp.h EmacsShellP.h
586 $(CC) -dr -c $(cflags) -DDEFINE_TOP_LEVEL_EMACS_SHELL ${srcdir}/EmacsShell-sub.c
587 mv EmacsShell-sub.c.rtl TopLevelEmacsShell.c.rtl
588
589 TransientEmacsShell.o : ${srcdir}/EmacsShell-sub.c TopLevelEmacsShell.o config.h xintrinsicp.h EmacsShellP.h
590 $(CC) -c $(cflags) -DDEFINE_TRANSIENT_EMACS_SHELL ${srcdir}/EmacsShell-sub.c
591 mv EmacsShell-sub.o TransientEmacsShell.o
592
593 TransientEmacsShell.c.rtl : ${srcdir}/EmacsShell-sub.c TopLevelEmacsShell.o config.h xintrinsicp.h EmacsShellP.h
594 $(CC) -dr -c $(cflags) -DDEFINE_TRANSIENT_EMACS_SHELL ${srcdir}/EmacsShell-sub.c
595 mv EmacsShell-sub.c.rtl TransientEmacsShell.c.rtl
596
597 ## The above rules are subject to a race condition if using a parallel make.
598 TransientEmacsShell.o : TopLevelEmacsShell.o
599 TransientEmacsShell.c.rtl : TopLevelEmacsShell.c.rtl
600
601 ## Position-independent code for shared library creation
602 #if USE_GCC
603 pic_arg = -fpic
604 #elif defined (IRIX)
605 pic_arg = -KPIC
606 # else
607 pic_arg = -K pic
608 #endif
609
610 #ifdef EXTERNAL_WIDGET
611
612 external_client_motif_objs_shared = ExternalClient-Xm-shared.o extw-Xt-shared.o extw-Xlib-shared.o
613 external_client_xt_objs_shared = ExternalClient-Xt-shared.o extw-Xt-shared.o extw-Xlib-shared.o
614 external_client_xlib_objs_shared = ExternalClient-Xlib-shared.o extw-Xlib-shared.o
615 external_client_motif_objs_nonshared = ExternalClient-Xm-nonshared.o extw-Xt-nonshared.o extw-Xlib-nonshared.o
616 external_client_xt_objs_nonshared = ExternalClient-Xt-nonshared.o extw-Xt-nonshared.o extw-Xlib-nonshared.o
617 external_client_xlib_objs_nonshared = ExternalClient-Xlib-nonshared.o extw-Xlib-nonshared.o
618
619 ## Add dependencies so things work right with a parallel make
620 ExternalClient-Xm-shared.o: ${srcdir}/ExternalClient.c ExternalClient-Xt-shared.o ExternalClient-Xm-nonshared.o
621 $(CC) -c $(pic_arg) $(cflags) -DEXTW_USES_MOTIF ${srcdir}/ExternalClient.c
622 mv ExternalClient.o ExternalClient-Xm-shared.o
623
624 ExternalClient-Xt-shared.o: ${srcdir}/ExternalClient.c ExternalClient-Xt-nonshared.o
625 $(CC) -c $(pic_arg) $(cflags) ${srcdir}/ExternalClient.c
626 mv ExternalClient.o ExternalClient-Xt-shared.o
627
628 ExternalClient-Xlib-shared.o: ${srcdir}/ExternalClient-Xlib.c ExternalClient-Xlib-nonshared.o
629 $(CC) -c $(pic_arg) $(cflags) ${srcdir}/ExternalClient-Xlib.c
630 mv ExternalClient-Xlib.o ExternalClient-Xlib-shared.o
631
632 ExternalClient-Xm-nonshared.o: ${srcdir}/ExternalClient.c ExternalClient-Xt-nonshared.o
633 $(CC) -c $(cflags) -DEXTW_USES_MOTIF ${srcdir}/ExternalClient.c
634 mv ExternalClient.o ExternalClient-Xm-nonshared.o
635
636 ExternalClient-Xt-nonshared.o: ${srcdir}/ExternalClient.c
637 $(CC) -c $(cflags) ${srcdir}/ExternalClient.c
638 mv ExternalClient.o ExternalClient-Xt-nonshared.o
639
640 ExternalClient-Xlib-nonshared.o: ${srcdir}/ExternalClient-Xlib.c
641 $(CC) -c $(cflags) ${srcdir}/ExternalClient-Xlib.c
642 mv ExternalClient-Xlib.o ExternalClient-Xlib-nonshared.o
643
644 ## We compile the common files twice (once with PIC and once without)
645 ## because on some systems, compiling with PIC but not linking into
646 ## a shared library messes things up.
647
648 extw-Xt-shared.o: ${srcdir}/extw-Xt.c extw-Xt-nonshared.o
649 $(CC) -c $(pic_arg) $(cflags) ${srcdir}/extw-Xt.c
650 mv extw-Xt.o extw-Xt-shared.o
651
652 extw-Xlib-shared.o: ${srcdir}/extw-Xlib.c extw-Xlib-nonshared.o
653 $(CC) -c $(pic_arg) $(cflags) ${srcdir}/extw-Xlib.c
654 mv extw-Xlib.o extw-Xlib-shared.o
655
656 extw-Xt-nonshared.o: ${srcdir}/extw-Xt.c
657 $(CC) -c $(cflags) ${srcdir}/extw-Xt.c
658 mv extw-Xt.o extw-Xt-nonshared.o
659
660 extw-Xlib-nonshared.o: ${srcdir}/extw-Xlib.c
661 $(CC) -c $(cflags) ${srcdir}/extw-Xlib.c
662 mv extw-Xlib.o extw-Xlib-nonshared.o
663
664 libextcli_Xm.a: ${external_client_motif_objs_nonshared}
665 ar r libextcli_Xm.a ${external_client_motif_objs_nonshared}
666
667 libextcli_Xt.a: ${external_client_xt_objs_nonshared}
668 ar r libextcli_Xt.a ${external_client_xt_objs_nonshared}
669
670 libextcli_Xlib.a: ${external_client_xlib_objs_nonshared}
671 ar r libextcli_Xlib.a ${external_client_xlib_objs_nonshared}
379 672
380 ## Now we try to figure out how to link a shared library. 673 ## Now we try to figure out how to link a shared library.
381 ## If we cannot figure it out, leave EXTW_LINK undefined and a shared 674 ## If we cannot figure it out, leave EXTW_LINK undefined and a shared
382 ## library will not be created. 675 ## library will not be created.
383 676
418 extw_link_mid = -assert pure-text -o 711 extw_link_mid = -assert pure-text -o
419 extw_link_end = 712 extw_link_end =
420 # endif /* !(DEC_ALPHA && OSF1) */ 713 # endif /* !(DEC_ALPHA && OSF1) */
421 # endif /* not USG5 */ 714 # endif /* not USG5 */
422 715
423 # ifdef LWLIB_USES_MOTIF
424 # ifdef EXTW_LINK
425 motif_other_files = libextcli_Xm.a libextcli_Xm.so.1
426 # else
427 motif_other_files = libextcli_Xm.a
428 # endif
429 #endif /* LWLIB_USES_MOTIF */
430
431 # ifdef EXTW_LINK
432 shared_other_files = libextcli_Xt.so.1 libextcli_Xlib.so.1
433 # endif
434 other_files=\
435 ${motif_other_files}\
436 libextcli_Xt.a libextcli_Xlib.a\
437 ${shared_other_files}
438
439 all: ${other_files}
440 # endif /* EXTERNAL_WIDGET */
441
442 # if defined (HAVE_OFFIX_DND) || defined (HAVE_CDE)
443 dnd_objs = @dnd_objs@
444 # endif /* HAVE_OFFIX_DND || HAVE_CDE */
445
446 X11_objs = EmacsFrame.o EmacsShell.o TopLevelEmacsShell.o TransientEmacsShell.o EmacsManager.o $(external_widget_objs) $(dnd_objs)
447 #endif /* HAVE_X_WINDOWS */
448
449 ## define otherobjs as list of object files that make-docfile
450 ## should not be told about.
451 otherobjs = lastfile.o $(mallocobjs) $(rallocobjs) $(X11_objs)
452 otherrtls = $(otherobjs:.o=.c.rtl)
453 othersrcs = $(otherobjs:.o=.c)
454
455 LIBES = $(lwlib_libs) $(malloclib) $(ld_libs_all) $(lib_gcc)
456
457 #ifdef I18N3
458 mo_dir = ${etcdir}
459 mo_file = ${mo_dir}emacs.mo
460 #endif
461
462 batch = -no-packages -batch
463 batch_packages = -vanilla -batch
464 temacs_loadup = ./${EXE_TARGET} -nd ${batch} -l ${srcdir}/../lisp/loadup.el
465 dump_temacs = ${temacs_loadup} dump
466 run_temacs = ${temacs_loadup} run-temacs
467 debug_temacs = gdb ${EXE_TARGET}
468
469 release: ${EXE_TARGET} ${libsrc}DOC $(mo_file) ${other_files}
470 #ifdef CANNOT_DUMP
471 ln ${EXE_TARGET} ${PROGNAME}
472 #else
473 -if [ -w ${srcdir}/../lisp ]; then \
474 w=`pwd`; cd ${srcdir} && $${w}/${EXE_TARGET} -nd ${batch} -l ${srcdir}/../lisp/inc-vers; \
475 else true; fi
476 -./${EXE_TARGET} -nd ${batch} -l ${srcdir}/../lisp/loadup.el dump
477 touch release
478 #endif /* ! defined (CANNOT_DUMP) */
479
480 ${DUMP_TARGET}: ${EXE_TARGET} ${libsrc}DOC $(mo_file) ${other_files} update-elc.stamp
481 #ifdef HEAP_IN_DATA
482 @$(RM) $@ && touch SATISFIED
483 -${dump_temacs}
484 @if test -f $@; then if test -f SATISFIED; then \
485 echo "Testing for Lisp shadows ..."; \
486 ./${PROGNAME} ${batch} -f list-load-path-shadows; fi; \
487 $(RM) SATISFIED; exit 0; fi; \
488 if test -f SATISFIED; then $(RM) SATISFIED; exit 1; fi; \
489 $(RM) $@; \
490 $(RECURSIVE_MAKE) $@;
491 #else
492 @$(RM) $@
493 ${dump_temacs}
494 @echo "Testing for Lisp shadows ..."
495 @./${PROGNAME} ${batch} -f list-load-path-shadows
496 #endif
497
498 fastdump: ${EXE_TARGET}
499 @$(RM) ${DUMP_TARGET} && touch SATISFIED
500 -${dump_temacs}
501 @./${PROGNAME} ${batch} -f list-load-path-shadows
502
503 FRC.update-elc.stamp :
504
505 update-elc.stamp : ${EXE_TARGET} FRC.update-elc.stamp
506 @touch BYTECOMPILE_CHANGE
507 ./${EXE_TARGET} -nd ${batch} -l ${srcdir}/../lisp/update-elc.el
508 @if test ! -f $@ -o -f BYTECOMPILE_CHANGE; then touch $@; fi; \
509 $(RM) BYTECOMPILE_CHANGE
510
511 obj_src = $(objs:.o=.c)
512
513 dortl : $(obj_rtl) $(otherrtls)
514 echo "(defvar source-files '(" > ${srcdir}/../lisp/source-files.el
515 (for a in $(obj_src) $(othersrcs);do \
516 echo -n "\""$$a"\"" >> ${srcdir}/../lisp/source-files.el ;\
517 done)
518 echo "))" >> ${srcdir}/../lisp/source-files.el
519
520 #ifdef DYNODUMP
521 dynodump_deps = ../dynodump/dynodump.so
522 ../dynodump/dynodump.so:
523 cd ../dynodump && $(RECURSIVE_MAKE)
524 #endif /* DYNODUMP */
525
526 ${libsrc}DOC: ${EXE_TARGET} update-elc.stamp
527 #ifdef QUICK_BUILD
528 if test ! -f $@ ; then \
529 #else
530 if true ; then \
531 #endif
532 ${DUMPENV} ./${EXE_TARGET} -nd ${batch} -l ${srcdir}/../lisp/make-docfile.el -- \
533 -o ${libsrc}DOC -d ${srcdir} -i ${libsrc}../site-packages \
534 ${obj_src} ${mallocdocsrc} ${rallocdocsrc} \
535 ${extra_doc_files} ; fi
536
537 dump_elcs: dump-elcs
538
539 dump-elcs: ${EXE_TARGET}
540 -${DUMPENV} ./${EXE_TARGET} -nd ${batch} -l ${srcdir}/../lisp/update-elc.el
541
542 all-elc all-elcs:
543 cd .. && $(RECURSIVE_MAKE) all-elc
544
545 #ifdef I18N3
546
547 # if defined(SPARC) && !defined(USG)
548 xgettext= /usr/openwin/bin/xgettext
549 xgettext_args= -o emacs -m_X messages
550 msgfmt= /usr/openwin/bin/msgfmt
551 # else
552 xgettext= xgettext
553 xgettext_args= -s -d emacs -M_X messages
554 msgfmt= msgfmt
555 #endif
556
557 ${mo_dir}emacs.po: ${libsrc}make-msgfile ${libsrc}make-po ${objs}
558 ${libsrc}make-msgfile -o ${libsrc}messages ${objs}
559 cd ${libsrc} && ${xgettext} ${xgettext_args}
560 $(RM) ${mo_dir}emacs.po
561 cd ${libsrc} && ${libsrc}make-po -a ${mo_dir}emacs.po DOC
562
563 ${mo_dir}emacs.mo: ${mo_dir}emacs.po
564 cd ${mo_dir} && ${msgfmt} -o emacs.mo emacs.po
565
566 ${libsrc}make-msgfile:
567 cd ${libsrc} && $(RECURSIVE_MAKE) make-msgfile
568
569 ${libsrc}make-po:
570 cd ${libsrc} && $(RECURSIVE_MAKE) make-po
571
572 #endif /* I18N3 */
573
574 ${libsrc}make-dump-id:
575 cd ${libsrc} && $(RECURSIVE_MAKE) make-dump-id
576
577 ${libsrc}make-docfile:
578 cd ${libsrc} && $(RECURSIVE_MAKE) make-docfile
579
580 ## Lint Section
581 LINT.c=$(LINT) $(LINTFLAGS) $(LINTINCLUDES)
582 LINTFILES= $(objs:.o=.ln)
583 LINTINCLUDES = $(cppflags)
584 ## LINTFLAGS= -fd -m -p -s -u -v -x
585 LINTFLAGS= -fd -m -s -u -v -x
586 lint: $(LINTFILES)
587 $(LINT.c) $(LINTFILES)
588 ## end of Lint Section
589
590 link_deps=\
591 $(start_files) ${objs} ${otherobjs}\
592 $(lwlib_deps) $(dynodump_deps)
593
594 temacs_deps = $(link_deps) ${DUMP_ID}
595
596 temacs_link_args=\
597 ${start_flags} ${ldflags}\
598 -o $@ ${start_files} ${objs} ${otherobjs} ${DUMP_ID} ${LIBES}
599
600 ${EXE_TARGET}: $(temacs_deps)
601 $(LD) $(temacs_link_args)
602
603 dump-id.c: ${libsrc}make-dump-id ${link_deps}
604 ${libsrc}make-dump-id
605
606 .PHONY : run-temacs
607
608 run-temacs: ${EXE_TARGET}
609 -${run_temacs}
610
611 ## We have automated tests!!
612 testdir = ${srcdir}/../tests/automated
613 batch_test_emacs = ${batch_packages} -l ${testdir}/test-harness.el -f batch-test-emacs ${testdir}
614
615 .PHONY: check check-temacs
616 check:
617 ./${PROGNAME} ${batch_test_emacs}
618 check-temacs:
619 ${run_temacs} ${batch_test_emacs}
620
621 ## Debugging targets:
622 ##
623 ## None of the debugging products work with a dumped xemacs binary,
624 ## because it does unexpected things like free memory that has been
625 ## malloc'ed in a *different* process!! So we need to run these on
626 ## temacs.
627
628 ## RTC is Sun WorkShop's Run Time Checking, integrated with dbx
629 rtc_patch.o:
630 rtc_patch_area -o $@
631
632 rtcmacs: $(temacs_deps) rtc_patch.o
633 $(RM) ${EXE_TARGET}; $(RECURSIVE_MAKE) ${EXE_TARGET} RTC_patch_objs=rtc_patch.o
634 mv ${EXE_TARGET} rtcmacs
635
636 .PHONY: run-rtcmacs
637 run-rtcmacs: rtcmacs
638 dbx -q -C -c \
639 'dbxenv rtc_error_log_file_name /dev/fd/1; \
640 dbxenv suppress_startup_message 5.0; \
641 ignore POLL; \
642 check -access; \
643 suppress rui; \
644 runargs ${batch} -l ${srcdir}/../lisp/loadup.el run-temacs -vanilla; \
645 run' rtcmacs
646
647 debug-temacs: ${EXE_TARGET}
648 -${debug_temacs}
649
650 ## Purify, Quantify, PureCoverage are software quality products from
651 ## Rational, formerly Pure Atria, formerly Pure Software.
652 ##
653 ## Purify
654 PURIFY_PROG = purify
655 PURIFY_LIBS =
656 PURIFY_FLAGS =\
657 #ifdef PDUMP
658 -search-mmaps=yes\
659 #endif
660 -chain-length=32 -ignore-signals=SIGPOLL\
661 -cache-dir=${blddir}/purecache -always-use-cache-dir=yes
662
663 puremacs: $(temacs_deps)
664 $(PURIFY_PROG) $(PURIFY_FLAGS) $(LD) $(temacs_link_args) $(PURIFY_LIBS)
665 cp $@ ${EXE_TARGET}
666
667 ## Quantify
668 #ifdef QUANTIFY
669 QUANTIFY_PROG = quantify
670 QUANTIFY_HOME = `$(QUANTIFY_PROG) -print-home-dir`
671 QUANTIFY_FLAGS = -cache-dir=./purecache -always-use-cache-dir=yes
672 cppflags += -I$(QUANTIFY_HOME)
673 temacs_link_args += $(QUANTIFY_HOME)/quantify_stubs.a
674
675 quantmacs: $(temacs_deps)
676 $(QUANTIFY_PROG) $(QUANTIFY_FLAGS) $(LD) $(temacs_link_args)
677 cp $@ ${EXE_TARGET}
678 #endif /* QUANTIFY */
679
680
681 PURECOV_PROG=purecov
682 covmacs: $(temacs_deps)
683 $(PURECOV_PROG) $(LD) $(temacs_link_args)
684
685
686 TopLevelEmacsShell.o : ${srcdir}/EmacsShell-sub.c config.h xintrinsicp.h EmacsShellP.h
687 $(CC) -c $(cflags) -DDEFINE_TOP_LEVEL_EMACS_SHELL ${srcdir}/EmacsShell-sub.c
688 mv EmacsShell-sub.o TopLevelEmacsShell.o
689
690 TopLevelEmacsShell.c.rtl : ${srcdir}/EmacsShell-sub.c config.h xintrinsicp.h EmacsShellP.h
691 $(CC) -dr -c $(cflags) -DDEFINE_TOP_LEVEL_EMACS_SHELL ${srcdir}/EmacsShell-sub.c
692 mv EmacsShell-sub.c.rtl TopLevelEmacsShell.c.rtl
693
694 TransientEmacsShell.o : ${srcdir}/EmacsShell-sub.c TopLevelEmacsShell.o config.h xintrinsicp.h EmacsShellP.h
695 $(CC) -c $(cflags) -DDEFINE_TRANSIENT_EMACS_SHELL ${srcdir}/EmacsShell-sub.c
696 mv EmacsShell-sub.o TransientEmacsShell.o
697
698 TransientEmacsShell.c.rtl : ${srcdir}/EmacsShell-sub.c TopLevelEmacsShell.o config.h xintrinsicp.h EmacsShellP.h
699 $(CC) -dr -c $(cflags) -DDEFINE_TRANSIENT_EMACS_SHELL ${srcdir}/EmacsShell-sub.c
700 mv EmacsShell-sub.c.rtl TransientEmacsShell.c.rtl
701
702 ## The above rules are subject to a race condition if using a parallel make.
703 TransientEmacsShell.o : TopLevelEmacsShell.o
704 TransientEmacsShell.c.rtl : TopLevelEmacsShell.c.rtl
705
706 ## Position-independent code for shared library creation
707 #if USE_GCC
708 pic_arg = -fpic
709 #elif defined (IRIX)
710 pic_arg = -KPIC
711 # else
712 pic_arg = -K pic
713 #endif
714
715 #ifdef EXTERNAL_WIDGET
716
717 external_client_motif_objs_shared = ExternalClient-Xm-shared.o extw-Xt-shared.o extw-Xlib-shared.o
718 external_client_xt_objs_shared = ExternalClient-Xt-shared.o extw-Xt-shared.o extw-Xlib-shared.o
719 external_client_xlib_objs_shared = ExternalClient-Xlib-shared.o extw-Xlib-shared.o
720 external_client_motif_objs_nonshared = ExternalClient-Xm-nonshared.o extw-Xt-nonshared.o extw-Xlib-nonshared.o
721 external_client_xt_objs_nonshared = ExternalClient-Xt-nonshared.o extw-Xt-nonshared.o extw-Xlib-nonshared.o
722 external_client_xlib_objs_nonshared = ExternalClient-Xlib-nonshared.o extw-Xlib-nonshared.o
723
724 ## Add dependencies so things work right with a parallel make
725 ExternalClient-Xm-shared.o: ${srcdir}/ExternalClient.c ExternalClient-Xt-shared.o ExternalClient-Xm-nonshared.o
726 $(CC) -c $(pic_arg) $(cflags) -DEXTW_USES_MOTIF ${srcdir}/ExternalClient.c
727 mv ExternalClient.o ExternalClient-Xm-shared.o
728
729 ExternalClient-Xt-shared.o: ${srcdir}/ExternalClient.c ExternalClient-Xt-nonshared.o
730 $(CC) -c $(pic_arg) $(cflags) ${srcdir}/ExternalClient.c
731 mv ExternalClient.o ExternalClient-Xt-shared.o
732
733 ExternalClient-Xlib-shared.o: ${srcdir}/ExternalClient-Xlib.c ExternalClient-Xlib-nonshared.o
734 $(CC) -c $(pic_arg) $(cflags) ${srcdir}/ExternalClient-Xlib.c
735 mv ExternalClient-Xlib.o ExternalClient-Xlib-shared.o
736
737 ExternalClient-Xm-nonshared.o: ${srcdir}/ExternalClient.c ExternalClient-Xt-nonshared.o
738 $(CC) -c $(cflags) -DEXTW_USES_MOTIF ${srcdir}/ExternalClient.c
739 mv ExternalClient.o ExternalClient-Xm-nonshared.o
740
741 ExternalClient-Xt-nonshared.o: ${srcdir}/ExternalClient.c
742 $(CC) -c $(cflags) ${srcdir}/ExternalClient.c
743 mv ExternalClient.o ExternalClient-Xt-nonshared.o
744
745 ExternalClient-Xlib-nonshared.o: ${srcdir}/ExternalClient-Xlib.c
746 $(CC) -c $(cflags) ${srcdir}/ExternalClient-Xlib.c
747 mv ExternalClient-Xlib.o ExternalClient-Xlib-nonshared.o
748
749 ## We compile the common files twice (once with PIC and once without)
750 ## because on some systems, compiling with PIC but not linking into
751 ## a shared library messes things up.
752
753 extw-Xt-shared.o: ${srcdir}/extw-Xt.c extw-Xt-nonshared.o
754 $(CC) -c $(pic_arg) $(cflags) ${srcdir}/extw-Xt.c
755 mv extw-Xt.o extw-Xt-shared.o
756
757 extw-Xlib-shared.o: ${srcdir}/extw-Xlib.c extw-Xlib-nonshared.o
758 $(CC) -c $(pic_arg) $(cflags) ${srcdir}/extw-Xlib.c
759 mv extw-Xlib.o extw-Xlib-shared.o
760
761 extw-Xt-nonshared.o: ${srcdir}/extw-Xt.c
762 $(CC) -c $(cflags) ${srcdir}/extw-Xt.c
763 mv extw-Xt.o extw-Xt-nonshared.o
764
765 extw-Xlib-nonshared.o: ${srcdir}/extw-Xlib.c
766 $(CC) -c $(cflags) ${srcdir}/extw-Xlib.c
767 mv extw-Xlib.o extw-Xlib-nonshared.o
768
769 libextcli_Xm.a: ${external_client_motif_objs_nonshared}
770 ar r libextcli_Xm.a ${external_client_motif_objs_nonshared}
771
772 libextcli_Xt.a: ${external_client_xt_objs_nonshared}
773 ar r libextcli_Xt.a ${external_client_xt_objs_nonshared}
774
775 libextcli_Xlib.a: ${external_client_xlib_objs_nonshared}
776 ar r libextcli_Xlib.a ${external_client_xlib_objs_nonshared}
777
778 #ifdef EXTW_LINK 716 #ifdef EXTW_LINK
779 717
780 libextcli_Xm.so.1: ${external_client_motif_objs_shared} 718 libextcli_Xm.so.1: ${external_client_motif_objs_shared}
781 ${extw_link_beg} ${external_client_motif_objs_shared} ${extw_link_mid} libextcli_Xm.so.1 ${extw_link_end} 719 ${extw_link_beg} ${external_client_motif_objs_shared} ${extw_link_mid} libextcli_Xm.so.1 ${extw_link_end}
782 720
845 #endif 783 #endif
846 784
847 xemacs_res.o: ${srcdir}/../nt/xemacs.rc 785 xemacs_res.o: ${srcdir}/../nt/xemacs.rc
848 windres --include-dir ${srcdir}/../nt -i ${srcdir}/../nt/xemacs.rc -o $@ 786 windres --include-dir ${srcdir}/../nt -i ${srcdir}/../nt/xemacs.rc -o $@
849 787
850 ## System-specific programs to be made. 788 #########################################################################
851 ## ${other_files}, $(objects_system) and $(objects_machine) 789
852 ## select which of these should be compiled. */ 790 ## Other random crap
791
792 dortl : $(obj_rtl) $(otherrtls)
793 echo "(defvar source-files '(" > $(LISP)/source-files.el
794 (for a in $(obj_src) $(othersrcs);do \
795 echo -n "\""$$a"\"" >> $(LISP)/source-files.el ;\
796 done)
797 echo "))" >> $(LISP)/source-files.el
798
799 ## Lint Section
800 LINT.c=$(LINT) $(LINTFLAGS) $(LINTINCLUDES)
801 LINTFILES= $(objs:.o=.ln)
802 LINTINCLUDES = $(cppflags)
803 ## LINTFLAGS= -fd -m -p -s -u -v -x
804 LINTFLAGS= -fd -m -s -u -v -x
805 .PHONY: lint
806 lint: $(LINTFILES)
807 $(LINT.c) $(LINTFILES)
808 ## end of Lint Section
809
810 ## We have automated tests!!
811 testdir = ${srcdir}/../tests/automated
812 batch_test_emacs = ${BATCH_PACKAGES} -l ${testdir}/test-harness.el -f batch-test-emacs ${testdir}
813
814 .PHONY: check check-temacs check-features
815 check:
816 $(DO_XEMACS) $(batch_test_emacs)
817 check-temacs:
818 $(TEMACS_BATCH) $(run_temacs_args) $(batch_test_emacs)
819 check-features: all
820 $(XEMACS_BATCH) -l check-features.el
821
822 ## Debugging targets:
823 ##
824 ## None of the debugging products work with a dumped xemacs binary,
825 ## because it does unexpected things like free memory that has been
826 ## malloc'ed in a *different* process!! So we need to run these on
827 ## temacs.
828
829 ## RTC is Sun WorkShop's Run Time Checking, integrated with dbx
830 rtc_patch.o:
831 rtc_patch_area -o $@
832
833 rtcmacs: $(temacs_deps) rtc_patch.o
834 $(RM) ${EXE_TARGET}; $(RECURSIVE_MAKE) ${EXE_TARGET} RTC_patch_objs=rtc_patch.o
835 mv ${EXE_TARGET} rtcmacs
836
837 .PHONY: run-rtcmacs
838 run-rtcmacs: rtcmacs
839 dbx -q -C -c \
840 'dbxenv rtc_error_log_file_name /dev/fd/1; \
841 dbxenv suppress_startup_message 5.0; \
842 ignore POLL; \
843 check -access; \
844 suppress rui; \
845 runargs -nd ${BATCH} ${run_temacs_args} -vanilla; \
846 run' rtcmacs
847
848 debug-temacs: ${EXE_TARGET}
849 -${debug_temacs}
850
851 ## Purify, Quantify, PureCoverage are software quality products from
852 ## Rational, formerly Pure Atria, formerly Pure Software.
853 ##
854 ## Purify
855 PURIFY_PROG = purify
856 PURIFY_LIBS =
857 PURIFY_FLAGS =\
858 #ifdef PDUMP
859 -search-mmaps=yes\
860 #endif
861 -chain-length=32 -ignore-signals=SIGPOLL\
862 -cache-dir=${blddir}/purecache -always-use-cache-dir=yes
863
864 puremacs: $(temacs_deps)
865 $(PURIFY_PROG) $(PURIFY_FLAGS) $(LD) $(temacs_link_args) $(PURIFY_LIBS)
866 cp $@ ${EXE_TARGET}
867
868 ## Quantify
869 #ifdef QUANTIFY
870 QUANTIFY_PROG = quantify
871 QUANTIFY_HOME = `$(QUANTIFY_PROG) -print-home-dir`
872 QUANTIFY_FLAGS = -cache-dir=./purecache -always-use-cache-dir=yes
873 cppflags += -I$(QUANTIFY_HOME)
874 temacs_link_args += $(QUANTIFY_HOME)/quantify_stubs.a
875
876 quantmacs: $(temacs_deps)
877 $(QUANTIFY_PROG) $(QUANTIFY_FLAGS) $(LD) $(temacs_link_args)
878 cp $@ ${EXE_TARGET}
879 #endif /* QUANTIFY */
880
881 PURECOV_PROG=purecov
882 covmacs: $(temacs_deps)
883 $(PURECOV_PROG) $(LD) $(temacs_link_args)
853 884
854 .PHONY: mostlyclean clean distclean realclean versionclean extraclean 885 .PHONY: mostlyclean clean distclean realclean versionclean extraclean
855 mostlyclean: 886 mostlyclean:
856 $(RM) temacs puremacs quantmacs *.o *.i \ 887 $(RM) temacs puremacs quantmacs *.o *.i \
857 core temacs.exe sheap-adjust.h 888 core temacs.exe sheap-adjust.h
858 clean: mostlyclean versionclean 889 clean: mostlyclean versionclean
859 $(RM) libextcli* update-elc.stamp 890 $(RM) libextcli*
860 ## This is used in making a distribution. 891 ## This is used in making a distribution.
861 ## Do not use it on development directories! 892 ## Do not use it on development directories!
862 distclean: clean 893 distclean: clean
863 $(RM) config.h paths.h Emacs.ad.h \ 894 $(RM) config.h paths.h Emacs.ad.h \
864 GNUmakefile Makefile Makefile.in TAGS ${PROGNAME}.* 895 GNUmakefile Makefile Makefile.in TAGS ${PROGNAME}.*