| 1 | # Copyright 1999-2010 Gentoo Foundation |
1 | # Copyright 1999-2011 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.66 2010/08/22 08:30:32 ulm Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/elisp-common.eclass,v 1.71 2011/02/19 10:12:42 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 <fauli@gentoo.org> |
8 | # Copyright 2007-2008 Christian Faulhammer <fauli@gentoo.org> |
| 9 | # Copyright 2007-2010 Ulrich Müller <ulm@gentoo.org> |
9 | # Copyright 2007-2011 Ulrich Müller <ulm@gentoo.org> |
| 10 | # |
10 | # |
| 11 | # @ECLASS: elisp-common.eclass |
11 | # @ECLASS: elisp-common.eclass |
| 12 | # @MAINTAINER: |
12 | # @MAINTAINER: |
| 13 | # Feel free to contact the Emacs team through <emacs@gentoo.org> if you |
13 | # Feel free to contact the Emacs team through <emacs@gentoo.org> if you |
| 14 | # have problems, suggestions or questions. |
14 | # have problems, suggestions or questions. |
| … | |
… | |
| 26 | # |
26 | # |
| 27 | # emacs? ( virtual/emacs ) |
27 | # emacs? ( virtual/emacs ) |
| 28 | # |
28 | # |
| 29 | # to your DEPEND/RDEPEND line and use the functions provided here to |
29 | # to your DEPEND/RDEPEND line and use the functions provided here to |
| 30 | # bring the files to the correct locations. |
30 | # bring the files to the correct locations. |
|
|
31 | # |
|
|
32 | # If your package requires a minimum Emacs version, e.g. Emacs 23, then |
|
|
33 | # the dependency should be on >=virtual/emacs-23 instead. Because the |
|
|
34 | # user can select the Emacs executable with eselect, you should also |
|
|
35 | # make sure that the active Emacs version is sufficient. This can be |
|
|
36 | # tested with function elisp-need-emacs(), which would typically be |
|
|
37 | # called from pkg_setup(), as in the following example: |
|
|
38 | # |
|
|
39 | # elisp-need-emacs 23 || die "Emacs version too low" |
|
|
40 | # |
|
|
41 | # Please note that such tests should be limited to packages that are |
|
|
42 | # known to fail with lower Emacs versions; the standard case is to |
|
|
43 | # depend on virtual/emacs without version. |
| 31 | # |
44 | # |
| 32 | # .SS |
45 | # .SS |
| 33 | # src_compile() usage: |
46 | # src_compile() usage: |
| 34 | # |
47 | # |
| 35 | # An elisp file is compiled by the elisp-compile() function defined |
48 | # An elisp file is compiled by the elisp-compile() function defined |
| … | |
… | |
| 85 | # |
98 | # |
| 86 | # The naming scheme for this site-init file matches the shell pattern |
99 | # The naming scheme for this site-init file matches the shell pattern |
| 87 | # "[1-8][0-9]*-gentoo*.el", where the two digits at the beginning define |
100 | # "[1-8][0-9]*-gentoo*.el", where the two digits at the beginning define |
| 88 | # the loading order (numbers below 10 or above 89 are reserved for |
101 | # the loading order (numbers below 10 or above 89 are reserved for |
| 89 | # internal use). So if your initialisation depends on another Emacs |
102 | # internal use). So if your initialisation depends on another Emacs |
| 90 | # package, your site file's number must be higher! |
103 | # package, your site file's number must be higher! If there are no such |
|
|
104 | # interdependencies then the number should be 50. Otherwise, numbers |
|
|
105 | # divisible by 10 are preferred. |
| 91 | # |
106 | # |
| 92 | # Best practice is to define a SITEFILE variable in the global scope of |
107 | # Best practice is to define a SITEFILE variable in the global scope of |
| 93 | # your ebuild (e.g., right after S or RDEPEND): |
108 | # your ebuild (e.g., right after S or RDEPEND): |
| 94 | # |
109 | # |
| 95 | # SITEFILE="50${PN}-gentoo.el" |
110 | # SITEFILE="50${PN}-gentoo.el" |
| … | |
… | |
| 122 | # to above calls of elisp-site-regen(). |
137 | # to above calls of elisp-site-regen(). |
| 123 | # Don't use "has_version virtual/emacs"! When unmerging the state of |
138 | # Don't use "has_version virtual/emacs"! When unmerging the state of |
| 124 | # the emacs USE flag is taken from the package database and not from the |
139 | # the emacs USE flag is taken from the package database and not from the |
| 125 | # environment, so it is no problem when you unset USE=emacs between |
140 | # environment, so it is no problem when you unset USE=emacs between |
| 126 | # merge and unmerge of a package. |
141 | # merge and unmerge of a package. |
| 127 | # |
|
|
| 128 | # .SS |
|
|
| 129 | # Miscellaneous functions: |
|
|
| 130 | # |
|
|
| 131 | # elisp-emacs-version() outputs the version of the currently active Emacs. |
|
|
| 132 | |
142 | |
| 133 | # @ECLASS-VARIABLE: SITELISP |
143 | # @ECLASS-VARIABLE: SITELISP |
| 134 | # @DESCRIPTION: |
144 | # @DESCRIPTION: |
| 135 | # Directory where packages install Emacs Lisp files. |
145 | # Directory where packages install Emacs Lisp files. |
| 136 | SITELISP=/usr/share/emacs/site-lisp |
146 | SITELISP=/usr/share/emacs/site-lisp |
| … | |
… | |
| 153 | |
163 | |
| 154 | # @ECLASS-VARIABLE: BYTECOMPFLAGS |
164 | # @ECLASS-VARIABLE: BYTECOMPFLAGS |
| 155 | # @DESCRIPTION: |
165 | # @DESCRIPTION: |
| 156 | # Emacs flags used for byte-compilation in elisp-compile(). |
166 | # Emacs flags used for byte-compilation in elisp-compile(). |
| 157 | BYTECOMPFLAGS="-L ." |
167 | BYTECOMPFLAGS="-L ." |
| 158 | |
|
|
| 159 | # @FUNCTION: elisp-compile |
|
|
| 160 | # @USAGE: <list of elisp files> |
|
|
| 161 | # @DESCRIPTION: |
|
|
| 162 | # Byte-compile Emacs Lisp files. |
|
|
| 163 | # |
|
|
| 164 | # This function uses GNU Emacs to byte-compile all ".el" specified by |
|
|
| 165 | # its arguments. The resulting byte-code (".elc") files are placed in |
|
|
| 166 | # the same directory as their corresponding source file. |
|
|
| 167 | # |
|
|
| 168 | # The current directory is added to the load-path. This will ensure |
|
|
| 169 | # that interdependent Emacs Lisp files are visible between themselves, |
|
|
| 170 | # in case they require or load one another. |
|
|
| 171 | |
|
|
| 172 | elisp-compile() { |
|
|
| 173 | ebegin "Compiling GNU Emacs Elisp files" |
|
|
| 174 | ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@" |
|
|
| 175 | eend $? "elisp-compile: batch-byte-compile failed" |
|
|
| 176 | } |
|
|
| 177 | |
|
|
| 178 | elisp-comp() { |
|
|
| 179 | die "Function elisp-comp is not supported any more, see bug 235442" |
|
|
| 180 | } |
|
|
| 181 | |
168 | |
| 182 | # @FUNCTION: elisp-emacs-version |
169 | # @FUNCTION: elisp-emacs-version |
| 183 | # @DESCRIPTION: |
170 | # @DESCRIPTION: |
| 184 | # Output version of currently active Emacs. |
171 | # Output version of currently active Emacs. |
| 185 | |
172 | |
| … | |
… | |
| 188 | echo "(princ emacs-version)" >"${T}"/emacs-version.el |
175 | echo "(princ emacs-version)" >"${T}"/emacs-version.el |
| 189 | ${EMACS} ${EMACSFLAGS} -l "${T}"/emacs-version.el |
176 | ${EMACS} ${EMACSFLAGS} -l "${T}"/emacs-version.el |
| 190 | rm -f "${T}"/emacs-version.el |
177 | rm -f "${T}"/emacs-version.el |
| 191 | } |
178 | } |
| 192 | |
179 | |
|
|
180 | # @FUNCTION: elisp-need-emacs |
|
|
181 | # @USAGE: <version> |
|
|
182 | # @RETURN: 0 if true, 1 otherwise |
|
|
183 | # @DESCRIPTION: |
|
|
184 | # Test if the eselected Emacs version is at least the major version |
|
|
185 | # specified as argument. |
|
|
186 | |
|
|
187 | elisp-need-emacs() { |
|
|
188 | local need_emacs=$1 |
|
|
189 | local have_emacs=$(elisp-emacs-version) |
|
|
190 | einfo "Emacs version: ${have_emacs}" |
|
|
191 | if ! [[ ${have_emacs%%.*} -ge ${need_emacs%%.*} ]]; then |
|
|
192 | eerror "This package needs at least Emacs ${need_emacs%%.*}." |
|
|
193 | eerror "Use \"eselect emacs\" to select the active version." |
|
|
194 | return 1 |
|
|
195 | fi |
|
|
196 | return 0 |
|
|
197 | } |
|
|
198 | |
|
|
199 | # @FUNCTION: elisp-compile |
|
|
200 | # @USAGE: <list of elisp files> |
|
|
201 | # @DESCRIPTION: |
|
|
202 | # Byte-compile Emacs Lisp files. |
|
|
203 | # |
|
|
204 | # This function uses GNU Emacs to byte-compile all ".el" specified by |
|
|
205 | # its arguments. The resulting byte-code (".elc") files are placed in |
|
|
206 | # the same directory as their corresponding source file. |
|
|
207 | # |
|
|
208 | # The current directory is added to the load-path. This will ensure |
|
|
209 | # that interdependent Emacs Lisp files are visible between themselves, |
|
|
210 | # in case they require or load one another. |
|
|
211 | |
|
|
212 | elisp-compile() { |
|
|
213 | ebegin "Compiling GNU Emacs Elisp files" |
|
|
214 | ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@" |
|
|
215 | eend $? "elisp-compile: batch-byte-compile failed" |
|
|
216 | } |
|
|
217 | |
| 193 | # @FUNCTION: elisp-make-autoload-file |
218 | # @FUNCTION: elisp-make-autoload-file |
| 194 | # @USAGE: [output file] [list of directories] |
219 | # @USAGE: [output file] [list of directories] |
| 195 | # @DESCRIPTION: |
220 | # @DESCRIPTION: |
| 196 | # Generate a file with autoload definitions for the lisp functions. |
221 | # Generate a file with autoload definitions for the lisp functions. |
| 197 | |
222 | |
| … | |
… | |
| 199 | local f="${1:-${PN}-autoloads.el}" null="" page=$'\f' |
224 | local f="${1:-${PN}-autoloads.el}" null="" page=$'\f' |
| 200 | shift |
225 | shift |
| 201 | ebegin "Generating autoload file for GNU Emacs" |
226 | ebegin "Generating autoload file for GNU Emacs" |
| 202 | |
227 | |
| 203 | cat >"${f}" <<-EOF |
228 | cat >"${f}" <<-EOF |
| 204 | ;;; ${f##*/} --- autoloads for ${P} |
229 | ;;; ${f##*/} --- autoloads for ${PN} |
| 205 | |
230 | |
| 206 | ;;; Commentary: |
231 | ;;; Commentary: |
| 207 | ;; Automatically generated by elisp-common.eclass |
232 | ;; Automatically generated by elisp-common.eclass |
| 208 | ;; DO NOT EDIT THIS FILE |
233 | ;; DO NOT EDIT THIS FILE |
| 209 | |
234 | |
| … | |
… | |
| 257 | |
282 | |
| 258 | [[ ${sf} == [0-9][0-9]*-gentoo*.el ]] \ |
283 | [[ ${sf} == [0-9][0-9]*-gentoo*.el ]] \ |
| 259 | || ewarn "elisp-site-file-install: bad name of site-init file" |
284 | || ewarn "elisp-site-file-install: bad name of site-init file" |
| 260 | sf="${T}/${sf/%-gentoo*.el/-gentoo.el}" |
285 | sf="${T}/${sf/%-gentoo*.el/-gentoo.el}" |
| 261 | ebegin "Installing site initialisation file for GNU Emacs" |
286 | ebegin "Installing site initialisation file for GNU Emacs" |
| 262 | [[ $1 = ${sf} ]] || cp "$1" "${sf}" |
287 | [[ $1 = "${sf}" ]] || cp "$1" "${sf}" |
| 263 | sed -i -e "1{:x;/^\$/{n;bx;};/^;.*${PN}/I!s:^:${header}\n\n:;1s:^:\n:;}" \ |
288 | sed -i -e "1{:x;/^\$/{n;bx;};/^;.*${PN}/I!s:^:${header}\n\n:;1s:^:\n:;}" \ |
| 264 | -e "s:@SITELISP@:${EPREFIX}${SITELISP}/${my_pn}:g" \ |
289 | -e "s:@SITELISP@:${EPREFIX}${SITELISP}/${my_pn}:g" \ |
| 265 | -e "s:@SITEETC@:${EPREFIX}${SITEETC}/${my_pn}:g;\$q" "${sf}" |
290 | -e "s:@SITEETC@:${EPREFIX}${SITEETC}/${my_pn}:g;\$q" "${sf}" |
| 266 | ( # subshell to avoid pollution of calling environment |
291 | ( # subshell to avoid pollution of calling environment |
| 267 | insinto "${SITELISP}/site-gentoo.d" |
292 | insinto "${SITELISP}/site-gentoo.d" |
| … | |
… | |
| 326 | EOF |
351 | EOF |
| 327 | # Use sed instead of cat here, since files may miss a trailing newline. |
352 | # Use sed instead of cat here, since files may miss a trailing newline. |
| 328 | sed '$q' "${sflist[@]}" </dev/null >>"${T}"/site-gentoo.el |
353 | sed '$q' "${sflist[@]}" </dev/null >>"${T}"/site-gentoo.el |
| 329 | cat <<-EOF >>"${T}"/site-gentoo.el |
354 | cat <<-EOF >>"${T}"/site-gentoo.el |
| 330 | |
355 | |
|
|
356 | ${page} |
| 331 | (provide 'site-gentoo) |
357 | (provide 'site-gentoo) |
| 332 | |
358 | |
| 333 | ${page} |
|
|
| 334 | ;; Local ${null}Variables: |
359 | ;; Local ${null}Variables: |
| 335 | ;; no-byte-compile: t |
360 | ;; no-byte-compile: t |
| 336 | ;; buffer-read-only: t |
361 | ;; buffer-read-only: t |
| 337 | ;; End: |
362 | ;; End: |
| 338 | |
363 | |