### @configure_input@
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
+# Copyright (C) 1992-2016 Free Software Foundation, Inc.
# This file is part of GNU Emacs.
# by building, but normally aren't because the distribution comes
# with them.
#
-# Delete `.dvi' files here if they are not part of the distribution.
+# Delete '.dvi' files here if they are not part of the distribution.
#
# make distclean
# Delete all files from the current directory that are created by
# configuring or building the program. If you have unpacked the
# source and built the program without creating any other files,
-# `make distclean' should leave only the files that were in the
+# 'make distclean' should leave only the files that were in the
# distribution.
#
# make maintainer-clean
#
# make docs
# Make Emacs documentation files from their sources; requires makeinfo.
+#
+# make check or make check-expensive
+# Run Emacs test suite. check-expensive runs also tests which
+# take more time to perform.
SHELL = @SHELL@
# If Make doesn't predefine MAKE, set it here.
@SET_MAKE@
-# ==================== Things `configure' Might Edit ====================
+# ==================== Things 'configure' Might Edit ====================
cache_file = @cache_file@
CONFIGURE_FLAGS = --cache-file=$(cache_file)
### to install files in.
### This should be the number of the Emacs version we're building,
-### like `18.59' or `19.0'.
+### like '24.5' or '25.0.50'.
version=@version@
### This should be the name of the configuration we're building Emacs
-### for, like `mips-dec-ultrix' or `sparc-sun-sunos'.
+### for, like 'x86_64-unknown-linux-gnu' or 'powerpc-ibm-aix7.1.2.0'.
configuration=@configuration@
### 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.
# not need to change them. This defaults to /usr/local.
prefix=@prefix@
-# Like `prefix', but used for architecture-specific files.
+# Like 'prefix', but used for architecture-specific files.
exec_prefix=@exec_prefix@
# Where to install Emacs and other binaries that people will want to
# Where to find the source code. The source code for Emacs's C kernel is
# expected to be in ${srcdir}/src, and the source code for Emacs's
# utility programs is expected to be in ${srcdir}/lib-src. This is
-# set by the configure script's `--srcdir' option.
+# set by the configure script's '--srcdir' option.
# We use $(srcdir) explicitly in dependencies so as not to depend on VPATH.
srcdir=@srcdir@
# 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 ==============================
# The subdir makefiles created by config.status.
SUBDIR_MAKEFILES_IN = @SUBDIR_MAKEFILES_IN@
-SUBDIR_MAKEFILES = `echo $(SUBDIR_MAKEFILES_IN:.in=) | sed 's|$(srcdir)/||g'`
+SUBDIR_MAKEFILES = $(patsubst ${srcdir}/%,%,${SUBDIR_MAKEFILES_IN:.in=})
# Subdirectories to install, and where they'll go. lib-src's and nt's
# makefiles know how to install them, so we don't do that here.
all: ${SUBDIR} info
-.PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32
+.PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 etc-emacsver
-removenullpaths=sed -e 's/^:*//' -e 's/:*$$//g' -e 's/::*/:/g'
+# 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
-# Generate epaths.h from epaths.in. This target is invoked by `configure'.
+# Generate epaths.h from epaths.in. This target is invoked by 'configure'.
# 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.
@for dir in '$(abs_srcdir)' '$(lispdir)' '$(archlibdir)'; do \
case $$dir in \
*:*) \
- echo >&2 "Build or installation directory '$$dir'"; \
+ printf >&2 "Build or installation directory '%s'\\n" "$$dir"; \
echo >&2 "cannot contain ':'."; \
exit 1;; \
esac; \
done
- @(standardlisppath=`echo "${standardlisppath}" | ${removenullpaths}` ; \
- locallisppath=`echo "${locallisppath}" | ${removenullpaths}` ; \
- buildlisppath=`echo "${buildlisppath}" | ${removenullpaths}` ; \
- x_default_search_path=`echo ${x_default_search_path}`; \
- gamedir=`echo ${gamedir}`; \
+ @(gamedir='${gamedir}'; \
sed < ${srcdir}/src/epaths.in > epaths.h.$$$$ \
- -e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "'"$${standardlisppath}"'";' \
- -e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${locallisppath}"'";' \
- -e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "'"$${buildlisppath}"'";' \
+ -e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "${standardlisppath}";' \
+ -e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "${locallisppath}";' \
+ -e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "${buildlisppath}";' \
+ -e '/^#define PATH_[^ ]*SEARCH /s/\([":]\):*/\1/g' \
+ -e '/^#define PATH_[^ ]*SEARCH /s/:"/"/' \
-e 's;\(#.*PATH_EXEC\).*$$;\1 "${archlibdir}";' \
-e 's;\(#.*PATH_INFO\).*$$;\1 "${infodir}";' \
-e 's;\(#.*PATH_DATA\).*$$;\1 "${etcdir}";' \
-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.
#
-# Use the value of ${locallisppath} supplied by `configure',
+# Use the value of ${locallisppath} supplied by 'configure',
# to support the --enable-locallisppath argument.
#
# In this case, the paths written to 'src/epaths.h' must be in native
# program that doesn't support MSYS-style paths (e.g. '/c/foo/bar' or
# '/foo/bar').
epaths-force-w32:
- @(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}` ; \
+ @(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") && \
src: lib-src
-# We need to build `emacs' in `src' to compile the *.elc files in `lisp'.
+# We need to build 'emacs' in 'src' to compile the *.elc files in 'lisp'.
lisp: src
-# These targets should be "${SUBDIR} without `src'".
+# These targets should be "${SUBDIR} without 'src'".
lib lib-src lisp nt: Makefile
$(MAKE) -C $@ all
-# Note the use of single quotes in the value of vcswitness.
-# This passes an unexpanded $srcdir to src's Makefile, which then
+# 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.
+#
+# 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/).
+dirstate = .git/logs/HEAD
+VCSWITNESS = $(if $(wildcard $(srcdir)/$(dirstate)),$$(srcdir)/../$(dirstate))
src: Makefile
- dirstate='.bzr/checkout/dirstate'; \
- vcswitness='$$(srcdir)/../'$$dirstate; \
- [ -r "$(srcdir)/$$dirstate" ] || vcswitness=''; \
- $(MAKE) -C $@ all VCSWITNESS="$$vcswitness"
+ $(MAKE) -C $@ VCSWITNESS='$(VCSWITNESS)' all
blessmail: Makefile src
$(MAKE) -C lib-src maybe-blessmail
# etc. to be built without running into similar recursion problems.
MAKEFILE_NAME = Makefile
$(MAKEFILE_NAME): config.status $(srcdir)/src/config.in \
- $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN) $(srcdir)/src/lisp.mk
+ $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN)
MAKE='$(MAKE)' ./config.status
# 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 \
@ # 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
+ rm -f $@
+ echo timestamp > $@
# ==================== Installation ====================
install-arch-dep: src install-arch-indep install-etcdoc install-$(NTDIR)
umask 022; ${MKDIR_P} "$(DESTDIR)${bindir}"
$(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; \
- if test "x${NO_BIN_LINK}" = x; then \
- rm -f "$(DESTDIR)${bindir}/$(EMACS)" ; \
- cd "$(DESTDIR)${bindir}" && $(LN_S_FILEONLY) $(EMACSFULL) $(EMACS); \
- fi; \
- else \
- subdir=${ns_appresdir}/site-lisp; \
- ${write_subdir} || exit 1; \
- rm -rf ${ns_appresdir}/share; \
- fi
+ifeq (${ns_self_contained},no)
+ ${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} "$(DESTDIR)${bindir}/$(EMACSFULL)"
+ -chmod 755 "$(DESTDIR)${bindir}/$(EMACSFULL)"
+ifndef NO_BIN_LINK
+ rm -f "$(DESTDIR)${bindir}/$(EMACS)"
+ cd "$(DESTDIR)${bindir}" && $(LN_S_FILEONLY) $(EMACSFULL) $(EMACS)
+endif
+else
+ subdir=${ns_appresdir}/site-lisp && ${write_subdir}
+ rm -rf ${ns_appresdir}/share
+endif
### Windows-specific install target for installing programs produced
### in nt/, and its Posix do-nothing shadow.
fi; \
rm -rf "$${dest}" ; \
umask 022; ${MKDIR_P} "$${dest}" ; \
- echo "Copying $${dir} to $${dest}..." ; \
+ printf 'Copying %s to %s...\n' "$$dir" "$$dest" ; \
(cd $${dir}; tar -chf - . ) \
| (cd "$${dest}"; umask 022; \
tar -xvf - && cat > /dev/null) || exit 1; \
rm -f $${subdir}/.gitignore ; \
rm -f $${subdir}/.arch-inventory ; \
rm -f $${subdir}/.DS_Store ; \
- rm -f $${subdir}/\#* ; \
- rm -f $${subdir}/.\#* ; \
+ rm -f $${subdir}/#* ; \
+ rm -f $${subdir}/.#* ; \
rm -f $${subdir}/*~ ; \
rm -f $${subdir}/*.orig ; \
rm -f $${subdir}/ChangeLog* ; \
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}
if [ "`cd ./etc; /bin/pwd`" != "$$exp_etcdocdir" ]; \
then \
docfile="DOC"; \
- echo "Copying etc/$${docfile} to $(DESTDIR)${etcdocdir} ..." ; \
+ printf 'Copying %s to %s ...\n' "etc/$$docfile" \
+ "$(DESTDIR)${etcdocdir}"; \
${INSTALL_DATA} etc/$${docfile} "$(DESTDIR)${etcdocdir}/$${docfile}"; \
$(set_installuser); \
chown $${installuser} "$(DESTDIR)${etcdocdir}/$${docfile}" || true ; \
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}"); \
for icon in $${dir}/${EMACS_ICON}[.-]*; do \
[ -r $${icon} ] || continue ; \
ext=`echo "$${icon}" | sed -e 's|.*\.||'`; \
- dest=`echo "$${icon}" | sed -e 's|.*/||' -e "s|\.$${ext}$$||" -e 's/$(EMACS_ICON)/emacs/' -e '$(TRANSFORM)'`.$${ext} ; \
+ dest=`echo "$${icon}" | sed -e 's|.*/||' -e "s|\\.$${ext}\$$||" -e 's/$(EMACS_ICON)/emacs/' -e '$(TRANSFORM)'`.$${ext} ; \
( cd "$${thisdir}"; \
${INSTALL_DATA} ${iconsrcdir}/$${icon} "$(DESTDIR)${icondir}/$${dir}/$${dest}" ) \
|| exit 1; \
install-strip:
$(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).
+### 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
-unset CDPATH; \
for dir in "$(DESTDIR)${lispdir}" "$(DESTDIR)${etcdir}" ; do \
if [ -d "$${dir}" ]; then \
- case `cd "$${dir}" && /bin/pwd` in \
- "`cd ${srcdir} && /bin/pwd`"* ) ;; \
+ case `cd "$${dir}" ; /bin/pwd` in \
+ "`cd ${srcdir} ; /bin/pwd`"* ) ;; \
* ) rm -rf "$${dir}" ;; \
esac ; \
case "$${dir}" in \
$$(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
+### '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_dirs = src oldXMenu lwlib lib lib-src nt doc/emacs doc/misc \
doc/lispref doc/lispintro
[ ! -d $$dir ] || $(MAKE) -C $$dir mostlyclean; \
done
-### `clean'
+### 'clean'
### Delete all files from the current directory that are normally
### created by building the program. Don't delete the files that
### record the configuration. Also preserve files that could be made
### by building, but normally aren't because the distribution comes
### with them.
###
-### Delete `.dvi' files here if they are not part of the distribution.
+### Delete '.dvi' files here if they are not part of the distribution.
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 \
+ for dir in test/automated admin/charsets; do \
[ ! -d $$dir ] || $(MAKE) -C $$dir clean; \
done
- -rm -f etc/emacs.tmpdesktop etc/emacs.tmpappdata
+ -rm -f *.tmp etc/*.tmp*
-rm -rf info-dir.*
-### `bootclean'
+### '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'
+### 'distclean'
### Delete all files from the current directory that are created by
### configuring or building the program. If you have unpacked the
### source and built the program without creating any other files,
-### `make distclean' should leave only the files that were in the
+### 'make distclean' should leave only the files that were in the
### distribution.
top_distclean=\
${top_bootclean}; \
$(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),distclean)))
+maybeclean_dirs = test/automated admin/grammars admin/unidata admin/charsets
+
distclean: $(distclean_dirs:=_distclean)
- for dir in test/automated admin/grammars admin/unidata; do \
+ for dir in ${maybeclean_dirs}; do \
[ ! -d $$dir ] || $(MAKE) -C $$dir distclean; \
done
${top_distclean}
-### `bootstrap-clean'
-### Delete everything that can be reconstructed by `make' and that
+### '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.
$(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 \
+ for dir in ${maybeclean_dirs}; do \
[ ! -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'
+### 'maintainer-clean'
### Delete everything from the current directory that can be
### reconstructed with this Makefile. This typically includes
### everything deleted by distclean, plus more: C source files
### produced by Bison, tags tables, info files, and so on.
###
-### One exception, however: `make maintainer-clean' should not delete
-### `configure' even if `configure' can be remade using a rule in the
-### Makefile. More generally, `make maintainer-clean' should not delete
-### anything that needs to exist in order to run `configure' and then
+### One exception, however: 'make maintainer-clean' should not delete
+### 'configure' even if 'configure' can be remade using a rule in the
+### Makefile. More generally, 'make maintainer-clean' should not delete
+### anything that needs to exist in order to run 'configure' and then
### begin to build the program.
top_maintainer_clean=\
${top_distclean}; \
$(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 \
+ for dir in ${maybeclean_dirs}; do \
[ ! -d $$dir ] || $(MAKE) -C $$dir maintainer-clean; \
done
${top_maintainer_clean}
### it deletes backup and autosave files too.
### 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)))
+extraclean_dirs = ${NTDIR} lib-src src leim \
+ admin/charsets admin/grammars admin/unidata
-## FIXME this is busted because most of these do not have extraclean rules.
-extraclean: $(SUBDIR:=_extraclean)
+$(foreach dir,$(extraclean_dirs),$(eval $(call submake_template,$(dir),extraclean)))
+
+extraclean: $(extraclean_dirs:=_extraclean)
${top_maintainer_clean}
-rm -f config-tmp-*
-rm -f *~ \#*
TAGS tags: lib lib-src src
$(MAKE) -C src tags
-check: all
+check check-expensive: 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 \
- $(MAKE) -C test/automated check; \
+ $(MAKE) -C test/automated $@; \
fi
dist:
DOCS = $(DVIS) $(HTMLS) $(INFOS) $(PDFS) $(PSS)
$(DOCS):
- t=$@; IFS=-; set $$t; IFS=; $(MAKE) -C doc/$$1 $$2
+ $(MAKE) -C doc/$(subst -, ,$@)
.PHONY: $(DOCS) docs pdf ps
-.PHONY: info dvi dist check html info-real info-dir check-info
+.PHONY: info dvi dist check check-expensive html info-real info-dir check-info
## TODO add etc/refcards.
docs: $(DOCS)
## 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}; \
(cd ${srcdir}/doc && \
AWK='${AWK}' ../build-aux/make-info-dir ${info_dir_inputs} \
## Install non .info forms of the documentation.
## TODO add etc/refcards.
$(INSTALL_DOC):
- t=$@; IFS=-; set $$t; IFS=; $(MAKE) -C doc/$$2 $$1-$$3
+ $(MAKE) -C doc/$(subst -, install-,$(subst install-,,$@))
.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=; $(MAKE) -C doc/$$2 $$1-$$3
+ $(MAKE) -C doc/$(subst -, uninstall-,$(subst uninstall-,,$@))
.PHONY: $(UNINSTALL_DOC) uninstall-doc
.PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps
# and it's not worth it. This case is only relevant if you download a
# release, then change the .texi files.
info:
- @if test "$(HAVE_MAKEINFO)" = "no"; then \
- echo "Configured --without-makeinfo, not building manuals" ; \
- else \
- $(MAKE) info-real info-dir; \
- fi
+ ifneq ($(HAVE_MAKEINFO),no)
+ $(MAKE) info-real info-dir
+ endif
## build-aux/make-info-dir expects only certain dircategories.
check-info: info
$(MAKE) MAKEFILE_NAME=force-Makefile force-Makefile
$(MAKE) all
+.PHONY: ChangeLog change-history change-history-commit change-history-nocommit
+.PHONY: emacs-25-branch-is-current unchanged-history-files
+
+CHANGELOG = ChangeLog
+emacslog = build-aux/gitlog-to-emacslog
+# 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)
+
+# Convert git commit log to ChangeLog file. make-dist uses this.
+# I guess this is PHONY so it always updates?
+ChangeLog:
+ $(AM_V_GEN)cd $(srcdir) && \
+ ./$(emacslog) -o $(CHANGELOG) -n $(CHANGELOG_HISTORY_INDEX_MAX)
+
+# Check that we are in a good state for changing history.
+emacs-25-branch-is-current:
+ git branch | grep -q '^\* emacs-25$$'
+unchanged-history-files:
+ x=$$(git diff-files --name-only $(CHANGELOG_N) $(emacslog)) && \
+ test -z "$$x"
+
+# Regular expression that matches the newest commit covered by a ChangeLog.
+new_commit_regexp = ^commit [0123456789abcdef]* (inclusive)
+
+# Copy newer commit messages to the start of the ChangeLog history file,
+# and consider them to be older.
+change-history-nocommit: emacs-25-branch-is-current unchanged-history-files
+ -rm -f ChangeLog.tmp
+ $(MAKE) ChangeLog CHANGELOG=ChangeLog.tmp
+ sed '/^This file records repository revisions/,$$d' \
+ ChangeLog.tmp >$(CHANGELOG_N).tmp
+ new_commit_line=`grep '$(new_commit_regexp)' ChangeLog.tmp` && \
+ sed 's/$(new_commit_regexp).*/'"$$new_commit_line/" \
+ $(CHANGELOG_N) >>$(CHANGELOG_N).tmp
+ rm ChangeLog.tmp
+ mv $(CHANGELOG_N).tmp $(CHANGELOG_N)
+
+change-history: change-history-nocommit
+ $(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) $(emacslog)
+
.PHONY: check-declare
check-declare: