@@ -38,12 +38,12 @@ import Stack.Build.Execute
3838import Stack.Build.Haddock
3939import Stack.Build.Installed
4040import Stack.Build.Source
41- import Stack.Build.Target
4241import Stack.Package
4342import Stack.Types.Build
4443import Stack.Types.Config
4544import Stack.Types.NamedComponent
4645import Stack.Types.Package
46+ import Stack.Types.SourceMap
4747
4848import Stack.Types.Compiler (compilerVersionText , getGhcVersion )
4949import System.FileLock (FileLock , unlockFile )
@@ -57,39 +57,41 @@ import System.Terminal (fixCodePage)
5757build :: HasEnvConfig env
5858 => Maybe (Set (Path Abs File ) -> IO () ) -- ^ callback after discovering all local files
5959 -> Maybe FileLock
60- -> BuildOptsCLI
6160 -> RIO env ()
62- build msetLocalFiles mbuildLk boptsCli = do
61+ build msetLocalFiles mbuildLk = do
6362 mcp <- view $ configL. to configModifyCodePage
6463 ghcVersion <- view $ actualCompilerVersionL. to getGhcVersion
6564 fixCodePage mcp ghcVersion $ do
6665 bopts <- view buildOptsL
6766 let profiling = boptsLibProfile bopts || boptsExeProfile bopts
6867 let symbols = not (boptsLibStrip bopts || boptsExeStrip bopts)
6968
70- (targets, ls, locals, extraToBuild, sourceMap) <- loadSourceMapFull NeedTargets boptsCli
69+ sourceMap <- view $ envConfigL. to envConfigSourceMap
70+ locals <- projectLocalPackages
71+ depsLocals <- localDependencies
72+ let allLocals = locals <> depsLocals
7173
7274 -- Set local files, necessary for file watching
7375 stackYaml <- view stackYamlL
74- for_ msetLocalFiles $ \ setLocalFiles -> liftIO $ do
76+ for_ msetLocalFiles $ \ setLocalFiles -> do
7577 files <- sequence
76- -- The `locals` value above only contains local project
77- -- packages, not local dependencies. This will get _all_
78- -- of the local files we're interested in
79- -- watching.
80- [lpFiles lp | PSFilePath lp _ <- Map. elems sourceMap]
81- setLocalFiles $ Set. insert stackYaml $ Set. unions files
78+ [lpFiles lp | lp <- allLocals]
79+ liftIO $ setLocalFiles $ Set. insert stackYaml $ Set. unions files
8280
81+ checkComponentsBuildable allLocals
82+
83+ installMap <- toInstallMap sourceMap
8384 (installedMap, globalDumpPkgs, snapshotDumpPkgs, localDumpPkgs) <-
8485 getInstalled
8586 GetInstalledOpts
8687 { getInstalledProfiling = profiling
8788 , getInstalledHaddock = shouldHaddockDeps bopts
8889 , getInstalledSymbols = symbols }
89- sourceMap
90+ installMap
9091
92+ boptsCli <- view $ envConfigL. to envConfigBuildOptsCLI
9193 baseConfigOpts <- mkBaseConfigOpts boptsCli
92- plan <- constructPlan ls baseConfigOpts locals extraToBuild localDumpPkgs loadPackage sourceMap installedMap (boptsCLIInitialBuildSteps boptsCli)
94+ plan <- constructPlan baseConfigOpts localDumpPkgs loadPackage sourceMap installedMap (boptsCLIInitialBuildSteps boptsCli)
9395
9496 allowLocals <- view $ configL. to configAllowLocals
9597 unless allowLocals $ case justLocals plan of
@@ -120,7 +122,7 @@ build msetLocalFiles mbuildLk boptsCli = do
120122 snapshotDumpPkgs
121123 localDumpPkgs
122124 installedMap
123- targets
125+ (smtTargets $ smTargets sourceMap)
124126 plan
125127
126128-- | If all the tasks are local, they don't mutate anything outside of our local directory.
@@ -211,7 +213,7 @@ warnIfExecutablesWithSameNameCouldBeOverwritten locals plan = do
211213 collect
212214 [ (exe,pkgName')
213215 | (pkgName',task) <- Map. toList (planTasks plan)
214- , TTFilePath lp _ <- [taskType task]
216+ , TTLocalMutable lp <- [taskType task]
215217 , exe <- (Set. toList . exeComponents . lpComponents) lp
216218 ]
217219 localExes :: Map Text (NonEmpty PackageName )
@@ -238,8 +240,8 @@ splitObjsWarning = unwords
238240 ]
239241
240242-- | Get the @BaseConfigOpts@ necessary for constructing configure options
241- mkBaseConfigOpts :: (MonadIO m , MonadReader env m , HasEnvConfig env , MonadThrow m )
242- => BuildOptsCLI -> m BaseConfigOpts
243+ mkBaseConfigOpts :: (HasEnvConfig env )
244+ => BuildOptsCLI -> RIO env BaseConfigOpts
243245mkBaseConfigOpts boptsCli = do
244246 bopts <- view buildOptsL
245247 snapDBPath <- packageDatabaseDeps
@@ -321,7 +323,7 @@ queryBuildInfo selectors0 =
321323-- | Get the raw build information object
322324rawBuildInfo :: HasEnvConfig env => RIO env Value
323325rawBuildInfo = do
324- ( locals, _sourceMap) <- loadSourceMap NeedTargets defaultBuildOptsCLI
326+ locals <- projectLocalPackages
325327 wantedCompiler <- view $ wantedCompilerVersionL. to (utf8BuilderToText . display)
326328 actualCompiler <- view $ actualCompilerVersionL. to compilerVersionText
327329 return $ object
@@ -340,3 +342,13 @@ rawBuildInfo = do
340342 [ " version" .= CabalString (packageVersion p)
341343 , " path" .= toFilePath (parent $ lpCabalFile lp)
342344 ]
345+
346+ checkComponentsBuildable :: MonadThrow m => [LocalPackage ] -> m ()
347+ checkComponentsBuildable lps =
348+ unless (null unbuildable) $ throwM $ SomeTargetsNotBuildable unbuildable
349+ where
350+ unbuildable =
351+ [ (packageName (lpPackage lp), c)
352+ | lp <- lps
353+ , c <- Set. toList (lpUnbuildable lp)
354+ ]
0 commit comments