* configure.in (mandir): May as well include it in the NS app bundle.
[bpt/emacs.git] / Makefile.in
index 171b13a..69757d5 100644 (file)
@@ -90,6 +90,13 @@ configuration=@configuration@
 
 # ==================== Where To Install Things ====================
 
+# Location to install Emacs.app under GNUstep / Mac OS X.
+# Later values may use these.
+ns_appbindir=@ns_appbindir@
+ns_appresdir=@ns_appresdir@
+# Either yes or no depending on whether this is a relocatable Emacs.app.
+ns_self_contained=@ns_self_contained@
+
 # The default location for installation.  Everything is placed in
 # subdirectories of this directory.  The default values for many of
 # the variables below are expressed in terms of this one, so you may
@@ -117,8 +124,10 @@ datadir=@datadir@
 sharedstatedir=@sharedstatedir@
 
 # Where to install and expect executable files to be run by Emacs
-# rather than directly by users, and other architecture-dependent
-# data.         ${archlibdir} is a subdirectory of this.
+# rather than directly by users (and other architecture-dependent
+# data, although Emacs does not have any).  The executables
+# are actually installed in ${archlibdir}, which is (normally)
+# a subdirectory of this.
 libexecdir=@libexecdir@
 
 # Where to install Emacs's man pages.
@@ -158,10 +167,6 @@ VPATH=@srcdir@
 # Where to find the application default.
 x_default_search_path=@x_default_search_path@
 
-# Location to install Emacs.app under NeXT/Open/GNUstep / Cocoa
-ns_appbindir=@ns_appbindir@
-ns_appresdir=@ns_appresdir@
-
 # Where the etc/emacs.desktop file is to be installed.
 desktopdir=$(datarootdir)/applications
 
@@ -436,54 +441,56 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS)
 ## don't have to duplicate the list of utilities to install in
 ## this Makefile as well.
 
-## On AIX, use tar xBf.
-## On Xenix, use tar xpf.
+.PHONY: install
 
-.PHONY: install mkdir
-
-## We delete each directory in ${COPYDESTS} before we copy into it;
-## that way, we can reinstall over directories that have been put in
-## place with their files read-only (perhaps because they are checked
-## into RCS).  In order to make this safe, we make sure that the
-## source exists and is distinct from the destination.
-### We do install-arch-indep first because
-### the executable needs the Lisp files and DOC file to work properly.
-install: all install-arch-indep install-arch-dep install-leim blessmail
+install: all install-arch-indep install-arch-dep blessmail
        @true
 
+## Ensure that $subdir contains a subdirs.el file.
+## Here and elsewhere, we set the umask so that any created files are
+## world-readable.
+## TODO it might be good to warn about non-standard permissions of
+## pre-existing directories, but that does not seem easy.
+write_subdir=if [ -f $${subdir}/subdirs.el ]; \
+       then true; \
+       else \
+         umask 022; \
+         ${MKDIR_P} $${subdir}; \
+         (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \
+          echo "    (normal-top-level-add-subdirs-to-load-path))") \
+           > $${subdir}/subdirs.el; \
+       fi
+
 ### 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.
-### (TODO Why would it be nice?  Why not just make this depend on
-### install-arch-indep then?)
-install-arch-dep: mkdir
+### We do install-arch-indep first because the executable needs the
+### Lisp files and DOC file to work properly.
+install-arch-dep: install-arch-indep
+       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})
-       ${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} $(DESTDIR)${bindir}/$(EMACSFULL)
-       -chmod 1755 $(DESTDIR)${bindir}/$(EMACSFULL)
-       rm -f $(DESTDIR)${bindir}/$(EMACS)
-       -ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${bindir}/$(EMACS)
-       if test "${ns_appresdir}" != ""; then \
-         ( cd ${ns_appresdir} ; \
-           if test -d share/emacs ; then \
-             for dir in share/emacs/${version}/*; do \
-               rm -fr `basename "$$dir"`; mv "$$dir" . ; \
-             done ; \
-           fi ; \
-           if test -d share/info ; then rm -fr info; mv share/info . ; fi ; \
-           rm -fr share ) ; \
-         ( if cd ${ns_appbindir}/libexec ; then \
-             mv -f emacs/${version}/${configuration}/* . ; rm -fr emacs ; \
-             rm -f ../bin/emacs ../bin/$(EMACSFULL) ; \
-           fi ) ; \
-       else true ; fi
-
-## FIXME NS self-contained: rather than installing emacs and
-## EMACSFULL, then deleting them, obviously it would be better to not
-## install them in the first place.
+       if test "${ns_self_contained}" = "no"; then \
+         ${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} $(DESTDIR)${bindir}/$(EMACSFULL) || exit 1 ; \
+         chmod 1755 $(DESTDIR)${bindir}/$(EMACSFULL) ; \
+         rm -f $(DESTDIR)${bindir}/$(EMACS) ; \
+         ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${bindir}/$(EMACS) || true ; \
+       else \
+         subdir=${ns_appresdir}/site-lisp; \
+         ${write_subdir} || exit 1; \
+         rm -rf ${ns_appresdir}/share; \
+       fi
+
+## In the share directory, we are deleting:
+## applications (with emacs.desktop)
+## emacs (basically empty)
+## icons (duplicates etc/images/icons/hicolor)
+## man   (maybe we should be installing this one, like info)
+
+## This is install-etc for everything except self-contained-ns builds.
+## For them, it is empty.
+INSTALL_ARCH_INDEP_EXTRA = @INSTALL_ARCH_INDEP_EXTRA@
 
 ## 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.
@@ -511,68 +518,63 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \
 ## (ie DOC-${version}.buildnumber), otherwise DOC-${version}*.
 ## (Note "otherwise" is inaccurate since 2009-08-23.)
 
-## If people complain about the h flag in tar command, take that out.
-## That flag is also used in leim/Makefile.in
-
 ## 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 \
-         if [ `(cd $$1 && /bin/pwd)` != `(cd $${dir} && /bin/pwd)` ] ; then \
-           rm -rf $$1 ; \
-         fi ; \
-         shift ; \
-       done
+## We delete each directory in ${COPYDESTS} before we copy into it;
+## that way, we can reinstall over directories that have been put in
+## place with their files read-only (perhaps because they are checked
+## into RCS).  In order to make this safe, we make sure that the
+## source exists and is distinct from the destination.
+
+## I'm not sure creating locallisppath here serves any useful purpose.
+## If it has the default value, then the later write_subdir commands
+## will ensure all these components exist.
+## This will only do something if locallisppath has a non-standard value.
+## Is it really Emacs's job to create those directories?
+## Should we also be ensuring they contain subdirs.el files?
+## It would be easy to do, just use write_subdir.
+install-arch-indep: info install-leim ${INSTALL_ARCH_INDEP_EXTRA}
+       umask 022 ; \
+         $(MKDIR_P) $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'`
        -set ${COPYDESTS} ; \
-       mkdir ${COPYDESTS} ; \
-       chmod ugo+rx ${COPYDESTS} ; \
        unset CDPATH; \
        $(set_installuser); \
        for dir in ${COPYDIR} ; do \
+         [ -d $${dir} ] || exit 1 ; \
          dest=$$1 ; shift ; \
-         [ -d $${dir} ] \
-         && [ `(cd $${dir} && /bin/pwd)` != `(cd $${dest} && /bin/pwd)` ] \
-         && (echo "Copying $${dir} to $${dest}..." ; \
-             (cd $${dir}; tar -chf - . ) \
-               | (cd $${dest}; umask 022; \
-                   tar -xvf - && cat > /dev/null) || exit 1; \
-             find $${dest} -exec chown $${installuser} {} ';' ;\
-             for subdir in `find $${dest} -type d -print` ; do \
-               chmod a+rx $${subdir} ; \
-               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 ; \
-               [ "$${dir}" != "${srcdir}/etc" ] && \
-                rm -f $${subdir}/[mM]akefile*[.-]in $${subdir}/[mM]akefile ; \
-               rm -f  $${subdir}/ChangeLog* ; \
-             done) ; \
+         [ -d $${dest} ] && \
+           [ `(cd $${dest} && /bin/pwd)` = `(cd $${dir} && /bin/pwd)` ] && \
+           continue ; \
+         rm -rf $${dest} ; \
+         umask 022; ${MKDIR_P} $${dest} ; \
+         (echo "Copying $${dir} to $${dest}..." ; \
+          (cd $${dir}; tar -chf - . ) \
+            | (cd $${dest}; umask 022; \
+               tar -xvf - && cat > /dev/null) || exit 1; \
+          find $${dest} -exec chown $${installuser} {} ';' ;\
+          for subdir in `find $${dest} -type d -print` ; do \
+            chmod a+rx $${subdir} ; \
+            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 ; \
+            [ "$${dir}" != "${srcdir}/etc" ] && \
+             rm -f $${subdir}/[mM]akefile*[.-]in $${subdir}/[mM]akefile ; \
+            rm -f  $${subdir}/ChangeLog* ; \
+          done) ; \
        done
        -rm -f $(DESTDIR)${lispdir}/subdirs.el
        $(srcdir)/update-subdirs $(DESTDIR)${lispdir}
-       if [ -f $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el ]; \
-       then true; \
-       else \
-         (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \
-          echo "    (normal-top-level-add-subdirs-to-load-path))") \
-           > $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el; \
-       fi
-       chmod a+r $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el
-       -if [ -f $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el ]; \
-       then true; \
-       else \
-         (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \
-          echo "    (normal-top-level-add-subdirs-to-load-path))") \
-           > $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el; \
-       fi
-       -chmod a+r $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el
+       subdir=$(DESTDIR)${datadir}/emacs/${version}/site-lisp ; \
+         ${write_subdir}
+       subdir=$(DESTDIR)${datadir}/emacs/site-lisp ; \
+         ${write_subdir} || true
        -unset CDPATH; \
+       umask 022; ${MKDIR_P} $(DESTDIR)${docdir} ; \
        if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \
        then \
           fullversion=`./src/emacs --version | sed -n '1 s/GNU Emacs *//p'`; \
@@ -597,6 +599,7 @@ install-arch-indep: mkdir info install-etc
                ${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \
            done) \
        else true; fi
+       umask 022; ${MKDIR_P} $(DESTDIR)${infodir}
        -unset CDPATH; \
        thisdir=`/bin/pwd`; \
        if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
@@ -605,8 +608,7 @@ install-arch-indep: mkdir info install-etc
           if [ -f dir ]; then true; \
           else \
             (cd $${thisdir}; \
-             ${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir; \
-             chmod a+r $(DESTDIR)${infodir}/dir); \
+             ${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir) ; \
           fi; \
           info_misc=`cd $${thisdir}/doc/misc; ${MAKE} echo-info | sed '/ing directory/d'`; \
           cd ${srcdir}/info ; \
@@ -615,7 +617,6 @@ install-arch-indep: mkdir info install-etc
              for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \
               (cd $${thisdir}; \
                ${INSTALL_DATA} ${srcdir}/info/$$f $(DESTDIR)${infodir}/$$f); \
-               chmod a+r $(DESTDIR)${infodir}/$$f; \
                if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \
                  rm -f $(DESTDIR)${infodir}/$$f.gz; \
                  ${GZIP_PROG} -9n $(DESTDIR)${infodir}/$$f; \
@@ -626,12 +627,12 @@ install-arch-indep: mkdir info install-etc
           done); \
        else true; fi
        -chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} ${COPYDESTS}
