### @configure_input@ # Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2024 Free Software # Foundation, Inc. # This file is part of GNU Emacs. # GNU Emacs 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 3 of the License, or # (at your option) any later version. # GNU Emacs 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 GNU Emacs. If not, see . # Note that this file is edited by msdos/sed1v2.inp for MSDOS. That # script may need modifying in sync with changes made here. Try to # avoid shell-ism because the DOS build has to use the DOS shell. SHELL = @SHELL@ # Here are the things that we expect ../configure to edit. # We use $(srcdir) explicitly in dependencies so as not to depend on VPATH. srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ # MinGW CPPFLAGS may use this. abs_top_srcdir=@abs_top_srcdir@ VPATH = $(srcdir) # Set these to 'not-set' when they are not set from top-level to please # 'load--fixup-all-elns' (bug#70842). ELN_DESTDIR=not-set BIN_DESTDIR=not-set # This is not empty if this is a Makefile that will be copied to # cross/src. XCONFIGURE = @XCONFIGURE@ ifneq ($(XCONFIGURE),) vpath %.c := $(srcdir) vpath %.h := $(srcdir) endif # abs_top_builddir is the name of the toplevel build directory under # cross-compiled builds. abs_top_builddir = @abs_top_builddir@ CC = @CC@ CXX = @CXX@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ EXEEXT = @EXEEXT@ version = @version@ MKDIR_P = @MKDIR_P@ # Don't use LIBS. configure puts stuff in it that either shouldn't be # linked with Emacs or is duplicated by the other stuff below. # LIBS = @LIBS@ LIBOBJS = @LIBOBJS@ lispsource = $(top_srcdir)/lisp lib = ../lib hostlib = $(top_builddir)/lib libsrc = ../lib-src etc = ../etc oldXMenudir = ../oldXMenu lwlibdir = ../lwlib # Configuration files for .o files to depend on. config_h = config.h $(srcdir)/conf_post.h HAVE_NATIVE_COMP = @HAVE_NATIVE_COMP@ ## ns-app if NS self contained app, else empty. OTHER_FILES = @OTHER_FILES@ ## Flags to pass for profiling builds PROFILING_CFLAGS = @PROFILING_CFLAGS@ ## Flags to pass to the compiler to enable build warnings WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ ## Machine-specific CFLAGS. C_SWITCH_MACHINE=@C_SWITCH_MACHINE@ ## System-specific CFLAGS. C_SWITCH_SYSTEM=@C_SWITCH_SYSTEM@ GNUSTEP_CFLAGS=@GNUSTEP_CFLAGS@ PNG_CFLAGS=@PNG_CFLAGS@ ## Define C_SWITCH_X_SITE to contain any special flags your compiler ## may need to deal with X Windows. For instance, if you've defined ## HAVE_X_WINDOWS and your X include files aren't in a place that your ## compiler can find on its own, you might want to add "-I/..." or ## something similar. This is normally set by configure. C_SWITCH_X_SITE=@C_SWITCH_X_SITE@ ## Define LD_SWITCH_X_SITE to contain any special flags your loader ## may need to deal with X Windows. For instance, if your X libraries ## aren't in a place that your loader can find on its own, you might ## want to add "-L/..." or something similar. Only used if ## HAVE_X_WINDOWS. ## FIXME? configure sets a value for this, but it has never been ## substituted in this or any other Makefile. Cf C_SWITCH_X_SITE. LD_SWITCH_X_SITE= ## This must come before LD_SWITCH_SYSTEM. ## If needed, a -rpath option that says where to find X windows at run time. LD_SWITCH_X_SITE_RPATH=@LD_SWITCH_X_SITE_RPATH@ ## System-specific LDFLAGS. LD_SWITCH_SYSTEM=@LD_SWITCH_SYSTEM@ ## This holds any special options for linking temacs only (i.e., not ## used by configure). LD_SWITCH_SYSTEM_TEMACS=@LD_SWITCH_SYSTEM_TEMACS@ ## Flags to pass to ld only for temacs. TEMACS_LDFLAGS = $(LD_SWITCH_SYSTEM) $(LD_SWITCH_SYSTEM_TEMACS) ## If needed, the names of the paxctl and setfattr programs. ## On grsecurity/PaX systems, unexec will fail due to a gap between ## the bss section and the heap. Older versions need paxctl to work ## around this, newer ones setfattr. See Bug#11398 and Bug#16343. PAXCTL = @PAXCTL@ SETFATTR = @SETFATTR@ ## Commands to set PaX flags on dumped and not-dumped instances of Emacs. PAXCTL_dumped = @PAXCTL_dumped@ PAXCTL_notdumped = @PAXCTL_notdumped@ ## Some systems define this to request special libraries. LIBS_SYSTEM=@LIBS_SYSTEM@ ## -lm, or empty. LIB_MATH=@LIB_MATH@ ## -lpthread, or empty. LIB_PTHREAD=@LIB_PTHREAD@ LIBIMAGE=@LIBTIFF@ @LIBJPEG@ @LIBPNG@ @LIBGIF@ @LIBXPM@ @WEBP_LIBS@ GIF_CFLAGS=@GIF_CFLAGS@ JPEG_CFLAGS=@JPEG_CFLAGS@ TIFF_CFLAGS=@TIFF_CFLAGS@ XCB_LIBS=@XCB_LIBS@ XFT_LIBS=@XFT_LIBS@ XRENDER_LIBS=@XRENDER_LIBS@ LIBX_EXTRA=-lX11 $(XCB_LIBS) $(XFT_LIBS) $(XRENDER_LIBS) FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@ HARFBUZZ_LIBS = @HARFBUZZ_LIBS@ LIBOTF_CFLAGS = @LIBOTF_CFLAGS@ LIBOTF_LIBS = @LIBOTF_LIBS@ M17N_FLT_CFLAGS = @M17N_FLT_CFLAGS@ M17N_FLT_LIBS = @M17N_FLT_LIBS@ LIB_ACL=@LIB_ACL@ CLOCK_TIME_LIB=@CLOCK_TIME_LIB@ EUIDACCESS_LIBGEN=@EUIDACCESS_LIBGEN@ NANOSLEEP_LIB=@NANOSLEEP_LIB@ QCOPY_ACL_LIB=@QCOPY_ACL_LIB@ TIMER_TIME_LIB=@TIMER_TIME_LIB@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ ## dbusbind.o if HAVE_DBUS, else empty. DBUS_OBJ = @DBUS_OBJ@ ## xwidgets.o if HAVE_XWIDGETS, else empty. XWIDGETS_OBJ = @XWIDGETS_OBJ@ LIB_EXECINFO=@LIB_EXECINFO@ SETTINGS_CFLAGS = @SETTINGS_CFLAGS@ SETTINGS_LIBS = @SETTINGS_LIBS@ ## gtkutil.o if USE_GTK, else empty. GTK_OBJ=@GTK_OBJ@ ## inotify.o if HAVE_INOTIFY. ## kqueue.o if HAVE_KQUEUE. ## gfilenotify.o if HAVE_GFILENOTIFY. ## w32notify.o if HAVE_W32NOTIFY. NOTIFY_OBJ = @NOTIFY_OBJ@ NOTIFY_CFLAGS = @NOTIFY_CFLAGS@ NOTIFY_LIBS = @NOTIFY_LIBS@ ## -ltermcap, or -lncurses, or -lcurses, or "". LIBS_TERMCAP=@LIBS_TERMCAP@ ## terminfo.o if TERMINFO, else (on MS-DOS only: termcap.o +) tparam.o. TERMCAP_OBJ=@TERMCAP_OBJ@ LIBXMU=@LIBXMU@ LIBXSM=@LIBXSM@ LIBXTR6=@LIBXTR6@ ## $(LIBXMU) -lXt $(LIBXTR6) -lXext if USE_X_TOOLKIT, else $(LIBXSM). ## Only used if HAVE_X_WINDOWS. LIBXT_OTHER=@LIBXT_OTHER@ ## If !HAVE_X11 || USE_GTK, empty. ## Else if USE_X_TOOLKIT, $(lwlibdir)/liblw.a. ## Else $(oldXMenudir)/libXMenu11.a. LIBXMENU=@LIBXMENU@ ## xmenu.o if HAVE_X_WINDOWS, else empty. XMENU_OBJ=@XMENU_OBJ@ ## xterm.o xfns.o xselect.o xrdb.o xsmfns.o xsettings.o if ## HAVE_X_WINDOWS, else empty. XOBJ=@XOBJ@ # xgselect.o if linking with GLib, else empty XGSELOBJ=@XGSELOBJ@ TOOLKIT_LIBW=@TOOLKIT_LIBW@ ## Only used if HAVE_X11, in LIBX_OTHER. LIBXT=$(TOOLKIT_LIBW) $(LIBXT_OTHER) ## If HAVE_X11, $(LIBXT) $(LIBX_EXTRA), else empty. LIBX_OTHER=@LIBX_OTHER@ ## LIBXMENU is empty if !HAVE_X_WINDOWS. ## LD_SWITCH_X_SITE should not be used if not using X, but nothing ## sets it at present, and if something ever does, it should be ## configure, which should set it to nil in non-X builds. LIBX_BASE=$(LIBXMENU) $(LD_SWITCH_X_SITE) ## Used only for GNUstep. LIBS_GNUSTEP=$(patsubst -specs=%-hardened-ld,,@LIBS_GNUSTEP@) LIBSOUND= @LIBSOUND@ CFLAGS_SOUND= @CFLAGS_SOUND@ RSVG_LIBS= @RSVG_LIBS@ RSVG_CFLAGS= @RSVG_CFLAGS@ WEBP_CFLAGS= @WEBP_CFLAGS@ WEBKIT_LIBS= @WEBKIT_LIBS@ WEBKIT_CFLAGS= @WEBKIT_CFLAGS@ CAIRO_LIBS= @CAIRO_LIBS@ CAIRO_CFLAGS= @CAIRO_CFLAGS@ IMAGEMAGICK_LIBS= @IMAGEMAGICK_LIBS@ IMAGEMAGICK_CFLAGS= @IMAGEMAGICK_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ GETADDRINFO_A_LIBS = @GETADDRINFO_A_LIBS@ LCMS2_LIBS = @LCMS2_LIBS@ LCMS2_CFLAGS = @LCMS2_CFLAGS@ LIBZ = @LIBZ@ ## system-specific libs for dynamic modules, else empty LIBMODULES = @LIBMODULES@ ## emacs-module.o if modules enabled, else empty MODULES_OBJ = @MODULES_OBJ@ XRANDR_LIBS = @XRANDR_LIBS@ XRANDR_CFLAGS = @XRANDR_CFLAGS@ XINERAMA_LIBS = @XINERAMA_LIBS@ XINERAMA_CFLAGS = @XINERAMA_CFLAGS@ XFIXES_LIBS = @XFIXES_LIBS@ XFIXES_CFLAGS = @XFIXES_CFLAGS@ XINPUT_LIBS = @XINPUT_LIBS@ XINPUT_CFLAGS = @XINPUT_CFLAGS@ XSYNC_LIBS = @XSYNC_LIBS@ XSYNC_CFLAGS = @XSYNC_CFLAGS@ XDBE_LIBS = @XDBE_LIBS@ XDBE_CFLAGS = @XDBE_CFLAGS@ XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ XSHAPE_LIBS = @XSHAPE_LIBS@ XSHAPE_CFLAGS = @XSHAPE_CFLAGS@ ## widget.o if USE_X_TOOLKIT, otherwise empty. WIDGET_OBJ=@WIDGET_OBJ@ HYBRID_MALLOC = @HYBRID_MALLOC@ ## cygw32.o if CYGWIN, otherwise empty. CYGWIN_OBJ=@CYGWIN_OBJ@ ## fontset.o fringe.o image.o if we have any window system WINDOW_SYSTEM_OBJ=@WINDOW_SYSTEM_OBJ@ ## dosfns.o msdos.o w16select.o if MSDOS. MSDOS_OBJ = ## w16select.o termcap.o if MSDOS && HAVE_X_WINDOWS. MSDOS_X_OBJ = NS_OBJ=@NS_OBJ@ ## nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o ns_fontfile if HAVE_NS. NS_OBJC_OBJ=@NS_OBJC_OBJ@ ## Used only for GNUstep. GNU_OBJC_CFLAGS=$(patsubst -specs=%-hardened-cc1,,@GNU_OBJC_CFLAGS@) ## w32fns.o w32menu.c w32reg.o fringe.o fontset.o w32font.o w32term.o ## w32xfns.o w32select.o image.o w32uniscribe.o w32cygwinx.o if HAVE_W32, ## w32cygwinx.o if CYGWIN but not HAVE_W32, else empty. W32_OBJ=@W32_OBJ@ ## -lkernel32 -luser32 -lusp10 -lgdi32 -lole32 -lcomdlg32 -lcomctl32 ## -lwinspool if HAVE_W32, ## -lkernel32 if CYGWIN but not HAVE_W32, else empty. W32_LIBS=@W32_LIBS@ PGTK_OBJ=@PGTK_OBJ@ PGTK_LIBS=@PGTK_LIBS@ ## emacs.res if HAVE_W32 EMACSRES = @EMACSRES@ ## If HAVE_W32, compiler arguments for including ## the resource file in the binary. ## Cygwin: -Wl,emacs.res ## MinGW: emacs.res W32_RES_LINK=@W32_RES_LINK@ ## Empty if !HAVE_X_WINDOWS ## xfont.o ftfont.o xftfont.o if HAVE_XFT ## xfont.o ftfont.o if HAVE_FREETYPE ## xfont.o ftfont.o ftcrfont.o if USE_CAIRO ## else xfont.o ## if HAVE_HARFBUZZ, hbfont.o is added regardless of the rest FONT_OBJ=@FONT_OBJ@ ## Empty for MinGW and Android, cm.o for the rest. CM_OBJ=@CM_OBJ@ LIBGPM = @LIBGPM@ LIBSELINUX_LIBS = @LIBSELINUX_LIBS@ LIBSELINUX_CFLAGS = @LIBSELINUX_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@ LIBSYSTEMD_CFLAGS = @LIBSYSTEMD_CFLAGS@ TREE_SITTER_LIBS = @TREE_SITTER_LIBS@ TREE_SITTER_CFLAGS = @TREE_SITTER_CFLAGS@ INTERVALS_H = dispextern.h intervals.h composite.h GETLOADAVG_LIBS = @GETLOADAVG_LIBS@ LIBGMP = @LIBGMP@ LIBGCCJIT_LIBS = @LIBGCCJIT_LIBS@ LIBGCCJIT_CFLAGS = @LIBGCCJIT_CFLAGS@ ## dynlib.o if necessary, else empty DYNLIB_OBJ = @DYNLIB_OBJ@ RUN_TEMACS = ./temacs # Whether builds should contain details. '--no-build-details' or empty. BUILD_DETAILS = @BUILD_DETAILS@ UNEXEC_OBJ = @UNEXEC_OBJ@ HAIKU_OBJ = @HAIKU_OBJ@ HAIKU_CXX_OBJ = @HAIKU_CXX_OBJ@ HAIKU_LIBS = @HAIKU_LIBS@ HAIKU_CFLAGS = @HAIKU_CFLAGS@ ANDROID_OBJ = @ANDROID_OBJ@ ANDROID_LIBS = @ANDROID_LIBS@ ANDROID_LDFLAGS = @ANDROID_LDFLAGS@ ANDROID_BUILD_CFLAGS = @ANDROID_BUILD_CFLAGS@ LIBGMP_CFLAGS = @LIBGMP_CFLAGS@ DUMPING=@DUMPING@ CHECK_STRUCTS = @CHECK_STRUCTS@ HAVE_PDUMPER = @HAVE_PDUMPER@ HAVE_BE_APP = @HAVE_BE_APP@ ## ARM Macs require that all code have a valid signature. Since pdump ## invalidates the signature, we must re-sign to fix it. DO_CODESIGN=$(patsubst aarch64-apple-darwin%,yes,@configuration@) -include ${top_builddir}/src/verbose.mk bootstrap_exe = ../src/bootstrap-emacs$(EXEEXT) ifeq ($(DUMPING),pdumper) bootstrap_pdmp := bootstrap-emacs.pdmp # Keep in sync with loadup.el pdmp := emacs.pdmp else bootstrap_pdmp := pdmp := endif # Flags that might be in WARN_CFLAGS but are not valid for Objective C. NON_OBJC_CFLAGS = -Wignored-attributes -Wignored-qualifiers -Wopenmp-simd \ -Wnested-externs -Wstrict-flex-arrays -Wflex-array-member-not-at-end # Ditto, but for C++. NON_CXX_CFLAGS = -Wmissing-prototypes -Wnested-externs -Wold-style-definition \ -Wstrict-prototypes -Wno-override-init # -Demacs makes some files produce the correct version for use in Emacs. # MYCPPFLAGS is for by-hand Emacs-specific overrides, e.g., # "make MYCPPFLAGS='-DDBUS_DEBUG'". EMACS_CFLAGS=-Demacs $(MYCPPFLAGS) -I. -I$(srcdir) \ -I$(lib) -I$(top_srcdir)/lib \ $(C_SWITCH_MACHINE) $(C_SWITCH_SYSTEM) $(C_SWITCH_X_SITE) \ $(GNUSTEP_CFLAGS) $(CFLAGS_SOUND) $(RSVG_CFLAGS) $(IMAGEMAGICK_CFLAGS) \ $(PNG_CFLAGS) $(LIBXML2_CFLAGS) $(LIBGCCJIT_CFLAGS) $(DBUS_CFLAGS) \ $(XRANDR_CFLAGS) $(XINERAMA_CFLAGS) $(XFIXES_CFLAGS) $(XDBE_CFLAGS) \ $(XINPUT_CFLAGS) $(WEBP_CFLAGS) $(WEBKIT_CFLAGS) $(LCMS2_CFLAGS) \ $(SETTINGS_CFLAGS) $(FREETYPE_CFLAGS) $(FONTCONFIG_CFLAGS) \ $(HARFBUZZ_CFLAGS) $(LIBOTF_CFLAGS) $(M17N_FLT_CFLAGS) $(DEPFLAGS) \ $(LIBSYSTEMD_CFLAGS) $(XSYNC_CFLAGS) $(TREE_SITTER_CFLAGS) \ $(LIBGNUTLS_CFLAGS) $(NOTIFY_CFLAGS) $(CAIRO_CFLAGS) \ $(WERROR_CFLAGS) $(HAIKU_CFLAGS) $(XCOMPOSITE_CFLAGS) $(XSHAPE_CFLAGS) \ $(ANDROID_BUILD_CFLAGS) $(GIF_CFLAGS) $(JPEG_CFLAGS) $(SQLITE3_CFLAGS) \ $(LIBGMP_CFLAGS) $(TIFF_CFLAGS) $(LIBSELINUX_CFLAGS) ALL_CFLAGS = $(EMACS_CFLAGS) $(WARN_CFLAGS) $(CFLAGS) ALL_OBJC_CFLAGS = $(EMACS_CFLAGS) \ $(filter-out $(NON_OBJC_CFLAGS),$(WARN_CFLAGS)) $(CFLAGS) \ $(GNU_OBJC_CFLAGS) ALL_CXX_CFLAGS = $(EMACS_CFLAGS) \ $(filter-out $(NON_CXX_CFLAGS),$(WARN_CFLAGS)) $(CXXFLAGS) .SUFFIXES: .c .m .cc .c.o: $(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $(PROFILING_CFLAGS) $< .m.o: $(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_OBJC_CFLAGS) $(PROFILING_CFLAGS) $< .cc.o: $(AM_V_CXX)$(CXX) -c $(CPPFLAGS) $(ALL_CXX_CFLAGS) $(PROFILING_CFLAGS) $< ## lastfile must follow all files whose initialized data areas should ## be dumped as pure by dump-emacs. 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_OBJ) term.o terminal.o xfaces.o $(XOBJ) $(GTK_OBJ) $(DBUS_OBJ) \ emacs.o keyboard.o macros.o keymap.o sysdep.o \ bignum.o buffer.o filelock.o insdel.o marker.o \ minibuf.o fileio.o dired.o \ cmds.o casetab.o casefiddle.o indent.o search.o regex-emacs.o undo.o \ alloc.o pdumper.o data.o doc.o editfns.o callint.o \ eval.o floatfns.o fns.o sort.o font.o print.o lread.o $(MODULES_OBJ) \ syntax.o $(UNEXEC_OBJ) bytecode.o comp.o $(DYNLIB_OBJ) \ process.o gnutls.o callproc.o \ region-cache.o sound.o timefns.o atimer.o \ doprnt.o intervals.o textprop.o composite.o xml.o lcms.o $(NOTIFY_OBJ) \ $(XWIDGETS_OBJ) \ profiler.o decompress.o \ thread.o systhread.o sqlite.o treesit.o \ itree.o json.o \ $(if $(HYBRID_MALLOC),sheap.o) \ $(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ) \ $(W32_OBJ) $(WINDOW_SYSTEM_OBJ) $(XGSELOBJ) \ $(HAIKU_OBJ) $(PGTK_OBJ) $(ANDROID_OBJ) doc_obj = $(base_obj) $(NS_OBJC_OBJ) obj = $(doc_obj) $(HAIKU_CXX_OBJ) ## Object files used on some machine or other. ## These go in the DOC file on all machines in case they are needed. ## Some of them have no DOC entries, but it does no harm to have them ## in the list, in case they ever add any such entries. SOME_MACHINE_OBJECTS = dosfns.o msdos.o \ xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \ fontset.o dbusbind.o cygw32.o \ nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o macfont.o \ nsxwidget.o \ w32.o w32console.o w32cygwinx.o w32fns.o w32heap.o w32inevt.o w32notify.o \ w32menu.o w32proc.o w32reg.o w32select.o w32term.o w32xfns.o \ w16select.o widget.o xfont.o ftfont.o xftfont.o gtkutil.o \ xsettings.o xgselect.o termcap.o hbfont.o \ haikuterm.o haikufns.o haikumenu.o haikufont.o androidterm.o androidfns.o \ androidfont.o androidselect.c androidvfs.c sfntfont-android.c sfntfont.c ## gmalloc.o if !SYSTEM_MALLOC && !DOUG_LEA_MALLOC, else empty. GMALLOC_OBJ=@GMALLOC_OBJ@ ## vm-limit.o if !SYSTEM_MALLOC, else empty. VMLIMIT_OBJ=@VMLIMIT_OBJ@ ## ralloc.o if !SYSTEM_MALLOC && REL_ALLOC, else empty. RALLOC_OBJ=@RALLOC_OBJ@ ## Empty on Cygwin and MinGW, lastfile.o elsewhere. PRE_ALLOC_OBJ=@PRE_ALLOC_OBJ@ ## lastfile.o on Cygwin and MinGW, empty elsewhere. POST_ALLOC_OBJ=@POST_ALLOC_OBJ@ ## List of object files that make-docfile should not be told about. otherobj= $(TERMCAP_OBJ) $(PRE_ALLOC_OBJ) $(GMALLOC_OBJ) $(RALLOC_OBJ) \ $(POST_ALLOC_OBJ) $(WIDGET_OBJ) $(LIBOBJS) ## All object files linked into temacs. $(VMLIMIT_OBJ) should be first. ## (On MinGW, firstfile.o should be before vm-limit.o.) FIRSTFILE_OBJ=@FIRSTFILE_OBJ@ ALLOBJS = $(FIRSTFILE_OBJ) $(VMLIMIT_OBJ) $(obj) $(otherobj) # Must be first, before dep inclusion! ifneq ($(HAVE_BE_APP),yes) all: emacs$(EXEEXT) $(pdmp) $(OTHER_FILES) else all: Emacs Emacs.pdmp $(OTHER_FILES) endif ifeq ($(HAVE_NATIVE_COMP):$(NATIVE_DISABLED),yes:) all: ../native-lisp endif .PHONY: all dmpstruct_headers=$(srcdir)/lisp.h $(srcdir)/buffer.h $(srcdir)/itree.h \ $(srcdir)/intervals.h $(srcdir)/charset.h $(srcdir)/bignum.h ifeq ($(CHECK_STRUCTS),true) pdumper.o: dmpstruct.h endif dmpstruct.h: $(srcdir)/dmpstruct.awk dmpstruct.h: $(libsrc)/make-fingerprint$(EXEEXT) $(dmpstruct_headers) $(AM_V_GEN)POSIXLY_CORRECT=1 awk -f $(srcdir)/dmpstruct.awk \ $(dmpstruct_headers) > $@ AUTO_DEPEND = @AUTO_DEPEND@ DEPDIR = deps ifeq ($(AUTO_DEPEND),yes) DEPFLAGS = -MMD -MF $(DEPDIR)/$*.d -MP -include $(ALLOBJS:%.o=$(DEPDIR)/%.d) else DEPFLAGS = include $(srcdir)/deps.mk endif ## This is the list of all Lisp files that might be loaded into the ## dumped Emacs. Some of them are not loaded on all platforms, but ## the DOC file on every platform uses them (because the DOC file is ## supposed to be platform-independent). ## Note that this list should not include lisp files which might not ## be present, like site-load.el and site-init.el; this makefile ## expects them all to be either present or buildable. ## ## To generate this list from loadup.el, we can either: ## 1) Extract everything matching (load "..."), in which case ## we need to add charprop.el by hand; or ## 2) Extract everything matching (load "...", in which case ## we need to remove leim-list, site-init, and site-load by hand. ## There's not much to choose between these two approaches, ## but the second one seems like it could be more future-proof. ## ## This list is placed in the toplevel build directory to prevent it ## from being unnecessarily regenerated by the successive use of this ## Makefile within cross/Makefile. shortlisp = $(abs_top_builddir)/src/lisp.mk: $(lispsource)/loadup.el ${AM_V_GEN}( printf 'shortlisp = \\\n'; \ sed -n 's/^[ \t]*(load "\([^"]*\)".*/\1/p' $< | \ sed -e 's/$$/.elc \\/' -e 's/\.el\.elc/.el/'; \ echo "" ) > $@.tmp $(AM_V_at)mv -f $@.tmp $@ -include $(abs_top_builddir)/src/lisp.mk shortlisp_filter = leim/leim-list.el site-load.elc site-init.elc shortlisp := $(filter-out ${shortlisp_filter},${shortlisp}) ## Place loaddefs.el first, so it gets generated first, since it is on ## the critical path (relevant in parallel compilations). ## We don't really need to sort, but may as well use it to remove duplicates. shortlisp := loaddefs.el loadup.el $(sort ${shortlisp}) export LISP_PRELOADED = ${shortlisp} lisp = $(addprefix ${lispsource}/,${shortlisp}) ## Construct full set of libraries to be linked. LIBES = $(LIBS) $(W32_LIBS) $(LIBS_GNUSTEP) $(PGTK_LIBS) $(LIBX_BASE) $(LIBIMAGE) \ $(LIBX_OTHER) $(LIBSOUND) \ $(RSVG_LIBS) $(IMAGEMAGICK_LIBS) $(LIB_ACL) $(CLOCK_TIME_LIB) \ $(NANOSLEEP_LIB) $(QCOPY_ACL_LIB) $(WEBKIT_LIBS) \ $(EUIDACCESS_LIBGEN) $(TIMER_TIME_LIB) $(DBUS_LIBS) \ $(LIB_EXECINFO) $(XRANDR_LIBS) $(XINERAMA_LIBS) $(XFIXES_LIBS) \ $(XDBE_LIBS) $(XSYNC_LIBS) \ $(LIBXML2_LIBS) $(LIBGPM) $(LIBS_SYSTEM) $(CAIRO_LIBS) \ $(LIBS_TERMCAP) $(GETLOADAVG_LIBS) $(SETTINGS_LIBS) $(LIBSELINUX_LIBS) \ $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(HARFBUZZ_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \ $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) $(GETADDRINFO_A_LIBS) $(LCMS2_LIBS) \ $(NOTIFY_LIBS) $(LIB_MATH) $(LIBZ) $(LIBMODULES) $(LIBSYSTEMD_LIBS) \ $(LIBGMP) $(LIBGCCJIT_LIBS) $(XINPUT_LIBS) $(HAIKU_LIBS) \ $(TREE_SITTER_LIBS) $(SQLITE3_LIBS) $(XCOMPOSITE_LIBS) $(XSHAPE_LIBS) \ $(ANDROID_LIBS) ## FORCE it so that admin/unidata can decide whether this file is ## up-to-date. Although since charprop depends on bootstrap-emacs, ## and emacs depends on charprop, in practice this rule was always run ## anyway. ifneq ($(XCONFIGURE),android) $(lispsource)/international/charprop.el: \ FORCE | bootstrap-emacs$(EXEEXT) $(bootstrap_pdmp) $(MAKE) -C ../admin/unidata all EMACS="../$(bootstrap_exe)" endif ## We require charprop.el to exist before ucs-normalize.el is ## byte-compiled, because ucs-normalize.el needs to load 2 uni-*.el files. ## And ns-win requires ucs-normalize. $(lispsource)/international/ucs-normalize.elc $(lispsource)/term/ns-win.elc: | \ $(lispsource)/international/charprop.el lispintdir = ${lispsource}/international ${lispintdir}/cp51932.el ${lispintdir}/eucjp-ms.el: FORCE ${MAKE} -C ../admin/charsets $(notdir $@) charsets = ${top_srcdir}/admin/charsets/charsets.stamp ${charsets}: FORCE $(MAKE) -C ../admin/charsets all charscript = ${lispintdir}/charscript.el ${charscript}: FORCE $(MAKE) -C ../admin/unidata $(notdir $@) emoji-zwj = ${lispintdir}/emoji-zwj.el ${emoji-zwj}: FORCE $(MAKE) -C ../admin/unidata $(notdir $@) ${lispintdir}/characters.elc: ${charscript:.el=.elc} ${emoji-zwj:.el=.elc} SYSTEM_TYPE = @SYSTEM_TYPE@ ## The dumped Emacs is as functional and more efficient than ## bootstrap-emacs, so we replace the latter with the former. ## Strictly speaking, emacs does not depend directly on all of $lisp, ## since not all pieces are used on all platforms. But DOC depends ## on all of $lisp, and emacs depends on DOC, so it is ok to use $lisp here. emacs$(EXEEXT): temacs$(EXEEXT) \ $(abs_top_builddir)/src/lisp.mk $(etc)/DOC $(lisp) \ $(lispsource)/international/charprop.el ${charsets} ifeq ($(SYSTEM_TYPE),cygwin) find ${top_builddir} -name '*.eln' | rebase -v -O -T - endif ifeq ($(DUMPING),unexec) LC_ALL=C $(RUN_TEMACS) -batch $(BUILD_DETAILS) -l loadup --temacs=dump ifneq ($(PAXCTL_dumped),) $(PAXCTL_dumped) emacs$(EXEEXT) endif cp -f $@ bootstrap-emacs$(EXEEXT) else rm -f $@ && cp -f temacs$(EXEEXT) $@ endif ## On Haiku, also produce a binary named Emacs with the appropriate ## icon set. ifeq ($(HAVE_BE_APP),yes) Emacs: emacs$(EXEEXT) $(libsrc)/be-resources $(AM_V_GEN) cp -f emacs$(EXEEXT) $@ $(AM_V_at) $(libsrc)/be-resources \ $(etc)/images/icons/hicolor/32x32/apps/emacs.png $@ Emacs.pdmp: $(pdmp) $(AM_V_GEN) cp -f $(pdmp) $@ endif ifeq ($(DUMPING),pdumper) $(pdmp): emacs$(EXEEXT) $(lispsource)/loaddefs.el $(lispsource)/loaddefs.elc LC_ALL=C $(RUN_TEMACS) -batch $(BUILD_DETAILS) -l loadup --temacs=pdump \ --bin-dest '$(BIN_DESTDIR)' --eln-dest '$(ELN_DESTDIR)' cp -f $@ $(bootstrap_pdmp) endif ## $(SOME_MACHINE_OBJECTS) comes before $(obj) because some files may ## or may not be included in $(obj), but they are always included in ## $(SOME_MACHINE_OBJECTS). Since a file is processed when it is mentioned ## for the first time, this prevents any variation between configurations ## in the contents of the DOC file. ## $(etc)/DOC: $(libsrc)/make-docfile$(EXEEXT) $(doc_obj) $(AM_V_GEN)$(MKDIR_P) $(etc) $(AM_V_at)rm -f $(etc)/DOC $(AM_V_at)$(libsrc)/make-docfile -d $(srcdir) \ $(SOME_MACHINE_OBJECTS) $(doc_obj) > $(etc)/DOC $(libsrc)/make-docfile$(EXEEXT) $(libsrc)/make-fingerprint$(EXEEXT): \ $(hostlib)/libgnu.a $(MAKE) -C $(dir $@) $(notdir $@) buildobj.h: Makefile $(AM_V_GEN)for i in $(ALLOBJS); do \ echo "$$i" | sed 's,.*/,,; s/\.obj$$/\.o/; s/^/"/; s/$$/",/' \ || exit; \ done >$@.tmp $(AM_V_at)mv $@.tmp $@ GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m) gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES) $(AM_V_GLOBALS)$(libsrc)/make-docfile -d $(srcdir) -g $(doc_obj) > globals.tmp $(AM_V_at)$(top_srcdir)/build-aux/move-if-change globals.tmp globals.h $(AM_V_at)echo timestamp > $@ globals.h: gl-stamp; @true $(ALLOBJS): globals.h LIBEGNU_ARCHIVE = $(lib)/lib$(if $(HYBRID_MALLOC),e)gnu.a $(LIBEGNU_ARCHIVE): $(config_h) $(MAKE) -C $(dir $@) all ifeq ($(HAVE_PDUMPER),yes) MAKE_PDUMPER_FINGERPRINT = $(libsrc)/make-fingerprint$(EXEEXT) else MAKE_PDUMPER_FINGERPRINT = endif ## We have to create $(etc) here because init_cmdargs tests its ## existence when setting Vinstallation_directory (FIXME?). ## This goes on to affect various things, and the emacs binary fails ## to start if Vinstallation_directory has the wrong value. temacs$(EXEEXT): $(LIBXMENU) $(ALLOBJS) $(LIBEGNU_ARCHIVE) $(EMACSRES) \ $(charsets) $(charscript) ${emoji-zwj} $(MAKE_PDUMPER_FINGERPRINT) ifeq ($(HAVE_BE_APP),yes) $(AM_V_CXXLD)$(CXX) -o $@.tmp \ $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \ $(ALLOBJS) $(LIBEGNU_ARCHIVE) $(W32_RES_LINK) $(LIBES) -lstdc++ else $(AM_V_CCLD)$(CC) -o $@.tmp \ $(ALL_CFLAGS) $(CXXFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \ $(ALLOBJS) $(LIBEGNU_ARCHIVE) $(W32_RES_LINK) $(LIBES) endif ifeq ($(HAVE_PDUMPER),yes) $(AM_V_at)$(MAKE_PDUMPER_FINGERPRINT) $@.tmp ifeq ($(DO_CODESIGN),yes) codesign -s - -f $@.tmp endif endif $(AM_V_at)mv $@.tmp $@ $(MKDIR_P) $(etc) ifeq ($(DUMPING),unexec) ifneq ($(PAXCTL_notdumped),) $(PAXCTL_notdumped) $@ endif endif ifeq ($(XCONFIGURE),android) ## The Android package internally links to a shared library named ## `libemacs.so' at startup. It is built almost the same way temacs ## is. But it is position independent, and is not dumped here. ## Instead, it dumps itself the first time it starts on the user's ## device. # Include ndk-build.mk in order to build Emacs dependencies. old_top_builddir := $(top_builddir) top_builddir := $(old_top_builddir)/.. include $(old_top_builddir)/ndk-build/ndk-build.mk top_builddir := $(old_top_builddir) ## Builds using libemacs.so (Android) don't dump Emacs within this ## Makefile, but on device. Make sure the library hash changes for ## each change in shortlisp by linking an object that changes ## accordingly to it. BUILD_COUNTER_OBJ = build-counter.o # This file is then compiled into libemacs.so build-counter.c: $(abs_top_builddir)/src/lisp.mk $(lisp) $(AM_V_GEN) $(top_srcdir)/build-aux/makecounter.sh $@ libemacs.so: $(ALLOBJS) $(BUILD_COUNTER_OBJ) $(LIBEGNU_ARCHIVE) \ $(EMACSRES) $(MAKE_PDUMPER_FINGERPRINT) \ $(NDK_BUILD_SHARED) $(NDK_BUILD_STATIC) $(etc)/DOC $(AM_V_CCLD)$(CC) -o $@ $(ALL_CFLAGS) $(TEMACS_LDFLAGS) \ $(ANDROID_LDFLAGS) $(LDFLAGS) -shared $(ALLOBJS) \ $(BUILD_COUNTER_OBJ) $(LIBEGNU_ARCHIVE) $(LIBES) $(AM_V_at)$(MAKE_PDUMPER_FINGERPRINT) $@ # There is also a binary named `android-emacs' which simply calls # emacs.so. It need not link against libemacs because app_process # will do that instead. android-emacs: android-emacs.c $(AM_V_CCLD)$(CC) $(lastword $^) -o $@ \ $(ALL_CFLAGS) $(LDFLAGS) \ $(LIBEGNU_ARCHIVE) endif ## The following oldxmenu-related rules are only (possibly) used if ## HAVE_X11 && !USE_GTK, but there is no harm in always defining them. $(lwlibdir)/liblw.a: $(config_h) globals.h lisp.h FORCE $(MAKE) -C $(dir $@) $(notdir $@) $(oldXMenudir)/libXMenu11.a: FORCE $(MAKE) -C $(dir $@) $(notdir $@) FORCE: .PHONY: FORCE .PRECIOUS: ../config.status Makefile ../config.status: $(top_srcdir)/configure.ac $(top_srcdir)/m4/*.m4 $(MAKE) -C $(dir $@) $(notdir $@) Makefile: ../config.status $(srcdir)/Makefile.in $(MAKE) -C .. src/$@ doc.o: buildobj.h emacs.res: FORCE $(MAKE) -C ../nt ../src/emacs.res .PHONY: ns-app ns-app: emacs$(EXEEXT) $(pdmp) $(MAKE) -C ../nextstep all .PHONY: mostlyclean clean bootstrap-clean distclean maintainer-clean .PHONY: versionclean mostlyclean: rm -f android-emacs libemacs.so rm -f temacs$(EXEEXT) core ./*.core \#* ./*.o build-counter.c rm -f dmpstruct.h rm -f emacs.pdmp rm -f ../etc/DOC rm -f bootstrap-emacs$(EXEEXT) $(bootstrap_pdmp) rm -f emacs-$(version)$(EXEEXT) rm -f buildobj.h rm -f globals.h gl-stamp rm -f ./*.res ./*.tmp versionclean: rm -f emacs$(EXEEXT) emacs-*.*.*[0-9]$(EXEEXT) emacs-*.*.*[0-9].pdmp rm -f ../etc/DOC* clean: mostlyclean versionclean rm -f $(DEPDIR)/* ## bootstrap-clean is used to clean up just before a bootstrap. ## It should remove all files generated during a compilation/bootstrap, ## but not things like config.status or TAGS. bootstrap-clean: clean rm -f emacs-module.h epaths.h config.h config.stamp if test -f ./.gdbinit; then \ mv ./.gdbinit ./.gdbinit.save; \ if test -f "$(srcdir)/.gdbinit"; then rm -f ./.gdbinit.save; \ else mv ./.gdbinit.save ./.gdbinit; fi; \ fi distclean: bootstrap-clean rm -f Makefile lisp.mk verbose.mk rm -fr $(DEPDIR) maintainer-clean: distclean rm -f TAGS ETAGS = ../lib-src/etags${EXEEXT} ${ETAGS}: FORCE $(MAKE) -C $(dir $@) $(notdir $@) # Remove macuvs.h since it'd cause `src/emacs` # to be built before we can get TAGS. ctagsfiles1 = $(filter-out ${srcdir}/macuvs.h, $(wildcard ${srcdir}/*.[hc])) ctagsfiles2 = $(wildcard ${srcdir}/*.m) ctagsfiles3 = $(wildcard ${srcdir}/*.cc) ## In out-of-tree builds, TAGS are generated in the build dir, like ## other non-bootstrap build products (see Bug#31744). ## This does not need to depend on ../lisp, ../lwlib and ../lib TAGS files, ## because etags "--include" only includes a pointer to the file, ## rather than the file contents. TAGS: ${ETAGS} $(ctagsfiles1) $(ctagsfiles2) $(AM_V_GEN)${ETAGS} --include=../lisp/TAGS --include=$(lwlibdir)/TAGS \ --include=$(lib)/TAGS \ --regex='{c}/[ ]*DEFVAR_[A-Z_ (]+"\([^"]+\)"/\1/' \ --regex='{c}/[ ]*DEFVAR_[A-Z_ (]+"[^"]+",[ ]\([A-Za-z0-9_]+\)/\1/' \ $(ctagsfiles1) \ --regex='{objc}/[ ]*DEFVAR_[A-Z_ (]+"\([^"]+\)"/\1/' \ --regex='{objc}/[ ]*DEFVAR_[A-Z_ (]+"[^"]+",[ ]\([A-Za-z0-9_]+\)/\1/' \ $(ctagsfiles2) \ $(ctagsfiles3) ## Arrange to make tags tables for ../lisp, ../lwlib and ../lib, ## which the above TAGS file for the C files includes by reference. ../lisp/TAGS $(lwlibdir)/TAGS $(lib)/TAGS: FORCE $(MAKE) -C $(dir $@) $(notdir $@) ETAGS="$(ETAGS)" tags: TAGS ../lisp/TAGS $(lwlibdir)/TAGS $(lib)/TAGS .PHONY: tags ### Bootstrapping. ## Bootstrapping right is difficult because of the circular dependencies. ## Furthermore, we have to deal with the fact that many compilation targets ## such as loaddefs.el or *.elc can typically be produced by any old ## Emacs executable, so we would like to avoid rebuilding them whenever ## we build a new Emacs executable. ## ## (In other words, changing a single file src/foo.c would force ## dumping a new bootstrap-emacs, then re-byte-compiling all preloaded ## elisp files, and only then dump the actual src/emacs, which is not ## wrong, but is overkill in 99.99% of the cases.) ## ## To solve the circularity, we use 2 different Emacs executables, ## "emacs" is the main target and "bootstrap-emacs" is the one used ## to build the *.elc and loaddefs.el files. ## To solve the freshness issue, in the past we tried various clever tricks, ## but now that we require GNU make, we can simply specify ## bootstrap-emacs$(EXEEXT) as an order-only prerequisite. ## ## bootstrap-emacs doesn't have to be built when cross-compiling ## libemacs.so for Android, however, as the Lisp files have already ## been compiled by the top level `src' Makefile. ifneq ($(XCONFIGURE),android) %.elc: %.el | bootstrap-emacs$(EXEEXT) $(bootstrap_pdmp) @$(MAKE) $(AM_V_NO_PD) -C ../lisp EMACS="$(bootstrap_exe)"\ THEFILE=$< $