Skip to content

Commit 867e45e

Browse files
authored
Merge pull request #6768 from phadej/issue-5570
Resolve #5570: Use PackageVersionConstraint more
2 parents a6b6139 + 09a22b4 commit 867e45e

File tree

14 files changed

+119
-139
lines changed

14 files changed

+119
-139
lines changed

Cabal/Distribution/PackageDescription/Configuration.hs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import Distribution.Types.ForeignLib
5858
import Distribution.Types.Component
5959
import Distribution.Types.Dependency
6060
import Distribution.Types.PackageName
61+
import Distribution.Types.PackageVersionConstraint
6162
import Distribution.Types.UnqualComponentName
6263
import Distribution.Types.CondTree
6364
import Distribution.Types.Condition
@@ -177,7 +178,7 @@ resolveWithFlags ::
177178
-> OS -- ^ OS as returned by Distribution.System.buildOS
178179
-> Arch -- ^ Arch as returned by Distribution.System.buildArch
179180
-> CompilerInfo -- ^ Compiler information
180-
-> [Dependency] -- ^ Additional constraints
181+
-> [PackageVersionConstraint] -- ^ Additional constraints
181182
-> [CondTree ConfVar [Dependency] PDTagged]
182183
-> ([Dependency] -> DepTestRslt [Dependency]) -- ^ Dependency test function.
183184
-> Either [Dependency] (TargetSet PDTagged, FlagAssignment)
@@ -186,7 +187,10 @@ resolveWithFlags ::
186187
resolveWithFlags dom enabled os arch impl constrs trees checkDeps =
187188
either (Left . fromDepMapUnion) Right $ explore (build mempty dom)
188189
where
189-
extraConstrs = toDepMap constrs
190+
extraConstrs = toDepMap
191+
[ Dependency pn ver mempty
192+
| PackageVersionConstraint pn ver <- constrs
193+
]
190194

191195
-- simplify trees by (partially) evaluating all conditions and converting
192196
-- dependencies to dependency maps.
@@ -438,7 +442,7 @@ finalizePD ::
438442
-- True.
439443
-> Platform -- ^ The 'Arch' and 'OS'
440444
-> CompilerInfo -- ^ Compiler information
441-
-> [Dependency] -- ^ Additional constraints
445+
-> [PackageVersionConstraint] -- ^ Additional constraints
442446
-> GenericPackageDescription
443447
-> Either [Dependency]
444448
(PackageDescription, FlagAssignment)

Cabal/Distribution/Simple/Build.hs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ import Distribution.Simple.Utils.Json
8181
import Distribution.System
8282
import Distribution.Pretty
8383
import Distribution.Verbosity
84+
import Distribution.Version (thisVersion)
8485

8586
import Distribution.Compat.Graph (IsNode(..))
8687