+       umask 022; ${MKDIR_P} $(DESTDIR)${man1dir}
        thisdir=`/bin/pwd`; \
        cd ${mansrcdir}; \
        for page in *.1; do \
          (cd $${thisdir}; \
           ${INSTALL_DATA} ${mansrcdir}/$${page} $(DESTDIR)${man1dir}/$${page}; \
-          chmod a+r $(DESTDIR)${man1dir}/$${page}; \
           if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \
             rm -f $(DESTDIR)${man1dir}/$${page}.gz; \
             ${GZIP_PROG} -9n $(DESTDIR)${man1dir}/$${page}; \
@@ -639,49 +640,34 @@ install-arch-indep: mkdir info install-etc
        done
 
 ## Install those items from etc/ that need to end up elsewhere.
-install-etc: mkdir
+install-etc:
+       umask 022; ${MKDIR_P} $(DESTDIR)${desktopdir}
        ${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 ; \
+       thisdir=`/bin/pwd`; \
+       cd ${iconsrcdir} || exit 1; umask 022 ; \
+       for dir in */*/apps */*/mimetypes; do \
+         [ -d $${dir} ] || continue ; \
+         ( cd $${thisdir}; ${MKDIR_P} ${icondir}/$${dir} ) ; \
+         for icon in $${dir}/*.*; do \
+           [ -r $${icon} ] || continue ; \
+           ( cd $${thisdir}; \
+             ${INSTALL_DATA} ${iconsrcdir}/$${icon} ${icondir}/$${icon} ) \
+           || exit 1; \
+         done ; \
        done
 
 ### Install LEIM files.  Although they are machine-independent, we
 ### have separate target here instead of including it in
 ### `install-arch-indep'.  People who extracted LEIM files after they
 ### installed Emacs itself can install only LEIM files by this target.
-install-leim: leim/Makefile mkdir
+install-leim: leim/Makefile
        cd leim && $(MAKE) $(MFLAGS) install
 
 ### Build Emacs and install it, stripping binaries while installing them.
 install-strip:
        $(MAKE) $(MFLAGS) INSTALL_STRIP=-s install
 
-### Build all the directories we're going to install Emacs in.
-### 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
-       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 ; \
-       $(MKDIR_P) $(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)${desktopdir} $${icondirs}
-
 ### Delete all the installed files that the `install' target would
 ### create (but not the noninstalled files such as `make all' would create).
 ###