/[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.40 Revision 1.48
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.40 2008/05/18 06:15:12 ulm Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/elisp-common.eclass,v 1.48 2008/10/05 13:56:08 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#
130# @ECLASS-VARIABLE: SITELISP 130# @ECLASS-VARIABLE: SITELISP
131# @DESCRIPTION: 131# @DESCRIPTION:
132# Directory where packages install Emacs Lisp files. 132# Directory where packages install Emacs Lisp files.
133SITELISP=/usr/share/emacs/site-lisp 133SITELISP=/usr/share/emacs/site-lisp
134 134
135# @ECLASS-VARIABLE: SITEETC
136# @DESCRIPTION:
135# Directory where packages install miscellaneous (not Lisp) files. 137# Directory where packages install miscellaneous (not Lisp) files.
136SITEETC=/usr/share/emacs/etc 138SITEETC=/usr/share/emacs/etc
137 139
138# @ECLASS-VARIABLE: SITEFILE 140# @ECLASS-VARIABLE: SITEFILE
139# @DESCRIPTION: 141# @DESCRIPTION:
140# Name of package's site-init file. 142# Name of package's site-init file.
141SITEFILE=50${PN}-gentoo.el 143SITEFILE=50${PN}-gentoo.el
142 144
145# @ECLASS-VARIABLE: EMACS
146# @DESCRIPTION:
147# Path of Emacs executable.
143EMACS=/usr/bin/emacs 148EMACS=/usr/bin/emacs
149
150# @ECLASS-VARIABLE: EMACSFLAGS
151# @DESCRIPTION:
152# Flags for executing Emacs in batch mode.
144# The following works for Emacs versions 18-23, don't change it. 153# These work for Emacs versions 18-23, so don't change them.
145EMACSFLAGS="-batch -q --no-site-file" 154EMACSFLAGS="-batch -q --no-site-file"
155
156# @ECLASS-VARIABLE: BYTECOMPFLAGS
157# @DESCRIPTION:
158# Emacs flags used for byte-compilation in elisp-compile().
159BYTECOMPFLAGS="-L ."
146 160
147# @FUNCTION: elisp-compile 161# @FUNCTION: elisp-compile
148# @USAGE: <list of elisp files> 162# @USAGE: <list of elisp files>
149# @DESCRIPTION: 163# @DESCRIPTION:
150# Byte-compile Emacs Lisp files. 164# Byte-compile Emacs Lisp files.
165#
166# This function uses GNU Emacs to byte-compile all ".el" specified by its
167# arguments. The resulting byte-code (".elc") files are placed in the same
168# directory as their corresponding source file.
169#
170# The current directory is added to the load-path. This will ensure that
171# interdependent Emacs Lisp files are visible between themselves, in case
172# they require or load one another.
151 173
152elisp-compile() { 174elisp-compile() {
153 ebegin "Compiling GNU Emacs Elisp files" 175 ebegin "Compiling GNU Emacs Elisp files"
154 ${EMACS} ${EMACSFLAGS} -f batch-byte-compile "$@" 176 ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@"
155 eend $? "batch-byte-compile failed" 177 eend $? "batch-byte-compile failed"
156} 178}
157 179
158# @FUNCTION: elisp-comp 180# #FUNCTION: elisp-comp
159# @USAGE: <list of elisp files> 181# #USAGE: <list of elisp files>
160# @DESCRIPTION: 182# #DESCRIPTION:
161# Byte-compile interdependent Emacs Lisp files. 183# Byte-compile interdependent Emacs Lisp files.
184# THIS FUNCTION IS DEPRECATED.
162# 185#
163# This function byte-compiles all ".el" files which are part of its 186# 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 187# arguments, using GNU Emacs, and puts the resulting ".elc" files into the
165# current directory, so disregarding the original directories used in ".el" 188# current directory, so disregarding the original directories used in ".el"
166# arguments. 189# arguments.
172elisp-comp() { 195elisp-comp() {
173 # Copyright 1995 Free Software Foundation, Inc. 196 # Copyright 1995 Free Software Foundation, Inc.
174 # Fran├žois Pinard <pinard@iro.umontreal.ca>, 1995. 197 # Fran├žois Pinard <pinard@iro.umontreal.ca>, 1995.
175 # Originally taken from GNU autotools. 198 # Originally taken from GNU autotools.
176 199
200 ewarn "Function elisp-comp is deprecated and may be removed in future."
201 ewarn "Please use function elisp-compile instead, or report a bug about"
202 ewarn "${CATEGORY}/${PF} at <http://bugs.gentoo.org/>."
203 echo
204
177 [ $# -gt 0 ] || return 1 205 [ $# -gt 0 ] || return 1
178 206
179 ebegin "Compiling GNU Emacs Elisp files" 207 ebegin "Compiling GNU Emacs Elisp files"
180 208
181 tempdir=elc.$$ 209 local tempdir=elc.$$
182 mkdir ${tempdir} 210 mkdir ${tempdir}
183 cp "$@" ${tempdir} 211 cp "$@" ${tempdir}
184 pushd ${tempdir} 212 pushd ${tempdir}
185 213
186 echo "(add-to-list 'load-path \"../\")" > script 214 echo "(add-to-list 'load-path \"../\")" > script
277 eend ${ret} "doins failed" 305 eend ${ret} "doins failed"
278} 306}
279 307
280# @FUNCTION: elisp-site-regen 308# @FUNCTION: elisp-site-regen
281# @DESCRIPTION: 309# @DESCRIPTION:
282# Regenerate site-gentoo.el file. The old location for site initialisation 310# Regenerate the site-gentoo.el file, based on packages' site initialisation
283# files of packages was /usr/share/emacs/site-lisp/. In December 2007 this 311# files in the /usr/share/emacs/site-lisp/site-gentoo.d/ directory.
284# has been changed to /usr/share/emacs/site-lisp/site-gentoo.d/. Remerge of 312#
285# packages with Emacs support is enough, the old location is still supported 313# Note: Before December 2007, site initialisation files were installed in
286# when generating the start-up file. 314# /usr/share/emacs/site-lisp/. For backwards compatibility, this location is
315# still supported when generating site-gentoo.el.
287 316
288elisp-site-regen() { 317elisp-site-regen() {
289 local i sf line obsolete 318 local i sf line firstrun obsolete
290 local -a sflist 319 local -a sflist
291 # Work around Paludis borkage: variable T is empty in pkg_postrm 320 # Work around Paludis borkage: variable T is empty in pkg_postrm
292 local tmpdir=${T:-$(mktemp -d)} 321 local tmpdir=${T:-$(mktemp -d)}
293 322
294 if [ ! -d "${ROOT}${SITELISP}" ]; then 323 if [ ! -d "${ROOT}${SITELISP}" ]; then
295 eerror "Directory ${SITELISP} does not exist" 324 eerror "Directory ${SITELISP} does not exist"
296 return 1 325 return 1
297 fi 326 fi
298 327
299 if [ ! -e "${ROOT}${SITELISP}"/site-gentoo.el ] \ 328 [ -e "${ROOT}${SITELISP}"/site-gentoo.el ] || firstrun=t
329
300 && [ ! -e "${ROOT}${SITELISP}"/site-start.el ]; then 330 if [ "${firstrun}" ] && [ ! -e "${ROOT}${SITELISP}"/site-start.el ]; then
301 einfo "Creating default ${SITELISP}/site-start.el ..." 331 einfo "Creating default ${SITELISP}/site-start.el ..."
302 cat <<-EOF >"${tmpdir}"/site-start.el 332 cat <<-EOF >"${tmpdir}"/site-start.el
303 ;;; site-start.el 333 ;;; site-start.el
304 334
305 ;;; Commentary: 335 ;;; Commentary:
315 EOF 345 EOF
316 fi 346 fi
317 347
318 einfon "Regenerating ${SITELISP}/site-gentoo.el ..." 348 einfon "Regenerating ${SITELISP}/site-gentoo.el ..."
319 349
320 # remove auxiliary file 350 # remove any auxiliary file (from previous run)
321 rm -f "${ROOT}${SITELISP}"/00site-gentoo.el 351 rm -f "${ROOT}${SITELISP}"/00site-gentoo.el
322 352
323 # set nullglob option, there may be a directory without matching files 353 # set nullglob option, there may be a directory without matching files
324 local old_shopts=$(shopt -p nullglob) 354 local old_shopts=$(shopt -p nullglob)
325 shopt -s nullglob 355 shopt -s nullglob
369 else 399 else
370 mv "${tmpdir}"/site-gentoo.el "${ROOT}${SITELISP}"/site-gentoo.el 400 mv "${tmpdir}"/site-gentoo.el "${ROOT}${SITELISP}"/site-gentoo.el
371 [ -f "${tmpdir}"/site-start.el ] \ 401 [ -f "${tmpdir}"/site-start.el ] \
372 && [ ! -e "${ROOT}${SITELISP}"/site-start.el ] \ 402 && [ ! -e "${ROOT}${SITELISP}"/site-start.el ] \
373 && mv "${tmpdir}"/site-start.el "${ROOT}${SITELISP}"/site-start.el 403 && mv "${tmpdir}"/site-start.el "${ROOT}${SITELISP}"/site-start.el
374 echo; einfo 404 echo
405 einfo "... ${#sflist[@]} site initialisation file(s) included."
406 fi
407
408 if [ "${firstrun}" ]; then
409 echo
410 while read line; do einfo "${line:- }"; done <<-EOF
411 All site initialisation for Gentoo-installed packages is added to
412 /usr/share/emacs/site-lisp/site-gentoo.el; site-start.el is not
413 managed by Gentoo. You are responsible for all maintenance of
414 site-start.el if there is such a file.
415
416 In order for this site initialisation to be loaded for all users
417 automatically, you can add a line like this:
418
419 (require 'site-gentoo)
420
421 to /usr/share/emacs/site-lisp/site-start.el. Alternatively, that line
422 can be added by individual users to their initialisation files, or,
423 for greater flexibility, users can load individual package-specific
424 initialisation files from /usr/share/emacs/site-lisp/site-gentoo.d/.
425 EOF
426 echo
427 fi
428
429 if [ "${obsolete}" ]; then
430 echo
431 while read line; do ewarn "${line}"; done <<-EOF
432 Site-initialisation files of Emacs packages are now installed in
433 /usr/share/emacs/site-lisp/site-gentoo.d/. We strongly recommend
434 that you use app-admin/emacs-updater to rebuild the installed
435 Emacs packages.
436 EOF
437
438 # Kludge for backwards compatibility: During pkg_postrm, old versions
439 # of this eclass (saved in the VDB) won't find packages' site-init
440 # files in the new location. So we copy them to an auxiliary file
441 # that is visible to old eclass versions.
375 for sf in "${sflist[@]##*/}"; do 442 for sf in "${sflist[@]}"; do
376 einfo " Adding ${sf} ..." 443 [ "${sf%/*}" = "${ROOT}${SITELISP}/site-gentoo.d" ] \
444 && cat "${sf}" >>"${ROOT}${SITELISP}"/00site-gentoo.el
377 done 445 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/. We strongly recommend
403 that you use /usr/sbin/emacs-updater to rebuild the installed
404 Emacs packages.
405 EOF
406 echo
407 fi
408 fi 446 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 447
419 # cleanup 448 # cleanup
420 rm -f "${tmpdir}"/site-{gentoo,start}.el 449 rm -f "${tmpdir}"/site-{gentoo,start}.el
450
451 return 0
421} 452}

Legend:
Removed from v.1.40  
changed lines
  Added in v.1.48

  ViewVC Help
Powered by ViewVC 1.1.20