@@ -30,9 +30,7 @@ import Stack.Runners (loadCompilerVer
30
30
withBuildConfig )
31
31
import Stack.Types.BuildPlan (PackageLocation (.. ),
32
32
Repo (.. ))
33
- import Stack.Types.Compiler (CVType (.. ),
34
- CompilerVersion ,
35
- getGhcVersion )
33
+ import Stack.Types.Compiler (getGhcVersion )
36
34
import Stack.Types.Config
37
35
import Stack.Types.Config.Build (BuildCommand (.. ))
38
36
import Stack.Types.Nix
@@ -46,6 +44,7 @@ import Stack.Types.PackageIdentifier (PackageIdentifi
46
44
packageIdentifierString )
47
45
import Stack.Types.PackageName (PackageName )
48
46
import Stack.Types.Runner
47
+ import Stack.Types.Version (Version )
49
48
import Stack2nix.External.Cabal2nix (cabal2nix )
50
49
import Stack2nix.Hackage (loadHackageDB )
51
50
import Stack2nix.Render (render )
@@ -66,20 +65,20 @@ data PackageRef
66
65
| NonHackagePackage PackageIdentifier (PackageLocation FilePath )
67
66
deriving (Eq , Show )
68
67
69
- genNixFile :: Args -> FilePath -> Maybe String -> Maybe String -> DB. HackageDB -> PackageRef -> IO (Either Doc Derivation )
70
- genNixFile args baseDir uri argRev hackageDB pkgRef = do
68
+ genNixFile :: Args -> Version -> FilePath -> Maybe String -> Maybe String -> DB. HackageDB -> PackageRef -> IO (Either Doc Derivation )
69
+ genNixFile args ghcVersion baseDir uri argRev hackageDB pkgRef = do
71
70
cwd <- getCurrentDirectory
72
71
case pkgRef of
73
72
NonHackagePackage _ident PLArchive {} -> error " genNixFile: No support for archive package locations"
74
73
HackagePackage (PackageIdentifierRevision pkg _) ->
75
- cabal2nix args (" cabal://" <> packageIdentifierString pkg) Nothing Nothing hackageDB
74
+ cabal2nix args ghcVersion (" cabal://" <> packageIdentifierString pkg) Nothing Nothing hackageDB
76
75
NonHackagePackage _ident (PLRepo repo) ->
77
- cabal2nix args (unpack $ repoUrl repo) (Just $ repoCommit repo) (Just (repoSubdirs repo)) hackageDB
76
+ cabal2nix args ghcVersion (unpack $ repoUrl repo) (Just $ repoCommit repo) (Just (repoSubdirs repo)) hackageDB
78
77
NonHackagePackage _ident (PLFilePath path) -> do
79
78
relPath <- makeRelativeToCurrentDirectory path
80
79
projRoot <- canonicalizePath $ cwd </> baseDir
81
80
let defDir = baseDir </> makeRelative projRoot path
82
- cabal2nix args (fromMaybe defDir uri) (pack <$> argRev) (const relPath <$> uri) hackageDB
81
+ cabal2nix args ghcVersion (fromMaybe defDir uri) (pack <$> argRev) (const relPath <$> uri) hackageDB
83
82
84
83
-- TODO: remove once we use flags, options
85
84
sourceMapToPackages :: Map PackageName PackageSource -> [PackageRef ]
@@ -99,9 +98,9 @@ planAndGenerate
99
98
-> FilePath
100
99
-> Maybe String
101
100
-> Args
102
- -> String
101
+ -> Version
103
102
-> RIO env ()
104
- planAndGenerate boptsCli baseDir remoteUri args@ Args {.. } ghcnixversion = do
103
+ planAndGenerate boptsCli baseDir remoteUri args@ Args {.. } ghcVersion = do
105
104
(_targets, _mbp, _locals, _extraToBuild, sourceMap) <- loadSourceMapFull
106
105
NeedTargets
107
106
boptsCli
@@ -114,11 +113,11 @@ planAndGenerate boptsCli baseDir remoteUri args@Args {..} ghcnixversion = do
114
113
argThreads
115
114
(\ p ->
116
115
fmap (addGhcOptions buildConf p)
117
- <$> genNixFile args baseDir remoteUri argRev hackageDB p
116
+ <$> genNixFile args ghcVersion baseDir remoteUri argRev hackageDB p
118
117
)
119
118
pkgs
120
119
let locals = map (\ l -> show (packageName (lpPackage l))) _locals
121
- liftIO $ render drvs args locals ghcnixversion
120
+ liftIO . render drvs args locals $ nixVersion ghcVersion
122
121
123
122
-- | Add ghc-options declared in stack.yaml to the nix derivation for a package
124
123
-- by adding to the configureFlags attribute of the derivation
@@ -150,18 +149,22 @@ runPlan baseDir remoteUri args@Args{..} = do
150
149
let stackFile = baseDir </> argStackYaml
151
150
152
151
ghcVersion <- getGhcVersionIO globals stackFile
153
- let ghcnixversion = filter (/= ' .' ) $ show (getGhcVersion ghcVersion)
154
- ensureExecutable (" haskell.compiler.ghc" ++ ghcnixversion )
155
- withBuildConfig globals $ planAndGenerate buildOpts baseDir remoteUri args ghcnixversion
152
+ -- let ghcnixversion = filter (/= '.') $ show (getGhcVersion ghcVersion)
153
+ ensureExecutable (" haskell.compiler.ghc" ++ nixVersion ghcVersion )
154
+ withBuildConfig globals $ planAndGenerate buildOpts baseDir remoteUri args ghcVersion
156
155
157
- getGhcVersionIO :: GlobalOpts -> FilePath -> IO (CompilerVersion 'CVWanted)
156
+ nixVersion :: Version -> String
157
+ nixVersion =
158
+ filter (/= ' .' ) . show
159
+
160
+ getGhcVersionIO :: GlobalOpts -> FilePath -> IO Version
158
161
getGhcVersionIO go stackFile = do
159
162
cp <- canonicalizePath stackFile
160
163
fp <- parseAbsFile cp
161
164
lc <- withRunner LevelError True False ColorAuto Nothing False $ \ runner ->
162
165
-- https://www.fpcomplete.com/blog/2017/07/the-rio-monad
163
166
runRIO runner $ loadConfig mempty Nothing (SYLOverride fp)
164
- loadCompilerVersion go lc
167
+ getGhcVersion <$> loadCompilerVersion go lc
165
168
166
169
globalOpts :: FilePath -> FilePath -> Args -> GlobalOpts
167
170
globalOpts currentDir stackRoot Args {.. } =
0 commit comments