Mon Jun 29 22:00:58 2020 UTC ()
mk/haskell.mk: regenerate PLIST if it is outdated

Now that haskell.mk distinguishes between plain and outdated PLIST files,
this is possible again.  When haskell.mk knew only missing and outdated,
this was still ambiguous and therefore skipped.


(rillig)
diff -r1.24 -r1.25 pkgsrc/mk/haskell.mk
diff -r1.5 -r1.6 pkgsrc/regress/infra-unittests/haskell.sh

cvs diff -r1.24 -r1.25 pkgsrc/mk/haskell.mk (expand / switch to unified diff)

--- pkgsrc/mk/haskell.mk 2020/06/29 20:51:24 1.24
+++ pkgsrc/mk/haskell.mk 2020/06/29 22:00:58 1.25
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1# $NetBSD: haskell.mk,v 1.24 2020/06/29 20:51:24 rillig Exp $ 1# $NetBSD: haskell.mk,v 1.25 2020/06/29 22:00:58 rillig Exp $
2# 2#
3# This Makefile fragment handles Haskell Cabal packages. 3# This Makefile fragment handles Haskell Cabal packages.
4# See: http://www.haskell.org/cabal/ 4# See: http://www.haskell.org/cabal/
5# 5#
6# Note to users: 6# Note to users:
7# 7#
8# * Users choose one favourite Haskell compiler. Though the only 8# * Users choose one favourite Haskell compiler. Though the only
9# compiler currently supported is GHC. 9# compiler currently supported is GHC.
10# 10#
11# * You can't install a cabal package for more than one compilers 11# * You can't install a cabal package for more than one compilers
12# simultaneously. In the future, this limitation can possibly be 12# simultaneously. In the future, this limitation can possibly be
13# eliminated using the method used by 13# eliminated using the method used by
14# "../../lang/python/pyversion.mk". 14# "../../lang/python/pyversion.mk".
@@ -224,68 +224,68 @@ _HS_PLIST_STATUS= missing @@ -224,68 +224,68 @@ _HS_PLIST_STATUS= missing
224.elif ${${GREP} HS_INTF ${PKGDIR}/PLIST || ${TRUE}:L:sh} 224.elif ${${GREP} HS_INTF ${PKGDIR}/PLIST || ${TRUE}:L:sh}
225_HS_PLIST_STATUS= lib-ok 225_HS_PLIST_STATUS= lib-ok
226.elif !${${GREP} "/package-description" ${PKGDIR}/PLIST || ${TRUE}:L:sh} 226.elif !${${GREP} "/package-description" ${PKGDIR}/PLIST || ${TRUE}:L:sh}
227_HS_PLIST_STATUS= plain 227_HS_PLIST_STATUS= plain
228.else 228.else
229_HS_PLIST_STATUS= outdated 229_HS_PLIST_STATUS= outdated
230.endif 230.endif
231 231
232# Starting from GHC 7.10 (or 7.8?), packages are installed in directories 232# Starting from GHC 7.10 (or 7.8?), packages are installed in directories
233# with a hashed name, which makes it a bit more complicated to generate 233# with a hashed name, which makes it a bit more complicated to generate
234# the PLIST. 234# the PLIST.
235# 235#
236.if ${_HS_PLIST_STATUS} == lib-ok || ${_HS_PLIST_STATUS} == missing 236.if ${_HS_PLIST_STATUS} == lib-ok || ${_HS_PLIST_STATUS} == missing
237 
238_HASKELL_PL_INTF= ${_HASKELL_PKG_ID_FILE:H:S,^${PREFIX}/,,} 237_HASKELL_PL_INTF= ${_HASKELL_PKG_ID_FILE:H:S,^${PREFIX}/,,}
239_HASKELL_PL_IMPL_AWK= prev == "import-dirs:" { dir = $$1; exit } 238_HASKELL_PL_IMPL_AWK= prev == "import-dirs:" { dir = $$1; exit }
240_HASKELL_PL_IMPL_AWK+= { prev = $$0 } 239_HASKELL_PL_IMPL_AWK+= { prev = $$0 }
241_HASKELL_PL_IMPL_AWK+= END { print(dir ? dir : "never_match_this") } 240_HASKELL_PL_IMPL_AWK+= END { print(dir ? dir : "never_match_this") }
242_HASKELL_PL_IMPL_CMD= ${AWK} '${_HASKELL_PL_IMPL_AWK}' ${DESTDIR}${_HASKELL_PKG_DESCR_FILE} 241_HASKELL_PL_IMPL_CMD= ${AWK} '${_HASKELL_PL_IMPL_AWK}' ${DESTDIR}${_HASKELL_PKG_DESCR_FILE}
243_HASKELL_PL_IMPL= ${_HASKELL_PL_IMPL_CMD:sh:S,^${PREFIX}/,,} 242_HASKELL_PL_IMPL= ${_HASKELL_PL_IMPL_CMD:sh:S,^${PREFIX}/,,}
244_HASKELL_PL_DOCS= ${_HASKELL_PL_IMPL:S,^lib,share/doc,:C,-[A-Za-z0-9]*$,,} 243_HASKELL_PL_DOCS= ${_HASKELL_PL_IMPL:S,^lib,share/doc,:C,-[A-Za-z0-9]*$,,}
245_HASKELL_PL_PLATFORM= ${_HASKELL_PL_IMPL:H:T:S,^.$,never_match_this,} 244_HASKELL_PL_PLATFORM= ${_HASKELL_PL_IMPL:H:T:S,^.$,never_match_this,}
246_HASKELL_PL_PKGID_CMD= ${CAT} ${DESTDIR}${_HASKELL_PKG_ID_FILE} 245_HASKELL_PL_PKGID_CMD= ${CAT} ${DESTDIR}${_HASKELL_PKG_ID_FILE}
247_HASKELL_PL_PKGID= ${_HASKELL_PL_PKGID_CMD:sh} 246_HASKELL_PL_PKGID= ${_HASKELL_PL_PKGID_CMD:sh}
248_HASKELL_PL_VER= ${_HASKELL_VERSION:S,-,,} 247_HASKELL_PL_VER= ${_HASKELL_VERSION:S,-,,}
249 248
250_HS_PLIST_SUBST+= HS_INTF=${_HASKELL_PL_INTF} 249_HS_PLIST_SUBST+= HS_INTF=${_HASKELL_PL_INTF}
251_HS_PLIST_SUBST+= HS_IMPL=${_HASKELL_PL_IMPL} 250_HS_PLIST_SUBST+= HS_IMPL=${_HASKELL_PL_IMPL}
252_HS_PLIST_SUBST+= HS_DOCS=${_HASKELL_PL_DOCS} 251_HS_PLIST_SUBST+= HS_DOCS=${_HASKELL_PL_DOCS}
253_HS_PLIST_SUBST+= HS_PLATFORM=${_HASKELL_PL_PLATFORM} 252_HS_PLIST_SUBST+= HS_PLATFORM=${_HASKELL_PL_PLATFORM}
254_HS_PLIST_SUBST+= HS_PKGID=${_HASKELL_PL_PKGID} 253_HS_PLIST_SUBST+= HS_PKGID=${_HASKELL_PL_PKGID}
255_HS_PLIST_SUBST+= HS_VER=${_HASKELL_PL_VER} 254_HS_PLIST_SUBST+= HS_VER=${_HASKELL_PL_VER}
256PLIST_SUBST+= ${exists(${DESTDIR}${_HASKELL_PKG_DESCR_FILE}):?${_HS_PLIST_SUBST}:} 255PLIST_SUBST+= ${exists(${DESTDIR}${_HASKELL_PKG_DESCR_FILE}):?${_HS_PLIST_SUBST}:}
 256
