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