pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/mk Rework the PLIST handling to support executable-onl...
details: https://anonhg.NetBSD.org/pkgsrc/rev/10f4a18da80d
branches: trunk
changeset: 450853:10f4a18da80d
user: pho <pho%pkgsrc.org@localhost>
date: Fri Apr 23 03:57:16 2021 +0000
description:
Rework the PLIST handling to support executable-only packages
It was a long-standing issue that Haskell packages which didn't contain a
library could not be correctly handled.
There are fewer substitutions in PLIST_SUBST now. As a result existing
PLIST files will all be considered as outdated and should be updated
either by setting HS_UPDATE_PLIST=yes or by manually running print-PLIST.
They will be ignored until that.
diffstat:
mk/haskell.mk | 82 ++++++++++++++++++++++++++++++----------------------------
1 files changed, 42 insertions(+), 40 deletions(-)
diffs (126 lines):
diff -r e275f378e7c5 -r 10f4a18da80d mk/haskell.mk
--- a/mk/haskell.mk Fri Apr 23 00:35:13 2021 +0000
+++ b/mk/haskell.mk Fri Apr 23 03:57:16 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: haskell.mk,v 1.28 2021/03/14 08:19:24 pho Exp $
+# $NetBSD: haskell.mk,v 1.29 2021/04/23 03:57:16 pho Exp $
#
# This Makefile fragment handles Haskell Cabal packages.
# Package configuration, building, installation, registration and
@@ -85,6 +85,11 @@
BUILDLINK_PREFIX.ghc \
PKGDIR DESTDIR \
WRKSRC
+_LISTED_VARS.haskell= \
+ CONFIGURE_ARGS \
+ PLIST_SUBST \
+ PRINT_PLIST_AWK \
+ FILES_SUBST
_IGN_VARS.haskell= \
USE_TOOLS CONFIGURE_ENV MAKE_ENV WARNINGS _*
@@ -150,10 +155,10 @@
_HS_PLIST_STATUS= missing
.elif !${${GREP} "." ${PKGDIR}/PLIST || ${TRUE}:L:sh}
_HS_PLIST_STATUS= missing
-.elif ${${GREP} HS_INTF ${PKGDIR}/PLIST || ${TRUE}:L:sh}
-_HS_PLIST_STATUS= lib-ok
+.elif ${${GREP} HS_VERSION ${PKGDIR}/PLIST || ${TRUE}:L:sh}
+_HS_PLIST_STATUS= ok
.elif !${${GREP} "/package-description" ${PKGDIR}/PLIST || ${TRUE}:L:sh}
-_HS_PLIST_STATUS= plain
+_HS_PLIST_STATUS= ok
.else
_HS_PLIST_STATUS= outdated
.endif
@@ -162,35 +167,33 @@
# with a hashed name, which makes it a bit more complicated to generate
# the PLIST.
#
-.if ${_HS_PLIST_STATUS} == lib-ok || ${_HS_PLIST_STATUS} == missing
-_HASKELL_PL_INTF= ${_HASKELL_PKG_ID_FILE:H:S,^${PREFIX}/,,}
-_HASKELL_PL_IMPL_AWK= prev == "import-dirs:" { dir = $$1; exit }
-_HASKELL_PL_IMPL_AWK+= { prev = $$0 }
-_HASKELL_PL_IMPL_AWK+= END { print(dir ? dir : "never_match_this") }
-_HASKELL_PL_IMPL_CMD= ${AWK} '${_HASKELL_PL_IMPL_AWK}' ${DESTDIR}${_HASKELL_PKG_DESCR_FILE}
-_HASKELL_PL_IMPL= ${_HASKELL_PL_IMPL_CMD:sh:S,^${PREFIX}/,,}
-_HASKELL_PL_DOCS= ${_HASKELL_PL_IMPL:S,^lib,share/doc,:C,-[A-Za-z0-9]*$,,}
-_HASKELL_PL_PLATFORM= ${_HASKELL_PL_IMPL:H:T:S,^.$,never_match_this,}
-_HASKELL_PL_PKGID_CMD= ${CAT} ${DESTDIR}${_HASKELL_PKG_ID_FILE}
-_HASKELL_PL_PKGID= ${_HASKELL_PL_PKGID_CMD:sh}
-_HASKELL_PL_VER= ${_HASKELL_VERSION:S,-,,}
-_HS_PLIST_SUBST+= HS_INTF=${_HASKELL_PL_INTF}
-_HS_PLIST_SUBST+= HS_IMPL=${_HASKELL_PL_IMPL}
-_HS_PLIST_SUBST+= HS_DOCS=${_HASKELL_PL_DOCS}
-_HS_PLIST_SUBST+= HS_PLATFORM=${_HASKELL_PL_PLATFORM}
-_HS_PLIST_SUBST+= HS_PKGID=${_HASKELL_PL_PKGID}
-_HS_PLIST_SUBST+= HS_VER=${_HASKELL_PL_VER}
-PLIST_SUBST+= ${exists(${DESTDIR}${_HASKELL_PKG_DESCR_FILE}):?${_HS_PLIST_SUBST}:}
+# There is no easy way to obtain a platform string such as
+# "x86_64-netbsd-ghc-9.0.1". If the package contains a library we
+# could extract it from the description file, but if it's
+# executable-only there's no such file. As a workaround we read the
+# description of "base" (which always exists) and extract the platform
+# from it.
+_HS_PLIST.platform.cmd= ${_HASKELL_PKG_BIN} --simple-output field base data-dir
+_HS_PLIST.platform= ${_HS_PLIST.platform.cmd:sh:H:T}
+# Package ID formatted as "{name}-{version}-{hash}": this only exists
+# if the package contains a library.
+_HS_PLIST.lib.pkg-id.cmd= ${CAT} ${DESTDIR}${_HASKELL_PKG_ID_FILE}
+_HS_PLIST.lib.pkg-id= ${exists(${DESTDIR}${_HASKELL_PKG_ID_FILE}):?${_HS_PLIST.lib.pkg-id.cmd:sh}:}
+# Abbreviated compiler version. Used for shared libraries.
+_HS_PLIST.short-ver= ${_HASKELL_VERSION:S,-,,}
-_HS_PRINT_PLIST_AWK+= { sub("^${_HASKELL_PL_INTF}", "$${HS_INTF}") }
-_HS_PRINT_PLIST_AWK+= { sub("^${_HASKELL_PL_IMPL}", "$${HS_IMPL}") }
-_HS_PRINT_PLIST_AWK+= { sub("^${_HASKELL_PL_DOCS}", "$${HS_DOCS}") }
-_HS_PRINT_PLIST_AWK+= { sub("/${_HASKELL_PL_PLATFORM}/", "/$${HS_PLATFORM}/") }
-_HS_PRINT_PLIST_AWK+= { sub( "${_HASKELL_PL_PKGID}", "$${HS_PKGID}") }
-_HS_PRINT_PLIST_AWK+= { sub( "${_HASKELL_PL_VER}", "$${HS_VER}") }
-PRINT_PLIST_AWK+= ${exists(${DESTDIR}${_HASKELL_PKG_DESCR_FILE}):?${_HS_PRINT_PLIST_AWK}:}
-.endif
+PLIST_SUBST+= HS_PLATFORM=${_HS_PLIST.platform}
+PLIST_SUBST+= HS_VERSION=${_HASKELL_VERSION}
+PLIST_SUBST+= HS_VER=${_HS_PLIST.short-ver}
+_HS_PLIST_SUBST.lib= HS_PKGID=${_HS_PLIST.lib.pkg-id}
+PLIST_SUBST+= ${!empty(_HS_PLIST.lib.pkg-id):?${_HS_PLIST_SUBST.lib}:}
+
+PRINT_PLIST_AWK+= { gsub("${_HS_PLIST.platform}", "$${HS_PLATFORM}") }
+PRINT_PLIST_AWK+= { gsub("${_HASKELL_VERSION}", "$${HS_VERSION}" ) }
+PRINT_PLIST_AWK+= { gsub("${_HS_PLIST.short-ver}", "$${HS_VER}" ) }
+_HS_PRINT_PLIST_AWK.lib={ gsub("${_HS_PLIST.lib.pkg-id}", "$${HS_PKGID}" ) }
+PRINT_PLIST_AWK+= ${!empty(_HS_PLIST.lib.pkg-id):?${_HS_PRINT_PLIST_AWK.lib}:}
.if ${_HS_PLIST_STATUS} == missing || ${_HS_PLIST_STATUS} == outdated
. if ${HS_UPDATE_PLIST} == yes
@@ -251,6 +254,11 @@
${INSTALL_DATA} dist/package-id \
${DESTDIR:Q}${_HASKELL_PKG_ID_FILE:Q}; \
fi
+# Executable-only packages tend to create an empty directory tree in
+# lib/ which results in useless @pkgdir in PLIST.
+ ${RUN}${FIND} ${DESTDIR:Q}${PREFIX}/lib -type d | \
+ ${TAIL} -n 1 | \
+ ${XARGS} ${RMDIR} -p 2>/dev/null || ${TRUE}
# Define test target.
do-test:
@@ -267,14 +275,8 @@
# Only present these variables if the definitions can be extracted
# from the files in DESTDIR.
-_HS_DESTDIR_DEF_VARS= PLIST_SUBST PRINT_PLIST_AWK
-_HS_DESTDIR_DEF_VARS+= _HASKELL_PL_INTF
-_HS_DESTDIR_DEF_VARS+= _HASKELL_PL_IMPL
-_HS_DESTDIR_DEF_VARS+= _HASKELL_PL_DOCS
-_HS_DESTDIR_DEF_VARS+= _HASKELL_PL_PLATFORM
-_HS_DESTDIR_DEF_VARS+= _HASKELL_PL_PKGID
-_HS_DESTDIR_DEF_VARS+= _HASKELL_PL_VER
-_DEF_VARS.haskell+= ${exists(${DESTDIR}${_HASKELL_PKG_DESCR_FILE}) :? ${_HS_DESTDIR_DEF_VARS} :}
-_LISTED_VARS.haskell+= PLIST_SUBST PRINT_PLIST_AWK
+_DEF_VARS.haskell+= _HS_PLIST.platform
+_DEF_VARS.haskell+= _HS_PLIST.short-ver
+_DEF_VARS.haskell+= ${!empty(_HS_PLIST.lib.pkg-id):?_HS_PLIST.lib.pkg-id:}
.endif # HASKELL_MK
Home |
Main Index |
Thread Index |
Old Index