Hi Stuart,

On 06/15/16 06:56, Stuart Henderson wrote:
> Hi Aaron,
> 
> On 2016/06/14 21:08, Aaron Poffenberger wrote:
>> Below is a patch to add cabal-sandbox support to ghc.port.mk, to build
>> Haskell package-dependencies in a sandbox.
> 
> The patch got word-wrapped (you can send attachments to ports@
> if that's easiest).

Attached.

> 
>> The motivation is to make porting packages with large, unmet
>> dependency-lists easier.
> 
> This suggests that it's downloading during build. If I'm right then
> sorry for the bad news but unfortunately it won't work out that way,
> the only network access we permit during bulk builds is controlled
> by DPB during the fetch stage so it must be done as standard distfiles
> fetched by http/ftp and with checksums in the distinfo file. 
> 
>> 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.
> 
> I wonder if this might be something that would be reasonable to
> handle via portgen..
> 

You are right. cabal can install from a local path. Is it possible to
feed a bunch of files into the process by adding them to distinfo?

Alternatively, I had been thinking to make a portgen for Haskell. I'll
look at the code to see what's required.


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 = \

Reply via email to