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

scriptversion=2009-04-28.21; # 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
trap '(exit $?); exit' 1 2 13 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:
