diff --git a/Cabal/src/Distribution/PackageDescription/Check.hs b/Cabal/src/Distribution/PackageDescription/Check.hs index 93f465e5074..4c14a6999b3 100644 --- a/Cabal/src/Distribution/PackageDescription/Check.hs +++ b/Cabal/src/Distribution/PackageDescription/Check.hs @@ -70,6 +70,7 @@ import System.FilePath import qualified Data.ByteString.Lazy as BS import qualified Data.Map as Map +import qualified Control.Monad as CM import qualified Distribution.Compat.DList as DList import qualified Distribution.SPDX as SPDX import qualified System.Directory as System @@ -1899,7 +1900,7 @@ checkPackageVersions pkg = baseErrors where baseErrors = PackageDistInexcusable BaseNoUpperBounds <$ bases - deps = toDependencyVersionsMap allBuildDepends pkg + deps = toDependencyVersionsMap allNonInternalBuildDepends pkg -- base gets special treatment (it's more critical) (bases, others) = partition (("base" ==) . unPackageName) $ [ name @@ -1907,6 +1908,16 @@ checkPackageVersions pkg = , not (hasUpperBound vr) ] + -- Get the combined build-depends entries of all components. + allNonInternalBuildDepends :: PackageDescription -> [Dependency] + allNonInternalBuildDepends = targetBuildDepends CM.<=< allNonInternalBuildInfo + + allNonInternalBuildInfo :: PackageDescription -> [BuildInfo] + allNonInternalBuildInfo pkg_descr = + [bi | lib <- allLibraries pkg_descr, let bi = libBuildInfo lib] + ++ [bi | flib <- foreignLibs pkg_descr, let bi = foreignLibBuildInfo flib] + ++ [bi | exe <- executables pkg_descr, let bi = buildInfo exe] + checkConditionals :: GenericPackageDescription -> [PackageCheck] checkConditionals pkg = catMaybes [ diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index 1a00c905232..ef3449ba40f 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -336,7 +336,7 @@ test-suite unit-tests tasty-quickcheck, tasty-hunit >= 0.10, tree-diff, - QuickCheck >= 2.14 && <2.15 + QuickCheck >= 2.14.3 && <2.15 -- Tests to run with a limited stack and heap size diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs b/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs index 3a26ca2e560..84c9cfa44e1 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs @@ -44,7 +44,7 @@ import Distribution.Solver.Types.PackageConstraint (PackageProperty (..)) import Data.Coerce (Coercible, coerce) import Network.URI (URI (..), URIAuth (..), isUnreserved) import Test.QuickCheck -import Test.QuickCheck.GenericArbitrary +import Test.QuickCheck.GenericArbitrary (genericArbitrary) import Test.QuickCheck.Instances.Cabal () -- note: there are plenty of instances defined in ProjectConfig test file. @@ -107,11 +107,6 @@ arbitraryURIPort = -- cabal-install (and Cabal) types ------------------------------------------------------------------------------- -shrinkBoundedEnum :: (Eq a, Enum a, Bounded a) => a -> [a] -shrinkBoundedEnum x - | x == minBound = [] - | otherwise = [pred x] - adjustSize :: (Int -> Int) -> Gen a -> Gen a adjustSize adjust gen = sized (\n -> resize (adjust n) gen) diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsNoCheck/cabal.out b/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsNoCheck/cabal.out new file mode 100644 index 00000000000..37aa169b416 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsNoCheck/cabal.out @@ -0,0 +1,2 @@ +# cabal check +No errors or warnings could be found in the package. diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsNoCheck/cabal.test.hs b/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsNoCheck/cabal.test.hs new file mode 100644 index 00000000000..70228e5a4a7 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsNoCheck/cabal.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude + +-- Internal targets (tests, benchmarks) should not be checked. +main = cabalTest $ + cabal "check" [] diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsNoCheck/pkg.cabal b/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsNoCheck/pkg.cabal new file mode 100644 index 00000000000..b7f6f6ac75b --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsNoCheck/pkg.cabal @@ -0,0 +1,20 @@ +cabal-version: 3.0 +name: pkg +synopsis: synopsis +description: description +version: 0 +category: example +maintainer: none@example.com +license: GPL-3.0-or-later + +library + exposed-modules: Foo + default-language: Haskell2010 + build-depends: base == 2.2.* + +test-suite test + type: exitcode-stdio-1.0 + main-is: Test.hs + default-language: Haskell2010 + build-depends: base == 2.2.*, + criterion diff --git a/changelog.d/pr-9004 b/changelog.d/pr-9004 new file mode 100644 index 00000000000..6ff90746475 --- /dev/null +++ b/changelog.d/pr-9004 @@ -0,0 +1,11 @@ +synopsis: Do not check PVP on internal targets +packages: cabal-install +prs: #9004 +issues: #8361 + +description: { + +- `cabal check` will not check for dependencies upper bounds in internal + targets (i.e. test-suites and benchmarks) + +}