Mercurial > hg > xemacs-beta
view lib-src/update-elc.sh @ 418:e804706bfb8c r21-2-17
Import from CVS: tag r21-2-17
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:23:13 +0200 |
parents | 697ef44129c6 |
children |
line wrap: on
line source
#!/bin/sh # update-elc.sh --- recompile all missing or out-of-date .elc files # Author: Jamie Zawinski, Ben Wing, Martin Buchholz # Maintainer: Martin Buchholz # Keywords: recompile byte-compile .el .elc # This file is part of XEmacs. # XEmacs 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 2, or (at your option) # any later version. # XEmacs is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with XEmacs; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ### Commentary: ## Recompile all .elc files that need recompilation. Requires a ## working version of "xemacs". Correctly handles the case where the ## .elc files are missing; thus you can execute "rm lisp/*/*.elc" ## before running this script. Run this from the parent of the ## "lisp" directory, or another nearby directory. set -e # Try to find the lisp directory in several places. # (Sun workspaces have an "editor" directory) for dir in . .. ../.. editor ../editor ; do if test -d $dir/lisp/. ; then cd $dir ; break ; fi done if test ! -d lisp/. ; then echo "$0: Cannot find the \"lisp\" directory." exit 1 fi if test -z "$EMACS"; then EMACS="./src/xemacs"; fi export EMACS echo " (using $EMACS)" # fuckin' sysv, man... if [ "`uname -r | sed 's/[^0-9]*\([0-9]*\).*/\1/'`" -gt 4 ]; then echon() { /bin/echo $* '\c' } else echon() { echo -n $* } fi EMACS_DIR=`cd \`dirname $EMACS\` && pwd`; CANON_PWD=`pwd` # Account for various system automounter configurations if test -d "/net"; then if test -d "/tmp_mnt/net"; then tdir="/tmp_mnt/net"; else tdir="/tmp_mnt"; fi EMACS_DIR=`echo "$EMACS_DIR" | \ sed -e "s|^${tdir}/|/net/|" -e "s|^/a/|/net/|" -e "s|^/amd/|/net/|"` CANON_PWD=`echo "$CANON_PWD" | \ sed -e "s|^${tdir}/|/net/|" -e "s|^/a/|/net/|" -e "s|^/amd/|/net/|"` fi REAL="$EMACS_DIR/`basename $EMACS`" echo "Recompiling in $CANON_PWD" echo " with $REAL..." BYTECOMP="$REAL -batch -vanilla " $EMACS -batch -vanilla -l $CANON_PWD/lisp/cleantree -f batch-remove-old-elc lisp prune_vc="( -name '.*' -o -name SCCS -o -name RCS -o -name CVS ) -prune -o" # $els is a list of all .el files # $elcs is a list of all .elc files els=/tmp/update-elc-1.$$ elcs=/tmp/update-elc-2.$$ rm -f $els $elcs trap "rm -f $els $elcs" 0 1 2 3 15 find lisp/. $prune_vc -name '*.el' -print | sort > $els find lisp/. $prune_vc -name '*.elc' -print | sed 's/elc$/el/' | sort > $elcs echon "Deleting .elc files without .el files..." comm -13 $els $elcs | sed -e '\!/vm.el!d' -e 's/el$/elc/' | \ while read file ; do echo rm "$file" ; rm "$file" ; done echo done. # Compute patterns to ignore when searching for files ignore_dirs="" ignore_pattern='' # Only use Mule XEmacs to compile Mule-specific elisp dirs echon "Checking for Mule support..." lisp_prog='(princ (featurep (quote mule)))' mule_p="`$EMACS -batch -vanilla -eval \"$lisp_prog\"`" if test "$mule_p" = nil ; then echo No ignore_dirs="$ignore_dirs mule" else echo Yes fi # first recompile the byte-compiler, so that the other compiles take place # with the latest version (assuming we're compiling the lisp dir of the emacs # we're running, which might not be the case, but often is.) #echo "Checking the byte compiler..." #$BYTECOMP -f batch-byte-recompile-directory lisp/bytecomp # Prepare for byte-compiling directories with directory-specific instructions # Not necessary any more, but I want to keep the text current to cut & paste # into the package lisp maintenance tree. #make_special_commands='' #make_special () { # dir="$1"; shift; # ignore_dirs="$ignore_dirs $dir" # make_special_commands="$make_special_commands \ #echo \"Compiling in lisp/$dir\"; \ #(cd \"lisp/$dir\" && ${MAKE:-make} EMACS=$REAL ${1+$*}); \ #echo \"lisp/$dir done.\";" #} #if test "$mule_p" != nil; then # make_special skk all #fi ## AUCTeX is a package now # if test "$mule_p" = nil ; then # make_special auctex some # else # make_special auctex some MULE_ELC=tex-jp.elc # fi #make_special cc-mode all # EFS is now packaged # make_special efs x20 #make_special eos -k # not strictly necessary... ## make_special gnus some # Now this is a package. # hyperbole is now packaged # make_special hyperbole elc # We're not ready for the following, yet. #make_special ilisp XEmacsELC=custom-load.elc elc # ilisp is now packaged # make_special ilisp elc # oobr is now packaged # make_special oobr HYPB_ELC='' elc ## W3 is a package now. #make_special w3 xemacs-w3 for dir in $ignore_dirs ; do ignore_pattern="${ignore_pattern}/\\/$dir\\//d /\\/$dir\$/d " done # Other special-case filenames that don't get byte-compiled ignore_pattern="$ignore_pattern"' \!/,!d \!/paths.el$!d \!/loadup.el$!d \!/loadup-el.el$!d \!/update-elc.el$!d \!/dumped-lisp.el$!d \!/make-docfile.el$!d \!/site-start.el$!d \!/site-load.el$!d \!/site-init.el$!d \!/version.el$!d \!/very-early-lisp.el$!d ' echo "Compiling files without .elc..." NUMTOCOMPILE=20 # compile this many files with each invocation comm -23 $els $elcs | \ sed "$ignore_pattern" | \ xargs -t -n$NUMTOCOMPILE $BYTECOMP -f batch-byte-compile echo "Compiling files without .elc... Done" #if test "$mule_p" != nil; then # eval "$make_special_commands" #fi