@@ -12,7 +12,7 @@ import Distribution.Simple.Flag (Flag)
1212import Distribution.Simple.GHC.Build.ExtraSources
1313import Distribution.Simple.GHC.Build.Link
1414import Distribution.Simple.GHC.Build.Modules
15- import Distribution.Simple.GHC.Build.Utils (isHaskell )
15+ import Distribution.Simple.GHC.Build.Utils (compilerBuildWay , isHaskell , withDynFLib )
1616import Distribution.Simple.LocalBuildInfo
1717import Distribution.Simple.Program.Builtin (ghcProgram )
1818import Distribution.Simple.Program.Db (requireProgram )
@@ -73,6 +73,7 @@ build numJobs pkg_descr pbci = do
7373 verbosity = buildVerbosity pbci
7474 isLib = buildIsLib pbci
7575 lbi = localBuildInfo pbci
76+ bi = buildBI pbci
7677 clbi = buildCLBI pbci
7778 isIndef = componentIsIndefinite clbi
7879 mbWorkDir = mbWorkDirLBI lbi
@@ -111,9 +112,25 @@ build numJobs pkg_descr pbci = do
111112
112113 (ghcProg, _) <- liftIO $ requireProgram verbosity ghcProgram (withPrograms lbi)
113114
114- let wantedWays@ (wantedLibWays, _, wantedExeWay) = buildWays lbi
115-
116- liftIO $ info verbosity (" Wanted build ways(" ++ show isLib ++ " ): " ++ show (if isLib then wantedLibWays isIndef else [wantedExeWay]))
115+ -- Ways which are wanted from configuration flags
116+ let wantedWays@ (wantedLibWays, wantedFLibWay, wantedExeWay) = buildWays lbi
117+
118+ -- Ways which are needed due to the compiler configuration
119+ let doingTH = usesTemplateHaskellOrQQ bi
120+ defaultGhcWay = compilerBuildWay (buildCompiler pbci)
121+ wantedModBuildWays = case buildComponent pbci of
122+ CLib _ -> wantedLibWays isIndef
123+ CFLib fl -> [wantedFLibWay (withDynFLib fl)]
124+ CExe _ -> [wantedExeWay]
125+ CTest _ -> [wantedExeWay]
126+ CBench _ -> [wantedExeWay]
127+ finalModBuildWays =
128+ wantedModBuildWays
129+ ++ [defaultGhcWay | doingTH && defaultGhcWay `notElem` wantedModBuildWays]
130+ compNameStr = showComponentName $ componentName $ buildComponent pbci
131+
132+ liftIO $ info verbosity (" Wanted module build ways(" ++ compNameStr ++ " ): " ++ show wantedModBuildWays)
133+ liftIO $ info verbosity (" Final module build ways(" ++ compNameStr ++ " ): " ++ show finalModBuildWays)
117134 -- We need a separate build and link phase, and C sources must be compiled
118135 -- after Haskell modules, because C sources may depend on stub headers
119136 -- generated from compiling Haskell modules (#842, #3294).
@@ -127,7 +144,7 @@ build numJobs pkg_descr pbci = do
127144 | otherwise ->
128145 (Nothing , Just mainFile)
129146 Nothing -> (Nothing , Nothing )
130- buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir (wantedLibWays isIndef) pbci
147+ buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir finalModBuildWays pbci
131148 extraSources <- buildAllExtraSources nonHsMainFile ghcProg buildTargetDir wantedWays pbci
132149 linkOrLoadComponent
133150 ghcProg
0 commit comments