/[gentoo-x86]/eclass/elisp-common.eclass
Gentoo

Diff of /eclass/elisp-common.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.38 Revision 1.47
1# Copyright 1999-2008 Gentoo Foundation 1# Copyright 1999-2008 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/elisp-common.eclass,v 1.38 2008/04/04 18:11:28 ulm Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/elisp-common.eclass,v 1.47 2008/09/24 09:47:04 ulm Exp $
4# 4#
5# Copyright 2002-2004 Matthew Kennedy <mkennedy@gentoo.org> 5# Copyright 2002-2004 Matthew Kennedy <mkennedy@gentoo.org>
6# Copyright 2003 Jeremy Maitin-Shepard <jbms@attbi.com> 6# Copyright 2003 Jeremy Maitin-Shepard <jbms@attbi.com>
7# Copyright 2004-2005 Mamoru Komachi <usata@gentoo.org> 7# Copyright 2004-2005 Mamoru Komachi <usata@gentoo.org>
8# Copyright 2007-2008 Christian Faulhammer <opfer@gentoo.org> 8# Copyright 2007-2008 Christian Faulhammer <opfer@gentoo.org>
31# 31#
32# .SS 32# .SS
33# src_compile() usage: 33# src_compile() usage:
34# 34#
35# An elisp file is compiled by the elisp-compile() function defined here and 35# An elisp file is compiled by the elisp-compile() function defined here and
36# simply takes the source files as arguments. 36# simply takes the source files as arguments. The case of interdependent
37# elisp files is also supported, since the current directory is added to the
38# load-path which makes sure that all files are loadable.
37# 39#
38# elisp-compile *.el || die "elisp-compile failed" 40# elisp-compile *.el || die "elisp-compile failed"
39# 41#
40# In the case of interdependent elisp files, you can use the elisp-comp() 42# Formerly, function elisp-comp() was used for compilation of interdependent
41# function which makes sure all files are loadable. 43# elisp files. This usage is considered as obsolete.
42#
43# elisp-comp *.el || die "elisp-comp failed"
44# 44#
45# Function elisp-make-autoload-file() can be used to generate a file with 45# Function elisp-make-autoload-file() can be used to generate a file with
46# autoload definitions for the lisp functions. It takes the output file name 46# autoload definitions for the lisp functions. It takes the output file name
47# (default: "${PN}-autoloads.el") and a list of directories (default: working 47# (default: "${PN}-autoloads.el") and a list of directories (default: working
48# directory) as its arguments. Use of this function requires that the elisp 48# directory) as its arguments. Use of this function requires that the elisp
49# source files contain magic ";;;###autoload" comments. See the Emacs Lisp 49# source files contain magic ";;;###autoload" comments. See the Emacs Lisp
50# Reference Manual (node "Autoload") for a detailed explanation. 50# Reference Manual (node "Autoload") for a detailed explanation.
51# 51#
52# .SS 52# .SS
53# src_install() usage: 53# src_install() usage:
54# 54#
138# @ECLASS-VARIABLE: SITEFILE 138# @ECLASS-VARIABLE: SITEFILE
139# @DESCRIPTION: 139# @DESCRIPTION:
140# Name of package's site-init file. 140# Name of package's site-init file.
141SITEFILE=50${PN}-gentoo.el 141SITEFILE=50${PN}-gentoo.el
142 142
143# @ECLASS-VARIABLE: EMACS
144# @DESCRIPTION:
145# Path of Emacs executable.
143EMACS=/usr/bin/emacs 146EMACS=/usr/bin/emacs
147
148# @ECLASS-VARIABLE: EMACSFLAGS
149# @DESCRIPTION:
150# Flags for executing Emacs in batch mode.
144# The following works for Emacs versions 18-23, don't change it. 151# These work for Emacs versions 18-23, so don't change them.
145EMACSFLAGS="-batch -q --no-site-file" 152EMACSFLAGS="-batch -q --no-site-file"
153
154# @ECLASS-VARIABLE: BYTECOMPFLAGS
155# @DESCRIPTION:
156# Emacs flags used for byte-compilation in elisp-compile().
157BYTECOMPFLAGS="-L ."
146 158
147# @FUNCTION: elisp-compile 159# @FUNCTION: elisp-compile
148# @USAGE: <list of elisp files> 160# @USAGE: <list of elisp files>
149# @DESCRIPTION: 161# @DESCRIPTION:
150# Byte-compile Emacs Lisp files. 162# Byte-compile Emacs Lisp files.
163#
164# This function uses GNU Emacs to byte-compile all ".el" specified by its
165# arguments. The resulting byte-code (".elc") files are placed in the same
166# directory as their corresponding source file.
167#
168# The current directory is added to the load-path. This will ensure that
169# interdependent Emacs Lisp files are visible between themselves, in case
170# they require or load one another.
151 171
152elisp-compile() { 172elisp-compile() {
153 ebegin "Compiling GNU Emacs Elisp files" 173 ebegin "Compiling GNU Emacs Elisp files"
154 ${EMACS} ${EMACSFLAGS} -f batch-byte-compile "$@" 174 ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@"
155 eend $? "batch-byte-compile failed" 175 eend $? "batch-byte-compile failed"
156} 176}
157 177
158# @FUNCTION: elisp-comp 178# #FUNCTION: elisp-comp
159# @USAGE: <list of elisp files> 179# #USAGE: <list of elisp files>
160# @DESCRIPTION: 180# #DESCRIPTION:
161# Byte-compile interdependent Emacs Lisp files. 181# Byte-compile interdependent Emacs Lisp files.
182# THIS FUNCTION IS DEPRECATED.
162# 183#
163# This function byte-compiles all ".el" files which are part of its 184# This function byte-compiles all ".el" files which are part of its
164# arguments, using GNU Emacs, and puts the resulting ".elc" files into the 185# arguments, using GNU Emacs, and puts the resulting ".elc" files into the
165# current directory, so disregarding the original directories used in ".el" 186# current directory, so disregarding the original directories used in ".el"
166# arguments. 187# arguments.
172elisp-comp() { 193elisp-comp() {
173 # Copyright 1995 Free Software Foundation, Inc. 194 # Copyright 1995 Free Software Foundation, Inc.
174 # Fran├žois Pinard <pinard@iro.umontreal.ca>, 1995. 195 # Fran├žois Pinard <pinard@iro.umontreal.ca>, 1995.
175 # Originally taken from GNU autotools. 196 # Originally taken from GNU autotools.
176 197
198 ewarn "Function elisp-comp is deprecated and may be removed in future."
199 ewarn "Please use function elisp-compile instead, or report a bug about"
200 ewarn "${CATEGORY}/${PF} at <http://bugs.gentoo.org/>."
201 echo
202
177 [ $# -gt 0 ] || return 1 203 [ $# -gt 0 ] || return 1
178 204
179 ebegin "Compiling GNU Emacs Elisp files" 205 ebegin "Compiling GNU Emacs Elisp files"
180 206
181 tempdir=elc.$$ 207 local tempdir=elc.$$
182 mkdir ${tempdir} 208 mkdir ${tempdir}
183 cp "$@" ${tempdir} 209 cp "$@" ${tempdir}
184 pushd ${tempdir} 210 pushd ${tempdir}
185 211
186 echo "(add-to-list 'load-path \"../\")" > script 212 echo "(add-to-list 'load-path \"../\")" > script
284# has been changed to /usr/share/emacs/site-lisp/site-gentoo.d/. Remerge of 310# has been changed to /usr/share/emacs/site-lisp/site-gentoo.d/. Remerge of
285# packages with Emacs support is enough, the old location is still supported 311# packages with Emacs support is enough, the old location is still supported
286# when generating the start-up file. 312# when generating the start-up file.
287 313
288elisp-site-regen() { 314elisp-site-regen() {
289 local i sf line obsolete 315 local i sf line firstrun obsolete
290 local -a sflist 316 local -a sflist
291 # Work around Paludis borkage: variable T is empty in pkg_postrm 317 # Work around Paludis borkage: variable T is empty in pkg_postrm
292 local tmpdir=${T:-/tmp} 318 local tmpdir=${T:-$(mktemp -d)}
293 319
294 if [ ! -d "${ROOT}${SITELISP}" ]; then 320 if [ ! -d "${ROOT}${SITELISP}" ]; then
295 eerror "Directory ${SITELISP} does not exist" 321 eerror "Directory ${SITELISP} does not exist"
296 return 1 322 return 1
297 fi 323 fi
298 324
299 if [ ! -e "${ROOT}${SITELISP}"/site-gentoo.el ] \ 325 [ -e "${ROOT}${SITELISP}"/site-gentoo.el ] || firstrun=t
326
300 && [ ! -e "${ROOT}${SITELISP}"/site-start.el ]; then 327 if [ "${firstrun}" ] && [ ! -e "${ROOT}${SITELISP}"/site-start.el ]; then
301 einfo "Creating default ${SITELISP}/site-start.el ..." 328 einfo "Creating default ${SITELISP}/site-start.el ..."
302 cat <<-EOF >"${tmpdir}"/site-start.el 329 cat <<-EOF >"${tmpdir}"/site-start.el
303 ;;; site-start.el 330 ;;; site-start.el
304 331
305 ;;; Commentary: 332 ;;; Commentary:
315 EOF 342 EOF
316 fi 343 fi
317 344
318 einfon "Regenerating ${SITELISP}/site-gentoo.el ..." 345 einfon "Regenerating ${SITELISP}/site-gentoo.el ..."
319 346
320 # remove auxiliary file 347 # remove any auxiliary file (from previous run)
321 rm -f "${ROOT}${SITELISP}"/00site-gentoo.el 348 rm -f "${ROOT}${SITELISP}"/00site-gentoo.el
322 349
323 # set nullglob option, there may be a directory without matching files 350 # set nullglob option, there may be a directory without matching files
324 local old_shopts=$(shopt -p nullglob) 351 local old_shopts=$(shopt -p nullglob)
325 shopt -s nullglob 352 shopt -s nullglob
369 else 396 else
370 mv "${tmpdir}"/site-gentoo.el "${ROOT}${SITELISP}"/site-gentoo.el 397 mv "${tmpdir}"/site-gentoo.el "${ROOT}${SITELISP}"/site-gentoo.el
371 [ -f "${tmpdir}"/site-start.el ] \ 398 [ -f "${tmpdir}"/site-start.el ] \
372 && [ ! -e "${ROOT}${SITELISP}"/site-start.el ] \ 399 && [ ! -e "${ROOT}${SITELISP}"/site-start.el ] \
373 && mv "${tmpdir}"/site-start.el "${ROOT}${SITELISP}"/site-start.el 400 && mv "${tmpdir}"/site-start.el "${ROOT}${SITELISP}"/site-start.el
374 echo; einfo 401 echo
402 einfo "... ${#sflist[@]} site initialisation file(s) included."
403 fi
404
405 if [ "${firstrun}" ]; then
406 echo
407 while read line; do einfo "${line:- }"; done <<-EOF
408 All site initialisation for Gentoo-installed packages is added to
409 /usr/share/emacs/site-lisp/site-gentoo.el; site-start.el is not
410 managed by Gentoo. You are responsible for all maintenance of
411 site-start.el if there is such a file.
412
413 In order for this site initialisation to be loaded for all users
414 automatically, you can add a line like this:
415
416 (require 'site-gentoo)
417
418 to /usr/share/emacs/site-lisp/site-start.el. Alternatively, that line
419 can be added by individual users to their initialisation files, or,
420 for greater flexibility, users can load individual package-specific
421 initialisation files from /usr/share/emacs/site-lisp/site-gentoo.d/.
422 EOF
423 echo
424 fi
425
426 if [ "${obsolete}" ]; then
427 echo
428 while read line; do ewarn "${line}"; done <<-EOF
429 Site-initialisation files of Emacs packages are now installed in
430 /usr/share/emacs/site-lisp/site-gentoo.d/. We strongly recommend
431 that you use app-admin/emacs-updater to rebuild the installed
432 Emacs packages.
433 EOF
434
435 # Kludge for backwards compatibility: During pkg_postrm, old versions
436 # of this eclass (saved in the VDB) won't find packages' site-init
437 # files in the new location. So we copy them to an auxiliary file
438 # that is visible to old eclass versions.
375 for sf in "${sflist[@]##*/}"; do 439 for sf in "${sflist[@]}"; do
376 einfo " Adding ${sf} ..." 440 [ "${sf%/*}" = "${ROOT}${SITELISP}/site-gentoo.d" ] \
441 && cat "${sf}" >>"${ROOT}${SITELISP}"/00site-gentoo.el
377 done 442 done
378 einfo "Regenerated ${SITELISP}/site-gentoo.el."
379
380 echo
381 while read line; do einfo "${line}"; done <<EOF
382All site initialisation for Gentoo-installed packages is added to
383/usr/share/emacs/site-lisp/site-gentoo.el; site-start.el is no longer
384managed by Gentoo. You are responsible for all maintenance of
385site-start.el if there is such a file.
386
387In order for this site initialisation to be loaded for all users
388automatically, you can add a line like this:
389
390 (require 'site-gentoo)
391
392to /usr/share/emacs/site-lisp/site-start.el. Alternatively, that line
393can be added by individual users to their initialisation files, or,
394for greater flexibility, users can load individual package-specific
395initialisation files from /usr/share/emacs/site-lisp/site-gentoo.d/.
396EOF
397 echo
398
399 if [ "${obsolete}" ]; then
400 while read line; do ewarn "${line}"; done <<-EOF
401 Site-initialisation files of Emacs packages are now installed in
402 /usr/share/emacs/site-lisp/site-gentoo.d/. You may consider using
403 /usr/sbin/emacs-updater to rebuild the installed Emacs packages.
404 However, the old location is still supported.
405 EOF
406 echo
407 fi
408 fi 443 fi
409
410 # Kludge for backwards compatibility: During pkg_postrm, old versions
411 # of this eclass (saved in the VDB) won't find packages' site-init files
412 # in the new location. So we copy them to an auxiliary file that is
413 # visible to old eclass versions.
414 for sf in "${sflist[@]}"; do
415 [ "${sf%/*}" = "${ROOT}${SITELISP}/site-gentoo.d" ] \
416 && cat "${sf}" >>"${ROOT}${SITELISP}"/00site-gentoo.el
417 done
418 444
419 # cleanup 445 # cleanup
420 rm -f "${tmpdir}"/site-{gentoo,start}.el 446 rm -f "${tmpdir}"/site-{gentoo,start}.el
447
448 return 0
421} 449}

Legend:
Removed from v.1.38  
changed lines
  Added in v.1.47

  ViewVC Help
Powered by ViewVC 1.1.20