| 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.48 2008/10/05 13:56:08 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 | # |
| … | |
… | |
| 135 | # @ECLASS-VARIABLE: SITEETC |
137 | # @ECLASS-VARIABLE: SITEETC |
| 136 | # @DESCRIPTION: |
138 | # @DESCRIPTION: |
| 137 | # Directory where packages install miscellaneous (not Lisp) files. |
139 | # Directory where packages install miscellaneous (not Lisp) files. |
| 138 | SITEETC=/usr/share/emacs/etc |
140 | SITEETC=/usr/share/emacs/etc |
| 139 | |
141 | |
| 140 | # @ECLASS-VARIABLE: SITEFILE |
|
|
| 141 | # @DESCRIPTION: |
|
|
| 142 | # Name of package's site-init file. |
|
|
| 143 | SITEFILE=50${PN}-gentoo.el |
|
|
| 144 | |
|
|
| 145 | # @ECLASS-VARIABLE: EMACS |
142 | # @ECLASS-VARIABLE: EMACS |
| 146 | # @DESCRIPTION: |
143 | # @DESCRIPTION: |
| 147 | # Path of Emacs executable. |
144 | # Path of Emacs executable. |
| 148 | EMACS=/usr/bin/emacs |
145 | EMACS=/usr/bin/emacs |
| 149 | |
146 | |
| … | |
… | |
| 172 | # they require or load one another. |
169 | # they require or load one another. |
| 173 | |
170 | |
| 174 | elisp-compile() { |
171 | elisp-compile() { |
| 175 | ebegin "Compiling GNU Emacs Elisp files" |
172 | ebegin "Compiling GNU Emacs Elisp files" |
| 176 | ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@" |
173 | ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@" |
| 177 | eend $? "batch-byte-compile failed" |
174 | eend $? "elisp-compile: batch-byte-compile failed" |
| 178 | } |
175 | } |
| 179 | |
176 | |
| 180 | # #FUNCTION: elisp-comp |
177 | # #FUNCTION: elisp-comp |
| 181 | # #USAGE: <list of elisp files> |
178 | # #USAGE: <list of elisp files> |
| 182 | # #DESCRIPTION: |
179 | # #DESCRIPTION: |
| … | |
… | |
| 217 | mv *.elc .. |
214 | mv *.elc .. |
| 218 | |
215 | |
| 219 | popd |
216 | popd |
| 220 | rm -fr ${tempdir} |
217 | rm -fr ${tempdir} |
| 221 | |
218 | |
| 222 | eend ${ret} "batch-byte-compile failed" |
219 | eend ${ret} "elisp-comp: batch-byte-compile failed" |
| 223 | return ${ret} |
|
|
| 224 | } |
220 | } |
| 225 | |
221 | |
| 226 | # @FUNCTION: elisp-emacs-version |
222 | # @FUNCTION: elisp-emacs-version |
| 227 | # @DESCRIPTION: |
223 | # @DESCRIPTION: |
| 228 | # Output version of currently active Emacs. |
224 | # Output version of currently active Emacs. |
| … | |
… | |
| 264 | ${EMACS} ${EMACSFLAGS} \ |
260 | ${EMACS} ${EMACSFLAGS} \ |
| 265 | --eval "(setq make-backup-files nil)" \ |
261 | --eval "(setq make-backup-files nil)" \ |
| 266 | --eval "(setq generated-autoload-file (expand-file-name \"${f}\"))" \ |
262 | --eval "(setq generated-autoload-file (expand-file-name \"${f}\"))" \ |
| 267 | -f batch-update-autoloads "${@-.}" |
263 | -f batch-update-autoloads "${@-.}" |
| 268 | |
264 | |
| 269 | eend $? "batch-update-autoloads failed" |
265 | eend $? "elisp-make-autoload-file: batch-update-autoloads failed" |
| 270 | } |
266 | } |
| 271 | |
267 | |
| 272 | # @FUNCTION: elisp-install |
268 | # @FUNCTION: elisp-install |
| 273 | # @USAGE: <subdirectory> <list of files> |
269 | # @USAGE: <subdirectory> <list of files> |
| 274 | # @DESCRIPTION: |
270 | # @DESCRIPTION: |
| … | |
… | |
| 280 | ebegin "Installing Elisp files for GNU Emacs support" |
276 | ebegin "Installing Elisp files for GNU Emacs support" |
| 281 | ( # subshell to avoid pollution of calling environment |
277 | ( # subshell to avoid pollution of calling environment |
| 282 | insinto "${SITELISP}/${subdir}" |
278 | insinto "${SITELISP}/${subdir}" |
| 283 | doins "$@" |
279 | doins "$@" |
| 284 | ) |
280 | ) |
| 285 | eend $? "doins failed" |
281 | eend $? "elisp-install: doins failed" |
| 286 | } |
282 | } |
| 287 | |
283 | |
| 288 | # @FUNCTION: elisp-site-file-install |
284 | # @FUNCTION: elisp-site-file-install |
| 289 | # @USAGE: <site-init file> [subdirectory] |
285 | # @USAGE: <site-init file> [subdirectory] |
| 290 | # @DESCRIPTION: |
286 | # @DESCRIPTION: |
| … | |
… | |
| 293 | elisp-site-file-install() { |
289 | elisp-site-file-install() { |
| 294 | local sf="${T}/${1##*/}" my_pn="${2:-${PN}}" ret |
290 | local sf="${T}/${1##*/}" my_pn="${2:-${PN}}" ret |
| 295 | ebegin "Installing site initialisation file for GNU Emacs" |
291 | ebegin "Installing site initialisation file for GNU Emacs" |
| 296 | cp "$1" "${sf}" |
292 | cp "$1" "${sf}" |
| 297 | sed -i -e "s:@SITELISP@:${SITELISP}/${my_pn}:g" \ |
293 | sed -i -e "s:@SITELISP@:${SITELISP}/${my_pn}:g" \ |
| 298 | -e "s:@SITEETC@:${SITEETC}/${my_pn}:g" "${sf}" |
294 | -e "s:@SITEETC@:${SITEETC}/${my_pn}:g;\$q" "${sf}" |
| 299 | ( # subshell to avoid pollution of calling environment |
295 | ( # subshell to avoid pollution of calling environment |
| 300 | insinto "${SITELISP}/site-gentoo.d" |
296 | insinto "${SITELISP}/site-gentoo.d" |
| 301 | doins "${sf}" |
297 | doins "${sf}" |
| 302 | ) |
298 | ) |
| 303 | ret=$? |
299 | ret=$? |
| 304 | rm -f "${sf}" |
300 | rm -f "${sf}" |
| 305 | eend ${ret} "doins failed" |
301 | eend ${ret} "elisp-site-file-install: doins failed" |
| 306 | } |
302 | } |
| 307 | |
303 | |
| 308 | # @FUNCTION: elisp-site-regen |
304 | # @FUNCTION: elisp-site-regen |
| 309 | # @DESCRIPTION: |
305 | # @DESCRIPTION: |
| 310 | # Regenerate the site-gentoo.el file, based on packages' site initialisation |
306 | # Regenerate the site-gentoo.el file, based on packages' site initialisation |
| … | |
… | |
| 319 | local -a sflist |
315 | local -a sflist |
| 320 | # Work around Paludis borkage: variable T is empty in pkg_postrm |
316 | # Work around Paludis borkage: variable T is empty in pkg_postrm |
| 321 | local tmpdir=${T:-$(mktemp -d)} |
317 | local tmpdir=${T:-$(mktemp -d)} |
| 322 | |
318 | |
| 323 | if [ ! -d "${ROOT}${SITELISP}" ]; then |
319 | if [ ! -d "${ROOT}${SITELISP}" ]; then |
| 324 | eerror "Directory ${SITELISP} does not exist" |
320 | eerror "elisp-site-regen: Directory ${SITELISP} does not exist" |
| 325 | return 1 |
321 | return 1 |
| 326 | fi |
322 | fi |
| 327 | |
323 | |
| 328 | [ -e "${ROOT}${SITELISP}"/site-gentoo.el ] || firstrun=t |
324 | [ -e "${ROOT}${SITELISP}"/site-gentoo.el ] || firstrun=t |
| 329 | |
325 | |
| … | |
… | |
| 377 | ;; Automatically generated by elisp-common.eclass |
373 | ;; Automatically generated by elisp-common.eclass |
| 378 | ;; DO NOT EDIT THIS FILE |
374 | ;; DO NOT EDIT THIS FILE |
| 379 | |
375 | |
| 380 | ;;; Code: |
376 | ;;; Code: |
| 381 | EOF |
377 | EOF |
|
|
378 | # Use sed instead of cat here, since files may miss a trailing newline. |
| 382 | cat "${sflist[@]}" </dev/null >>"${tmpdir}"/site-gentoo.el |
379 | sed '$q' "${sflist[@]}" </dev/null >>"${tmpdir}"/site-gentoo.el |
| 383 | cat <<-EOF >>"${tmpdir}"/site-gentoo.el |
380 | cat <<-EOF >>"${tmpdir}"/site-gentoo.el |
| 384 | |
381 | |
| 385 | (provide 'site-gentoo) |
382 | (provide 'site-gentoo) |
| 386 | |
383 | |
| 387 | ;; Local Variables: |
384 | ;; Local Variables: |