11module Language.PureScript.Make
2- (
3- -- * Make API
4- rebuildModule
2+ ( make
3+ , make_
4+ , rebuildModule
55 , rebuildModule'
6- , make
7- , make'
86 , inferForeignModules
97 , module Monad
108 , module Actions
@@ -14,7 +12,7 @@ import Prelude
1412
1513import Control.Concurrent.Lifted as C
1614import Control.Exception.Base (onException )
17- import Control.Monad (foldM , unless , when )
15+ import Control.Monad (foldM , unless , when , void , foldM , unless , when )
1816import Control.Monad.Error.Class (MonadError (.. ))
1917import Control.Monad.IO.Class (MonadIO (.. ))
2018import Control.Monad.Supply (evalSupplyT , runSupply , runSupplyT )
@@ -131,57 +129,53 @@ rebuildModuleWithIndex MakeActions{..} exEnv externs m@(Module _ _ moduleName _
131129 Right d -> d
132130
133131 evalSupplyT nextVar'' $ codegen renamed docs exts
134- -- evaluate $ trace ("\n===== externs: " <> show moduleName <> ":\n" <> show exts) ()
135132 return exts
136133
134+ data MakeOptions = MakeOptions
135+ { moCollectAllExterns :: Bool
136+ }
137+
137138-- | Compiles in "make" mode, compiling each module separately to a @.js@ file
138139-- and an @externs.cbor@ file.
139140--
140141-- If timestamps or hashes have not changed, existing externs files can be used
141142-- to provide upstream modules' types without having to typecheck those modules
142143-- again.
143144--
144- -- This version will collect an return externs only of modules that were used
145- -- during the build.
145+ -- It collects and returns externs for all modules passed.
146146make :: forall m . (MonadBaseControl IO m , MonadError MultipleErrors m , MonadWriter MultipleErrors m )
147147 => MakeActions m
148148 -> [CST. PartialResult Module ]
149149 -> m [ExternsFile ]
150- make ma ms = makeImp ma ms False
150+ make = make' ( MakeOptions {moCollectAllExterns = True })
151151
152152-- | Compiles in "make" mode, compiling each module separately to a @.js@ file
153153-- and an @externs.cbor@ file.
154154--
155- -- If timestamps or hashes have not changed, existing externs files can be used
156- -- to provide upstream modules' types without having to typecheck those modules
157- -- again.
158- --
159- -- This version will collect an return all externs of all passed modules.
160- make' :: forall m . (MonadBaseControl IO m , MonadError MultipleErrors m , MonadWriter MultipleErrors m )
155+ -- This version of make returns nothing.
156+ make_ :: forall m . (MonadBaseControl IO m , MonadError MultipleErrors m , MonadWriter MultipleErrors m )
161157 => MakeActions m
162158 -> [CST. PartialResult Module ]
163- -> m [ ExternsFile ]
164- make' ma ms = makeImp ma ms True
159+ -> m ()
160+ make_ ma ms = void $ make' ( MakeOptions {moCollectAllExterns = False }) ma ms
165161
166- makeImp :: forall m . (MonadBaseControl IO m , MonadError MultipleErrors m , MonadWriter MultipleErrors m )
167- => MakeActions m
162+ make' :: forall m . (MonadBaseControl IO m , MonadError MultipleErrors m , MonadWriter MultipleErrors m )
163+ => MakeOptions
164+ -> MakeActions m
168165 -> [CST. PartialResult Module ]
169- -> Bool
170166 -> m [ExternsFile ]
171- makeImp ma@ MakeActions {.. } ms collectAll = do
167+ make' MakeOptions { .. } ma@ MakeActions {.. } ms = do
172168 checkModuleNames
173169 cacheDb <- readCacheDb
174170
175171 (sorted, graph) <- sortModules Transitive (moduleSignature . CST. resPartial) ms
176-
177- (buildPlan, newCacheDb) <- BuildPlan. construct ma cacheDb (sorted, graph) collectAll
172+ let opts = BuildPlan. Options {optPreloadAllExterns = moCollectAllExterns}
173+ (buildPlan, newCacheDb) <- BuildPlan. construct opts ma cacheDb (sorted, graph)
178174
179175 let sortedModuleNames = getModuleName . CST. resPartial <$> sorted
180176 let toBeRebuilt = filter (BuildPlan. needsRebuild buildPlan . getModuleName . CST. resPartial) sorted
181177 let totalModuleCount = length toBeRebuilt
182178 for_ toBeRebuilt $ \ m -> fork $ do
183- -- evaluate $ trace ("resPartial:" <> show (CST.resPartial $ m)) ()
184- -- evaluate $ trace ("resFull:" <> show (CST.resFull $ m)) ()
185179 let moduleName = getModuleName . CST. resPartial $ m
186180 let deps = fromMaybe (internalError " make: module not found in dependency graph." ) (lookup moduleName graph)
187181 buildModule buildPlan moduleName totalModuleCount
@@ -225,10 +219,11 @@ makeImp ma@MakeActions{..} ms collectAll = do
225219 fromMaybe (internalError $ " make: module not found in results: " <> T. unpack name)
226220 $ M. lookup mn successes
227221
228- if collectAll then
229- pure $ map lookupResult sortedModuleNames
230- else
231- pure $ mapMaybe (flip M. lookup successes) sortedModuleNames
222+ pure $
223+ if moCollectAllExterns then
224+ map lookupResult sortedModuleNames
225+ else
226+ mapMaybe (flip M. lookup successes) sortedModuleNames
232227
233228 where
234229 checkModuleNames :: m ()
@@ -275,12 +270,9 @@ makeImp ma@MakeActions{..} ms collectAll = do
275270 case mexterns of
276271 Just (_, depsDiffExterns) -> do
277272 let externs = fst <$> depsDiffExterns
278- -- evaluate $ trace ("diff:" <> show moduleName <> ":" <> show (snd <$> depsDiffExterns)) ()
279- -- evaluate $ trace ("check diff:" <> show moduleName <> ":" <> show (isNothing $ traverse snd depsDiffExterns)) ()
280273 let prevResult = BuildPlan. getPrevResult buildPlan moduleName
281274 let depsDiffs = traverse snd depsDiffExterns
282275 let maySkipBuild moduleIndex
283- -- Just exts <- BuildPlan.getPrevResult buildPlan moduleName
284276 -- we may skip built only for up-to-date modules
285277 | Just (True , exts) <- prevResult
286278 -- check if no dep's externs have changed
@@ -291,7 +283,6 @@ makeImp ma@MakeActions{..} ms collectAll = do
291283 -- compilation results as actual. If it fails to update timestamp
292284 -- on any of exiting codegen targets, it will run the build process.
293285 updated <- updateOutputTimestamp moduleName
294- -- evaluate $ trace ("updated:" <> show updated <> ":" <> show moduleName) ()
295286 if updated then do
296287 progress $ SkippingModule moduleName moduleIndex
297288 pure $ Just (exts, MultipleErrors [] , Just (emptyDiff moduleName))
@@ -311,9 +302,7 @@ makeImp ma@MakeActions{..} ms collectAll = do
311302 env <- C. readMVar (bpEnv buildPlan)
312303 idx <- C. takeMVar (bpIndex buildPlan)
313304 C. putMVar (bpIndex buildPlan) (idx + 1 )
314- -- (exts, warnings) <- do
315- -- let doBuild = listen $ rebuildModuleWithIndex ma env externs m (Just (idx, cnt))
316- -- maySkipBuild (Just (idx, cnt)) >>= maybe doBuild pure
305+
317306 (exts, warnings, diff) <- do
318307 let doBuild = do
319308 (exts, warnings) <-
0 commit comments