### @configure_input@
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
+# Copyright (C) 1992-2015 Free Software Foundation, Inc.
# This file is part of GNU Emacs.
SHELL = @SHELL@
-# This may not work with certain non-GNU make's. It only matters when
-# inheriting a CDPATH not starting with the current directory.
+# This only matters when inheriting a CDPATH not starting with the
+# current directory.
CDPATH=
# If Make doesn't predefine MAKE, set it here.
@SET_MAKE@
-# Prevent submakes from outputting "Entering directory ..." and
-# "Leaving directory..." diagnostics that would mess up 'make echo-info'.
-QUIET_SUBMAKE = MAKELEVEL=0
-
# ==================== Things `configure' Might Edit ====================
cache_file = @cache_file@
CONFIGURE_FLAGS = --cache-file=$(cache_file)
-CC=@CC@
-CFLAGS=@CFLAGS@
-LDFLAGS=@LDFLAGS@
-CPPFLAGS=@CPPFLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+ACLOCAL = @ACLOCAL@
+AWK = @AWK@
+
EXEEXT=@EXEEXT@
### These help us choose version- and architecture-specific directories
### The nt/ subdirectory gets built only for MinGW
NTDIR=@NTDIR@
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+
# ==================== Where To Install Things ====================
# Location to install Emacs.app under GNUstep / Mac OS X.
# Where to install and expect the info files describing Emacs.
infodir=@infodir@
# Info files not in the doc/misc directory (we get those via make echo-info).
-INFO_EXT=@INFO_EXT@
-INFO_NONMISC=emacs$(INFO_EXT) eintr$(INFO_EXT) elisp$(INFO_EXT)
+INFO_NONMISC=emacs.info eintr.info elisp.info
# If no makeinfo was found and configured --without-makeinfo, "no"; else "yes".
HAVE_MAKEINFO=@HAVE_MAKEINFO@
# We use $(srcdir) explicitly in dependencies so as not to depend on VPATH.
srcdir=@srcdir@
abs_srcdir=@abs_srcdir@
-# MinGW CPPFLAGS may use this.
-abs_top_srcdir=@abs_top_srcdir@
# Where the manpage source files are kept.
mansrcdir=$(srcdir)/doc/man
# Where the etc/emacs.desktop file is to be installed.
desktopdir=$(datarootdir)/applications
+# Where the etc/emacs.appdata.xml file is to be installed.
+appdatadir=$(datarootdir)/appdata
+
# Where the etc/images/icons/hicolor directory is to be installed.
icondir=$(datarootdir)/icons
# Create a link to a file in the same directory as the target.
LN_S_FILEONLY = @LN_S_FILEONLY@
-# We use gzip to compress installed .el files.
+# We use gzip to compress installed .el and some .txt files.
GZIP_PROG = @GZIP_PROG@
# ============================= Targets ==============================
COPYDIR = ${srcdir}/etc ${srcdir}/lisp
COPYDESTS = "$(DESTDIR)${etcdir}" "$(DESTDIR)${lispdir}"
-all: ${SUBDIR}
+all: ${SUBDIR} info
+
+.PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 etc-emacsver
-.PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 FRC
+# If configure were to just generate emacsver.tex from emacsver.tex.in
+# in the normal way, the timestamp of emacsver.tex would always be
+# newer than that of the pdf files, which are prebuilt in release tarfiles.
+# So we use this rule, and move-if-change, to avoid that.
+etc-emacsver:
+ majorversion=`echo ${version} | sed 's/\..*//'`; \
+ sed "s/[@]majorversion@/$${majorversion}/" \
+ ${srcdir}/etc/refcards/emacsver.tex.in > emacsver.tex.$$$$ && \
+ ${srcdir}/build-aux/move-if-change emacsver.tex.$$$$ \
+ ${srcdir}/etc/refcards/emacsver.tex
removenullpaths=sed -e 's/^:*//' -e 's/:*$$//g' -e 's/::*/:/g'
# See comments in configure.ac for why it is done this way, as opposed
# to just letting configure generate epaths.h from epaths.in in a
# similar way to how Makefile is made from Makefile.in.
-epaths-force: FRC
+epaths-force:
+ @for dir in '$(abs_srcdir)' '$(lispdir)' '$(archlibdir)'; do \
+ case $$dir in \
+ *:*) \
+ echo >&2 "Build or installation directory '$$dir'"; \
+ echo >&2 "cannot contain ':'."; \
+ exit 1;; \
+ esac; \
+ done
@(standardlisppath=`echo "${standardlisppath}" | ${removenullpaths}` ; \
locallisppath=`echo "${locallisppath}" | ${removenullpaths}` ; \
buildlisppath=`echo "${buildlisppath}" | ${removenullpaths}` ; \
-e 's;\(#.*PATH_DOC\).*$$;\1 "${etcdocdir}";') && \
${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
-# Replace "${w32prefix}" with '%emacs_dir%' (which expands to install
-# directory at runtime).
-msys_w32prefix_subst=sed -e 's!\(^\|;\)'"$${w32prefixpattern}"'\([;/]\|$$\)!\1%emacs_dir%\2!g'
-
-# Quote Sed special characters (except backslash and newline) with
-# a double backslash.
-msys_sed_sh_escape=sed -e 's/[];$$*.^[]/\\\\&/g'
-
# The w32 build needs a slightly different editing, and it uses
# nt/epaths.nt as the template.
#
# MS-Windows format (e.g. 'c:/foo/bar'), because temacs is a MinGW
# program that doesn't support MSYS-style paths (e.g. '/c/foo/bar' or
# '/foo/bar').
-epaths-force-w32: FRC
- @(w32srcdir=`${srcdir}/build-aux/msys-to-w32 "${srcdir}"`; \
- w32prefix=`${srcdir}/build-aux/msys-to-w32 "${prefix}" N`; \
- w32prefixpattern=`echo "$${w32prefix}" | ${msys_sed_sh_escape}` ; \
- w32locallisppath=`${srcdir}/build-aux/msys-to-w32 "${locallisppath}" N ":" "\\;" | ${msys_w32prefix_subst}` ; \
+epaths-force-w32:
+ @(w32srcdir=`${srcdir}/build-aux/msys-to-w32 "${abs_srcdir}"`; \
+ w32prefix=`${srcdir}/build-aux/msys-to-w32 "${prefix}"`; \
+ w32locallisppath=`${srcdir}/build-aux/msys-to-w32 "${locallisppath}"` ; \
+ w32locallisppath=$${w32locallisppath//$${w32prefix}/"%emacs_dir%"} ; \
sed < ${srcdir}/nt/epaths.nt > epaths.h.$$$$ \
- -e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${w32locallisppath}"'";' \
+ -e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${w32locallisppath//;/\\;}"'";' \
-e '/^.*#/s/@VER@/${version}/g' \
-e '/^.*#/s/@CFG@/${configuration}/g' \
-e "/^.*#/s|@SRC@|$${w32srcdir}|g") && \
lisp: src
# These targets should be "${SUBDIR} without `src'".
-lib lib-src lisp nt: Makefile FRC
- cd $@ && $(MAKE) all $(MFLAGS) \
- CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
- LDFLAGS='${LDFLAGS}' MAKE='${MAKE}'
-
-# Pass to src/Makefile.in an additional BOOTSTRAPEMACS variable which
-# is either set to bootstrap-emacs (in case bootstrap-emacs has not been
-# constructed yet) or the empty string (otherwise).
-# src/Makefile.in uses it to implement conditional dependencies, so that
-# files that need bootstrap-emacs to be built do not additionally need
-# to be kept fresher than bootstrap-emacs. Otherwise changing a single
-# file src/foo.c forces 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.
-#
+lib lib-src lisp nt: Makefile
+ $(MAKE) -C $@ all
+
# Ideally, VCSWITNESS should be a file that is modified whenever the
# repository registers a commit from either a local checkin or a
# repository pull. In git there is no single file that guarantees
# this, but the local log for the current head should be close enough.
#
-# Note the use of single quotes in the value of vcswitness.
-# This passes an unexpanded $srcdir to src's Makefile, which then
+# Pass an unexpanded $srcdir to src's Makefile, which then
# expands it using its own value of srcdir (which points to the
# source directory of src/).
-src: Makefile FRC
- dirstate='.git/logs/HEAD'; \
- vcswitness='$$(srcdir)/../'$$dirstate; \
- [ -r "$(srcdir)/$$dirstate" ] || vcswitness=''; \
- cd $@ || exit; \
- boot=bootstrap-emacs$(EXEEXT); \
- [ ! -x "$$boot" ] || boot=''; \
- $(MAKE) all $(MFLAGS) \
- CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
- LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' BOOTSTRAPEMACS="$$boot" \
- VCSWITNESS="$$vcswitness"
-
-blessmail: Makefile src FRC
- cd lib-src && $(MAKE) maybe-blessmail $(MFLAGS) \
- MAKE='${MAKE}' archlibdir='$(archlibdir)'
+dirstate = .git/logs/HEAD
+VCSWITNESS = $(if $(wildcard $(srcdir)/$(dirstate)),$$(srcdir)/../$(dirstate))
+src: Makefile
+ $(MAKE) -C $@ VCSWITNESS='$(VCSWITNESS)' all
+
+blessmail: Makefile src
+ $(MAKE) -C lib-src maybe-blessmail
# We used to have one rule per */Makefile.in, but that leads to race
# conditions with parallel makes, so let's assume that the time stamp on
# Don't erase these files if make is interrupted while refreshing them.
.PRECIOUS: Makefile config.status
-config.status: ${srcdir}/configure ${srcdir}/lisp/version.el
+config.status: ${srcdir}/configure
if [ -x ./config.status ]; then \
$(CFG) ./config.status --recheck; \
else \
AUTOCONF_INPUTS = $(srcdir)/configure.ac $(srcdir)/aclocal.m4
$(srcdir)/configure: $(AUTOCONF_INPUTS)
- cd ${srcdir} && autoconf
+ cd ${srcdir} && ${AUTOCONF}
-ACLOCAL_INPUTS = $(srcdir)/configure.ac $(srcdir)/m4/gnulib-comp.m4
+ACLOCAL_PATH = @ACLOCAL_PATH@
+ACLOCAL_INPUTS = $(srcdir)/configure.ac $(srcdir)/m4/*.m4
$(srcdir)/aclocal.m4: $(ACLOCAL_INPUTS)
- cd $(srcdir) && aclocal -I m4
+ cd $(srcdir) && ACLOCAL_PATH='$(ACLOCAL_PATH)' $(ACLOCAL) -I m4
AUTOMAKE_INPUTS = $(srcdir)/aclocal.m4 $(srcdir)/lib/Makefile.am \
$(srcdir)/lib/gnulib.mk
$(srcdir)/lib/Makefile.in: $(AUTOMAKE_INPUTS)
- cd $(srcdir) && automake --gnu -a -c lib/Makefile
+ cd $(srcdir) && $(AUTOMAKE) --gnu -a -c lib/Makefile
# Regenerate files that this makefile would have made, if this makefile
# had been built by Automake. The name 'am--refresh' is for
@ # because stamp-h.in has changed (since building stamp-h.in
@ # refreshes config.in as well), but if config.in is missing
@ # then we really need to do something more.
- [ -r "$@" ] || ( cd ${srcdir} && autoheader )
+ $(if $(wildcard $@),,cd $(srcdir) && $(AUTOHEADER))
$(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS)
- cd ${srcdir} && autoheader
- rm -f $(srcdir)/src/stamp-h.in
- echo timestamp > $(srcdir)/src/stamp-h.in
+ cd ${srcdir} && ${AUTOHEADER}
+ rm -f $@
+ echo timestamp > $@
# ==================== Installation ====================
### Lisp files and DOC file to work properly.
install-arch-dep: src install-arch-indep install-etcdoc install-$(NTDIR)
umask 022; ${MKDIR_P} "$(DESTDIR)${bindir}"
- cd lib-src && \
- $(MAKE) install $(MFLAGS) prefix="${prefix}" \
- exec_prefix="${exec_prefix}" bindir="${bindir}" \
- libexecdir="${libexecdir}" archlibdir="${archlibdir}" \
- INSTALL_STRIP=${INSTALL_STRIP}
+ $(MAKE) -C lib-src install
if test "${ns_self_contained}" = "no"; then \
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} "$(DESTDIR)${bindir}/$(EMACSFULL)" || exit 1 ; \
chmod 1755 "$(DESTDIR)${bindir}/$(EMACSFULL)" || true; \
### in nt/, and its Posix do-nothing shadow.
install-:
install-nt:
- cd $(NTDIR) && \
- $(MAKE) install $(MFLAGS) prefix="${prefix}" \
- exec_prefix="${exec_prefix}" bindir="${bindir}" \
- libexecdir="${libexecdir}" archlibdir="${archlibdir}" \
- datadir="${datadir}" \
- INSTALL_STRIP=${INSTALL_STRIP}
+ $(MAKE) -C $(NTDIR) install
## In the share directory, we are deleting:
## applications (with emacs.desktop, also found in etc/)
subdir="$(DESTDIR)${datadir}/emacs/site-lisp" ; \
${write_subdir} || true
[ -z "${GZIP_PROG}" ] || { \
- echo "Compressing *.el ..." && \
+ echo "Compressing *.el etc. ..." && \
cd "$(DESTDIR)${lispdir}" && \
for f in `find . -name "*.elc" -print | sed 's/.elc$$/.el/'`; do \
${GZIP_PROG} -9n "$$f"; \
done; \
+ ${GZIP_PROG} -9n "../etc/publicsuffix.txt"; \
}
-chmod -R a+r "$(DESTDIR)${datadir}/emacs/${version}" ${COPYDESTS}
[ -f "$(DESTDIR)${infodir}/dir" ] || \
[ ! -f ${srcdir}/info/dir ] || \
${INSTALL_DATA} ${srcdir}/info/dir "$(DESTDIR)${infodir}/dir"; \
- info_misc=`cd doc/misc && LANG=C $(QUIET_SUBMAKE) $(MAKE) -s echo-info | sed '/ing directory/d'`; \
+ info_misc=`$(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
cd ${srcdir}/info ; \
for elt in ${INFO_NONMISC} $${info_misc}; do \
test "$(HAVE_MAKEINFO)" = "no" && test ! -f $$elt && continue; \
thisdir=`/bin/pwd`; \
cd ${mansrcdir}; \
for page in *.1; do \
+ test "$$page" = ChangeLog.1 && continue; \
dest=`echo "$${page}" | sed -e 's/\.1$$//' -e '$(TRANSFORM)'`.1; \
(cd "$${thisdir}"; \
${INSTALL_DATA} ${mansrcdir}/$${page} "$(DESTDIR)${man1dir}/$${dest}"); \
${srcdir}/etc/emacs.desktop > $${tmp}; \
${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/${EMACS_NAME}.desktop"; \
rm -f $${tmp}
+ umask 022; ${MKDIR_P} "$(DESTDIR)${appdatadir}"
+ tmp=etc/emacs.tmpappdata; rm -f $${tmp}; \
+ sed -e "s/emacs\.desktop/${EMACS_NAME}.desktop/" \
+ ${srcdir}/etc/emacs.appdata.xml > $${tmp}; \
+ ${INSTALL_DATA} $${tmp} "$(DESTDIR)${appdatadir}/${EMACS_NAME}.appdata.xml"; \
+ rm -f $${tmp}
thisdir=`/bin/pwd`; \
cd ${iconsrcdir} || exit 1; umask 022 ; \
for dir in */*/apps */*/mimetypes; do \
### Build Emacs and install it, stripping binaries while installing them.
install-strip:
- $(MAKE) $(MFLAGS) INSTALL_STRIP=-s install
+ $(MAKE) INSTALL_STRIP=-s install
### Delete all the installed files that the `install' target would
### create (but not the noninstalled files such as `make all' would create).
###
### Don't delete the lisp and etc directories if they're in the source tree.
uninstall: uninstall-$(NTDIR) uninstall-doc
- cd lib-src && \
- $(MAKE) $(MFLAGS) uninstall \
- prefix="${prefix}" exec_prefix="${exec_prefix}" \
- bindir="${bindir}" libexecdir="${libexecdir}" \
- archlibdir="${archlibdir}"
-
+ $(MAKE) -C lib-src uninstall
-unset CDPATH; \
for dir in "$(DESTDIR)${lispdir}" "$(DESTDIR)${etcdir}" ; do \
if [ -d "$${dir}" ]; then \
done
-rm -rf "$(DESTDIR)${libexecdir}/emacs/${version}"
thisdir=`/bin/pwd`; \
- (info_misc=`cd doc/misc && LANG=C $(QUIET_SUBMAKE) $(MAKE) -s echo-info | sed '/ing directory/d'`; \
+ (info_misc=`$(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
if cd "$(DESTDIR)${infodir}"; then \
for elt in ${INFO_NONMISC} $${info_misc}; do \
(cd "$${thisdir}"; \
hicolor/scalable/mimetypes/`echo emacs-document | sed '$(TRANSFORM)'`.svg; \
fi)
-rm -f "$(DESTDIR)${desktopdir}/${EMACS_NAME}.desktop"
+ -rm -f "$(DESTDIR)${appdatadir}/${EMACS_NAME}.appdata.xml"
for file in snake-scores tetris-scores; do \
file="$(DESTDIR)${gamedir}/$${file}"; \
[ -s "$${file}" ] || rm -f "$$file"; \
### in nt/, and its Posix do-nothing shadow.
uninstall-:
uninstall-nt:
- cd $(NTDIR) && \
- $(MAKE) $(MFLAGS) uninstall \
- prefix="${prefix}" exec_prefix="${exec_prefix}" \
- bindir="${bindir}" libexecdir="${libexecdir}" \
- archlibdir="${archlibdir}"
-
-FRC:
+ $(MAKE) -C $(NTDIR) uninstall
# ==================== Cleaning up and miscellanea ====================
.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean extraclean
+## Eg:
+## src_clean:
+## make -C src clean
+define submake_template
+.PHONY: $(1)_$(2)
+$(1)_$(2):
+ $$(MAKE) -C $(1) $(2)
+endef
+
### `mostlyclean'
### Like `clean', but may refrain from deleting a few files that people
### normally don't want to recompile. For example, the `mostlyclean'
### target for GCC does not delete `libgcc.a', because recompiling it
### is rarely necessary and takes a lot of time.
-mostlyclean: FRC
- cd src && $(MAKE) $(MFLAGS) mostlyclean
- cd oldXMenu && $(MAKE) $(MFLAGS) mostlyclean
- cd lwlib && $(MAKE) $(MFLAGS) mostlyclean
- cd lib && $(MAKE) $(MFLAGS) mostlyclean
- cd lib-src && $(MAKE) $(MFLAGS) mostlyclean
- cd nt && $(MAKE) $(MFLAGS) mostlyclean
- -cd doc/emacs && $(MAKE) $(MFLAGS) mostlyclean
- -cd doc/misc && $(MAKE) $(MFLAGS) mostlyclean
- -cd doc/lispref && $(MAKE) $(MFLAGS) mostlyclean
- -cd doc/lispintro && $(MAKE) $(MFLAGS) mostlyclean
+mostlyclean_dirs = src oldXMenu lwlib lib lib-src nt doc/emacs doc/misc \
+ doc/lispref doc/lispintro
+
+$(foreach dir,$(mostlyclean_dirs),$(eval $(call submake_template,$(dir),mostlyclean)))
+
+mostlyclean: $(mostlyclean_dirs:=_mostlyclean)
+ for dir in test/automated; do \
+ [ ! -d $$dir ] || $(MAKE) -C $$dir mostlyclean; \
+ done
### `clean'
### Delete all files from the current directory that are normally
### with them.
###
### Delete `.dvi' files here if they are not part of the distribution.
-clean: FRC
- -rm -f etc/emacs.tmpdesktop
- cd src && $(MAKE) $(MFLAGS) clean
- cd oldXMenu && $(MAKE) $(MFLAGS) clean
- cd lwlib && $(MAKE) $(MFLAGS) clean
- cd lib && $(MAKE) $(MFLAGS) clean
- cd lib-src && $(MAKE) $(MFLAGS) clean
- cd nt && $(MAKE) $(MFLAGS) clean
- -cd doc/emacs && $(MAKE) $(MFLAGS) clean
- -cd doc/misc && $(MAKE) $(MFLAGS) clean
- -cd doc/lispref && $(MAKE) $(MFLAGS) clean
- -cd doc/lispintro && $(MAKE) $(MFLAGS) clean
- cd nextstep && $(MAKE) $(MFLAGS) clean
+clean_dirs = $(mostlyclean_dirs) nextstep
+
+$(foreach dir,$(clean_dirs),$(eval $(call submake_template,$(dir),clean)))
+
+clean: $(clean_dirs:=_clean)
+ for dir in test/automated; do \
+ [ ! -d $$dir ] || $(MAKE) -C $$dir clean; \
+ done
+ -rm -f *.tmp etc/*.tmp*
+ -rm -rf info-dir.*
### `bootclean'
### Delete all files that need to be remade for a clean bootstrap.
top_bootclean=\
- rm -f config.cache config.log
+ rm -f config.cache config.log ${srcdir}/doc/man/emacs.1
+
### `distclean'
### Delete all files from the current directory that are created by
### configuring or building the program. If you have unpacked the
top_distclean=\
${top_bootclean}; \
rm -f config.status config.log~ Makefile stamp-h1 ${SUBDIR_MAKEFILES}
-distclean: FRC
- cd src && $(MAKE) $(MFLAGS) distclean
- cd oldXMenu && $(MAKE) $(MFLAGS) distclean
- cd lwlib && $(MAKE) $(MFLAGS) distclean
- cd lib && $(MAKE) $(MFLAGS) distclean
- cd lib-src && $(MAKE) $(MFLAGS) distclean
- cd nt && $(MAKE) $(MFLAGS) distclean
- cd doc/emacs && $(MAKE) $(MFLAGS) distclean
- cd doc/misc && $(MAKE) $(MFLAGS) distclean
- cd doc/lispref && $(MAKE) $(MFLAGS) distclean
- cd doc/lispintro && $(MAKE) $(MFLAGS) distclean
- cd leim && $(MAKE) $(MFLAGS) distclean
- cd lisp && $(MAKE) $(MFLAGS) distclean
- cd nextstep && $(MAKE) $(MFLAGS) distclean
+
+distclean_dirs = $(clean_dirs) leim lisp
+
+$(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),distclean)))
+
+distclean: $(distclean_dirs:=_distclean)
for dir in test/automated admin/grammars admin/unidata; do \
- [ ! -d $$dir ] || (cd $$dir && $(MAKE) $(MFLAGS) distclean); \
+ [ ! -d $$dir ] || $(MAKE) -C $$dir distclean; \
done
${top_distclean}
### `bootstrap-clean'
### Delete everything that can be reconstructed by `make' and that
### needs to be deleted in order to force a bootstrap from a clean state.
-bootstrap-clean: FRC
- cd src && $(MAKE) $(MFLAGS) bootstrap-clean
- cd oldXMenu && $(MAKE) $(MFLAGS) maintainer-clean
- cd lwlib && $(MAKE) $(MFLAGS) maintainer-clean
- cd lib && $(MAKE) $(MFLAGS) maintainer-clean
- cd lib-src && $(MAKE) $(MFLAGS) maintainer-clean
- cd nt && $(MAKE) $(MFLAGS) maintainer-clean
- -cd doc/emacs && $(MAKE) $(MFLAGS) maintainer-clean
- -cd doc/misc && $(MAKE) $(MFLAGS) maintainer-clean
- -cd doc/lispref && $(MAKE) $(MFLAGS) maintainer-clean
- -cd doc/lispintro && $(MAKE) $(MFLAGS) maintainer-clean
- cd leim && $(MAKE) $(MFLAGS) bootstrap-clean
- cd lisp && $(MAKE) $(MFLAGS) bootstrap-clean
- cd nextstep && $(MAKE) $(MFLAGS) maintainer-clean
+$(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),bootstrap-clean)))
+
+bootstrap-clean: $(distclean_dirs:=_bootstrap-clean)
for dir in test/automated admin/grammars admin/unidata; do \
- [ ! -d $$dir ] || (cd $$dir && $(MAKE) $(MFLAGS) bootstrap-clean); \
+ [ ! -d $$dir ] || $(MAKE) -C $$dir bootstrap-clean; \
done
[ ! -f config.log ] || mv -f config.log config.log~
rm -rf ${srcdir}/info
+ rm -f ${srcdir}/etc/refcards/emacsver.tex
${top_bootclean}
### `maintainer-clean'
top_maintainer_clean=\
${top_distclean}; \
rm -fr autom4te.cache
-maintainer-clean: bootstrap-clean FRC
- cd src && $(MAKE) $(MFLAGS) maintainer-clean
- cd leim && $(MAKE) $(MFLAGS) maintainer-clean
- cd lisp && $(MAKE) $(MFLAGS) maintainer-clean
+
+maintainer_clean_dirs = src leim lisp
+
+$(foreach dir,$(maintainer_clean_dirs),$(eval $(call submake_template,$(dir),maintainer-clean)))
+
+maintainer-clean: bootstrap-clean $(maintainer_clean_dirs:=_maintainer-clean)
for dir in test/automated admin/grammars admin/unidata; do \
- [ ! -d $$dir ] || (cd $$dir && $(MAKE) $(MFLAGS) maintainer-clean); \
+ [ ! -d $$dir ] || $(MAKE) -C $$dir maintainer-clean; \
done
${top_maintainer_clean}
### says GCC supports it, and that's where the configuration part of
### the coding standards seem to come from. It's like distclean, but
### it deletes backup and autosave files too.
-extraclean:
- for i in ${SUBDIR}; do (cd $$i; $(MAKE) $(MFLAGS) extraclean); done
+### Note that we abuse this in some subdirectories (eg leim),
+### to delete some generated files that are slow to rebuild.
+$(foreach dir,$(SUBDIR),$(eval $(call submake_template,$(dir),extraclean)))
+
+## FIXME this is busted because most of these do not have extraclean rules.
+extraclean: $(SUBDIR:=_extraclean)
${top_maintainer_clean}
-rm -f config-tmp-*
-rm -f *~ \#*
# even when the build directory and source dir are different.
.PHONY: TAGS tags
TAGS tags: lib lib-src src
- cd src; $(MAKE) $(MFLAGS) tags
+ $(MAKE) -C src tags
check: all
@if test ! -d test/automated; then \
echo "You do not seem to have the test/ directory."; \
echo "Maybe you are using a release tarfile, rather than a repository checkout."; \
else \
- cd test/automated && $(MAKE) $(MFLAGS) check; \
+ $(MAKE) -C test/automated check; \
fi
dist:
DOCS = $(DVIS) $(HTMLS) $(INFOS) $(PDFS) $(PSS)
$(DOCS):
- t=$@; IFS=-; set $$t; IFS=; cd doc/$$1 && $(MAKE) $(MFLAGS) $$2
+ t=$@; IFS=-; set $$t; IFS=; $(MAKE) -C doc/$$1 $$2
.PHONY: $(DOCS) docs pdf ps
-.PHONY: info dvi dist check html info-real info-dir force-info check-info
+.PHONY: info dvi dist check html info-real info-dir check-info
## TODO add etc/refcards.
docs: $(DOCS)
info-dir: ${srcdir}/info/dir
-## Not strictly necessary, but speeds things up a bit by stopping
-## the info-dir rule from running when not needed.
## Hopefully doc/misc/*.texi is not too long for some systems?
-info_dir_deps = ${srcdir}/build-aux/dir_top \
- ${srcdir}/doc/emacs/emacs.texi \
- ${srcdir}/doc/lispintro/emacs-lisp-intro.texi \
- ${srcdir}/doc/lispref/elisp.texi ${srcdir}/doc/misc/*.texi
+srcdir_doc_info_dir_inputs = \
+ ${srcdir}/doc/emacs/emacs.texi \
+ ${srcdir}/doc/lispintro/emacs-lisp-intro.texi \
+ ${srcdir}/doc/lispref/elisp.texi \
+ $(sort $(wildcard ${srcdir}/doc/misc/*.texi))
+info_dir_inputs = \
+ ../build-aux/dir_top \
+ $(subst ${srcdir}/doc/,,${srcdir_doc_info_dir_inputs})
+info_dir_deps = \
+ ${srcdir}/build-aux/make-info-dir \
+ ${srcdir}/build-aux/dir_top \
+ ${srcdir_doc_info_dir_inputs}
## It would be much simpler if info/dir was only created in the
## installation location by the install-info rule, but we also
## but then we would need to depend on info-real, which would
## slow down parallelization.
${srcdir}/info/dir: ${info_dir_deps}
- ${MKDIR_P} ${srcdir}/info
- tempfile=info-dir.$$$$; \
+ $(AM_V_at)${MKDIR_P} ${srcdir}/info
+ $(AM_V_GEN)tempfile=info-dir.$$$$; \
rm -f $${tempfile}; \
- thisdir=`pwd`; \
- (cd ${srcdir} && ./build-aux/make-info-dir $${thisdir}/$${tempfile}); \
+ (cd ${srcdir}/doc && \
+ AWK='${AWK}' ../build-aux/make-info-dir ${info_dir_inputs} \
+ ) >$$tempfile && \
${srcdir}/build-aux/move-if-change $${tempfile} ${srcdir}/info/dir
INSTALL_DVI = install-emacs-dvi install-lispref-dvi \
## Install non .info forms of the documentation.
## TODO add etc/refcards.
$(INSTALL_DOC):
- t=$@; IFS=-; set $$t; IFS=; cd doc/$$2 && $(MAKE) $(MFLAGS) $$1-$$3
+ t=$@; IFS=-; set $$t; IFS=; $(MAKE) -C doc/$$2 $$1-$$3
.PHONY: $(INSTALL_DOC) install-doc
.PHONY: install-dvi install-html install-pdf install-ps
UNINSTALL_DOC = $(UNINSTALL_DVI) $(UNINSTALL_HTML) $(UNINSTALL_PDF) $(UNINSTALL_PS)
$(UNINSTALL_DOC):
- t=$@; IFS=-; set $$t; IFS=; cd doc/$$2 && $(MAKE) $(MFLAGS) $$1-$$3
+ t=$@; IFS=-; set $$t; IFS=; $(MAKE) -C doc/$$2 $$1-$$3
.PHONY: $(UNINSTALL_DOC) uninstall-doc
.PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps
uninstall-ps: $(UNINSTALL_PS)
-force-info:
# Note that man/Makefile knows how to put the info files in $(srcdir),
# so we can do ok running make in the build dir.
# This used to have a clause that exited with an error if MAKEINFO = no.
# would require changing every rule in doc/ that builds an info file,
# and it's not worth it. This case is only relevant if you download a
# release, then change the .texi files.
-info: force-info
- @if test "$(HAVE_MAKEINFO)" = "no"; then \
- echo "Configured --without-makeinfo, not building manuals" ; \
- else \
- $(MAKE) $(MFLAGS) info-real info-dir; \
- fi
+info:
+ ifneq ($(HAVE_MAKEINFO),no)
+ $(MAKE) info-real info-dir
+ endif
## build-aux/make-info-dir expects only certain dircategories.
check-info: info
# * Run autogen.sh.
# * Rebuild Makefile, to update the build procedure itself.
# * Do the actual build.
-bootstrap: bootstrap-clean FRC
+bootstrap: bootstrap-clean
cd $(srcdir) && ./autogen.sh
- $(MAKE) $(MFLAGS) MAKEFILE_NAME=force-Makefile force-Makefile
- $(MAKE) $(MFLAGS) info all
+ $(MAKE) MAKEFILE_NAME=force-Makefile force-Makefile
+ $(MAKE) all
+
+.PHONY: ChangeLog change-history change-history-commit
+.PHONY: master-branch-is-current no-ChangeLog unchanged-history-files
+
+# The newest revision that should not appear in the generated ChangeLog.
+gen_origin = 455f13b8c91a51cd08e19fda737a4358a9a927d6
+
+# Convert git commit log to ChangeLog file. make-dist uses this.
+ChangeLog:
+ $(AM_V_GEN)distprefix=$(distprefix) srcprefix=$(srcdir)/ \
+ $(srcdir)/build-aux/gitlog-to-emacslog $(gen_origin)
+
+# The ChangeLog history files are called ChangeLog.1, ChangeLog.2, ...,
+# ChangeLog.$(CHANGELOG_HISTORY_INDEX_MAX). $(CHANGELOG_N) stands for
+# the newest (highest-numbered) ChangeLog history file.
+CHANGELOG_HISTORY_INDEX_MAX = 2
+CHANGELOG_N = ChangeLog.$(CHANGELOG_HISTORY_INDEX_MAX)
+
+# Check that we are in a good state for changing history.
+no-ChangeLog:
+ test ! -f ChangeLog
+master-branch-is-current:
+ git branch | grep -q '^\* master$$'
+unchanged-history-files:
+ x=$$(git diff-files --name-only $(CHANGELOG_N) Makefile.in) && \
+ test -z "$$x"
+
+# Copy newer commit messages to the start of the ChangeLog history file,
+# and consider them to be older.
+change-history: no-ChangeLog master-branch-is-current unchanged-history-files \
+ ChangeLog
+ (sed '/^;; [L]ocal Variables:/,$$d' <ChangeLog && cat $(CHANGELOG_N)) \
+ >$(CHANGELOG_N).tmp
+ new_origin=$$(git log --pretty=format:%H HEAD^!) && \
+ sed 's/^\(gen_origin *= *\).*/\1'"$$new_origin/" \
+ <Makefile.in >Makefile.in.tmp
+ mv $(CHANGELOG_N).tmp $(CHANGELOG_N)
+ mv Makefile.in.tmp Makefile.in
+ $(MAKE) $@-commit
+
+# If 'make change-history' fails because the newest ChangeLog history
+# file contains invalid text, fix the file by hand and then run
+# 'make change-history-commit'.
+change-history-commit:
+ git commit -m'; make $@' $(CHANGELOG_N) Makefile.in
.PHONY: check-declare
echo "You must build Emacs to use this command"; \
exit 1; \
fi
- cd lisp && $(MAKE) $(MFLAGS) $@
+ $(MAKE) -C lisp $@