Skip to content

Commit 85b8c8c

Browse files
committed
feat: add build compiler option to cabal-install
1 parent 7d99576 commit 85b8c8c

File tree

5 files changed

+40
-5
lines changed

5 files changed

+40
-5
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,9 @@ instance Semigroup SavedConfig where
573573
combineMonoid savedConfigureExFlags configAllowOlder
574574
, configWriteGhcEnvironmentFilesPolicy =
575575
combine configWriteGhcEnvironmentFilesPolicy
576+
, configBuildHcFlavor = combine configBuildHcFlavor
577+
, configBuildHcPath = combine configBuildHcPath
578+
, configBuildHcPkg = combine configBuildHcPkg
576579
}
577580
where
578581
combine = combine' savedConfigureExFlags

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,10 @@ convertLegacyAllPackageFlags
704704
convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags projectFlags projectConfigMultiRepl =
705705
ProjectConfigShared{..}
706706
where
707+
projectConfigPackageDBs = (fmap . fmap) (interpretPackageDB Nothing) projectConfigPackageDBs_
708+
projectConfigHookHashes = mempty -- :: Map FilePath HookAccept
709+
projectConfigDistDir = fmap getSymbolicPath projectConfigAbsoluteDistDir
710+
707711
GlobalFlags
708712
{ globalConfigFile = projectConfigConfigFile
709713
, globalRemoteRepos = projectConfigRemoteRepos
@@ -713,8 +717,6 @@ convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags
713717
, globalStoreDir = projectConfigStoreDir
714718
} = globalFlags
715719

716-
projectConfigPackageDBs = (fmap . fmap) (interpretPackageDB Nothing) projectConfigPackageDBs_
717-
projectConfigHookHashes = mempty -- :: Map FilePath HookAccept
718720
ConfigFlags
719721
{ configCommonFlags = commonFlags
720722
, configHcFlavor = projectConfigHcFlavor
@@ -730,8 +732,6 @@ convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags
730732
{ setupDistPref = projectConfigAbsoluteDistDir
731733
} = commonFlags
732734

733-
projectConfigDistDir = fmap getSymbolicPath projectConfigAbsoluteDistDir
734-
735735
ConfigExFlags
736736
{ configCabalVersion = projectConfigCabalVersion
737737
, configExConstraints = projectConfigConstraints
@@ -741,6 +741,9 @@ convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags
741741
, configAllowNewer = projectConfigAllowNewer
742742
, configWriteGhcEnvironmentFilesPolicy =
743743
projectConfigWriteGhcEnvironmentFilesPolicy
744+
, configBuildHcFlavor = projectConfigBuildHcFlavor
745+
, configBuildHcPath = projectConfigBuildHcPath
746+
, configBuildHcPkg = projectConfigBuildHcPkg
744747
} = configExFlags
745748

746749
InstallFlags
@@ -1021,6 +1024,9 @@ convertToLegacySharedConfig
10211024
, configAllowNewer = projectConfigAllowNewer
10221025
, configWriteGhcEnvironmentFilesPolicy =
10231026
projectConfigWriteGhcEnvironmentFilesPolicy
1027+
, configBuildHcFlavor = projectConfigBuildHcFlavor
1028+
, configBuildHcPath = projectConfigBuildHcPath
1029+
, configBuildHcPkg = projectConfigBuildHcPkg
10241030
}
10251031

10261032
installFlags =

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,9 @@ data ProjectConfigShared = ProjectConfigShared
192192
, projectConfigHcFlavor :: Flag CompilerFlavor
193193
, projectConfigHcPath :: Flag FilePath
194194
, projectConfigHcPkg :: Flag FilePath
195+
, projectConfigBuildHcFlavor :: Flag CompilerFlavor
196+
, projectConfigBuildHcPath :: Flag FilePath
197+
, projectConfigBuildHcPkg :: Flag FilePath
195198
, projectConfigHaddockIndex :: Flag PathTemplate
196199
, -- Only makes sense for manual mode, not --local mode
197200
-- too much control!

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ import Distribution.ReadE
162162
)
163163
import Distribution.Simple.Command hiding (boolOpt, boolOpt')
164164
import qualified Distribution.Simple.Command as Command
165-
import Distribution.Simple.Compiler (Compiler, PackageDB, PackageDBStack)
165+
import Distribution.Simple.Compiler (Compiler, CompilerFlavor (..), PackageDB, PackageDBStack)
166166
import Distribution.Simple.Configure
167167
( computeEffectiveProfiling
168168
, configCompilerAuxEx
@@ -920,6 +920,9 @@ data ConfigExFlags = ConfigExFlags
920920
, configAllowOlder :: Maybe AllowOlder
921921
, configWriteGhcEnvironmentFilesPolicy
922922
:: Flag WriteGhcEnvironmentFilesPolicy
923+
, configBuildHcFlavor :: Flag CompilerFlavor
924+
, configBuildHcPath :: Flag FilePath
925+
, configBuildHcPkg :: Flag FilePath
923926
}
924927
deriving (Eq, Show, Generic)
925928

@@ -1047,6 +1050,20 @@ configureExOptions _showOrParseArgs src =
10471050
writeGhcEnvironmentFilesPolicyParser
10481051
writeGhcEnvironmentFilesPolicyPrinter
10491052
)
1053+
, option
1054+
"W"
1055+
["with-build-compiler", "with-build-hc"]
1056+
"give the path to the compiler for the build stage"
1057+
configBuildHcPath
1058+
(\v flags -> flags{configBuildHcPath = v})
1059+
(reqArgFlag "PATH")
1060+
, option
1061+
""
1062+
["with-build-hc-pkg"]
1063+
"give the path to the package tool for the build stage"
1064+
configBuildHcPkg
1065+
(\v flags -> flags{configBuildHcPkg = v})
1066+
(reqArgFlag "PATH")
10501067
]
10511068

10521069
writeGhcEnvironmentFilesPolicyParser :: ReadE (Flag WriteGhcEnvironmentFilesPolicy)

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,9 @@ instance Arbitrary ProjectConfigShared where
613613
projectConfigHcFlavor <- arbitrary
614614
projectConfigHcPath <- arbitraryFlag arbitraryShortToken
615615
projectConfigHcPkg <- arbitraryFlag arbitraryShortToken
616+
projectConfigBuildHcFlavor <- arbitrary
617+
projectConfigBuildHcPath <- arbitraryFlag arbitraryShortToken
618+
projectConfigBuildHcPkg <- arbitraryFlag arbitraryShortToken
616619
projectConfigHaddockIndex <- arbitrary
617620
projectConfigInstallDirs <- fixInstallDirs <$> arbitrary
618621
projectConfigPackageDBs <- shortListOf 2 arbitrary
@@ -660,6 +663,9 @@ instance Arbitrary ProjectConfigShared where
660663
<*> shrinker projectConfigHcFlavor
661664
<*> shrinkerAla (fmap NonEmpty) projectConfigHcPath
662665
<*> shrinkerAla (fmap NonEmpty) projectConfigHcPkg
666+
<*> shrinker projectConfigBuildHcFlavor
667+
<*> shrinkerAla (fmap NonEmpty) projectConfigBuildHcPath
668+
<*> shrinkerAla (fmap NonEmpty) projectConfigBuildHcPkg
663669
<*> shrinker projectConfigHaddockIndex
664670
<*> shrinker projectConfigInstallDirs
665671
<*> shrinker projectConfigPackageDBs

0 commit comments

Comments
 (0)