### @configure_input@ # Copyright (C) 1985, 1987-1988, 1993-1994, 2001-2022 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 <https://www.gnu.org/licenses/>. SHELL = @SHELL@ # Prevent any settings in the user environment causing problems. unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH # Following ../lisp/Makefile.in. EMACS = ../src/emacs${EXEEXT} EMACSOPT = -batch --no-site-file --no-site-lisp # ==================== Things 'configure' will edit ==================== CC=@CC@ CXX=@CXX@ CFLAGS=@CFLAGS@ CXXFLAGS=@CXXFLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ version=@version@ ## Used in $archlibdir. configuration=@configuration@ EXEEXT=@EXEEXT@ C_SWITCH_SYSTEM=@C_SWITCH_SYSTEM@ C_SWITCH_MACHINE=@C_SWITCH_MACHINE@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ # Program name transformation. TRANSFORM = @program_transform_name@ top_builddir = @top_builddir@ -include ${top_builddir}/src/verbose.mk # ==================== Where To Install Things ==================== # Location to install Emacs.app under GNUstep / macOS. # Later values may use this. ns_appbindir=@ns_appbindir@ ns_applibexecdir=@ns_applibexecdir@ # The default location for installation. Everything is placed in # subdirectories of this directory. The default values for many of # the variables below are expressed in terms of this one, so you may # not need to change them. This is set with the --prefix option to # '../configure'. prefix=@prefix@ # Like 'prefix', but used for architecture-specific files. This is # set with the --exec-prefix option to '../configure'. exec_prefix=@exec_prefix@ # Where to install Emacs and other binaries that people will want to # run directly (like etags). This is set with the --bindir option # to '../configure'. bindir=@bindir@ # Where to install and expect executable files to be run by Emacs # rather than directly by users, and other architecture-dependent # data. ${archlibdir} is usually below this. This is set with the # --libexecdir option to '../configure'. libexecdir=@libexecdir@ # Nonempty if Emacs can assume Mailutils is installed. with_mailutils=@with_mailutils@ # Nonempty if Emacs can assume ctags is installed. with_ctags=@with_ctags@ # Directory for local state files for all programs. localstatedir=@localstatedir@ # Where to find the source code. This is set by the configure # script's '--srcdir' option. However, the value of ${srcdir} in # this makefile is not identical to what was specified with --srcdir, # since the variable here has '/lib-src' added at the end. # We use $(srcdir) explicitly in dependencies so as not to depend on VPATH. srcdir=@srcdir@ VPATH=@srcdir@ # The top-level source directory, also set by configure. top_srcdir=@top_srcdir@ # MinGW CPPFLAGS may use this. abs_top_srcdir=@abs_top_srcdir@ # ==================== Emacs-specific directories ==================== # These variables hold the values Emacs will actually use. They are # based on the values of the standard Make variables above. # Where to put executables to be run by Emacs rather than the user. # This path usually includes the Emacs version and configuration name, # so that multiple configurations for multiple versions of Emacs may # be installed at once. This can be set with the --archlibdir option # to '../configure'. archlibdir=@archlibdir@ # User or group of the auxiliary program update-game-score, which is # installed on platforms with a game directory shared by multiple users. # On other platforms Emacs can update the score files itself. gameuser=@gameuser@ gamegroup=@gamegroup@ # Where to install game score files, if gameuser or gamegroup is nonempty. gamedir=@gamedir@ # Nonempty if and only if a shared gamedir is used. use_gamedir=$(gameuser)$(gamegroup) # ==================== Utility Programs for the Build ================= # ../configure figures out the correct values for these. INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ # By default, we uphold the dignity of our programs. INSTALL_STRIP = MKDIR_P = @MKDIR_P@ # ========================== Lists of Files =========================== ## Haiku build-time support HAVE_BE_APP=@HAVE_BE_APP@ HAIKU_LIBS=@HAIKU_LIBS@ HAIKU_CFLAGS=@HAIKU_CFLAGS@ # emacsclientw.exe for MinGW, empty otherwise CLIENTW = @CLIENTW@ # Things that a user might actually run, which should be installed in bindir. INSTALLABLES = etags${EXEEXT} emacsclient${EXEEXT} $(CLIENTW) ebrowse${EXEEXT} \ $(if $(with_ctags), , ctags${EXEEXT}) # Things that Emacs runs internally, or during the build process, # which should not be installed in bindir. UTILITIES = hexl${EXEEXT} \ $(if $(with_mailutils), , movemail${EXEEXT}) \ $(and $(use_gamedir), update-game-score${EXEEXT}) ifeq ($(HAVE_BE_APP),yes) DONT_INSTALL= make-docfile${EXEEXT} make-fingerprint${EXEEXT} be-resources else DONT_INSTALL= make-docfile${EXEEXT} make-fingerprint${EXEEXT} endif # Like UTILITIES, but they're not system-dependent, and should not be # deleted by the distclean target. SCRIPTS= rcs2log # All files that are created by the linker, i.e., whose names end in ${EXEEXT}. EXE_FILES = ${INSTALLABLES} ${UTILITIES} ${DONT_INSTALL} # Specify additional -D flags for movemail. Options: # -DMAIL_USE_FLOCK or -DMAIL_USE_LOCKF (use flock or lockf for file locking). # See the comments about locking in movemail.c. Normally the values # set by configure should be correct and you should not need to do anything. # If neither flag is set, you need to use blessmail. MOVE_FLAGS= ## Empty if either MAIL_USE_FLOCK or MAIL_USE_LOCKF, else need-blessmail. BLESSMAIL_TARGET=@BLESSMAIL_TARGET@ ## -lkrb or -lkrb4 if needed KRB4LIB=@KRB4LIB@ ## -ldes or -ldes425 if needed DESLIB=@DESLIB@ ## -lkrb5 if needed KRB5LIB=@KRB5LIB@ ## -lk5crypto or -lcrypto if needed CRYPTOLIB=@CRYPTOLIB@ ## -lcom_err if needed COM_ERRLIB=@COM_ERRLIB@ ## -lhesiod if needed LIBHESIOD=@LIBHESIOD@ ## -lresolv if HAVE_LIBRESOLV LIBRESOLV=@LIBRESOLV@ ## -llockfile if HAVE_LIBLOCKFILE or -lmail if HAVE_LIBMAIL LIBS_MAIL=@LIBS_MAIL@ ## empty or -lrt or -lposix4 if HAVE_CLOCK_GETTIME LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ ## empty or -lbcrypt or -ladvapi32 LIB_GETRANDOM = @LIB_GETRANDOM@ ## Whatever libraries are needed for euidaccess LIB_EACCESS=@LIB_EACCESS@ ## Libraries needed for file_has_acl LIB_HAS_ACL=@LIB_HAS_ACL@ ## empty or -lwsock2 for MinGW LIB_WSOCK32=@LIB_WSOCK32@ ## Extra libraries for etags LIBS_ETAGS = $(LIB_CLOCK_GETTIME) $(LIB_GETRANDOM) HAVE_SECCOMP=@HAVE_SECCOMP@ HAVE_LIBSECCOMP=@HAVE_LIBSECCOMP@ LIBSECCOMP_LIBS=@LIBSECCOMP_LIBS@ LIBSECCOMP_CFLAGS=@LIBSECCOMP_CFLAGS@ # Currently, we can only generate seccomp filter files for x86-64. ifeq ($(HAVE_SECCOMP),yes) ifeq ($(HAVE_LIBSECCOMP),yes) ifeq ($(shell uname -m),x86_64) # We require SECCOMP_RET_KILL_PROCESS, which is only available in # Linux 4.14 and later. ifeq ($(shell { echo 4.14; uname -r | cut -d . -f 1-2; } | \ sort -C -t . -n -k 1,1 -k 2,2 && \ echo 1),1) SECCOMP_FILTER=1 endif endif endif endif ifeq ($(SECCOMP_FILTER),1) DONT_INSTALL += seccomp-filter$(EXEEXT) endif ## Extra libraries to use when linking movemail. LIBS_MOVE = $(LIBS_MAIL) $(KRB4LIB) $(DESLIB) $(KRB5LIB) $(CRYPTOLIB) \ $(COM_ERRLIB) $(LIBHESIOD) $(LIBRESOLV) $(LIB_WSOCK32) $(LIBS_ETAGS) ## Extra libraries when linking emacsclient ## (empty or -lcomctl32 for MinGW) LIBS_ECLIENT = @LIBS_ECLIENT@ ## Extra object files for linking for MinGW NTLIB = @NTLIB@ CLIENTRES = @CLIENTRES@ WINDRES = @WINDRES@ ## Some systems define this to request special libraries. LIBS_SYSTEM = @LIBS_SYSTEM@ # Flags that could be in WARN_CFLAGS, but are invalid for C++. NON_CXX_CFLAGS = -Wmissing-prototypes -Wnested-externs -Wold-style-definition \ -Wstrict-prototypes -Wno-override-init BASE_CFLAGS = $(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \ $(WARN_CFLAGS) $(WERROR_CFLAGS) \ -I. -I../src -I../lib \ -I${srcdir} -I${srcdir}/../src -I${srcdir}/../lib ALL_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS} CPP_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} ${CFLAGS} ALL_CXXFLAGS = $(filter-out ${NON_CXX_CFLAGS},${BASE_CFLAGS}) \ ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS} ${HAIKU_CFLAGS} # Configuration files for .o files to depend on. config_h = ../src/config.h $(srcdir)/../src/conf_post.h all: ${EXE_FILES} ${SCRIPTS} ifeq ($(SECCOMP_FILTER),1) all: seccomp-filter.bpf seccomp-filter-exec.bpf endif .PHONY: all need-blessmail maybe-blessmail LOADLIBES = ../lib/libgnu.a $(LIBS_SYSTEM) $(EXE_FILES): ../lib/libgnu.a ## Only used if we need blessmail, but no harm in always defining. ## This makes the actual blessmail executable. blessmail: $(srcdir)/../lisp/mail/blessmail.el $(AM_V_GEN)$(EMACS) $(EMACSOPT) -l $< $(AM_V_at)chmod +x $@ ## This checks if we need to run blessmail. ## Do not charge ahead and do it! Let the installer decide. need-blessmail: blessmail @if [ `wc -l <blessmail` != 2 ] ; then \ dir=`sed -n -e 's/echo mail directory = \(.*\)/\1/p' blessmail`; \ echo "Assuming $$dir is really the mail spool directory, you should"; \ echo "run lib-src/blessmail $(DESTDIR)${archlibdir}/movemail${EXEEXT}"; \ echo "as root, to give movemail${EXEEXT} appropriate permissions."; \ echo "Do that after running make install."; \ fi ## This is the target invoked by the top-level Makefile. maybe-blessmail: $(BLESSMAIL_TARGET) ## Install the internal utilities. Until they are installed, we can ## just run them directly from lib-src. When installing, do not give ## up if chown or chgrp fails, as the package responsible for ## installing Emacs can fix this problem later. $(DESTDIR)${archlibdir}: all $(info $ ) $(info Installing utilities run internally by Emacs.) umask 022 && ${MKDIR_P} "$(DESTDIR)${archlibdir}" exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd` && \ if [ "$$exp_archlibdir" != "`/bin/pwd`" ]; then \ for file in ${UTILITIES}; do \ $(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file \ "$(DESTDIR)${archlibdir}/$$file" || exit; \ done ; \ fi ifneq (,$(use_gamedir)) umask 022 && ${MKDIR_P} "$(DESTDIR)${gamedir}" touch "$(DESTDIR)${gamedir}/snake-scores" \ "$(DESTDIR)${gamedir}/tetris-scores" ifneq (,$(gameuser)) -chown ${gameuser} \ "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" \ "$(DESTDIR)${gamedir}" && \ chmod u+s,go-r \ "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && \ chmod u=rwx,g=rx,o=rx "$(DESTDIR)${gamedir}" else -chgrp ${gamegroup} \ "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" \ "$(DESTDIR)${gamedir}" && \ chmod g+s,o-r \ "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && \ chmod u=rwx,g=rwx,o=rx "$(DESTDIR)${gamedir}" endif endif exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd` && \ if [ "$$exp_archlibdir" != "`cd ${srcdir} && /bin/pwd`" ]; then \ for file in ${SCRIPTS}; do \ $(INSTALL_SCRIPT) ${srcdir}/$$file \ "$(DESTDIR)${archlibdir}/$$file" || exit; \ done ; \ fi .PHONY: install uninstall mostlyclean clean distclean maintainer-clean .PHONY: bootstrap-clean check tags install: $(DESTDIR)${archlibdir} $(info $ ) $(info Installing utilities for users to run.) umask 022 && ${MKDIR_P} "$(DESTDIR)${bindir}" for file in ${INSTALLABLES} ; do \ $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} \ "$(DESTDIR)${bindir}"/` \ echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)' \ `${EXEEXT} || exit; \ done uninstall: for file in ${INSTALLABLES}; do \ rm -f "$(DESTDIR)${bindir}"/` \ echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)' \ `${EXEEXT}; \ done if [ -d "$(DESTDIR)${archlibdir}" ]; then \ cd "$(DESTDIR)${archlibdir}" && \ rm -f ${UTILITIES} ${SCRIPTS}; \ fi mostlyclean: rm -f core ./*.o ./*.res clean: mostlyclean -rm -f seccomp-filter.bpf seccomp-filter.pfc seccomp-filter-exec.bpf seccomp-filter-exec.pfc rm -f ${EXE_FILES} distclean: clean rm -f TAGS Makefile blessmail bootstrap-clean maintainer-clean: distclean ## Test the contents of the directory. check: $(info We don't have any tests for the lib-src/ directory yet.) tagsfiles = $(wildcard ${srcdir}/*.[ch]) .PHONY: tags tags: TAGS TAGS: etags${EXEEXT} ${tagsfiles} ./etags ${tagsfiles} ../lib/libgnu.a: $(config_h) $(MAKE) -C ../lib all etags_deps = ${srcdir}/etags.c $(NTLIB) $(config_h) etags_libs = $(NTLIB) $(LOADLIBES) $(LIBS_ETAGS) etags${EXEEXT}: ${etags_deps} $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} -o $@ $< $(etags_libs) ## ctags.c is distinct from etags.c so that parallel makes do not write two ## etags.o files on top of each other. ## FIXME? ## Can't we use a wrapper that calls 'etags --ctags'? ctags${EXEEXT}: ${srcdir}/ctags.c ${etags_deps} $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} -o $@ $< $(etags_libs) ebrowse${EXEEXT}: ${srcdir}/ebrowse.c ${srcdir}/../lib/min-max.h $(NTLIB) \ $(config_h) $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} -o $@ $< $(NTLIB) $(LOADLIBES) make-docfile${EXEEXT}: ${srcdir}/make-docfile.c $(NTLIB) $(config_h) $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< $(NTLIB) $(LOADLIBES) -o $@ make-fingerprint${EXEEXT}: ${srcdir}/make-fingerprint.c $(NTLIB) $(config_h) $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< $(NTLIB) $(LOADLIBES) -o $@ movemail${EXEEXT}: ${srcdir}/movemail.c pop.o $(NTLIB) $(config_h) $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} ${MOVE_FLAGS} $< pop.o \ $(NTLIB) $(LOADLIBES) $(LIBS_MOVE) -o $@ pop.o: ${srcdir}/pop.c ${srcdir}/pop.h ${srcdir}/../lib/min-max.h $(config_h) $(AM_V_CC)$(CC) -c ${CPP_CFLAGS} ${MOVE_FLAGS} $< emacsclient${EXEEXT}: ${srcdir}/emacsclient.c $(NTLIB) $(config_h) $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< \ $(NTLIB) $(LOADLIBES) \ $(LIB_WSOCK32) $(LIB_EACCESS) $(LIB_HAS_ACL) $(LIBS_ECLIENT) -o $@ emacsclientw${EXEEXT}: ${srcdir}/emacsclient.c $(NTLIB) $(CLIENTRES) $(config_h) $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $(CLIENTRES) -mwindows $< \ $(LOADLIBES) \ $(LIB_WSOCK32) $(LIB_EACCESS) $(LIBS_ECLIENT) -o $@ be-resources: ${srcdir}/be_resources.cc ${config_h} $(AM_V_CXXLD)$(CXX) ${ALL_CXXFLAGS} ${HAIKU_LIBS} $< -o $@ NTINC = ${srcdir}/../nt/inc NTDEPS = $(NTINC)/ms-w32.h $(NTINC)/sys/stat.h $(NTINC)/inttypes.h \ $(NTINC)/stdint.h $(NTINC)/pwd.h $(NTINC)/sys/time.h $(NTINC)/stdbool.h \ $(NTINC)/sys/wait.h $(NTINC)/unistd.h $(NTINC)/sys/file.h $(NTINC)/netdb.h # The dependency on $(NTDEPS) is a trick intended to cause recompile of # programs on MinGW whenever some private header in nt/inc is modified. ntlib.o: ${srcdir}/ntlib.c ${srcdir}/ntlib.h $(NTDEPS) $(AM_V_CC)$(CC) -c ${CPP_CFLAGS} $< hexl${EXEEXT}: ${srcdir}/hexl.c $(NTLIB) $(config_h) $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< $(LOADLIBES) -o $@ update-game-score${EXEEXT}: ${srcdir}/update-game-score.c $(NTLIB) $(config_h) $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} \ -DHAVE_SHARED_GAME_DIR="\"$(gamedir)\"" \ $< $(NTLIB) $(LOADLIBES) -o $@ emacsclient.res: ../nt/emacsclient.rc $(NTINC)/../icons/emacs.ico $(AM_V_RC)$(WINDRES) -O coff --include-dir=$(NTINC)/.. -o $@ $< ifeq ($(SECCOMP_FILTER),1) seccomp-filter$(EXEEXT): $(srcdir)/seccomp-filter.c $(config_h) $(AM_V_CCLD)$(CC) $(ALL_CFLAGS) $(LIBSECCOMP_CFLAGS) $< \ $(LIBSECCOMP_LIBS) -o $@ seccomp-filter.bpf seccomp-filter.pfc seccomp-filter-exec.bpf seccomp-filter-exec.pfc: seccomp-filter$(EXEEXT) $(AM_V_GEN)./seccomp-filter$(EXEEXT) \ seccomp-filter.bpf seccomp-filter.pfc \ seccomp-filter-exec.bpf seccomp-filter-exec.pfc endif ## Makefile ends here.