1 | # Copyright 1999-2004 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/ghc-package.eclass,v 1.23 2007/07/25 18:07:02 dcoutts Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/ghc-package.eclass,v 1.30 2011/05/08 15:00:43 slyfox Exp $ |
4 | # |
4 | # |
5 | # Author: Andres Loeh <kosmikus@gentoo.org> |
5 | # @ECLASS: ghc-package.eclass |
6 | # Maintained by: Haskell herd <haskell@gentoo.org> |
6 | # @MAINTAINER: |
|
|
7 | # "Gentoo's Haskell Language team" <haskell@gentoo.org> |
7 | # |
8 | # |
|
|
9 | # Original Author: Andres Loeh <kosmikus@gentoo.org> |
|
|
10 | # |
8 | # This eclass helps with the Glasgow Haskell Compiler's package |
11 | # @BLURB: This eclass helps with the Glasgow Haskell Compiler's package configuration utility. |
9 | # configuration utility. |
12 | # @DESCRIPTION: |
|
|
13 | # Helper eclass to handle ghc installation/upgrade/deinstallation process. |
10 | |
14 | |
11 | inherit versionator |
15 | inherit versionator |
12 | |
16 | |
13 | # promote /opt/ghc/bin to a better position in the search path |
17 | # @FUNCTION: ghc-getghc |
14 | PATH="/usr/bin:/opt/ghc/bin:${PATH}" |
18 | # @DESCRIPTION: |
15 | |
|
|
16 | # for later configuration using environment variables/ |
|
|
17 | # returns the name of the ghc executable |
19 | # returns the name of the ghc executable |
18 | ghc-getghc() { |
20 | ghc-getghc() { |
19 | type -P ghc |
21 | type -P ghc |
20 | } |
22 | } |
21 | |
23 | |
|
|
24 | # @FUNCTION: ghc-getghcpkg |
|
|
25 | # @DESCRIPTION: |
22 | # returns the name of the ghc-pkg executable |
26 | # Internal function determines returns the name of the ghc-pkg executable |
23 | ghc-getghcpkg() { |
27 | ghc-getghcpkg() { |
24 | type -P ghc-pkg |
28 | type -P ghc-pkg |
25 | } |
29 | } |
26 | |
30 | |
|
|
31 | # @FUNCTION: ghc-getghcpkgbin |
|
|
32 | # @DESCRIPTION: |
27 | # returns the name of the ghc-pkg binary (ghc-pkg |
33 | # returns the name of the ghc-pkg binary (ghc-pkg |
28 | # itself usually is a shell script, and we have to |
34 | # itself usually is a shell script, and we have to |
29 | # bypass the script under certain circumstances); |
35 | # bypass the script under certain circumstances); |
30 | # for Cabal, we add an empty global package config file, |
36 | # for Cabal, we add an empty global package config file, |
31 | # because for some reason the global package file |
37 | # because for some reason the global package file |
32 | # must be specified |
38 | # must be specified |
33 | ghc-getghcpkgbin() { |
39 | ghc-getghcpkgbin() { |
|
|
40 | if version_is_at_least "6.10" "$(ghc-version)"; then |
|
|
41 | # the ghc-pkg executable changed name in ghc 6.10, as it no longer needs |
|
|
42 | # the wrapper script with the static flags |
|
|
43 | echo '[]' > "${T}/empty.conf" |
|
|
44 | echo "$(ghc-libdir)/ghc-pkg" "--global-conf=${T}/empty.conf" |
34 | if ghc-cabal; then |
45 | elif ghc-cabal; then |
35 | echo '[]' > "${T}/empty.conf" |
46 | echo '[]' > "${T}/empty.conf" |
36 | echo "$(ghc-libdir)/ghc-pkg.bin" "--global-conf=${T}/empty.conf" |
47 | echo "$(ghc-libdir)/ghc-pkg.bin" "--global-conf=${T}/empty.conf" |
37 | else |
48 | else |
38 | echo "$(ghc-libdir)/ghc-pkg.bin" |
49 | echo "$(ghc-libdir)/ghc-pkg.bin" |
39 | fi |
50 | fi |
40 | } |
51 | } |
41 | |
52 | |
|
|
53 | # @FUNCTION: ghc-version |
|
|
54 | # @DESCRIPTION: |
42 | # returns the version of ghc |
55 | # returns the version of ghc |
43 | _GHC_VERSION_CACHE="" |
56 | _GHC_VERSION_CACHE="" |
44 | ghc-version() { |
57 | ghc-version() { |
45 | if [[ -z "${_GHC_VERSION_CACHE}" ]]; then |
58 | if [[ -z "${_GHC_VERSION_CACHE}" ]]; then |
46 | _GHC_VERSION_CACHE="$($(ghc-getghc) --numeric-version)" |
59 | _GHC_VERSION_CACHE="$($(ghc-getghc) --numeric-version)" |
47 | fi |
60 | fi |
48 | echo "${_GHC_VERSION_CACHE}" |
61 | echo "${_GHC_VERSION_CACHE}" |
49 | } |
62 | } |
50 | |
63 | |
|
|
64 | # @FUNCTION: ghc-cabal |
|
|
65 | # @DESCRIPTION: |
51 | # this function can be used to determine if ghc itself |
66 | # this function can be used to determine if ghc itself |
52 | # uses the Cabal package format; it has nothing to do |
67 | # uses the Cabal package format; it has nothing to do |
53 | # with the Cabal libraries ... ghc uses the Cabal package |
68 | # with the Cabal libraries ... ghc uses the Cabal package |
54 | # format since version 6.4 |
69 | # format since version 6.4 |
55 | ghc-cabal() { |
70 | ghc-cabal() { |
56 | version_is_at_least "6.4" "$(ghc-version)" |
71 | version_is_at_least "6.4" "$(ghc-version)" |
57 | } |
72 | } |
58 | |
73 | |
|
|
74 | # @FUNCTION: ghc-bestcabalversion |
|
|
75 | # @DESCRIPTION: |
59 | # return the best version of the Cabal library that is available |
76 | # return the best version of the Cabal library that is available |
60 | ghc-bestcabalversion() { |
77 | ghc-bestcabalversion() { |
61 | local cabalversion |
78 | local cabalversion |
62 | if ghc-cabal; then |
79 | if ghc-cabal; then |
63 | # We ask portage, not ghc, so that we only pick up |
80 | # We ask portage, not ghc, so that we only pick up |
… | |
… | |
68 | # older ghc's don't support package versioning |
85 | # older ghc's don't support package versioning |
69 | echo Cabal |
86 | echo Cabal |
70 | fi |
87 | fi |
71 | } |
88 | } |
72 | |
89 | |
|
|
90 | # @FUNCTION: ghc-sanecabal |
|
|
91 | # @DESCRIPTION: |
73 | # check if a standalone Cabal version is available for the |
92 | # check if a standalone Cabal version is available for the |
74 | # currently used ghc; takes minimal version of Cabal as |
93 | # currently used ghc; takes minimal version of Cabal as |
75 | # an optional argument |
94 | # an optional argument |
76 | ghc-sanecabal() { |
95 | ghc-sanecabal() { |
77 | local f |
96 | local f |
… | |
… | |
81 | [[ -f "${f}" ]] && version_is_at_least "${version}" "${f#*cabal-}" && return |
100 | [[ -f "${f}" ]] && version_is_at_least "${version}" "${f#*cabal-}" && return |
82 | done |
101 | done |
83 | return 1 |
102 | return 1 |
84 | } |
103 | } |
85 | |
104 | |
|
|
105 | # @FUNCTION: ghc-saneghc |
|
|
106 | # @DESCRIPTION: |
86 | # checks if ghc and ghc-bin are installed in the same version |
107 | # checks if ghc and ghc-bin are installed in the same version |
87 | # (if they're both installed); if this is not the case, we |
108 | # (if they're both installed); if this is not the case, we |
88 | # unfortunately cannot trust portage's dependency resolution |
109 | # unfortunately cannot trust portage's dependency resolution |
89 | ghc-saneghc() { |
110 | ghc-saneghc() { |
90 | local ghcversion |
111 | local ghcversion |
91 | local ghcbinversion |
112 | local ghcbinversion |
92 | if [[ "${PN}" == "ghc" || "${PN}" == "ghc-bin" ]]; then |
113 | if [[ "${PN}" == "ghc" || "${PN}" == "ghc-bin" ]]; then |
… | |
… | |
100 | fi |
121 | fi |
101 | fi |
122 | fi |
102 | return |
123 | return |
103 | } |
124 | } |
104 | |
125 | |
|
|
126 | # @FUNCTION: ghc-supports-shared-libraries |
|
|
127 | # @DESCRIPTION: |
|
|
128 | # checks if ghc is built with support for building |
|
|
129 | # shared libraries (aka '-dynamic' option) |
|
|
130 | ghc-supports-shared-libraries() { |
|
|
131 | $(ghc-getghc) --info | grep "RTS ways" | grep -q "dyn" |
|
|
132 | } |
|
|
133 | |
|
|
134 | # @FUNCTION: ghc-extractportageversion |
|
|
135 | # @DESCRIPTION: |
105 | # extract the version of a portage-installed package |
136 | # extract the version of a portage-installed package |
106 | ghc-extractportageversion() { |
137 | ghc-extractportageversion() { |
107 | local pkg |
138 | local pkg |
108 | local version |
139 | local version |
109 | pkg="$(best_version $1)" |
140 | pkg="$(best_version $1)" |
… | |
… | |
111 | version="${version%-r*}" |
142 | version="${version%-r*}" |
112 | version="${version%_pre*}" |
143 | version="${version%_pre*}" |
113 | echo "${version}" |
144 | echo "${version}" |
114 | } |
145 | } |
115 | |
146 | |
|
|
147 | # @FUNCTION: ghc-libdir |
|
|
148 | # @DESCRIPTION: |
116 | # returns the library directory |
149 | # returns the library directory |
117 | _GHC_LIBDIR_CACHE="" |
150 | _GHC_LIBDIR_CACHE="" |
118 | ghc-libdir() { |
151 | ghc-libdir() { |
119 | if [[ -z "${_GHC_LIBDIR_CACHE}" ]]; then |
152 | if [[ -z "${_GHC_LIBDIR_CACHE}" ]]; then |
120 | _GHC_LIBDIR_CACHE="$($(ghc-getghc) --print-libdir)" |
153 | _GHC_LIBDIR_CACHE="$($(ghc-getghc) --print-libdir)" |
121 | fi |
154 | fi |
122 | echo "${_GHC_LIBDIR_CACHE}" |
155 | echo "${_GHC_LIBDIR_CACHE}" |
123 | } |
156 | } |
124 | |
157 | |
|
|
158 | # @FUNCTION: ghc-confdir |
|
|
159 | # @DESCRIPTION: |
125 | # returns the (Gentoo) library configuration directory |
160 | # returns the (Gentoo) library configuration directory |
126 | ghc-confdir() { |
161 | ghc-confdir() { |
127 | echo "$(ghc-libdir)/gentoo" |
162 | echo "$(ghc-libdir)/gentoo" |
128 | } |
163 | } |
129 | |
164 | |
|
|
165 | # @FUNCTION: ghc-localpkgconf |
|
|
166 | # @DESCRIPTION: |
130 | # returns the name of the local (package-specific) |
167 | # returns the name of the local (package-specific) |
131 | # package configuration file |
168 | # package configuration file |
132 | ghc-localpkgconf() { |
169 | ghc-localpkgconf() { |
133 | echo "${PF}.conf" |
170 | echo "${PF}.conf" |
134 | } |
171 | } |
135 | |
172 | |
|
|
173 | # @FUNCTION: ghc-makeghcilib |
|
|
174 | # @DESCRIPTION: |
136 | # make a ghci foo.o file from a libfoo.a file |
175 | # make a ghci foo.o file from a libfoo.a file |
137 | ghc-makeghcilib() { |
176 | ghc-makeghcilib() { |
138 | local outfile |
177 | local outfile |
139 | outfile="$(dirname $1)/$(basename $1 | sed 's:^lib\?\(.*\)\.a$:\1.o:')" |
178 | outfile="$(dirname $1)/$(basename $1 | sed 's:^lib\?\(.*\)\.a$:\1.o:')" |
140 | ld --relocatable --discard-all --output="${outfile}" --whole-archive "$1" |
179 | ld --relocatable --discard-all --output="${outfile}" --whole-archive "$1" |
141 | } |
180 | } |
142 | |
181 | |
|
|
182 | # @FUNCTION: ghc-makeghcilib |
|
|
183 | # @DESCRIPTION: |
143 | # tests if a ghc package exists |
184 | # tests if a ghc package exists |
144 | ghc-package-exists() { |
185 | ghc-package-exists() { |
|
|
186 | local describe_flag |
|
|
187 | if version_is_at_least "6.4" "$(ghc-version)"; then |
|
|
188 | describe_flag="describe" |
|
|
189 | else |
|
|
190 | describe_flag="--show-package" |
|
|
191 | fi |
|
|
192 | |
145 | $(ghc-getghcpkg) -s "$1" > /dev/null 2>&1 |
193 | $(ghc-getghcpkg) "${describe_flag}" "$1" > /dev/null 2>&1 |
146 | } |
194 | } |
147 | |
195 | |
|
|
196 | # @FUNCTION: ghc-setup-pkg |
|
|
197 | # @DESCRIPTION: |
148 | # creates a local (package-specific) package |
198 | # creates a local (package-specific) package |
149 | # configuration file; the arguments should be |
199 | # configuration file; the arguments should be |
150 | # uninstalled package description files, each |
200 | # uninstalled package description files, each |
151 | # containing a single package description; if |
201 | # containing a single package description; if |
152 | # no arguments are given, the resulting file is |
202 | # no arguments are given, the resulting file is |
153 | # empty |
203 | # empty |
154 | ghc-setup-pkg() { |
204 | ghc-setup-pkg() { |
155 | local localpkgconf |
205 | local localpkgconf |
156 | localpkgconf="${S}/$(ghc-localpkgconf)" |
206 | localpkgconf="${S}/$(ghc-localpkgconf)" |
157 | echo '[]' > "${localpkgconf}" |
207 | echo '[]' > "${localpkgconf}" |
|
|
208 | local update_flag |
|
|
209 | if version_is_at_least "6.4" "$(ghc-version)"; then |
|
|
210 | update_flag="update -" |
|
|
211 | else |
|
|
212 | update_flag="--update-package" |
|
|
213 | fi |
158 | for pkg in $*; do |
214 | for pkg in $*; do |
159 | $(ghc-getghcpkgbin) -f "${localpkgconf}" -u --force \ |
215 | $(ghc-getghcpkgbin) -f "${localpkgconf}" ${update_flag} --force \ |
160 | < "${pkg}" || die "failed to register ${pkg}" |
216 | < "${pkg}" || die "failed to register ${pkg}" |
161 | done |
217 | done |
162 | } |
218 | } |
163 | |
219 | |
|
|
220 | # @FUNCTION: ghc-fixlibpath |
|
|
221 | # @DESCRIPTION: |
164 | # fixes the library and import directories path |
222 | # fixes the library and import directories path |
165 | # of the package configuration file |
223 | # of the package configuration file |
166 | ghc-fixlibpath() { |
224 | ghc-fixlibpath() { |
167 | sed -i "s|$1|$(ghc-libdir)|g" "${S}/$(ghc-localpkgconf)" |
225 | sed -i "s|$1|$(ghc-libdir)|g" "${S}/$(ghc-localpkgconf)" |
168 | if [[ -n "$2" ]]; then |
226 | if [[ -n "$2" ]]; then |
169 | sed -i "s|$2|$(ghc-libdir)/imports|g" "${S}/$(ghc-localpkgconf)" |
227 | sed -i "s|$2|$(ghc-libdir)/imports|g" "${S}/$(ghc-localpkgconf)" |
170 | fi |
228 | fi |
171 | } |
229 | } |
172 | |
230 | |
|
|
231 | # @FUNCTION: ghc-install-pkg |
|
|
232 | # @DESCRIPTION: |
173 | # moves the local (package-specific) package configuration |
233 | # moves the local (package-specific) package configuration |
174 | # file to its final destination |
234 | # file to its final destination |
175 | ghc-install-pkg() { |
235 | ghc-install-pkg() { |
176 | mkdir -p "${D}/$(ghc-confdir)" |
236 | mkdir -p "${D}/$(ghc-confdir)" |
177 | cat "${S}/$(ghc-localpkgconf)" | sed "s|${D}||g" \ |
237 | cat "${S}/$(ghc-localpkgconf)" | sed "s|${D}||g" \ |
178 | > "${D}/$(ghc-confdir)/$(ghc-localpkgconf)" |
238 | > "${D}/$(ghc-confdir)/$(ghc-localpkgconf)" |
179 | } |
239 | } |
180 | |
240 | |
|
|
241 | # @FUNCTION: ghc-register-pkg |
|
|
242 | # @DESCRIPTION: |
181 | # registers all packages in the local (package-specific) |
243 | # registers all packages in the local (package-specific) |
182 | # package configuration file |
244 | # package configuration file |
183 | ghc-register-pkg() { |
245 | ghc-register-pkg() { |
184 | local localpkgconf |
246 | local localpkgconf |
185 | localpkgconf="$(ghc-confdir)/$1" |
247 | localpkgconf="$(ghc-confdir)/$1" |
|
|
248 | local update_flag |
|
|
249 | local describe_flag |
|
|
250 | if version_is_at_least "6.4" "$(ghc-version)"; then |
|
|
251 | update_flag="update -" |
|
|
252 | describe_flag="describe" |
|
|
253 | else |
|
|
254 | update_flag="--update-package" |
|
|
255 | describe_flag="--show-package" |
|
|
256 | fi |
186 | if [[ -f "${localpkgconf}" ]]; then |
257 | if [[ -f "${localpkgconf}" ]]; then |
187 | for pkg in $(ghc-listpkg "${localpkgconf}"); do |
258 | for pkg in $(ghc-listpkg "${localpkgconf}"); do |
188 | ebegin "Registering ${pkg} " |
259 | ebegin "Registering ${pkg} " |
189 | $(ghc-getghcpkgbin) -f "${localpkgconf}" -s "${pkg}" \ |
260 | $(ghc-getghcpkgbin) -f "${localpkgconf}" "${describe_flag}" "${pkg}" \ |
190 | | $(ghc-getghcpkg) -u --force > /dev/null |
261 | | $(ghc-getghcpkg) ${update_flag} --force > /dev/null |
191 | eend $? |
262 | eend $? |
192 | done |
263 | done |
193 | fi |
264 | fi |
194 | } |
265 | } |
195 | |
266 | |
|
|
267 | # @FUNCTION: ghc-reregister |
|
|
268 | # @DESCRIPTION: |
196 | # re-adds all available .conf files to the global |
269 | # re-adds all available .conf files to the global |
197 | # package conf file, to be used on a ghc reinstallation |
270 | # package conf file, to be used on a ghc reinstallation |
198 | ghc-reregister() { |
271 | ghc-reregister() { |
|
|
272 | has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX= |
199 | einfo "Re-adding packages (may cause several harmless warnings) ..." |
273 | einfo "Re-adding packages (may cause several harmless warnings) ..." |
200 | if [ -d "$(ghc-confdir)" ]; then |
274 | PATH="${EPREFIX}/usr/bin:${PATH}" CONFDIR="$(ghc-confdir)" |
201 | pushd "$(ghc-confdir)" > /dev/null |
275 | if [ -d "${CONFDIR}" ]; then |
|
|
276 | pushd "${CONFDIR}" > /dev/null |
202 | for conf in *.conf; do |
277 | for conf in *.conf; do |
203 | # einfo "Processing ${conf} ..." |
278 | PATH="${EPREFIX}/usr/bin:${PATH}" ghc-register-pkg "${conf}" |
204 | ghc-register-pkg "${conf}" |
|
|
205 | done |
279 | done |
206 | popd > /dev/null |
280 | popd > /dev/null |
207 | fi |
281 | fi |
208 | } |
282 | } |
209 | |
283 | |
|
|
284 | # @FUNCTION: ghc-unregister-pkg |
|
|
285 | # @DESCRIPTION: |
210 | # unregisters a package configuration file |
286 | # unregisters a package configuration file |
211 | # protected are all packages that are still contained in |
287 | # protected are all packages that are still contained in |
212 | # another package configuration file |
288 | # another package configuration file |
213 | ghc-unregister-pkg() { |
289 | ghc-unregister-pkg() { |
214 | local localpkgconf |
290 | local localpkgconf |
215 | local i |
291 | local i |
216 | local pkg |
292 | local pkg |
217 | local protected |
293 | local unregister_flag |
218 | localpkgconf="$(ghc-confdir)/$1" |
294 | localpkgconf="$(ghc-confdir)/$1" |
219 | |
295 | |
220 | for i in $(ghc-confdir)/*.conf; do |
296 | if version_is_at_least "6.4" "$(ghc-version)"; then |
221 | [[ "${i}" != "${localpkgconf}" ]] && protected="${protected} $(ghc-listpkg ${i})" |
297 | unregister_flag="unregister" |
222 | done |
298 | else |
223 | # protected now contains the packages that cannot be unregistered yet |
299 | unregister_flag="--remove-package" |
|
|
300 | fi |
224 | |
301 | |
225 | if [[ -f "${localpkgconf}" ]]; then |
302 | if [[ -f "${localpkgconf}" ]]; then |
226 | for pkg in $(ghc-reverse "$(ghc-listpkg ${localpkgconf})"); do |
303 | for pkg in $(ghc-reverse "$(ghc-listpkg ${localpkgconf})"); do |
227 | if $(ghc-elem "${pkg}" "${protected}"); then |
|
|
228 | einfo "Package ${pkg} is protected." |
|
|
229 | elif ! ghc-package-exists "${pkg}"; then |
304 | if ! ghc-package-exists "${pkg}"; then |
230 | : |
|
|
231 | # einfo "Package ${pkg} is not installed for ghc-$(ghc-version)." |
305 | einfo "Package ${pkg} is not installed for ghc-$(ghc-version)." |
232 | else |
306 | else |
233 | ebegin "Unregistering ${pkg} " |
307 | ebegin "Unregistering ${pkg} " |
234 | $(ghc-getghcpkg) -r "${pkg}" --force > /dev/null |
308 | $(ghc-getghcpkg) "${unregister_flag}" "${pkg}" --force > /dev/null |
235 | eend $? |
309 | eend $? |
236 | fi |
310 | fi |
237 | done |
311 | done |
238 | fi |
312 | fi |
239 | } |
313 | } |
240 | |
314 | |
|
|
315 | # @FUNCTION: ghc-reverse |
|
|
316 | # @DESCRIPTION: |
241 | # help-function: reverse a list |
317 | # help-function: reverse a list |
242 | ghc-reverse() { |
318 | ghc-reverse() { |
243 | local result |
319 | local result |
244 | local i |
320 | local i |
245 | for i in $1; do |
321 | for i in $1; do |
246 | result="${i} ${result}" |
322 | result="${i} ${result}" |
247 | done |
323 | done |
248 | echo "${result}" |
324 | echo "${result}" |
249 | } |
325 | } |
250 | |
326 | |
|
|
327 | # @FUNCTION: ghc-elem |
|
|
328 | # @DESCRIPTION: |
251 | # help-function: element-check |
329 | # help-function: element-check |
252 | ghc-elem() { |
330 | ghc-elem() { |
253 | local i |
331 | local i |
254 | for i in $2; do |
332 | for i in $2; do |
255 | [[ "$1" == "${i}" ]] && return 0 |
333 | [[ "$1" == "${i}" ]] && return 0 |
256 | done |
334 | done |
257 | return 1 |
335 | return 1 |
258 | } |
336 | } |
259 | |
337 | |
|
|
338 | # @FUNCTION: ghc-listpkg |
|
|
339 | # @DESCRIPTION: |
260 | # show the packages in a package configuration file |
340 | # show the packages in a package configuration file |
261 | ghc-listpkg() { |
341 | ghc-listpkg() { |
262 | local ghcpkgcall |
342 | local ghcpkgcall |
263 | local i |
343 | local i |
|
|
344 | local extra_flags |
|
|
345 | if version_is_at_least '6.12.3' "$(ghc-version)"; then |
|
|
346 | extra_flags="${extra_flags} -v0" |
|
|
347 | fi |
264 | for i in $*; do |
348 | for i in $*; do |
265 | if ghc-cabal; then |
349 | if ghc-cabal; then |
266 | echo $($(ghc-getghcpkg) list -f "${i}") \ |
350 | echo $($(ghc-getghcpkg) list ${extra_flags} -f "${i}") \ |
267 | | sed \ |
351 | | sed \ |
268 | -e "s|^.*${i}:\([^:]*\).*$|\1|" \ |
352 | -e "s|^.*${i}:\([^:]*\).*$|\1|" \ |
269 | -e "s|/.*$||" \ |
353 | -e "s|/.*$||" \ |
270 | -e "s|,| |g" -e "s|[()]||g" |
354 | -e "s|,| |g" -e "s|[(){}]||g" |
271 | else |
355 | else |
272 | echo $($(ghc-getghcpkgbin) -l -f "${i}") \ |
356 | echo $($(ghc-getghcpkgbin) -l -f "${i}") \ |
273 | | cut -f2 -d':' \ |
357 | | cut -f2 -d':' \ |
274 | | sed 's:,: :g' |
358 | | sed 's:,: :g' |
275 | fi |
359 | fi |
276 | done |
360 | done |
277 | } |
361 | } |
278 | |
362 | |
|
|
363 | # @FUNCTION: ghc-package_pkg_setup |
|
|
364 | # @DESCRIPTION: |
279 | # exported function: check if we have a consistent ghc installation |
365 | # exported function: check if we have a consistent ghc installation |
280 | ghc-package_pkg_setup() { |
366 | ghc-package_pkg_setup() { |
281 | if ! ghc-saneghc; then |
367 | if ! ghc-saneghc; then |
282 | eerror "You have inconsistent versions of dev-lang/ghc and dev-lang/ghc-bin" |
368 | eerror "You have inconsistent versions of dev-lang/ghc and dev-lang/ghc-bin" |
283 | eerror "installed. Portage currently cannot work correctly with this setup." |
369 | eerror "installed. Portage currently cannot work correctly with this setup." |
… | |
… | |
288 | eerror "You probably want option 1 or 2." |
374 | eerror "You probably want option 1 or 2." |
289 | die "Inconsistent versions of ghc and ghc-bin." |
375 | die "Inconsistent versions of ghc and ghc-bin." |
290 | fi |
376 | fi |
291 | } |
377 | } |
292 | |
378 | |
|
|
379 | # @FUNCTION: ghc-package_pkg_postinst |
|
|
380 | # @DESCRIPTION: |
293 | # exported function: registers the package-specific package |
381 | # exported function: registers the package-specific package |
294 | # configuration file |
382 | # configuration file |
295 | ghc-package_pkg_postinst() { |
383 | ghc-package_pkg_postinst() { |
296 | ghc-register-pkg "$(ghc-localpkgconf)" |
384 | ghc-register-pkg "$(ghc-localpkgconf)" |
297 | } |
385 | } |
298 | |
386 | |
|
|
387 | # @FUNCTION: ghc-package_pkg_prerm |
|
|
388 | # @DESCRIPTION: |
299 | # exported function: unregisters the package-specific package |
389 | # exported function: unregisters the package-specific package |
300 | # configuration file; a package contained therein is unregistered |
390 | # configuration file; a package contained therein is unregistered |
301 | # only if it the same package is not also contained in another |
391 | # only if it the same package is not also contained in another |
302 | # package configuration file ... |
392 | # package configuration file ... |
303 | ghc-package_pkg_prerm() { |
393 | ghc-package_pkg_prerm() { |