Mercurial > hg > xemacs-beta
diff src/Makefile.in.in @ 428:3ecd8885ac67 r21-2-22
Import from CVS: tag r21-2-22
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:28:15 +0200 |
parents | |
children | 9d177e8d4150 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Makefile.in.in Mon Aug 13 11:28:15 2007 +0200 @@ -0,0 +1,746 @@ +## Makefile for src subdirectory in XEmacs. +## Copyright (C) 1985, 1987, 1988, 1993, 1994 Free Software Foundation, Inc. +## Copyright (C) 1994, 1995 Board of Trustees, University of Illinois +## Copyright (C) 1996, 1997 Sun Microsystems, Inc. +## Copyright (C) 1998, 1999 J. Kean Johnston. + +## 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. + +## Synched up with: Not synched with FSF. + +PROGNAME=@PROGNAME@ + +all: ${PROGNAME} +.PHONY : all release dump-elc dump-elcs all-elc all-elcs lint + +## For performance and consistency, no built-in rules. +.SUFFIXES: +.SUFFIXES: .c .h .o .i .s .dep + +#ifdef USE_GNU_MAKE +RECURSIVE_MAKE=$(MAKE) +#else +@SET_MAKE@ +RECURSIVE_MAKE=@RECURSIVE_MAKE@ +#endif + +SHELL=/bin/sh +RM = rm -f + +lispdir = ${srcdir}/../lisp/ +moduledir = ${srcdir}/../modules/ +libsrc = ../lib-src/ +etcdir = ../etc/ + +## Here are the things that we expect ../configure to edit. +prefix=@prefix@ +srcdir=@srcdir@ +blddir=@blddir@ +version=@version@ +CC=@XEMACS_CC@ +CPP=@CPP@ +CFLAGS=@CFLAGS@ +CPPFLAGS=@CPPFLAGS@ +LDFLAGS=@LDFLAGS@ + +c_switch_all=@c_switch_all@ +ld_switch_all=@ld_switch_all@ +ld_libs_all=@ld_libs_all@ +ld_dynamic_link_flags=@ld_dynamic_link_flags@ + +extra_objs=@extra_objs@ +LN_S=@LN_S@ + +ld_switch_shared=@ld_switch_shared@ +start_files=@start_files@ +start_flags=@start_flags@ +LD=@ld@ +lib_gcc=@lib_gcc@ +##libmcheck=@libmcheck@ + +#define NOT_C_CODE +#include "config.h" + +## With the traditional VPATH setting, it is not possible to +## simultaneously compile in-place and in another directory. The +## mistaken definition is that *all* dependencies are searched for in +## the VPATH directory, rather than just the dependencies that are not +## themselves targets. Thus, if there is an up-to-date .o file in the +## in-place location, it will not get recompiled in the not-in-place +## location. + +## The GNU Make "vpath" directive continues this tradition, but at +## least lets you restrict the classes of files that it applies to. +## This allows us to kludge around the problem. + +#ifdef USE_GNU_MAKE +vpath %.c @srcdir@ +vpath %.h @srcdir@ +## now list files that should NOT be searched in the srcdir. +## This includes any .c or .h built from something else +## (e.g. a .in file). +vpath config.h +vpath paths.h +vpath Emacs.ad.h +vpath sheap-adjust.h +#else +VPATH=@srcdir@ +#endif + +RM = rm -f + +#ifdef HAVE_NATIVE_SOUND +sound_cflags=@sound_cflags@ +#endif + +LWLIB_SRCDIR = ${srcdir}/../lwlib + +#ifdef HAVE_X_WINDOWS +lwlib_libs = ../lwlib/liblw.a +lwlib_deps = $(lwlib_libs) +$(lwlib_libs) : + cd ../lwlib && $(RECURSIVE_MAKE) + +x_objs=balloon_help.o balloon-x.o console-x.o device-x.o event-Xt.o frame-x.o\ + glyphs-x.o objects-x.o redisplay-x.o select-x.o xgccache.o + +#ifdef AIX4 +LIBI18N = -li18n +#endif /* AIX4 */ + +X11_libs = $(LIBI18N) +#endif /* HAVE_X_WINDOWS */ + +#ifdef HEAP_IN_DATA +sheap_obj=sheap.o +#endif + +## -Demacs is needed to make some files produce the correct version +## for use in Emacs. + +cppflags = $(CPPFLAGS) -Demacs -I. $(c_switch_all) +cflags = $(CFLAGS) $(cppflags) +ldflags = $(LDFLAGS) $(ld_switch_all) $(ld_dynamic_link_flags) + +#ifdef SOLARIS2 +%.o : %.c +#else +.c.o: +#endif + $(CC) -c $(cflags) $< + +## Create preprocessor output (debugging purposes only) +.c.i: +#ifdef __GNUC__ + $(CC) -E $(cppflags) -o $@ $< +#else /* works on Solaris; what about other systems? */ + $(CC) -P $(cppflags) $< +#endif /* compiler */ + +## Create assembler output (debugging purposes only) +.c.s: + $(CC) -S -c $(cflags) $< + +## Create RTL files +%.c.rtl : %.c + $(CC) -dr -c $(cflags) $< + +## lastfile must follow all files whose initialized data areas should +## be dumped as pure by dump-emacs. + +## NOTE: The last line cannot be all macros, because make will barf +## if they all come out null. + +objs=\ + abbrev.o alloc.o blocktype.o buffer.o bytecode.o\ + callint.o callproc.o casefiddle.o casetab.o chartab.o\ + cmdloop.o cmds.o console.o console-stream.o\ + data.o device.o dired.o doc.o doprnt.o dynarr.o\ + editfns.o elhash.o emacs.o\ + eval.o events.o $(extra_objs)\ + event-stream.o extents.o faces.o\ + fileio.o $(LOCK_OBJ) filemode.o floatfns.o fns.o font-lock.o\ + frame.o general.o glyphs.o glyphs-eimage.o glyphs-widget.o\ + gui.o gutter.o $(gui_objs) hash.o imgproc.o indent.o insdel.o intl.o\ + keymap.o $(RTC_patch_objs) line-number.o lread.o lstream.o\ + macros.o marker.o md5.o minibuf.o objects.o opaque.o\ + print.o process.o profile.o\ + rangetab.o redisplay.o redisplay-output.o regex.o\ + search.o select.o $(sheap_obj) signal.o sound.o\ + specifier.o strftime.o symbols.o syntax.o sysdep.o\ + undo.o $(x_objs) widget.o window.o + +obj_rtl = $(objs:.o=.c.rtl) + +#ifdef REL_ALLOC +rallocdocsrc = ralloc.c +rallocobjs = ralloc.o +#endif + +malloclib = $(libmcheck) +#ifndef SYSTEM_MALLOC +# ifdef GNU_MALLOC /* GNU malloc */ +# ifdef ERROR_CHECK_MALLOC +#ifdef DOUG_LEA_MALLOC +mallocobjs = free-hook.o vm-limit.o +#else +mallocobjs = gmalloc.o free-hook.o vm-limit.o +#endif +mallocdocsrc = free-hook.c +# else /* New GNU malloc, sans error checking */ +#ifdef DOUG_LEA_MALLOC +mallocobjs = vm-limit.o +#else +mallocobjs = gmalloc.o vm-limit.o +#endif +mallocdocsrc = +# endif /* ERROR_CHECK_MALLOC */ +# else /* Older GNU malloc */ +mallocobjs = malloc.o +mallocdocsrc = +# endif /* Older GNU malloc */ +#else /* SYSTEM_MALLOC */ +mallocobjs = +mallocdocsrc = +#ifdef USE_DEBUG_MALLOC +malloclib = -ldmalloc +#endif /* USE_DEBUG_MALLOC */ +#endif /* SYSTEM_MALLOC */ + +#ifdef HAVE_X_WINDOWS + +# ifdef EXTERNAL_WIDGET +external_widget_objs = ExternalShell.o extw-Xt-nonshared.o extw-Xlib-nonshared.o + +## Now we try to figure out how to link a shared library. +## If we cannot figure it out, leave EXTW_LINK undefined and a shared +## library will not be created. + +# ifdef USE_GCC +# ifdef USG5 +# define EXTW_LINK(objs, output) $(CC) -shared objs -Xlinker -z -Xlinker text -o output +extw_link_beg = $(CC) -shared +extw_link_mid = -Xlinker -z -Xlinker text -o +extw_link_end = +## I cannot figure out how to do shared a.out libraries, so just punt. +# elif !defined (LINUX) || defined (__ELF__) +# define EXTW_LINK(objs, output) $(CC) -shared objs -o output +extw_link_beg = $(CC) -shared +extw_link_mid = -o +extw_link_end = +# endif +# elif defined (USG5) +# if defined (IRIX) +# define EXTW_LINK(objs, output) $(LD) -shared -g -check_registry ${TOOLROOT}/usr/lib/so_locations objs -o output +extw_link_beg = $(LD) -shared -g -check_registry ${TOOLROOT}/usr/lib/so_locations +extw_link_mid = -o +extw_link_end = +# else /* not IRIX */ +# define EXTW_LINK(objs, output) $(CC) -G objs -z text -o output +extw_link_beg = $(CC) -G +extw_link_mid = -z text -o +extw_link_end = +# endif /* not IRIX */ +# else /* not USG5 */ +# if defined (DEC_ALPHA) && defined (OSF1) +# define EXTW_LINK(objs, output) $(LD) $(ldflags) $(ld_switch_shared) -d objs -o output $(LIBES) +extw_link_beg = $(LD) $(ldflags) $(ld_switch_shared) -d +extw_link_mid = -o +extw_link_end = $(LIBES) +# else /* !(DEC_ALPHA && OSF1) */ +# define EXTW_LINK(objs, output) $(LD) -dc objs -assert pure-text -o output +extw_link_beg = $(LD) -dc +extw_link_mid = -assert pure-text -o +extw_link_end = +# endif /* !(DEC_ALPHA && OSF1) */ +# endif /* not USG5 */ + +# ifdef LWLIB_USES_MOTIF +# ifdef EXTW_LINK +motif_other_files = libextcli_Xm.a libextcli_Xm.so.1 +# else +motif_other_files = libextcli_Xm.a +# endif +#endif /* LWLIB_USES_MOTIF */ + +# ifdef EXTW_LINK +shared_other_files = libextcli_Xt.so.1 libextcli_Xlib.so.1 +# endif +other_files=\ + ${motif_other_files}\ + libextcli_Xt.a libextcli_Xlib.a\ + ${shared_other_files} + +all: ${other_files} +# endif /* EXTERNAL_WIDGET */ + +# if defined (HAVE_OFFIX_DND) || defined (HAVE_CDE) +dnd_objs = @dnd_objs@ +# endif /* HAVE_OFFIX_DND || HAVE_CDE */ + +X11_objs = EmacsFrame.o EmacsShell.o TopLevelEmacsShell.o TransientEmacsShell.o EmacsManager.o $(external_widget_objs) $(dnd_objs) +#endif /* HAVE_X_WINDOWS */ + +## define otherobjs as list of object files that make-docfile +## should not be told about. +otherobjs = lastfile.o $(mallocobjs) $(rallocobjs) $(X11_objs) +otherrtls = $(otherobjs:.o=.c.rtl) +othersrcs = $(otherobjs:.o=.c) + +LIBES = $(lwlib_libs) $(malloclib) $(ld_libs_all) $(lib_gcc) + +#ifdef I18N3 +mo_dir = ${etcdir} +mo_file = ${mo_dir}emacs.mo +#endif + +#ifdef WINDOWSNT +LOADPATH = EMACSBOOTSTRAPLOADPATH="${lispdir};${blddir}" +MODULEPATH = EMACSBOOTSTRAPMODULEPATH="${moduledir};${blddir}" +#else +LOADPATH = EMACSBOOTSTRAPLOADPATH="${lispdir}:${blddir}" +MODULEPATH = EMACSBOOTSTRAPMODULEPATH="${moduledir}:${blddir}" +#endif +DUMPENV = $(LOADPATH) $(MODULEPATH) +temacs_loadup = $(DUMPENV) ./temacs -batch -l ${srcdir}/../lisp/loadup.el +dump_temacs = ${temacs_loadup} dump +run_temacs = ${temacs_loadup} run-temacs + +release: temacs ${libsrc}DOC $(mo_file) ${other_files} +#ifdef CANNOT_DUMP + ln temacs ${PROGNAME} +#else +#ifdef HAVE_SHM + -if [ -w ${srcdir}/../lisp ]; then \ + w=`pwd`; cd ${srcdir} && $${w}/temacs -nl -batch -l ${srcdir}/../lisp/inc-vers; \ + else true; fi + -$(DUMPENV) ./temacs -nl -batch -l ${srcdir}/../lisp/loadup.el dump +#else /* ! defined (HAVE_SHM) */ + -if [ -w ${srcdir}/../lisp ]; then \ + w=`pwd`; cd ${srcdir} && $${w}/temacs -batch -l ${srcdir}/../lisp/inc-vers; \ + else true; fi + -$(DUMPENV) ./temacs -batch -l ${srcdir}/../lisp/loadup.el dump +#endif /* ! defined (HAVE_SHM) */ + touch release +#endif /* ! defined (CANNOT_DUMP) */ + +${PROGNAME}: temacs ${libsrc}DOC $(mo_file) ${other_files} update-elc.stamp +#ifdef HEAP_IN_DATA + @$(RM) $@ $@.exe && touch SATISFIED + -${dump_temacs} + @if test -f $@; then if test -f SATISFIED; then \ + echo "Testing for Lisp shadows ..."; \ + ./${PROGNAME} -batch -vanilla -f list-load-path-shadows; fi; \ + $(RM) SATISFIED; exit 0; fi; \ + if test -f SATISFIED; then $(RM) SATISFIED; exit 1; fi; \ + $(RECURSIVE_MAKE) $@; +#else + @$(RM) $@ + -${dump_temacs} + @echo "Testing for Lisp shadows ..." + @./${PROGNAME} -batch -vanilla -f list-load-path-shadows +#endif + +fastdump: temacs + @$(RM) ${PROGNAME} && touch SATISFIED + -${dump_temacs} + @./${PROGNAME} -batch -vanilla -f list-load-path-shadows + +FRC.update-elc.stamp : + +update-elc.stamp : temacs FRC.update-elc.stamp + @touch NOBYTECOMPILE + ${DUMPENV} ./temacs -batch -l ${srcdir}/../lisp/update-elc.el + @if test ! -f $@ -o -f NOBYTECOMPILE; then touch $@; fi; \ + $(RM) NOBYTECOMPILE + +obj_src = $(objs:.o=.c) + +dortl : $(obj_rtl) $(otherrtls) + echo "(defvar source-files '(" > ${srcdir}/../lisp/source-files.el + (for a in $(obj_src) $(othersrcs);do \ + echo -n "\""$$a"\"" >> ${srcdir}/../lisp/source-files.el ;\ + done) + echo "))" >> ${srcdir}/../lisp/source-files.el + +#ifdef DYNODUMP +dynodump_deps = ../dynodump/dynodump.so +../dynodump/dynodump.so: + cd ../dynodump && $(RECURSIVE_MAKE) +#endif /* DYNODUMP */ + +${libsrc}DOC: temacs update-elc.stamp + $(RM) ${libsrc}DOC; \ + ${DUMPENV} ./temacs -batch -l ${srcdir}/../lisp/make-docfile.el -- \ + -o ${libsrc}DOC -d ${srcdir} -i ${libsrc}../site-packages \ + ${obj_src} ${mallocdocsrc} ${rallocdocsrc} + +dump_elcs: dump-elcs + +dump-elcs: temacs + -${DUMPENV} ./temacs -batch -l ${srcdir}/../lisp/update-elc.el + +all-elc all-elcs: + cd .. && $(RECURSIVE_MAKE) all-elc + +#ifdef I18N3 + +# if defined(SPARC) && !defined(USG) + xgettext= /usr/openwin/bin/xgettext + xgettext_args= -o emacs -m_X messages + msgfmt= /usr/openwin/bin/msgfmt +# else + xgettext= xgettext + xgettext_args= -s -d emacs -M_X messages + msgfmt= msgfmt +#endif + +${mo_dir}emacs.po: ${libsrc}make-msgfile ${libsrc}make-po ${objs} + ${libsrc}make-msgfile -o ${libsrc}messages ${objs} + cd ${libsrc} && ${xgettext} ${xgettext_args} + $(RM) ${mo_dir}emacs.po + cd ${libsrc} && ${libsrc}make-po -a ${mo_dir}emacs.po DOC + +${mo_dir}emacs.mo: ${mo_dir}emacs.po + cd ${mo_dir} && ${msgfmt} -o emacs.mo emacs.po + +${libsrc}make-msgfile: + cd ${libsrc} && $(RECURSIVE_MAKE) make-msgfile + +${libsrc}make-po: + cd ${libsrc} && $(RECURSIVE_MAKE) make-po + +#endif /* I18N3 */ + +${libsrc}make-docfile: + cd ${libsrc} && $(RECURSIVE_MAKE) make-docfile + +## Lint Section +LINT.c=$(LINT) $(LINTFLAGS) $(LINTINCLUDES) +LINTFILES= $(objs:.o=.ln) +LINTINCLUDES = $(cppflags) +## LINTFLAGS= -fd -m -p -s -u -v -x +LINTFLAGS= -fd -m -s -u -v -x +lint: $(LINTFILES) + $(LINT.c) $(LINTFILES) +## end of Lint Section + +temacs_deps=\ + $(start_files) ${objs} ${otherobjs}\ + $(lwlib_deps) $(dynodump_deps) + +temacs_link_args=\ + ${start_flags} ${ldflags}\ + -o $@ ${start_files} ${objs} ${otherobjs} ${LIBES} + +temacs: $(temacs_deps) + $(LD) $(temacs_link_args) + +.PHONY : run-temacs + +run-temacs: temacs + -${run_temacs} + +## We have automated tests!! +testdir = ${srcdir}/../tests/automated +batch_test_emacs = -batch -l ${testdir}/test-harness.el -f batch-test-emacs ${testdir} + +.PHONY: check check-temacs +check: + ./${PROGNAME} ${batch_test_emacs} +check-temacs: + ${run_temacs} ${batch_test_emacs} + +## Debugging targets: +## +## None of the debugging products work with a dumped xemacs binary, +## because it does unexpected things like free memory that has been +## malloc'ed in a *different* process!! So we need to run these on +## temacs. + +## RTC is Sun WorkShop's Run Time Checking, integrated with dbx +rtc_patch.o: + rtc_patch_area -o $@ + +rtcmacs: $(temacs_deps) rtc_patch.o + $(RM) temacs; $(RECURSIVE_MAKE) temacs RTC_patch_objs=rtc_patch.o + mv temacs rtcmacs + +.PHONY: run-rtcmacs +run-rtcmacs: rtcmacs + dbx -q -C -c \ + 'dbxenv rtc_error_log_file_name /dev/fd/1; \ + dbxenv suppress_startup_message 5.0; \ + ignore POLL; \ + check -access; \ + suppress rui; \ + runargs -batch -l ${srcdir}/../lisp/loadup.el run-temacs -q; \ + run' rtcmacs + +## Purify, Quantify, PureCoverage are software quality products from +## Rational, formerly Pure Atria, formerly Pure Software. +## +## Purify +PURIFY_PROG = purify +PURIFY_FLAGS = -chain-length=32 -ignore-signals=SIGPOLL -threads=yes \ + -cache-dir=./purecache -always-use-cache-dir=yes -pointer-mask=0x0fffffff +PURIFY_LIBS = -lpthread +puremacs: $(temacs_deps) + $(PURIFY_PROG) $(PURIFY_FLAGS) $(LD) $(temacs_link_args) $(PURIFY_LIBS) + cp $@ temacs + +## Quantify +#ifdef QUANTIFY +QUANTIFY_PROG = quantify +QUANTIFY_HOME = `$(QUANTIFY_PROG) -print-home-dir` +QUANTIFY_FLAGS = -cache-dir=./purecache -always-use-cache-dir=yes +cppflags += -I$(QUANTIFY_HOME) +temacs_link_args += $(QUANTIFY_HOME)/quantify_stubs.a + +quantmacs: $(temacs_deps) + $(QUANTIFY_PROG) $(QUANTIFY_FLAGS) $(LD) $(temacs_link_args) + cp $@ temacs +#endif /* QUANTIFY */ + + +PURECOV_PROG=purecov +covmacs: $(temacs_deps) + $(PURECOV_PROG) $(LD) $(temacs_link_args) + + +TopLevelEmacsShell.o : ${srcdir}/EmacsShell-sub.c config.h xintrinsicp.h EmacsShellP.h + $(CC) -c $(cflags) -DDEFINE_TOP_LEVEL_EMACS_SHELL ${srcdir}/EmacsShell-sub.c + mv EmacsShell-sub.o TopLevelEmacsShell.o + +TopLevelEmacsShell.c.rtl : ${srcdir}/EmacsShell-sub.c config.h xintrinsicp.h EmacsShellP.h + $(CC) -dr -c $(cflags) -DDEFINE_TOP_LEVEL_EMACS_SHELL ${srcdir}/EmacsShell-sub.c + mv EmacsShell-sub.c.rtl TopLevelEmacsShell.c.rtl + +TransientEmacsShell.o : ${srcdir}/EmacsShell-sub.c TopLevelEmacsShell.o config.h xintrinsicp.h EmacsShellP.h + $(CC) -c $(cflags) -DDEFINE_TRANSIENT_EMACS_SHELL ${srcdir}/EmacsShell-sub.c + mv EmacsShell-sub.o TransientEmacsShell.o + +TransientEmacsShell.c.rtl : ${srcdir}/EmacsShell-sub.c TopLevelEmacsShell.o config.h xintrinsicp.h EmacsShellP.h + $(CC) -dr -c $(cflags) -DDEFINE_TRANSIENT_EMACS_SHELL ${srcdir}/EmacsShell-sub.c + mv EmacsShell-sub.c.rtl TransientEmacsShell.c.rtl + +## Position-independent code for shared library creation +#if USE_GCC +pic_arg = -fpic +#elif defined (IRIX) +pic_arg = -KPIC +# else +pic_arg = -K pic +#endif + +#ifdef EXTERNAL_WIDGET + +external_client_motif_objs_shared = ExternalClient-Xm-shared.o extw-Xt-shared.o extw-Xlib-shared.o +external_client_xt_objs_shared = ExternalClient-Xt-shared.o extw-Xt-shared.o extw-Xlib-shared.o +external_client_xlib_objs_shared = ExternalClient-Xlib-shared.o extw-Xlib-shared.o +external_client_motif_objs_nonshared = ExternalClient-Xm-nonshared.o extw-Xt-nonshared.o extw-Xlib-nonshared.o +external_client_xt_objs_nonshared = ExternalClient-Xt-nonshared.o extw-Xt-nonshared.o extw-Xlib-nonshared.o +external_client_xlib_objs_nonshared = ExternalClient-Xlib-nonshared.o extw-Xlib-nonshared.o + +## Add dependencies so things work right with a parallel make +ExternalClient-Xm-shared.o: ${srcdir}/ExternalClient.c ExternalClient-Xt-shared.o ExternalClient-Xm-nonshared.o + $(CC) -c $(pic_arg) $(cflags) -DEXTW_USES_MOTIF ${srcdir}/ExternalClient.c + mv ExternalClient.o ExternalClient-Xm-shared.o + +ExternalClient-Xt-shared.o: ${srcdir}/ExternalClient.c ExternalClient-Xt-nonshared.o + $(CC) -c $(pic_arg) $(cflags) ${srcdir}/ExternalClient.c + mv ExternalClient.o ExternalClient-Xt-shared.o + +ExternalClient-Xlib-shared.o: ${srcdir}/ExternalClient-Xlib.c ExternalClient-Xlib-nonshared.o + $(CC) -c $(pic_arg) $(cflags) ${srcdir}/ExternalClient-Xlib.c + mv ExternalClient-Xlib.o ExternalClient-Xlib-shared.o + +ExternalClient-Xm-nonshared.o: ${srcdir}/ExternalClient.c ExternalClient-Xt-nonshared.o + $(CC) -c $(cflags) -DEXTW_USES_MOTIF ${srcdir}/ExternalClient.c + mv ExternalClient.o ExternalClient-Xm-nonshared.o + +ExternalClient-Xt-nonshared.o: ${srcdir}/ExternalClient.c + $(CC) -c $(cflags) ${srcdir}/ExternalClient.c + mv ExternalClient.o ExternalClient-Xt-nonshared.o + +ExternalClient-Xlib-nonshared.o: ${srcdir}/ExternalClient-Xlib.c + $(CC) -c $(cflags) ${srcdir}/ExternalClient-Xlib.c + mv ExternalClient-Xlib.o ExternalClient-Xlib-nonshared.o + +## We compile the common files twice (once with PIC and once without) +## because on some systems, compiling with PIC but not linking into +## a shared library messes things up. + +extw-Xt-shared.o: ${srcdir}/extw-Xt.c extw-Xt-nonshared.o + $(CC) -c $(pic_arg) $(cflags) ${srcdir}/extw-Xt.c + mv extw-Xt.o extw-Xt-shared.o + +extw-Xlib-shared.o: ${srcdir}/extw-Xlib.c extw-Xlib-nonshared.o + $(CC) -c $(pic_arg) $(cflags) ${srcdir}/extw-Xlib.c + mv extw-Xlib.o extw-Xlib-shared.o + +extw-Xt-nonshared.o: ${srcdir}/extw-Xt.c + $(CC) -c $(cflags) ${srcdir}/extw-Xt.c + mv extw-Xt.o extw-Xt-nonshared.o + +extw-Xlib-nonshared.o: ${srcdir}/extw-Xlib.c + $(CC) -c $(cflags) ${srcdir}/extw-Xlib.c + mv extw-Xlib.o extw-Xlib-nonshared.o + +libextcli_Xm.a: ${external_client_motif_objs_nonshared} + ar r libextcli_Xm.a ${external_client_motif_objs_nonshared} + +libextcli_Xt.a: ${external_client_xt_objs_nonshared} + ar r libextcli_Xt.a ${external_client_xt_objs_nonshared} + +libextcli_Xlib.a: ${external_client_xlib_objs_nonshared} + ar r libextcli_Xlib.a ${external_client_xlib_objs_nonshared} + +#ifdef EXTW_LINK + +libextcli_Xm.so.1: ${external_client_motif_objs_shared} + ${extw_link_beg} ${external_client_motif_objs_shared} ${extw_link_mid} libextcli_Xm.so.1 ${extw_link_end} + +libextcli_Xt.so.1: ${external_client_xt_objs_shared} + ${extw_link_beg} ${external_client_xt_objs_shared} ${extw_link_mid} libextcli_Xt.so.1 ${extw_link_end} + +libextcli_Xlib.so.1: ${external_client_xlib_objs_shared} + ${extw_link_beg} ${external_client_xlib_objs_shared} ${extw_link_mid} libextcli_Xlib.so.1 ${extw_link_end} + +#endif /* EXTW_LINK */ + +#endif /* EXTERNAL_WIDGET */ + +config.h: ${srcdir}/config.h.in +Emacs.ad.h: ${srcdir}/${etcdir}Emacs.ad + +config.h sheap-adjust.h paths.h Emacs.ad.h : + @echo "The file $@ needs to be re-generated." + @echo "Please run a make in the top level directory." + @echo "Consult the file \`INSTALL' for instructions for building XEmacs." + @exit 1 + +## Some machines have alloca built-in. +## They should define HAVE_ALLOCA, or may just let alloca.s +## be used but generate no code. +## Some have it written in assembler in alloca.s. +## Some use the C version in alloca.c (these define C_ALLOCA in config.h). + + +#ifdef C_ALLOCA +## We could put something in alloca.c to #define free and malloc +## whenever emacs was #defined, but that's not appropriate for all +## users of alloca in Emacs. Check out ../lib-src/getopt.c. */ + +alloca.o : ${srcdir}/alloca.c + $(CC) -c -Dfree=xfree -Dmalloc=xmalloc $(cflags) ${srcdir}/alloca.c +#else +#ifndef HAVE_ALLOCA +alloca.o : ${srcdir}/alloca.s config.h +## $(CPP) is cc -E, which may get confused by filenames +## that do not end in .c. So copy file to a safe name. */ +## cp ${srcdir}/alloca.s allocatem.c +## Remove any ^L, blank lines, and preprocessor comments, +## since some assemblers barf on them. Use a different basename for the +## output file, since some stupid compilers (Green Hill) use that +## name for the intermediate assembler file. + $(CPP) $(cppflags) allocatem.c | \ + sed -e 's///' -e 's/^#.*//' | \ + sed -n -e '/^..*$$/p' > allocax.s + @$(RM) alloca.o +## Xenix, in particular, needs to run assembler via cc. + $(CC) -c allocax.s + mv allocax.o alloca.o + $(RM) allocax.s allocatem.c +#endif /* HAVE_ALLOCA */ +#endif /* ! defined (C_ALLOCA) */ + +#ifdef HAVE_NATIVE_SOUND +sunplay.o: ${srcdir}/sunplay.c + $(CC) -c $(sound_cflags) $(cflags) ${srcdir}/sunplay.c +hpplay.o: ${srcdir}/hpplay.c + $(CC) -c -Demacs $(sound_cflags) $(cflags) ${srcdir}/hpplay.c +#endif /* HAVE_NATIVE_SOUND */ + +## System-specific programs to be made. +## ${other_files}, $(objects_system) and $(objects_machine) +## select which of these should be compiled. */ + +.PHONY: mostlyclean clean distclean realclean versionclean extraclean +mostlyclean: + $(RM) temacs puremacs quantmacs prefix-args *.o *.i \ + core temacs.exe sheap-adjust.h +clean: mostlyclean versionclean + $(RM) libextcli* update-elc.stamp +## This is used in making a distribution. +## Do not use it on development directories! +distclean: clean + $(RM) config.h paths.h Emacs.ad.h \ + GNUmakefile Makefile Makefile.in TAGS ${PROGNAME}.* +realclean: distclean +versionclean: + $(RM) ${PROGNAME} ${PROGNAME}.exe ${libsrc}DOC +extraclean: realclean + $(RM) *~ \#* m/*~ m/\#* s/*~ s/\#* + +.PHONY : lock unlock +SOURCES = *.[chm] *.pswm [sm]/* COPYING paths.h.in Makefile.in.in \ + config.h.in README COPYING ChangeLog +unlock: + chmod u+w $(SOURCES) + +relock: + chmod -w $(SOURCES) + +## Header files for ellcc +#ifdef HAVE_SHLIB +MAKEPATH=../lib-src/make-path +install: ${PROGNAME} + ${MAKEPATH} ${archlibdir}/include ${archlibdir}/include/m ${archlibdir}/include/s + -@echo "Copying include files for ellcc..." + -@hdir=`pwd`; \ + cd ${srcdir}; hdrdir2=`pwd`; cd $$hdir; \ + test "$$hdrdir2" != "$$hdir" && hdir="$$hdir $$hdrdir2"; \ + (for thisdir in $$hdir; do \ + cd $$hdir && \ + (hdrtars=; \ + for hdrfile in *.h; do \ + hdrtars="$$hdrtars $$hdrfile"; \ + done; \ + test -d s && hdrtars="$$hdrtars s/*"; \ + test -d m && hdrtars="$$hdrtars m/*"; \ + test -n "$$hdrtars" && (tar cf - $$hdrtars) | \ + (cd ${archlibdir}/include && umask 022 && tar xf -); \ + chmod 755 ${archlibdir}/include; \ + test -d ${archlibdir}/include/s && \ + chmod 755 ${archlibdir}/include/s; \ + test -d ${archlibdir}/include/m && \ + chmod 755 ${archlibdir}/include/s;) \ + done) +#endif + +## Dependency processing using home-grown script, not makedepend +.PHONY: depend +FRC.depend: +depend: FRC.depend + cd ${srcdir} && $(RM) depend.tmp && \ + perl ./make-src-depend > depend.tmp && \ + if cmp -s depend depend.tmp; \ + then $(RM) depend.tmp; \ + else $(RM) depend && mv depend.tmp depend; \ + fi