Skip to content

Commit 338e4d3

Browse files
committed
Fix older ghc builds
1 parent 6daf799 commit 338e4d3

File tree

3 files changed

+50
-16
lines changed

3 files changed

+50
-16
lines changed

cabal.project

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ packages:
4040
source-repository-package
4141
type:git
4242
location: https://github.com/nlander/HieDb.git
43-
tag: f10051a6dc1b809d5f40a45beab92205d1829736
43+
tag: 4eebfcf8fab54f24808e6301227d77ae64d2509c
4444

4545
-- Standard location for temporary packages needed for particular environments
4646
-- For example it is used in the project gitlab mirror to help in the MAcOS M1 build script

ghcide/src/Development/IDE/Core/Dependencies.hs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ indexDependencyHieFiles recorder se hscEnv = do
6868
hieDir :: FilePath
6969
hieDir = pkgLibDir </> "extra-compilation-artifacts"
7070
unit :: GHC.Unit
71-
unit = GHC.RealUnit $ GHC.Definite $ GHC.unitId package
71+
unit = GHC.fromUnitId $ GHC.unitId package
7272
-- Check if we have already indexed this package.
7373
moduleRows <- withHieDb se $ \db ->
7474
lookupPackage db unit
@@ -104,16 +104,14 @@ indexDependencyHieFiles recorder se hscEnv = do
104104
packages :: Set Package
105105
packages = Set.fromList
106106
$ map Package
107-
$ Map.elems
108-
-- Take only the packages in the unitInfoMap that are direct
109-
-- or transitive dependencies.
110-
$ Map.filterWithKey (\uid _ -> uid `Set.member` dependencyIds) unitInfoMap
107+
-- Take only the packages that are direct or transitive dependencies.
108+
$ filter (\unitInfo -> GHC.unitId unitInfo `Set.member` dependencyIds) allPackages
111109
where
112-
unitInfoMap :: GHC.UnitInfoMap
113-
unitInfoMap = GHC.getUnitInfoMap hscEnv
110+
allPackages :: [GHC.UnitInfo]
111+
allPackages = GHC.getUnitInfo hscEnv
114112
dependencyIds :: Set GHC.UnitId
115113
dependencyIds =
116-
calculateTransitiveDependencies unitInfoMap directDependencyIds directDependencyIds
114+
calculateTransitiveDependencies allPackages directDependencyIds directDependencyIds
117115
directDependencyIds :: Set GHC.UnitId
118116
directDependencyIds = Set.fromList
119117
$ map GHC.toUnitId
@@ -122,14 +120,14 @@ indexDependencyHieFiles recorder se hscEnv = do
122120

123121
-- calculateTransitiveDependencies finds the UnitId keys in the UnitInfoMap
124122
-- that are dependencies or transitive dependencies.
125-
calculateTransitiveDependencies :: GHC.UnitInfoMap -> Set GHC.UnitId -> Set GHC.UnitId -> Set GHC.UnitId
126-
calculateTransitiveDependencies unitInfoMap allDependencies newDepencencies
127-
-- If there are no new dependencies, we have found them all,
123+
calculateTransitiveDependencies :: [GHC.UnitInfo] -> Set GHC.UnitId -> Set GHC.UnitId -> Set GHC.UnitId
124+
calculateTransitiveDependencies allPackages allDependencies newDepencencies
125+
-- If there are no new dependencies, then we have found them all,
128126
-- so return allDependencies
129127
| Set.null newDepencencies = allDependencies
130128
-- Otherwise recursively add any dependencies of the newDepencencies
131129
-- that are not in allDependencies already.
132-
| otherwise = calculateTransitiveDependencies unitInfoMap nextAll nextNew
130+
| otherwise = calculateTransitiveDependencies allPackages nextAll nextNew
133131
where
134132
nextAll :: Set GHC.UnitId
135133
nextAll = Set.union allDependencies nextNew
@@ -140,8 +138,7 @@ calculateTransitiveDependencies unitInfoMap allDependencies newDepencencies
140138
nextNew = flip Set.difference allDependencies
141139
$ Set.unions
142140
$ map (Set.fromList . GHC.unitDepends)
143-
$ Map.elems
144-
$ Map.filterWithKey (\uid _ -> uid `Set.member` newDepencencies) unitInfoMap
141+
$ filter (\unitInfo -> GHC.unitId unitInfo `Set.member` newDepencencies) allPackages
145142

