| 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.43 2008/08/27 06:53:41 ulm Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/elisp-common.eclass,v 1.52 2008/11/24 14:21: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> |
| … | |
… | |
| 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. The case of interdependent |
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 |
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. |
38 | # load-path which makes sure that all files are loadable. |
| 39 | # |
39 | # |
| 40 | # elisp-compile *.el || die "elisp-compile failed" |
40 | # elisp-compile *.el || die |
| 41 | # |
41 | # |
| 42 | # Formerly, function elisp-comp() was used for compilation of interdependent |
42 | # Formerly, function elisp-comp() was used for compilation of interdependent |
| 43 | # elisp files. This usage is considered as obsolete. |
43 | # elisp files. This usage is considered as obsolete. |
| 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 |
| … | |
… | |
| 57 | # of elisp-install(). The following parameters are the files to be put in |
57 | # of elisp-install(). The following parameters are the files to be put in |
| 58 | # that directory. Usually the subdirectory should be ${PN}, you can choose |
58 | # that directory. Usually the subdirectory should be ${PN}, you can choose |
| 59 | # something else, but remember to tell elisp-site-file-install() (see below) |
59 | # something else, but remember to tell elisp-site-file-install() (see below) |
| 60 | # the change, as it defaults to ${PN}. |
60 | # the change, as it defaults to ${PN}. |
| 61 | # |
61 | # |
| 62 | # elisp-install ${PN} *.el *.elc || die "elisp-install failed" |
62 | # elisp-install ${PN} *.el *.elc || die |
| 63 | # |
63 | # |
| 64 | # To let the Emacs support be activated by Emacs on startup, you need |
64 | # To let the Emacs support be activated by Emacs on startup, you need |
| 65 | # to provide a site file (shipped in ${FILESDIR}) which contains the startup |
65 | # to provide a site file (shipped in ${FILESDIR}) which contains the startup |
| 66 | # code (have a look in the documentation of your software). Normally this |
66 | # code (have a look in the documentation of your software). Normally this |
| 67 | # would look like this: |
67 | # would look like this: |
| … | |
… | |
| 84 | # editor as they are loaded on every startup. When having a lot of Emacs |
84 | # editor as they are loaded on every startup. When having a lot of Emacs |
| 85 | # support files, users may be annoyed by the start-up time. Also avoid |
85 | # support files, users may be annoyed by the start-up time. Also avoid |
| 86 | # keybindings as they might interfere with the user's settings. Give a hint |
86 | # keybindings as they might interfere with the user's settings. Give a hint |
| 87 | # in pkg_postinst(), which should be enough. |
87 | # in pkg_postinst(), which should be enough. |
| 88 | # |
88 | # |
| 89 | # The naming scheme for this site file is "[0-9][0-9]*-gentoo.el", where the |
89 | # The naming scheme for this site-init file matches the shell pattern |
| 90 | # two digits at the beginning define the loading order. So if you depend on |
90 | # "[1-8][0-9]*-gentoo.el", where the two digits at the beginning define the |
|
|
91 | # loading order (numbers below 10 or above 89 are reserved for internal use). |
| 91 | # another Emacs package, your site file's number must be higher! |
92 | # So if you depend on another Emacs package, your site file's number must be |
|
|
93 | # higher! |
| 92 | # |
94 | # |
| 93 | # Best practice is to define a SITEFILE variable in the global scope of your |
95 | # Best practice is to define a SITEFILE variable in the global scope of your |
| 94 | # ebuild (right after DEPEND e.g.): |
96 | # ebuild (e.g., right after DEPEND): |
| 95 | # |
97 | # |
| 96 | # SITEFILE=50${PN}-gentoo.el |
98 | # SITEFILE=50${PN}-gentoo.el |
| 97 | # |
99 | # |
| 98 | # Which is then installed by |
100 | # Which is then installed by |
| 99 | # |
101 | # |
| … | |
… | |
| 130 | # @ECLASS-VARIABLE: SITELISP |
132 | # @ECLASS-VARIABLE: SITELISP |
| 131 | # @DESCRIPTION: |
133 | # @DESCRIPTION: |
| 132 | # Directory where packages install Emacs Lisp files. |
134 | # Directory where packages install Emacs Lisp files. |
| 133 | SITELISP=/usr/share/emacs/site-lisp |
135 | SITELISP=/usr/share/emacs/site-lisp |
| 134 | |
136 | |
|
|
137 | # @ECLASS-VARIABLE: SITEETC |
|
|
138 | # @DESCRIPTION: |
| 135 | # Directory where packages install miscellaneous (not Lisp) files. |
139 | # Directory where packages install miscellaneous (not Lisp) files. |
| 136 | SITEETC=/usr/share/emacs/etc |
140 | SITEETC=/usr/share/emacs/etc |
| 137 | |
|
|
| 138 | # @ECLASS-VARIABLE: SITEFILE |
|
|
| 139 | # @DESCRIPTION: |
|
|
| 140 | # Name of package's site-init file. |
|
|
| 141 | SITEFILE=50${PN}-gentoo.el |
|
|
| 142 | |
141 | |
| 143 | # @ECLASS-VARIABLE: EMACS |
142 | # @ECLASS-VARIABLE: EMACS |
| 144 | # @DESCRIPTION: |
143 | # @DESCRIPTION: |
| 145 | # Path of Emacs executable. |
144 | # Path of Emacs executable. |
| 146 | EMACS=/usr/bin/emacs |
145 | EMACS=/usr/bin/emacs |
| … | |
… | |
| 170 | # they require or load one another. |
169 | # they require or load one another. |
| 171 | |
170 | |
| 172 | elisp-compile() { |
171 | elisp-compile() { |
| 173 | ebegin "Compiling GNU Emacs Elisp files" |
172 | ebegin "Compiling GNU Emacs Elisp files" |
| 174 | ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@" |
173 | ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@" |
| 175 | eend $? "batch-byte-compile failed" |
174 | eend $? "elisp-compile: batch-byte-compile failed" |
| 176 | } |
175 | } |
| 177 | |
176 | |
| 178 | # @FUNCTION: elisp-comp |
177 | # #FUNCTION: elisp-comp |
| 179 | # @USAGE: <list of elisp files> |
178 | # #USAGE: <list of elisp files> |
| 180 | # @DESCRIPTION: |
179 | # #DESCRIPTION: |
| 181 | # Byte-compile interdependent Emacs Lisp files. |
180 | # Byte-compile interdependent Emacs Lisp files. |
|
|
181 | # THIS FUNCTION IS DEPRECATED. |
| 182 | # |
182 | # |
| 183 | # 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 |
| 184 | # 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 |
| 185 | # current directory, so disregarding the original directories used in ".el" |
185 | # current directory, so disregarding the original directories used in ".el" |
| 186 | # arguments. |
186 | # arguments. |
| … | |
… | |
| 192 | elisp-comp() { |
192 | elisp-comp() { |
| 193 | # Copyright 1995 Free Software Foundation, Inc. |
193 | # Copyright 1995 Free Software Foundation, Inc. |
| 194 | # François Pinard <pinard@iro.umontreal.ca>, 1995. |
194 | # François Pinard <pinard@iro.umontreal.ca>, 1995. |
| 195 | # Originally taken from GNU autotools. |
195 | # Originally taken from GNU autotools. |
| 196 | |
196 | |
|
|
197 | ewarn "Function elisp-comp is deprecated and may be removed in future." |
|
|
198 | ewarn "Please use function elisp-compile instead, or report a bug about" |
|
|
199 | ewarn "${CATEGORY}/${PF} at <http://bugs.gentoo.org/>." |
|
|
200 | echo |
|
|
201 | |
| 197 | [ $# -gt 0 ] || return 1 |
202 | [ $# -gt 0 ] || return 1 |
| 198 | |
203 | |
| 199 | ebegin "Compiling GNU Emacs Elisp files" |
204 | ebegin "Compiling GNU Emacs Elisp files" |
| 200 | |
205 | |
| 201 | tempdir=elc.$$ |
206 | local tempdir=elc.$$ |
| 202 | mkdir ${tempdir} |
207 | mkdir ${tempdir} |
| 203 | cp "$@" ${tempdir} |
208 | cp "$@" ${tempdir} |
| 204 | pushd ${tempdir} |
209 | pushd ${tempdir} |
| 205 | |
210 | |
| 206 | echo "(add-to-list 'load-path \"../\")" > script |
211 | echo "(add-to-list 'load-path \"../\")" > script |
| … | |
… | |
| 209 | mv *.elc .. |
214 | mv *.elc .. |
| 210 | |
215 | |
| 211 | popd |
216 | popd |
| 212 | rm -fr ${tempdir} |
217 | rm -fr ${tempdir} |
| 213 | |
218 | |
| 214 | eend ${ret} "batch-byte-compile failed" |
219 | eend ${ret} "elisp-comp: batch-byte-compile failed" |
| 215 | return ${ret} |
|
|
| 216 | } |
220 | } |
| 217 | |
221 | |
| 218 | # @FUNCTION: elisp-emacs-version |
222 | # @FUNCTION: elisp-emacs-version |
| 219 | # @DESCRIPTION: |
223 | # @DESCRIPTION: |
| 220 | # Output version of currently active Emacs. |
224 | # Output version of currently active Emacs. |
| … | |
… | |
| 256 | ${EMACS} ${EMACSFLAGS} \ |
260 | ${EMACS} ${EMACSFLAGS} \ |
| 257 | --eval "(setq make-backup-files nil)" \ |
261 | --eval "(setq make-backup-files nil)" \ |
| 258 | --eval "(setq generated-autoload-file (expand-file-name \"${f}\"))" \ |
262 | --eval "(setq generated-autoload-file (expand-file-name \"${f}\"))" \ |
| 259 | -f batch-update-autoloads "${@-.}" |
263 | -f batch-update-autoloads "${@-.}" |
| 260 | |
264 | |
| 261 | eend $? "batch-update-autoloads failed" |
265 | eend $? "elisp-make-autoload-file: batch-update-autoloads failed" |
| 262 | } |
266 | } |
| 263 | |
267 | |
| 264 | # @FUNCTION: elisp-install |
268 | # @FUNCTION: elisp-install |
| 265 | # @USAGE: <subdirectory> <list of files> |
269 | # @USAGE: <subdirectory> <list of files> |
| 266 | # @DESCRIPTION: |
270 | # @DESCRIPTION: |
| … | |
… | |
| 272 | ebegin "Installing Elisp files for GNU Emacs support" |
276 | ebegin "Installing Elisp files for GNU Emacs support" |
| 273 | ( # subshell to avoid pollution of calling environment |
277 | ( # subshell to avoid pollution of calling environment |
| 274 | insinto "${SITELISP}/${subdir}" |
278 | insinto "${SITELISP}/${subdir}" |
| 275 | doins "$@" |
279 | doins "$@" |
| 276 | ) |
280 | ) |
| 277 | eend $? "doins failed" |
281 | eend $? "elisp-install: doins failed" |
| 278 | } |
282 | } |
| 279 | |
283 | |
| 280 | # @FUNCTION: elisp-site-file-install |
284 | # @FUNCTION: elisp-site-file-install |
| 281 | # @USAGE: <site-init file> [subdirectory] |
285 | # @USAGE: <site-init file> [subdirectory] |
| 282 | # @DESCRIPTION: |
286 | # @DESCRIPTION: |
| … | |
… | |
| 285 | elisp-site-file-install() { |
289 | elisp-site-file-install() { |
| 286 | local sf="${T}/${1##*/}" my_pn="${2:-${PN}}" ret |
290 | local sf="${T}/${1##*/}" my_pn="${2:-${PN}}" ret |
| 287 | ebegin "Installing site initialisation file for GNU Emacs" |
291 | ebegin "Installing site initialisation file for GNU Emacs" |
| 288 | cp "$1" "${sf}" |
292 | cp "$1" "${sf}" |
| 289 | sed -i -e "s:@SITELISP@:${SITELISP}/${my_pn}:g" \ |
293 | sed -i -e "s:@SITELISP@:${SITELISP}/${my_pn}:g" \ |
| 290 | -e "s:@SITEETC@:${SITEETC}/${my_pn}:g" "${sf}" |
294 | -e "s:@SITEETC@:${SITEETC}/${my_pn}:g;\$q" "${sf}" |
| 291 | ( # subshell to avoid pollution of calling environment |
295 | ( # subshell to avoid pollution of calling environment |
| 292 | insinto "${SITELISP}/site-gentoo.d" |
296 | insinto "${SITELISP}/site-gentoo.d" |
| 293 | doins "${sf}" |
297 | doins "${sf}" |
| 294 | ) |
298 | ) |
| 295 | ret=$? |
299 | ret=$? |
| 296 | rm -f "${sf}" |
300 | rm -f "${sf}" |
| 297 | eend ${ret} "doins failed" |
301 | eend ${ret} "elisp-site-file-install: doins failed" |
| 298 | } |
302 | } |
| 299 | |
303 | |
| 300 | # @FUNCTION: elisp-site-regen |
304 | # @FUNCTION: elisp-site-regen |
| 301 | # @DESCRIPTION: |
305 | # @DESCRIPTION: |
| 302 | # Regenerate site-gentoo.el file. The old location for site initialisation |
306 | # Regenerate the site-gentoo.el file, based on packages' site initialisation |
| 303 | # files of packages was /usr/share/emacs/site-lisp/. In December 2007 this |
307 | # files in the /usr/share/emacs/site-lisp/site-gentoo.d/ directory. |
| 304 | # has been changed to /usr/share/emacs/site-lisp/site-gentoo.d/. Remerge of |
308 | # |
| 305 | # packages with Emacs support is enough, the old location is still supported |
309 | # Note: Before December 2007, site initialisation files were installed in |
| 306 | # when generating the start-up file. |
310 | # /usr/share/emacs/site-lisp/. For backwards compatibility, this location is |
|
|
311 | # still supported when generating site-gentoo.el. |
| 307 | |
312 | |
| 308 | elisp-site-regen() { |
313 | elisp-site-regen() { |
| 309 | local i sf line obsolete |
314 | local i sf line firstrun obsolete |
| 310 | local -a sflist |
315 | local -a sflist |
| 311 | # Work around Paludis borkage: variable T is empty in pkg_postrm |
316 | # Work around Paludis borkage: variable T is empty in pkg_postrm |
| 312 | local tmpdir=${T:-$(mktemp -d)} |
317 | local tmpdir=${T:-$(mktemp -d)} |
| 313 | |
318 | |
| 314 | if [ ! -d "${ROOT}${SITELISP}" ]; then |
319 | if [ ! -d "${ROOT}${SITELISP}" ]; then |
| 315 | eerror "Directory ${SITELISP} does not exist" |
320 | eerror "elisp-site-regen: Directory ${SITELISP} does not exist" |
| 316 | return 1 |
321 | return 1 |
| 317 | fi |
322 | fi |
| 318 | |
323 | |
| 319 | if [ ! -e "${ROOT}${SITELISP}"/site-gentoo.el ] \ |
324 | [ -e "${ROOT}${SITELISP}"/site-gentoo.el ] || firstrun=t |
|
|
325 | |
| 320 | && [ ! -e "${ROOT}${SITELISP}"/site-start.el ]; then |
326 | if [ "${firstrun}" ] && [ ! -e "${ROOT}${SITELISP}"/site-start.el ]; then |
| 321 | einfo "Creating default ${SITELISP}/site-start.el ..." |
327 | einfo "Creating default ${SITELISP}/site-start.el ..." |
| 322 | cat <<-EOF >"${tmpdir}"/site-start.el |
328 | cat <<-EOF >"${tmpdir}"/site-start.el |
| 323 | ;;; site-start.el |
329 | ;;; site-start.el |
| 324 | |
330 | |
| 325 | ;;; Commentary: |
331 | ;;; Commentary: |
| … | |
… | |
| 367 | ;; Automatically generated by elisp-common.eclass |
373 | ;; Automatically generated by elisp-common.eclass |
| 368 | ;; DO NOT EDIT THIS FILE |
374 | ;; DO NOT EDIT THIS FILE |
| 369 | |
375 | |
| 370 | ;;; Code: |
376 | ;;; Code: |
| 371 | EOF |
377 | EOF |
|
|
378 | # Use sed instead of cat here, since files may miss a trailing newline. |
| 372 | cat "${sflist[@]}" </dev/null >>"${tmpdir}"/site-gentoo.el |
379 | sed '$q' "${sflist[@]}" </dev/null >>"${tmpdir}"/site-gentoo.el |
| 373 | cat <<-EOF >>"${tmpdir}"/site-gentoo.el |
380 | cat <<-EOF >>"${tmpdir}"/site-gentoo.el |
| 374 | |
381 | |
| 375 | (provide 'site-gentoo) |
382 | (provide 'site-gentoo) |
| 376 | |
383 | |
| 377 | ;; Local Variables: |
384 | ;; Local Variables: |
| … | |
… | |
| 389 | else |
396 | else |
| 390 | mv "${tmpdir}"/site-gentoo.el "${ROOT}${SITELISP}"/site-gentoo.el |
397 | mv "${tmpdir}"/site-gentoo.el "${ROOT}${SITELISP}"/site-gentoo.el |
| 391 | [ -f "${tmpdir}"/site-start.el ] \ |
398 | [ -f "${tmpdir}"/site-start.el ] \ |
| 392 | && [ ! -e "${ROOT}${SITELISP}"/site-start.el ] \ |
399 | && [ ! -e "${ROOT}${SITELISP}"/site-start.el ] \ |
| 393 | && mv "${tmpdir}"/site-start.el "${ROOT}${SITELISP}"/site-start.el |
400 | && mv "${tmpdir}"/site-start.el "${ROOT}${SITELISP}"/site-start.el |
| 394 | echo; einfo |
401 | echo |
| 395 | for sf in "${sflist[@]##*/}"; do |
402 | einfo "... ${#sflist[@]} site initialisation file(s) included." |
| 396 | einfo " Adding ${sf} ..." |
403 | fi |
| 397 | done |
|
|
| 398 | einfo "Regenerated ${SITELISP}/site-gentoo.el." |
|
|
| 399 | |
404 | |
|
|
405 | if [ "${firstrun}" ]; then |
| 400 | echo |
406 | echo |
| 401 | while read line; do einfo "${line:- }"; done <<-EOF |
407 | while read line; do einfo "${line:- }"; done <<-EOF |
| 402 | All site initialisation for Gentoo-installed packages is added to |
408 | All site initialisation for Gentoo-installed packages is added to |
| 403 | /usr/share/emacs/site-lisp/site-gentoo.el; site-start.el is not |
409 | /usr/share/emacs/site-lisp/site-gentoo.el; site-start.el is not |
| 404 | managed by Gentoo. You are responsible for all maintenance of |
410 | managed by Gentoo. You are responsible for all maintenance of |
| … | |
… | |
| 416 | EOF |
422 | EOF |
| 417 | echo |
423 | echo |
| 418 | fi |
424 | fi |
| 419 | |
425 | |
| 420 | if [ "${obsolete}" ]; then |
426 | if [ "${obsolete}" ]; then |
|
|
427 | echo |
| 421 | while read line; do ewarn "${line}"; done <<-EOF |
428 | while read line; do ewarn "${line}"; done <<-EOF |
| 422 | Site-initialisation files of Emacs packages are now installed in |
429 | Site-initialisation files of Emacs packages are now installed in |
| 423 | /usr/share/emacs/site-lisp/site-gentoo.d/. We strongly recommend |
430 | /usr/share/emacs/site-lisp/site-gentoo.d/. We strongly recommend |
| 424 | that you use /usr/sbin/emacs-updater to rebuild the installed |
431 | that you use app-admin/emacs-updater to rebuild the installed |
| 425 | Emacs packages. |
432 | Emacs packages. |
| 426 | EOF |
433 | EOF |
| 427 | echo |
|
|
| 428 | |
434 | |
| 429 | # Kludge for backwards compatibility: During pkg_postrm, old versions |
435 | # Kludge for backwards compatibility: During pkg_postrm, old versions |
| 430 | # of this eclass (saved in the VDB) won't find packages' site-init |
436 | # of this eclass (saved in the VDB) won't find packages' site-init |
| 431 | # files in the new location. So we copy them to an auxiliary file |
437 | # files in the new location. So we copy them to an auxiliary file |
| 432 | # that is visible to old eclass versions. |
438 | # that is visible to old eclass versions. |
| … | |
… | |
| 436 | done |
442 | done |
| 437 | fi |
443 | fi |
| 438 | |
444 | |
| 439 | # cleanup |
445 | # cleanup |
| 440 | rm -f "${tmpdir}"/site-{gentoo,start}.el |
446 | rm -f "${tmpdir}"/site-{gentoo,start}.el |
|
|
447 | |
|
|
448 | return 0 |
| 441 | } |
449 | } |