And again
authorChristian Faulhammer <fauli@gentoo.org>
Mon, 16 Apr 2007 15:41:02 +0000 (15:41 +0000)
committerChristian Faulhammer <fauli@gentoo.org>
Mon, 16 Apr 2007 15:41:02 +0000 (15:41 +0000)
eclass/elisp-common.eclass
eclass/elisp.eclass

index a7cfed3d0e42832402d6859f28bd919b410f3de7..e634ef33166dc0d7074df0aa497437f15b1a54c5 100644 (file)
@@ -1,6 +1,6 @@
 # Copyright 1999-2007 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/elisp-common.eclass,v 1.15 2007/04/16 15:35:56 opfer Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/elisp-common.eclass,v 1.16 2007/04/16 15:41:02 opfer Exp $
 #
 # Copyright 2007 Christian Faulhammer <opfer@gentoo.org>
 # Copyright 2002-2007 Matthew Kennedy <mkennedy@gentoo.org>
index d460f3d06e4b545b83c8ba585d2e843f4e13b355..5108685537c4f5035ba59b76bd8c8a5e43308f9f 100644 (file)
 # Copyright 1999-2007 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/elisp.eclass,v 1.17 2007/04/16 15:35:56 opfer Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/elisp.eclass,v 1.18 2007/04/16 15:41:02 opfer Exp $
 #
 # Copyright 2007 Christian Faulhammer <opfer@gentoo.org>
 # Copyright 2002-2007 Matthew Kennedy <mkennedy@gentoo.org>
 # Copyright 2003 Jeremy Maitin-Shepard <jbms@attbi.com>
-# Copyright 2007 Ulrich Mueller <ulm@gentoo.org>
 #
-# This is not a real eclass, but it does provide Emacs-related installation
-# utilities.
+# This eclass sets the site-lisp directory for emacs-related packages.
 #
-# USAGE:
+# Emacs support for other than pure elisp packages is handled by
+# elisp-common.eclass where you won't have a dependency on Emacs
+# itself.  All elisp-* functions are documented there.
 #
-# Usually you want to use this eclass for (optional) GNU Emacs support of
-# your package.  This is NOT for XEmacs!
-#  Many of the steps here are sometimes done by the build system of your
-# package (especially compilation), so this is mainly for standalone elisp
-# files you gathered from somewhere else.
-#  When relying on the emacs USE flag, you need to add
+# Setting SIMPLE_ELISP=t in an ebuild means, that the package's source
+# is a single (in whatever way) compressed elisp file  with the file name
+# ${PN}-${PV}. The consequences:
 #
-#              emacs? ( virtual/emacs )
+# 1.) ${S} is redefined
+# 2.) ${PN}-${PV}.el is moved to ${PN} in the system.
 #
-# to your DEPEND/RDEPEND line and use the functions provided here to bring
-# the files to the correct locations.
-#
-# src_compile() usage:
-# --------------------
-#
-# An elisp file is compiled by the elisp-compile() function defined here and
-# simply takes the source files as arguments.  In the case of interdependent
-# elisp files, you can use the elisp-comp() function which makes sure all
-# files are loadable.
-#
-#              elisp-compile *.el || die "elisp-compile failed!"
-# or
-#              elisp-comp *.el || die "elisp-comp failed!"
-#
-#  Function elisp-make-autoload-file() can be used to generate a file with
-# autoload definitions for the lisp functions.  It takes the output file name
-# (default: "${PN}-autoloads.el") and a list of directories (default: working
-# directory) as its arguments.  Use of this function requires that the elisp
-# source files contain magic ";;;###autoload" comments. See the Emacs Lisp
-# Reference Manual (node "Autoload") for a detailed explanation.
-#
-# src_install() usage:
-# --------------------
-#
-# The resulting compiled files (.elc) should be put in a subdirectory of
-# /usr/share/emacs/site-lisp/ which is named after the first argument
-# of elisp-install().  The following parameters are the files to be put in
-# that directory.  Usually the subdirectory should be ${PN}, you can choose
-# something else, but remember to tell elisp-site-file-install() (see below)
-# the change, as it defaults to ${PN}.
-#
-#              elisp-install ${PN} *.elc *.el || die "elisp-install failed!"
-#
-#  To let the Emacs support be activated by Emacs on startup, you need
-# to provide a site file (shipped in ${FILESDIR}) which contains the startup
-# code (have a look in the documentation of your software).  Normally this
-# would look like this:
-#
-#      ;;; csv-mode site-lisp configuration
-#
-#      (add-to-list 'load-path "@SITELISP@")
-#      (add-to-list 'auto-mode-alist '("\\.csv\\'" . csv-mode))
-#      (autoload 'csv-mode "csv-mode" "Major mode for editing csv files." t)
-#
-#  If your Emacs support files are installed in a subdirectory of
-# /usr/share/emacs/site-lisp/ (which is recommended if more than one file is
-# installed), you need to extend Emacs' load-path as shown in the first
-# non-comment.  The elisp-site-file-install() function of this eclass will
-# replace "@SITELISP@" by the actual path.
-#  The next line tells Emacs to load the mode opening a file ending with
-# ".csv" and load functions depending on the context and needed features.
-# Be careful though.  Commands as "load-library" or "require" bloat the
-# editor as they are loaded on every startup.  When having a lot of Emacs
-# support files, users may be annoyed by the start-up time.  Also avoid
-# keybindings as they might interfere with the user's settings.  Give a hint
-# in pkg_postinst(), which should be enough.
-#  The naming scheme for this site file is "[0-9][0-9]*-gentoo.el", where the
-# two digits at the beginning define the loading order.  So if you depend on
-# another Emacs package, your site file's number must be higher!
-#  Best practice is to define a SITEFILE variable in the global scope of your
-# ebuild (right after DEPEND e.g.):
-#
-#              SITEFILE=50${PN}-gentoo.el
-#
-#  Which is then installed by
-#
-#              elisp-site-file-install "${FILESDIR}/${SITEFILE}"
-#
-# in src_install().  If your subdirectory is not named ${PN}, give the
-# differing name as second argument.
-#
-# pkg_postinst() / pkg_postrm() usage:
-# ------------------------------------
-#
-# After that you need to recreate the start-up file of Emacs after emerging
-# and unmerging by using
-#
-#              pkg_postinst() {
-#                      elisp-site-regen
-#              }
-#              pkg_postrm() {
-#                      elisp-site-regen
-#              }
-#
-#  As always: Feel free to contact Emacs team through emacs@gentoo.org if you
-# have problems, suggestions or questions.
 
