/[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.5 Revision 1.13
1# Copyright 1999-2006 Gentoo Foundation 1# Copyright 1999-2006 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.5 2006/03/01 12:54:35 dcoutts Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/haskell-cabal.eclass,v 1.13 2007/08/05 18:49:58 kolmodin 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#
34# 34#
35# Many Cabal packages require S to be manually set. 35# Many Cabal packages require S to be manually set.
36# 36#
37# Conforming Cabal packages don't require any function definitions 37# Conforming Cabal packages don't require any function definitions
38# in the ebuild. 38# in the ebuild.
39#
40# Special flags to Cabal Configure can now be set by using
41# CABAL_CONFIGURE_FLAGS
39 42
40inherit ghc-package 43inherit ghc-package multilib
41 44
42 45
43for feature in ${CABAL_FEATURES}; do 46for feature in ${CABAL_FEATURES}; do
44 case ${feature} in 47 case ${feature} in
45 haddock) CABAL_USE_HADDOCK=yes;; 48 haddock) CABAL_USE_HADDOCK=yes;;
85 IUSE="${IUSE} profile" 88 IUSE="${IUSE} profile"
86fi 89fi
87 90
88# We always use a standalone version of Cabal, rather than the one that comes 91# We always use a standalone version of Cabal, rather than the one that comes
89# with GHC. But of course we can't depend on cabal when building cabal itself. 92# with GHC. But of course we can't depend on cabal when building cabal itself.
93CABAL_MIN_VERSION=1.1.4
90if [[ -z "${CABAL_BOOTSTRAP}" ]]; then 94if [[ -z "${CABAL_BOOTSTRAP}" ]]; then
91 DEPEND="${DEPEND} >=dev-haskell/cabal-1.1.3" 95 DEPEND="${DEPEND} >=dev-haskell/cabal-${CABAL_MIN_VERSION}"
92fi 96fi
93 97
94# Libraries require GHC to be installed. 98# Libraries require GHC to be installed.
95if [[ -n "${CABAL_HAS_LIBRARIES}" ]]; then 99if [[ -n "${CABAL_HAS_LIBRARIES}" ]]; then
96 RDEPEND="${RDEPEND} virtual/ghc" 100 RDEPEND="${RDEPEND} dev-lang/ghc"
97fi 101fi
98 102
99cabal-bootstrap() { 103cabal-bootstrap() {
100 local setupmodule 104 local setupmodule
101 local cabalversion 105 local cabalversion
121 ./setup haddock || die "setup haddock failed" 125 ./setup haddock || die "setup haddock failed"
122} 126}
123 127
124cabal-configure() { 128cabal-configure() {
125 if [[ -n "${CABAL_USE_PROFILE}" ]] && use profile; then 129 if [[ -n "${CABAL_USE_PROFILE}" ]] && use profile; then
126 cabalconf="${cabalconf} --enable-executable-profiling";
127 cabalconf="${cabalconf} --enable-library-profiling" 130 cabalconf="${cabalconf} --enable-library-profiling"
128 fi 131 fi
129 # Don't build GHCi libs for arches that do not support GHCi.
130 # Also building GHCi libs on ppc64 causes "TOC overflow". 132 # Building GHCi libs on ppc64 causes "TOC overflow".
131 if use alpha || use ppc64; then 133 if use ppc64; then
132 cabalconf="${cabalconf} --disable-library-for-ghci" 134 cabalconf="${cabalconf} --disable-library-for-ghci"
133 fi 135 fi
136
137 # Note: with Cabal-1.1.6.x we still do not have enough control
138 # to put the docs into the right place. They're currently going
139 # into /usr/share/${P}/ghc-x.y/doc/
140 # rather than /usr/share/doc/${PF}/
141 # Because we can only set the datadir, not the docdir.
134 142
135 ./setup configure \ 143 ./setup configure \
136 --ghc --prefix=/usr \ 144 --ghc --prefix=/usr \
137 --with-compiler="$(ghc-getghc)" \ 145 --with-compiler="$(ghc-getghc)" \
138 --with-hc-pkg="$(ghc-getghcpkg)" \ 146 --with-hc-pkg="$(ghc-getghcpkg)" \
147 --prefix=/usr \
148 --libdir=/usr/$(get_libdir) \
149 --libsubdir=${P}/ghc-$(ghc-version) \
150 --datadir=/usr/share/ \
151 --datasubdir=${P}/ghc-$(ghc-version) \
139 ${cabalconf} \ 152 ${cabalconf} \
153 ${CABAL_CONFIGURE_FLAGS} \
140 "$@" || die "setup configure failed" 154 "$@" || die "setup configure failed"
141} 155}
142 156
143cabal-build() { 157cabal-build() {
144 ./setup build \ 158 ./setup build \
145 || die "setup build failed" 159 || die "setup build failed"
146} 160}
147 161
148cabal-copy() { 162cabal-copy() {
149 ./setup copy \ 163 ./setup copy \
150 --copy-prefix="${D}/usr" \ 164 --destdir="${D}" \
151 || die "setup copy failed" 165 || die "setup copy failed"
152 166
153 # cabal is a bit eager about creating dirs, 167 # cabal is a bit eager about creating dirs,
154 # so remove them if they are empty 168 # so remove them if they are empty
155 rmdir "${D}/usr/bin" 2> /dev/null 169 rmdir "${D}/usr/bin" 2> /dev/null
158 # no workaround. 172 # no workaround.
159 # set the +x permission on executables 173 # set the +x permission on executables
160 if [[ -d "${D}/usr/bin" ]] ; then 174 if [[ -d "${D}/usr/bin" ]] ; then
161 chmod +x "${D}/usr/bin/"* 175 chmod +x "${D}/usr/bin/"*
162 fi 176 fi
177 # TODO: do we still need this?
163} 178}
164 179
165cabal-pkg() { 180cabal-pkg() {
166 # This does not actually register since we're using /usr/bin/true instead 181 # This does not actually register since we're using true instead
167 # of ghc-pkg. So it just leaves the .installed-pkg-config and we can 182 # of ghc-pkg. So it just leaves the .installed-pkg-config and we can
168 # register that ourselves (if it exists). 183 # register that ourselves (if it exists).
169 local result 184 local result
170 local err 185 local err
171 186
172 if [[ -n ${CABAL_HAS_LIBRARIES} ]]; then 187 if [[ -n ${CABAL_HAS_LIBRARIES} ]]; then
173 sed -i 's:ghc-pkg:/usr/bin/true:' .setup-config 188 sed -i "s|$(ghc-getghcpkg)|$(type -P true)|" .setup-config
174 ./setup register || die "setup register failed" 189 ./setup register || die "setup register failed"
175 if [[ -f .installed-pkg-config ]]; then 190 if [[ -f .installed-pkg-config ]]; then
176 ghc-setup-pkg .installed-pkg-config 191 ghc-setup-pkg .installed-pkg-config
177 ghc-install-pkg 192 ghc-install-pkg
178 else 193 else
179 die "setup register has not generated a package configuration file" 194 die "setup register has not generated a package configuration file"
180 fi 195 fi
181 fi 196 fi
182} 197}
183 198
199# Some cabal libs are bundled along with some versions of ghc
200# eg filepath-1.0 comes with ghc-6.6.1
201# by putting CABAL_CORE_LIB_GHC_PV="6.6.1" in an ebuild we are declaring that
202# when building with this version of ghc, the ebuild is a dummy that is it will
203# install no files since the package is already included with ghc.
204# However portage still records the dependency and we can upgrade the package
205# to a later one that's not included with ghc.
206# You can also put a space separated list, eg CABAL_CORE_LIB_GHC_PV="6.6 6.6.1".
207cabal-is-dummy-lib() {
208 for version in ${CABAL_CORE_LIB_GHC_PV[*]}; do
209 [[ "$(ghc-version)" == "$version" ]] && return 0
210 done
211 return 1
212}
213
184# exported function: check if cabal is correctly installed for 214# exported function: check if cabal is correctly installed for
185# the currently active ghc (we cannot guarantee this with portage) 215# the currently active ghc (we cannot guarantee this with portage)
186haskell-cabal_pkg_setup() { 216haskell-cabal_pkg_setup() {
217 ghc-package_pkg_setup
187 if [[ -z "${CABAL_BOOTSTRAP}" ]] && ! ghc-sanecabal "1.1.3"; then 218 if [[ -z "${CABAL_BOOTSTRAP}" ]] && ! ghc-sanecabal "${CABAL_MIN_VERSION}"; then
188 eerror "The package dev-haskell/cabal is not correctly installed for" 219 eerror "The package dev-haskell/cabal is not correctly installed for"
189 eerror "the currently active version of ghc ($(ghc-version)). Please" 220 eerror "the currently active version of ghc ($(ghc-version)). Please"
190 eerror "run ghc-updater or re-emerge dev-haskell/cabal." 221 eerror "run ghc-updater or re-emerge dev-haskell/cabal."
191 die "cabal is not correctly installed" 222 die "cabal is not correctly installed"
192 fi 223 fi
194 eerror "QA: Neither bin nor lib are in CABAL_FEATURES." 225 eerror "QA: Neither bin nor lib are in CABAL_FEATURES."
195 fi 226 fi
196 if [[ -n "${CABAL_UNKNOWN}" ]]; then 227 if [[ -n "${CABAL_UNKNOWN}" ]]; then
197 ewarn "Unknown entry in CABAL_FEATURES: ${CABAL_UNKNONW}" 228 ewarn "Unknown entry in CABAL_FEATURES: ${CABAL_UNKNONW}"
198 fi 229 fi
230 if cabal-is-dummy-lib; then
231 einfo "${P} is included in ghc-${CABAL_CORE_LIB_GHC_PV}, nothing to install."
232 fi
199} 233}
200 234
201# exported function: cabal-style bootstrap configure and compile 235# exported function: cabal-style bootstrap configure and compile
202cabal_src_compile() { 236cabal_src_compile() {
237 if ! cabal-is-dummy-lib; then
203 cabal-bootstrap 238 cabal-bootstrap
204 cabal-configure 239 cabal-configure
205 cabal-build 240 cabal-build
206 241
207 if [[ -n "${CABAL_USE_HADDOCK}" ]] && use doc; then 242 if [[ -n "${CABAL_USE_HADDOCK}" ]] && use doc; then
208 cabal-haddock 243 cabal-haddock
244 fi
209 fi 245 fi
210} 246}
211haskell-cabal_src_compile() { 247haskell-cabal_src_compile() {
212 cabal_src_compile 248 cabal_src_compile
213} 249}
214 250
215# exported function: cabal-style copy and register 251# exported function: cabal-style copy and register
216cabal_src_install() { 252cabal_src_install() {
253 if cabal-is-dummy-lib; then
254 # create a dummy local package conf file for the sake of ghc-updater
255 dodir "$(ghc-confdir)"
256 echo '[]' > "${D}/$(ghc-confdir)/$(ghc-localpkgconf)"
257 else
217 cabal-copy 258 cabal-copy
218 cabal-pkg 259 cabal-pkg
219 260
220 if [[ -n "${CABAL_USE_HADDOCK}" ]] && use doc; then 261 if [[ -n "${CABAL_USE_HADDOCK}" ]] && use doc; then
262 local cabalversion=$(ghc-extractportageversion dev-haskell/cabal)
263 if ! version_is_at_least "1.1.6" "${cabalversion}"; then
221 dohtml dist/doc/html/* 264 dohtml -r dist/doc/html/*
265 fi
266 fi
222 fi 267 fi
223} 268}
224haskell-cabal_src_install() { 269haskell-cabal_src_install() {
225 cabal_src_install 270 cabal_src_install
226} 271}

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.13

  ViewVC Help
Powered by ViewVC 1.1.20