257_HS_PRINT_PLIST_AWK+= { sub("^${_HASKELL_PL_INTF}", "$${HS_INTF}") } 257_HS_PRINT_PLIST_AWK+= { sub("^${_HASKELL_PL_INTF}", "$${HS_INTF}") }
258_HS_PRINT_PLIST_AWK+= { sub("^${_HASKELL_PL_IMPL}", "$${HS_IMPL}") } 258_HS_PRINT_PLIST_AWK+= { sub("^${_HASKELL_PL_IMPL}", "$${HS_IMPL}") }
259_HS_PRINT_PLIST_AWK+= { sub("^${_HASKELL_PL_DOCS}", "$${HS_DOCS}") } 259_HS_PRINT_PLIST_AWK+= { sub("^${_HASKELL_PL_DOCS}", "$${HS_DOCS}") }
260_HS_PRINT_PLIST_AWK+= { sub("/${_HASKELL_PL_PLATFORM}/", "/$${HS_PLATFORM}/") } 260_HS_PRINT_PLIST_AWK+= { sub("/${_HASKELL_PL_PLATFORM}/", "/$${HS_PLATFORM}/") }
261_HS_PRINT_PLIST_AWK+= { sub( "${_HASKELL_PL_PKGID}", "$${HS_PKGID}") } 261_HS_PRINT_PLIST_AWK+= { sub( "${_HASKELL_PL_PKGID}", "$${HS_PKGID}") }
262_HS_PRINT_PLIST_AWK+= { sub( "${_HASKELL_PL_VER}", "$${HS_VER}") } 262_HS_PRINT_PLIST_AWK+= { sub( "${_HASKELL_PL_VER}", "$${HS_VER}") }
263PRINT_PLIST_AWK+= ${exists(${DESTDIR}${_HASKELL_PKG_DESCR_FILE}):?${_HS_PRINT_PLIST_AWK}:} 263PRINT_PLIST_AWK+= ${exists(${DESTDIR}${_HASKELL_PKG_DESCR_FILE}):?${_HS_PRINT_PLIST_AWK}:}
264 
265. if ${HS_UPDATE_PLIST} != no && ${_HS_PLIST_STATUS} == missing 
266GENERATE_PLIST+= ${MAKE} print-PLIST > ${PKGDIR}/PLIST; 
267. endif 
268.endif 264.endif
269 265
270.if ${_HS_PLIST_STATUS} == missing || ${_HS_PLIST_STATUS} == outdated 266.if ${_HS_PLIST_STATUS} == missing || ${_HS_PLIST_STATUS} == outdated
 267. if ${HS_UPDATE_PLIST} == yes
 268GENERATE_PLIST+= ${MAKE} print-PLIST > ${PKGDIR}/PLIST;
 269. endif
271GENERATE_PLIST+= \ 270GENERATE_PLIST+= \
272 cd ${DESTDIR:Q}${PREFIX:Q} && \ 271 cd ${DESTDIR:Q}${PREFIX:Q} && \
273 ${FIND} * \( -type f -o -type l \) | ${SORT}; 272 ${FIND} * \( -type f -o -type l \) | ${SORT};
274PLIST_SRC= # none, because the PLIST file is outdated or missing 273PLIST_SRC= # none
275. if ${_HS_PLIST_STATUS} == outdated && ${HS_UPDATE_PLIST} == no 274.endif
 275
 276.if ${_HS_PLIST_STATUS} == outdated && ${HS_UPDATE_PLIST} == no
276WARNINGS+= "[haskell.mk] The PLIST format is outdated." 277WARNINGS+= "[haskell.mk] The PLIST format is outdated."
277WARNINGS+= "[haskell.mk] Set HS_UPDATE_PLIST=yes to update it automatically." 278WARNINGS+= "[haskell.mk] Set HS_UPDATE_PLIST=yes to update it automatically."
278. endif 
279.endif 279.endif
280 280
281# Define configure target. We might not have any working Haskell 281# Define configure target. We might not have any working Haskell
282# interpreter so compile Setup.?hs to a binary. Since dynamic linkage 282# interpreter so compile Setup.?hs to a binary. Since dynamic linkage
283# is much faster, we try it and then fall back to static linkage if 283# is much faster, we try it and then fall back to static linkage if
284# that didn't work. 284# that didn't work.
285do-configure: 285do-configure:
286 ${RUN} ${_ULIMIT_CMD} cd ${WRKSRC} && \ 286 ${RUN} ${_ULIMIT_CMD} cd ${WRKSRC} && \
287 ( ${_HASKELL_BIN:Q} --make Setup -dynamic || \ 287 ( ${_HASKELL_BIN:Q} --make Setup -dynamic || \
288 ${_HASKELL_BIN:Q} --make Setup -static ) 288 ${_HASKELL_BIN:Q} --make Setup -static )
289 ${RUN} ${_ULIMIT_CMD} cd ${WRKSRC:Q} && \ 289 ${RUN} ${_ULIMIT_CMD} cd ${WRKSRC:Q} && \
290 ${SETENV} ${CONFIGURE_ENV} \ 290 ${SETENV} ${CONFIGURE_ENV} \
291 ./Setup configure ${PKG_VERBOSE:D-v} ${CONFIGURE_ARGS} 291 ./Setup configure ${PKG_VERBOSE:D-v} ${CONFIGURE_ARGS}