146143
getModulesForPackage :: Package -> [GHC.Module]
147144
getModulesForPackage (Package package) =

ghcide/src/Development/IDE/GHC/Compat/Units.hs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@ module Development.IDE.GHC.Compat.Units (
1919
-- * UnitInfoMap
2020
UnitInfoMap,
2121
getUnitInfoMap,
22+
getUnitInfo,
2223
lookupUnit,
2324
lookupUnit',
2425
-- * UnitInfo
2526
UnitInfo,
2627
unitExposedModules,
2728
unitHiddenModules,
2829
unitLibraryDirs,
29-
UnitInfo.unitId,
30+
unitId,
3031
unitDepends,
3132
unitHaddockInterfaces,
3233
unitInfoId,
@@ -45,6 +46,7 @@ module Development.IDE.GHC.Compat.Units (
4546
installedModule,
4647
-- * Module
4748
toUnitId,
49+
fromUnitId,
4850
Development.IDE.GHC.Compat.Units.moduleUnitId,
4951
moduleUnit,
5052
-- * ExternalPackageState
@@ -268,6 +270,16 @@ getUnitInfoMap =
268270
Packages.getPackageConfigMap . hsc_dflags
269271
#endif
270272

273+
getUnitInfo :: HscEnv -> [UnitInfo]
274+
getUnitInfo =
275+
#if MIN_VERSION_ghc(9,2,0)
276+
State.listUnitInfo . ue_units . hsc_unit_env
277+
#elif MIN_VERSION_ghc(9,0,0)
278+
State.listUnitInfo . unitState
279+
#else
280+
Packages.listPackageConfigMap . hsc_dflags
281+
#endif
282+
271283
lookupUnit :: HscEnv -> Unit -> Maybe UnitInfo
272284
#if MIN_VERSION_ghc(9,0,0)
273285
lookupUnit env pid = State.lookupUnit (unitState env) pid
@@ -292,7 +304,13 @@ preloadClosureUs = const ()
292304
#endif
293305

294306
unitLibraryDirs :: UnitInfo -> [FilePath]
307+
#if MIN_VERSION_ghc(9,2,0)
295308
unitLibraryDirs = fmap ST.unpack . UnitInfo.unitLibraryDirs
309+
#elif MIN_VERSION_ghc(9,0,0)
310+
unitLibraryDirs = UnitInfo.unitLibraryDirs
311+
#else
312+
unitLibraryDirs = Packages.libraryDirs
313+
#endif
296314

297315
unitExposedModules :: UnitInfo -> [(ModuleName, Maybe Module)]
298316
unitExposedModules ue =
@@ -303,7 +321,11 @@ unitExposedModules ue =
303321
#endif
304322

305323
unitHiddenModules :: UnitInfo -> [ModuleName]
324+
#if MIN_VERSION_ghc(9,0,0)
306325
unitHiddenModules = UnitInfo.unitHiddenModules
326+
#else
327+
unitHiddenModules = Packages.hiddenModules
328+
#endif
307329

308330
unitDepends :: UnitInfo -> [UnitId]
309331
#if MIN_VERSION_ghc(9,0,0)
@@ -384,6 +406,13 @@ installedModule :: UnitId -> ModuleName -> Module.InstalledModule
384406
installedModule uid modname = Module.InstalledModule (Module.toInstalledUnitId uid) modname
385407
#endif
386408

409+
unitId :: UnitInfo -> UnitId
410+
#if MIN_VERSION_ghc(9,0,0)
411+
unitId = UnitInfo.unitId
412+
#else
413+
unitId = Packages.packageConfigId
414+
#endif
415+
387416
toUnitId :: Unit -> UnitId
388417
toUnitId =
389418
#if MIN_VERSION_ghc(9,0,0)
@@ -392,6 +421,14 @@ toUnitId =
392421
id
393422
#endif
394423

424+
fromUnitId :: UnitId -> Unit
425+
fromUnitId =
426+
#if MIN_VERSION_ghc(9,0,0)
427+
RealUnit . Definite
428+
#else
429+
id
430+
#endif
431+
395432
moduleUnitId :: Module -> UnitId
396433
moduleUnitId =
397434
#if MIN_VERSION_ghc(9,0,0)

0 commit comments

Comments
 (0)