### @configure_input@ # Copyright (C) 1994, 1996-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 . SHELL = @SHELL@ # Where to find the source code. $(srcdir) will be the doc/misc subdirectory # of the source tree. This is set by configure's '--srcdir' option. srcdir=@srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ ## Where the output files go. ## Note that all the Info targets build the Info files in srcdir. ## There is no provision for Info files to exist in the build directory. ## In a tarfile of Emacs, the Info files should be up to date. buildinfodir = $(srcdir)/../../info ## Directory with docstyle.texi and emacsver.texi. emacsdir = $(srcdir)/../emacs prefix = @prefix@ datarootdir = @datarootdir@ datadir = @datadir@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ docdir = @docdir@ dvidir = @dvidir@ htmldir = @htmldir@ pdfdir = @pdfdir@ psdir = @psdir@ MKDIR_P = @MKDIR_P@ GZIP_PROG = @GZIP_PROG@ HTML_OPTS = --no-split --html # Options used only when making info output. # (Note that idlwave, info used --nosplit even without the .info extension.) INFO_OPTS= --no-split INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # The makeinfo program is part of the Texinfo distribution. # Use --force so that it generates output even if there are errors. # (TODO? Why is this appropriate?) MAKEINFO = @MAKEINFO@ MAKEINFO_OPTS = --force -I$(emacsdir) ## On MS Windows, efaq-w32; otherwise blank. DOCMISC_W32 = @DOCMISC_W32@ ## Info files to build and install on all platforms. INFO_COMMON = auth autotype bovine calc ccmode cl dbus dired-x \ ebrowse ede ediff edt efaq eglot eieio emacs-gnutls \ emacs-mime epa erc ert eshell eudc eww flymake forms gnus \ htmlfontify idlwave ido info.info mairix-el message mh-e \ modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg \ rcirc reftex remember sasl sc semantic ses sieve smtpmail \ speedbar srecode todo-mode tramp transient url use-package \ vhdl-mode vip viper vtable widget wisent woman ## Info files to install on current platform. INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32) ## Info files to build on current platform. ## This is all of them, even though they might not all get installed, ## because the info files are pre-built in release tarfiles. INFO_TARGETS = $(INFO_COMMON) efaq-w32 ## Some manuals have their source in .org format. ## This is discouraged because the .texi files it generates ## are not as well formatted as handwritten ones. ORG_SETUP = $(wildcard ${srcdir}/*-setup.org) ORG_SRC = $(filter-out ${ORG_SETUP},$(wildcard ${srcdir}/*.org)) TEXI_FROM_ORG = ${ORG_SRC:.org=.texi} # There are some naming differences between the info targets and the other # targets, so let's resolve them here. TARGETS_1 = $(INFO_INSTALL:ccmode=cc-mode) TARGETS = $(TARGETS_1:info.info=info) texi_sources = $(addsuffix .texi,${TARGETS}) texi_notgen = $(filter-out $(notdir ${TEXI_FROM_ORG}),${texi_sources}) texi_and_org = $(notdir ${ORG_SRC}) ${texi_notgen} SOURCES = $(sort ${texi_and_org}) DVI_TARGETS = $(TARGETS:=.dvi) HTML_TARGETS = $(TARGETS:=.html) PDF_TARGETS = $(TARGETS:=.pdf) PS_TARGETS = $(TARGETS:=.ps) TEXI2DVI = texi2dvi TEXI2PDF = texi2pdf DVIPS = dvips -include ${top_builddir}/src/verbose.mk ENVADD = $(AM_V_GEN)TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \ MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" gfdl = ${srcdir}/doclicense.texi style = ${emacsdir}/docstyle.texi .PHONY: info dvi html pdf ps echo-info echo-sources $(INFO_TARGETS) ## Prevent implicit rule triggering for foo.info. .SUFFIXES: ## Disable implicit rules. %.texi: ; # Default. info: $(INFO_TARGETS) ## Used by top-level Makefile. ## Base file names of output info files. INFO_BASES = $(patsubst %.info,%,$(notdir $(INFO_INSTALL))) echo-info: @: $(info $(addsuffix .info,$(INFO_BASES))) echo-sources: @: $(info $(SOURCES)) dvi: $(DVI_TARGETS) html: $(HTML_TARGETS) pdf: $(PDF_TARGETS) ps: $(PS_TARGETS) ${buildinfodir}: ${MKDIR_P} $@ ### The general case. EXTRA_OPTS = ${buildinfodir}/%.info: ${srcdir}/%.texi ${gfdl} ${style} | ${buildinfodir} $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) $(EXTRA_OPTS) \ -o $@ $< ## The short aliases, eg efaq = $(buildinfodir)/efaq.info. define info_template $(1): $$(buildinfodir)/$(1).info endef ## "info" is already taken. info.info: $(buildinfodir)/info.info $(foreach ifile,$(filter-out info.info,$(INFO_TARGETS)),$(eval $(call info_template,$(ifile)))) %.dvi: ${srcdir}/%.texi ${gfdl} ${style} $(ENVADD) $(TEXI2DVI) $< %.pdf: ${srcdir}/%.texi ${gfdl} ${style} $(ENVADD) $(TEXI2PDF) $< %.html: ${srcdir}/%.texi ${gfdl} ${style} $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) $(EXTRA_OPTS) \ -o $@ $< %.ps: %.dvi $(DVIPS) -o $@ $< ### The exceptions. ## Extra dependencies. ## FIXME Updating this list manually is unreliable. need_emacsver = calc cl dired-x efaq efaq-w32 erc forms ido \ newsticker reftex remember use-package woman need_emacsver_prefix = $(addprefix ${buildinfodir}/,${need_emacsver}) $(need_emacsver_prefix:=.info) $(need_emacsver:=.dvi) $(need_emacsver:=.pdf) $(need_emacsver:=.html) : ${emacsdir}/emacsver.texi $(buildinfodir)/gnus.info gnus.html: ${srcdir}/gnus-faq.texi $(buildinfodir)/semantic.info semantic.dvi semantic.pdf semantic.html: ${srcdir}/sem-user.texi ## Please can we just rename cc-mode.texi to ccmode.texi... ${buildinfodir}/ccmode.info: \ ${srcdir}/cc-mode.texi ${gfdl} ${style} | ${buildinfodir} $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $< ## efaq, efaq_w32 do not depend on gfdl. ## Maybe we can use .SECONDEXPANSION for this. ${buildinfodir}/efaq%.info: ${srcdir}/efaq%.texi ${style} | ${buildinfodir} $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $< efaq%.dvi: ${srcdir}/efaq%.texi $(ENVADD) $(TEXI2DVI) $< efaq%.pdf: ${srcdir}/efaq%.texi $(ENVADD) $(TEXI2PDF) $< efaq%.html: ${srcdir}/efaq%.texi $(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $< ${buildinfodir}/emacs-mime.info emacs-mime.html: EXTRA_OPTS = --enable-encoding gnus_deps = ${srcdir}/gnus.texi ${srcdir}/gnus-faq.texi ${gfdl} ${style} gnus.dvi: $(gnus_deps) sed -e '/@iflatex/,/@end iflatex/d' $< > gnustmpdvi.texi $(ENVADD) $(TEXI2DVI) gnustmpdvi.texi cp gnustmpdvi.dvi $@ rm gnustmpdvi.* gnus.pdf: $(gnus_deps) sed -e '/@iflatex/,/@end iflatex/d' $< > gnustmppdf.texi $(ENVADD) $(TEXI2PDF) gnustmppdf.texi cp gnustmppdf.pdf $@ rm gnustmppdf.* ${buildinfodir}/tramp.info tramp.html: ${srcdir}/trampver.texi abs_top_builddir = @abs_top_builddir@ # Prevent any settings in the user environment causing problems. unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH EMACS = ${abs_top_builddir}/src/emacs emacs = "${EMACS}" -batch --no-site-file --no-site-lisp --eval '(setq load-prefer-newer t)' # Generated .texi files go in srcdir so they can be included in the # release tarfile along with the others. # Work in srcdir (and use abs_top_builddir) so that +setupfile and # things like org-setup's "version" macro work. Sigh. define org_template $(1:.org=.texi): $(1) ${top_srcdir}/lisp/org/ox-texinfo.el $${AM_V_GEN}cd "$${srcdir}" && $${emacs} -l ox-texinfo \ --eval '(setq gc-cons-threshold 50000000)' \ --eval '(setq org-confirm-babel-evaluate nil)' \ -f org-texinfo-export-to-texinfo-batch $$(notdir $$<) $$(notdir $$@) endef $(foreach orgfile,${ORG_SRC},$(eval $(call org_template,$(orgfile)))) ## foo.org depends on foo-setup.org, if the latter exists. define org_setup_template $(1:-setup.org=.texi): $(1) endef $(foreach orgfile,${ORG_SETUP},$(eval $(call org_setup_template,$(orgfile)))) .PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean mostlyclean: rm -f ./*.aux ./*.log ./*.toc ./*.c[mp] ./*.c[mp]s ./*.fn ./*.fns \ ./*.ky ./*.kys ./*.op ./*.ops ./*.p[gj] ./*.p[gj]s ./*.sc ./*.scs ./*.ss \ ./*.t[gp] ./*.t[gp]s ./*.vr ./*.vrs rm -f gnustmp* clean: mostlyclean rm -f ./*.dvi ./*.html ./*.pdf ./*.ps distclean: clean rm -f Makefile ## buildinfodir is relative to srcdir. infoclean: for file in $(INFO_TARGETS); do \ file=`echo $${file} | sed 's/\.info$$//'`.info; \ rm -f \ $(buildinfodir)/$${file} \ $(buildinfodir)/$${file}-[1-9] \ $(buildinfodir)/$${file}-[1-9][0-9]; \ done .PHONY: orgclean orgclean: rm -f ${TEXI_FROM_ORG} bootstrap-clean maintainer-clean: distclean infoclean orgclean rm -f TAGS .PHONY: install-dvi install-html install-pdf install-ps install-doc install-dvi: dvi umask 022; $(MKDIR_P) "$(DESTDIR)$(dvidir)" $(INSTALL_DATA) $(DVI_TARGETS) "$(DESTDIR)$(dvidir)" install-html: html umask 022; $(MKDIR_P) "$(DESTDIR)$(htmldir)" $(INSTALL_DATA) $(HTML_TARGETS) "$(DESTDIR)$(htmldir)" install-pdf: pdf umask 022;$(MKDIR_P) "$(DESTDIR)$(pdfdir)" $(INSTALL_DATA) $(PDF_TARGETS) "$(DESTDIR)$(pdfdir)" install-ps: ps umask 022; $(MKDIR_P) "$(DESTDIR)$(psdir)" for file in $(PS_TARGETS); do \ $(INSTALL_DATA) $${file} "$(DESTDIR)$(psdir)"; \ [ -n "${GZIP_PROG}" ] || continue; \ rm -f "$(DESTDIR)$(psdir)/$${file}.gz"; \ ${GZIP_PROG} -9n "$(DESTDIR)$(psdir)/$${file}"; \ done ## Top-level Makefile installs the Info manuals. install-doc: install-dvi install-html install-pdf install-ps .PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps uninstall-doc uninstall-dvi: for file in $(DVI_TARGETS); do \ rm -f "$(DESTDIR)$(dvidir)/$${file}"; \ done uninstall-html: for file in $(HTML_TARGETS); do \ rm -f "$(DESTDIR)$(htmldir)/$${file}"; \ done uninstall-ps: ext= ; [ -n "${GZIP_PROG}" ] && ext=.gz; \ for file in $(PS_TARGETS); do \ rm -f "$(DESTDIR)$(psdir)/$${file}$${ext}"; \ done uninstall-pdf: for file in $(PDF_TARGETS); do \ rm -f "$(DESTDIR)$(pdfdir)/$${file}"; \ done uninstall-doc: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps ETAGS = ../../lib-src/etags${EXEEXT} ${ETAGS}: FORCE $(MAKE) -C $(dir $@) $(notdir $@) texifiles = $(wildcard ${srcdir}/*.texi) TAGS: ${ETAGS} $(texifiles) $(AM_V_GEN)${ETAGS} $(texifiles) tags: TAGS .PHONY: tags FORCE: .PHONY: FORCE ### Makefile ends here