@@ -85,7 +85,7 @@ plan2nix args Plan { packages, extras, components, compilerVersion, compilerPack
85
85
-- called from the toplevel project directory.
86
86
cwd <- getCurrentDirectory
87
87
extrasNix <- fmap (mkNonRecSet . concat ) . forM (Map. toList extras) $ \ case
88
- (_name, Just (Package v flags (Just (LocalPath folder)) False )) ->
88
+ (_name, Just (Package v flags (Just (LocalPath folder)) False _ )) ->
89
89
do cabalFiles <- findCabalFiles (argHpackUse args) folder
90
90
forM cabalFiles $ \ cabalFile ->
91
91
let pkg = cabalFilePkgName cabalFile
@@ -95,7 +95,7 @@ plan2nix args Plan { packages, extras, components, compilerVersion, compilerPack
95
95
in do createDirectoryIfMissing True (takeDirectory nixFile)
96
96
writeDoc nixFile . prettyNix =<< cabal2nix True (argDetailLevel args) src cabalFile
97
97
return $ fromString pkg $= mkPath False nix
98
- (_name, Just (Package v flags (Just (DVCS (Git url rev) subdirs)) False )) ->
98
+ (_name, Just (Package v flags (Just (DVCS (Git url rev) subdirs)) False _ )) ->
99
99
fmap concat . forM subdirs $ \ subdir ->
100
100
do cacheHits <- liftIO $ cacheHits (argCacheFile args) url rev subdir
101
101
case cacheHits of
@@ -109,11 +109,14 @@ plan2nix args Plan { packages, extras, components, compilerVersion, compilerPack
109
109
return $ fromString pkg $= mkPath False nix
110
110
_ -> return []
111
111
let flags = concatMap (\ case
112
- (name, Just (Package _v f _hasDescriptionOverride _)) -> flags2nix name f
112
+ (name, Just (Package _v f _hasDescriptionOverride _ _ )) -> flags2nix name f
113
113
_ -> [] ) $ Map. toList extras
114
114
-- Set the `planned` option for all components in the plan.
115
115
planned = map (\ name -> name <> " .planned" $=
116
116
(" lib" @. " mkOverride" @@ mkInt 900 @@ mkBool True )) $ Set. toList components
117
+ preExisting = concatMap (\ case
118
+ (name, Just (Package _ _ _ _ True )) -> [mkStr " rts" , mkStr name]
119
+ _ -> [] ) $ Map. toList packages
117
120
118
121
return $ mkNonRecSet [
119
122
" pkgs" $= (" hackage" ==> mkNonRecSet
@@ -126,7 +129,10 @@ plan2nix args Plan { packages, extras, components, compilerVersion, compilerPack
126
129
])
127
130
, " extras" $= (" hackage" ==> mkNonRecSet [ " packages" $= extrasNix ])
128
131
, " modules" $= mkList [
129
- mkParamset [(" lib" , Nothing )] True ==> mkNonRecSet [ " packages" $= mkNonRecSet flags ]
132
+ mkNonRecSet [
133
+ " nonReinstallablePkgs" $= mkList preExisting
134
+ ]
135
+ , mkParamset [(" lib" , Nothing )] True ==> mkNonRecSet [ " packages" $= mkNonRecSet flags ]
130
136
, mkParamset [(" lib" , Nothing )] True ==> mkNonRecSet [ " packages" $= mkNonRecSet planned ]
131
137
]
132
138
]
@@ -200,6 +206,7 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
200
206
. KeyMap. toList $ KeyMap. mapMaybe (^? _Bool) $ pkg ^. key " flags" . _Object
201
207
, packageSrc = Nothing
202
208
, packageHasDescriptionOverride = isJust (pkg ^? key " pkg-cabal-sha256" )
209
+ , packagePreExisting = False
203
210
}
204
211
205
212
(_, " inplace" ) -> Just $ Package
@@ -208,6 +215,7 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
208
215
. KeyMap. toList $ KeyMap. mapMaybe (^? _Bool) $ pkg ^. key " flags" . _Object
209
216
, packageSrc = Nothing
210
217
, packageHasDescriptionOverride = isJust (pkg ^? key " pkg-cabal-sha256" )
218
+ , packagePreExisting = False
211
219
}
212
220
-- Until we figure out how to force Cabal to reconfigure just about any package
213
221
-- this here might be needed, so that we get the pre-existing packages as well.
@@ -220,6 +228,7 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
220
228
, packageFlags = Map. empty
221
229
, packageSrc = Nothing
222
230
, packageHasDescriptionOverride = isJust (pkg ^? key " pkg-cabal-sha256" ) -- likely this is always false
231
+ , packagePreExisting = True
223
232
}
224
233
_ -> Nothing
225
234
0 commit comments