summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2022-07-23 08:50:16 +0100
committerV3n3RiX <venerix@koprulu.sector>2022-07-23 08:50:16 +0100
commit34efeba333bb7b35b450c57f2045c933b84bd252 (patch)
tree86c991fd2ec812228e134e90c5eac088e50dfa18 /eclass
parentfd70f5e3ed54d5e013c11a3f3e632e80838171d0 (diff)
gentoo auto-resync : 23:07:2022 - 08:50:15
Diffstat (limited to 'eclass')
-rw-r--r--eclass/Manifest.gzbin36789 -> 36779 bytes
-rw-r--r--eclass/haskell-cabal.eclass168
2 files changed, 136 insertions, 32 deletions
diff --git a/eclass/Manifest.gz b/eclass/Manifest.gz
index ecfcb94d2a23..876b28ff00ea 100644
--- a/eclass/Manifest.gz
+++ b/eclass/Manifest.gz
Binary files differ
diff --git a/eclass/haskell-cabal.eclass b/eclass/haskell-cabal.eclass
index 541bb4a90ee5..d437fc824f53 100644
--- a/eclass/haskell-cabal.eclass
+++ b/eclass/haskell-cabal.eclass
@@ -8,7 +8,6 @@
# Original author: Andres Loeh <kosmikus@gentoo.org>
# Original author: Duncan Coutts <dcoutts@gentoo.org>
# @SUPPORTED_EAPIS: 6 7 8
-# @PROVIDES: ghc-package
# @BLURB: for packages that make use of the Haskell Common Architecture for Building Applications and Libraries (cabal)
# @DESCRIPTION:
# Basic instructions:
@@ -50,7 +49,7 @@ esac
inherit ghc-package multilib toolchain-funcs
-EXPORT_FUNCTIONS pkg_setup src_configure src_compile src_test src_install pkg_postinst pkg_postrm
+EXPORT_FUNCTIONS pkg_setup src_prepare src_configure src_compile src_test src_install pkg_postinst pkg_postrm
# @ECLASS_VARIABLE: CABAL_EXTRA_CONFIGURE_FLAGS
# @USER_VARIABLE
@@ -123,6 +122,72 @@ EXPORT_FUNCTIONS pkg_setup src_configure src_compile src_test src_install pkg_po
# Set to anything else to disable.
: ${CABAL_REPORT_OTHER_BROKEN_PACKAGES:=yes}
+# @ECLASS_VARIABLE: CABAL_HACKAGE_REVISION
+# @PRE_INHERIT
+# @DESCRIPTION:
+# Set the upstream revision number from Hackage. This will automatically
+# add the upstream cabal revision to SRC_URI and apply it in src_prepare.
+: ${CABAL_HACKAGE_REVISION:=0}
+
+# @ECLASS_VARIABLE: CABAL_PN
+# @PRE_INHERIT
+# @DESCRIPTION:
+# Set the name of the package as it is recorded in the Hackage database. This
+# is mostly used when packages use CamelCase names upstream, but we want them
+# to be lowercase in portage.
+: ${CABAL_PN:=${PN}}
+
+# @ECLASS_VARIABLE: CABAL_PV
+# @PRE_INHERIT
+# @DESCRIPTION:
+# Set the version of the package as it is recorded in the Hackage database.
+# This can be useful if we use a different versioning scheme in Portage than
+# the one from upstream
+: ${CABAL_PV:=${PV}}
+
+# @ECLASS_VARIABLE: CABAL_P
+# @OUTPUT_VARIABLE
+# @DESCRIPTION:
+# The combined $CABAL_PN and $CABAL_PV variables, analogous to $P
+CABAL_P="${CABAL_PN}-${CABAL_PV}"
+
+S="${WORKDIR}/${CABAL_P}"
+
+# @ECLASS_VARIABLE: CABAL_FILE
+# @DESCRIPTION:
+# The location of the .cabal file for the Haskell package. This defaults to
+# "${S}/${CABAL_PN}.cabal".
+: ${CABAL_FILE:="${S}/${CABAL_PN}.cabal"}
+
+# @ECLASS_VARIABLE: CABAL_DISTFILE
+# @OUTPUT_VARIABLE
+# @DESCRIPTION:
+# The name of the .cabal file downloaded from Hackage. This filename does not
+# include $DISTDIR
+if [[ ${CABAL_HACKAGE_REVISION} -ge 1 ]]; then
+ CABAL_DISTFILE="${P}-rev${CABAL_HACKAGE_REVISION}.cabal"
+fi
+
+# @ECLASS_VARIABLE: CABAL_CHDEPS
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Specifies changes to be made to the .cabal file. Uses the cabal_chdeps
+# function internally and shares the same syntax.
+# @EXAMPLE:
+# CABAL_CHDEPS=(
+# 'base >= 4.2 && < 4.6' 'base >= 4.2 && < 4.7'
+# 'containers ==0.4.*' 'containers >= 0.4 && < 0.6'
+# )
+: ${CABAL_CHDEPS:=}
+
+
+# @ECLASS_VARIABLE: CABAL_LIVE_VERSION
+# @PRE_INHERIT
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Set this to any value to prevent SRC_URI from being set automatically.
+: ${CABAL_LIVE_VERSION:=}
+
# 'dev-haskell/cabal' passes those options with ./configure-based
# configuration, but most packages don't need/don't accept it:
# #515362, #515362
@@ -156,7 +221,7 @@ fi
if [[ -n "${CABAL_USE_HOOGLE}" ]]; then
# enabled only in ::haskell
- #IUSE="${IUSE} hoogle"
+ # IUSE="${IUSE} hoogle"
CABAL_USE_HOOGLE=
fi
@@ -169,6 +234,26 @@ if [[ -n "${CABAL_TEST_SUITE}" ]]; then
RESTRICT+=" !test? ( test )"
fi
+# If SRC_URI is defined in the ebuild without appending, it will overwrite
+# the value set here. This will not be set on packages whose versions end in "9999"
+# or if CABAL_LIVE_VERSION is set.
+case $PV in
+ *9999) ;;
+ *)
+ if [[ -z "${CABAL_LIVE_VERSION}" ]]; then
+ if [[ "${CABAL_P}" == "${P}" ]]; then
+ SRC_URI="https://hackage.haskell.org/package/${P}/${P}.tar.gz"
+ else
+ SRC_URI="https://hackage.haskell.org/package/${CABAL_P}/${CABAL_P}.tar.gz -> ${P}.tar.gz"
+ fi
+ if [[ -n ${CABAL_DISTFILE} ]]; then
+ SRC_URI+=" https://hackage.haskell.org/package/${CABAL_P}/revision/${CABAL_HACKAGE_REVISION}.cabal -> ${CABAL_DISTFILE}"
+ fi
+ fi ;;
+esac
+
+BDEPEND="${BDEPEND} app-text/dos2unix"
+
# returns the version of cabal currently in use.
# Rarely it's handy to pin cabal version from outside.
: ${_CABAL_VERSION_CACHE:=""}
@@ -228,20 +313,6 @@ cabal-bootstrap() {
$(ghc-getghc) "$@"
}
if $(ghc-supports-shared-libraries); then
- # # some custom build systems might use external libraries,
- # # for which we don't have shared libs, so keep static fallback
- # bug #411789, http://hackage.haskell.org/trac/ghc/ticket/5743#comment:3
- # http://hackage.haskell.org/trac/ghc/ticket/7062
- # http://hackage.haskell.org/trac/ghc/ticket/3072
- # ghc does not set RPATH for extralibs, thus we do it ourselves by hands
- einfo "Prepending $(ghc-libdir) to LD_LIBRARY_PATH"
- if [[ ${CHOST} != *-darwin* ]]; then
- LD_LIBRARY_PATH="$(ghc-libdir)${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
- export LD_LIBRARY_PATH
- else
- DYLD_LIBRARY_PATH="$(ghc-libdir)${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}"
- export DYLD_LIBRARY_PATH
- fi
{ make_setup -dynamic "$@" && ./setup --help >/dev/null; } ||
make_setup "$@" || die "compiling ${setupmodule} failed"
else
@@ -288,8 +359,8 @@ cabal-show-brokens() {
elog "ghc-pkg check: 'checking for other broken packages:'"
# pretty-printer
$(ghc-getghcpkg) check 2>&1 \
- | grep -E -v '^Warning: haddock-(html|interfaces): ' \
- | grep -E -v '^Warning: include-dirs: ' \
+ | egrep -v '^Warning: haddock-(html|interfaces): ' \
+ | egrep -v '^Warning: include-dirs: ' \
| head -n 20
cabal-die-if-nonempty 'broken' \
@@ -448,7 +519,7 @@ cabal-build() {
}
cabal-copy() {
- set -- copy --destdir="${D}" "$@"
+ set -- copy "$@" --destdir="${D}"
echo ./setup "$@"
./setup "$@" || die "setup copy failed"
@@ -510,6 +581,29 @@ haskell-cabal_pkg_setup() {
fi
}
+haskell-cabal_src_prepare() {
+ # Needed for packages that are still using MY_PN
+ if [[ -n ${MY_PN} ]]; then
+ local cabal_file="${S}/${MY_PN}.cabal"
+ else
+ local cabal_file="${CABAL_FILE}"
+ fi
+
+ if [[ -n ${CABAL_DISTFILE} ]]; then
+ # pull revised cabal from upstream
+ einfo "Using revised .cabal file from Hackage: revision ${CABAL_HACKAGE_REVISION}"
+ cp "${DISTDIR}/${CABAL_DISTFILE}" "${cabal_file}" || die
+ fi
+
+ # Convert to unix line endings
+ dos2unix "${cabal_file}" || die
+
+ # Apply patches *after* pulling the revised cabal
+ default
+
+ [[ -n "${CABAL_CHDEPS}" ]] && cabal_chdeps "${CABAL_CHDEPS[@]}"
+}
+
haskell-cabal_src_configure() {
cabal-is-dummy-lib && return
@@ -599,7 +693,8 @@ haskell-cabal_src_test() {
# exported function: cabal-style copy and register
cabal_src_install() {
if ! cabal-is-dummy-lib; then
- cabal-copy
+ # Pass arguments to cabal-copy
+ cabal-copy "$@"
cabal-pkg
fi
@@ -614,10 +709,14 @@ cabal_src_install() {
touch "${hint_file}" || die
}
+# Arguments passed to this function will make their way to `cabal-copy`
+# and eventually `./setup copy`. This allows you to specify which
+# components will be installed.
+# e.g. `haskell-cabal_src_install "lib:${PN}"` will only install the library
haskell-cabal_src_install() {
pushd "${S}" > /dev/null || die
- cabal_src_install
+ cabal_src_install "$@"
popd > /dev/null || die
}
@@ -678,23 +777,28 @@ cabal_flag() {
#}
# or
# src_prepare() {
-# CABAL_FILE=${S}/${MY_PN}.cabal cabal_chdeps \
+# CABAL_FILE=${S}/${CABAL_PN}.cabal cabal_chdeps \
# 'base >= 4.2 && < 4.6' 'base >= 4.2 && < 4.7'
-# CABAL_FILE=${S}/${MY_PN}-tools.cabal cabal_chdeps \
+# CABAL_FILE=${S}/${CABAL_PN}-tools.cabal cabal_chdeps \
# 'base == 3.*' 'base >= 4.2 && < 4.7'
#}
#
cabal_chdeps() {
- local cabal_fn=${MY_PN:-${PN}}.cabal
- local cf=${CABAL_FILE:-${S}/${cabal_fn}}
+ # Needed for compatibility with ebuilds still using MY_PN
+ if [[ -n ${MY_PN} ]]; then
+ local cabal_file="${S}/${MY_PN}.cabal"
+ else
+ local cabal_file="${CABAL_FILE}"
+ fi
+
local from_ss # ss - substring
local to_ss
local orig_c # c - contents
local new_c
- [[ -f $cf ]] || die "cabal file '$cf' does not exist"
+ [[ -f "${cabal_file}" ]] || die "cabal file '${cabal_file}' does not exist"
- orig_c=$(< "$cf")
+ orig_c=$(< "${cabal_file}")
while :; do
from_pat=$1
@@ -712,9 +816,9 @@ cabal_chdeps() {
new_c=${orig_c//${from_pat}/${to_str}}
if [[ -n $CABAL_DEBUG_LOOSENING ]]; then
- echo "${orig_c}" >"${T}/${cf}".pre
- echo "${new_c}" >"${T}/${cf}".post
- diff -u "${T}/${cf}".{pre,post}
+ echo "${orig_c}" >"${T}/${cabal_file}".pre
+ echo "${new_c}" >"${T}/${cabal_file}".post
+ diff -u "${T}/${cabal_file}".{pre,post}
fi
[[ "${orig_c}" == "${new_c}" ]] && die "no trigger for '${from_pat}'"
@@ -723,7 +827,7 @@ cabal_chdeps() {
shift
done
- echo "${new_c}" > "$cf" ||
+ echo "${new_c}" > "$cabal_file" ||
die "failed to update"
}