+# src/Makefile for GNU Emacs.
-# Makefile for GNU Emacs.
-# Copyright (C) 1985, 1987, 1988, 1993, 1994, 1995, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2011
# Free Software Foundation, Inc.
# This file is part of GNU Emacs.
LIBOBJS = @LIBOBJS@
lispsource = $(srcdir)/../lisp
+lib = ../lib
libsrc = ../lib-src
etc = ../etc
oldXMenudir = ../oldXMenu
lispdir = ../lisp
# Configuration files for .o files to depend on.
-M_FILE = $(srcdir)/@machfile@
-S_FILE = $(srcdir)/@opsysfile@
+M_FILE = @M_FILE@
+S_FILE = @S_FILE@
config_h = config.h $(M_FILE) $(S_FILE)
bootstrap_exe = $(abs_builddir)/bootstrap-emacs$(EXEEXT)
## This holds any special options for linking temacs only (ie, not
## used by configure). Not used elsewhere because it sometimes
-## contains options that have to do with using Emacs's crt0,
+## contains options that have to do with using Emacs's crt0,
## which are only good with temacs.
LD_SWITCH_SYSTEM_TEMACS=@LD_SWITCH_SYSTEM_TEMACS@
## If !HAVE_X11 || USE_GTK, empty.
## Else if USE_X_TOOLKIT, $(lwlibdir)/liblw.a.
-## Else $(oldxmenudir)/libXMenu11.a.
+## Else $(oldXMenudir)/libXMenu11.a.
## (Actually, rather than being empty, it is set to "nothing".
## It is never actually used for anything in this case.
## This is done because there is a rule with target $(OLDXMENU) below,
## If HAVE_X11 && !USE_GTK, $(OLDXMENU) ../src/$(OLDXMENU); else empty.
## We use stamp-xmenu with these two deps to both ensure that lwlib
## gets remade based on its dependencies in its own makefile,
-## and remake temacs if lwlib gets changed by this.
+## and remake temacs if lwlib gets changed by this.
OLDXMENU_DEPS=@OLDXMENU_DEPS@
## If !HAVE_X11 && HAVE_X_WINDOWS, -lXMenu (this case no longer possible).
$(lispsource)/dos-fns.elc $(lispsource)/dos-w32.elc $(lispsource)/dos-vars.elc \
$(lispsource)/term/internal.elc $(lispsource)/term/pc-win.elc
## $MSDOS_SUPPORT_REAL if MSDOS.
-MSDOS_SUPPORT =
+MSDOS_SUPPORT =
ns_appdir=@ns_appdir@
ns_appbindir=@ns_appbindir@
ns_appsrc=@ns_appsrc@
NS_OBJ=@NS_OBJ@
+NS_OBJC_OBJ=@NS_OBJC_OBJ@
NS_SUPPORT=@NS_SUPPORT@
## Only set if NS_IMPL_GNUSTEP.
GNU_OBJC_CFLAGS=@GNU_OBJC_CFLAGS@
##
## FIXME? MYCPPFLAGS only referenced in etc/DEBUG.
ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAGS) -I. -I$(srcdir) \
+ -I$(lib) -I$(srcdir)/../lib \
$(C_SWITCH_MACHINE) $(C_SWITCH_SYSTEM) $(C_SWITCH_X_SITE) \
$(C_SWITCH_X_SYSTEM) $(CFLAGS_SOUND) $(RSVG_CFLAGS) $(IMAGEMAGICK_CFLAGS) \
$(LIBXML2_CFLAGS) $(DBUS_CFLAGS) \
## lastfile must follow all files whose initialized data areas should
## be dumped as pure by dump-emacs.
-obj= dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \
+base_obj = dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \
charset.o coding.o category.o ccl.o character.o chartab.o bidi.o \
cm.o term.o terminal.o xfaces.o $(XOBJ) $(GTK_OBJ) $(DBUS_OBJ) \
emacs.o keyboard.o macros.o keymap.o sysdep.o \
buffer.o filelock.o insdel.o marker.o \
- minibuf.o fileio.o dired.o filemode.o \
+ minibuf.o fileio.o dired.o \
cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o \
alloc.o data.o doc.o editfns.o callint.o \
eval.o floatfns.o fns.o font.o print.o lread.o \
syntax.o $(UNEXEC_OBJ) bytecode.o \
process.o gnutls.o callproc.o \
region-cache.o sound.o atimer.o \
- doprnt.o strftime.o intervals.o textprop.o composite.o md5.o xml.o \
+ doprnt.o intervals.o textprop.o composite.o xml.o \
$(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ)
+obj = $(base_obj) $(NS_OBJC_OBJ)
## Object files used on some machine or other.
## These go in the DOC file on all machines in case they are needed.
## Like $shortlisp, but includes only those files from $lisp that are loaded
## conditionally (i.e., only on some platforms).
+## Confusingly, term/internal is not in loadup, but is unconditionally
+## loaded by pc-win, which is.
SOME_MACHINE_LISP = ../lisp/mouse.elc \
../lisp/select.elc ../lisp/scroll-bar.elc \
../lisp/ls-lisp.elc ../lisp/dos-fns.elc \
../lisp/w32-fns.elc ../lisp/dos-w32.elc \
- ../lisp/disp-table.elc ../lisp/dos-vars.elc \
+ ../lisp/disp-table.elc ../lisp/dos-vars.elc ../lisp/w32-vars.elc \
../lisp/tooltip.elc ../lisp/image.elc \
../lisp/fringe.elc ../lisp/dnd.elc \
../lisp/mwheel.elc ../lisp/tool-bar.elc \
../lisp/x-dnd.elc ../lisp/dynamic-setting.elc \
- ../lisp/international/ccl.elc \
../lisp/international/fontset.elc \
- ../lisp/mouse.elc \
../lisp/term/common-win.elc \
../lisp/term/x-win.elc \
../lisp/term/pc-win.elc ../lisp/term/internal.elc \
- ../lisp/term/ns-win.elc ../lisp/term/w32-win.elc \
- ../lisp/emacs-lisp/easymenu.elc
+ ../lisp/term/ns-win.elc ../lisp/term/w32-win.elc
## Construct full set of libraries to be linked.
## Note that SunOS needs -lm to come before -lc; otherwise, you get
emacs$(EXEEXT): temacs$(EXEEXT) $(etc)/DOC $(lisp)
if test "$(CANNOT_DUMP)" = "yes"; then \
ln -f temacs$(EXEEXT) emacs$(EXEEXT); \
- EMACSLOADPATH=$(lispsource) ./emacs -q -batch \
+ EMACSLOADPATH=$(lispsource) ./emacs -batch \
-f list-load-path-shadows || true; \
else \
LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump || exit 1; \
ln -f emacs$(EXEEXT) bootstrap-emacs$(EXEEXT); \
- ./emacs -q -batch -f list-load-path-shadows || true; \
+ ./emacs -batch -f list-load-path-shadows || true; \
fi
## We run make-docfile twice because the command line may get too long
buildobj.h: Makefile
echo "#define BUILDOBJ \"$(obj) $(otherobj) " "\"" > buildobj.h
+globals.h: gl-stamp; @true
-temacs$(EXEEXT): $(START_FILES) stamp-oldxmenu $(obj) $(otherobj)
+GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m)
+
+gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES)
+ @rm -f gl-tmp
+ $(libsrc)/make-docfile -d $(srcdir) -g $(SOME_MACHINE_OBJECTS) $(obj) > gl-tmp
+ $(srcdir)/../move-if-change gl-tmp globals.h
+ echo timestamp > $@
+
+$(obj) $(otherobj): globals.h
+
+$(lib)/libgnu.a: $(config_h)
+ cd $(lib) && $(MAKE) libgnu.a
+
+temacs$(EXEEXT): $(START_FILES) stamp-oldxmenu $(obj) $(otherobj) $(lib)/libgnu.a
$(CC) $(LD_FIRSTFLAG) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(TEMACS_LDFLAGS2) \
- -o temacs $(START_FILES) $(obj) $(otherobj) $(LIBES)
+ -o temacs $(START_FILES) $(obj) $(otherobj) $(lib)/libgnu.a $(LIBES)
## The following oldxmenu-related rules are only (possibly) used if
## HAVE_X11 && !USE_GTK, but there is no harm in always defining them
## (provided we take a little care that OLDXMENU is never empty).
-really-lwlib:
+really-lwlib: globals.h
cd $(lwlibdir); $(MAKE) $(MFLAGS) \
CC='$(CC)' CFLAGS='$(CFLAGS)' MAKE='$(MAKE)'
@true # make -t should not create really-lwlib.
.PHONY: really-lwlib
really-oldXMenu:
- cd $(oldxmenudir); $(MAKE) $(MFLAGS) \
+ cd $(oldXMenudir); $(MAKE) $(MFLAGS) \
CC='$(CC)' CFLAGS='$(CFLAGS)' MAKE='$(MAKE)'
@true # make -t should not create really-oldXMenu.
.PHONY: really-oldXMenu
rm -f ../etc/DOC
rm -f bootstrap-emacs$(EXEEXT) emacs-$(version)$(EXEEXT)
rm -f buildobj.h
+ rm -f globals.h gl-stamp
clean: mostlyclean
rm -f emacs-*.*.*$(EXEEXT) emacs$(EXEEXT)
-rm -rf $(DEPDIR)
ctagsfiles1 = [xyzXYZ]*.[hcm]
ctagsfiles2 = [a-wA-W]*.[hcm]
-TAGS: $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2)
+TAGS: $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) $(M_FILE) $(S_FILE)
../lib-src/etags --include=TAGS-LISP --include=$(lwlibdir)/TAGS \
--regex='/[ ]*DEFVAR_[A-Z_ (]+"\([^"]+\)"/' \
- $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2)
+ $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) $(M_FILE) $(S_FILE)
frc:
TAGS-LISP: frc
$(MAKE) -f $(lispdir)/Makefile TAGS-LISP ETAGS=../lib-src/etags