From 06c7b721f7eae9aa3c4430f8a2888175ea4982bc Mon Sep 17 00:00:00 2001 From: Rodrigo Mesquita Date: Thu, 1 Feb 2024 11:52:08 +0000 Subject: [PATCH] WIP --- .../src/Distribution/Client/CmdInstall.hs | 4 +- .../Distribution/Client/ProjectPlanning.hs | 20 ++--- .../NewInstall/T7297/CHANGELOG.md | 5 ++ .../PackageTests/NewInstall/T7297/LICENSE | 30 ++++++++ .../PackageTests/NewInstall/T7297/T7297.cabal | 76 +++++++++++++++++++ .../PackageTests/NewInstall/T7297/app/Main.hs | 4 + .../NewInstall/T7297/cabal.project | 1 + .../NewInstall/T7297/setup.test.hs | 5 ++ 8 files changed, 135 insertions(+), 10 deletions(-) create mode 100644 cabal-testsuite/PackageTests/NewInstall/T7297/CHANGELOG.md create mode 100644 cabal-testsuite/PackageTests/NewInstall/T7297/LICENSE create mode 100644 cabal-testsuite/PackageTests/NewInstall/T7297/T7297.cabal create mode 100644 cabal-testsuite/PackageTests/NewInstall/T7297/app/Main.hs create mode 100644 cabal-testsuite/PackageTests/NewInstall/T7297/cabal.project create mode 100644 cabal-testsuite/PackageTests/NewInstall/T7297/setup.test.hs diff --git a/cabal-install/src/Distribution/Client/CmdInstall.hs b/cabal-install/src/Distribution/Client/CmdInstall.hs index a31e28053e0..d961b4818f6 100644 --- a/cabal-install/src/Distribution/Client/CmdInstall.hs +++ b/cabal-install/src/Distribution/Client/CmdInstall.hs @@ -89,7 +89,7 @@ import Distribution.Client.ProjectPlanning ( storePackageInstallDirs' ) import Distribution.Client.ProjectPlanning.Types - ( ElaboratedInstallPlan + ( ElaboratedInstallPlan, showElaboratedInstallPlan ) import Distribution.Client.RebuildMonad ( runRebuild @@ -589,6 +589,7 @@ installAction flags@NixStyleFlags{extraFlags = clientInstallFlags', ..} targetSt InstallCommand buildCtx <- constructProjectBuildContext verbosity (baseCtx{installedPackages = Just installedIndex'}) targetSelectors + print ("buildCtx", showElaboratedInstallPlan $ elaboratedPlanToExecute buildCtx, "installedPackages", installedIndex', "orig", installedPackages baseCtx) printPlan verbosity baseCtx buildCtx let installCfg = InstallCfg verbosity baseCtx buildCtx platform compiler configFlags clientInstallFlags @@ -793,6 +794,7 @@ partitionToKnownTargetsAndHackagePackages verbosity pkgDb elaboratedPlan targetS return (targets, hackageNames) +-- | Here we are, here we are already building the local package to install constructProjectBuildContext :: Verbosity -> ProjectBaseContext diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index b06748d63dd..df0f6d4b28e 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -517,6 +517,7 @@ rebuildInstallPlan -> CabalDirLayout -> ProjectConfig -> [PackageSpecifier UnresolvedSourcePackage] + -- ^ Packages in this project -> Maybe InstalledPackageIndex -> IO ( ElaboratedInstallPlan -- with store packages @@ -534,7 +535,7 @@ rebuildInstallPlan } CabalDirLayout { cabalStoreDirLayout - } = \projectConfig localPackages mbInstalledPackages -> + } = \projectConfig projectPackages mbInstalledPackages -> runRebuild distProjectRootDirectory $ do progsearchpath <- liftIO $ getSystemSearchPath let projectConfigMonitored = projectConfig{projectConfigBuildOnly = mempty} @@ -545,7 +546,7 @@ rebuildInstallPlan fileMonitorImprovedPlan -- react to changes in the project config, -- the package .cabal files and the path - (projectConfigMonitored, localPackages, progsearchpath) + (projectConfigMonitored, projectPackages, progsearchpath) $ do -- And so is the elaborated plan that the improved plan based on (elaboratedPlan, elaboratedShared, totalIndexState, activeRepos) <- @@ -553,7 +554,7 @@ rebuildInstallPlan verbosity fileMonitorElaboratedPlan ( projectConfigMonitored - , localPackages + , projectPackages , progsearchpath ) $ do @@ -563,7 +564,7 @@ rebuildInstallPlan phaseRunSolver projectConfig compilerEtc - localPackages + projectPackages (fromMaybe mempty mbInstalledPackages) ( elaboratedPlan , elaboratedShared @@ -573,7 +574,7 @@ rebuildInstallPlan compilerEtc pkgConfigDB solverPlan - localPackages + projectPackages phaseMaintainPlanOutputs elaboratedPlan elaboratedShared return (elaboratedPlan, elaboratedShared, totalIndexState, activeRepos) @@ -775,7 +776,7 @@ rebuildInstallPlan (compiler, platform, progdb) pkgConfigDB solverPlan - localPackages = do + projectPackages = do liftIO $ debug verbosity "Elaborating the install plan..." sourcePackageHashes <- @@ -798,7 +799,7 @@ rebuildInstallPlan distDirLayout cabalStoreDirLayout solverPlan - localPackages + projectPackages sourcePackageHashes installDirs projectConfigShared @@ -2344,8 +2345,9 @@ elaborateInstallPlan -- \| Determine the packages local to the project from the list of -- project packages pkgsLocalToProject :: Set PackageId - pkgsLocalToProject = - Set.fromList (catMaybes (map shouldBeLocal projectPackages)) + pkgsLocalToProject = traceShow ("pkgsLocalToProject", xs) xs + where + xs = Set.fromList (catMaybes (map shouldBeLocal projectPackages)) pkgsUseSharedLibrary :: Set PackageId pkgsUseSharedLibrary = diff --git a/cabal-testsuite/PackageTests/NewInstall/T7297/CHANGELOG.md b/cabal-testsuite/PackageTests/NewInstall/T7297/CHANGELOG.md new file mode 100644 index 00000000000..e171d057ae8 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewInstall/T7297/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for T2797 + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/cabal-testsuite/PackageTests/NewInstall/T7297/LICENSE b/cabal-testsuite/PackageTests/NewInstall/T7297/LICENSE new file mode 100644 index 00000000000..79fd6b542e3 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewInstall/T7297/LICENSE @@ -0,0 +1,30 @@ +Copyright (c) 2024, Rodrigo Mesquita + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Rodrigo Mesquita nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/cabal-testsuite/PackageTests/NewInstall/T7297/T7297.cabal b/cabal-testsuite/PackageTests/NewInstall/T7297/T7297.cabal new file mode 100644 index 00000000000..1d58430caa7 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewInstall/T7297/T7297.cabal @@ -0,0 +1,76 @@ +cabal-version: 3.0 +-- The cabal-version field refers to the version of the .cabal specification, +-- and can be different from the cabal-install (the tool) version and the +-- Cabal (the library) version you are using. As such, the Cabal (the library) +-- version used must be equal or greater than the version stated in this field. +-- Starting from the specification version 2.2, the cabal-version field must be +-- the first thing in the cabal file. + +-- Initial package description 'T2797' generated by +-- 'cabal init'. For further documentation, see: +-- http://haskell.org/cabal/users-guide/ +-- +-- The name of the package. +name: T7297 + +-- The package version. +-- See the Haskell package versioning policy (PVP) for standards +-- guiding when and how versions should be incremented. +-- https://pvp.haskell.org +-- PVP summary: +-+------- breaking API changes +-- | | +----- non-breaking API additions +-- | | | +--- code changes with no API change +version: 0.1.0.0 + +-- A short (one-line) description of the package. +-- synopsis: + +-- A longer description of the package. +-- description: + +-- The license under which the package is released. +license: BSD-3-Clause + +-- The file containing the license text. +license-file: LICENSE + +-- The package author(s). +author: Rodrigo Mesquita + +-- An email address to which users can send suggestions, bug reports, and patches. +maintainer: rodrigo.m.mesquita@gmail.com + +-- A copyright notice. +-- copyright: +build-type: Simple + +-- Extra doc files to be distributed with the package, such as a CHANGELOG or a README. +extra-doc-files: CHANGELOG.md + +-- Extra source files to be distributed with the package, such as examples, or a tutorial module. +-- extra-source-files: + +common warnings + ghc-options: -Wall + +executable T2797 + -- Import common warning flags. + import: warnings + + -- .hs or .lhs file containing the Main module. + main-is: Main.hs + + -- Modules included in this executable, other than Main. + -- other-modules: + + -- LANGUAGE extensions used by modules in this package. + -- other-extensions: + + -- Other library packages from which modules are imported. + build-depends: base ^>=4.19.0.0 + + -- Directories containing source files. + hs-source-dirs: app + + -- Base language which the package is written in. + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/NewInstall/T7297/app/Main.hs b/cabal-testsuite/PackageTests/NewInstall/T7297/app/Main.hs new file mode 100644 index 00000000000..65ae4a05d5d --- /dev/null +++ b/cabal-testsuite/PackageTests/NewInstall/T7297/app/Main.hs @@ -0,0 +1,4 @@ +module Main where + +main :: IO () +main = putStrLn "Hello, Haskell!" diff --git a/cabal-testsuite/PackageTests/NewInstall/T7297/cabal.project b/cabal-testsuite/PackageTests/NewInstall/T7297/cabal.project new file mode 100644 index 00000000000..e6fdbadb439 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewInstall/T7297/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/cabal-testsuite/PackageTests/NewInstall/T7297/setup.test.hs b/cabal-testsuite/PackageTests/NewInstall/T7297/setup.test.hs new file mode 100644 index 00000000000..b31eea16580 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewInstall/T7297/setup.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude + +main = cabalTest $ + cabal "install" ["--enable-executable-dynamic"] +