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

Reply via email to