Mercurial > emacs
view admin/quick-install-emacs @ 51415:762217a72cae
Long overdue merge.
Don't require `compile' since it seems unnecessary.
For all internal variables and functions the docstring comments have
been converted into proper docstrings
(bibtex-maintainer-address, bibtex-maintainer-salutation)
(bibtex-version): Remove support for bug reporting.
(bibtex-field-delimiters, bibtex-entry-delimiters)
(bibtex-sort-ignore-string-entries, bibtex-maintain-sorted-entries)
Replace make-variable-buffer-local by make-local-variable for
(bibtex-entry-format): New tag `required-fields'.
(bibtex-maintain-sorted-entries): New var.
(bibtex-sort-entry-class, bibtex-sort-entry-class-alist): New vars.
(bibtex-predefined-month-strings, bibtex-predefined-strings):
Make into alists with pairs (abbreviation expansion).
(bibtex-autokey-titleword-change-strings)
(bibtex-autokey-transcriptions): Make into alists.
Add new replacement pairs.
(bibtex-autokey-use-crossref): New var.
Replace bibtex-autokey-year-use-crossref-entry because updated code
for autokey generation handles crossrefs independently of
particular fields.
(bibtex-reference-key, bibtex-mode-syntax-table):
Remove = because it can't be part of a string's key.
(bibtex-complete-key-cleanup): New var.
(bibtex-complete): Merge bibtex-complete-string and bibtex-complete-key
into it (and bind to M-tab).
(bibtex-valid-entry-re, bibtex-any-valid-entry-re)
(bibtex-valid-entry-whitespace-re, bibtex-empty-field-re)
(bibtex-quoted-string-re): New vars.
(bibtex-field-name-for-parsing): Don't make-variable-buffer-local.
(zmacs-regions): Declare to quieten the byte-compiler.
(bibtex-comment-start): Don't include the space.
(bibtex-font-lock-syntactic-keywords): New var.
(bibtex-font-lock-keywords): Remove the entry for @Comment.
(bibtex-parse-field-string): Merge the functionality of
bibtex-parse-field-string-braced, bibtex-parse-quoted-string and
bibtex-parse-field-string-quoted.
(bibtex-search-forward-field-string): Remove.
(bibtex-parse-association): Use when.
(bibtex-parse-field-name): Use when.
(bibtex-parse-field-text): Use when and cond.
(bibtex-parse-field): Use let.
(bibtex-search-forward-field, bibtex-search-backward-field):
Make bound optional, use let, setq, and cddr.
(bibtex-start-of-field, bibtex-start-of-name-in-field)
(bibtex-end-of-name-in-field): Use nth.
(bibtex-name-in-field, bibtex-text-in-field-bounds)
(bibtex-text-in-field, bibtex-type-in-head, bibtex-key-in-head)
(bibtex-text-in-string): New functions.
(bibtex-reference-key-in-string): New fun. Merge of
bibtex-start-of-reference-key-in-string and
bibtex-end-of-reference-key-in-string.
(bibtex-parse-string-prefix): Use let and when.
(bibtex-parse-string-postfix): Use when.
(bibtex-search-forward-string, bibtex-search-backward-string):
Use save-excursion and setq.
(bibtex-member-of-regexp): Use let.
(bibtex-assoc-of-regexp): Use caar und let.
(bibtex-skip-to-valid-entry): Return buffer position.
(bibtex-map-entries): Use save-excursion.
(bibtex-progress-message): Simplify.
(bibtex-search-entry): Use skip-chars-forward, when, save-match-data.
(bibtex-move-outside-of-entry): Handle the case that point is before
first entry.
(bibtex-enclosing-field): Use save-excursion, when.
(bibtex-format-field-delimiters): Merge into bibtex-format-entry.
(bibtex-enclosing-entry-maybe-empty-head): Simplify.
(bibtex-format-entry): Simplify. Handle new tag required-fields of
bibtex-entry-format.
(bibtex-autokey-abbrev): Accept negative values of len.
(bibtex-autokey-get-field, bibtex-autokey-demangle-title): New funs.
(bibtex-autokey-get-namefield, bibtex-autokey-get-namelist)
(bibtex-autokey-get-yearfield-digits, bibtex-autokey-get-yearfield)
(bibtex-autokey-get-titlestring): Remove.
(bibtex-autokey-get-names): Simplify.
(bibtex-autokey-get-titles): Rename to bibtex-autokey-get-title.
(bibtex-autokey-demangle-name): Simplify, avoid error messages.
(bibtex-generate-autokey): Simplify.
(bibtex-parse-keys): Simplify, use push.
(bibtex-parse-strings): New fun similar to bibtex-parse-keys.
(bibtex-string-files-init): New fun.
(bibtex-parse-buffers-stealthily): Use bibtex-parse-keys,
bibtex-string-files-init and bibtex-parse-strings.
(bibtex-complete): Rename to bibtex-complete-internal, use push,
bibtex-reference-key-in-string, no sorting.
(bibtex-complete-string-cleanup): New fun, displays expansion of
completed strings.
(bibtex-choose-completion-string): New fun. Required for
choose-completion-string-functions.
(bibtex-do-auto-fill): Remove. Set fill-prefix in bibtex-mode.
(bibtex-pop): Simplify.
(bibtex-mode): Move setting of bibtex-string to bibtex-parse-strings.
Set choose-completion-string-functions.
(bibtex-print-help-message,bibtex-make-field, bibtex-end-of-entry)
(bibtex-count-entries): Simplify.
(bibtex-entry-index, bibtex-lessp): New funs for generalized sorting
scheme of indices, see bibtex-maintain-sorted-entries.
(bibtex-sort-buffer): Use bibtex-lessp for sorting.
(bibtex-find-crossref, bibtex-find-entry): New funs.
(bibtex-find-entry-location): Rename to bibtex-prepare-new-entry, use
bibtex-lessp, Simplify.
(bibtex-validate): Simplify. Fixe bug of internal variable
questionable-month.
(bibtex-remove-OPT-or-ALT): Use when.
(bibtex-remove-delimiters, bibtex-kill-field, bibtex-kill-entry)
(bibtex-clean-entry, bibtex-fill-entry, bibtex-reformat): Simplify.
(bibtex-convert-alien): Use deactivate-mark rather than the
non-existent bibtex-mark-active variable.
(bibtex-complete-string, bibtex-complete-key): Merge into new
`smart' defun bibtex-complete.
(bibtex-String): Update for new sorting scheme, distinguish empty and
non-empty key strings.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Mon, 02 Jun 2003 22:30:09 +0000 |
parents | 6f9b527df5c6 |
children | fe4a18479819 d7ddb3e565de |
line wrap: on
line source
#!/bin/sh # quick-install-emacs -- do a halfway-decent job of installing emacs quickly # Written by Miles Bader <miles@gnu.org> # This script is mainly intended for emacs maintainer or pretesters who # install emacs very often. See the --help output for more details. PUBLIC_LIBSRC_BINARIES='b2m emacsclient etags ctags ebrowse' PUBLIC_LIBSRC_SCRIPTS='grep-changelog rcs-checkin' AVOID="CVS -DIC README COPYING ChangeLog ~ \.orig$ \.rej$ Makefile makefile stamp-subdir .cvsignore \.[cho]$ make-docfile testfile test-distrib" # Prune old binaries lying around in the source tree PRUNE=no # Re-install files even if they already exist FORCE=no # Command verbose flag VERBOSE='' me="`basename $0`" # Install commands (these commands are also expected to understand the # GNU -v (--verbose) option) LINK='cp -lf' COPY='cp -f' REMOVE='rm -r' # Used to execute commands once once we create them EXEC='sh' MKDIR='mkdir --verbose -p' NAWK=/usr/bin/nawk # avoid non-standard command output from non-C locales unset LANG LC_ALL LC_MESSAGES # Some messages USAGE="Usage: $me [OPTION...] BUILD_TREE [PREFIX]" TRY="Try "\`"$me --help' for more information." # Parse command-line options while :; do case "$1" in -n|--dry-run) EXEC=cat; shift;; -p|--prune) PRUNE=yes; shift;; -P|--no-prune) PRUNE=no; shift;; --prune-only) PRUNE=only; shift;; -f|--force) FORCE=yes; shift;; -v|--verbose) VERBOSE="-v"; shift;; --help) cat <<EOF $USAGE Install emacs quickly -n, --dry-run print installation commands instead of executing them -f, --force install even files that haven't changed -v, --verbose print messages describing what is done -p, --prune prune old generated files -P, --no-prune don't prune old generated files (default) --prune-only prune old generated files, but don't install --help display this help and exit --version output version information and exit $me install emacs \`incrementally,' that is, it will install only those files that have changed since the last time it was invoked, and remove any obsolete files from the installation directories. It also uses hard-links into the source and build trees to do the install, so it uses much less space than the default Makefile install target; however, this also means that $me can not install onto a disk partition other than the one on which the source and build directories reside. Optionally, $me can also remove old versions of automatically generated files that are version-specific (such as the versioned emacs executables in the \`src' directory, and the DOC-* files in the \`etc' directory). The latter action is called \`pruning,' and can be enabled using the \`-p' or \`--prune' options. EOF exit 0 ;; --version) cat <<EOF $me 1.6 Written by Miles Bader <miles@gnu.org> EOF exit 0 ;; -[^-]?*) # split concatenated single-letter options apart FIRST="$1"; shift set -- `echo $FIRST | sed 's/-\(.\)\(.*\)/-\1 -\2/'` "$@" ;; -*) echo 1>&2 "$me: unrecognized option "\`"$1'" echo 1>&2 "$TRY" exit 1 ;; *) break; esac done LINK_CMD="$LINK $VERBOSE" REMOVE_CMD="$REMOVE $VERBOSE" case $# in 1) BUILD="$1";; 2) BUILD="$1"; prefix="$2";; *) echo 1>&2 "$USAGE" echo 1>&2 "$TRY" exit 1 ;; esac if test ! -d "$BUILD"; then echo 1>&2 "$me: $BUILD: Build tree not found" exit 2 elif test ! -r "$BUILD/config.status"; then echo 1>&2 "$me: $BUILD: Not a proper build tree, config.status not found" exit 2 fi CONFIG_STATUS="$BUILD/config.status" function get_config_var () { if ! sed -n "s/^s\(.\)@$1@\1\(.*\)\1.*$/\2/p" $CONFIG_STATUS | sed q | grep '' then echo 1>&2 "$me: $1: Configuration variable not found in $CONFIG_STATUS" exit 4 fi } test x"$SRC" = x && { SRC="`get_config_var srcdir`" || exit 4 ; } test x"$prefix" = x && { prefix="`get_config_var prefix`" || exit 4 ; } test x"$ARCH" = x && { ARCH="`get_config_var host`" || exit 4 ; } VERSION=`grep 'defconst[ ]*emacs-version' $SRC/lisp/version.el \ | sed -e 's/^[^"]*"\([^"]*\)".*$/\1/'` DST_SHARE="$prefix/share/emacs/$VERSION" DST_BIN="$prefix/bin" DST_LIBEXEC="$prefix/libexec/emacs/$VERSION/$ARCH" DST_INFO="$prefix/info" function maybe_mkdir () { if ! test -d "$1"; then $MKDIR "$1" 2>&1 | sed "s/^mkdir:/$me:/" 1>&2 fi } maybe_mkdir "$DST_BIN" maybe_mkdir "$DST_SHARE" maybe_mkdir "$DST_SHARE/site-lisp" maybe_mkdir "$DST_LIBEXEC" maybe_mkdir "$DST_INFO" ( # start of command-generating sub-shell PRUNED="" if test x"$PRUNE" != xno; then for D in `ls -1t $BUILD/etc/DOC-* | sed 1d`; do echo $REMOVE_CMD $D PRUNED="$PRUNED $D" done for D in `ls -1t $BUILD/src/emacs-$VERSION.* | sed 1d`; do echo $REMOVE_CMD $D PRUNED="$PRUNED $D" done for D in `ls -1t $BUILD/lib-src/fns-* | sed 1d`; do echo $REMOVE_CMD $D PRUNED="$PRUNED $D" done fi test x"$PRUNE" = xonly && exit 0 function maybe_emit_copy () { if test "$FORCE" = yes || ! cmp -s $1 $2; then echo $LINK_CMD $1 $2 fi } maybe_emit_copy $BUILD/src/emacs $DST_BIN/emacs maybe_emit_copy $BUILD/src/emacs $DST_BIN/emacs-$VERSION for F in $PUBLIC_LIBSRC_BINARIES; do maybe_emit_copy $BUILD/lib-src/$F $DST_BIN/$F done for F in $PUBLIC_LIBSRC_SCRIPTS; do maybe_emit_copy $SRC/lib-src/$F $DST_BIN/$F done if test x"$SRC" = x"$BUILD"; then PFXS="$BUILD" else PFXS="$SRC $BUILD" fi for SUBDIR in lisp leim etc lib-src info; do # defaults SHARED=no FORCED='' AVOID_PAT="`echo "($AVOID)" | tr ' ' '|'`" # Set subdir-specific values case $SUBDIR in lisp|leim) DST="$DST_SHARE/$SUBDIR" ;; etc) DST="$DST_SHARE/$SUBDIR" # COPYING is in the avoid list, but there should be a copy of it in # the install etc dir, so make that here. FORCED="$DST/COPYING" ;; lib-src) DST="$DST_LIBEXEC" AVOID_PAT="`echo "($AVOID ($PUBLIC_LIBSRC_BINARIES $PUBLIC_LIBSRC_SCRIPTS)\$)" | tr ' ' '|'`" ;; info) DST="$DST_INFO" SHARED=yes ;; esac for PFX in $PFXS; do if [ -d $PFX/$SUBDIR ]; then for DIR in `(cd $PFX/$SUBDIR; find . -type d -print | sed 's@^./@@')`; do if [ -d $DST/$DIR ]; then echo Directory $DST/$DIR exists else echo Directory $DST/$DIR non-existant if [ "`echo $DIR | egrep -v "$AVOID_PAT"`" ]; then maybe_mkdir $DST/$DIR fi fi done diff -sqr $PFX/$SUBDIR $DST fi done | $NAWK ' BEGIN { src_pat = "^'"$SRC"'/'"$SUBDIR"'/" build_pat = "^'"$BUILD"'/'"$SUBDIR"'/" dst_pat = "^'"$DST"'/" dst_pfx = "'"$DST"'/" avoid_pat = "'"$AVOID_PAT"'" force = ("'"$FORCE"'" == "yes") shared = ("'"$SHARED"'" == "yes") init_bool_array(pruned, "'"$PRUNED"'") init_bool_array(forced, "'"$FORCED"'") } function init_bool_array(array, string, a,k) { split (string, a) for (k in a) array[a[k]] = 1 } function install(src, dst) { if (! (src in pruned)) { cp[src] = dst; from[dst] = src; delete rm[dst]; } } function update(src, dst, copy) { if (src in pruned) { rm[dst] = 1; delete from[dst] } else { if (copy) cp[src] = dst; from[dst] = src; delete rm[dst]; } } function uninstall(dst) { if (!(dst in from)) rm[dst] = 1; } /^Directory / { if ($2 ~ avoid_pat) { if ($NF == "exists") uninstall($2) } else update(0, $2, 0) next } /^Files / { if ($4 ~ avoid_pat && !($4 in forced)) uninstall($4) else if ($NF == "identical") update($2, $4, force) else update($2, $4, 1) next } /^Only / { pfx = $3 sub (/:$/, "/", pfx) if (pfx ~ dst_pat) { if (! shared) uninstall(pfx $4) } else { subdir = pfx if (subdir ~ src_pat) sub (src_pat, "", subdir) else sub (build_pat, "", subdir) dst = dst_pfx subdir $4 if (! (dst ~ avoid_pat)) install(pfx $4, dst) } next } END { for (f in rm) print "'"$REMOVE_CMD"' " f for (f in cp) print "'"$LINK_CMD"' " f " " cp[f] } ' done ) | eval $EXEC