X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/ed30c57cc9cdcf8ddc169f4b042146db9b3b7179..0377fe2b819bb93ac7dc314c8dbd99304d8b98d0:/Makefile.in diff --git a/Makefile.in b/Makefile.in index a6080e5ce7..b212c914e5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,6 +1,6 @@ ### @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. @@ -30,13 +30,13 @@ # 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 @@ -57,6 +57,10 @@ # # 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@ @@ -67,11 +71,7 @@ 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 ==================== +# ==================== Things 'configure' Might Edit ==================== cache_file = @cache_file@ CONFIGURE_FLAGS = --cache-file=$(cache_file) @@ -80,6 +80,7 @@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ ACLOCAL = @ACLOCAL@ +AWK = @AWK@ EXEEXT=@EXEEXT@ @@ -87,16 +88,29 @@ EXEEXT=@EXEEXT@ ### 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. @@ -112,7 +126,7 @@ ns_self_contained=@ns_self_contained@ # 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 @@ -161,7 +175,7 @@ bitmapdir=@bitmapdir@ # 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@ @@ -179,6 +193,9 @@ x_default_search_path=@x_default_search_path@ # 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 @@ -259,7 +276,7 @@ MKDIR_P = @MKDIR_P@ # 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 ============================== @@ -277,7 +294,7 @@ SUBDIR = $(NTDIR) lib lib-src src lisp # 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. @@ -288,11 +305,20 @@ COPYDESTS = "$(DESTDIR)${etcdir}" "$(DESTDIR)${lispdir}" 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. @@ -300,20 +326,18 @@ epaths-force: @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}";' \ @@ -323,18 +347,10 @@ epaths-force: -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 @@ -342,12 +358,12 @@ msys_sed_sh_escape=sed -e 's/[];$$*.^[]/\\\\&/g' # 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") && \ @@ -361,22 +377,25 @@ lib-src src: $(NTDIR) lib 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 @@ -394,13 +413,13 @@ blessmail: Makefile src # 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 \ @@ -413,7 +432,7 @@ $(srcdir)/configure: $(AUTOCONF_INPUTS) cd ${srcdir} && ${AUTOCONF} ACLOCAL_PATH = @ACLOCAL_PATH@ -ACLOCAL_INPUTS = $(srcdir)/configure.ac $(wildcard $(srcdir)/m4/*.m4) +ACLOCAL_INPUTS = $(srcdir)/configure.ac $(srcdir)/m4/*.m4 $(srcdir)/aclocal.m4: $(ACLOCAL_INPUTS) cd $(srcdir) && ACLOCAL_PATH='$(ACLOCAL_PATH)' $(ACLOCAL) -I m4 @@ -433,11 +452,11 @@ $(srcdir)/src/config.in: $(srcdir)/src/stamp-h.in @ # 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 ==================== @@ -473,18 +492,17 @@ write_subdir=if [ -f "$${subdir}/subdirs.el" ]; \ 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. @@ -559,7 +577,7 @@ install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} 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; \ @@ -575,8 +593,8 @@ install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} 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* ; \ @@ -592,11 +610,12 @@ install-arch-indep: lisp install-info install-man ${INSTALL_ARCH_INDEP_EXTRA} 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} @@ -613,7 +632,8 @@ install-etcdoc: src install-arch-indep 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 ; \ @@ -637,7 +657,7 @@ install-info: info [ -f "$(DESTDIR)${infodir}/dir" ] || \ [ ! -f ${srcdir}/info/dir ] || \ ${INSTALL_DATA} ${srcdir}/info/dir "$(DESTDIR)${infodir}/dir"; \ - info_misc=`$(QUIET_SUBMAKE) $(MAKE) -s -C doc/misc echo-info`; \ + 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; \ @@ -664,6 +684,7 @@ install-man: 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}"); \ @@ -687,6 +708,12 @@ install-etc: ${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 \ @@ -695,7 +722,7 @@ install-etc: 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; \ @@ -706,8 +733,8 @@ install-etc: 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 @@ -728,7 +755,7 @@ uninstall: uninstall-$(NTDIR) uninstall-doc done -rm -rf "$(DESTDIR)${libexecdir}/emacs/${version}" thisdir=`/bin/pwd`; \ - (info_misc=`$(QUIET_SUBMAKE) $(MAKE) -s -C doc/misc echo-info`; \ + (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}"; \ @@ -751,6 +778,7 @@ uninstall: uninstall-$(NTDIR) uninstall-doc 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"; \ @@ -775,10 +803,10 @@ $(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 +### '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 @@ -790,34 +818,35 @@ mostlyclean: $(mostlyclean_dirs:=_mostlyclean) [ ! -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 + -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}; \ @@ -827,35 +856,38 @@ distclean_dirs = $(clean_dirs) leim lisp $(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}; \ @@ -866,7 +898,7 @@ 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 \ + for dir in ${maybeclean_dirs}; do \ [ ! -d $$dir ] || $(MAKE) -C $$dir maintainer-clean; \ done ${top_maintainer_clean} @@ -877,10 +909,12 @@ maintainer-clean: bootstrap-clean $(maintainer_clean_dirs:=_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 *~ \#* @@ -891,12 +925,12 @@ extraclean: $(SUBDIR:=_extraclean) 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: @@ -910,10 +944,10 @@ PSS = lispref-ps lispintro-ps emacs-ps misc-ps 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) @@ -925,13 +959,19 @@ ps: $(PSS) 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 @@ -940,10 +980,12 @@ info_dir_deps = ${srcdir}/build-aux/dir_top \ ## but then we would need to depend on info-real, which would ## slow down parallelization. ${srcdir}/info/dir: ${info_dir_deps} - 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 \ @@ -959,7 +1001,7 @@ INSTALL_DOC = $(INSTALL_DVI) $(INSTALL_HTML) $(INSTALL_PDF) $(INSTALL_PS) ## 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 @@ -982,7 +1024,7 @@ UNINSTALL_PS = uninstall-emacs-ps uninstall-lispref-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 @@ -1006,11 +1048,9 @@ uninstall-ps: $(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 @@ -1052,6 +1092,55 @@ bootstrap: bootstrap-clean $(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: