Skip to content

Commit 7c25fcb

Browse files
committed
Fix build ways for foreign libs
Patches the component build ways for foreign library components.
1 parent 851772e commit 7c25fcb

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

Cabal/src/Distribution/Simple/GHC/Build.hs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Distribution.Simple.Flag (Flag)
1212
import Distribution.Simple.GHC.Build.ExtraSources
1313
import Distribution.Simple.GHC.Build.Link
1414
import Distribution.Simple.GHC.Build.Modules
15-
import Distribution.Simple.GHC.Build.Utils (compilerBuildWay, isHaskell)
15+
import Distribution.Simple.GHC.Build.Utils (compilerBuildWay, isHaskell, withDynFLib)
1616
import Distribution.Simple.LocalBuildInfo
1717
import Distribution.Simple.Program.Builtin (ghcProgram)
1818
import Distribution.Simple.Program.Db (requireProgram)
@@ -113,21 +113,24 @@ build numJobs pkg_descr pbci = do
113113
(ghcProg, _) <- liftIO $ requireProgram verbosity ghcProgram (withPrograms lbi)
114114

115115
-- Ways which are wanted from configuration flags
116-
let wantedWays@(wantedLibWays, _, wantedExeWay) = buildWays lbi
116+
let wantedWays@(wantedLibWays, wantedFLibWay, wantedExeWay) = buildWays lbi
117117

118118
-- Ways which are needed due to the compiler configuration
119119
let doingTH = usesTemplateHaskellOrQQ bi
120120
defaultGhcWay = compilerBuildWay (buildCompiler pbci)
121-
wantedLibBuildWays =
122-
if isLib
123-
then wantedLibWays isIndef
124-
else [wantedExeWay]
125-
finalLibBuildWays =
126-
wantedLibBuildWays
127-
++ [defaultGhcWay | doingTH && defaultGhcWay `notElem` wantedLibBuildWays]
128-
129-
liftIO $ info verbosity ("Wanted build ways(" ++ show isLib ++ "): " ++ show wantedLibBuildWays)
130-
liftIO $ info verbosity ("Final lib build ways(" ++ show isLib ++ "): " ++ show finalLibBuildWays)
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)
131134
-- We need a separate build and link phase, and C sources must be compiled
132135
-- after Haskell modules, because C sources may depend on stub headers
133136
-- generated from compiling Haskell modules (#842, #3294).
@@ -141,7 +144,7 @@ build numJobs pkg_descr pbci = do
141144
| otherwise ->
142145
(Nothing, Just mainFile)
143146
Nothing -> (Nothing, Nothing)
144-
buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir finalLibBuildWays pbci
147+
buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir finalModBuildWays pbci
145148
extraSources <- buildAllExtraSources nonHsMainFile ghcProg buildTargetDir wantedWays pbci
146149
linkOrLoadComponent
147150
ghcProg

cabal-testsuite/PackageTests/ProfShared/setup.test.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ main = do
1616

1717
let ls = lines (resultOutput r)
1818

19-
library_prefix = "Wanted build ways(True): "
20-
executable_prefix = "Wanted build ways(False): "
19+
library_prefix = "Wanted module build ways(library): "
20+
executable_prefix = "Wanted module build ways(executable 'Prof'): "
2121

2222
get_ways prefix = map (drop (length prefix)) (filter (prefix `isPrefixOf`) ls)
2323
library_ways = read_ways (get_ways library_prefix)

0 commit comments

Comments
 (0)