X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/57ebf0bedb54f24bd1deb59250abe2d3fa34456f..28f0b0721d9fb54f713ba518d4fa94dfa565ee1b:/Makefile.in diff --git a/Makefile.in b/Makefile.in index 92070a4fac..4c869cebf8 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3,15 +3,15 @@ # DIST: that first. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -# 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 # Free Software Foundation, Inc. # This file is part of GNU Emacs. -# GNU Emacs is free software; you can redistribute it and/or modify +# 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, or (at your option) -# any later version. +# 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 @@ -19,9 +19,9 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with GNU Emacs; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. +# along with GNU Emacs. If not, see . + +### Commentary: # make all to compile and build Emacs. # make install to install it. @@ -54,13 +54,8 @@ # Still more severe - delete backup and autosave files, too. # # make bootstrap -# Recompiles all the Emacs Lisp files using the latest source, -# then rebuilds Emacs. -# -# make bootfast -# Recompiles changed Emacs Lisp files using the latest C source, -# then rebuilds Emacs. This is faster than `make bootstrap' -# but once in a while an old .elc file can cause trouble. +# Removes all the compiled files to force a new bootstrap from a +# clean slate, and then build in the normal way. SHELL = /bin/sh @@ -84,6 +79,7 @@ CPPFLAGS=@CPPFLAGS@ C_SWITCH_X_SITE=@C_SWITCH_X_SITE@ LD_SWITCH_X_SITE=@LD_SWITCH_X_SITE@ EXEEXT=@EXEEXT@ +MAKEINFO=@MAKEINFO@ ### These help us choose version- and architecture-specific directories ### to install files in. @@ -129,21 +125,26 @@ sharedstatedir=@sharedstatedir@ # data. ${archlibdir} is a subdirectory of this. libexecdir=@libexecdir@ -# Where to install Emacs's man pages, and what extension they should have. +# Where to install Emacs's man pages. +# This used to allow choice of the numeric extension, but this made +# little sense since the files were always installed in man1/ +# (and they contain cross-references that expect them to be there). mandir=@mandir@ -manext=.1 man1dir=$(mandir)/man1 +MAN_PAGES=b2m.1 ctags.1 ebrowse.1 emacs.1 emacsclient.1 etags.1 \ + grep-changelog.1 rcs-checkin.1 # Where to install and expect the info files describing Emacs. In the # past, this defaulted to a subdirectory of ${prefix}/lib/emacs, but # since there are now many packages documented with the texinfo # system, it is inappropriate to imply that it is part of Emacs. infodir=@infodir@ -INFO_FILES=ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq \ - elisp eintr emacs emacs-mime eshell eudc flymake \ - forms gnus idlwave info message mh-e newsticker org pcl-cvs \ - pgg reftex sc ses sieve speedbar tramp vip viper widget \ - woman smtpmail url rcirc erc +INFO_FILES=ada-mode auth autotype calc ccmode cl dbus dired-x ebrowse \ + ede ediff edt eieio efaq eintr elisp emacs emacs-mime epa erc \ + eshell eudc flymake forms gnus idlwave info mairix-el \ + message mh-e newsticker nxml-mode org pcl-cvs pgg rcirc \ + reftex remember sasl sc semantic ses sieve smtpmail speedbar \ + tramp url vip viper widget woman # Directory for local state files for all programs. localstatedir=@localstatedir@ @@ -159,14 +160,28 @@ bitmapdir=@bitmapdir@ # We use $(srcdir) explicitly in dependencies so as not to depend on VPATH. srcdir=@srcdir@ +# Where the manpage source files are kept. +mansrcdir=$(srcdir)/doc/man + # Tell make where to find source files; this is needed for the makefiles. VPATH=@srcdir@ # Where to find the application default. x_default_search_path=@x_default_search_path@ -# Location to install Emacs.app on Mac OS X -carbon_appdir=@carbon_appdir@ +# Location to install Emacs.app under NeXT/Open/GNUstep / Cocoa +ns_appdir=@ns_appdir@ +ns_appbindir=@ns_appbindir@ +ns_appresdir=@ns_appresdir@ + +# Where the etc/emacs.desktop file is to be installed. +desktopdir=$(datarootdir)/applications + +# Where the etc/images/icons/hicolor directory is to be installed. +icondir=$(datarootdir)/icons + +# The source directory for the icon files. +iconsrcdir=$(srcdir)/etc/images/icons # ==================== Emacs-specific directories ==================== @@ -248,10 +263,14 @@ EMACSFULL = `echo emacs-${version}${EXEEXT} | sed '$(TRANSFORM)'` # Subdirectories to make recursively. `lisp' is not included # because the compiled lisp files are part of the distribution. # leim is not included because it needs special handling. -SUBDIR = lib-src src +# +# Actually, we now include `lisp' as well, since the compiled files +# are not included any more in case of bootstrap or in case Emacs was +# checked out from a VCS. +SUBDIR = lib-src src lisp -# The makefiles of the directories in $SUBDIR. -SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile lispref/Makefile lispintro/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile leim/Makefile +# The subdir makefiles created by config.status. +SUBDIR_MAKEFILES = lib-src/Makefile doc/emacs/Makefile doc/misc/Makefile doc/lispref/Makefile doc/lispintro/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile leim/Makefile lisp/Makefile # Subdirectories to install, and where they'll go. # lib-src's makefile knows how to install it, so we don't do that here. @@ -289,30 +308,66 @@ epaths-force: FRC # "export PARALLEL=0" is for SGI's Make, to prevent it from # running more than 1 process in the leim directory, especially for # the $TIT files there. -leim: src ${SUBDIR_MAKEFILES} FRC +leim: src Makefile FRC (export PARALLEL; PARALLEL=0; cd $@; $(MAKE) all $(MFLAGS) \ CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \ LDFLAGS='${LDFLAGS}' MAKE='${MAKE}') src: lib-src FRC -lib-src: FRC src/config.stamp - .RECURSIVE: ${SUBDIR} leim -${SUBDIR}: maybe_bootstrap ${SUBDIR_MAKEFILES} FRC - cd $@; $(MAKE) all $(MFLAGS) \ +# We need to build `emacs' in `src' to compile the *.elc files in `lisp'. +lisp: src + +# These targets should be "${SUBDIR} without `src'". +lib-src lisp: Makefile FRC + cd $@; $(MAKE) all $(MFLAGS) \ CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \ LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' -blessmail: ${SUBDIR_MAKEFILES} src FRC +# 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. +src: Makefile FRC + boot=bootstrap-emacs$(EXEEXT); \ + if [ ! -x "src/$$boot" ]; then \ + cd $@; $(MAKE) all $(MFLAGS) \ + CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \ + LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' BOOTSTRAPEMACS="$$boot"; \ + fi; + cd $@; $(MAKE) all $(MFLAGS) \ + CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \ + LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' BOOTSTRAPEMACS="" + +blessmail: Makefile src FRC cd lib-src; $(MAKE) maybe-blessmail $(MFLAGS) \ MAKE='${MAKE}' archlibdir='$(archlibdir)' -Makefile: $(srcdir)/Makefile.in config.status +# 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 +# ./Makefile is representative of the time stamp on all the other Makefiles. +Makefile: config.status $(srcdir)/src/config.in \ + $(srcdir)/Makefile.in \ + $(srcdir)/src/Makefile.in \ + $(srcdir)/lib-src/Makefile.in \ + $(srcdir)/doc/emacs/Makefile.in \ + $(srcdir)/doc/misc/Makefile.in \ + $(srcdir)/doc/lispref/Makefile.in \ + $(srcdir)/doc/lispintro/Makefile.in \ + $(srcdir)/oldXMenu/Makefile.in \ + $(srcdir)/lwlib/Makefile.in \ + $(srcdir)/leim/Makefile.in \ + $(srcdir)/lisp/Makefile.in ./config.status -config.status: ${srcdir}/configure +config.status: ${srcdir}/configure ${srcdir}/lisp/version.el ./config.status --recheck AUTOCONF_INPUTS = @MAINT@ $(srcdir)/configure.in $(srcdir)/m4/getopt.m4 @@ -327,34 +382,6 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS) rm -f $(srcdir)/src/stamp-h.in echo timestamp > $(srcdir)/src/stamp-h.in -src/Makefile: $(srcdir)/src/Makefile.in config.status - ./config.status - -src/config.stamp: $(srcdir)/src/config.in config.status - ./config.status - touch src/config.stamp - -lib-src/Makefile: $(srcdir)/lib-src/Makefile.in config.status - ./config.status - -man/Makefile: $(srcdir)/man/Makefile.in config.status - ./config.status - -lispref/Makefile: $(srcdir)/lispref/Makefile.in config.status - ./config.status - -lispintro/Makefile: $(srcdir)/lispintro/Makefile.in config.status - ./config.status - -oldXMenu/Makefile: $(srcdir)/oldXMenu/Makefile.in config.status - ./config.status - -lwlib/Makefile: $(srcdir)/lwlib/Makefile.in config.status - ./config.status - -leim/Makefile: $(srcdir)/leim/Makefile.in config.status - ./config.status - # ==================== Installation ==================== ## If we let lib-src do its own installation, that means we @@ -376,6 +403,8 @@ leim/Makefile: $(srcdir)/leim/Makefile.in config.status install: all install-arch-indep install-arch-dep install-leim blessmail @true +MV_DIRS = for i in $$dir; do rm -fr `basename "$$i"` ; mv "$$i" . ; done + ### Install the executables that were compiled specifically for this machine. ### It would be nice to do something for a parallel make ### to ensure that install-arch-indep finishes before this starts. @@ -395,12 +424,23 @@ install-arch-dep: mkdir ${INSTALL_DATA} lib-src/$$f $(DESTDIR)${archlibdir}/$$f; \ else true; fi ; \ done - if test "${carbon_appdir}" != ""; then \ - umask 022; mkdir -p $(DESTDIR)${carbon_appdir}/Emacs.app; \ - (cd mac/Emacs.app; (tar -chf - . | \ - (cd $(DESTDIR)${carbon_appdir}/Emacs.app; umask 022; tar -xvf - \ - && cat > /dev/null))) || exit 1; \ - fi + if test "${ns_appdir}" != ""; then \ + ( cd ${ns_appresdir} ; \ + if test -d share/emacs ; then dir=share/emacs/*/*; $(MV_DIRS); fi;\ + if test -d share/info ; then dir=share/info; $(MV_DIRS) ; fi ; \ + rm -fr share ) ; \ + ( cd ${ns_appbindir}/libexec ; dir=emacs/*/*/* ; $(MV_DIRS); \ + rm -fr emacs ) ; \ + ( cd ${ns_appbindir}/bin ; rm -f emacs emacs-23* ; \ + ln -sf ../libexec/* .) ; \ + else true ; fi + +## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html +## Needs to be the user running install, so configure can't set it. +set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \ + `id -un 2> /dev/null`; do \ + [ -n "$${installuser}" ] && break ; \ + done ### Install the files that are machine-independent. ### Most of them come straight from the distribution; @@ -410,14 +450,16 @@ install-arch-dep: mkdir ## Note that we copy DOC* and then delete DOC ## as a workaround for a bug in tar on Ultrix 4.2. -## FIXME -## Should only install the DOC- file appropriate to this build, not DOC-*. -## http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-01/msg00417.html -## (fix available for consideration post-release). +## We install only the relevant DOC file if possible +## (ie DOC-${version}.buildnumber), otherwise DOC-${version}*. ## If people complain about the h flag in tar command, take that out. ## That flag is also used in leim/Makefile.in -install-arch-indep: mkdir info + +## Note that the Makefiles in the etc directory are potentially useful +## in an installed Emacs, so should not be excluded. + +install-arch-indep: mkdir info install-etc -set ${COPYDESTS} ; \ unset CDPATH; \ for dir in ${COPYDIR} ; do \ @@ -430,6 +472,7 @@ install-arch-indep: mkdir info mkdir ${COPYDESTS} ; \ chmod ugo+rx ${COPYDESTS} ; \ unset CDPATH; \ + $(set_installuser); \ for dir in ${COPYDIR} ; do \ dest=$$1 ; shift ; \ [ -d $${dir} ] \ @@ -438,18 +481,22 @@ install-arch-indep: mkdir info (cd $${dir}; tar -chf - . ) \ | (cd $${dest}; umask 022; \ tar -xvf - && cat > /dev/null) || exit 1; \ - find $${dest} -exec chown $${LOGNAME:-$$USERNAME} {} ';' ;\ + find $${dest} -exec chown $${installuser} {} ';' ;\ for subdir in `find $${dest} -type d ! -name RCS ! -name CVS -print` ; do \ chmod a+rx $${subdir} ; \ rm -rf $${subdir}/RCS ; \ rm -rf $${subdir}/CVS ; \ rm -f $${subdir}/.cvsignore ; \ + 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}/*.orig ; \ - rm -f $${subdir}/[mM]akefile* ; \ + [ "$${dir}" != "${srcdir}/etc" ] && \ + rm -f $${subdir}/[mM]akefile*.c $${subdir}/[mM]akefile*[.-]in \ + $${subdir}/[mM]akefile ; \ rm -f $${subdir}/ChangeLog* ; \ rm -f $${subdir}/dired.todo ; \ done) ; \ @@ -475,10 +522,19 @@ install-arch-indep: mkdir info -unset CDPATH; \ if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \ then \ - echo "Copying etc/DOC-* to $(DESTDIR)${docdir} ..." ; \ - (cd ./etc; tar -chf - DOC*) \ + fullversion=`./src/emacs --version | sed -n '1 s/GNU Emacs *//p'`; \ + if [ -f "./etc/DOC-$${fullversion}" ]; \ + then \ + docfile="DOC-$${fullversion}"; \ + else \ + docfile="DOC"; \ + fi; \ + echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \ + (cd ./etc; tar -chf - $${docfile}) \ |(cd $(DESTDIR)${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \ - (cd $(DESTDIR)$(docdir); chown $${LOGNAME:-$$USERNAME} DOC*; chmod a+r DOC*; \ + (cd $(DESTDIR)$(docdir); \ + $(set_installuser); \ + chown $${installuser} DOC*; chmod a+r DOC*; \ if test "`echo DOC-*`" != "DOC-*"; then rm -f DOC; fi); \ else true; fi -unset CDPATH; \ @@ -490,7 +546,9 @@ install-arch-indep: mkdir info echo "Copying lisp/*.el and lisp/*.elc to $(DESTDIR)${lispdir} ..." ; \ (cd lisp; tar -chf - *.el *.elc) \ |(cd $(DESTDIR)${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \ - (cd $(DESTDIR)${lispdir}; find . -exec chown $${LOGNAME:-$$USERNAME} {} ';') ; \ + (cd $(DESTDIR)${lispdir}; \ + $(set_installuser); \ + find . -exec chown $${installuser} {} ';') ; \ else true; fi -unset CDPATH; \ if [ -n "${GZIP_PROG}" ]; \ @@ -513,6 +571,7 @@ install-arch-indep: mkdir info fi; \ cd ${srcdir}/info ; \ for elt in $(INFO_FILES); do \ + test "$(MAKEINFO)" = "off" && ! test -e $$elt && continue; \ for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \ ${INSTALL_DATA} $$f $(DESTDIR)${infodir}/$$f; \ chmod a+r $(DESTDIR)${infodir}/$$f; \ @@ -524,17 +583,30 @@ install-arch-indep: mkdir info if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \ then \ for elt in $(INFO_FILES); do \ + test "$(MAKEINFO)" = "off" && ! test -e $$elt && continue; \ (cd $${thisdir}; \ ${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \ done; \ else true; fi - -chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} $(DESTDIR)${datadir}/emacs/site-lisp ${COPYDESTS} $(DESTDIR)${infodir} + -chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS} thisdir=`/bin/pwd`; \ - cd ${srcdir}/etc; \ - for page in emacs emacsclient etags ctags ; do \ + cd ${mansrcdir}; \ + for page in ${MAN_PAGES}; do \ (cd $${thisdir}; \ - ${INSTALL_DATA} ${srcdir}/etc/$${page}.1 $(DESTDIR)${man1dir}/$${page}${manext}; \ - chmod a+r $(DESTDIR)${man1dir}/$${page}${manext}); \ + ${INSTALL_DATA} ${mansrcdir}/$${page} $(DESTDIR)${man1dir}/$${page}; \ + chmod a+r $(DESTDIR)${man1dir}/$${page}); \ + done + +## Install those items from etc/ that need to end up elsewhere. +install-etc: mkdir + ${INSTALL_DATA} ${srcdir}/etc/emacs.desktop \ + $(DESTDIR)${desktopdir}/emacs.desktop + for icon in $(iconsrcdir)/*/*/apps/*.* \ + $(iconsrcdir)/*/*/mimetypes/*.*; do \ + if [ -r $${icon} ]; then \ + iicon=`echo "$${icon}" | sed 's,$(srcdir)/etc/images/icons,$(DESTDIR)${icondir},'` ; \ + ${INSTALL_DATA} $${icon} $${iicon} ; \ + fi ; \ done ### Install LEIM files. Although they are machine-independent, we @@ -552,20 +624,28 @@ install-strip: ### we may be creating several layers of directories (for example, ### /usr/local/lib/emacs/19.0/mips-dec-ultrix4.2), we use mkinstalldirs ### instead of mkdir. Not all systems' mkdir programs have the `-p' flag. +### We set the umask so that any created directories are world-readable. +### FIXME it would be good to warn about non-standard permissions of +### pre-existing directories, but that does not seem easy. mkdir: FRC - if [ -d $(DESTDIR)${datadir} ]; then true; else \ - $(srcdir)/mkinstalldirs $(DESTDIR)${datadir}; \ - chmod a+r $(DESTDIR)${datadir};\ - fi - $(srcdir)/mkinstalldirs ${COPYDESTS} $(DESTDIR)${infodir} $(DESTDIR)${man1dir} \ + icondirs= ; \ + for dir in $(iconsrcdir)/*/*/apps $(iconsrcdir)/*/*/mimetypes; do \ + if [ -d $${dir} ]; then \ + icondirs="$${icondirs} $${dir}" ; \ + fi ; \ + done ; \ + icondirs=`echo "$${icondirs}" | sed 's,$(srcdir)/etc/images/icons,$(DESTDIR)${icondir},g'` ; \ + umask 022 ; \ + $(srcdir)/mkinstalldirs $(DESTDIR)${datadir} ${COPYDESTS} \ + $(DESTDIR)${infodir} $(DESTDIR)${man1dir} \ $(DESTDIR)${bindir} $(DESTDIR)${docdir} $(DESTDIR)${libexecdir} \ $(DESTDIR)${datadir}/emacs/site-lisp \ $(DESTDIR)${datadir}/emacs/${version}/site-lisp \ - $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` + $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'` \ + $(DESTDIR)${desktopdir} $${icondirs} ### Delete all the installed files that the `install' target would -### create (but not the noninstalled files such as `make all' would -### create). +### 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: @@ -596,9 +676,14 @@ uninstall: rm -f $$f; \ done; \ done;) - (cd $(DESTDIR)${man1dir} && rm -f emacs${manext} emacsclient${manext} etags${manext} ctags${manext}) + (cd $(DESTDIR)${man1dir} && rm -f $(MAN_PAGES)) (cd $(DESTDIR)${bindir} && rm -f $(EMACSFULL) $(EMACS)) - + (cd $(DESTDIR)${icondir} && rm -f hicolor/*x*/apps/emacs.png hicolor/*x*/apps/emacs22.png hicolor/scalable/apps/emacs.svg hicolor/scalable/mimetypes/emacs-document.svg ) + -rm -f $(DESTDIR)${desktopdir}/emacs.desktop + for file in snake-scores tetris-scores; do \ + file=$(DESTDIR)${gamedir}/$${file}; \ + [ -s $${file} ] || rm -f $$file; \ + done FRC: @@ -616,9 +701,10 @@ mostlyclean: FRC (cd oldXMenu; $(MAKE) $(MFLAGS) mostlyclean) (cd lwlib; $(MAKE) $(MFLAGS) mostlyclean) (cd lib-src; $(MAKE) $(MFLAGS) mostlyclean) - -(cd man && $(MAKE) $(MFLAGS) mostlyclean) - -(cd lispref && $(MAKE) $(MFLAGS) mostlyclean) - -(cd lispintro && $(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) (cd leim; $(MAKE) $(MFLAGS) mostlyclean) ### `clean' @@ -634,11 +720,16 @@ clean: FRC (cd oldXMenu; $(MAKE) $(MFLAGS) clean) (cd lwlib; $(MAKE) $(MFLAGS) clean) (cd lib-src; $(MAKE) $(MFLAGS) clean) - -(cd man && $(MAKE) $(MFLAGS) clean) - -(cd lispref && $(MAKE) $(MFLAGS) clean) - -(cd lispintro && $(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 leim; $(MAKE) $(MFLAGS) clean) +### `bootclean' +### Delete all files that need to be remade for a clean bootstrap. +top_bootclean=\ + rm -f config.cache config.log ### `distclean' ### Delete all files from the current directory that are created by ### configuring or building the program. If you have unpacked the @@ -646,21 +737,37 @@ clean: FRC ### `make distclean' should leave only the files that were in the ### distribution. top_distclean=\ - rm -f config.status config.cache config.log ; \ - rm -f Makefile ${SUBDIR_MAKEFILES} ; \ - if [ -d lock ] ; then (cd lock && (rm -f * || true)); else true; fi + ${top_bootclean}; \ + rm -f config.status Makefile ${SUBDIR_MAKEFILES} distclean: FRC (cd src; $(MAKE) $(MFLAGS) distclean) (cd oldXMenu; $(MAKE) $(MFLAGS) distclean) (cd lwlib; $(MAKE) $(MFLAGS) distclean) (cd lib-src; $(MAKE) $(MFLAGS) distclean) - (cd man && $(MAKE) $(MFLAGS) distclean) - (cd lispref && $(MAKE) $(MFLAGS) distclean) - (cd lispintro && $(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) ${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-src; $(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) maintainer-clean) + (cd lisp; $(MAKE) $(MFLAGS) bootstrap-clean) + ${top_bootclean} + ### `maintainer-clean' ### Delete everything from the current directory that can be ### reconstructed with this Makefile. This typically includes @@ -672,15 +779,8 @@ distclean: FRC ### 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. -maintainer-clean: FRC +maintainer-clean: bootstrap-clean FRC (cd src; $(MAKE) $(MFLAGS) maintainer-clean) - (cd oldXMenu; $(MAKE) $(MFLAGS) maintainer-clean) - (cd lwlib; $(MAKE) $(MFLAGS) maintainer-clean) - (cd lib-src; $(MAKE) $(MFLAGS) maintainer-clean) - -(cd man && $(MAKE) $(MFLAGS) maintainer-clean) - -(cd lispref && $(MAKE) $(MFLAGS) maintainer-clean) - -(cd lispintro && $(MAKE) $(MFLAGS) maintainer-clean) - (cd leim; $(MAKE) $(MFLAGS) maintainer-clean) (cd lisp; $(MAKE) $(MFLAGS) maintainer-clean) ${top_distclean} @@ -694,49 +794,6 @@ extraclean: -rm -f config-tmp-* -rm -f *~ \#* -### Unlocking and relocking. The idea of these productions is to reduce -### hassles when installing an incremental tar of Emacs. Do `make unlock' -### before unlocking the file to take the write locks off all sources so -### that tar xvof will overwrite them without fuss. Then do `make relock' -### afterward so that VC mode will know which files should be checked in -### if you want to mung them. -### -### Note: it's no disaster if these productions miss a file or two; tar -### and VC will swiftly let you know if this happens, and it is easily -### corrected. -SOURCES = ChangeLog FTP INSTALL Makefile.in \ - README configure make-dist move-if-change - -.PHONY: unlock relock - -unlock: - chmod u+w $(SOURCES) - -(cd elisp; chmod u+w Makefile README *.texi) - (cd etc; $(MAKE) $(MFLAGS) unlock) - (cd lib-src; $(MAKE) $(MFLAGS) unlock) - (cd lisp; $(MAKE) $(MFLAGS) unlock) - (cd lisp/term; chmod u+w README *.el) - (cd man; chmod u+w *texi* ChangeLog split-man) - (cd lispref; chmod u+w *texi* ChangeLog) - (cd lispintro; chmod u+w *texi* ChangeLog) - (cd oldXMenu; chmod u+w *.[ch] Makefile README) - (cd lwlib; chmod u+w *.[ch] Makefile README) - (cd src; $(MAKE) $(MFLAGS) unlock) - -relock: - chmod u-w $(SOURCES) - -(cd elisp; chmod u-w Makefile README *.texi) - (cd etc; $(MAKE) $(MFLAGS) relock) - (cd lib-src; $(MAKE) $(MFLAGS) relock) - (cd lisp; $(MAKE) $(MFLAGS) relock) - (cd lisp/term; chmod u+w README *.el) - (cd man; chmod u+w *texi* ChangeLog split-man) - (cd lispref; chmod u+w *texi* ChangeLog) - (cd lispintro; chmod u+w *texi* ChangeLog) - (cd oldXMenu; chmod u+w *.[ch] Makefile README) - (cd lwlib; chmod u+w *.[ch] Makefile README) - (cd src; $(MAKE) $(MFLAGS) relock) - # The src subdir knows how to do the right thing # even when the build directory and source dir are different. TAGS tags: lib-src src @@ -749,67 +806,76 @@ dist: cd ${srcdir}; ./make-dist .PHONY: info dvi dist check html + +info-real: + (cd doc/emacs; $(MAKE) $(MFLAGS) info) + (cd doc/misc; $(MAKE) $(MFLAGS) info) + (cd doc/lispref; $(MAKE) $(MFLAGS) info) + (cd doc/lispintro; $(MAKE) $(MFLAGS) info) + force-info: -# Note that man/Makefile knows how to -# put the info files in $(srcdir), +# 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. +# But it is inappropriate to do so without checking if makeinfo is +# actually needed - it is not if the info files are up-to-date. (Bug#3982) +# Only the doc/*/Makefiles can decide that, so we let those rules run +# and give a standard error if makeinfo is needed but missing. +# While it would be nice to give a more detailed error message, that +# 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 - -(cd man; $(MAKE) $(MFLAGS) info) - -(cd lispref; $(MAKE) $(MFLAGS) info) - -(cd lispintro; $(MAKE) $(MFLAGS) info) + @if test "$(MAKEINFO)" = "off"; then \ + echo "Configured --without-makeinfo, not building manuals" ; \ + else \ + $(MAKE) $(MFLAGS) info-real ; \ + fi + +# The info/dir file must be updated by hand when new manuals are added. +check-info-dir: info + cd info ; \ + missing= ; \ + for file in *; do \ + test -f "$${file}" || continue ; \ + case $${file} in \ + *-[0-9]*|COPYING|dir) continue ;; \ + esac ; \ + grep -q -F ": ($${file})." dir || missing="$${missing} $${file}" ; \ + done ; \ + if test -n "$${missing}"; then \ + echo "Missing info/dir entries: $${missing}" ; \ + exit 1 ; \ + fi ; \ + echo "info/dir is OK" + dvi: - (cd man; $(MAKE) $(MFLAGS) dvi) - (cd lispref; $(MAKE) $(MFLAGS) elisp.dvi) - (cd lispintro; $(MAKE) $(MFLAGS) emacs-lisp-intro.dvi) + (cd doc/emacs; $(MAKE) $(MFLAGS) dvi) + (cd doc/misc; $(MAKE) $(MFLAGS) dvi) + (cd doc/lispref; $(MAKE) $(MFLAGS) elisp.dvi) + (cd doc/lispintro; $(MAKE) $(MFLAGS) emacs-lisp-intro.dvi) #### Bootstrapping. -### This is meant for Emacs maintainers only. It first cleans the -### lisp subdirectory, removing all compiled Lisp files. Then a -### special emacs executable is built from Lisp sources, which is then -### used to compile Lisp files. The last step is a "normal" make. +### This first cleans the lisp subdirectory, removing all compiled +### Lisp files. Then re-run make to build all the files anew. .PHONY: bootstrap -.PHONY: bootstrap-build -.PHONY: bootfast -.PHONY: maybe_bootstrap - -maybe_bootstrap: - @bar="`echo $(srcdir)/lisp/*.elc`"; \ - if [ \( "$$bar" = '$(srcdir)/lisp/*.elc' \) -o \( "$$bar" = '' \) ]; then \ - echo "Your tree does not include the compiled Lisp files."; \ - echo "You need to do \`make bootstrap' to build Emacs."; \ - echo "Emacs now requires Texinfo version 4.2."; \ - exit 1;\ - fi - -bootstrap: bootstrap-clean-before FRC - $(MAKE) $(MFLAGS) info bootstrap-build - -bootfast: bootstrap-clean-before-fast FRC - $(MAKE) $(MFLAGS) info bootstrap-build -bootstrap-build: FRC - (cd lisp; $(MAKE) $(MFLAGS) bootstrap-prepare) - (cd src; $(MAKE) $(MFLAGS) bootstrap) - (cd lisp; $(MAKE) $(MFLAGS) bootstrap EMACS=../src/bootstrap-emacs${EXEEXT}) - (cd src; $(MAKE) $(MFLAGS) mostlyclean) - $(MAKE) $(MFLAGS) all - (cd lisp; $(MAKE) $(MFLAGS) bootstrap-after) +bootstrap: bootstrap-clean FRC + if [ -x ./config.status ]; then \ + ./config.status; \ + else \ + ./configure --enable-maintainer-mode; \ + fi + $(MAKE) $(MFLAGS) info all -### Used for `bootstrap' to avoid deleting existing dumped Emacs executables. -bootstrap-clean-before: bootstrap-clean-before-fast FRC - (cd lisp; $(MAKE) $(MFLAGS) bootstrap-clean) - (cd leim; $(MAKE) $(MFLAGS) bootstrap-clean) +.PHONY: check-declare -### Used for `bootfast' to avoid deleting existing dumped Emacs executables -### and compiled .elc files. -bootstrap-clean-before-fast: FRC - (cd src; $(MAKE) $(MFLAGS) mostlyclean) - (cd oldXMenu; $(MAKE) $(MFLAGS) clean) - (cd lwlib; $(MAKE) $(MFLAGS) clean) - (cd lib-src; $(MAKE) $(MFLAGS) clean) - -(cd man && $(MAKE) $(MFLAGS) clean) - -(cd lispref && $(MAKE) $(MFLAGS) clean) - -(cd lispintro && $(MAKE) $(MFLAGS) clean) - (cd leim; $(MAKE) $(MFLAGS) clean) +check-declare: + @if [ ! -e $(srcdir)/src/emacs ]; then \ + echo "You must build Emacs to use this command"; \ + exit 1; \ + fi + (cd leim; $(MAKE) $(MFLAGS) $@) + (cd lisp; $(MAKE) $(MFLAGS) $@)