| 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.68 2010/10/09 15:30:43 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 |
| … | |
… | |
| 124 | # to above calls of elisp-site-regen(). |
137 | # to above calls of elisp-site-regen(). |
| 125 | # 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 |
| 126 | # 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 |
| 127 | # 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 |
| 128 | # merge and unmerge of a package. |
141 | # merge and unmerge of a package. |
| 129 | # |
|
|
| 130 | # .SS |
|
|
| 131 | # Miscellaneous functions: |
|
|
| 132 | # |
|
|
| 133 | # elisp-emacs-version() outputs the version of the currently active Emacs. |
|
|
| 134 | |
142 | |
| 135 | # @ECLASS-VARIABLE: SITELISP |
143 | # @ECLASS-VARIABLE: SITELISP |
| 136 | # @DESCRIPTION: |
144 | # @DESCRIPTION: |
| 137 | # Directory where packages install Emacs Lisp files. |
145 | # Directory where packages install Emacs Lisp files. |
| 138 | SITELISP=/usr/share/emacs/site-lisp |
146 | SITELISP=/usr/share/emacs/site-lisp |
| … | |
… | |
| 155 | |
163 | |
| 156 | # @ECLASS-VARIABLE: BYTECOMPFLAGS |
164 | # @ECLASS-VARIABLE: BYTECOMPFLAGS |
| 157 | # @DESCRIPTION: |
165 | # @DESCRIPTION: |
| 158 | # Emacs flags used for byte-compilation in elisp-compile(). |
166 | # Emacs flags used for byte-compilation in elisp-compile(). |
| 159 | BYTECOMPFLAGS="-L ." |
167 | BYTECOMPFLAGS="-L ." |
| 160 | |
|
|
| 161 | # @FUNCTION: elisp-compile |
|
|
| 162 | # @USAGE: <list of elisp files> |
|
|
| 163 | # @DESCRIPTION: |
|
|
| 164 | # Byte-compile Emacs Lisp files. |
|
|
| 165 | # |
|
|
| 166 | # This function uses GNU Emacs to byte-compile all ".el" specified by |
|
|
| 167 | # its arguments. The resulting byte-code (".elc") files are placed in |
|
|
| 168 | # the same directory as their corresponding source file. |
|
|
| 169 | # |
|
|
| 170 | # The current directory is added to the load-path. This will ensure |
|
|
| 171 | # that interdependent Emacs Lisp files are visible between themselves, |
|
|
| 172 | # in case they require or load one another. |
|
|
| 173 | |
|
|
| 174 | elisp-compile() { |
|
|
| 175 | ebegin "Compiling GNU Emacs Elisp files" |
|
|
| 176 | ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@" |
|
|
| 177 | eend $? "elisp-compile: batch-byte-compile failed" |
|
|
| 178 | } |
|
|
| 179 | |
|
|
| 180 | elisp-comp() { |
|
|
| 181 | die "Function elisp-comp is not supported any more, see bug 235442" |
|
|
| 182 | } |
|
|
| 183 | |
168 | |
| 184 | # @FUNCTION: elisp-emacs-version |
169 | # @FUNCTION: elisp-emacs-version |
| 185 | # @DESCRIPTION: |
170 | # @DESCRIPTION: |
| 186 | # Output version of currently active Emacs. |
171 | # Output version of currently active Emacs. |
| 187 | |
172 | |
| 188 | elisp-emacs-version() { |
173 | elisp-emacs-version() { |
| 189 | # The following will work for at least versions 18-23. |
174 | # The following will work for at least versions 18-23. |
| 190 | echo "(princ emacs-version)" >"${T}"/emacs-version.el |
175 | echo "(princ emacs-version)" >"${T}"/emacs-version.el |
| 191 | ${EMACS} ${EMACSFLAGS} -l "${T}"/emacs-version.el |
176 | ${EMACS} ${EMACSFLAGS} -l "${T}"/emacs-version.el |
| 192 | rm -f "${T}"/emacs-version.el |
177 | rm -f "${T}"/emacs-version.el |
|
|
178 | } |
|
|
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" |
| 193 | } |
216 | } |
| 194 | |
217 | |
| 195 | # @FUNCTION: elisp-make-autoload-file |
218 | # @FUNCTION: elisp-make-autoload-file |
| 196 | # @USAGE: [output file] [list of directories] |
219 | # @USAGE: [output file] [list of directories] |
| 197 | # @DESCRIPTION: |
220 | # @DESCRIPTION: |
| … | |
… | |
| 259 | |
282 | |
| 260 | [[ ${sf} == [0-9][0-9]*-gentoo*.el ]] \ |
283 | [[ ${sf} == [0-9][0-9]*-gentoo*.el ]] \ |
| 261 | || ewarn "elisp-site-file-install: bad name of site-init file" |
284 | || ewarn "elisp-site-file-install: bad name of site-init file" |
| 262 | sf="${T}/${sf/%-gentoo*.el/-gentoo.el}" |
285 | sf="${T}/${sf/%-gentoo*.el/-gentoo.el}" |
| 263 | ebegin "Installing site initialisation file for GNU Emacs" |
286 | ebegin "Installing site initialisation file for GNU Emacs" |
| 264 | [[ $1 = ${sf} ]] || cp "$1" "${sf}" |
287 | [[ $1 = "${sf}" ]] || cp "$1" "${sf}" |
| 265 | 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:;}" \ |
| 266 | -e "s:@SITELISP@:${EPREFIX}${SITELISP}/${my_pn}:g" \ |
289 | -e "s:@SITELISP@:${EPREFIX}${SITELISP}/${my_pn}:g" \ |
| 267 | -e "s:@SITEETC@:${EPREFIX}${SITEETC}/${my_pn}:g;\$q" "${sf}" |
290 | -e "s:@SITEETC@:${EPREFIX}${SITEETC}/${my_pn}:g;\$q" "${sf}" |
| 268 | ( # subshell to avoid pollution of calling environment |
291 | ( # subshell to avoid pollution of calling environment |
| 269 | insinto "${SITELISP}/site-gentoo.d" |
292 | insinto "${SITELISP}/site-gentoo.d" |
| … | |
… | |
| 328 | EOF |
351 | EOF |
| 329 | # 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. |
| 330 | sed '$q' "${sflist[@]}" </dev/null >>"${T}"/site-gentoo.el |
353 | sed '$q' "${sflist[@]}" </dev/null >>"${T}"/site-gentoo.el |
| 331 | cat <<-EOF >>"${T}"/site-gentoo.el |
354 | cat <<-EOF >>"${T}"/site-gentoo.el |
| 332 | |
355 | |
|
|
356 | ${page} |
| 333 | (provide 'site-gentoo) |
357 | (provide 'site-gentoo) |
| 334 | |
358 | |
| 335 | ${page} |
|
|
| 336 | ;; Local ${null}Variables: |
359 | ;; Local ${null}Variables: |
| 337 | ;; no-byte-compile: t |
360 | ;; no-byte-compile: t |
| 338 | ;; buffer-read-only: t |
361 | ;; buffer-read-only: t |
| 339 | ;; End: |
362 | ;; End: |
| 340 | |
363 | |