@@ -36,7 +36,7 @@ import Cabal2Nix.Util
36
36
import Stack2nix.Cache (appendCache , cacheHits )
37
37
import Stack2nix.CLI (Args (.. ))
38
38
import Stack2nix.Project
39
- import Stack2nix.Stack (Stack (.. ), Dependency (.. ), Location (.. ))
39
+ import Stack2nix.Stack (Stack (.. ), Dependency (.. ), Location (.. ), PackageFlags , GhcOptions )
40
40
import Stack2nix.External.Resolve
41
41
42
42
import qualified Data.HashMap.Strict as HM
@@ -60,16 +60,17 @@ stackexpr args =
60
60
=<< resolveSnapshot value
61
61
62
62
stack2nix :: Args -> Stack -> IO NExpr
63
- stack2nix args stack@ (Stack resolver compiler _ _) =
64
- do let extraDeps = extraDeps2nix stack
65
- flags = flags2nix stack
63
+ stack2nix args stack@ (Stack resolver compiler pkgs pkgFlags ghcOpts) =
64
+ do let extraDeps = extraDeps2nix pkgs
65
+ flags = flags2nix pkgFlags
66
+ ghcOptions = ghcOptions2nix ghcOpts
66
67
let _f_ = mkSym " f"
67
68
_import_ = mkSym " import"
68
69
_mkForce_ = mkSym " mkForce"
69
70
_isFunction_ = mkSym " isFunction"
70
71
_mapAttrs_ = mkSym " mapAttrs"
71
72
_config_ = mkSym " config"
72
- packages <- packages2nix args stack
73
+ packages <- packages2nix args pkgs
73
74
return . mkNonRecSet $
74
75
[ " extras" $= (" hackage" ==> mkNonRecSet
75
76
([ " packages" $= mkNonRecSet (extraDeps <> packages) ]
@@ -78,7 +79,9 @@ stack2nix args stack@(Stack resolver compiler _ _) =
78
79
++ [ " compiler.nix-name" $= fromString (quoted name)
79
80
| (Just c) <- [compiler], let name = filter (`elem` (([' a' .. ' z' ]++ [' 0' .. ' 9' ]) :: [Char ])) c]))
80
81
, " resolver" $= fromString (quoted resolver)
81
- , " modules" $= mkList [ mkNonRecSet [ " packages" $= mkNonRecSet flags ] ]
82
+ , " modules" $= mkList [
83
+ mkNonRecSet [ " packages" $= mkNonRecSet flags ]
84
+ , mkNonRecSet [ " packages" $= mkNonRecSet ghcOptions ] ]
82
85
] ++ [
83
86
" compiler" $= fromString (quoted c) | (Just c) <- [compiler]
84
87
]
@@ -91,8 +94,8 @@ stack2nix args stack@(Stack resolver compiler _ _) =
91
94
--
92
95
-- { name.revision = hackage.name.version.revisions.default; }
93
96
--
94
- extraDeps2nix :: Stack -> [Binding NExpr ]
95
- extraDeps2nix ( Stack _ _ pkgs _) =
97
+ extraDeps2nix :: [ Dependency ] -> [Binding NExpr ]
98
+ extraDeps2nix pkgs =
96
99
let extraDeps = [(pkgId, info) | PkgIndex pkgId info <- pkgs]
97
100
in [ (quoted (toText pkg)) $= (mkSym " hackage" @. toText pkg @. quoted (toText ver) @. " revisions" @. " default" )
98
101
| (PackageIdentifier pkg ver, Nothing ) <- extraDeps ]
@@ -105,20 +108,24 @@ extraDeps2nix (Stack _ _ pkgs _) =
105
108
toText :: Text a => a -> T. Text
106
109
toText = fromString . show . disp
107
110
108
- -- | Converts 'PackageFlags' into @{ packageName = { flagA = BOOL; flagB = BOOL; }; }@
109
- flags2nix :: Stack -> [Binding NExpr ]
110
- flags2nix ( Stack _ _ _ pkgFlags) =
111
+ -- | Converts 'PackageFlags' into @{ packageName = { flags = { flagA = BOOL; flagB = BOOL; } ; }; }@
112
+ flags2nix :: PackageFlags -> [Binding NExpr ]
113
+ flags2nix pkgFlags =
111
114
[ quoted pkgName $= mkNonRecSet
112
115
[ " flags" $= mkNonRecSet [ quoted flag $= mkBool val
113
116
| (flag, val) <- HM. toList flags
114
117
]
115
118
]
116
119
| (pkgName, flags) <- HM. toList pkgFlags
117
120
]
118
- where
119
- toText :: Text a => a -> T. Text
120
- toText = fromString . show . disp
121
121
122
+ -- | Converts 'GhcOptions' into @{ packageName = { ghcOptions = "..."; }; }@
123
+ ghcOptions2nix :: GhcOptions -> [Binding NExpr ]
124
+ ghcOptions2nix ghcOptions =
125
+ [ quoted pkgName $= mkNonRecSet
126
+ [ " package" $= mkNonRecSet [ " ghcOptions" $= mkStr opts ] ]
127
+ | (pkgName, opts) <- HM. toList ghcOptions
128
+ ]
122
129
123
130
writeDoc :: FilePath -> Doc ann -> IO ()
124
131
writeDoc file doc =
@@ -128,8 +135,8 @@ writeDoc file doc =
128
135
129
136
130
137
-- makeRelativeToCurrentDirectory
131
- packages2nix :: Args -> Stack -> IO [Binding NExpr ]
132
- packages2nix args ( Stack _ _ pkgs _) =
138
+ packages2nix :: Args -> [ Dependency ] -> IO [Binding NExpr ]
139
+ packages2nix args pkgs =
133
140
do cwd <- getCurrentDirectory
134
141
fmap concat . forM pkgs $ \ case
135
142
(LocalPath folder) ->
0 commit comments