diff --git a/cabal-install/src/Distribution/Client/CmdPath.hs b/cabal-install/src/Distribution/Client/CmdPath.hs index bec228a771e..9e0545e3a0b 100644 --- a/cabal-install/src/Distribution/Client/CmdPath.hs +++ b/cabal-install/src/Distribution/Client/CmdPath.hs @@ -25,7 +25,7 @@ import Distribution.Client.Config , defaultStoreDir , getConfigFilePath ) -import Distribution.Client.DistDirLayout (CabalDirLayout (..), distProjectRootDirectory) +import Distribution.Client.DistDirLayout (CabalDirLayout (..), StoreDirLayout (..), distProjectRootDirectory) import Distribution.Client.Errors import Distribution.Client.GlobalFlags import Distribution.Client.NixStyleOptions @@ -244,10 +244,17 @@ pathAction flags@NixStyleFlags{extraFlags = pathFlags'} cliTargetStrings globalF if not $ fromFlagOrDefault False (pathCompiler pathFlags) then pure Nothing else do - (compiler, _, progDb) <- runRebuild (distProjectRootDirectory . distDirLayout $ baseCtx) $ configureCompiler verbosity (distDirLayout baseCtx) (projectConfig baseCtx) + (compiler, _, progDb) <- + runRebuild (distProjectRootDirectory . distDirLayout $ baseCtx) $ + configureCompiler verbosity (distDirLayout baseCtx) (projectConfig baseCtx) compilerProg <- requireCompilerProg verbosity compiler (configuredCompilerProg, _) <- requireProgram verbosity compilerProg progDb - pure $ Just $ mkCompilerInfo configuredCompilerProg compiler + + let compilerInfo' = + mkCompilerInfo configuredCompilerProg compiler $ + cabalStoreDirLayout (cabalDirLayout baseCtx) + + pure $ Just compilerInfo' paths <- for (fromFlagOrDefault [] $ pathDirectories pathFlags) $ \p -> do t <- getPathLocation baseCtx p @@ -317,16 +324,20 @@ data PathOutputs = PathOutputs data PathCompilerInfo = PathCompilerInfo { pathCompilerInfoFlavour :: CompilerFlavor , pathCompilerInfoId :: CompilerId + , pathCompilerInfoAbiTag :: String , pathCompilerInfoPath :: FilePath + , pathCompilerInfoStorePath :: FilePath } deriving (Show, Eq, Ord) -mkCompilerInfo :: ConfiguredProgram -> Compiler -> PathCompilerInfo -mkCompilerInfo compilerProgram compiler = +mkCompilerInfo :: ConfiguredProgram -> Compiler -> StoreDirLayout -> PathCompilerInfo +mkCompilerInfo compilerProgram compiler storeLayout = PathCompilerInfo { pathCompilerInfoFlavour = compilerFlavor compiler , pathCompilerInfoId = compilerId compiler + , pathCompilerInfoAbiTag = showCompilerIdWithAbi compiler , pathCompilerInfoPath = programPath compilerProgram + , pathCompilerInfoStorePath = storeDirectory storeLayout compiler } -- ---------------------------------------------------------------------------- @@ -371,7 +382,9 @@ compilerInfoToJson pci = .= Json.object [ "flavour" .= jdisplay (pathCompilerInfoFlavour pci) , "id" .= jdisplay (pathCompilerInfoId pci) + , "abi-tag" .= Json.String (pathCompilerInfoAbiTag pci) , "path" .= Json.String (pathCompilerInfoPath pci) + , "store-path" .= Json.String (pathCompilerInfoStorePath pci) ] ] @@ -400,5 +413,7 @@ compilerInfoToKeyValue :: PathCompilerInfo -> [(String, String)] compilerInfoToKeyValue pci = [ ("compiler-flavour", prettyShow $ pathCompilerInfoFlavour pci) , ("compiler-id", prettyShow $ pathCompilerInfoId pci) + , ("compiler-abi-tag", pathCompilerInfoAbiTag pci) , ("compiler-path", pathCompilerInfoPath pci) + , ("compiler-store-path", pathCompilerInfoStorePath pci) ] diff --git a/cabal-testsuite/PackageTests/Path/All/cabal.out b/cabal-testsuite/PackageTests/Path/All/cabal.out index 0f710cc0fb1..9f184076494 100644 --- a/cabal-testsuite/PackageTests/Path/All/cabal.out +++ b/cabal-testsuite/PackageTests/Path/All/cabal.out @@ -1,11 +1,11 @@ # cabal path -{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","path":""},"logs-dir":"/cabal.dist/home/.cabal/logs","installdir":"/cabal.dist/home/.cabal/bin"} +{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","abi-tag":"ghc-","path":"","store-path":"/cabal.dist/home/.cabal/store/ghc-"},"logs-dir":"/cabal.dist/home/.cabal/logs","installdir":"/cabal.dist/home/.cabal/bin"} # cabal path -{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","path":""},"store-dir":"/cabal.dist/home/.cabal/store","config-file":"/cabal.dist/home/.cabal/config"} +{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","abi-tag":"ghc-","path":"","store-path":"/cabal.dist/home/.cabal/store/ghc-"},"store-dir":"/cabal.dist/home/.cabal/store","config-file":"/cabal.dist/home/.cabal/config"} # cabal path -{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","path":""},"remote-repo-cache":"/cabal.dist/home/.cabal/packages"} +{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","abi-tag":"ghc-","path":"","store-path":"/cabal.dist/home/.cabal/store/ghc-"},"remote-repo-cache":"/cabal.dist/home/.cabal/packages"} # cabal path -{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","path":""},"cache-home":"/cabal.dist/home/.cabal","remote-repo-cache":"/cabal.dist/home/.cabal/packages","logs-dir":"/cabal.dist/home/.cabal/logs","store-dir":"/cabal.dist/home/.cabal/store","config-file":"/cabal.dist/home/.cabal/config","installdir":"/cabal.dist/home/.cabal/bin"} +{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","abi-tag":"ghc-","path":"","store-path":"/cabal.dist/home/.cabal/store/ghc-"},"cache-home":"/cabal.dist/home/.cabal","remote-repo-cache":"/cabal.dist/home/.cabal/packages","logs-dir":"/cabal.dist/home/.cabal/logs","store-dir":"/cabal.dist/home/.cabal/store","config-file":"/cabal.dist/home/.cabal/config","installdir":"/cabal.dist/home/.cabal/bin"} # cabal path {"cabal-version":"","cache-home":"/cabal.dist/home/.cabal"} # cabal path @@ -21,24 +21,32 @@ # cabal path compiler-flavour: ghc compiler-id: ghc- +compiler-abi-tag: ghc- compiler-path: +compiler-store-path: /cabal.dist/home/.cabal/store/ghc- logs-dir: /cabal.dist/home/.cabal/logs installdir: /cabal.dist/home/.cabal/bin # cabal path compiler-flavour: ghc compiler-id: ghc- +compiler-abi-tag: ghc- compiler-path: +compiler-store-path: /cabal.dist/home/.cabal/store/ghc- store-dir: /cabal.dist/home/.cabal/store config-file: /cabal.dist/home/.cabal/config # cabal path compiler-flavour: ghc compiler-id: ghc- +compiler-abi-tag: ghc- compiler-path: +compiler-store-path: /cabal.dist/home/.cabal/store/ghc- remote-repo-cache: /cabal.dist/home/.cabal/packages # cabal path compiler-flavour: ghc compiler-id: ghc- +compiler-abi-tag: ghc- compiler-path: +compiler-store-path: /cabal.dist/home/.cabal/store/ghc- cache-home: /cabal.dist/home/.cabal remote-repo-cache: /cabal.dist/home/.cabal/packages logs-dir: /cabal.dist/home/.cabal/logs @@ -60,24 +68,32 @@ installdir: /cabal.dist/home/.cabal/bin # cabal path compiler-flavour: ghc compiler-id: ghc- +compiler-abi-tag: ghc- compiler-path: +compiler-store-path: /cabal.dist/home/.cabal/store/ghc- logs-dir: /cabal.dist/home/.cabal/logs installdir: /cabal.dist/home/.cabal/bin # cabal path compiler-flavour: ghc compiler-id: ghc- +compiler-abi-tag: ghc- compiler-path: +compiler-store-path: /cabal.dist/home/.cabal/store/ghc- store-dir: /cabal.dist/home/.cabal/store config-file: /cabal.dist/home/.cabal/config # cabal path compiler-flavour: ghc compiler-id: ghc- +compiler-abi-tag: ghc- compiler-path: +compiler-store-path: /cabal.dist/home/.cabal/store/ghc- remote-repo-cache: /cabal.dist/home/.cabal/packages # cabal path compiler-flavour: ghc compiler-id: ghc- +compiler-abi-tag: ghc- compiler-path: +compiler-store-path: /cabal.dist/home/.cabal/store/ghc- cache-home: /cabal.dist/home/.cabal remote-repo-cache: /cabal.dist/home/.cabal/packages logs-dir: /cabal.dist/home/.cabal/logs diff --git a/cabal-testsuite/PackageTests/Path/Compiler/cabal.out b/cabal-testsuite/PackageTests/Path/Compiler/cabal.out index a640aa60948..5a852bdc866 100644 --- a/cabal-testsuite/PackageTests/Path/Compiler/cabal.out +++ b/cabal-testsuite/PackageTests/Path/Compiler/cabal.out @@ -1,10 +1,20 @@ # cabal path compiler-flavour: ghc compiler-id: ghc- +compiler-abi-tag: ghc- compiler-path: +compiler-store-path: /cabal.dist/home/.cabal/store/ghc- # cabal path -{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","path":""}} +{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","abi-tag":"ghc-","path":"","store-path":"/cabal.dist/home/.cabal/store/ghc-"}} # cabal path compiler-flavour: ghc compiler-id: ghc- +compiler-abi-tag: ghc- compiler-path: +compiler-store-path: /cabal.dist/home/.cabal/store/ghc- +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-abi-tag: ghc- +compiler-path: +compiler-store-path: fake-dir/ghc- diff --git a/cabal-testsuite/PackageTests/Path/Compiler/cabal.test.hs b/cabal-testsuite/PackageTests/Path/Compiler/cabal.test.hs index b70251cf574..f6ba2720755 100644 --- a/cabal-testsuite/PackageTests/Path/Compiler/cabal.test.hs +++ b/cabal-testsuite/PackageTests/Path/Compiler/cabal.test.hs @@ -5,3 +5,4 @@ main = cabalTest $ do void $ cabal "path" ["-z", "--output-format=key-value", "--compiler-info"] void $ cabal "path" ["-z", "--output-format=json", "--compiler-info"] void $ cabal "path" ["-z", "--compiler-info"] + void $ cabalG ["--store-dir=fake-dir"] "path" ["-z", "--compiler-info"] diff --git a/changelog.d/pr-11266 b/changelog.d/pr-11266 new file mode 100644 index 00000000000..fa503957869 --- /dev/null +++ b/changelog.d/pr-11266 @@ -0,0 +1,11 @@ +synopsis: "Add GHC Project Unit ID store to `cabal path` output" +packages: cabal-install +prs: #11266 +issues: #10165 +description: { + +This addds the GHC Project Unit ID store path to the cabal path output as +"project-unit-id". The GHC Project Unit ID store path has been used in cabal-install +since 3.12.1.0. + +}