@@ -535,16 +536,20 @@ testSuiteLibV09AsLibAndExe pkg_descr
535536
, componentCompatPackageKey = compat_key
536537
, componentExposedModules = [IPI.ExposedModule m Nothing]
537538
}
539+
pkgName' = mkPackageName $ prettyShow compat_name
538540
pkg = pkg_descr {
539-
package = (package pkg_descr) { pkgName = mkPackageName $ prettyShow compat_name }
541+
package = (package pkg_descr) { pkgName = pkgName' }
540542
, executables = []
541543
, testSuites = []
542544
, subLibraries = [lib]
543545
}
544546
ipi = inplaceInstalledPackageInfo pwd distPref pkg (mkAbiHash "") lib lbi libClbi
545547
testDir = buildDir lbi </> stubName test
546548
</> stubName test ++ "-tmp"
547-
testLibDep = thisPackageVersion $ package pkg
549+
testLibDep = Dependency
550+
pkgName'
551+
(thisVersion $ pkgVersion $ package pkg_descr)
552+
(Set.singleton LMainLibName)
548553
exe = Executable {
549554
exeName = mkUnqualComponentName $ stubName test,
550555
modulePath = stubFilePath test,

Cabal/Distribution/Simple/Configure.hs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import Distribution.Simple.BuildTarget
7979
import Distribution.Simple.LocalBuildInfo
8080
import Distribution.Types.ExeDependency
8181
import Distribution.Types.LegacyExeDependency
82+
import Distribution.Types.PackageVersionConstraint
8283
import Distribution.Types.PkgconfigVersion
8384
import Distribution.Types.PkgconfigDependency
8485
import Distribution.Types.PkgconfigVersionRange
@@ -450,7 +451,7 @@ configure (pkg_descr0, pbi) cfg = do
450451
-- NB: The fact that we bundle all the constraints together means
451452
-- that is not possible to configure a test-suite to use one
452453
-- version of a dependency, and the executable to use another.
453-
(allConstraints :: [Dependency],
454+
(allConstraints :: [PackageVersionConstraint],
454455
requiredDepsMap :: Map (PackageName, ComponentName) InstalledPackageInfo)
455456
<- either (die' verbosity) return $
456457
combinedConstraints (configConstraints cfg)
@@ -1000,7 +1001,7 @@ configureFinalizedPackage
10001001
:: Verbosity
10011002
-> ConfigFlags
10021003
-> ComponentRequestedSpec
1003-
-> [Dependency]
1004+
-> [PackageVersionConstraint]
10041005
-> (Dependency -> Bool) -- ^ tests if a dependency is satisfiable.
10051006
-- Might say it's satisfiable even when not.
10061007
-> Compiler
@@ -1459,10 +1460,10 @@ interpretPackageDbFlags userInstall specificDBs =
14591460
-- deps in the end. So we still need to remember which installed packages to
14601461
-- pick.
14611462
combinedConstraints
1462-
:: [Dependency]
1463+
:: [PackageVersionConstraint]
14631464
-> [GivenComponent]
14641465
-> InstalledPackageIndex
1465-
-> Either String ([Dependency],
1466+
-> Either String ([PackageVersionConstraint],
14661467
Map (PackageName, ComponentName) InstalledPackageInfo)
14671468
combinedConstraints constraints dependencies installedPackages = do
14681469

@@ -1476,9 +1477,9 @@ combinedConstraints constraints dependencies installedPackages = do
14761477
return (allConstraints, idConstraintMap)
14771478

14781479
where
1479-
allConstraints :: [Dependency]
1480+
allConstraints :: [PackageVersionConstraint]
14801481
allConstraints = constraints
1481-
++ [ thisPackageVersion (packageId pkg)
1482+
++ [ thisPackageVersionConstraint (packageId pkg)
14821483
| (_, _, _, Just pkg) <- dependenciesPkgInfo ]
14831484

14841485
idConstraintMap :: Map (PackageName, ComponentName) InstalledPackageInfo

Cabal/Distribution/Simple/Setup.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,11 @@ import Distribution.Simple.Program
9898
import Distribution.Simple.InstallDirs
9999
import Distribution.Verbosity
100100
import Distribution.Utils.NubList
101-
import Distribution.Types.Dependency
102101
import Distribution.Types.ComponentId
103102
import Distribution.Types.GivenComponent
104103
import Distribution.Types.Module
105104
import Distribution.Types.PackageName
105+
import Distribution.Types.PackageVersionConstraint
106106
import Distribution.Types.UnqualComponentName (unUnqualComponentName)
107107

108108
import Distribution.Compat.Stack
@@ -256,8 +256,8 @@ data ConfigFlags = ConfigFlags {
256256
configSplitObjs :: Flag Bool, -- ^Enable -split-objs with GHC
257257
configStripExes :: Flag Bool, -- ^Enable executable stripping
258258
configStripLibs :: Flag Bool, -- ^Enable library stripping
259-
configConstraints :: [Dependency], -- ^Additional constraints for
260-
-- dependencies.
259+
configConstraints :: [PackageVersionConstraint], -- ^Additional constraints for
260+
-- dependencies.
261261
configDependencies :: [GivenComponent],
262262
-- ^The packages depended on.
263263
configInstantiateWith :: [(ModuleName, Module)],

Cabal/Distribution/Types/Dependency.hs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,14 @@ module Distribution.Types.Dependency
66
, depPkgName
77
, depVerRange
88
, depLibraries
9-
, thisPackageVersion
10-
, notThisPackageVersion
119
, simplifyDependency
1210
) where
1311

1412
import Distribution.Compat.Prelude
1513
import Prelude ()
1614

1715
import Distribution.Version
18-
(VersionRange, anyVersion,notThisVersion, simplifyVersionRange, thisVersion)
16+
(VersionRange, anyVersion, simplifyVersionRange )
1917
import Distribution.Types.VersionRange (isAnyVersionLight)
2018

2119
import Distribution.CabalSpecVersion
@@ -25,7 +23,6 @@ import Distribution.FieldGrammar.Described
2523
import Distribution.Parsec
2624
import Distribution.Pretty
2725
import Distribution.Types.LibraryName
28-
import Distribution.Types.PackageId
2926
import Distribution.Types.PackageName
3027
import Distribution.Types.UnqualComponentName
3128
import Text.PrettyPrint ((<+>))
@@ -185,20 +182,6 @@ instance Described Dependency where
185182
where
186183
vr = RENamed "version-range" (describe (Proxy :: Proxy VersionRange))
187184

188-
-- mempty should never be in a Dependency-as-dependency.
189-
-- This is only here until the Dependency-as-constraint problem is solved #5570.
190-
-- Same for below.
191-
--
192-
-- Note: parser allows for empty set!
193-
--
194-
thisPackageVersion :: PackageIdentifier -> Dependency
195-
thisPackageVersion (PackageIdentifier n v) =
196-
Dependency n (thisVersion v) Set.empty
197-
198-
notThisPackageVersion :: PackageIdentifier -> Dependency
199-
notThisPackageVersion (PackageIdentifier n v) =
200-
Dependency n (notThisVersion v) Set.empty
201-
202185
-- | Simplify the 'VersionRange' expression in a 'Dependency'.
203186
-- See 'simplifyVersionRange'.
204187
--

Cabal/Distribution/Types/PackageVersionConstraint.hs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
{-# LANGUAGE DeriveDataTypeable #-}
22
{-# LANGUAGE DeriveGeneric #-}
3-
module Distribution.Types.PackageVersionConstraint
4-
( PackageVersionConstraint(..)
5-
) where
3+
module Distribution.Types.PackageVersionConstraint (
4+
PackageVersionConstraint(..),
5+
thisPackageVersionConstraint,
6+
) where
67

78
import Distribution.Compat.Prelude
89
import Prelude ()
@@ -21,8 +22,8 @@ import Text.PrettyPrint ((<+>))
2122
-- | A version constraint on a package. Different from 'ExeDependency' and
2223
-- 'Dependency' since it does not specify the need for a component, not even
2324
-- the main library.
24-
-- There are a few places in the codebase where 'Dependency' is used where
25-
-- 'PackageVersionConstraint' should be used instead (#5570).
25+
-- There are a few places in the codebase where 'Dependency' was used where
26+
-- 'PackageVersionConstraint' is not used instead (#5570).
2627
data PackageVersionConstraint = PackageVersionConstraint PackageName VersionRange
2728
deriving (Generic, Read, Show, Eq, Typeable, Data)
2829

@@ -69,3 +70,7 @@ instance Described PackageVersionConstraint where
6970
-- Related https://github.com/haskell/cabal/issues/6760
7071
, RESpaces1 <> describe (Proxy :: Proxy VersionRange)
7172
]
73+
74+
thisPackageVersionConstraint :: PackageIdentifier -> PackageVersionConstraint
75+
thisPackageVersionConstraint (PackageIdentifier pn vr) =
76+
PackageVersionConstraint pn (thisVersion vr)

Cabal/tests/UnitTests/Distribution/Utils/Structured.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@ import Distribution.SPDX.License (License)
1111
import Distribution.Types.VersionRange (VersionRange)
1212

1313
#if MIN_VERSION_base(4,7,0)
14-
import Distribution.Types.LocalBuildInfo (LocalBuildInfo)
14+
import Distribution.Types.GenericPackageDescription (GenericPackageDescription)
15+
import Distribution.Types.LocalBuildInfo (LocalBuildInfo)
1516
#endif
1617

1718
import UnitTests.Orphans ()
1819

1920
tests :: TestTree
2021
tests = testGroup "Distribution.Utils.Structured"
2122
-- This test also verifies that structureHash doesn't loop.
22-
[ testCase "VersionRange" $ structureHash (Proxy :: Proxy VersionRange) @?= Fingerprint 0x39396fc4f2d751aa 0xa1f94e6d843f03bd
23-
, testCase "SPDX.License" $ structureHash (Proxy :: Proxy License) @?= Fingerprint 0xd3d4a09f517f9f75 0xbc3d16370d5a853a
23+
[ testCase "VersionRange" $ structureHash (Proxy :: Proxy VersionRange) @?= Fingerprint 0x39396fc4f2d751aa 0xa1f94e6d843f03bd
24+
, testCase "SPDX.License" $ structureHash (Proxy :: Proxy License) @?= Fingerprint 0xd3d4a09f517f9f75 0xbc3d16370d5a853a
2425
-- The difference is in encoding of newtypes
2526
#if MIN_VERSION_base(4,7,0)
26-
, testCase "LocalBuildInfo" $ structureHash (Proxy :: Proxy LocalBuildInfo) @?= Fingerprint 0x779513b2e8a07958 0xd344652f7031f88f
27+
, testCase "GenericPackageDescription" $ structureHash (Proxy :: Proxy GenericPackageDescription) @?= Fingerprint 0xcaf11323731bfb4a 0xdfda6dfccb716a3f
28+
, testCase "LocalBuildInfo" $ structureHash (Proxy :: Proxy LocalBuildInfo) @?= Fingerprint 0x5a476529cf81643a 0x874574ad4ae0adbf
2729
#endif
2830
]

cabal-install/Distribution/Client/Configure.hs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,10 @@ import Distribution.Simple.PackageIndex
6363
( InstalledPackageIndex, lookupPackageName )
6464
import Distribution.Package
6565
( Package(..), packageName, PackageId )
66-
import Distribution.Types.Dependency
67-
( thisPackageVersion )
6866
import Distribution.Types.GivenComponent
6967
( GivenComponent(..) )
7068
import Distribution.Types.PackageVersionConstraint
71-
( PackageVersionConstraint(..) )
69+
( PackageVersionConstraint(..), thisPackageVersionConstraint )
7270
import qualified Distribution.PackageDescription as PkgDesc
7371
import Distribution.PackageDescription.Parsec
7472
( readGenericPackageDescription )
@@ -409,7 +407,7 @@ configurePackage verbosity platform comp scriptOptions configFlags
409407
-- We generate the legacy constraints as well as the new style precise
410408
-- deps. In the end only one set gets passed to Setup.hs configure,
411409
-- depending on the Cabal version we are talking to.
412-
configConstraints = [ thisPackageVersion srcid
410+
configConstraints = [ thisPackageVersionConstraint srcid
413411
| ConfiguredId srcid (Just (PkgDesc.CLibName PkgDesc.LMainLibName)) _uid
414412
<- CD.nonSetupDeps deps ],
415413
configDependencies = [ GivenComponent (packageName srcid) cname uid

cabal-install/Distribution/Client/Install.hs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import Distribution.Utils.Generic(safeLast)
3535

3636
import qualified Data.List.NonEmpty as NE
3737
import qualified Data.Map as Map
38+
import qualified Data.Set as Set
3839
import Control.Exception as Exception
3940
( Exception(toException), bracket, catches
4041
, Handler(Handler), handleJust, IOException, SomeException )
@@ -140,12 +141,13 @@ import Distribution.Package
140141
, Package(..), HasMungedPackageId(..), HasUnitId(..)
141142
, UnitId )
142143
import Distribution.Types.Dependency
143-
( thisPackageVersion )
144+
( Dependency (..) )
145+
import Distribution.Types.LibraryName (LibraryName (..))
144146
import Distribution.Types.GivenComponent
145147
( GivenComponent(..) )
146148
import Distribution.Pretty ( prettyShow )
147149
import Distribution.Types.PackageVersionConstraint
148-
( PackageVersionConstraint(..) )
150+
( PackageVersionConstraint(..), thisPackageVersionConstraint )
149151
import Distribution.Types.MungedPackageId
150152
import qualified Distribution.PackageDescription as PackageDescription
151153
import Distribution.PackageDescription
@@ -829,8 +831,8 @@ postInstallActions verbosity
829831
unless oneShot $
830832
World.insert verbosity worldFile
831833
--FIXME: does not handle flags
832-
[ World.WorldPkgInfo dep mempty
833-
| UserTargetNamed dep <- targets ]
834+
[ World.WorldPkgInfo (Dependency pn vr (Set.singleton LMainLibName)) mempty
835+
| UserTargetNamed (PackageVersionConstraint pn vr) <- targets ]
834836

835837
let buildReports = BuildReports.fromInstallPlan platform (compilerId comp)
836838
installPlan buildOutcomes
@@ -1209,7 +1211,7 @@ installReadyPackage platform cinfo configFlags
12091211
-- We generate the legacy constraints as well as the new style precise deps.
12101212
-- In the end only one set gets passed to Setup.hs configure, depending on
12111213
-- the Cabal version we are talking to.
1212-
configConstraints = [ thisPackageVersion srcid
1214+
configConstraints = [ thisPackageVersionConstraint srcid
12131215
| ConfiguredId
12141216
srcid
12151217
(Just

0 commit comments

Comments
 (0)