Hello ports@, Below is a patch to add cabal-sandbox support to ghc.port.mk, to build Haskell package-dependencies in a sandbox.
The patch adds two new variables, a MODGHC_BUILD option "sandbox" and
modifies MODCABAL_configure and MODGHC_BUILD_TARGET.
Most of the diff should be obvious. I had to add MODGHC_SETUP_PROG and
update MODGHC_BUILD_TARGET to use it when registering and unregistering
because cabal doesn't have the unregister command.
The motivation is to make porting packages with large, unmet
dependency-lists easier. converters/pandoc is an example of such a
package. I've included the port as an example of building a port using
dependencies from ports where available and sandboxing for the rest.
Sandboxing dependency builds is also helpful in cases of version conflicts.
If there's no interest or significant concerns with sandboxing, I'll
work on a regular port of pandoc by first porting it's dependencies.
--Aaron
Index: ghc.port.mk
===================================================================
RCS file: /home/cvs/ports/lang/ghc/ghc.port.mk,v
retrieving revision 1.38
diff -u -p -u -r1.38 ghc.port.mk
--- ghc.port.mk 20 Jan 2016 16:08:29 -0000 1.38
+++ ghc.port.mk 15 Jun 2016 01:36:51 -0000
@@ -1,3 +1,4 @@
+#-*- mode: Makefile; tab-width: 4; -*-
# $OpenBSD: ghc.port.mk,v 1.38 2016/01/20 16:08:29 kili Exp $
# Module for Glasgow Haskell Compiler
@@ -55,7 +56,19 @@ DIST_SUBDIR ?= ghc
. if ${MODGHC_BUILD:L:Mcabal}
MODGHC_SETUP_SCRIPT ?= Setup.lhs Setup.hs
+. if ${MODGHC_BUILD:L:Msandbox}
+BUILD_DEPENDS += devel/cabal-install
+# Set MODGHC_SANDBOX to system-wide value to reuse packages
+# across builds. Be sure to initialize it first.
+# mkdir -p ${MODGHC_SANDBOX}
+# cd ${MODGHC_SANDBOX} && cabal sandbox init --sandbox .
+MODGHC_SANDBOX ?= ${WRKSRC}/.cabal-sandbox
+MODGHC_SETUP_PROG ?= ${LOCALBASE}/bin/cabal
+MODGHC_REGISTER_PROG ?= ${WRKSRC}/Setup
+. else
MODGHC_SETUP_PROG ?= ${WRKSRC}/Setup
+MODGHC_REGISTER_PROG ?= ${MODGHC_SETUP_PROG}
+. endif
MODGHC_SETUP_CONF_ARGS ?=
MODGHC_SETUP_CONF_ENV ?=
@@ -76,6 +89,23 @@ MODGHC_SETUP_CONF_ARGS += --docdir=\$$da
# Little hack to let ports still add CONFIGURE_STYLE = autoconf and go
# without a do-configure: target (some Haskell ports are built with
# Cabal but use autohell for the documentation):
+. if ${MODGHC_BUILD:L:Msandbox}
+MODCABAL_configure = \
+ cd ${WRKSRC} && \
+ ${MODGHC_SETUP_PROG} sandbox init --sandbox=${MODGHC_SANDBOX} && \
+ ${MODGHC_SETUP_PROG} update && \
+ ${MODGHC_SETUP_PROG} install --only-dependencies
${MODGHC_SETUP_CONF_ARGS} && \
+ for s in ${MODGHC_SETUP_SCRIPT}; do \
+ test -f "$$s" && \
+ ${MODGHC_BIN} --make \
+ -o ${MODGHC_REGISTER_PROG} "$$s" && \
+ break; \
+ done && \
+ cd ${WRKBUILD} && exec ${SETENV} ${MAKE_ENV} ${MODGHC_SETUP_CONF_ENV} \
+ ${MODGHC_SETUP_PROG} \
+ configure -v -g -O --prefix=${PREFIX} \
+ ${MODGHC_SETUP_CONF_ARGS}
+. else
MODCABAL_configure = \
cd ${WRKSRC} && \
for s in ${MODGHC_SETUP_SCRIPT}; do \
@@ -88,6 +118,7 @@ MODCABAL_configure = \
${MODGHC_SETUP_PROG} \
configure -v -g -O --prefix=${PREFIX} \
${MODGHC_SETUP_CONF_ARGS}
+. endif
CONFIGURE_STYLE += CABAL
@@ -102,9 +133,9 @@ MODGHC_BUILD_TARGET += \
. if ${MODGHC_BUILD:L:Mregister}
MODGHC_BUILD_TARGET += \
;cd ${WRKBUILD} && ${SETENV} ${MAKE_ENV} \
- ${MODGHC_SETUP_PROG} register --gen-script; \
+ ${MODGHC_REGISTER_PROG} register --gen-script; \
cd ${WRKBUILD} && ${SETENV} ${MAKE_ENV} \
- ${MODGHC_SETUP_PROG} unregister --gen-script
+ ${MODGHC_REGISTER_PROG} unregister --gen-script
. endif
MODGHC_INSTALL_TARGET = \
pandoc-1.17.1.tgz
Description: Binary data
