Skip to content

Commit 085bbd3

Browse files
committed
feat(cabal-install): add build compiler option
1 parent d4252a5 commit 085bbd3

File tree

7 files changed

+64
-1
lines changed

7 files changed

+64
-1
lines changed

cabal-install/src/Distribution/Client/Config.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,10 @@ instance Semigroup SavedConfig where
575575
combineMonoid savedConfigureExFlags configAllowOlder
576576
, configWriteGhcEnvironmentFilesPolicy =
577577
combine configWriteGhcEnvironmentFilesPolicy
578+
, configBuildHcFlavor = combine configBuildHcFlavor
579+
, configBuildHcPath = combine configBuildHcPath
580+
, configBuildHcPkg = combine configBuildHcPkg
581+
, configBuildPackageDBs = lastNonEmpty configBuildPackageDBs
578582
}
579583
where
580584
combine = combine' savedConfigureExFlags

cabal-install/src/Distribution/Client/ProjectConfig/FieldGrammar.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ projectConfigToolchainFieldGrammar =
119119
<*> optionalFieldDefAla "with-compiler" (alaFlag FilePathNT) L.projectConfigHcPath mempty
120120
<*> optionalFieldDefAla "with-hc-pkg" (alaFlag FilePathNT) L.projectConfigHcPkg mempty
121121
<*> monoidalFieldAla "package-dbs" (alaList' CommaFSep PackageDBNT) L.projectConfigPackageDBs
122+
<*> optionalFieldDef "build-compiler" L.projectConfigBuildHcFlavor mempty
123+
<*> optionalFieldDefAla "with-build-compiler" (alaFlag FilePathNT) L.projectConfigBuildHcPath mempty
124+
<*> optionalFieldDefAla "with-build-hc-pkg" (alaFlag FilePathNT) L.projectConfigBuildHcPkg mempty
125+
<*> monoidalFieldAla "build-package-dbs" (alaList' CommaFSep PackageDBNT) L.projectConfigBuildPackageDBs
122126

123127
packageConfigFieldGrammar :: [String] -> ParsecFieldGrammar' PackageConfig
124128
packageConfigFieldGrammar knownPrograms =

cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,7 @@ convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags
718718

719719
projectConfigToolchain = ProjectConfigToolchain{..}
720720
projectConfigPackageDBs = (fmap . fmap) (interpretPackageDB Nothing) projectConfigPackageDBs_
721+
projectConfigBuildPackageDBs = (fmap . fmap) (interpretPackageDB Nothing) projectConfigBuildPackageDBs_
721722

722723
ConfigFlags
723724
{ configCommonFlags = commonFlags
@@ -743,6 +744,10 @@ convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags
743744
, configAllowNewer = projectConfigAllowNewer
744745
, configWriteGhcEnvironmentFilesPolicy =
745746
projectConfigWriteGhcEnvironmentFilesPolicy
747+
, configBuildHcFlavor = projectConfigBuildHcFlavor
748+
, configBuildHcPath = projectConfigBuildHcPath
749+
, configBuildHcPkg = projectConfigBuildHcPkg
750+
, configBuildPackageDBs = projectConfigBuildPackageDBs_
746751
} = configExFlags
747752

748753
InstallFlags
@@ -1021,6 +1026,10 @@ convertToLegacySharedConfig
10211026
, configAllowNewer = projectConfigAllowNewer
10221027
, configWriteGhcEnvironmentFilesPolicy =
10231028
projectConfigWriteGhcEnvironmentFilesPolicy
1029+
, configBuildHcFlavor = projectConfigBuildHcFlavor
1030+
, configBuildHcPath = projectConfigBuildHcPath
1031+
, configBuildHcPkg = projectConfigBuildHcPkg
1032+
, configBuildPackageDBs = fmap (fmap (fmap unsafeMakeSymbolicPath)) projectConfigBuildPackageDBs
10241033
}
10251034

10261035
installFlags =

cabal-install/src/Distribution/Client/ProjectConfig/Lens.hs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,22 @@ projectConfigPackageDBs :: Lens' ProjectConfigToolchain [Maybe PackageDBCWD]
216216
projectConfigPackageDBs f s = fmap (\x -> s{T.projectConfigPackageDBs = x}) (f (T.projectConfigPackageDBs s))
217217
{-# INLINEABLE projectConfigPackageDBs #-}
218218

219+
projectConfigBuildHcFlavor :: Lens' ProjectConfigToolchain (Flag CompilerFlavor)
220+
projectConfigBuildHcFlavor f s = fmap (\x -> s{T.projectConfigBuildHcFlavor = x}) (f (T.projectConfigBuildHcFlavor s))
221+
{-# INLINEABLE projectConfigBuildHcFlavor #-}
222+
223+
projectConfigBuildHcPath :: Lens' ProjectConfigToolchain (Flag FilePath)
224+
projectConfigBuildHcPath f s = fmap (\x -> s{T.projectConfigBuildHcPath = x}) (f (T.projectConfigBuildHcPath s))
225+
{-# INLINEABLE projectConfigBuildHcPath #-}
226+
227+
projectConfigBuildHcPkg :: Lens' ProjectConfigToolchain (Flag FilePath)
228+
projectConfigBuildHcPkg f s = fmap (\x -> s{T.projectConfigBuildHcPkg = x}) (f (T.projectConfigBuildHcPkg s))
229+
{-# INLINEABLE projectConfigBuildHcPkg #-}
230+
231+
projectConfigBuildPackageDBs :: Lens' ProjectConfigToolchain [Maybe PackageDBCWD]
232+
projectConfigBuildPackageDBs f s = fmap (\x -> s{T.projectConfigBuildPackageDBs = x}) (f (T.projectConfigBuildPackageDBs s))
233+
{-# INLINEABLE projectConfigBuildPackageDBs #-}
234+
219235
projectConfigHaddockIndex :: Lens' ProjectConfigShared (Flag PathTemplate)
220236
projectConfigHaddockIndex f s = fmap (\x -> s{T.projectConfigHaddockIndex = x}) (f (T.projectConfigHaddockIndex s))
221237
{-# INLINEABLE projectConfigHaddockIndex #-}

cabal-install/src/Distribution/Client/ProjectConfig/Types.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,10 @@ data ProjectConfigToolchain = ProjectConfigToolchain
244244
, projectConfigHcPath :: Flag FilePath
245245
, projectConfigHcPkg :: Flag FilePath
246246
, projectConfigPackageDBs :: [Maybe PackageDBCWD]
247+
, projectConfigBuildHcFlavor :: Flag CompilerFlavor
248+
, projectConfigBuildHcPath :: Flag FilePath
249+
, projectConfigBuildHcPkg :: Flag FilePath
250+
, projectConfigBuildPackageDBs :: [Maybe PackageDBCWD]
247251
}
248252
deriving (Eq, Show, Generic)
249253

cabal-install/src/Distribution/Client/Setup.hs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ import Distribution.ReadE
163163
)
164164
import Distribution.Simple.Command hiding (boolOpt, boolOpt')
165165
import qualified Distribution.Simple.Command as Command
166-
import Distribution.Simple.Compiler (Compiler, PackageDB, PackageDBStack)
166+
import Distribution.Simple.Compiler (Compiler, CompilerFlavor (..), PackageDB, PackageDBStack)
167167
import Distribution.Simple.Configure
168168
( computeEffectiveProfiling
169169
, configCompilerAuxEx
@@ -923,6 +923,10 @@ data ConfigExFlags = ConfigExFlags
923923
, configAllowOlder :: Maybe AllowOlder
924924
, configWriteGhcEnvironmentFilesPolicy
925925
:: Flag WriteGhcEnvironmentFilesPolicy
926+
, configBuildHcFlavor :: Flag CompilerFlavor
927+
, configBuildHcPath :: Flag FilePath
928+
, configBuildHcPkg :: Flag FilePath
929+
, configBuildPackageDBs :: [Maybe PackageDB]
926930
}
927931
deriving (Eq, Show, Generic)
928932

@@ -1050,6 +1054,20 @@ configureExOptions _showOrParseArgs src =
10501054
writeGhcEnvironmentFilesPolicyParser
10511055
writeGhcEnvironmentFilesPolicyPrinter
10521056
)
1057+
, option
1058+
"W"
1059+
["with-build-compiler", "with-build-hc"]
1060+
"give the path to the compiler for the build stage"
1061+
configBuildHcPath
1062+
(\v flags -> flags{configBuildHcPath = v})
1063+
(reqArgFlag "PATH")
1064+
, option
1065+
""
1066+
["with-build-hc-pkg"]
1067+
"give the path to the package tool for the build stage"
1068+
configBuildHcPkg
1069+
(\v flags -> flags{configBuildHcPkg = v})
1070+
(reqArgFlag "PATH")
10531071
]
10541072

10551073
writeGhcEnvironmentFilesPolicyParser :: ReadE (Flag WriteGhcEnvironmentFilesPolicy)

cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,10 @@ instance Arbitrary ProjectConfigToolchain where
606606
projectConfigHcPath <- arbitraryFlag arbitraryShortToken
607607
projectConfigHcPkg <- arbitraryFlag arbitraryShortToken
608608
projectConfigPackageDBs <- shortListOf 2 arbitrary
609+
projectConfigBuildHcFlavor <- arbitrary
610+
projectConfigBuildHcPath <- arbitraryFlag arbitraryShortToken
611+
projectConfigBuildHcPkg <- arbitraryFlag arbitraryShortToken
612+
projectConfigBuildPackageDBs <- shortListOf 2 arbitrary
609613
return ProjectConfigToolchain{..}
610614

611615
shrink ProjectConfigToolchain{..} =
@@ -615,6 +619,10 @@ instance Arbitrary ProjectConfigToolchain where
615619
<*> shrinkerAla (fmap NonEmpty) projectConfigHcPath
616620
<*> shrinkerAla (fmap NonEmpty) projectConfigHcPkg
617621
<*> shrinker projectConfigPackageDBs
622+
<*> shrinker projectConfigBuildHcFlavor
623+
<*> shrinkerAla (fmap NonEmpty) projectConfigBuildHcPath
624+
<*> shrinkerAla (fmap NonEmpty) projectConfigBuildHcPkg
625+
<*> shrinker projectConfigBuildPackageDBs
618626

619627
instance Arbitrary ProjectConfigShared where
620628
arbitrary = do

0 commit comments

Comments
 (0)