#!/bin/sh
# Copyright (C) 1995, 2000, 2003, 2004, 2005, 2009, 2010 Free Software
# Foundation, Inc.

scriptversion=2010-02-06.18; # UTC

# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1995.
#
# This program 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.
#
# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.

# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.

case $1 in
  '')
     echo "$0: No files.  Try \`$0 --help' for more information." 1>&2
     exit 1;
     ;;
  -h | --h*)
    cat <<\EOF
Usage: elisp-comp [--help] [--version] FILES...

This script byte-compiles all `.el' files listed as FILES using GNU
Emacs, and put the resulting `.elc' files into the current directory,
so disregarding the original directories used in `.el' arguments.

This script manages in such a way that all Emacs LISP files to
be compiled are made visible between themselves, in the event
they require or load-library one another.

Report bugs to <bug-automake@gnu.org>.
EOF
    exit $?
    ;;
  -v | --v*)
    echo "elisp-comp $scriptversion"
    exit $?
    ;;
esac

if test -z "$EMACS" || test "$EMACS" = "t"; then
  # Value of "t" means we are running in a shell under Emacs.
  # Just assume Emacs is called "emacs".
  EMACS=emacs
fi

tempdir=elc.$$

# Cleanup the temporary directory on exit.
trap 'ret=$?; rm -rf "$tempdir" && exit $ret' 0
do_exit='(exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
trap "ret=141; $do_exit" 13
trap "ret=143; $do_exit" 15

mkdir $tempdir
cp "$@" $tempdir

(
  cd $tempdir
  echo "(setq load-path (cons nil load-path))" > script
  $EMACS -batch -q -l script -f batch-byte-compile *.el || exit $?
  mv *.elc ..
) || exit $?

(exit 0); exit 0

# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:
