Hi,
this is a sample diff to switch ghc from @exec/@unexec to
@define-tag/@tag. It only includes lang/ghc, devel/hs-stm and
devel/hs-async for now.
Basically, instead of creating all those register/unregister scripts,
the package registration files (of hs libraries) are now included
in the (OpenBSD) packages and ghc-pkg recache will be run after
installations, updates and deletions, by including a @tag ghc-pkg-recache
in the PLIST.
Changes to all the other hs-ports should be simple (bump, build,
update-plist, add the @tag ghc-pkg-recache entry, be sure that the
@exec/@unexec lines are removed).
The only drawback I can see is the update path from the old to the new
scheme, because pkg_add(8) will complain about collisions when updating
ghc:
]# pkg_add -uvx
Old package ghc-8.2.2p4 will run the following commands
- @unexec /usr/bin/env HOME=/nonexistent /usr/local/lib/ghc/unregister.sh
Running update
Collision in ghc-8.2.2p4->8.2.2p5: the following files already exist
/usr/local/lib/ghc/package.conf.d/Cabal-2.0.1.0.conf from ghc-8.2.2p5
(same checksum)
/usr/local/lib/ghc/package.conf.d/array-0.5.2.0.conf from ghc-8.2.2p5
(same checksum)
[... ]
It seems to be a missing package registration
Repair ? [y/N/a] y
Adding ghc-8.2.2p4->8.2.2p5
ghc-8.2.2p5 (extracting)
ghc-8.2.2p5 (skipping)
ghc-8.2.2p4 (deleting)
[...]
The other hs-ports are *not* affected by this problem, because the
package registration files in package.conf.d no longer have the
MODGHC_PACKAGE_KEY in their file names.
I'm not sure about wether it's worth to try to avoid the collisions (I'd
prefer to just add a small note to the upgrade FAQ), nor am I shure
wether I should commit this change (to ghc and *all* hs-ports) now or
after I eventually update ghc to something newer.
Ciao,
Kili
Index: lang/ghc/Makefile
===================================================================
RCS file: /cvs/ports/lang/ghc/Makefile,v
retrieving revision 1.163
diff -u -p -r1.163 Makefile
--- lang/ghc/Makefile 12 Jul 2019 20:47:18 -0000 1.163
+++ lang/ghc/Makefile 23 Aug 2019 13:26:02 -0000
@@ -12,7 +12,7 @@ COMMENT = compiler for the functional l
NO_CCACHE = Yes
DISTNAME = ghc-${MODGHC_VER}
-REVISION = 4
+REVISION = 5
CATEGORIES = lang devel
HOMEPAGE = https://www.haskell.org/ghc/
@@ -168,28 +168,6 @@ post-patch:
echo 'LD_LIBRARY_PATH=${BOOTSTRAP_SHLIBS} \' && \
printf 'exec ${WRKDIR}/bootstrap/bin/%s "$$@"\n' "$$f"; \
done
-
-post-install:
- cd ${PREFIX}/lib/ghc && \
- GHC_PKG="./bin/ghc-pkg --no-user-package-db --global-package-db
./package.conf.d" && \
- ${INSTALL_SCRIPT} /dev/null register.sh && \
- exec > register.sh && \
- echo '#!/bin/sh' && \
- echo 'p="$${0%/*}/bin/ghc-pkg --no-user-package-db --global-package-db
$${0%/*}/package.conf.d"' && \
- for p in $$($$GHC_PKG dot | sed -n -e 's/^"\([^"]*\)" ->
"\([^"]*\)"$$/\1 \2/p' | tsort -r); do \
- echo \$$p register --force - \<\< \'EOF\' && \
- $$GHC_PKG describe $$p | sed '/^pkgpath:$$/s@$$@ ${PKGPATH}@'
&& \
- echo EOF; \
- done && \
- ${INSTALL_SCRIPT} /dev/null unregister.sh && \
- exec > unregister.sh && \
- echo '#!/bin/sh' && \
- echo 'p="$${0%/*}/bin/ghc-pkg --no-user-package-db --global-package-db
$${0%/*}/package.conf.d"' && \
- for p in $$($$GHC_PKG dot | sed -n -e 's/^"\([^"]*\)" ->
"\([^"]*\)"$$/\1 \2/p' | tsort); do \
- echo \$$p unregister --force $$p; \
- done && \
- rm package.conf.d/* && \
- $$GHC_PKG recache
do-test:
ulimit -c 0 && \
Index: lang/ghc/ghc.port.mk
===================================================================
RCS file: /cvs/ports/lang/ghc/ghc.port.mk,v
retrieving revision 1.42
diff -u -p -r1.42 ghc.port.mk
--- lang/ghc/ghc.port.mk 22 Jan 2018 00:42:30 -0000 1.42
+++ lang/ghc/ghc.port.mk 23 Aug 2019 21:04:28 -0000
@@ -23,8 +23,9 @@ BUILD_DEPENDS += lang/ghc
# Set to "cabal" to get the typical Cabal targets defined. Add "haddock"
# to generate API documentation using Haddock. Add "register" to create
-# and include register/unregister scripts (you'll still have to add the
-# necessary tags to your PLIST by hand).
+# and include a package registration file in
+# ${PREFIX}/lib/ghc/package.conf.d (you'll still have to add the
+# necessary @tag ghc-pkg-recache to your PLIST by hand).
# Add "nort" if the port doesn't depend on the GHC runtime. This will
# also turn off the default "hs-" prefix for PKGNAME.
# If "nort" is not added, MODGHC_PACKAGE_KEY may be set to the 'package
@@ -102,9 +103,7 @@ MODGHC_BUILD_TARGET += \
. if ${MODGHC_BUILD:L:Mregister}
MODGHC_BUILD_TARGET += \
;cd ${WRKBUILD} && ${SETENV} ${MAKE_ENV} \
- ${MODGHC_SETUP_PROG} register --gen-script; \
- cd ${WRKBUILD} && ${SETENV} ${MAKE_ENV} \
- ${MODGHC_SETUP_PROG} unregister --gen-script
+ ${MODGHC_SETUP_PROG} register --gen-pkg-config
. endif
MODGHC_INSTALL_TARGET = \
@@ -112,8 +111,9 @@ MODGHC_INSTALL_TARGET = \
${MODGHC_SETUP_PROG} copy --destdir=${DESTDIR}
. if ${MODGHC_BUILD:L:Mregister}
MODGHC_INSTALL_TARGET += \
- ;${INSTALL_SCRIPT} ${WRKBUILD}/register.sh
${PREFIX}/lib/ghc/${DISTNAME} \
- ;${INSTALL_SCRIPT} ${WRKBUILD}/unregister.sh
${PREFIX}/lib/ghc/${DISTNAME}
+ ;${INSTALL_DATA_DIR} ${PREFIX}/lib/ghc/package.conf.d && \
+ ${INSTALL_DATA} ${WRKBUILD}/${DISTNAME}.conf \
+ ${PREFIX}/lib/ghc/package.conf.d/
. endif
MODGHC_TEST_TARGET = \
Index: lang/ghc/pkg/PLIST
===================================================================
RCS file: /cvs/ports/lang/ghc/pkg/PLIST,v
retrieving revision 1.11
diff -u -p -r1.11 PLIST
--- lang/ghc/pkg/PLIST 22 Jan 2018 00:42:30 -0000 1.11
+++ lang/ghc/pkg/PLIST 23 Aug 2019 18:37:38 -0000
@@ -18,6 +18,8 @@
@pkgpath devel/hs-haskeline
@pkgpath devel/hs-terminfo
@pkgpath devel/hs-transformers
+@define-tag ghc-pkg-recache at-end %D/bin/ghc-pkg recache --global
--no-user-package-db
+@tag ghc-pkg-recache
bin/ghc
bin/ghc-${GHC_VER}
bin/ghc-pkg
@@ -32,7 +34,6 @@ bin/hsc2hs
bin/runghc
bin/runghc-${GHC_VER}
bin/runhaskell
-@unexec /usr/bin/env HOME=/nonexistent %D/lib/ghc/unregister.sh
lib/ghc/
lib/ghc/Cabal-${CABAL_VER}/
lib/ghc/Cabal-${CABAL_VER}/Distribution/
@@ -2434,9 +2435,37 @@ lib/ghc/integer-gmp-${INTEGER_GMP_VER}/l
lib/ghc/latex/
lib/ghc/latex/haddock.sty
lib/ghc/package.conf.d/
+lib/ghc/package.conf.d/Cabal-${CABAL_VER}.conf
+lib/ghc/package.conf.d/array-${ARRAY_VER}.conf
+lib/ghc/package.conf.d/base-${BASE_VER}.conf
+lib/ghc/package.conf.d/binary-${BINARY_VER}.conf
+lib/ghc/package.conf.d/bytestring-${BYTESTRING_VER}.conf
+lib/ghc/package.conf.d/containers-${CONTAINERS_VER}.conf
+lib/ghc/package.conf.d/deepseq-${DEEPSEQ_VER}.conf
+lib/ghc/package.conf.d/directory-${DIRECTORY_VER}.conf
+lib/ghc/package.conf.d/filepath-${FILEPATH_VER}.conf
+lib/ghc/package.conf.d/ghc-${GHC_VER}.conf
+lib/ghc/package.conf.d/ghc-boot-${GHC_VER}.conf
+lib/ghc/package.conf.d/ghc-boot-th-${GHC_VER}.conf
+lib/ghc/package.conf.d/ghc-compact-${GHC_COMPACT_VER}.conf
+lib/ghc/package.conf.d/ghc-prim-${GHC_PRIM_VER}.conf
+lib/ghc/package.conf.d/ghci-${GHC_VER}.conf
+lib/ghc/package.conf.d/haskeline-${HASKELINE_VER}.conf
+lib/ghc/package.conf.d/hoopl-${HOOPL_VER}.conf
+lib/ghc/package.conf.d/hpc-${HPC_VER}.conf
+lib/ghc/package.conf.d/integer-gmp-${INTEGER_GMP_VER}.conf
@comment no checksum
lib/ghc/package.conf.d/package.cache
-@comment lib/ghc/package.conf.d/package.cache.lock
+lib/ghc/package.conf.d/package.cache.lock
+lib/ghc/package.conf.d/pretty-${PRETTY_VER}.conf
+lib/ghc/package.conf.d/process-${PROCESS_VER}.conf
+lib/ghc/package.conf.d/rts.conf
+lib/ghc/package.conf.d/template-haskell-${TEMPLATE_HASKELL_VER}.conf
+lib/ghc/package.conf.d/terminfo-${TERMINFO_VER}.conf
+lib/ghc/package.conf.d/time-${TIME_VER}.conf
+lib/ghc/package.conf.d/transformers-${TRANSFORMERS_VER}.conf
+lib/ghc/package.conf.d/unix-${UNIX_VER}.conf
+lib/ghc/package.conf.d/xhtml-${XHTML_VER}.conf
lib/ghc/platformConstants
lib/ghc/pretty-${PRETTY_VER}/
lib/ghc/pretty-${PRETTY_VER}/HSpretty-${PRETTY_VER}.o
@@ -2477,7 +2506,6 @@ lib/ghc/process-${PROCESS_VER}/include/p
lib/ghc/process-${PROCESS_VER}/include/runProcess.h
lib/ghc/process-${PROCESS_VER}/libHSprocess-${PROCESS_VER}.a
lib/ghc/process-${PROCESS_VER}/libHSprocess-${PROCESS_VER}_p.a
-lib/ghc/register.sh
lib/ghc/rts/
lib/ghc/rts/libCffi.a
lib/ghc/rts/libCffi_debug.a
@@ -2782,7 +2810,6 @@ lib/ghc/unix-${UNIX_VER}/include/HsUnixC
lib/ghc/unix-${UNIX_VER}/include/execvpe.h
lib/ghc/unix-${UNIX_VER}/libHSunix-${UNIX_VER}.a
lib/ghc/unix-${UNIX_VER}/libHSunix-${UNIX_VER}_p.a
-lib/ghc/unregister.sh
lib/ghc/xhtml-${XHTML_VER}/
lib/ghc/xhtml-${XHTML_VER}/HSxhtml-${XHTML_VER}.o
lib/ghc/xhtml-${XHTML_VER}/Text/
@@ -4679,4 +4706,3 @@ share/doc/ghc/html/users_guide/using-war
share/doc/ghc/html/users_guide/using.html
share/doc/ghc/html/users_guide/utils.html
share/doc/ghc/html/users_guide/win32-dlls.html
-@exec /usr/bin/env HOME=/nonexistent %D/lib/ghc/register.sh -v0
Index: devel/hs-stm/Makefile
===================================================================
RCS file: /cvs/ports/devel/hs-stm/Makefile,v
retrieving revision 1.26
diff -u -p -r1.26 Makefile
--- devel/hs-stm/Makefile 12 Jul 2019 20:44:34 -0000 1.26
+++ devel/hs-stm/Makefile 23 Aug 2019 19:42:51 -0000
@@ -7,7 +7,7 @@ COMMENT = Software Transactional Memory
PORTROACH = ignore:1
DISTNAME = stm-2.4.4.1
-REVISION = 0
+REVISION = 1
CATEGORIES = devel
MAINTAINER = Matthias Kilian <[email protected]>
Index: devel/hs-stm/pkg/PLIST
===================================================================
RCS file: /cvs/ports/devel/hs-stm/pkg/PLIST,v
retrieving revision 1.12
diff -u -p -r1.12 PLIST
--- devel/hs-stm/pkg/PLIST 22 Jan 2018 21:30:17 -0000 1.12
+++ devel/hs-stm/pkg/PLIST 23 Aug 2019 21:05:17 -0000
@@ -1,4 +1,6 @@
@comment $OpenBSD: PLIST,v 1.12 2018/01/22 21:30:17 kili Exp $
+@tag ghc-pkg-recache
+lib/ghc/package.conf.d/${DISTNAME}.conf
lib/ghc/${DISTNAME}/
lib/ghc/${DISTNAME}/Control/
lib/ghc/${DISTNAME}/Control/Concurrent/
@@ -28,7 +30,6 @@ lib/ghc/${DISTNAME}/Control/Sequential/S
lib/ghc/${DISTNAME}/HS${DISTNAME}-${MODGHC_PACKAGE_KEY}.o
lib/ghc/${DISTNAME}/libHS${DISTNAME}-${MODGHC_PACKAGE_KEY}.a
lib/ghc/${DISTNAME}/libHS${DISTNAME}-${MODGHC_PACKAGE_KEY}_p.a
-lib/ghc/${DISTNAME}/register.sh
share/doc/hs-${DISTNAME}/
share/doc/hs-${DISTNAME}/LICENSE
share/doc/hs-${DISTNAME}/html/
@@ -50,6 +51,3 @@ share/doc/hs-${DISTNAME}/html/ocean.css
share/doc/hs-${DISTNAME}/html/plus.gif
share/doc/hs-${DISTNAME}/html/stm.haddock
share/doc/hs-${DISTNAME}/html/synopsis.png
-@exec /usr/bin/env HOME=/nonexistent %D/lib/ghc/${DISTNAME}/register.sh -v0
-@unexec /usr/bin/env HOME=/nonexistent %D/lib/ghc/${DISTNAME}/unregister.sh
-v0 --force
-lib/ghc/${DISTNAME}/unregister.sh
Index: devel/hs-async/Makefile
===================================================================
RCS file: /cvs/ports/devel/hs-async/Makefile,v
retrieving revision 1.14
diff -u -p -r1.14 Makefile
--- devel/hs-async/Makefile 12 Jul 2019 20:44:11 -0000 1.14
+++ devel/hs-async/Makefile 23 Aug 2019 20:48:30 -0000
@@ -7,6 +7,7 @@ COMMENT = asynchronous IO operations
PORTROACH = ignore:1
DISTNAME = async-2.1.1.1
+REVISION = 0
CATEGORIES = devel
MAINTAINER = Matthias Kilian <[email protected]>
Index: devel/hs-async/pkg/PLIST
===================================================================
RCS file: /cvs/ports/devel/hs-async/pkg/PLIST,v
retrieving revision 1.5
diff -u -p -r1.5 PLIST
--- devel/hs-async/pkg/PLIST 22 Jan 2018 21:59:21 -0000 1.5
+++ devel/hs-async/pkg/PLIST 23 Aug 2019 21:05:30 -0000
@@ -1,4 +1,5 @@
@comment $OpenBSD: PLIST,v 1.5 2018/01/22 21:59:21 kili Exp $
+@tag ghc-pkg-recache
lib/ghc/${DISTNAME}/
lib/ghc/${DISTNAME}/Control/
lib/ghc/${DISTNAME}/Control/Concurrent/
@@ -7,7 +8,7 @@ lib/ghc/${DISTNAME}/Control/Concurrent/A
lib/ghc/${DISTNAME}/HS${DISTNAME}-${MODGHC_PACKAGE_KEY}.o
lib/ghc/${DISTNAME}/libHS${DISTNAME}-${MODGHC_PACKAGE_KEY}.a
lib/ghc/${DISTNAME}/libHS${DISTNAME}-${MODGHC_PACKAGE_KEY}_p.a
-lib/ghc/${DISTNAME}/register.sh
+lib/ghc/package.conf.d/${DISTNAME}.conf
share/doc/hs-${DISTNAME}/
share/doc/hs-${DISTNAME}/LICENSE
share/doc/hs-${DISTNAME}/html/
@@ -21,6 +22,3 @@ 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/synopsis.png
-@exec /usr/bin/env HOME=/nonexistent %D/lib/ghc/${DISTNAME}/register.sh -v0
-@unexec /usr/bin/env HOME=/nonexistent %D/lib/ghc/${DISTNAME}/unregister.sh
-v0 --force
-lib/ghc/${DISTNAME}/unregister.sh