diff --git a/hadrian/src/Hadrian/Haskell/Cabal.hs b/hadrian/src/Hadrian/Haskell/Cabal.hs index db20e470076a0462f34504b51354058112a1acb0..17249efd79fc2e327c90fa8aa5223cb32d10afcc 100644 --- a/hadrian/src/Hadrian/Haskell/Cabal.hs +++ b/hadrian/src/Hadrian/Haskell/Cabal.hs @@ -10,18 +10,25 @@ -- Cabal files. ----------------------------------------------------------------------------- module Hadrian.Haskell.Cabal ( - pkgVersion, pkgUnitId, pkgSynopsis, pkgDescription, pkgSimpleIdentifier, + pkgPackageName, pkgVersion, pkgUnitId, + pkgSynopsis, pkgDescription, pkgSimpleIdentifier, pkgDependencies, pkgGenericDescription, cabalArchString, cabalOsString ) where import Development.Shake -import Distribution.PackageDescription (GenericPackageDescription) +import Distribution.PackageDescription (GenericPackageDescription, unPackageName, PackageDescription (package)) +import qualified Distribution.Types.PackageId as Cabal +import qualified Distribution.Types.GenericPackageDescription as Cabal import Hadrian.Haskell.Cabal.Type import Hadrian.Oracles.Cabal import Hadrian.Package import {-# SOURCE #-} Hadrian.Haskell.Hash (pkgUnitId) +-- | The name of the package as written in the package's cabal file. +pkgPackageName :: Package -> Action String +pkgPackageName = + fmap (unPackageName . Cabal.pkgName . package . Cabal.packageDescription) . pkgGenericDescription -- | Read a Cabal file and return the package version. The Cabal file is tracked. pkgVersion :: Package -> Action String @@ -52,7 +59,8 @@ pkgDescription = fmap description . readPackageData -- returns a crude overapproximation of actual dependencies. The Cabal file is -- tracked. pkgDependencies :: Package -> Action [PackageName] -pkgDependencies = fmap (map pkgName . packageDependencies) . readPackageData +pkgDependencies = + fmap (map Hadrian.Package.pkgName . packageDependencies) . readPackageData -- | Read a Cabal file and return the 'GenericPackageDescription'. The Cabal -- file is tracked. diff --git a/hadrian/src/Settings/Builders/Ghc.hs b/hadrian/src/Settings/Builders/Ghc.hs index 77d99bf30e2e2ea6fdc6310d78b94b3491860084..9e49961db7c1596ac5ced6cc25546ba74b0f48f8 100644 --- a/hadrian/src/Settings/Builders/Ghc.hs +++ b/hadrian/src/Settings/Builders/Ghc.hs @@ -254,13 +254,17 @@ packageGhcArgs = do -- sets `-this-unit-id ghc` when hadrian is building stage0, which will -- overwrite this one. pkgId <- expr $ pkgUnitId stage package + pkgName <- expr $ pkgPackageName package mconcat [ arg "-hide-all-packages" , arg "-no-user-package-db" , arg "-package-env -" , packageDatabaseArgs -- We want to pass -this-unit-id for executables as well for multi-repl to -- work with executable packages but this is buggy on GHC-9.0.2 - , (isLibrary package || (ghc_ver >= makeVersion [9,2,1])) ? arg ("-this-unit-id " ++ pkgId) + , (isLibrary package || (ghc_ver >= makeVersion [9,2,1])) ? mconcat + [ arg ("-this-unit-id " ++ pkgId) + , arg ("-this-package-name " ++ pkgName) + ] , map ("-package-id " ++) <$> getContextData depIds ] includeGhcArgs :: Args