/[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.36 Revision 1.45
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.36 2008/02/22 09:30:40 ulm Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/elisp-common.eclass,v 1.45 2008/09/01 10:45:26 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.
162# 182#
163# This function byte-compiles all ".el" files which are part of its 183# 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 184# arguments, using GNU Emacs, and puts the resulting ".elc" files into the
165# current directory, so disregarding the original directories used in ".el" 185# current directory, so disregarding the original directories used in ".el"
176 196
177 [ $# -gt 0 ] || return 1 197 [ $# -gt 0 ] || return 1
178 198
179 ebegin "Compiling GNU Emacs Elisp files" 199 ebegin "Compiling GNU Emacs Elisp files"
180 200
181 tempdir=elc.$$ 201 local tempdir=elc.$$
182 mkdir ${tempdir} 202 mkdir ${tempdir}
183 cp "$@" ${tempdir} 203 cp "$@" ${tempdir}
184 pushd ${tempdir} 204 pushd ${tempdir}
185 205
186 echo "(add-to-list 'load-path \"../\")" > script 206 echo "(add-to-list 'load-path \"../\")" > script
198# @FUNCTION: elisp-emacs-version 218# @FUNCTION: elisp-emacs-version
199# @DESCRIPTION: 219# @DESCRIPTION:
200# Output version of currently active Emacs. 220# Output version of currently active Emacs.
201 221
202elisp-emacs-version() { 222elisp-emacs-version() {
203 # The following will work for at least versions 18--23. 223 # The following will work for at least versions 18-23.
204 echo "(princ emacs-version)" >"${T}"/emacs-version.el 224 echo "(princ emacs-version)" >"${T}"/emacs-version.el
205 ${EMACS} ${EMACSFLAGS} -l "${T}"/emacs-version.el 225 ${EMACS} ${EMACSFLAGS} -l "${T}"/emacs-version.el
226 rm -f "${T}"/emacs-version.el
206} 227}
207 228
208# @FUNCTION: elisp-make-autoload-file 229# @FUNCTION: elisp-make-autoload-file
209# @USAGE: [output file] [list of directories] 230# @USAGE: [output file] [list of directories]
210# @DESCRIPTION: 231# @DESCRIPTION:
260# @USAGE: <site-init file> [subdirectory] 281# @USAGE: <site-init file> [subdirectory]
261# @DESCRIPTION: 282# @DESCRIPTION:
262# Install Emacs site-init file in SITELISP directory. 283# Install Emacs site-init file in SITELISP directory.
263 284
264elisp-site-file-install() { 285elisp-site-file-install() {
265 local sf="${1##*/}" my_pn="${2:-${PN}}" 286 local sf="${T}/${1##*/}" my_pn="${2:-${PN}}" ret
266 ebegin "Installing site initialisation file for GNU Emacs" 287 ebegin "Installing site initialisation file for GNU Emacs"
267 cp "$1" "${T}/${sf}" 288 cp "$1" "${sf}"
268 sed -i -e "s:@SITELISP@:${SITELISP}/${my_pn}:g" \ 289 sed -i -e "s:@SITELISP@:${SITELISP}/${my_pn}:g" \
269 -e "s:@SITEETC@:${SITEETC}/${my_pn}:g" "${T}/${sf}" 290 -e "s:@SITEETC@:${SITEETC}/${my_pn}:g" "${sf}"
270 ( # subshell to avoid pollution of calling environment 291 ( # subshell to avoid pollution of calling environment
271 insinto "${SITELISP}/site-gentoo.d" 292 insinto "${SITELISP}/site-gentoo.d"
272 doins "${T}/${sf}" 293 doins "${sf}"
273 ) 294 )
295 ret=$?
296 rm -f "${sf}"
274 eend $? "doins failed" 297 eend ${ret} "doins failed"
275} 298}
276 299
277# @FUNCTION: elisp-site-regen 300# @FUNCTION: elisp-site-regen
278# @DESCRIPTION: 301# @DESCRIPTION:
279# Regenerate site-gentoo.el file. The old location for site initialisation 302# Regenerate site-gentoo.el file. The old location for site initialisation
283# when generating the start-up file. 306# when generating the start-up file.
284 307
285elisp-site-regen() { 308elisp-site-regen() {
286 local i sf line obsolete 309 local i sf line obsolete
287 local -a sflist 310 local -a sflist
311 # Work around Paludis borkage: variable T is empty in pkg_postrm
312 local tmpdir=${T:-$(mktemp -d)}
313
314 if [ ! -d "${ROOT}${SITELISP}" ]; then
315 eerror "Directory ${SITELISP} does not exist"
316 return 1
317 fi
288 318
289 if [ ! -e "${ROOT}${SITELISP}"/site-gentoo.el ] \ 319 if [ ! -e "${ROOT}${SITELISP}"/site-gentoo.el ] \
290 && [ ! -e "${ROOT}${SITELISP}"/site-start.el ]; then 320 && [ ! -e "${ROOT}${SITELISP}"/site-start.el ]; then
291 einfo "Creating default ${SITELISP}/site-start.el ..." 321 einfo "Creating default ${SITELISP}/site-start.el ..."
292 cat <<-EOF >"${T}"/site-start.el 322 cat <<-EOF >"${tmpdir}"/site-start.el
293 ;;; site-start.el 323 ;;; site-start.el
294 324
295 ;;; Commentary: 325 ;;; Commentary:
296 ;; This default site startup file is installed by elisp-common.eclass. 326 ;; This default site startup file is installed by elisp-common.eclass.
297 ;; You may replace this file by your own site initialisation, or even 327 ;; You may replace this file by your own site initialisation, or even
305 EOF 335 EOF
306 fi 336 fi
307 337
308 einfon "Regenerating ${SITELISP}/site-gentoo.el ..." 338 einfon "Regenerating ${SITELISP}/site-gentoo.el ..."
309 339
310 # remove auxiliary file 340 # remove any auxiliary file (from previous run)
311 rm -f "${ROOT}${SITELISP}"/00site-gentoo.el 341 rm -f "${ROOT}${SITELISP}"/00site-gentoo.el
312 342
313 # set nullglob option, there may be a directory without matching files 343 # set nullglob option, there may be a directory without matching files
314 local old_shopts=$(shopt -p nullglob) 344 local old_shopts=$(shopt -p nullglob)
315 shopt -s nullglob 345 shopt -s nullglob
328 [ "${sf%/*}" = "${ROOT}${SITELISP}" ] && obsolete=t 358 [ "${sf%/*}" = "${ROOT}${SITELISP}" ] && obsolete=t
329 done 359 done
330 360
331 eval "${old_shopts}" 361 eval "${old_shopts}"
332 362
333 cat <<-EOF >"${T}"/site-gentoo.el 363 cat <<-EOF >"${tmpdir}"/site-gentoo.el
334 ;;; site-gentoo.el --- site initialisation for Gentoo-installed packages 364 ;;; site-gentoo.el --- site initialisation for Gentoo-installed packages
335 365
336 ;;; Commentary: 366 ;;; Commentary:
337 ;; Automatically generated by elisp-common.eclass 367 ;; Automatically generated by elisp-common.eclass
338 ;; DO NOT EDIT THIS FILE 368 ;; DO NOT EDIT THIS FILE
339 369
340 ;;; Code: 370 ;;; Code:
341 EOF 371 EOF
342 cat "${sflist[@]}" </dev/null >>"${T}"/site-gentoo.el 372 cat "${sflist[@]}" </dev/null >>"${tmpdir}"/site-gentoo.el
343 cat <<-EOF >>"${T}"/site-gentoo.el 373 cat <<-EOF >>"${tmpdir}"/site-gentoo.el
344 374
345 (provide 'site-gentoo) 375 (provide 'site-gentoo)
346 376
347 ;; Local Variables: 377 ;; Local Variables:
348 ;; no-byte-compile: t 378 ;; no-byte-compile: t
349 ;; End: 379 ;; End:
350 ;;; site-gentoo.el ends here 380 ;;; site-gentoo.el ends here
351 EOF 381 EOF
352 382
353 if cmp -s "${ROOT}${SITELISP}"/site-gentoo.el "${T}"/site-gentoo.el; then 383 if cmp -s "${ROOT}${SITELISP}"/site-gentoo.el "${tmpdir}"/site-gentoo.el
384 then
354 # This prevents outputting unnecessary text when there 385 # This prevents outputting unnecessary text when there
355 # was actually no change. 386 # was actually no change.
356 # A case is a remerge where we have doubled output. 387 # A case is a remerge where we have doubled output.
357 echo " no changes." 388 echo " no changes."
358 else 389 else
359 mv "${T}"/site-gentoo.el "${ROOT}${SITELISP}"/site-gentoo.el 390 mv "${tmpdir}"/site-gentoo.el "${ROOT}${SITELISP}"/site-gentoo.el
360 [ -f "${T}"/site-start.el ] \ 391 [ -f "${tmpdir}"/site-start.el ] \
361 && [ ! -e "${ROOT}${SITELISP}"/site-start.el ] \ 392 && [ ! -e "${ROOT}${SITELISP}"/site-start.el ] \
362 && mv "${T}"/site-start.el "${ROOT}${SITELISP}"/site-start.el 393 && mv "${tmpdir}"/site-start.el "${ROOT}${SITELISP}"/site-start.el
363 echo; einfo 394 echo; einfo
364 for sf in "${sflist[@]##*/}"; do 395 for sf in "${sflist[@]##*/}"; do
365 einfo " Adding ${sf} ..." 396 einfo " Adding ${sf} ..."
366 done 397 done
367 einfo "Regenerated ${SITELISP}/site-gentoo.el." 398 einfo "Regenerated ${SITELISP}/site-gentoo.el."
368 399
369 echo 400 echo
370 while read line; do einfo "${line}"; done <<EOF 401 while read line; do einfo "${line:- }"; done <<-EOF
371All site initialisation for Gentoo-installed packages is added to 402 All site initialisation for Gentoo-installed packages is added to
372/usr/share/emacs/site-lisp/site-gentoo.el; site-start.el is no longer 403 /usr/share/emacs/site-lisp/site-gentoo.el; site-start.el is not
373managed by Gentoo. You are responsible for all maintenance of 404 managed by Gentoo. You are responsible for all maintenance of
374site-start.el if there is such a file. 405 site-start.el if there is such a file.
375 406
376In order for this site initialisation to be loaded for all users 407 In order for this site initialisation to be loaded for all users
377automatically, you can add a line like this: 408 automatically, you can add a line like this:
378 409
379 (require 'site-gentoo) 410 (require 'site-gentoo)
380 411
381to /usr/share/emacs/site-lisp/site-start.el. Alternatively, that line 412 to /usr/share/emacs/site-lisp/site-start.el. Alternatively, that line
382can be added by individual users to their initialisation files, or, 413 can be added by individual users to their initialisation files, or,
383for greater flexibility, users can load individual package-specific 414 for greater flexibility, users can load individual package-specific
384initialisation files from /usr/share/emacs/site-lisp/site-gentoo.d/. 415 initialisation files from /usr/share/emacs/site-lisp/site-gentoo.d/.
385EOF 416 EOF
386 echo 417 echo
387
388 if [ "${obsolete}" ]; then
389 while read line; do ewarn "${line}"; done <<-EOF
390 Site-initialisation files of Emacs packages are now installed in
391 /usr/share/emacs/site-lisp/site-gentoo.d/. You may consider using
392 /usr/sbin/emacs-updater to rebuild the installed Emacs packages.
393 However, the old location is still supported.
394 EOF
395 echo
396 fi
397 fi 418 fi
398 419
420 if [ "${obsolete}" ]; then
421 while read line; do ewarn "${line}"; done <<-EOF
422 Site-initialisation files of Emacs packages are now installed in
423 /usr/share/emacs/site-lisp/site-gentoo.d/. We strongly recommend
424 that you use /usr/sbin/emacs-updater to rebuild the installed
425 Emacs packages.
426 EOF
427 echo
428
399 # Kludge for backwards compatibility: During pkg_postrm, old versions 429 # Kludge for backwards compatibility: During pkg_postrm, old versions
400 # of this eclass (saved in the VDB) won't find packages' site-init files 430 # of this eclass (saved in the VDB) won't find packages' site-init
401 # in the new location. So we copy them to an auxiliary file that is 431 # files in the new location. So we copy them to an auxiliary file
402 # visible to old eclass versions. 432 # that is visible to old eclass versions.
403 for sf in "${sflist[@]}"; do 433 for sf in "${sflist[@]}"; do
404 [ "${sf%/*}" = "${ROOT}${SITELISP}/site-gentoo.d" ] \ 434 [ "${sf%/*}" = "${ROOT}${SITELISP}/site-gentoo.d" ] \
405 && cat "${sf}" >>"${ROOT}${SITELISP}"/00site-gentoo.el 435 && cat "${sf}" >>"${ROOT}${SITELISP}"/00site-gentoo.el
406 done 436 done
437 fi
438
439 # cleanup
440 rm -f "${tmpdir}"/site-{gentoo,start}.el
441
442 return 0
407} 443}

Legend:
Removed from v.1.36  
changed lines
  Added in v.1.45

  ViewVC Help
Powered by ViewVC 1.1.20