Mercurial > hg > xemacs-beta
diff lib-src/update-elc.sh @ 428:3ecd8885ac67 r21-2-22
Import from CVS: tag r21-2-22
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:28:15 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib-src/update-elc.sh Mon Aug 13 11:28:15 2007 +0200 @@ -0,0 +1,191 @@ +#!/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... +# Nuke this function... +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