Greg Steuck <gne...@openbsd.org> writes: >> I took this a bit further and I get a working devel/happy package now. >> >> This is still a complete WIP but I wanted to get some early feedback on >> the implementation choices as this is my first foray into port-modules. > > Converting devel/alex is straightforward which further validates the > approach (though still doesn't touch any of the existing limitations).
devel/cpphs wasn't too bad either. Here's all I needed to get it converted. This is the first case of built-in dependencies. I'm pushing the patches too for ease of reuse: https://github.com/blackgnezdo/ports/commits/ghc810
>From 17e23bafe588554a3c5836403815a6bf62ff9692 Mon Sep 17 00:00:00 2001 From: Greg Steuck <g...@nest.cx> Date: Sun, 23 Aug 2020 11:37:32 -0700 Subject: [PATCH] Use devel/cabal module for devel/cpphs This is the first case of building dependencies within the port. MODCABAL_MANIFEST was created manually by running the cabal comands. This should eventually be automated via portgen or similar. Removed do-test, it was pre-broken in the previous update as upstream stopped shipping the tests. TODO: since -lib port is getting removed, a quirk is probably required. --- devel/cabal/cabal.port.mk | 55 ++++++++++++++++++++----- devel/cpphs/Makefile | 39 ++++-------------- devel/cpphs/distinfo | 8 +++- devel/cpphs/pkg/{DESCR-main => DESCR} | 0 devel/cpphs/pkg/DESCR-lib | 1 - devel/cpphs/pkg/PLIST | 5 +++ devel/cpphs/pkg/PLIST-lib | 59 --------------------------- devel/cpphs/pkg/PLIST-main | 4 -- 8 files changed, 64 insertions(+), 107 deletions(-) rename devel/cpphs/pkg/{DESCR-main => DESCR} (100%) delete mode 100644 devel/cpphs/pkg/DESCR-lib create mode 100644 devel/cpphs/pkg/PLIST delete mode 100644 devel/cpphs/pkg/PLIST-lib delete mode 100644 devel/cpphs/pkg/PLIST-main diff --git devel/cabal/cabal.port.mk devel/cabal/cabal.port.mk index 292e3773f94..250e0bb3d18 100644 --- devel/cabal/cabal.port.mk +++ devel/cabal/cabal.port.mk @@ -8,18 +8,27 @@ ONLY_FOR_ARCHS = i386 amd64 BUILD_DEPENDS+= devel/cabal \ lang/ghc +MASTER_SITES0 = https://hackage.haskell.org/package/ + .if ${MODCABAL_BUILD:L:Mhackage} -MODGHC_HACKAGE_NAME = ${DISTNAME:C,-[0-9.]*$,,} -MODGHC_HACKAGE_VERSION = ${DISTNAME:C,.*-([0-9.]*)$,\1,} -HOMEPAGE ?= https://hackage.haskell.org/package/${MODGHC_HACKAGE_NAME} -MASTER_SITES = https://hackage.haskell.org/package/${DISTNAME}/ -SUBST_VARS += DISTNAME MODGHC_HACKAGE_VERSION +MODCABAL_HACKAGE_NAME = ${DISTNAME:C,-[0-9.]*$,,} +MODCABAL_HACKAGE_VERSION = ${DISTNAME:C,.*-([0-9.]*)$,\1,} +HOMEPAGE ?= ${MASTER_SITES0}${MODCABAL_HACKAGE_NAME} +MASTER_SITES = ${MASTER_SITES0}${DISTNAME}/ +DISTFILES ?= ${DISTNAME}.tar.gz +SUBST_VARS += DISTNAME MODCABAL_HACKAGE_VERSION + +# TODO(gnezdo): minimize identical file storage by skipping revision 0 +# corresponding to the original .cabal inside .tar.gz. +.if defined(MODCABAL_REVISION) +DISTFILES += ${DISTNAME}_${MODCABAL_REVISION}{revision/${MODCABAL_REVISION}}.cabal +.endif .endif MASTER_SITES0 = https://hackage.haskell.org/package/ DIST_SUBDIR ?= hackage -_MODCABAL_HOME=${WRKSRC} +_MODCABAL_HOME=${WRKDIR} MODCABAL_post-extract = \ mkdir -p ${_MODCABAL_HOME}/.cabal \ @@ -32,23 +41,38 @@ DISTFILES += {${package}-${version}/}${package}-${version}.tar.gz:0 DISTFILES += ${package}-${version}_${revision}{${package}-${version}/revision/${revision}}.cabal:0 .endfor - +.if defined(MODCABAL_REVISION) MODCABAL_post-extract += \ + && cp ${FULLDISTDIR}/${DISTNAME}_${MODCABAL_REVISION}.cabal ${WRKSRC}/${MODCABAL_HACKAGE_NAME}.cabal +.endif + +# The .cabal files are explicitly copied over the ones extracted from +# archives by the normal extraction rules. +EXTRACT_CASES += *.cabal) ;; + .for package version revision in ${MODCABAL_MANIFEST} - && tar zxf ${FULLDISTDIR}/${package}-${version}.tar.gz -C ${WRKBUILD} \ - && ln -s ${FULLDISTDIR}/${package}-${version}_${revision}.cabal ${WRKBUILD}/_build/tarballs/${package}.cabal \ +MODCABAL_post-extract += \ + && cp ${FULLDISTDIR}/${package}-${version}_${revision}.cabal ${WRKDIR}/${package}-${version}/${package}.cabal .endfor .endif +# References all the locally available dependencies. Ideally these +# should be command line options, tracking issue: +# https://github.com/haskell/cabal/issues/3585 +.for package version revision in ${MODCABAL_MANIFEST} +MODCABAL_post-extract += \ + && echo "packages: ${WRKDIR}/${package}-${version}/${package}.cabal" >> ${WRKSRC}/cabal.project.local +.endfor + + MODCABAL_CABAL = ${SETENV} ${MAKE_ENV} HOME=${_MODCABAL_HOME} ${LOCALBASE}/bin/cabal -MODCABAL_BUILD_ARGS = --datadir=${PREFIX}/share/${PKGNAME} _MODCABAL_BUILD_TARGETS ?= ${MODCABAL_EXECUTABLES:C/^/exe:&/} MODCABAL_BUILD_TARGET = \ cd ${WRKBUILD} \ && ${MODCABAL_CABAL} v2-build --offline --disable-benchmarks --disable-tests \ - --flags "${MODCABAL_FLAGS}" ${MODCABAL_BUILD_ARGS} ${MODCABAL_BUILD_TARGETS} + --flags "${MODCABAL_FLAGS}" ${_MODCABAL_BUILD_TARGETS} _MODCABAL_LIBEXEC = libexec/cabal MODCABAL_INSTALL_TARGET = \ @@ -65,6 +89,7 @@ MODCABAL_INSTALL_TARGET += \ # Exports the paths to executables for testing. MODCABAL_BUILT_EXECUTABLE_${exe} = $$(find ${WRKSRC}/dist-newstyle -name ${exe} -type f -perm -a+x) +.if defined(MODCABAL_DATA_DIRS) .for data in ${MODCABAL_DATA_DIRS} _MODCABAL_EXPORTS += \ && echo 'export ${exe}_datadir=${LOCALBASE}/share/${DISTNAME}' >> ${PREFIX}/bin/${exe} @@ -78,6 +103,14 @@ MODCABAL_INSTALL_TARGET += \ ${_MODCABAL_EXPORTS} \ && echo 'exec ${LOCALBASE}/${_MODCABAL_LIBEXEC}/${exe} "$$@"' >> ${PREFIX}/bin/${exe} \ && chmod +x ${STAGEDIR}${PREFIX}/bin/${exe} +.else +# Skips the launcher script indirection when MODCABAL_DATA_DIRS is empty. +# TODO(gnezdo): evaluate if this case is common enough to be warranted. +MODCABAL_INSTALL_TARGET += \ + && ${INSTALL_PROGRAM} ${MODCABAL_BUILT_EXECUTABLE_${exe}} ${PREFIX}/bin +.endif + + .endfor diff --git devel/cpphs/Makefile devel/cpphs/Makefile index fdef2f9052a..493da7d2671 100644 --- devel/cpphs/Makefile +++ devel/cpphs/Makefile @@ -1,47 +1,26 @@ # $OpenBSD: Makefile,v 1.48 2019/09/30 12:51:25 kili Exp $ -COMMENT-main = liberalised reimplementation of cpp in Haskell -COMMENT-lib = cpphs library - -DISTNAME = cpphs-1.19.3 -PKGNAME-main = ${DISTNAME} -REVISION-main = 0 -PKGNAME-lib = hs-${DISTNAME} -REVISION-lib = 7 +COMMENT = liberalised reimplementation of cpp in Haskell + +DISTNAME = cpphs-1.20.9.1 CATEGORIES = devel MAINTAINER = Matthias Kilian <k...@openbsd.org> # LGPL2.1 PERMIT_PACKAGE = Yes -MULTI_PACKAGES = -main -lib - -SUBST_VARS += DISTNAME +MODULES = devel/cabal +MODCABAL_EXECUTABLES = cpphs +MODCABAL_BUILD = hackage +MODCABAL_MANIFEST = polyparse 1.13 1 -MODULES = lang/ghc -LIB_DEPENDS += converters/libiconv +WANTLIB = c charset ffi gmp m iconv pthread util -WANTLIB-main = c charset ffi gmp m iconv pthread util - -MODGHC_BUILD = hackage cabal haddock register -MODGHC_PACKAGE_KEY = 3CUnFHz9uegIX6e6hlBlNd -LIB_DEPENDS-main = ${LIB_DEPENDS} \ +LIB_DEPENDS = converters/libiconv \ devel/gmp \ devel/libffi -RUN_DEPENDS-main = -LIB_DEPENDS-lib = -RUN_DEPENDS-lib = devel/hs-old-locale \ - devel/hs-old-time \ - lang/ghc=${MODGHC_VER} \ - textproc/hs-polyparse>=1.9 -BUILD_DEPENDS += ${RUN_DEPENDS-lib} -WANTLIB-lib = -DIST_SUBDIR = post-install: ${INSTALL_MAN} ${WRKSRC}/docs/cpphs.1 ${PREFIX}/man/man1 -do-test: - cd ${WRKSRC}/tests && /bin/sh ./runtests - .include <bsd.port.mk> diff --git devel/cpphs/distinfo devel/cpphs/distinfo index a69a8dd8800..4c9aab52ea9 100644 --- devel/cpphs/distinfo +++ devel/cpphs/distinfo @@ -1,2 +1,6 @@ -SHA256 (cpphs-1.19.3.tar.gz) = 4lRqo4LpwilCxcKEljHtxrHYy+osUHYvZrdAdV+vV9o= -SIZE (cpphs-1.19.3.tar.gz) = 44306 +SHA256 (hackage/cpphs-1.20.9.1.tar.gz) = f1mxC8M3QATO48BPpO5KG5DQ3KhKPQ5DbVhhoao7kZ8= +SHA256 (hackage/polyparse-1.13.tar.gz) = HExymA4eWk8H/qZcoIsjmVgdKmqiHrEHj3rShsJ5cHs= +SHA256 (hackage/polyparse-1.13_1.cabal) = aLk8AwrruIqr71sNyhlaHTW1DPL59U2HlZMOf42wTCY= +SIZE (hackage/cpphs-1.20.9.1.tar.gz) = 45496 +SIZE (hackage/polyparse-1.13.tar.gz) = 33144 +SIZE (hackage/polyparse-1.13_1.cabal) = 2726 diff --git devel/cpphs/pkg/DESCR-main devel/cpphs/pkg/DESCR similarity index 100% rename from devel/cpphs/pkg/DESCR-main rename to devel/cpphs/pkg/DESCR diff --git devel/cpphs/pkg/DESCR-lib devel/cpphs/pkg/DESCR-lib deleted file mode 100644 index c7a2a6defcd..00000000000 --- devel/cpphs/pkg/DESCR-lib +++ /dev/null @@ -1 +0,0 @@ -This library provides the functioninality of cpphs to other programs. diff --git devel/cpphs/pkg/PLIST devel/cpphs/pkg/PLIST new file mode 100644 index 00000000000..e6f9789edb6 --- /dev/null +++ devel/cpphs/pkg/PLIST @@ -0,0 +1,5 @@ +@comment $OpenBSD: PLIST,v$ +@pkgpath devel/cpphs +@bin bin/cpphs +libexec/cabal/ +@man man/man1/cpphs.1 diff --git devel/cpphs/pkg/PLIST-lib devel/cpphs/pkg/PLIST-lib deleted file mode 100644 index bf816c6c64d..00000000000 --- devel/cpphs/pkg/PLIST-lib +++ /dev/null @@ -1,59 +0,0 @@ -@comment $OpenBSD: PLIST-lib,v 1.11 2019/09/30 12:51:25 kili Exp $ -@tag ghc-pkg-recache -lib/ghc/${DISTNAME}/ -lib/ghc/${DISTNAME}/Language/ -lib/ghc/${DISTNAME}/Language/Preprocessor/ -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/ -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs.p_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/CppIfdef.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/CppIfdef.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/CppIfdef.p_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/HashDefine.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/HashDefine.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/HashDefine.p_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/MacroPass.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/MacroPass.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/MacroPass.p_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/Options.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/Options.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/Options.p_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/Position.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/Position.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/Position.p_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/ReadFirst.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/ReadFirst.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/ReadFirst.p_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/RunCpphs.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/RunCpphs.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/RunCpphs.p_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/SymTab.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/SymTab.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/SymTab.p_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/Tokenise.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/Tokenise.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Cpphs/Tokenise.p_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Unlit.dyn_hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Unlit.hi -lib/ghc/${DISTNAME}/Language/Preprocessor/Unlit.p_hi -lib/ghc/cpphs-${MODGHC_HACKAGE_VERSION}/libHScpphs-${MODGHC_HACKAGE_VERSION}-${MODGHC_PACKAGE_KEY}-ghc${MODGHC_VER}.so -lib/ghc/${DISTNAME}/libHS${DISTNAME}-${MODGHC_PACKAGE_KEY}.a -lib/ghc/${DISTNAME}/libHS${DISTNAME}-${MODGHC_PACKAGE_KEY}_p.a -lib/ghc/package.conf.d/${DISTNAME}.conf -share/doc/hs-${DISTNAME}/ -share/doc/hs-${DISTNAME}/LICENCE-LGPL -share/doc/hs-${DISTNAME}/html/ -share/doc/hs-${DISTNAME}/html/Language-Preprocessor-Cpphs.html -share/doc/hs-${DISTNAME}/html/Language-Preprocessor-Unlit.html -share/doc/hs-${DISTNAME}/html/cpphs.haddock -share/doc/hs-${DISTNAME}/html/doc-index.html -share/doc/hs-${DISTNAME}/html/haddock-bundle.min.js -share/doc/hs-${DISTNAME}/html/hslogo-16.png -share/doc/hs-${DISTNAME}/html/index.html -share/doc/hs-${DISTNAME}/html/meta.json -share/doc/hs-${DISTNAME}/html/minus.gif -share/doc/hs-${DISTNAME}/html/ocean.css -share/doc/hs-${DISTNAME}/html/plus.gif -share/doc/hs-${DISTNAME}/html/quick-jump.css -share/doc/hs-${DISTNAME}/html/synopsis.png diff --git devel/cpphs/pkg/PLIST-main devel/cpphs/pkg/PLIST-main deleted file mode 100644 index 4d8937ea234..00000000000 --- devel/cpphs/pkg/PLIST-main +++ /dev/null @@ -1,4 +0,0 @@ -@comment $OpenBSD: PLIST-main,v 1.1 2010/09/26 13:32:44 kili Exp $ -@pkgpath devel/cpphs -@bin bin/cpphs -@man man/man1/cpphs.1 -- 2.28.0