cvs diff -r1.5 -r1.6 pkgsrc/regress/infra-unittests/Attic/haskell.sh (expand / switch to unified diff)

--- pkgsrc/regress/infra-unittests/Attic/haskell.sh 2020/06/29 21:24:39 1.5
+++ pkgsrc/regress/infra-unittests/Attic/haskell.sh 2020/06/29 22:00:58 1.6
@@ -1,15 +1,15 @@ @@ -1,15 +1,15 @@
1#! /bin/sh 1#! /bin/sh
2# $NetBSD: haskell.sh,v 1.5 2020/06/29 21:24:39 rillig Exp $ 2# $NetBSD: haskell.sh,v 1.6 2020/06/29 22:00:58 rillig Exp $
3# 3#
4# Tests for mk/haskell.mk. 4# Tests for mk/haskell.mk.
5# 5#
6 6
7set -eu 7set -eu
8 8
9. './test.subr' 9. './test.subr'
10 10
11link_from_pkgsrc() { 11link_from_pkgsrc() {
12 for f in "$@"; do 12 for f in "$@"; do
13 mkdir -p "$mocked_pkgsrcdir/$(dirname "$f")" 13 mkdir -p "$mocked_pkgsrcdir/$(dirname "$f")"
14 rm -f "$mocked_pkgsrcdir/$f" 14 rm -f "$mocked_pkgsrcdir/$f"
15 ln -s "$pkgsrcdir/$f" "$mocked_pkgsrcdir/$f" 15 ln -s "$pkgsrcdir/$f" "$mocked_pkgsrcdir/$f"
@@ -61,28 +61,36 @@ MACHINE_ARCH= arch @@ -61,28 +61,36 @@ MACHINE_ARCH= arch
61PKGDIR= \${.:L:tA} 61PKGDIR= \${.:L:tA}
62WRKDIR= $PWD/work 62WRKDIR= $PWD/work
63PLIST= \${WRKDIR}/.PLIST 63PLIST= \${WRKDIR}/.PLIST
64PREFIX= $prefix 64PREFIX= $prefix
65DESTDIR= $destdir 65DESTDIR= $destdir
66PKGSRCDIR= $pkgsrcdir 66PKGSRCDIR= $pkgsrcdir
67RUN= @set -eu; 67RUN= @set -eu;
68ALL_ENV= ALL_ENV_VAR=value 68ALL_ENV= ALL_ENV_VAR=value
69 69
70.include "mk/haskell.mk" 70.include "mk/haskell.mk"
71.include "mk/plist/bsd.plist.mk" 71.include "mk/plist/bsd.plist.mk"
72.include "mk/misc/show.mk" 72.include "mk/misc/show.mk"
73 73
 74# from bsd.pkg.mk
 75PKGNAME_NOREV?= \${PKGNAME}
 76PKGVERSION?= \${PKGNAME:C/^.*-//}
 77PKGBASE?= \${PKGNAME:C/-[^-]*$//}
 78
74show-plist-status: .PHONY 79show-plist-status: .PHONY
75 @echo "PLIST status: "\${_HS_PLIST_STATUS:Q} 80 @echo "PLIST status: "\${_HS_PLIST_STATUS:Q}
 81
 82show-var: .PHONY
 83 @echo \${\${VARNAME}:Q}
76EOF 84EOF
77 85
78 link_from_pkgsrc 'mk/haskell.mk' 86 link_from_pkgsrc 'mk/haskell.mk'
79 link_from_pkgsrc 'mk/plist' 87 link_from_pkgsrc 'mk/plist'
80 link_from_pkgsrc 'mk/misc' 88 link_from_pkgsrc 'mk/misc'
81 89
82 cd "$pkgdir" 90 cd "$pkgdir"
83} 91}
84 92
85 93
86if test_case_begin 'PLIST status: missing'; then 94if test_case_begin 'PLIST status: missing'; then
87 95
88 create_file 'Makefile' <<-EOF 96 create_file 'Makefile' <<-EOF
@@ -196,39 +204,32 @@ if test_case_begin 'PLIST status: lib-ok @@ -196,39 +204,32 @@ if test_case_begin 'PLIST status: lib-ok
196 && exitcode=0 || exitcode=$? 204 && exitcode=0 || exitcode=$?
197 205
198 assert_that "$tmpdir/output" --file-is-lines \ 206 assert_that "$tmpdir/output" --file-is-lines \
199 'PLIST status: lib-ok' 207 'PLIST status: lib-ok'
200 208
201 test_case_end 209 test_case_end
202fi 210fi
203 211
204 212
205if test_case_begin 'missing, update=yes'; then 213if test_case_begin 'missing, update=yes'; then
206 214
207 # Based on devel/hs-asn1-parse from 2020-06-22. 215 # Based on devel/hs-asn1-parse from 2020-06-22.
208 216
209 create_file_lines 'Makefile' \ 217 create_file 'Makefile' <<-EOF
210 'DISTNAME= asn1-parse-0.9.5' \ 218 DISTNAME= asn1-parse-0.9.5
211 'PKGVERSION= 0.9.5' \ 219 HS_UPDATE_PLIST= yes
212 'PKGNAME_NOREV= ${DISTNAME}' \ 220
213 '' \ 221 .include "../../main.mk"
214 'HS_UPDATE_PLIST= yes' \ 222 EOF
215 "PKGDIR= $PWD" \ 
216 '' \ 
217 '.include "../../main.mk"' \ 
218 '.include "../../mk/haskell.mk"' \ 
219 '' \ 
220 'show-haskell-plist-status: .PHONY' \ 
221 ' @echo "PLIST status: "${_HS_PLIST_STATUS:Q}' 
222 create_file "$destdir$prefix/lib/asn1-parse-0.9.5/ghc-8.8.1/package-id" <<-EOF 223 create_file "$destdir$prefix/lib/asn1-parse-0.9.5/ghc-8.8.1/package-id" <<-EOF
223 asn1-parse-0.9.5-2HryHNyN1grJJzKM4AV1Gr 224 asn1-parse-0.9.5-2HryHNyN1grJJzKM4AV1Gr
224 EOF 225 EOF
225 create_file "$destdir$prefix/lib/asn1-parse-0.9.5/ghc-8.8.1/package-description" <<-EOF 226 create_file "$destdir$prefix/lib/asn1-parse-0.9.5/ghc-8.8.1/package-description" <<-EOF
226 ... 227 ...
227 import-dirs: 228 import-dirs:
228 $prefix/lib/x86_64-netbsd-ghc-8.8.1/asn1-parse-0.9.5-2HryHNyN1grJJzKM4AV1Gr 229 $prefix/lib/x86_64-netbsd-ghc-8.8.1/asn1-parse-0.9.5-2HryHNyN1grJJzKM4AV1Gr
229 230
230 ... 231 ...
231 EOF 232 EOF
232 create_file_lines "$destdir$prefix/lib/x86_64-netbsd-ghc-8.8.1/asn1-parse-0.9.5-2HryHNyN1grJJzKM4AV1Gr/Data/ASN1/Parse.dyn_hi" '' 233 create_file_lines "$destdir$prefix/lib/x86_64-netbsd-ghc-8.8.1/asn1-parse-0.9.5-2HryHNyN1grJJzKM4AV1Gr/Data/ASN1/Parse.dyn_hi" ''
233 create_file_lines "$destdir$prefix/lib/x86_64-netbsd-ghc-8.8.1/asn1-parse-0.9.5-2HryHNyN1grJJzKM4AV1Gr/Data/ASN1/Parse.hi" '' 234 create_file_lines "$destdir$prefix/lib/x86_64-netbsd-ghc-8.8.1/asn1-parse-0.9.5-2HryHNyN1grJJzKM4AV1Gr/Data/ASN1/Parse.hi" ''
234 create_file_lines "$destdir$prefix/lib/x86_64-netbsd-ghc-8.8.1/asn1-parse-0.9.5-2HryHNyN1grJJzKM4AV1Gr/Data/ASN1/Parse.p_hi" '' 235 create_file_lines "$destdir$prefix/lib/x86_64-netbsd-ghc-8.8.1/asn1-parse-0.9.5-2HryHNyN1grJJzKM4AV1Gr/Data/ASN1/Parse.p_hi" ''
@@ -382,30 +383,30 @@ if test_case_begin 'neither package-id n @@ -382,30 +383,30 @@ if test_case_begin 'neither package-id n
382 && exitcode=0 || exitcode=$? 383 && exitcode=0 || exitcode=$?
383 384
384 assert_that "$tmpdir/output" --file-is-lines \ 385 assert_that "$tmpdir/output" --file-is-lines \
385 '_HS_PLIST_STATUS=missing' \ 386 '_HS_PLIST_STATUS=missing' \
386 'PLIST_SUBST OPSYS=Opsys' \ 387 'PLIST_SUBST OPSYS=Opsys' \
387 'PLIST_SUBST OS_VERSION=' \ 388 'PLIST_SUBST OS_VERSION=' \
388 'PLIST_SUBST MACHINE_ARCH=arch' \ 389 'PLIST_SUBST MACHINE_ARCH=arch' \
389 'PLIST_SUBST MACHINE_GNU_ARCH=' \ 390 'PLIST_SUBST MACHINE_GNU_ARCH=' \
390 'PLIST_SUBST MACHINE_GNU_PLATFORM=' \ 391 'PLIST_SUBST MACHINE_GNU_PLATFORM=' \
391 'PLIST_SUBST LN=' \ 392 'PLIST_SUBST LN=' \
392 'PLIST_SUBST LOWER_VENDOR=' \ 393 'PLIST_SUBST LOWER_VENDOR=' \
393 'PLIST_SUBST LOWER_OPSYS=' \ 394 'PLIST_SUBST LOWER_OPSYS=' \
394 'PLIST_SUBST LOWER_OS_VERSION=' \ 395 'PLIST_SUBST LOWER_OS_VERSION=' \
395 'PLIST_SUBST PKGBASE=' \ 396 'PLIST_SUBST PKGBASE=hs-package' \
396 'PLIST_SUBST PKGNAME=' \ 397 'PLIST_SUBST PKGNAME=hs-package-1.0' \
397 'PLIST_SUBST PKGLOCALEDIR=' \ 398 'PLIST_SUBST PKGLOCALEDIR=' \
398 'PLIST_SUBST PKGVERSION=' \ 399 'PLIST_SUBST PKGVERSION=1.0' \
399 'PLIST_SUBST LOCALBASE=' \ 400 'PLIST_SUBST LOCALBASE=' \
400 'PLIST_SUBST VIEWBASE=' \ 401 'PLIST_SUBST VIEWBASE=' \
401 'PLIST_SUBST X11BASE=' \ 402 'PLIST_SUBST X11BASE=' \
402 'PLIST_SUBST CHGRP=' \ 403 'PLIST_SUBST CHGRP=' \
403 'PLIST_SUBST CHMOD=' \ 404 'PLIST_SUBST CHMOD=' \
404 'PLIST_SUBST CHOWN=' \ 405 'PLIST_SUBST CHOWN=' \
405 'PLIST_SUBST MKDIR=mkdir -p' \ 406 'PLIST_SUBST MKDIR=mkdir -p' \
406 'PLIST_SUBST RMDIR=' \ 407 'PLIST_SUBST RMDIR=' \
407 'PLIST_SUBST RM=' \ 408 'PLIST_SUBST RM=' \
408 'PLIST_SUBST TRUE=true' \ 409 'PLIST_SUBST TRUE=true' \
409 'PLIST_SUBST PKGGNUDIR=' \ 410 'PLIST_SUBST PKGGNUDIR=' \
410 'PLIST_SUBST PKGMANDIR=' \ 411 'PLIST_SUBST PKGMANDIR=' \
411 'PRINT_PLIST_AWK ' 412 'PRINT_PLIST_AWK '