home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / emacs-19.28-src.tgz / tar.out / fsf / emacs / src / ymakefile < prev   
Makefile  |  1996-09-28  |  28KB  |  916 lines

  1. # Makefile for GNU Emacs.
  2. # Copyright (C) 1985, 1987, 1988, 1993, 1994 Free Software Foundation, Inc.
  3.  
  4. # This file is part of GNU Emacs.
  5.  
  6. # GNU Emacs is free software; you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation; either version 2, or (at your option)
  9. # any later version.
  10.  
  11. # GNU Emacs is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. # GNU General Public License for more details.
  15.  
  16. # You should have received a copy of the GNU General Public License
  17. # along with GNU Emacs; see the file COPYING.  If not, write to
  18. # the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. # Here are the things that we expect ../configure to edit.
  21. srcdir=/src
  22. VPATH=""
  23. CC=sc
  24. CPP=/cpp/cpp
  25. CFLAGS=
  26. LN_S=
  27. # Substitute an assignment for the MAKE variable, because
  28. # BSD doesn't have it as a default.
  29. MAKE=gmake
  30.  
  31. # On Xenix and the IBM RS6000, double-dot gets screwed up.
  32. dot = .
  33. lispdir = ${srcdir}/$(dot)$(dot)/lisp/
  34. libsrc = $(dot)$(dot)/lib-src/
  35. etc = $(dot)$(dot)/etc/
  36. shortnamesdir = $(dot)$(dot)/shortnames/
  37. cppdir = $(dot)$(dot)/cpp/
  38. oldXMenudir = $(dot)$(dot)/oldXMenu/
  39. lwlibdir = $(dot)$(dot)/lwlib/
  40.  
  41. # Configuration files for .o files to depend on.
  42. M_FILE = ${srcdir}/m/m-amiga.h
  43. S_FILE = ${srcdir}/s/s-amigaos.h
  44. config_h = config.h $(M_FILE) $(S_FILE)
  45.  
  46. # ========================== start of cpp stuff ======================= */
  47. /* From here on, comments must be done in C syntax.  */
  48.  
  49. CPPFLAGS=
  50. LDFLAGS=
  51. C_SWITCH_SYSTEM=
  52.  
  53. /* just to be sure the sh is used */
  54. SHELL=/bin/sh
  55.  
  56. #define NO_SHORTNAMES
  57. #define THIS_IS_YMAKEFILE
  58. #define NOT_C_CODE
  59. #include "config.h"
  60.  
  61. /* Use HAVE_X11 as an alias for X11 in this file
  62.    to avoid problems with X11 as a subdirectory name
  63.    in -I and other such options which pass through this file. */
  64.  
  65. #ifdef X11
  66. #define HAVE_X11
  67. #undef X11
  68. #endif
  69.  
  70. /* On some machines #define register is done in config;
  71.    don't let it interfere with this file.  */
  72. #undef register
  73.  
  74. /* On some systems we may not be able to use the system make command. */
  75. #ifdef MAKE_COMMAND
  76. MAKE = MAKE_COMMAND
  77. #endif
  78.  
  79. #ifdef C_COMPILER
  80. CC = C_COMPILER
  81. #endif
  82.  
  83. /* GNU libc requires ORDINARY_LINK so that its own crt0 is used.
  84.    Linux is an exception because it uses a funny variant of GNU libc.  */
  85. #ifdef __GNU_LIBRARY__
  86. #ifndef LINUX
  87. #define ORDINARY_LINK
  88. #endif
  89. #endif
  90.  
  91. /* Some machines don't find the standard C libraries in the usual place.  */
  92. #ifndef ORDINARY_LINK
  93. #ifndef LIB_STANDARD
  94. #define LIB_STANDARD -lc
  95. #endif
  96. #else
  97. #ifndef LIB_STANDARD
  98. #define LIB_STANDARD
  99. #endif
  100. #endif
  101.  
  102. /* Unless inhibited or changed, use -lg to link for debugging.  */
  103. #ifndef LIBS_DEBUG
  104. #define LIBS_DEBUG -lg
  105. #endif
  106.  
  107. /* Some s/*.h files define this to request special libraries.  */
  108. #ifndef LIBS_SYSTEM
  109. #define LIBS_SYSTEM
  110. #endif
  111.  
  112. /* Some m/*.h files define this to request special libraries.  */
  113. #ifndef LIBS_MACHINE
  114. #define LIBS_MACHINE
  115. #endif
  116.  
  117. #ifndef LIB_MATH
  118. # ifdef LISP_FLOAT_TYPE
  119. #  define LIB_MATH -lm
  120. # else /* ! defined (LISP_FLOAT_TYPE) */
  121. #  define LIB_MATH
  122. # endif /* ! defined (LISP_FLOAT_TYPE) */
  123. #endif /* LIB_MATH */
  124.  
  125. /* Some s/*.h files define this to request special switches in ld.  */
  126. #ifndef LD_SWITCH_SYSTEM
  127. #if !defined (__GNUC__) && (defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)))
  128. #define LD_SWITCH_SYSTEM -X
  129. #else /* ! defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)) */
  130. #define LD_SWITCH_SYSTEM
  131. #endif /* ! defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)) */
  132. #endif /* LD_SWITCH_SYSTEM */
  133.  
  134. /* Some m/*.h files define this to request special switches in ld.  */
  135. #ifndef LD_SWITCH_MACHINE
  136. #define LD_SWITCH_MACHINE
  137. #endif
  138.  
  139. /* Some m/*.h files define this to request special switches in cc.  */
  140. #ifndef C_SWITCH_MACHINE
  141. #define C_SWITCH_MACHINE
  142. #endif
  143.  
  144. /* Some s/*.h files define this to request special switches in cc.  */
  145. #ifndef C_SWITCH_SYSTEM
  146. #define C_SWITCH_SYSTEM
  147. #endif
  148.  
  149. /* These macros are for switches specifically related to X Windows.  */
  150. #ifndef C_SWITCH_X_MACHINE
  151. #define C_SWITCH_X_MACHINE
  152. #endif
  153.  
  154. #ifndef C_SWITCH_X_SYSTEM
  155. #define C_SWITCH_X_SYSTEM
  156. #endif
  157.  
  158. #ifndef C_SWITCH_X_SITE
  159. #define C_SWITCH_X_SITE
  160. #endif
  161.  
  162. #ifndef LD_SWITCH_X_SITE
  163. #define LD_SWITCH_X_SITE
  164. #endif
  165.  
  166. #ifndef LD_SWITCH_X_DEFAULT
  167. #define LD_SWITCH_X_DEFAULT
  168. #endif
  169.  
  170. /* These can be passed in from config.h to define special load and
  171.    compile switches needed by individual sites */
  172. #ifndef LD_SWITCH_SITE
  173. #define LD_SWITCH_SITE
  174. #endif
  175.  
  176. #ifndef C_SWITCH_SITE
  177. #define C_SWITCH_SITE
  178. #endif
  179.  
  180. #ifndef ORDINARY_LINK
  181.  
  182. #ifndef CRT0_COMPILE
  183. #define CRT0_COMPILE $(CC) -c $(ALL_CFLAGS) C_SWITCH_ASM 
  184. #endif
  185.  
  186. #ifndef START_FILES
  187. #ifdef NO_REMAP
  188. #ifdef COFF_ENCAPSULATE
  189. #define START_FILES pre-crt0.o /usr/local/lib/gcc-crt0.o
  190. #else /* ! defined (COFF_ENCAPSULATE) */
  191. #define START_FILES pre-crt0.o /lib/crt0.o
  192. #endif /* ! defined (COFF_ENCAPSULATE) */
  193. #else /* ! defined (NO_REMAP) */
  194. #define START_FILES crt0.o
  195. #endif /* ! defined (NO_REMAP) */
  196. #endif /* START_FILES */
  197. STARTFILES = START_FILES
  198.  
  199. #else /* ORDINARY_LINK */
  200.  
  201. /* config.h might want to force START_FILES anyway */
  202. #ifdef START_FILES
  203. STARTFILES = START_FILES
  204. #endif /* START_FILES */
  205.  
  206. #endif /* not ORDINARY_LINK */
  207.  
  208.  
  209. /* cc switches needed to make `asm' keyword work.
  210.    Nothing special needed on most machines.  */
  211. #ifndef C_SWITCH_ASM
  212. #define C_SWITCH_ASM
  213. #endif
  214.  
  215. /* Figure out whether the system cpp can handle long names.
  216.    Do it by testing it right now.
  217.    If it loses, arrange to use the GNU cpp.  */
  218.  
  219. #define LONGNAMEBBBFOOX
  220. #ifdef LONGNAMEBBBARFOOX
  221. /* Installed cpp fails to distinguish those names!  */
  222. /* Arrange to compile the GNU cpp later on */
  223. #define NEED_CPP
  224. /* Cause cc to invoke the cpp that comes with Emacs,
  225.    which will be in a file named localcpp.  */
  226. MYCPPFLAG= -Blocal
  227. /* LOCALCPP is the local one or nothing.
  228.    CPP is the local one or the standardone.  */
  229. LOCALCPP= localcpp
  230. #endif /* ! defined (LONGNAMEBBBARFOOX) */
  231.  
  232. #ifdef SHORTNAMES
  233. SHORT= shortnames
  234. #endif
  235.  
  236. /* DO NOT use -R.  There is a special hack described in lastfile.c
  237.    which is used instead.  Some initialized data areas are modified
  238.    at initial startup, then labeled as part of the text area when
  239.    Emacs is dumped for the first time, and never changed again. */
  240.  
  241. /* -Demacs is needed to make some files produce the correct version
  242.    for use in Emacs.
  243.  
  244.    -DHAVE_CONFIG_H is needed for some other files to take advantage of
  245.    the information in `config.h'.  */
  246.  
  247. /* C_SWITCH_X_SITE must come before C_SWITCH_X_MACHINE and C_SWITCH_X_SYSTEM
  248.    since it may have -I options that should override those two.  */
  249. ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAG) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM ${CFLAGS}
  250. .c.o:
  251.     $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
  252.  
  253. #ifndef LIBX10_MACHINE
  254. #define LIBX10_MACHINE
  255. #endif
  256.  
  257. #ifndef LIBX11_MACHINE
  258. #define LIBX11_MACHINE
  259. #endif
  260.  
  261. #ifndef LIBX10_SYSTEM
  262. #define LIBX10_SYSTEM
  263. #endif
  264.  
  265. #ifndef LIBX11_SYSTEM
  266. #define LIBX11_SYSTEM
  267. #endif
  268.  
  269. #ifndef LIB_X11_LIB
  270. #define LIB_X11_LIB -lX11
  271. #endif
  272.  
  273. #ifdef HAVE_X_WINDOWS
  274. #ifdef HAVE_X_MENU
  275.  
  276. /* Include xmenu.o in the list of X object files.  */
  277. XOBJ= xterm.o xfns.o xfaces.o xmenu.o xselect.o xrdb.o
  278.  
  279. /* The X Menu stuff is present in the X10 distribution, but missing
  280.    from X11.  If we have X10, just use the installed library;
  281.    otherwise, use our own copy.  */
  282. #ifdef HAVE_X11
  283. #ifdef USE_X_TOOLKIT
  284. OLDXMENU=liblw.a
  285. LIBXMENU= $(OLDXMENU)
  286. #else /* not USE_X_TOOLKIT */
  287. OLDXMENU= libXMenu11.a
  288. LIBXMENU= $(OLDXMENU)
  289. #endif /* not USE_X_TOOLKIT */
  290. #else /* not HAVE_X11 */
  291. LIBXMENU= -lXMenu
  292. #endif /* not HAVE_X11 */
  293.  
  294. #else /* not HAVE_X_MENU */
  295.  
  296. /* Otherwise, omit xmenu.o from the list of X object files, and
  297.    don't worry about the menu library at all.  */
  298. XOBJ= xterm.o xfns.o xfaces.o xselect.o xrdb.o
  299. LIBXMENU=
  300. #endif /* not HAVE_X_MENU */
  301.  
  302. #ifdef USE_X_TOOLKIT
  303. #define @X_TOOLKIT_TYPE@
  304. #if defined (LUCID) || defined (ATHENA)
  305. LIBW= -lXaw
  306. #endif
  307. #ifdef MOTIF
  308. #ifdef LIB_MOTIF
  309. LIBW= LIB_MOTIF
  310. #else
  311. LIBW= -lXm
  312. #endif
  313. #endif
  314. #ifdef OPEN_LOOK
  315. LIBW= -lXol
  316. #endif
  317.  
  318. #ifdef HAVE_X11XTR6
  319. LIBXTR6 = -lSM -lICE
  320. #endif
  321.  
  322. LIBXT= $(LIBW) -lXmu -lXt $(LIBXTR6) -lXext
  323. #else
  324. LIBXT=
  325. #endif
  326.  
  327. #ifdef HAVE_X11
  328. /* LD_SWITCH_X_DEFAULT comes after everything else that specifies
  329.    options for where to find X libraries, but before those libraries.  */
  330. LIBX= $(LIBXMENU) LD_SWITCH_X_SITE LD_SWITCH_X_DEFAULT $(LIBXT) LIB_X11_LIB LIBX11_MACHINE LIBX11_SYSTEM
  331. #else /* not HAVE_X11 */
  332. LIBX= $(LIBXMENU) LD_SWITCH_X_SITE -lX10 LIBX10_MACHINE LIBX10_SYSTEM
  333. #endif /* not HAVE_X11 */
  334. #endif /* not HAVE_X_WINDOWS */
  335.  
  336. #ifndef ORDINARY_LINK
  337. /* Fix linking if compiled with GCC.  */
  338. #ifdef __GNUC__
  339.  
  340. #if __GNUC__ > 1
  341.  
  342. #ifdef LINKER
  343. #define LINKER_WAS_SPECIFIED
  344. #endif
  345.  
  346. /* Versions of GCC >= 2.0 put their library, libgcc.a, in obscure
  347.    places that are difficult to figure out at make time.  Fortunately,
  348.    these same versions allow you to pass arbitrary flags on to the
  349.    linker, so there's no reason not to use it as a linker.
  350.  
  351.    Well, it's not quite perfect.  The `-nostdlib' keeps GCC from
  352.    searching for libraries in its internal directories, so we have to
  353.    ask GCC explicitly where to find libgcc.a.  */
  354.  
  355. #ifndef LINKER
  356. #define LINKER $(CC) -nostdlib
  357. #endif
  358.  
  359. #ifndef LIB_GCC
  360. /* Ask GCC where to find libgcc.a.  */
  361. #define LIB_GCC `$(CC) -print-libgcc-file-name`
  362. #endif /* not LIB_GCC */
  363.  
  364. GNULIB_VAR = LIB_GCC
  365.  
  366. #ifndef LINKER_WAS_SPECIFIED
  367. /* GCC passes any argument prefixed with -Xlinker directly to the
  368.    linker.  See prefix-args.c for an explanation of why we don't do
  369.    this with the shell's `for' construct.
  370.    Note that some people don't have '.'  in their paths, so we must
  371.    use ./prefix-args.  */
  372. #define YMF_PASS_LDFLAGS(flags) `./prefix-args -Xlinker flags`
  373. #else
  374. #define YMF_PASS_LDFLAGS(flags) flags
  375. #endif
  376.  
  377. #else /* __GNUC__ < 2 */
  378.  
  379. #ifndef LIB_GCC
  380. #define LIB_GCC /usr/local/lib/gcc-gnulib
  381. #endif /* not LIB_GCC */
  382. GNULIB_VAR = `if [ -f LIB_GCC ] ; then echo LIB_GCC; else echo; fi`
  383. #endif /* __GNUC__ < 2 */
  384. #else /* not __GNUC__ */
  385. GNULIB_VAR = 
  386.  
  387. #endif /* not __GNUC__ */
  388. #endif /* not ORDINARY_LINK */
  389.  
  390. /* Specify address for ld to start loading at,
  391.    if requested by configuration.  */
  392. #ifdef LD_TEXT_START_ADDR
  393. STARTFLAGS = -T LD_TEXT_START_ADDR -e __start
  394. #endif
  395.  
  396. #ifdef ORDINARY_LINK
  397. LD = $(CC)
  398. #else
  399. #ifdef COFF_ENCAPSULATE
  400. LD=$(CC) -nostdlib
  401. #else /* not ORDINARY_LINK */
  402. #ifdef LINKER
  403. LD=LINKER
  404. #else /* not LINKER */
  405. LD=ld
  406. #endif /* not LINKER */
  407. #endif /* not COFF_ENCAPSULATE */
  408. #endif /* not ORDINARY_LINK */
  409.  
  410. ALL_LDFLAGS = LD_SWITCH_SYSTEM LD_SWITCH_MACHINE LD_SWITCH_SITE $(LDFLAGS)
  411.  
  412. /* A macro which other sections of ymakefile can redefine to munge the
  413.    flags before they're passed to LD.  This is helpful if you have
  414.    redefined LD to something odd, like "gcc".  */
  415. #ifndef YMF_PASS_LDFLAGS
  416. #define YMF_PASS_LDFLAGS(flags) flags
  417. #endif
  418.  
  419. /* Allow config.h to specify a replacement file for unexec.c.  */
  420. #ifndef UNEXEC
  421. #define UNEXEC unexec.o
  422. #endif
  423. #ifndef UNEXEC_SRC
  424. #define UNEXEC_SRC unexec.c
  425. #endif
  426.  
  427. #ifdef USE_TEXT_PROPERTIES
  428. #define INTERVAL_SRC intervals.h
  429. #define INTERVAL_OBJ intervals.o textprop.o
  430. #else
  431. #define INTERVAL_SRC
  432. #define INTERVAL_OBJ
  433. #endif
  434.  
  435. #ifdef HAVE_GETLOADAVG
  436. #define GETLOADAVG_OBJ
  437. #else
  438. #define GETLOADAVG_OBJ getloadavg.o
  439. #endif
  440.  
  441. /* lastfile must follow all files
  442.    whose initialized data areas should be dumped as pure by dump-emacs. */
  443. obj=    dispnew.o frame.o scroll.o xdisp.o window.o \
  444.     term.o cm.o $(XOBJ) \
  445.     emacs.o keyboard.o macros.o keymap.o sysdep.o \
  446.     buffer.o filelock.o insdel.o marker.o INTERVAL_OBJ \
  447.     minibuf.o fileio.o dired.o filemode.o \
  448.     cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o \
  449.     alloc.o data.o doc.o editfns.o callint.o \
  450.     eval.o floatfns.o fns.o print.o lread.o \
  451.     abbrev.o syntax.o UNEXEC mocklisp.o bytecode.o \
  452.     process.o callproc.o \
  453.     doprnt.o GETLOADAVG_OBJ
  454.  
  455. /* Object files used on some machine or other.
  456.    These go in the DOC file on all machines
  457.    in case they are needed there.  */
  458. SOME_MACHINE_OBJECTS = sunfns.o
  459.  
  460. #ifdef TERMINFO
  461. /* Used to be -ltermcap here.  If your machine needs that,
  462.    define LIBS_TERMCAP in the m/*.h file.  */
  463. #ifndef LIBS_TERMCAP
  464. #define LIBS_TERMCAP -lcurses
  465. #endif /* LIBS_TERMCAP */
  466. termcapobj = terminfo.o
  467. #else /* ! defined (TERMINFO) */
  468. #ifndef LIBS_TERMCAP
  469. #define LIBS_TERMCAP
  470. termcapobj = termcap.o tparam.o
  471. #else /* LIBS_TERMCAP */
  472. termcapobj = tparam.o
  473. #endif /* LIBS_TERMCAP */
  474. #endif /* ! defined (TERMINFO) */
  475.  
  476.  
  477. #ifndef SYSTEM_MALLOC
  478.  
  479. #ifdef GNU_MALLOC  /* New GNU malloc */
  480. #ifdef REL_ALLOC
  481. mallocobj = gmalloc.o ralloc.o vm-limit.o
  482. #else /* ! defined (REL_ALLOC) */
  483. mallocobj = gmalloc.o vm-limit.o
  484. #endif /* ! defined (REL_ALLOC) */
  485. #else /* Old GNU malloc */
  486. mallocobj = malloc.o
  487. #endif /* Old GNU malloc */
  488.  
  489. #endif /* SYSTEM_MALLOC */
  490.  
  491.  
  492. #ifndef HAVE_ALLOCA
  493. allocaobj = alloca.o
  494. #else
  495. allocaobj =
  496. #endif
  497.  
  498. #ifdef USE_X_TOOLKIT
  499. widgetobj= widget.o
  500. #else /* not USE_X_TOOLKIT */
  501. widgetobj=
  502. #endif /* not USE_X_TOOLKIT */
  503.  
  504.  
  505. /* define otherobj as list of object files that make-docfile
  506.    should not be told about.  */
  507. otherobj= $(termcapobj) lastfile.o $(mallocobj) $(allocaobj) $(widgetobj)
  508.  
  509. #ifdef LISP_FLOAT_TYPE
  510. #define FLOAT_SUPPORT ${lispdir}float-sup.elc
  511. #else
  512. #define FLOAT_SUPPORT
  513. #endif
  514.  
  515. #ifdef MULTI_FRAME
  516. #define FRAME_SUPPORT ${lispdir}frame.elc ${lispdir}menu-bar.elc \
  517.   ${lispdir}mouse.elc ${lispdir}select.elc ${lispdir}scroll-bar.elc
  518. #else
  519. #define FRAME_SUPPORT
  520. #endif
  521.  
  522. #ifdef HAVE_X_WINDOWS
  523. #define X_WINDOWS_SUPPORT
  524. #else
  525. #define X_WINDOWS_SUPPORT
  526. #endif
  527.  
  528. #ifdef VMS
  529. #define VMS_SUPPORT ${lispdir}vmsproc.elc ${lispdir}vms-patch
  530. #else
  531. #define VMS_SUPPORT
  532. #endif
  533.  
  534. #ifdef MSDOS
  535. #define MSDOS_SUPPORT ${lispdir}ls-lisp.elc ${lispdir}disp-tab.elc ${lispdir}dos-fns.elc ${lispdir}mouse.elc
  536. #else
  537. #define MSDOS_SUPPORT
  538. #endif
  539.  
  540. /* List of Lisp files loaded into the dumped Emacs.  It's arranged
  541.    like this because it's easier to generate it semi-mechanically from
  542.    loadup.el this way.
  543.  
  544.    Note that this list should not include lisp files which might not
  545.    be present, like site-load.el and site-init.el; this makefile
  546.    expects them all to be either present or buildable.  */
  547. lisp= \
  548.     ${lispdir}abbrev.elc \
  549.     ${lispdir}buff-menu.elc \
  550.     ${lispdir}byte-run.elc \
  551.     ${lispdir}c-mode.elc \
  552.     ${lispdir}files.elc \
  553.     ${lispdir}fill.elc \
  554.     FLOAT_SUPPORT \
  555.     FRAME_SUPPORT \
  556.     X_WINDOWS_SUPPORT \
  557.     ${lispdir}help.elc \
  558.     ${lispdir}indent.elc \
  559.     ${lispdir}isearch.elc \
  560.     ${lispdir}lisp-mode.elc \
  561.     ${lispdir}lisp.elc \
  562.     ${lispdir}loaddefs.el \
  563.     ${lispdir}map-ynp.elc \
  564.     ${lispdir}page.elc \
  565.     ${lispdir}paragraphs.elc \
  566.     ${lispdir}paths.el \
  567.     ${lispdir}register.elc \
  568.     ${lispdir}replace.elc \
  569.     ${lispdir}simple.elc \
  570.     ${lispdir}startup.elc \
  571.     ${lispdir}subr.elc \
  572.     ${lispdir}text-mode.elc \
  573.     ${lispdir}vc-hooks.elc \
  574.     VMS_SUPPORT \
  575.     MSDOS_SUPPORT \
  576.     ${lispdir}window.elc \
  577.     ${lispdir}version.el
  578.  
  579. /* Construct full set of libraries to be linked.
  580.    Note that SunOS needs -lm to come before -lc; otherwise, you get
  581.    duplicated symbols.  If the standard libraries were compiled
  582.    with GCC, we might need gnulib again after them.  */
  583. LIBES = $(LIBX) LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \
  584.    LIBS_DEBUG $(GNULIB_VAR) LIB_MATH LIB_STANDARD $(GNULIB_VAR)
  585.  
  586. /* Enable recompilation of certain other files depending on system type.  */
  587.  
  588. #ifndef OTHER_FILES
  589. #define OTHER_FILES
  590. #endif
  591.  
  592. /* Enable inclusion of object files in temacs depending on system type.  */
  593. #ifndef OBJECTS_SYSTEM
  594. #define OBJECTS_SYSTEM
  595. #endif
  596.  
  597. #ifndef OBJECTS_MACHINE
  598. #define OBJECTS_MACHINE
  599. #endif
  600.  
  601. all: emacs OTHER_FILES
  602.  
  603. emacs: temacs ${etc}DOC ${lisp}
  604. #ifdef CANNOT_DUMP
  605.     rm -f emacs
  606.     ln temacs emacs
  607. #else
  608. #ifdef HAVE_SHM
  609.     ./temacs -nl -batch -l loadup dump
  610. #else /* ! defined (HAVE_SHM) */
  611.     ./temacs -batch -l loadup dump
  612. #endif /* ! defined (HAVE_SHM) */
  613. #endif /* ! defined (CANNOT_DUMP) */
  614.  
  615. ${etc}DOC: ${libsrc}make-docfile ${obj} ${lisp}
  616.     -rm -f ${etc}DOC
  617.     ${libsrc}make-docfile -d ${srcdir} ${obj} ${SOME_MACHINE_OBJECTS} \
  618.       ${lisp} > ${etc}DOC
  619.  
  620. ${libsrc}make-docfile:
  621.     cd ${libsrc}; ${MAKE} ${MFLAGS} make-docfile
  622.  
  623. /* Some systems define this to cause parallel Make-ing.  */
  624. #ifndef MAKE_PARALLEL
  625. #define MAKE_PARALLEL
  626. #endif
  627.  
  628. temacs: MAKE_PARALLEL $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE prefix-args
  629.     $(LD) YMF_PASS_LDFLAGS (${STARTFLAGS} ${ALL_LDFLAGS}) \
  630.     -o temacs ${STARTFILES} ${obj} ${otherobj}  \
  631.     OBJECTS_SYSTEM OBJECTS_MACHINE ${LIBES}
  632.  
  633. prefix-args: prefix-args.c $(config_h)
  634.     $(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c -o prefix-args
  635.  
  636. /* These are needed for C compilation, on the systems that need them */
  637. #ifdef NEED_CPP
  638. CPP = ./localcpp
  639. localcpp:
  640.     cd ${cppdir}; ${MAKE} ${MFLAGS} EMACS=-DEMACS
  641.     ln ${cppdir}cpp localcpp  /* Name where ALL_CFLAGS will refer to it */
  642. /* cc appears to be cretinous and require all of these to exist
  643.    if -B is specified -- we can't use one local pass and let the
  644.    others be the standard ones.  What a loser.
  645.    We can't even use ln, since they are probably
  646.    on different disks.  */
  647.     cp /lib/ccom localccom
  648.     -cp /lib/optim localoptim
  649.     -cp /lib/c2 localc2
  650.     cp /bin/as localas
  651. #else /* ! defined (NEED_CPP) */
  652. CPP = $(CC) -E
  653. #endif /* ! defined (NEED_CPP) */
  654.  
  655. #ifdef SHORTNAMES
  656. shortnames:
  657.     cd ${shortnamesdir}; ${MAKE} ${MFLAGS}
  658. #endif
  659.  
  660. /* Don't lose if this was not defined.  */
  661. #ifndef OLDXMENU_OPTIONS
  662. #define OLDXMENU_OPTIONS
  663. #endif
  664.  
  665. /* Don't lose if this was not defined.  */
  666. #ifndef LWLIB_OPTIONS
  667. #define LWLIB_OPTIONS
  668. #endif
  669.  
  670. #ifdef HAVE_X_WINDOWS
  671. #ifdef HAVE_X11
  672. #ifdef USE_X_TOOLKIT
  673. $(OLDXMENU): really-lwlib
  674.     -rm -f $(OLDXMENU) /* We might have a link to an old version.  */
  675.     ${LN_S} ${lwlibdir}liblw.a $(OLDXMENU)
  676.  
  677. /* Encode the values of these two macros in Make variables,
  678.    so we can use $(...) to substitute their values within "...".  */
  679. C_SWITCH_MACHINE_1 = C_SWITCH_MACHINE
  680. C_SWITCH_SYSTEM_1 = C_SWITCH_SYSTEM
  681. C_SWITCH_SITE_1 = C_SWITCH_SITE
  682. C_SWITCH_X_SITE_1 = C_SWITCH_X_SITE
  683. C_SWITCH_X_MACHINE_1 = C_SWITCH_X_MACHINE
  684. C_SWITCH_X_SYSTEM_1 = C_SWITCH_X_SYSTEM
  685. really-lwlib:
  686.     cd ${lwlibdir}; ${MAKE} ${MFLAGS} LWLIB_OPTIONS \
  687.     CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}' \
  688.     "C_SWITCH_X_SITE=$(C_SWITCH_X_SITE_1)" \
  689.     "C_SWITCH_X_MACHINE=$(C_SWITCH_X_MACHINE_1)" \
  690.     "C_SWITCH_X_SYSTEM=$(C_SWITCH_X_SYSTEM_1)" \
  691.     "C_SWITCH_SITE=$(C_SWITCH_SITE_1)" \
  692.     "C_SWITCH_MACHINE=$(C_SWITCH_MACHINE_1)" \
  693.     "C_SWITCH_SYSTEM=$(C_SWITCH_SYSTEM_1)"
  694.     @true  /* make -t should not create really-lwlib.  */
  695. #else /* not USE_X_TOOLKIT */
  696. #ifdef HAVE_X_MENU
  697. $(OLDXMENU): really-oldXMenu
  698.     -rm -f $(OLDXMENU) /* We might have a link to an old version.  */
  699.     ${LN_S} ${oldXMenudir}libXMenu11.a $(OLDXMENU)
  700.  
  701. /* Encode the values of these two macros in Make variables,
  702.    so we can use $(...) to substitute their values within "...".  */
  703. C_SWITCH_MACHINE_1 = C_SWITCH_MACHINE
  704. C_SWITCH_SYSTEM_1 = C_SWITCH_SYSTEM
  705. C_SWITCH_SITE_1 = C_SWITCH_SITE
  706. C_SWITCH_X_SITE_1 = C_SWITCH_X_SITE
  707. C_SWITCH_X_MACHINE_1 = C_SWITCH_X_MACHINE
  708. C_SWITCH_X_SYSTEM_1 = C_SWITCH_X_SYSTEM
  709. really-oldXMenu:
  710.     cd ${oldXMenudir}; ${MAKE} ${MFLAGS} OLDXMENU_OPTIONS \
  711.     CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}' \
  712.     "C_SWITCH_X_SITE=$(C_SWITCH_X_SITE_1)" \
  713.     "C_SWITCH_X_MACHINE=$(C_SWITCH_X_MACHINE_1)" \
  714.     "C_SWITCH_X_SYSTEM=$(C_SWITCH_X_SYSTEM_1)" \
  715.     "C_SWITCH_SITE=$(C_SWITCH_SITE_1)" \
  716.     "C_SWITCH_MACHINE=$(C_SWITCH_MACHINE_1)" \
  717.     "C_SWITCH_SYSTEM=$(C_SWITCH_SYSTEM_1)"
  718.     @true  /* make -t should not create really-oldXMenu.  */
  719. #endif /* HAVE_X_MENU */
  720. #endif /* not USE_X_TOOLKIT */
  721. #endif /* HAVE_X11 */
  722. #endif /* HAVE_X_WINDOWS */
  723.  
  724. paths.h: paths.h.in
  725.     @echo "The file paths.h needs to be set up from paths.h.in."
  726.     @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  727.     exit 1
  728.  
  729. config.h: config.h.in
  730.     @echo "The file config.h needs to be set up from config.h.in."
  731.     @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  732.     exit 1
  733.  
  734. /* Some machines have alloca built-in.
  735.    They should define HAVE_ALLOCA, or may just let alloca.s
  736.    be used but generate no code.
  737.    Some have it written in assembler in alloca.s.
  738.    Some use the C version in alloca.c (these define C_ALLOCA in config.h).
  739.    */
  740.  
  741. #ifdef C_ALLOCA
  742. /* We could put something in alloca.c to #define free and malloc
  743.    whenever emacs was #defined, but that's not appropriate for all
  744.    users of alloca in Emacs.  Check out ../lib-src/getopt.c.  */
  745. alloca.o : alloca.c
  746.     $(CC) -c $(CPPFLAGS) -Dfree=xfree -Dmalloc=xmalloc \
  747.     $(ALL_CFLAGS) ${srcdir}/alloca.c
  748. #else
  749. #ifndef HAVE_ALLOCA
  750. alloca.o : alloca.s $(config_h)
  751. /* $(CPP) is cc -E, which may get confused by filenames
  752.    that do not end in .c.  So copy file to a safe name.  */
  753.     cp ${srcdir}/alloca.s allocatem.c
  754. /* Remove any ^L, blank lines, and preprocessor comments,
  755.    since some assemblers barf on them.  Use a different basename for the
  756.    output file, since some stupid compilers (Green Hill's) use that
  757.    name for the intermediate assembler file. */
  758.     $(CPP) $(CPPFLAGS) $(ALL_CFLAGS) allocatem.c | \
  759.     sed -e 's/ //' -e 's/^#.*//' | \
  760.     sed -n -e '/^..*$$/p' > allocax.s
  761.     -rm -f alloca.o
  762. /* Xenix, in particular, needs to run assembler via cc.  */
  763.     $(CC) -c allocax.s
  764.     mv allocax.o alloca.o
  765.     rm allocax.s allocatem.c
  766. #endif /* HAVE_ALLOCA */
  767. #endif /* ! defined (C_ALLOCA) */
  768.  
  769. /* Nearly all the following files depend on lisp.h,
  770.    but it is not included as a dependency because
  771.    it is so often changed in ways that do not require any recompilation
  772.    and so rarely changed in ways that do require any.  */
  773.  
  774. abbrev.o : abbrev.c buffer.h commands.h $(config_h) 
  775. buffer.o : buffer.c buffer.h commands.h window.h \
  776.    INTERVAL_SRC blockinput.h $(config_h) 
  777. callint.o : callint.c window.h commands.h buffer.h mocklisp.h \
  778.    keyboard.h $(config_h)
  779. callproc.o : callproc.c paths.h buffer.h commands.h $(config_h) \
  780.     process.h systty.h syssignal.h
  781. casefiddle.o : casefiddle.c syntax.h commands.h buffer.h $(config_h) 
  782. casetab.o : casetab.c buffer.h $(config_h)
  783. cm.o : cm.c cm.h termhooks.h $(config_h)
  784. cmds.o : cmds.c syntax.h buffer.h commands.h $(config_h) 
  785. pre-crt0.o : pre-crt0.c
  786. crt0.o : crt0.c $(config_h)
  787.     CRT0_COMPILE ${srcdir}/crt0.c
  788. dired.o : dired.c commands.h buffer.h $(config_h) regex.h
  789. dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h \
  790.    termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h $(config_h)
  791. doc.o : doc.c $(config_h) paths.h buffer.h keyboard.h
  792. doprnt.o : doprnt.c
  793. editfns.o : editfns.c window.h buffer.h systime.h INTERVAL_SRC $(config_h) 
  794. emacs.o : emacs.c commands.h systty.h syssignal.h process.h INTERVAL_SRC $(config_h) 
  795. fileio.o : fileio.c window.h buffer.h systime.h INTERVAL_SRC $(config_h) 
  796. filelock.o : filelock.c buffer.h paths.h $(config_h)
  797. filemode.o : filemode.c  $(config_h)
  798. getloadavg.o : getloadavg.c $(config_h)
  799. indent.o : indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h \
  800.    termopts.h disptab.h
  801. insdel.o : insdel.c window.h buffer.h INTERVAL_SRC blockinput.h $(config_h)
  802. keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h \
  803.    commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \
  804.    systty.h systime.h dispextern.h intervals.h blockinput.h $(config_h) 
  805. keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \
  806.    $(config_h) 
  807. lastfile.o : lastfile.c  $(config_h)
  808. macros.o : macros.c window.h buffer.h commands.h macros.h $(config_h)
  809. malloc.o : malloc.c $(config_h)
  810. gmalloc.o : gmalloc.c $(config_h)
  811. ralloc.o : ralloc.c $(config_h)
  812. vm-limit.o : vm-limit.c mem-limits.h $(config_h) 
  813. marker.o : marker.c buffer.h $(config_h) 
  814. minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h \
  815.    buffer.h commands.h $(config_h) 
  816. mocklisp.o : mocklisp.c buffer.h $(config_h)
  817. process.o : process.c process.h buffer.h window.h termhooks.h termopts.h \
  818.    commands.h syssignal.h systime.h systty.h syswait.h frame.h $(config_h) 
  819. regex.o : regex.c syntax.h buffer.h $(config_h) regex.h 
  820. frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \
  821.    buffer.h $(config_h)
  822. scroll.o : scroll.c termchar.h $(config_h) dispextern.h frame.h
  823. search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h $(config_h) 
  824. syntax.o : syntax.c syntax.h buffer.h commands.h $(config_h) 
  825. sysdep.o : sysdep.c $(config_h) dispextern.h termhooks.h termchar.h termopts.h \
  826.    frame.h syssignal.h systty.h systime.h syswait.h blockinput.h window.h
  827. term.o : term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h \
  828.    disptab.h
  829. termcap.o : termcap.c $(config_h)
  830. terminfo.o : terminfo.c $(config_h)
  831. tparam.o : tparam.c $(config_h)
  832. undo.o : undo.c buffer.h commands.h $(config_h) 
  833. /* This hack is to discard any space that cpp might put at the beginning
  834.    of UNEXEC when substituting it in.  */
  835. UNEXEC_ALIAS=UNEXEC
  836. $(UNEXEC_ALIAS) : UNEXEC_SRC $(config_h)
  837. widget.o : widget.c xterm.h frame.h dispextern.h widgetprv.h $(config_h)
  838. window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h \
  839.    termhooks.h disptab.h keyboard.h $(config_h)
  840. xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h \
  841.    termchar.h frame.h window.h disptab.h termhooks.h $(config_h) 
  842. xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \
  843.    window.h $(config_h) 
  844. xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h \
  845.    blockinput.h $(config_h)
  846. xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h $(config_h)
  847. xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h \
  848.   dispextern.h frame.h disptab.h blockinput.h systime.h syssignal.h \
  849.   gnu.h sink.h sinkmask.h $(config_h)
  850. xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h) 
  851. xrdb.o : xrdb.c $(config_h)
  852. hftctl.o : hftctl.c $(config_h)
  853.  
  854. /* The files of Lisp proper */
  855.  
  856. alloc.o : alloc.c frame.h window.h buffer.h  puresize.h syssignal.h
  857. alloc.o : blockinput.h $(config_h) INTERVAL_SRC
  858. bytecode.o : bytecode.c buffer.h $(config_h)
  859. data.o : data.c buffer.h puresize.h syssignal.h $(config_h)
  860. eval.o : eval.c commands.h keyboard.h blockinput.h $(config_h)
  861. floatfns.o : floatfns.c $(config_h)
  862. fns.o : fns.c commands.h $(config_h) frame.h buffer.h keyboard.h INTERVAL_SRC
  863. print.o : print.c process.h frame.h window.h buffer.h $(config_h)
  864. lread.o : lread.c commands.h keyboard.h buffer.h paths.h $(config_h) \
  865.  termhooks.h
  866.  
  867. /* Text properties support */
  868. textprop.o : textprop.c buffer.h intervals.h $(config_h)
  869. intervals.o : intervals.c buffer.h intervals.h puresize.h $(config_h)
  870.  
  871. /* System-specific programs to be made.
  872.    OTHER_FILES, OBJECTS_SYSTEM and OBJECTS_MACHINE
  873.    select which of these should be compiled.  */
  874.  
  875. sunfns.o  : sunfns.c buffer.h $(config_h)
  876.  
  877. ${libsrc}emacstool: ${libsrc}emacstool.c
  878.     cd ${libsrc}; ${MAKE} ${MFLAGS} emacstool
  879. mostlyclean:
  880.     rm -f temacs prefix-args core \#* *.o libXMenu11.a liblw.a
  881.     rm -f ../etc/DOC
  882. clean: mostlyclean
  883.     rm -f emacs-* emacs
  884. /**/# This is used in making a distribution.
  885. /**/# Do not use it on development directories!
  886. distclean: clean
  887.     rm -f paths.h config.h Makefile Makefile.in ../etc/DOC-*
  888. realclean: distclean
  889.     rm -f TAGS
  890. versionclean:
  891.     -rm -f emacs emacs-* ../etc/DOC*
  892. extraclean: distclean
  893.     -rm -f *~ \#* m/?*~ s/?*~
  894.  
  895. /* The rule for the [sm] files has to be written a little funny to
  896.    avoid looking like a C comment to CPP. */
  897. SOURCES = *.[ch] [sm]/?* COPYING ymakefile \
  898.     config.h.in README COPYING ChangeLog vms.pp-trans
  899. unlock:
  900.     chmod u+w $(SOURCES)
  901.  
  902. relock:
  903.     chmod -w $(SOURCES)
  904.     chmod +w paths.h
  905.  
  906. /* Arrange to make a tags table in ../lisp, and another in this dir
  907.    which includes ../lisp/TAGS by reference.  */
  908. ctagsfiles = [a-zA-Z]*.h [a-zA-Z]*.c
  909. lisptagsfiles = ../lisp/[a-zA-Z]*.el ../lisp/term/[a-zA-Z]*.el
  910. TAGS: $(ctagsfiles)
  911.     ../lib-src/etags --include=../lisp/TAGS $(ctagsfiles)
  912. ../lisp/TAGS: $(lisptagsfiles)
  913.     cd ../lisp; $(MAKE) TAGS
  914. tags: TAGS ../lisp/TAGS
  915. .PHONY: tags
  916.