diff options
-rw-r--r-- | mk/bsd.pkg.mk | 40 | ||||
-rw-r--r-- | mk/bsd.prefs.mk | 8 | ||||
-rw-r--r-- | mk/help/notonly.help | 33 | ||||
-rw-r--r-- | mk/misc/can-be-built-here.mk | 28 |
4 files changed, 90 insertions, 19 deletions
diff --git a/mk/bsd.pkg.mk b/mk/bsd.pkg.mk index af767bb06eb..7a6038d4447 100644 --- a/mk/bsd.pkg.mk +++ b/mk/bsd.pkg.mk @@ -1,4 +1,4 @@ -# $NetBSD: bsd.pkg.mk,v 1.2007 2014/12/30 15:13:19 wiz Exp $ +# $NetBSD: bsd.pkg.mk,v 1.2008 2015/01/01 06:06:06 dholland Exp $ # # This file is in the public domain. # @@ -488,7 +488,24 @@ PKG_FAIL_REASON+= "${PKGNAME} is marked as broken:" ${BROKEN:Q} .include "license.mk" -# Define __PLATFORM_OK only if the OS matches the pkg's allowed list. +# +# Check for packages broken or inappropriate on this platform. +# Set __PLATFORM_OK and __PLATFORM_WORKS only if the platform passes +# both the NOT_FOR/ONLY_FOR and BROKEN_ON lists (respectively). +# + +# 1. BROKEN_EXCEPT_ON_PLATFORM +. if defined(BROKEN_EXCEPT_ON_PLATFORM) && !empty(BROKEN_EXCEPT_ON_PLATFORM) +. for __tmp__ in ${BROKEN_EXCEPT_ON_PLATFORM} +. if ${MACHINE_PLATFORM:M${__tmp__}} != "" +__PLATFORM_WORKS?= yes +. endif # MACHINE_PLATFORM +. endfor # __tmp__ +. else # !BROKEN_EXCEPT_ON_PLATFORM +__PLATFORM_WORKS?= yes +. endif # BROKEN_EXCEPT_ON_PLATFORM + +# 2. ONLY_FOR_PLATFORM . if defined(ONLY_FOR_PLATFORM) && !empty(ONLY_FOR_PLATFORM) . for __tmp__ in ${ONLY_FOR_PLATFORM} . if ${MACHINE_PLATFORM:M${__tmp__}} != "" @@ -498,15 +515,30 @@ __PLATFORM_OK?= yes . else # !ONLY_FOR_PLATFORM __PLATFORM_OK?= yes . endif # ONLY_FOR_PLATFORM + +# 3. BROKEN_ON_PLATFORM +. for __tmp__ in ${BROKEN_ON_PLATFORM} +. if ${MACHINE_PLATFORM:M${__tmp__}} != "" +. undef __PLATFORM_WORKS +. endif # MACHINE_PLATFORM +. endfor # __tmp__ + +# 4. NOT_FOR_PLATFORM . for __tmp__ in ${NOT_FOR_PLATFORM} . if ${MACHINE_PLATFORM:M${__tmp__}} != "" . undef __PLATFORM_OK . endif # MACHINE_PLATFORM . endfor # __tmp__ + +# Check OK (NOT_FOR/ONLY_FOR) before WORKS (BROKEN_ON) . if !defined(__PLATFORM_OK) -PKG_FAIL_REASON+= "${PKGNAME} is not available for ${MACHINE_PLATFORM}" +PKG_SKIP_REASON+= "${PKGNAME} is not available for ${MACHINE_PLATFORM}" . endif # !__PLATFORM_OK -.endif +. if !defined(__PLATFORM_WORKS) +PKG_FAIL_REASON+= "${PKGNAME} is marked broken on ${MACHINE_PLATFORM}" +. endif # !__PLATFORM_WORKS + +.endif # NO_SKIP # Add these defs to the ones dumped into +BUILD_DEFS _BUILD_DEFS+= PKGPATH diff --git a/mk/bsd.prefs.mk b/mk/bsd.prefs.mk index 7bf10df5823..669bf610174 100644 --- a/mk/bsd.prefs.mk +++ b/mk/bsd.prefs.mk @@ -1,4 +1,4 @@ -# $NetBSD: bsd.prefs.mk,v 1.353 2014/12/30 15:13:19 wiz Exp $ +# $NetBSD: bsd.prefs.mk,v 1.354 2015/01/01 06:06:06 dholland Exp $ # # This file includes the mk.conf file, which contains the user settings. # @@ -796,10 +796,10 @@ _PKG_VARS.dirs= WRKSRC PATCHDIR FILESDIR PKGDIR _SYS_VARS.dirs= WRKDIR DESTDIR PKG_SYSCONFBASEDIR # List of 64bit operating systems with sizeof(int) != sizeof(void *). -# This can be used for software that is not 64bit clean. -# amd64 is for OpenBSD. +# This can be used with BROKEN_ON_PLATFORM for software that is not +# 64bit clean. The "amd64" case is for OpenBSD. # -# Keywords: ONLY_FOR_PLATFORM NOT_FOR_PLATFORM 64bit +# Keywords: BROKEN_ON_PLATFORM 64bit # LP64PLATFORMS= *-*-alpha *-*-sparc64 *-*-x86_64 *-*-amd64 diff --git a/mk/help/notonly.help b/mk/help/notonly.help index 36440616615..bb5337f670a 100644 --- a/mk/help/notonly.help +++ b/mk/help/notonly.help @@ -1,22 +1,35 @@ -# $NetBSD: notonly.help,v 1.2 2007/09/12 09:59:44 rillig Exp $ +# $NetBSD: notonly.help,v 1.3 2015/01/01 06:06:06 dholland Exp $ # === Package-settable variables === # +# BROKEN_ON_PLATFORM +# A list of platforms on which this package doesn't build or +# builds but doesn't run. +# # NOT_FOR_PLATFORM -# A list of platforms (for which this package either doesn't build -# or isn't useful to have. +# A list of platforms for which this package isn't useful to +# have and doesn't make sense to attempt to build. +# # +# BROKEN_EXCEPT_ON_PLATFORM +# If a package only builds and runs on some platforms, they +# should be listed here. This variable should only be used if +# you are sure that the package won't work on other platforms. +# It is almost always better to use BROKEN_ON_PLATFORM. # # ONLY_FOR_PLATFORM -# If a package only builds on some platforms, they should be -# listed here. This variable should only be used if you are sure -# that the package won't work on other platforms. It is almost -# always better to use NOT_FOR_PLATFORM. +# If a package only makes sense on a fixed set of platforms +# (often exactly one), they should be listed here. This variable +# should only be used if you are sure that the package doesn't +# make sense on other platforms. For ordinary cases it is almost +# always better to use NOT_FOR_PLATFORM, and if the package merely +# doesn't work, use BROKEN_ON_PLATFORM. # # Platforms are triples of OPSYS, OS_VERSION and MACHINE_ARCH, separated # by dashes. Each of the components may be the wildcard "*". # -# Whenever you use these variables in a package Makefile, add a comment -# nearby _why_ you are restricting the list of platforms. Otherwise -# these restrictions may be quickly removed by other developers. +# Whenever you use these variables in a package Makefile, add a +# comment nearby explaining _why_ you are restricting the list of +# platforms. Otherwise these restrictions may be quickly removed by +# other developers. # diff --git a/mk/misc/can-be-built-here.mk b/mk/misc/can-be-built-here.mk index 8218687a38c..ba23f0be8bb 100644 --- a/mk/misc/can-be-built-here.mk +++ b/mk/misc/can-be-built-here.mk @@ -1,10 +1,11 @@ -# $NetBSD: can-be-built-here.mk,v 1.7 2014/12/30 15:13:19 wiz Exp $ +# $NetBSD: can-be-built-here.mk,v 1.8 2015/01/01 06:06:06 dholland Exp $ # # This file checks whether a package can be built in the current pkgsrc # environment. It checks the following variables: # # * NOT_FOR_COMPILER, ONLY_FOR_COMPILER # * NOT_FOR_PLATFORM, ONLY_FOR_PLATFORM +# * BROKEN_ON_PLATFORM, BROKEN_EXCEPT_ON_PLATFORM # * NOT_FOR_BULK_PLATFORM # * NOT_FOR_UNPRIVILEGED, ONLY_FOR_UNPRIVILEGED # * PKG_FAIL_REASON, PKG_SKIP_REASON @@ -89,6 +90,31 @@ _CBBH.oplat= yes . endfor .endif +# Check BROKEN_ON_PLATFORM +_CBBH_CHECKS+= bplat +_CBBH_MSGS.bplat= "This package is broken on these platforms: "${BROKEN_ON_PLATFORM:Q}"." + +_CBBH.bplat= yes +.for p in ${BROKEN_ON_PLATFORM} +. if !empty(MACHINE_PLATFORM:M${p}) +_CBBH.bplat= no +. endif +.endfor + +# Check BROKEN_EXCEPT_ON_PLATFORM +_CBBH_CHECKS+= beplat +_CBBH_MSGS.beplat= "This package is broken except on these platforms: "${BROKEN_EXCEPT_ON_PLATFORM:Q}"." + +_CBBH.beplat= yes +.if defined(BROKEN_EXCEPT_ON_PLATFORM) && !empty(BROKEN_EXCEPT_ON_PLATFORM) +_CBBH.beplat= no +. for p in ${BROKEN_EXCEPT_ON_PLATFORM} +. if !empty(MACHINE_PLATFORM:M${p}) +_CBBH.beplat= yes +. endif +. endfor +.endif + # Check NOT_FOR_UNPRIVILEGED _CBBH_CHECKS+= nunpriv _CBBH_MSGS.nunpriv= "This package is not available in unprivileged mode." |