-SITELISP=/usr/share/emacs/site-lisp
+inherit elisp-common
 
-elisp-compile() {
-       /usr/bin/emacs --batch -f batch-byte-compile --no-site-file --no-init-file $*
-}
+# SRC_URI should be set to wherever the primary app-emacs/ maintainer
+# keeps the local elisp mirror, since most app-emacs packages are
+# upstream as a single .el file.
 
-elisp-make-autoload-file () {
-       local f="${1-${PN}-autoloads.el}"
-       shift
-       echo >"${f}"
-       emacs --batch -q --no-site-file \
-               --eval "(setq make-backup-files nil)" \
-               --eval "(setq generated-autoload-file (expand-file-name \"${f}\"))" \
-               -f batch-update-autoloads "${@-.}"
-}
+if [ "${SIMPLE_ELISP}" = 't' ]; then
+       S="${WORKDIR}/"
+fi
 
-elisp-install() {
-       local subdir=$1
-       dodir "${SITELISP}/${subdir}"
-       insinto "${SITELISP}/${subdir}"
-       shift
-       doins $@
-}
+DEPEND="virtual/emacs"
+IUSE=""
 
-elisp-site-file-install() {
-       local sitefile=$1 my_pn=${2:-${PN}}
-       pushd "${S}"
-       cp ${sitefile} "${T}"
-       sed -i "s:@SITELISP@:${SITELISP}/${my_pn}:g" "${T}/$(basename ${sitefile})"
-       insinto ${SITELISP}
-       doins "${T}/$(basename ${sitefile})" || die "failed to install site file"
-       popd
+elisp_src_unpack() {
+       unpack ${A}
+       if [ "${SIMPLE_ELISP}" = 't' ]
+               then
+               cd "${S}" && mv ${P}.el ${PN}.el
+       fi
 }
 
-elisp-site-regen() {
-       einfo "Regenerating ${SITELISP}/site-gentoo.el ..."
-       einfo ""
-       cat <<EOF >${ROOT}${SITELISP}/site-gentoo.el
-;;; DO NOT EDIT THIS FILE -- IT IS GENERATED AUTOMATICALLY BY PORTAGE
-;;; -----------------------------------------------------------------
-
-EOF
-       ls ${ROOT}${SITELISP}/[0-9][0-9]*-gentoo.el | sort -n | \
-       while read sf
-       do
-               einfo "  Adding $(basename $sf) ..."
-               # Great for debugging, too noisy and slow for users though
-#              echo "(message \"Loading $sf ...\")" >>${ROOT}${SITELISP}/site-start.el
-               cat $sf >>${ROOT}${SITELISP}/site-gentoo.el
-       done
-       while read line; do einfo "${line}"; done <<EOF
-
-All site initialization for Gentoo-installed packages is now added to
-/usr/share/emacs/site-lisp/site-gentoo.el; site-start.el is no longer
-managed by Gentoo. You are responsible for all maintenance of
-site-start.el if there is such a file.
-
-In order for this site initialization to be loaded for all users
-automatically, as was done previously, you can add a line like this:
-
-       (load "/usr/share/emacs/site-lisp/site-gentoo")
-
-to /usr/share/emacs/site-lisp/site-start.el.  Alternatively, that line
-can be added by individual users to their initialization files, or for
-greater flexibility, users can select which of the package-specific
-initialization files in /usr/share/emacs/site-lisp to load.
-EOF
-       echo
+elisp_src_compile() {
+       elisp-compile *.el || die
 }
 
-# The following Emacs Lisp compilation routine is taken from GNU
-# autotools.
-
-elisp-comp() {
-# Copyright 1995 Free Software Foundation, Inc.
-# François Pinard <pinard@iro.umontreal.ca>, 1995.
-# This script byte-compiles all `.el' files which are part of its
-# arguments, 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.
-
-       if test $# = 0; then
-               exit 1
-       else
-               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.$$
-               mkdir ${tempdir}
-               cp $* ${tempdir}
-               cd ${tempdir}
+elisp_src_install() {
+       elisp-install ${PN} *.el *.elc
+       elisp-site-file-install "${FILESDIR}/${SITEFILE}"
+}
 
-               echo "(add-to-list 'load-path \"../\")" > script
-               ${EMACS} -batch -q --no-site-file --no-init-file -l script -f batch-byte-compile *.el
-               mv *.elc ..
+elisp_pkg_postinst() {
+       elisp-site-regen
+}
 
-               cd ..
-               rm -fr ${tempdir}
-       fi
+elisp_pkg_postrm() {
+       elisp-site-regen
 }
+
+EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_postinst pkg_postrm