/[gentoo-x86]/eclass/haskell-cabal.eclass
Gentoo

Diff of /eclass/haskell-cabal.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.22 Revision 1.23
1# Copyright 1999-2006 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/haskell-cabal.eclass,v 1.22 2010/09/12 07:37:09 slyfox Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/haskell-cabal.eclass,v 1.23 2011/03/13 20:15:14 slyfox Exp $
4# 4#
5# Original authors: Andres Loeh <kosmikus@gentoo.org> 5# Original authors: Andres Loeh <kosmikus@gentoo.org>
6# Duncan Coutts <dcoutts@gentoo.org> 6# Duncan Coutts <dcoutts@gentoo.org>
7# Maintained by: Haskell herd <haskell@gentoo.org> 7# Maintained by: Haskell herd <haskell@gentoo.org>
8# 8#
26# profile -- if package supports to build profiling-enabled libraries 26# profile -- if package supports to build profiling-enabled libraries
27# bootstrap -- only used for the cabal package itself 27# bootstrap -- only used for the cabal package itself
28# bin -- the package installs binaries 28# bin -- the package installs binaries
29# lib -- the package installs libraries 29# lib -- the package installs libraries
30# nocabaldep -- don't add dependency on cabal. 30# nocabaldep -- don't add dependency on cabal.
31# only used for packages that _must_ not pull the dependency 31# only used for packages that _must_ not pull the dependency
32# on cabal, but still use this eclass (e.g. haskell-updater). 32# on cabal, but still use this eclass (e.g. haskell-updater).
33# 33#
34# Dependencies on other cabal packages have to be specified 34# Dependencies on other cabal packages have to be specified
35# correctly. 35# correctly.
36# 36#
37# Cabal libraries should usually be SLOTted with "${PV}". 37# Cabal libraries should usually be SLOTted with "${PV}".
82 DEPEND="${DEPEND} hscolour? ( dev-haskell/hscolour )" 82 DEPEND="${DEPEND} hscolour? ( dev-haskell/hscolour )"
83fi 83fi
84 84
85if [[ -n "${CABAL_USE_ALEX}" ]]; then 85if [[ -n "${CABAL_USE_ALEX}" ]]; then
86 DEPEND="${DEPEND} dev-haskell/alex" 86 DEPEND="${DEPEND} dev-haskell/alex"
87 cabalconf="${cabalconf} --with-alex=/usr/bin/alex"
88fi 87fi
89 88
90if [[ -n "${CABAL_USE_HAPPY}" ]]; then 89if [[ -n "${CABAL_USE_HAPPY}" ]]; then
91 DEPEND="${DEPEND} dev-haskell/happy" 90 DEPEND="${DEPEND} dev-haskell/happy"
92 cabalconf="${cabalconf} --with-happy=/usr/bin/happy"
93fi 91fi
94 92
95if [[ -n "${CABAL_USE_C2HS}" ]]; then 93if [[ -n "${CABAL_USE_C2HS}" ]]; then
96 DEPEND="${DEPEND} dev-haskell/c2hs" 94 DEPEND="${DEPEND} dev-haskell/c2hs"
97 cabalconf="${cabalconf} --with-c2hs=/usr/bin/c2hs"
98fi 95fi
99 96
100if [[ -n "${CABAL_USE_CPPHS}" ]]; then 97if [[ -n "${CABAL_USE_CPPHS}" ]]; then
101 DEPEND="${DEPEND} dev-haskell/cpphs" 98 DEPEND="${DEPEND} dev-haskell/cpphs"
102 cabalconf="${cabalconf} --with-cpphs=/usr/bin/cpphs"
103fi 99fi
104 100
105if [[ -n "${CABAL_USE_PROFILE}" ]]; then 101if [[ -n "${CABAL_USE_PROFILE}" ]]; then
106 IUSE="${IUSE} profile" 102 IUSE="${IUSE} profile"
107fi 103fi
206 # --hyperlink-source implies calling 'setup hscolour' 202 # --hyperlink-source implies calling 'setup hscolour'
207 ./setup haddock --hyperlink-source || die "setup haddock failed" 203 ./setup haddock --hyperlink-source || die "setup haddock failed"
208} 204}
209 205
210cabal-configure() { 206cabal-configure() {
207 has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
208
211 if [[ -n "${CABAL_USE_HADDOCK}" ]] && use doc; then 209 if [[ -n "${CABAL_USE_HADDOCK}" ]] && use doc; then
212 cabalconf="${cabalconf} --with-haddock=/usr/bin/haddock" 210 cabalconf="${cabalconf} --with-haddock=${EPREFIX}/usr/bin/haddock"
213 fi 211 fi
214 if [[ -n "${CABAL_USE_PROFILE}" ]] && use profile; then 212 if [[ -n "${CABAL_USE_PROFILE}" ]] && use profile; then
215 cabalconf="${cabalconf} --enable-library-profiling" 213 cabalconf="${cabalconf} --enable-library-profiling"
216 fi 214 fi
215 if [[ -n "${CABAL_USE_ALEX}" ]]; then
216 cabalconf="${cabalconf} --with-alex=${EPREFIX}/usr/bin/alex"
217 fi
218
219 if [[ -n "${CABAL_USE_HAPPY}" ]]; then
220 cabalconf="${cabalconf} --with-happy=${EPREFIX}/usr/bin/happy"
221 fi
222
223 if [[ -n "${CABAL_USE_C2HS}" ]]; then
224 cabalconf="${cabalconf} --with-c2hs=${EPREFIX}/usr/bin/c2hs"
225 fi
226 if [[ -n "${CABAL_USE_CPPHS}" ]]; then
227 cabalconf="${cabalconf} --with-cpphs=${EPREFIX}/usr/bin/cpphs"
228 fi
229
217 # Building GHCi libs on ppc64 causes "TOC overflow". 230 # Building GHCi libs on ppc64 causes "TOC overflow".
218 if use ppc64; then 231 if use ppc64; then
219 cabalconf="${cabalconf} --disable-library-for-ghci" 232 cabalconf="${cabalconf} --disable-library-for-ghci"
220 fi 233 fi
221 234
228 # bug #251881, bug #251882, bug #251884, bug #251886, bug #299494 241 # bug #251881, bug #251882, bug #251884, bug #251886, bug #299494
229 cabalconf="${cabalconf} --disable-executable-stripping" 242 cabalconf="${cabalconf} --disable-executable-stripping"
230 fi 243 fi
231 244
232 if version_is_at_least "1.2.0" "$(cabal-version)"; then 245 if version_is_at_least "1.2.0" "$(cabal-version)"; then
233 cabalconf="${cabalconf} --docdir=/usr/share/doc/${PF}" 246 cabalconf="${cabalconf} --docdir=${EPREFIX}/usr/share/doc/${PF}"
234 # As of Cabal 1.2, configure is quite quiet. For diagnostic purposes 247 # As of Cabal 1.2, configure is quite quiet. For diagnostic purposes
235 # it's better if the configure chatter is in the build logs: 248 # it's better if the configure chatter is in the build logs:
236 cabalconf="${cabalconf} --verbose" 249 cabalconf="${cabalconf} --verbose"
237 fi 250 fi
238 # Note: with Cabal-1.1.6.x we do not have enough control 251 # Note: with Cabal-1.1.6.x we do not have enough control
240 # into /usr/share/${P}/ghc-x.y/doc/ 253 # into /usr/share/${P}/ghc-x.y/doc/
241 # rather than /usr/share/doc/${PF}/ 254 # rather than /usr/share/doc/${PF}/
242 # Because we can only set the datadir, not the docdir. 255 # Because we can only set the datadir, not the docdir.
243 256
244 ./setup configure \ 257 ./setup configure \
245 --ghc --prefix=/usr \ 258 --ghc --prefix="${EPREFIX}"/usr \
246 --with-compiler="$(ghc-getghc)" \ 259 --with-compiler="$(ghc-getghc)" \
247 --with-hc-pkg="$(ghc-getghcpkg)" \ 260 --with-hc-pkg="$(ghc-getghcpkg)" \
248 --prefix=/usr \ 261 --prefix="${EPREFIX}"/usr \
249 --libdir=/usr/$(get_libdir) \ 262 --libdir="${EPREFIX}"/usr/$(get_libdir) \
250 --libsubdir=${P}/ghc-$(ghc-version) \ 263 --libsubdir=${P}/ghc-$(ghc-version) \
251 --datadir=/usr/share/ \ 264 --datadir="${EPREFIX}"/usr/share/ \
252 --datasubdir=${P}/ghc-$(ghc-version) \ 265 --datasubdir=${P}/ghc-$(ghc-version) \
253 ${cabalconf} \ 266 ${cabalconf} \
254 ${CABAL_CONFIGURE_FLAGS} \ 267 ${CABAL_CONFIGURE_FLAGS} \
255 "$@" || die "setup configure failed" 268 "$@" || die "setup configure failed"
256} 269}
260 ./setup build \ 273 ./setup build \
261 || die "setup build failed" 274 || die "setup build failed"
262} 275}
263 276
264cabal-copy() { 277cabal-copy() {
278 has "${EAPI:-0}" 0 1 2 && ! use prefix && ED=${D}
279
265 ./setup copy \ 280 ./setup copy \
266 --destdir="${D}" \ 281 --destdir="${D}" \
267 || die "setup copy failed" 282 || die "setup copy failed"
268 283
269 # cabal is a bit eager about creating dirs, 284 # cabal is a bit eager about creating dirs,
270 # so remove them if they are empty 285 # so remove them if they are empty
271 rmdir "${D}/usr/bin" 2> /dev/null 286 rmdir "${ED}/usr/bin" 2> /dev/null
272 287
273 # GHC 6.4 has a bug in get/setPermission and Cabal 1.1.1 has 288 # GHC 6.4 has a bug in get/setPermission and Cabal 1.1.1 has
274 # no workaround. 289 # no workaround.
275 # set the +x permission on executables 290 # set the +x permission on executables
276 if [[ -d "${D}/usr/bin" ]] ; then 291 if [[ -d "${ED}/usr/bin" ]] ; then
277 chmod +x "${D}/usr/bin/"* 292 chmod +x "${ED}/usr/bin/"*
278 fi 293 fi
279 # TODO: do we still need this? 294 # TODO: do we still need this?
280} 295}
281 296
282cabal-pkg() { 297cabal-pkg() {
343 einfo "${P} is included in ghc-${CABAL_CORE_LIB_GHC_PV}, nothing to install." 358 einfo "${P} is included in ghc-${CABAL_CORE_LIB_GHC_PV}, nothing to install."
344 fi 359 fi
345} 360}
346 361
347haskell-cabal_src_configure() { 362haskell-cabal_src_configure() {
363 if ! cabal-is-dummy-lib; then
348 pushd "${S}" > /dev/null 364 pushd "${S}" > /dev/null
349 365
350 cabal-bootstrap 366 cabal-bootstrap
351 367
352 ghc_flags="" 368 ghc_flags=""
353 # currently cabal does not respect CFLAGS and LDFLAGS on it's own (bug #333217) 369 # currently cabal does not respect CFLAGS and LDFLAGS on it's own (bug #333217)
354 # so translate LDFLAGS to ghc parameters (without filtering) 370 # so translate LDFLAGS to ghc parameters (without filtering)
355 for flag in $LDFLAGS; do ghc_flags="${ghc_flags} --ghc-option=-optl$flag"; done 371 for flag in $LDFLAGS; do ghc_flags="${ghc_flags} --ghc-option=-optl$flag"; done
356 372
357 cabal-configure $ghc_flags "$@" 373 cabal-configure $ghc_flags "$@"
358 374
359 popd > /dev/null 375 popd > /dev/null
376 fi
360} 377}
361 378
362# exported function: nice alias 379# exported function: nice alias
363cabal_src_configure() { 380cabal_src_configure() {
364 haskell-cabal_src_configure "$@" 381 haskell-cabal_src_configure "$@"
408 popd > /dev/null 425 popd > /dev/null
409} 426}
410 427
411# exported function: cabal-style copy and register 428# exported function: cabal-style copy and register
412cabal_src_install() { 429cabal_src_install() {
430 has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
431
413 if cabal-is-dummy-lib; then 432 if cabal-is-dummy-lib; then
414 # create a dummy local package conf file for the sake of ghc-updater 433 # create a dummy local package conf file for the sake of ghc-updater
415 dodir "$(ghc-confdir)" 434 local ghc_confdir_with_prefix="$(ghc-confdir)"
435 # remove EPREFIX
436 dodir ${ghc_confdir_with_prefix#${EPREFIX}}
416 echo '[]' > "${D}/$(ghc-confdir)/$(ghc-localpkgconf)" 437 echo '[]' > "${D}/$(ghc-confdir)/$(ghc-localpkgconf)"
417 else 438 else
418 cabal-copy 439 cabal-copy
419 cabal-pkg 440 cabal-pkg
420 441

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23

  ViewVC Help
Powered by ViewVC 1.1.20