Torsten Schmits pushed to branch wip/torsten.schmits/worker-debug at Glasgow Haskell Compiler / GHC
Commits:
-
19695614
by Torsten Schmits at 2025-06-24T17:01:05+02:00
4 changed files:
- compiler/GHC/Driver/Backpack.hs
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Driver/Session.hs
- compiler/GHC/Unit/State.hs
Changes:
| ... | ... | @@ -91,6 +91,7 @@ import Data.Map (Map) |
| 91 | 91 | import qualified Data.Map as Map
|
| 92 | 92 | import qualified Data.Set as Set
|
| 93 | 93 | import GHC.Types.Error (mkUnknownDiagnostic)
|
| 94 | +import System.OsPath (unsafeEncodeUtf)
|
|
| 94 | 95 | |
| 95 | 96 | -- | Entry point to compile a Backpack file.
|
| 96 | 97 | doBackpack :: [FilePath] -> Ghc ()
|
| ... | ... | @@ -433,7 +434,7 @@ addUnit u = do |
| 433 | 434 | Nothing -> panic "addUnit: called too early"
|
| 434 | 435 | Just dbs ->
|
| 435 | 436 | let newdb = UnitDatabase
|
| 436 | - { unitDatabasePath = "(in memory " ++ showSDoc dflags0 (ppr (unitId u)) ++ ")"
|
|
| 437 | + { unitDatabasePath = unsafeEncodeUtf $ "(in memory " ++ showSDoc dflags0 (ppr (unitId u)) ++ ")"
|
|
| 437 | 438 | , unitDatabaseUnits = [u]
|
| 438 | 439 | }
|
| 439 | 440 | in return (dbs ++ [newdb]) -- added at the end because ordering matters
|
| ... | ... | @@ -134,6 +134,7 @@ import System.IO.Error (catchIOError) |
| 134 | 134 | import System.Environment (lookupEnv)
|
| 135 | 135 | import System.FilePath (normalise, (</>))
|
| 136 | 136 | import System.Directory
|
| 137 | +import System.OsPath (OsPath)
|
|
| 137 | 138 | import GHC.Foreign (withCString, peekCString)
|
| 138 | 139 | |
| 139 | 140 | import qualified Data.Set as Set
|
| ... | ... | @@ -948,7 +949,7 @@ setDynamicNow dflags0 = |
| 948 | 949 | data PkgDbRef
|
| 949 | 950 | = GlobalPkgDb
|
| 950 | 951 | | UserPkgDb
|
| 951 | - | PkgDbPath FilePath
|
|
| 952 | + | PkgDbPath OsPath
|
|
| 952 | 953 | deriving Eq
|
| 953 | 954 | |
| 954 | 955 | -- | Used to differentiate the scope an include needs to apply to.
|
| ... | ... | @@ -278,6 +278,7 @@ import qualified Data.Map as Map |
| 278 | 278 | import qualified Data.Set as Set
|
| 279 | 279 | import Data.Word
|
| 280 | 280 | import System.FilePath
|
| 281 | +import System.OsPath (unsafeEncodeUtf)
|
|
| 281 | 282 | import Text.ParserCombinators.ReadP hiding (char)
|
| 282 | 283 | import Text.ParserCombinators.ReadP as R
|
| 283 | 284 | |
| ... | ... | @@ -1962,7 +1963,7 @@ package_flags_deps :: [(Deprecation, Flag (CmdLineP DynFlags))] |
| 1962 | 1963 | package_flags_deps = [
|
| 1963 | 1964 | ------- Packages ----------------------------------------------------
|
| 1964 | 1965 | make_ord_flag defFlag "package-db"
|
| 1965 | - (HasArg (addPkgDbRef . PkgDbPath))
|
|
| 1966 | + (HasArg (addPkgDbRef . PkgDbPath . unsafeEncodeUtf))
|
|
| 1966 | 1967 | , make_ord_flag defFlag "clear-package-db" (NoArg clearPkgDb)
|
| 1967 | 1968 | , make_ord_flag defFlag "no-global-package-db" (NoArg removeGlobalPkgDb)
|
| 1968 | 1969 | , make_ord_flag defFlag "no-user-package-db" (NoArg removeUserPkgDb)
|
| ... | ... | @@ -1972,7 +1973,7 @@ package_flags_deps = [ |
| 1972 | 1973 | (NoArg (addPkgDbRef UserPkgDb))
|
| 1973 | 1974 | -- backwards compat with GHC<=7.4 :
|
| 1974 | 1975 | , make_dep_flag defFlag "package-conf"
|
| 1975 | - (HasArg $ addPkgDbRef . PkgDbPath) "Use -package-db instead"
|
|
| 1976 | + (HasArg $ addPkgDbRef . PkgDbPath . unsafeEncodeUtf) "Use -package-db instead"
|
|
| 1976 | 1977 | , make_dep_flag defFlag "no-user-package-conf"
|
| 1977 | 1978 | (NoArg removeUserPkgDb) "Use -no-user-package-db instead"
|
| 1978 | 1979 | , make_ord_flag defGhcFlag "package-name" (HasArg $ \name ->
|
| ... | ... | @@ -3377,7 +3378,7 @@ parseEnvFile :: FilePath -> String -> DynP () |
| 3377 | 3378 | parseEnvFile envfile = mapM_ parseEntry . lines
|
| 3378 | 3379 | where
|
| 3379 | 3380 | parseEntry str = case words str of
|
| 3380 | - ("package-db": _) -> addPkgDbRef (PkgDbPath (envdir </> db))
|
|
| 3381 | + ("package-db": _) -> addPkgDbRef (PkgDbPath (unsafeEncodeUtf (envdir </> db)))
|
|
| 3381 | 3382 | -- relative package dbs are interpreted relative to the env file
|
| 3382 | 3383 | where envdir = takeDirectory envfile
|
| 3383 | 3384 | db = drop 11 str
|
| ... | ... | @@ -109,6 +109,8 @@ import GHC.Utils.Exception |
| 109 | 109 | |
| 110 | 110 | import System.Directory
|
| 111 | 111 | import System.FilePath as FilePath
|
| 112 | +import System.OsPath (OsPath, decodeUtf, unsafeEncodeUtf)
|
|
| 113 | +import qualified System.OsPath as OsPath
|
|
| 112 | 114 | import Control.Monad
|
| 113 | 115 | import Data.Graph (stronglyConnComp, SCC(..))
|
| 114 | 116 | import Data.Char ( toUpper )
|
| ... | ... | @@ -405,7 +407,7 @@ initUnitConfig dflags cached_dbs home_units = |
| 405 | 407 | |
| 406 | 408 | where
|
| 407 | 409 | offsetPackageDb :: Maybe FilePath -> PackageDBFlag -> PackageDBFlag
|
| 408 | - offsetPackageDb (Just offset) (PackageDB (PkgDbPath p)) | isRelative p = PackageDB (PkgDbPath (offset </> p))
|
|
| 410 | + offsetPackageDb (Just offset) (PackageDB (PkgDbPath p)) | OsPath.isRelative p = PackageDB (PkgDbPath (OsPath.unsafeEncodeUtf offset OsPath.</> p))
|
|
| 409 | 411 | offsetPackageDb _ p = p
|
| 410 | 412 | |
| 411 | 413 | |
| ... | ... | @@ -500,12 +502,12 @@ emptyUnitState = UnitState { |
| 500 | 502 | |
| 501 | 503 | -- | Unit database
|
| 502 | 504 | data UnitDatabase unit = UnitDatabase
|
| 503 | - { unitDatabasePath :: FilePath
|
|
| 505 | + { unitDatabasePath :: OsPath
|
|
| 504 | 506 | , unitDatabaseUnits :: [GenUnitInfo unit]
|
| 505 | 507 | }
|
| 506 | 508 | |
| 507 | 509 | instance Outputable u => Outputable (UnitDatabase u) where
|
| 508 | - ppr (UnitDatabase fp _u) = text "DB:" <+> text fp
|
|
| 510 | + ppr (UnitDatabase fp _u) = text "DB:" <+> text (fromMaybe "invalid path" (decodeUtf fp))
|
|
| 509 | 511 | |
| 510 | 512 | type UnitInfoMap = UniqMap UnitId UnitInfo
|
| 511 | 513 | |
| ... | ... | @@ -720,9 +722,9 @@ getUnitDbRefs cfg = do |
| 720 | 722 | Left _ -> system_conf_refs
|
| 721 | 723 | Right path
|
| 722 | 724 | | Just (xs, x) <- snocView path, isSearchPathSeparator x
|
| 723 | - -> map PkgDbPath (splitSearchPath xs) ++ system_conf_refs
|
|
| 725 | + -> map (PkgDbPath . unsafeEncodeUtf) (splitSearchPath xs) ++ system_conf_refs
|
|
| 724 | 726 | | otherwise
|
| 725 | - -> map PkgDbPath (splitSearchPath path)
|
|
| 727 | + -> map (PkgDbPath . unsafeEncodeUtf) (splitSearchPath path)
|
|
| 726 | 728 | |
| 727 | 729 | -- Apply the package DB-related flags from the command line to get the
|
| 728 | 730 | -- final list of package DBs.
|
| ... | ... | @@ -758,7 +760,7 @@ resolveUnitDatabase cfg UserPkgDb = runMaybeT $ do |
| 758 | 760 | let pkgconf = dir </> unitConfigDBName cfg
|
| 759 | 761 | exist <- tryMaybeT $ doesDirectoryExist pkgconf
|
| 760 | 762 | if exist then return pkgconf else mzero
|
| 761 | -resolveUnitDatabase _ (PkgDbPath name) = return $ Just name
|
|
| 763 | +resolveUnitDatabase _ (PkgDbPath name) = return $ Just (fromMaybe undefined (decodeUtf name))
|
|
| 762 | 764 | |
| 763 | 765 | readUnitDatabase :: Logger -> UnitConfig -> FilePath -> IO (UnitDatabase UnitId)
|
| 764 | 766 | readUnitDatabase logger cfg conf_file = do
|
| ... | ... | @@ -790,7 +792,7 @@ readUnitDatabase logger cfg conf_file = do |
| 790 | 792 | pkg_configs1 = map (mungeUnitInfo top_dir pkgroot . mapUnitInfo (\(UnitKey x) -> UnitId x) . mkUnitKeyInfo)
|
| 791 | 793 | proto_pkg_configs
|
| 792 | 794 | --
|
| 793 | - return $ UnitDatabase conf_file' pkg_configs1
|
|
| 795 | + return $ UnitDatabase (unsafeEncodeUtf conf_file') pkg_configs1
|
|
| 794 | 796 | where
|
| 795 | 797 | readDirStyleUnitInfo conf_dir = do
|
| 796 | 798 | let filename = conf_dir </> "package.cache"
|
| ... | ... | @@ -1388,7 +1390,7 @@ mergeDatabases logger = foldM merge (emptyUniqMap, emptyUniqMap) . zip [1..] |
| 1388 | 1390 | where
|
| 1389 | 1391 | merge (pkg_map, prec_map) (i, UnitDatabase db_path db) = do
|
| 1390 | 1392 | debugTraceMsg logger 2 $
|
| 1391 | - text "loading package database" <+> text db_path
|
|
| 1393 | + text "loading package database" <+> text (fromMaybe "invalid path" (decodeUtf db_path))
|
|
| 1392 | 1394 | forM_ (Set.toList override_set) $ \pkg ->
|
| 1393 | 1395 | debugTraceMsg logger 2 $
|
| 1394 | 1396 | text "package" <+> ppr pkg <+>
|