summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/count-deps/Main.hs20
1 files changed, 16 insertions, 4 deletions
diff --git a/utils/count-deps/Main.hs b/utils/count-deps/Main.hs
index 9dcc75619d..b5a69b5118 100644
--- a/utils/count-deps/Main.hs
+++ b/utils/count-deps/Main.hs
@@ -1,8 +1,11 @@
{-# OPTIONS_GHC -Wno-name-shadowing #-}
+{-# LANGUAGE CPP #-}
{-# LANGUAGE ImportQualifiedPost #-}
module Main where
+import Prelude
+
import GHC.Driver.Env
import GHC.Unit.Module
import GHC.Driver.Session
@@ -13,7 +16,9 @@ import Control.Monad.IO.Class
import System.Environment
import GHC.Unit.Module.Deps
import Data.Map.Strict qualified as Map
+#if __GLASGOW_HASKELL >= 905
import Data.Set qualified as Set
+#endif
-- Example invocation:
-- inplace/bin/count-deps `inplace/bin/ghc-stage2 --print-libdir` "GHC.Parser"
@@ -49,6 +54,9 @@ printDeps libdir modName dot = do
-- 'tred deps.dot > deps-tred.dot && dot -Tpdf -o deps.pdf deps-tred.dot'
putStr $ dotSpec modName modGraph
+type DepMap = Map.Map ModuleNameWithIsBoot Deps
+type Deps = [ModuleNameWithIsBoot]
+
calcDeps :: String -> FilePath -> IO (Map.Map ModuleName [ModuleName])
calcDeps modName libdir =
defaultErrorHandler defaultFatalMessager defaultFlushOut $ do
@@ -58,12 +66,12 @@ calcDeps modName libdir =
(df, _, _) <- parseDynamicFlags logger df [noLoc "-package=ghc"]
setSessionDynFlags df
env <- getSession
- loop env Map.empty [mkModuleName modName]
+ loop env Map.empty [GWIB (mkModuleName modName) NotBoot]
where
-- Source imports are only guaranteed to show up in the 'mi_deps'
-- of modules that import them directly and don’t propagate
-- transitively so we loop.
- loop :: HscEnv -> Map.Map ModuleName [ModuleName] -> [ModuleName] -> Ghc (Map.Map ModuleName [ModuleName])
+ loop :: HscEnv -> DepMap -> Deps -> Ghc DepMap
loop env modules (m : ms) =
if m `Map.member` modules
then loop env modules ms
@@ -77,5 +85,9 @@ calcDeps modName libdir =
mkModule :: ModuleName -> Module
mkModule = Module (stringToUnit "ghc")
- modDeps :: ModIface -> [ModuleName]
- modDeps mi = map (gwib_mod . snd) $ Set.toList $ dep_direct_mods (mi_deps mi)
+ modDeps :: ModIface -> [ModuleNameWithIsBoot]
+#if __GLASGOW_HASKELL < 906
+ modDeps mi = map dep_mods (mi_deps mi)
+#else
+ modDeps mi = map snd $ Set.toList $ dep_direct_mods (mi_deps mi)
+#endif