Skip to content
Snippets Groups Projects
Unverified Commit f4d696d9 authored by mergify[bot]'s avatar mergify[bot] Committed by GitHub
Browse files

Merge pull request #10422 from haskell/mergify/bp/3.14/pr-10419

Cabal: Take into account compilerBuildWay when computing final library ways (backport #10419)
parents 3ade64cc 7c25fcb3
No related branches found
No related tags found
No related merge requests found
...@@ -12,7 +12,7 @@ import Distribution.Simple.Flag (Flag) ...@@ -12,7 +12,7 @@ import Distribution.Simple.Flag (Flag)
import Distribution.Simple.GHC.Build.ExtraSources import Distribution.Simple.GHC.Build.ExtraSources
import Distribution.Simple.GHC.Build.Link import Distribution.Simple.GHC.Build.Link
import Distribution.Simple.GHC.Build.Modules import Distribution.Simple.GHC.Build.Modules
import Distribution.Simple.GHC.Build.Utils (isHaskell) import Distribution.Simple.GHC.Build.Utils (compilerBuildWay, isHaskell, withDynFLib)
import Distribution.Simple.LocalBuildInfo import Distribution.Simple.LocalBuildInfo
import Distribution.Simple.Program.Builtin (ghcProgram) import Distribution.Simple.Program.Builtin (ghcProgram)
import Distribution.Simple.Program.Db (requireProgram) import Distribution.Simple.Program.Db (requireProgram)
...@@ -73,6 +73,7 @@ build numJobs pkg_descr pbci = do ...@@ -73,6 +73,7 @@ build numJobs pkg_descr pbci = do
verbosity = buildVerbosity pbci verbosity = buildVerbosity pbci
isLib = buildIsLib pbci isLib = buildIsLib pbci
lbi = localBuildInfo pbci lbi = localBuildInfo pbci
bi = buildBI pbci
clbi = buildCLBI pbci clbi = buildCLBI pbci
isIndef = componentIsIndefinite clbi isIndef = componentIsIndefinite clbi
mbWorkDir = mbWorkDirLBI lbi mbWorkDir = mbWorkDirLBI lbi
...@@ -111,9 +112,25 @@ build numJobs pkg_descr pbci = do ...@@ -111,9 +112,25 @@ build numJobs pkg_descr pbci = do
(ghcProg, _) <- liftIO $ requireProgram verbosity ghcProgram (withPrograms lbi) (ghcProg, _) <- liftIO $ requireProgram verbosity ghcProgram (withPrograms lbi)
let wantedWays@(wantedLibWays, _, wantedExeWay) = buildWays lbi -- Ways which are wanted from configuration flags
let wantedWays@(wantedLibWays, wantedFLibWay, wantedExeWay) = buildWays lbi
liftIO $ info verbosity ("Wanted build ways(" ++ show isLib ++ "): " ++ show (if isLib then wantedLibWays isIndef else [wantedExeWay]))
-- Ways which are needed due to the compiler configuration
let doingTH = usesTemplateHaskellOrQQ bi
defaultGhcWay = compilerBuildWay (buildCompiler pbci)
wantedModBuildWays = case buildComponent pbci of
CLib _ -> wantedLibWays isIndef
CFLib fl -> [wantedFLibWay (withDynFLib fl)]
CExe _ -> [wantedExeWay]
CTest _ -> [wantedExeWay]
CBench _ -> [wantedExeWay]
finalModBuildWays =
wantedModBuildWays
++ [defaultGhcWay | doingTH && defaultGhcWay `notElem` wantedModBuildWays]
compNameStr = showComponentName $ componentName $ buildComponent pbci
liftIO $ info verbosity ("Wanted module build ways(" ++ compNameStr ++ "): " ++ show wantedModBuildWays)
liftIO $ info verbosity ("Final module build ways(" ++ compNameStr ++ "): " ++ show finalModBuildWays)
-- We need a separate build and link phase, and C sources must be compiled -- We need a separate build and link phase, and C sources must be compiled
-- after Haskell modules, because C sources may depend on stub headers -- after Haskell modules, because C sources may depend on stub headers
-- generated from compiling Haskell modules (#842, #3294). -- generated from compiling Haskell modules (#842, #3294).
...@@ -127,7 +144,7 @@ build numJobs pkg_descr pbci = do ...@@ -127,7 +144,7 @@ build numJobs pkg_descr pbci = do
| otherwise -> | otherwise ->
(Nothing, Just mainFile) (Nothing, Just mainFile)
Nothing -> (Nothing, Nothing) Nothing -> (Nothing, Nothing)
buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir (wantedLibWays isIndef) pbci buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir finalModBuildWays pbci
extraSources <- buildAllExtraSources nonHsMainFile ghcProg buildTargetDir wantedWays pbci extraSources <- buildAllExtraSources nonHsMainFile ghcProg buildTargetDir wantedWays pbci
linkOrLoadComponent linkOrLoadComponent
ghcProg ghcProg
......
# Revision history for p
## 0.1.0.0 -- YYYY-mm-dd
* First version. Released on an unsuspecting world.
cabal-version: 3.12
name: p
version: 0.1.0.0
license: NONE
author: Matthew Pickering
maintainer: matthewtpickering@gmail.com
build-type: Simple
extra-doc-files: CHANGELOG.md
common warnings
ghc-options: -Wall
library
import: warnings
exposed-modules: MyLib
build-depends: base
hs-source-dirs: src
default-language: Haskell2010
module MyLib (someFunc) where
someFunc :: IO ()
someFunc = putStrLn "someFunc"
# Revision history for q
## 0.1.0.0 -- YYYY-mm-dd
* First version. Released on an unsuspecting world.
{-# LANGUAGE TemplateHaskell #-}
module Main where
import MyLib
main :: IO ()
main = someFunc
cabal-version: 3.12
name: q
version: 0.1.0.0
license: NONE
author: Matthew Pickering
maintainer: matthewtpickering@gmail.com
build-type: Simple
extra-doc-files: CHANGELOG.md
common warnings
ghc-options: -Wall
executable q
import: warnings
main-is: Main.hs
build-depends: p, base
hs-source-dirs: app
ghc-options: -dynamic-too
default-language: Haskell2010
import Test.Cabal.Prelude
opts = ["--enable-shared", "--enable-library-vanilla", "--enable-library-profiling"]
-- See #10418
main = setupTest $ recordMode DoNotRecord $ withPackageDb $ do
skipIfNoSharedLibraries
skipIfNoProfiledLibraries
withDirectory "p" $ setup_install opts
withDirectory "q" $ setup_install opts
...@@ -16,8 +16,8 @@ main = do ...@@ -16,8 +16,8 @@ main = do
let ls = lines (resultOutput r) let ls = lines (resultOutput r)
library_prefix = "Wanted build ways(True): " library_prefix = "Wanted module build ways(library): "
executable_prefix = "Wanted build ways(False): " executable_prefix = "Wanted module build ways(executable 'Prof'): "
get_ways prefix = map (drop (length prefix)) (filter (prefix `isPrefixOf`) ls) get_ways prefix = map (drop (length prefix)) (filter (prefix `isPrefixOf`) ls)
library_ways = read_ways (get_ways library_prefix) library_ways = read_ways (get_ways library_prefix)
......
synopsis: Fix build ways for modules in executables
packages: Cabal
prs: #10419
issues: #10418
significance: significant
description: {
- Modules belonging to executables were being built in too many ways. For instance, if you
had configured to build profiled library files then your executable modules would also
be built profiled. Which was a regression in behaviour since `Cabal-3.12`.
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment