| 1 | #!/bin/sh -x |
| 2 | # |
| 3 | #Shell script for building and installing Emacs. |
| 4 | |
| 5 | # ==================== Where To Install Things ==================== |
| 6 | |
| 7 | # The default location for installation. Everything is placed in |
| 8 | # subdirectories of this directory. This directory must exist when |
| 9 | # you start installation. The default values for many of the |
| 10 | # variables below are expressed in terms of this one, so you may not |
| 11 | # need to change them. |
| 12 | prefix=/usr/local |
| 13 | |
| 14 | # Where to install Emacs and other binaries that people will want to |
| 15 | # run directly (like etags). |
| 16 | bindir=${prefix}/bin |
| 17 | |
| 18 | # A directory under which we will install many of Emacs's files. The |
| 19 | # default values for many of the variables below are expressed in |
| 20 | # terms of this one, so you may not need to change them. |
| 21 | emacsdir=${prefix}/emacs-19.0 |
| 22 | |
| 23 | # Where to install and expect the architecture-independent data files |
| 24 | # (like the tutorial and the Zippy database). |
| 25 | datadir=${emacsdir}/etc |
| 26 | |
| 27 | # Where to install the elisp files distributed with Emacs. Strictly |
| 28 | # speaking, all the elisp files should go under datadir (above), since |
| 29 | # both elisp source and compiled elisp are completely portable, but |
| 30 | # it's traditional to give the lisp files their own subdirectory. |
| 31 | lispdir=${emacsdir}/lisp |
| 32 | |
| 33 | # Directories Emacs should search for elisp files specific to this |
| 34 | # site (i.e. customizations), before consulting ${lispdir}. This |
| 35 | # should be a colon-separated list of directories. |
| 36 | locallisppath=${emacsdir}/local-lisp |
| 37 | |
| 38 | # Where Emacs will search to find its elisp files. Before changing |
| 39 | # this, check to see if your purpose wouldn't better be served by |
| 40 | # changing locallisppath. This should be a colon-separated list of |
| 41 | # directories. |
| 42 | lisppath=${locallisppath}:${lispdir} |
| 43 | |
| 44 | # Where Emacs will search for its elisp files before dumping. This is |
| 45 | # only used during the process of compiling Emacs, to help Emacs find |
| 46 | # its lisp files before they've been installed in their final |
| 47 | # location. It's usually identical to lisppath, except that the entry |
| 48 | # for the directory containing the installed lisp files has been |
| 49 | # replaced with ../lisp. This should be a colon-separated list of |
| 50 | # directories. |
| 51 | dumplisppath=../lisp |
| 52 | |
| 53 | # Where to install and expect the files that Emacs modifies as it |
| 54 | # runs. These files are all architecture-independent. Right now, |
| 55 | # the only such data is the locking directory. |
| 56 | statedir=${emacsdir} |
| 57 | |
| 58 | # Where to create and expect the locking directory, where the Emacs |
| 59 | # locking code keeps track of which files are currently being edited. |
| 60 | lockdir=${statedir}/lock |
| 61 | |
| 62 | # Where to install and expect executable files to be run by Emacs |
| 63 | # rather than directly by users, and other architecture-dependent |
| 64 | # data. |
| 65 | libdir=${emacsdir}/arch-lib |
| 66 | |
| 67 | # Where to install Emacs's man pages. |
| 68 | mandir=/usr/man/man1 |
| 69 | |
| 70 | # Where to install and expect the info files describing Emacs. In the |
| 71 | # past, this defaulted to a subdirectory of ${prefix}/lib/emacs, but |
| 72 | # since there are now many packages documented with the texinfo |
| 73 | # system, it is inappropriate to imply that it is part of Emacs. |
| 74 | infodir=${prefix}/info |
| 75 | |
| 76 | removenullpaths="sed -e 's/^://' -e 's/:"'$'"//' -e 's/::/:/'" |
| 77 | |
| 78 | lisppath=`echo ${lisppath} | ${removenullpaths}` ; \ |
| 79 | dumplisppath=`echo ${dumplisppath} | ${removenullpaths}` ; \ |
| 80 | /bin/sed < src/paths.h.in > src/paths.h \ |
| 81 | -e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "'$${lisppath}'";' \ |
| 82 | -e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "'$${dumplisppath}'";' \ |
| 83 | -e 's;\(#.*PATH_EXEC\).*$$;\1 "${libdir}";' \ |
| 84 | -e 's;\(#.*PATH_DATA\).*$$;\1 "${datadir}";' \ |
| 85 | -e 's;\(#.*PATH_LOCK\).*$$;\1 "${lockdir}/";' |
| 86 | |
| 87 | (cd lib-src; make) || exit 1 |
| 88 | (cd src; make) || exit 1 |
| 89 | |
| 90 | # Subdirectories to install, and where they'll go. |
| 91 | copydir=arch-lib etc info lisp |
| 92 | copydests=${libdir} ${datadir} ${infodir} ${lispdir} |
| 93 | |
| 94 | # If any of the directories are below ${emacsdir} or ${statedir}, create them. |
| 95 | for dir in ${copydests}; do |
| 96 | case "${dir}" in |
| 97 | ${emacsdir}/* ) |
| 98 | if [ ! -d ${emacsdir} ]; then |
| 99 | mkdir ${emacsdir} |
| 100 | chmod 777 ${emacsdir} |
| 101 | fi |
| 102 | ;; |
| 103 | ${statedir}/* ) |
| 104 | if [ ! -d ${statedir} ]; then |
| 105 | mkdir ${statedir} |
| 106 | chmod 777 ${statedir} |
| 107 | fi |
| 108 | ;; |
| 109 | esac |
| 110 | done |
| 111 | |
| 112 | set ${copydests} |
| 113 | for dir in ${copydir} ; do |
| 114 | dest=$1 ; shift |
| 115 | mv ${dir} ${dest} |
| 116 | if [ $? != 0 ]; then |
| 117 | echo mv ${dir} to ${dest} failed -- using tar to copy. |
| 118 | if [ `/bin/pwd`/${dir} != `(cd ${dest}; /bin/pwd)` ] ; then |
| 119 | (cd ${dir}; tar cf - . ) | (cd ${dest}; umask 0; tar xf - ) |
| 120 | if [ $? != 0 ]; then |
| 121 | echo "tar-copying ${dir} to ${dest} failed too. I give up." |
| 122 | exit 1 |
| 123 | fi |
| 124 | for subdir in `find ${dest} -type d ! -name RCS -print` ; do |
| 125 | rm -rf ${subdir}/RCS |
| 126 | rm -f ${subdir}/\#* |
| 127 | rm -f ${subdir}/*~ |
| 128 | done |
| 129 | fi |
| 130 | fi |
| 131 | done |
| 132 | |
| 133 | cp ${libdir}/[ce]tags ${bindir} |
| 134 | mv src/emacs ${BINDIR}/emacs |
| 135 | rm src/temacs |
| 136 | chmod 777 ${bindir}/[ce]tags ${bindir}/emacs |