| 1 | # Copyright 1999-2008 Gentoo Foundation |
1 | # Copyright 1999-2012 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/texlive-module.eclass,v 1.50 2010/10/23 23:31:59 aballier Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/texlive-module.eclass,v 1.63 2012/07/26 16:40:47 aballier Exp $ |
| 4 | |
4 | |
| 5 | # @ECLASS: texlive-module.eclass |
5 | # @ECLASS: texlive-module.eclass |
| 6 | # @MAINTAINER: |
6 | # @MAINTAINER: |
| 7 | # tex@gentoo.org |
7 | # tex@gentoo.org |
| 8 | # |
8 | # @AUTHOR: |
| 9 | # Original Author: Alexis Ballier <aballier@gentoo.org> |
9 | # Original Author: Alexis Ballier <aballier@gentoo.org> |
| 10 | # @BLURB: Provide generic install functions so that modular texlive's texmf ebuild will only have to inherit this eclass |
10 | # @BLURB: Provide generic install functions so that modular texlive's texmf ebuild will only have to inherit this eclass |
| 11 | # @DESCRIPTION: |
11 | # @DESCRIPTION: |
| 12 | # Purpose: Provide generic install functions so that modular texlive's texmf ebuilds will |
12 | # Purpose: Provide generic install functions so that modular texlive's texmf ebuilds will |
| 13 | # only have to inherit this eclass. |
13 | # only have to inherit this eclass. |
| … | |
… | |
| 18 | # texmf and texmf-dist directories to ${WORKDIR} (which is what the default |
18 | # texmf and texmf-dist directories to ${WORKDIR} (which is what the default |
| 19 | # src_unpack does). |
19 | # src_unpack does). |
| 20 | # Starting from TeX Live 2009, the eclass provides a src_unpack function taking |
20 | # Starting from TeX Live 2009, the eclass provides a src_unpack function taking |
| 21 | # care of unpacking and relocating the files that need it. |
21 | # care of unpacking and relocating the files that need it. |
| 22 | # |
22 | # |
| 23 | # It inherits texlive-common |
23 | # It inherits texlive-common and base for supporting patching via the PATCHES |
|
|
24 | # bash array with EAPI>=2. |
| 24 | |
25 | |
| 25 | # @ECLASS-VARIABLE: TEXLIVE_MODULE_CONTENTS |
26 | # @ECLASS-VARIABLE: TEXLIVE_MODULE_CONTENTS |
| 26 | # @DESCRIPTION: |
27 | # @DESCRIPTION: |
| 27 | # The list of packages that will be installed. This variable will be expanded to |
28 | # The list of packages that will be installed. This variable will be expanded to |
| 28 | # SRC_URI: |
29 | # SRC_URI: |
| 29 | # |
|
|
| 30 | # For TeX Live 2008: foo -> texlive-module-foo-${PV}.tar.lzma |
|
|
| 31 | # For TeX Live 2009: foo -> texlive-module-foo-${PV}.tar.xz |
30 | # foo -> texlive-module-foo-${PV}.tar.xz |
| 32 | |
31 | |
| 33 | # @ECLASS-VARIABLE: TEXLIVE_MODULE_DOC_CONTENTS |
32 | # @ECLASS-VARIABLE: TEXLIVE_MODULE_DOC_CONTENTS |
| 34 | # @DESCRIPTION: |
33 | # @DESCRIPTION: |
| 35 | # The list of packages that will be installed if the doc useflag is enabled. |
34 | # The list of packages that will be installed if the doc useflag is enabled. |
| 36 | # Expansion to SRC_URI is the same as for TEXLIVE_MODULE_CONTENTS. This is only |
35 | # Expansion to SRC_URI is the same as for TEXLIVE_MODULE_CONTENTS. |
| 37 | # valid for TeX Live 2008 and later |
|
|
| 38 | |
36 | |
| 39 | # @ECLASS-VARIABLE: TEXLIVE_MODULE_SRC_CONTENTS |
37 | # @ECLASS-VARIABLE: TEXLIVE_MODULE_SRC_CONTENTS |
| 40 | # @DESCRIPTION: |
38 | # @DESCRIPTION: |
| 41 | # The list of packages that will be installed if the source useflag is enabled. |
39 | # The list of packages that will be installed if the source useflag is enabled. |
| 42 | # Expansion to SRC_URI is the same as for TEXLIVE_MODULE_CONTENTS. This is only |
40 | # Expansion to SRC_URI is the same as for TEXLIVE_MODULE_CONTENTS. |
| 43 | # valid for TeX Live 2008 and later |
|
|
| 44 | |
41 | |
| 45 | # @ECLASS-VARIABLE: TEXLIVE_MODULE_BINSCRIPTS |
42 | # @ECLASS-VARIABLE: TEXLIVE_MODULE_BINSCRIPTS |
| 46 | # @DESCRIPTION: |
43 | # @DESCRIPTION: |
| 47 | # A space separated list of files that are in fact scripts installed in the |
44 | # A space separated list of files that are in fact scripts installed in the |
| 48 | # texmf tree and that we want to be available directly. They will be installed in |
45 | # texmf tree and that we want to be available directly. They will be installed in |
| … | |
… | |
| 52 | # @DESCRIPTION: |
49 | # @DESCRIPTION: |
| 53 | # Normally the module's PV reflects the TeXLive release it belongs to. |
50 | # Normally the module's PV reflects the TeXLive release it belongs to. |
| 54 | # If this is not the case, TL_PV takes the version number for the |
51 | # If this is not the case, TL_PV takes the version number for the |
| 55 | # needed app-text/texlive-core. |
52 | # needed app-text/texlive-core. |
| 56 | |
53 | |
|
|
54 | # @ECLASS-VARIABLE: TL_MODULE_INFORMATION |
|
|
55 | # @DESCRIPTION: |
|
|
56 | # Information to display about the package. |
|
|
57 | # e.g. for enabling/disabling a feature |
|
|
58 | |
| 57 | inherit texlive-common |
59 | inherit texlive-common base |
| 58 | |
60 | |
| 59 | HOMEPAGE="http://www.tug.org/texlive/" |
61 | HOMEPAGE="http://www.tug.org/texlive/" |
| 60 | |
62 | |
| 61 | COMMON_DEPEND=">=app-text/texlive-core-${TL_PV:-${PV}}" |
63 | COMMON_DEPEND=">=app-text/texlive-core-${TL_PV:-${PV}}" |
| 62 | |
64 | |
| 63 | IUSE="source" |
65 | IUSE="source" |
| 64 | |
66 | |
| 65 | # TeX Live 2008 was providing .tar.lzma files of CTAN packages. |
67 | # Starting from TeX Live 2009, upstream provides .tar.xz modules. |
| 66 | # For 2009 and 2010 they are now .tar.xz |
|
|
| 67 | if [ "${PV#2008}" != "${PV}" ]; then |
|
|
| 68 | PKGEXT=tar.lzma |
68 | PKGEXT=tar.xz |
| 69 | DEPEND="${COMMON_DEPEND} |
69 | DEPEND="${COMMON_DEPEND} |
| 70 | || ( app-arch/xz-utils app-arch/lzma-utils )" |
|
|
| 71 | else |
|
|
| 72 | PKGEXT=tar.xz |
|
|
| 73 | DEPEND="${COMMON_DEPEND} |
|
|
| 74 | app-arch/xz-utils" |
70 | app-arch/xz-utils" |
| 75 | fi |
|
|
| 76 | |
71 | |
| 77 | for i in ${TEXLIVE_MODULE_CONTENTS}; do |
72 | for i in ${TEXLIVE_MODULE_CONTENTS}; do |
| 78 | SRC_URI="${SRC_URI} mirror://gentoo/texlive-module-${i}-${PV}.${PKGEXT}" |
73 | SRC_URI="${SRC_URI} mirror://gentoo/texlive-module-${i}-${PV}.${PKGEXT}" |
| 79 | done |
74 | done |
| 80 | |
75 | |
| … | |
… | |
| 98 | |
93 | |
| 99 | [ -z "${PN##*documentation*}" ] || IUSE="${IUSE} doc" |
94 | [ -z "${PN##*documentation*}" ] || IUSE="${IUSE} doc" |
| 100 | |
95 | |
| 101 | S="${WORKDIR}" |
96 | S="${WORKDIR}" |
| 102 | |
97 | |
| 103 | if [ "${PV#2008}" = "${PV}" ]; then |
|
|
| 104 | |
|
|
| 105 | # @FUNCTION: texlive-module_src_unpack |
98 | # @FUNCTION: texlive-module_src_unpack |
| 106 | # @DESCRIPTION: |
99 | # @DESCRIPTION: |
| 107 | # Only for TeX Live 2009 and later. |
100 | # Only for TeX Live 2009 and later. |
| 108 | # Gives tar.xz unpack support until we can use an EAPI with that support. |
101 | # Gives tar.xz unpack support until we can use an EAPI with that support. |
| 109 | # If EAPI supports tar.xz then it calls unpack instead of its own unpacker. |
102 | # If EAPI supports tar.xz then it calls unpack instead of its own unpacker. |
| 110 | # After unpacking, the files that need to relocated are moved accordingly. |
103 | # After unpacking, the files that need to be relocated are moved accordingly. |
| 111 | |
104 | |
| 112 | RELOC_TARGET=texmf-dist |
105 | RELOC_TARGET=texmf-dist |
| 113 | |
106 | |
| 114 | texlive-module_src_unpack() { |
107 | texlive-module_src_unpack() { |
| 115 | if has "${EAPI:-0}" 0 1 2 ; then |
108 | if has "${EAPI:-0}" 0 1 2 ; then |
| 116 | local i s |
109 | local i s |
|
|
110 | # Avoid installing world writable files |
|
|
111 | # Bugs #309997, #310039, #338881 |
|
|
112 | umask 022 |
| 117 | for i in ${A} |
113 | for i in ${A} |
| 118 | do |
114 | do |
| 119 | s="${DISTDIR%/}/${i}" |
115 | s="${DISTDIR%/}/${i}" |
| 120 | einfo "Unpacking ${s} to ${PWD}" |
116 | einfo "Unpacking ${s} to ${PWD}" |
| 121 | test -s "${s}" || die "${s} does not exist" |
117 | test -s "${s}" || die "${s} does not exist" |
| 122 | xz -dc -- "${s}" | tar xof - || die "Unpacking ${s} failed" |
118 | xz -dc -- "${s}" | tar xof - || die "Unpacking ${s} failed" |
| 123 | done |
119 | done |
| 124 | else |
120 | else |
| 125 | unpack ${A} |
121 | unpack ${A} |
| 126 | fi |
122 | fi |
|
|
123 | |
| 127 | grep RELOC tlpkg/tlpobj/* | awk '{print $2}' | sed 's#^RELOC/##' > "${T}/reloclist" |
124 | grep RELOC tlpkg/tlpobj/* | awk '{print $2}' | sed 's#^RELOC/##' > "${T}/reloclist" |
| 128 | { for i in $(<"${T}/reloclist"); do dirname $i; done; } | uniq > "${T}/dirlist" |
125 | { for i in $(<"${T}/reloclist"); do dirname $i; done; } | uniq > "${T}/dirlist" |
| 129 | for i in $(<"${T}/dirlist"); do |
126 | for i in $(<"${T}/dirlist"); do |
| 130 | [ -d "${RELOC_TARGET}/${i}" ] || mkdir -p "${RELOC_TARGET}/${i}" |
127 | [ -d "${RELOC_TARGET}/${i}" ] || mkdir -p "${RELOC_TARGET}/${i}" |
| 131 | done |
128 | done |
| 132 | for i in $(<"${T}/reloclist"); do |
129 | for i in $(<"${T}/reloclist"); do |
| 133 | mv "${i}" "${RELOC_TARGET}"/$(dirname "${i}") || die "failed to relocate ${i} to ${RELOC_TARGET}/$(dirname ${i})" |
130 | mv "${i}" "${RELOC_TARGET}"/$(dirname "${i}") || die "failed to relocate ${i} to ${RELOC_TARGET}/$(dirname ${i})" |
| 134 | done |
131 | done |
| 135 | } |
132 | } |
| 136 | |
|
|
| 137 | fi |
|
|
| 138 | |
133 | |
| 139 | # @FUNCTION: texlive-module_add_format |
134 | # @FUNCTION: texlive-module_add_format |
| 140 | # @DESCRIPTION: |
135 | # @DESCRIPTION: |
| 141 | # Creates/appends to a format.${PN}.cnf file for fmtutil. |
136 | # Creates/appends to a format.${PN}.cnf file for fmtutil. |
| 142 | # It parses the AddFormat directive of tlpobj files to create it. |
137 | # It parses the AddFormat directive of tlpobj files to create it. |
| … | |
… | |
| 216 | |
211 | |
| 217 | texlive-module_make_language_lua_lines() { |
212 | texlive-module_make_language_lua_lines() { |
| 218 | local lefthyphenmin righthyphenmin synonyms name file file_patterns file_exceptions luaspecial |
213 | local lefthyphenmin righthyphenmin synonyms name file file_patterns file_exceptions luaspecial |
| 219 | local dest="${S}/language.${PN}.dat.lua" |
214 | local dest="${S}/language.${PN}.dat.lua" |
| 220 | eval $@ |
215 | eval $@ |
|
|
216 | [ -z "$lefthyphenmin" ] && lefthyphenmin="2" |
|
|
217 | [ -z "$righthyphenmin" ] && righthyphenmin="3" |
| 221 | einfo "Generating language.dat.lua entry for $@" |
218 | einfo "Generating language.dat.lua entry for $@" |
| 222 | printf "\t['%s'] = {\n" "$name" >> "$dest" |
219 | printf "\t['%s'] = {\n" "$name" >> "$dest" |
| 223 | printf "\t\tloader = '%s',\n" "$file" >> "$dest" |
220 | printf "\t\tloader = '%s',\n" "$file" >> "$dest" |
| 224 | printf "\t\tlefthyphenmin = %s,\n\t\trighthyphenmin = %s,\n" "$lefthyphenmin" "$righthyphenmin" >> "$dest" |
221 | printf "\t\tlefthyphenmin = %s,\n\t\trighthyphenmin = %s,\n" "$lefthyphenmin" "$righthyphenmin" >> "$dest" |
| 225 | printf "\t\tsynonyms = {%s },\n" "$(texlive-module_synonyms_to_language_lua_line "$synonyms")" >> "$dest" |
222 | printf "\t\tsynonyms = {%s },\n" "$(texlive-module_synonyms_to_language_lua_line "$synonyms")" >> "$dest" |
| … | |
… | |
| 233 | # @DESCRIPTION: |
230 | # @DESCRIPTION: |
| 234 | # exported function: |
231 | # exported function: |
| 235 | # Generates the config files that are to be installed in /etc/texmf; |
232 | # Generates the config files that are to be installed in /etc/texmf; |
| 236 | # texmf-update script will take care of merging the different config files for |
233 | # texmf-update script will take care of merging the different config files for |
| 237 | # different packages in a single one used by the whole tex installation. |
234 | # different packages in a single one used by the whole tex installation. |
| 238 | # |
235 | # |
| 239 | # Once the config files are generated, we build the format files using fmtutil |
236 | # Once the config files are generated, we build the format files using fmtutil |
| 240 | # (provided by texlive-core). The compiled format files will be sent to |
237 | # (provided by texlive-core). The compiled format files will be sent to |
| 241 | # texmf-var/web2c, like fmtutil defaults to but with some trick to stay in the |
238 | # texmf-var/web2c, like fmtutil defaults to but with some trick to stay in the |
| 242 | # sandbox. |
239 | # sandbox. |
| 243 | |
240 | |
| 244 | texlive-module_src_compile() { |
241 | texlive-module_src_compile() { |
| 245 | # Generate config files from the tlpobj files provided by TeX Live 2008 and |
242 | # Generate config files from the tlpobj files provided by TeX Live 2008 and |
| 246 | # later |
243 | # later |
| 247 | for i in "${S}"/tlpkg/tlpobj/*; |
244 | for i in "${S}"/tlpkg/tlpobj/*; |
| 248 | do |
245 | do |
| 249 | grep '^execute ' "${i}" | sed -e 's/^execute //' | tr ' \t' '@@' |sort|uniq >> "${T}/jobs" |
246 | grep '^execute ' "${i}" | sed -e 's/^execute //' | tr ' \t' '##' |sort|uniq >> "${T}/jobs" |
| 250 | done |
247 | done |
| 251 | |
248 | |
| 252 | for i in $(<"${T}/jobs"); |
249 | for i in $(<"${T}/jobs"); |
| 253 | do |
250 | do |
| 254 | j="$(echo $i | tr '@' ' ')" |
251 | j="$(echo $i | tr '#' ' ')" |
| 255 | command=${j%% *} |
252 | command=${j%% *} |
| 256 | parameter=${j#* } |
253 | parameter=${j#* } |
| 257 | case "${command}" in |
254 | case "${command}" in |
| 258 | addMap) |
255 | addMap) |
| 259 | echo "Map ${parameter}" >> "${S}/${PN}.cfg";; |
256 | echo "Map ${parameter}" >> "${S}/${PN}.cfg";; |
| 260 | addMixedMap) |
257 | addMixedMap) |
| 261 | echo "MixedMap ${parameter}" >> "${S}/${PN}.cfg";; |
258 | echo "MixedMap ${parameter}" >> "${S}/${PN}.cfg";; |
|
|
259 | addKanjiMap) |
|
|
260 | echo "KanjiMap ${parameter}" >> "${S}/${PN}.cfg";; |
| 262 | addDvipsMap) |
261 | addDvipsMap) |
| 263 | echo "p +${parameter}" >> "${S}/${PN}-config.ps";; |
262 | echo "p +${parameter}" >> "${S}/${PN}-config.ps";; |
| 264 | addDvipdfmMap) |
263 | addDvipdfmMap) |
| 265 | echo "f ${parameter}" >> "${S}/${PN}-config";; |
264 | echo "f ${parameter}" >> "${S}/${PN}-config";; |
| 266 | AddHyphen) |
265 | AddHyphen) |
| 267 | texlive-module_make_language_def_lines "$parameter" |
266 | texlive-module_make_language_def_lines "$parameter" |
| 268 | texlive-module_make_language_dat_lines "$parameter" |
267 | texlive-module_make_language_dat_lines "$parameter" |
| 269 | [ "${PV#2008}" = "${PV}" -a "${PV#2009}" = "${PV}" ] && texlive-module_make_language_lua_lines "$parameter" |
268 | texlive-module_make_language_lua_lines "$parameter" |
| 270 | ;; |
269 | ;; |
| 271 | AddFormat) |
270 | AddFormat) |
| 272 | texlive-module_add_format "$parameter";; |
271 | texlive-module_add_format "$parameter";; |
| 273 | BuildFormat) |
272 | BuildFormat) |
| 274 | einfo "Format $parameter already built.";; |
273 | einfo "Format $parameter already built.";; |
| … | |
… | |
| 351 | # exported function: |
350 | # exported function: |
| 352 | # Run texmf-update to ensure the tex installation is consistent with the |
351 | # Run texmf-update to ensure the tex installation is consistent with the |
| 353 | # installed texmf trees. |
352 | # installed texmf trees. |
| 354 | |
353 | |
| 355 | texlive-module_pkg_postinst() { |
354 | texlive-module_pkg_postinst() { |
| 356 | if [ "$ROOT" = "/" ] && [ -x /usr/sbin/texmf-update ] ; then |
355 | etexmf-update |
| 357 | /usr/sbin/texmf-update |
356 | [ -n "${TL_MODULE_INFORMATION}" ] && elog "${TL_MODULE_INFORMATION}" |
| 358 | else |
|
|
| 359 | ewarn "Cannot run texmf-update for some reason." |
|
|
| 360 | ewarn "Your texmf tree might be inconsistent with your configuration" |
|
|
| 361 | ewarn "Please try to figure what has happened" |
|
|
| 362 | fi |
|
|
| 363 | } |
357 | } |
| 364 | |
358 | |
| 365 | # @FUNCTION: texlive-module_pkg_postrm |
359 | # @FUNCTION: texlive-module_pkg_postrm |
| 366 | # @DESCRIPTION: |
360 | # @DESCRIPTION: |
| 367 | # exported function: |
361 | # exported function: |
| 368 | # Run texmf-update to ensure the tex installation is consistent with the |
362 | # Run texmf-update to ensure the tex installation is consistent with the |
| 369 | # installed texmf trees. |
363 | # installed texmf trees. |
| 370 | |
364 | |
| 371 | texlive-module_pkg_postrm() { |
365 | texlive-module_pkg_postrm() { |
| 372 | if [ "$ROOT" = "/" ] && [ -x /usr/sbin/texmf-update ] ; then |
366 | etexmf-update |
| 373 | /usr/sbin/texmf-update |
|
|
| 374 | else |
|
|
| 375 | ewarn "Cannot run texmf-update for some reason." |
|
|
| 376 | ewarn "Your texmf tree might be inconsistent with your configuration" |
|
|
| 377 | ewarn "Please try to figure what has happened" |
|
|
| 378 | fi |
|
|
| 379 | } |
367 | } |
| 380 | |
368 | |
| 381 | if [ "${PV#2008}" != "${PV}" ]; then |
|
|
| 382 | EXPORT_FUNCTIONS src_compile src_install pkg_postinst pkg_postrm |
|
|
| 383 | else |
|
|
| 384 | EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_postinst pkg_postrm |
369 | EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_postinst pkg_postrm |
| 385 | fi |
|
|