| @@ -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} |
256 | PLIST_SUBST+= ${exists(${DESTDIR}${_HASKELL_PKG_DESCR_FILE}):?${_HS_PLIST_SUBST}:} | | 255 | PLIST_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}") } |
263 | PRINT_PLIST_AWK+= ${exists(${DESTDIR}${_HASKELL_PKG_DESCR_FILE}):?${_HS_PRINT_PLIST_AWK}:} | | 263 | PRINT_PLIST_AWK+= ${exists(${DESTDIR}${_HASKELL_PKG_DESCR_FILE}):?${_HS_PRINT_PLIST_AWK}:} |
264 | | | | |
265 | . if ${HS_UPDATE_PLIST} != no && ${_HS_PLIST_STATUS} == missing | | | |
266 | GENERATE_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 |
| | | 268 | GENERATE_PLIST+= ${MAKE} print-PLIST > ${PKGDIR}/PLIST; |
| | | 269 | . endif |
271 | GENERATE_PLIST+= \ | | 270 | GENERATE_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}; |
274 | PLIST_SRC= # none, because the PLIST file is outdated or missing | | 273 | PLIST_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 |
276 | WARNINGS+= "[haskell.mk] The PLIST format is outdated." | | 277 | WARNINGS+= "[haskell.mk] The PLIST format is outdated." |
277 | WARNINGS+= "[haskell.mk] Set HS_UPDATE_PLIST=yes to update it automatically." | | 278 | WARNINGS+= "[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. |
285 | do-configure: | | 285 | do-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} |