ghc-boot 9.2.2 → 9.4.1
raw patch · 10 files changed
+170/−90 lines, 10 filesdep ~basedep ~ghc-boot-thbuild-type:Customsetup-changedPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, ghc-boot-th
API changes (from Hackage documentation)
- GHC.Platform.ArchOS: ArchSPARC :: Arch
- GHC.Platform.ArchOS: ArchSPARC64 :: Arch
- GHC.Unit.Database: instance (GHC.Classes.Eq uid, GHC.Classes.Eq compid, GHC.Classes.Eq modulename, GHC.Classes.Eq mod, GHC.Classes.Eq srcpkgid, GHC.Classes.Eq srcpkgname) => GHC.Classes.Eq (GHC.Unit.Database.GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod)
- GHC.Unit.Database: instance (GHC.Show.Show uid, GHC.Show.Show compid, GHC.Show.Show modulename, GHC.Show.Show mod, GHC.Show.Show srcpkgid, GHC.Show.Show srcpkgname) => GHC.Show.Show (GHC.Unit.Database.GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod)
+ GHC.Platform.ArchOS: instance GHC.Classes.Ord GHC.Platform.ArchOS.Arch
+ GHC.Platform.ArchOS: instance GHC.Classes.Ord GHC.Platform.ArchOS.ArchOS
+ GHC.Platform.ArchOS: instance GHC.Classes.Ord GHC.Platform.ArchOS.ArmABI
+ GHC.Platform.ArchOS: instance GHC.Classes.Ord GHC.Platform.ArchOS.ArmISA
+ GHC.Platform.ArchOS: instance GHC.Classes.Ord GHC.Platform.ArchOS.ArmISAExt
+ GHC.Platform.ArchOS: instance GHC.Classes.Ord GHC.Platform.ArchOS.OS
+ GHC.Platform.ArchOS: instance GHC.Classes.Ord GHC.Platform.ArchOS.PPC_64ABI
+ GHC.Unit.Database: instance (GHC.Classes.Eq uid, GHC.Classes.Eq modulename, GHC.Classes.Eq mod, GHC.Classes.Eq srcpkgid, GHC.Classes.Eq srcpkgname) => GHC.Classes.Eq (GHC.Unit.Database.GenericUnitInfo srcpkgid srcpkgname uid modulename mod)
+ GHC.Unit.Database: instance (GHC.Show.Show uid, GHC.Show.Show modulename, GHC.Show.Show mod, GHC.Show.Show srcpkgid, GHC.Show.Show srcpkgname) => GHC.Show.Show (GHC.Unit.Database.GenericUnitInfo srcpkgid srcpkgname uid modulename mod)
- GHC.Unit.Database: GenericUnitInfo :: uid -> compid -> [(modulename, mod)] -> srcpkgid -> srcpkgname -> Version -> Maybe srcpkgname -> ShortText -> [uid] -> [(uid, ShortText)] -> [FilePathST] -> [ShortText] -> [ShortText] -> [ShortText] -> [FilePathST] -> [FilePathST] -> [ShortText] -> [FilePathST] -> [ShortText] -> [ShortText] -> [ShortText] -> [FilePathST] -> [FilePathST] -> [FilePathST] -> [(modulename, Maybe mod)] -> [modulename] -> Bool -> Bool -> Bool -> GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod
+ GHC.Unit.Database: GenericUnitInfo :: uid -> uid -> [(modulename, mod)] -> srcpkgid -> srcpkgname -> Version -> Maybe srcpkgname -> ShortText -> [uid] -> [(uid, ShortText)] -> [FilePathST] -> [ShortText] -> [ShortText] -> [ShortText] -> [FilePathST] -> [FilePathST] -> [ShortText] -> [FilePathST] -> [ShortText] -> [ShortText] -> [ShortText] -> [FilePathST] -> [FilePathST] -> [FilePathST] -> [(modulename, Maybe mod)] -> [modulename] -> Bool -> Bool -> Bool -> GenericUnitInfo srcpkgid srcpkgname uid modulename mod
- GHC.Unit.Database: [unitAbiDepends] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [(uid, ShortText)]
+ GHC.Unit.Database: [unitAbiDepends] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [(uid, ShortText)]
- GHC.Unit.Database: [unitAbiHash] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> ShortText
+ GHC.Unit.Database: [unitAbiHash] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> ShortText
- GHC.Unit.Database: [unitCcOptions] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [ShortText]
+ GHC.Unit.Database: [unitCcOptions] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [ShortText]
- GHC.Unit.Database: [unitComponentName] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> Maybe srcpkgname
+ GHC.Unit.Database: [unitComponentName] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> Maybe srcpkgname
- GHC.Unit.Database: [unitDepends] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [uid]
+ GHC.Unit.Database: [unitDepends] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [uid]
- GHC.Unit.Database: [unitExposedModules] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [(modulename, Maybe mod)]
+ GHC.Unit.Database: [unitExposedModules] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [(modulename, Maybe mod)]
- GHC.Unit.Database: [unitExtDepFrameworkDirs] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [FilePathST]
+ GHC.Unit.Database: [unitExtDepFrameworkDirs] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [FilePathST]
- GHC.Unit.Database: [unitExtDepFrameworks] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [ShortText]
+ GHC.Unit.Database: [unitExtDepFrameworks] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [ShortText]
- GHC.Unit.Database: [unitExtDepLibsGhc] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [ShortText]
+ GHC.Unit.Database: [unitExtDepLibsGhc] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [ShortText]
- GHC.Unit.Database: [unitExtDepLibsSys] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [ShortText]
+ GHC.Unit.Database: [unitExtDepLibsSys] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [ShortText]
- GHC.Unit.Database: [unitHaddockHTMLs] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [FilePathST]
+ GHC.Unit.Database: [unitHaddockHTMLs] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [FilePathST]
- GHC.Unit.Database: [unitHaddockInterfaces] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [FilePathST]
+ GHC.Unit.Database: [unitHaddockInterfaces] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [FilePathST]
- GHC.Unit.Database: [unitHiddenModules] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [modulename]
+ GHC.Unit.Database: [unitHiddenModules] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [modulename]
- GHC.Unit.Database: [unitId] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> uid
+ GHC.Unit.Database: [unitId] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> uid
- GHC.Unit.Database: [unitImportDirs] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [FilePathST]
+ GHC.Unit.Database: [unitImportDirs] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [FilePathST]
- GHC.Unit.Database: [unitIncludeDirs] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [FilePathST]
+ GHC.Unit.Database: [unitIncludeDirs] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [FilePathST]
- GHC.Unit.Database: [unitIncludes] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [ShortText]
+ GHC.Unit.Database: [unitIncludes] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [ShortText]
- GHC.Unit.Database: [unitInstanceOf] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> compid
+ GHC.Unit.Database: [unitInstanceOf] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> uid
- GHC.Unit.Database: [unitInstantiations] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [(modulename, mod)]
+ GHC.Unit.Database: [unitInstantiations] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [(modulename, mod)]
- GHC.Unit.Database: [unitIsExposed] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> Bool
+ GHC.Unit.Database: [unitIsExposed] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> Bool
- GHC.Unit.Database: [unitIsIndefinite] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> Bool
+ GHC.Unit.Database: [unitIsIndefinite] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> Bool
- GHC.Unit.Database: [unitIsTrusted] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> Bool
+ GHC.Unit.Database: [unitIsTrusted] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> Bool
- GHC.Unit.Database: [unitLibraries] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [ShortText]
+ GHC.Unit.Database: [unitLibraries] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [ShortText]
- GHC.Unit.Database: [unitLibraryDirs] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [FilePathST]
+ GHC.Unit.Database: [unitLibraryDirs] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [FilePathST]
- GHC.Unit.Database: [unitLibraryDynDirs] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [FilePathST]
+ GHC.Unit.Database: [unitLibraryDynDirs] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [FilePathST]
- GHC.Unit.Database: [unitLinkerOptions] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> [ShortText]
+ GHC.Unit.Database: [unitLinkerOptions] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> [ShortText]
- GHC.Unit.Database: [unitPackageId] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> srcpkgid
+ GHC.Unit.Database: [unitPackageId] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> srcpkgid
- GHC.Unit.Database: [unitPackageName] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> srcpkgname
+ GHC.Unit.Database: [unitPackageName] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> srcpkgname
- GHC.Unit.Database: [unitPackageVersion] :: GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod -> Version
+ GHC.Unit.Database: [unitPackageVersion] :: GenericUnitInfo srcpkgid srcpkgname uid modulename mod -> Version
- GHC.Unit.Database: data GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod
+ GHC.Unit.Database: data GenericUnitInfo srcpkgid srcpkgname uid modulename mod
- GHC.Unit.Database: mapGenericUnitInfo :: (uid1 -> uid2) -> (cid1 -> cid2) -> (srcpkg1 -> srcpkg2) -> (srcpkgname1 -> srcpkgname2) -> (modname1 -> modname2) -> (mod1 -> mod2) -> GenericUnitInfo cid1 srcpkg1 srcpkgname1 uid1 modname1 mod1 -> GenericUnitInfo cid2 srcpkg2 srcpkgname2 uid2 modname2 mod2
+ GHC.Unit.Database: mapGenericUnitInfo :: (uid1 -> uid2) -> (srcpkg1 -> srcpkg2) -> (srcpkgname1 -> srcpkgname2) -> (modname1 -> modname2) -> (mod1 -> mod2) -> GenericUnitInfo srcpkg1 srcpkgname1 uid1 modname1 mod1 -> GenericUnitInfo srcpkg2 srcpkgname2 uid2 modname2 mod2
- GHC.Unit.Database: mungeUnitInfoPaths :: FilePathST -> FilePathST -> GenericUnitInfo a b c d e f -> GenericUnitInfo a b c d e f
+ GHC.Unit.Database: mungeUnitInfoPaths :: FilePathST -> FilePathST -> GenericUnitInfo a b c d e -> GenericUnitInfo a b c d e
- GHC.Unit.Database: type DbUnitInfo = GenericUnitInfo ByteString ByteString ByteString ByteString ByteString DbModule
+ GHC.Unit.Database: type DbUnitInfo = GenericUnitInfo ByteString ByteString ByteString ByteString DbModule
Files
- GHC/BaseDir.hs +3/−3
- GHC/Data/ShortText.hs +1/−1
- GHC/HandleEncoding.hs +2/−2
- GHC/Platform/ArchOS.hs +7/−11
- GHC/Platform/Host.hs +0/−12
- GHC/Unit/Database.hs +26/−32
- GHC/Utils/Encoding.hs +1/−1
- GHC/Version.hs +0/−21
- Setup.hs +120/−0
- ghc-boot.cabal +10/−7
GHC/BaseDir.hs view
@@ -2,7 +2,6 @@ -- | Note [Base Dir] -- ~~~~~~~~~~~~~~~~~--- -- GHC's base directory or top directory containers miscellaneous settings and -- the package database. The main compiler of course needs this directory to -- read those settings and read and write packages. ghc-pkg uses it to find the@@ -12,6 +11,7 @@ -- will expand `${top_dir}` inside strings so GHC doesn't need to know it's on -- installation location at build time. ghc-pkg also can expand those variables -- and so needs the top dir location to do that too.+ module GHC.BaseDir where import Prelude -- See Note [Why do we import Prelude here?]@@ -23,7 +23,7 @@ #if defined(mingw32_HOST_OS) import System.Environment (getExecutablePath) -- POSIX-#elif defined(darwin_HOST_OS) || defined(linux_HOST_OS) || defined(freebsd_HOST_OS)+#elif defined(darwin_HOST_OS) || defined(linux_HOST_OS) || defined(freebsd_HOST_OS) || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS) import System.Environment (getExecutablePath) #endif @@ -52,7 +52,7 @@ -- that is running this function. rootDir :: FilePath -> FilePath rootDir = takeDirectory . takeDirectory . normalise-#elif defined(darwin_HOST_OS) || defined(linux_HOST_OS) || defined(freebsd_HOST_OS)+#elif defined(darwin_HOST_OS) || defined(linux_HOST_OS) || defined(freebsd_HOST_OS) || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS) -- on unix, this is a bit more confusing. -- The layout right now is something like --
GHC/Data/ShortText.hs view
@@ -14,7 +14,7 @@ -- -- This can be removed when we exit the boot compiler window. Thus once we drop GHC-9.2 as boot compiler, -- we can drop this code as well.-#if GHC_STAGE < 1+#if !MIN_VERSION_GLASGOW_HASKELL(9,3,0,0) {-# OPTIONS_GHC -fignore-interface-pragmas #-} #endif -- |
GHC/HandleEncoding.hs view
@@ -10,8 +10,8 @@ -- GHC produces output regardless of OS. configureHandleEncoding :: IO () configureHandleEncoding = do- env <- getEnvironment- case lookup "GHC_CHARENC" env of+ mb_val <- lookupEnv "GHC_CHARENC"+ case mb_val of Just "UTF-8" -> do hSetEncoding stdout utf8 hSetEncoding stderr utf8
GHC/Platform/ArchOS.hs view
@@ -24,7 +24,7 @@ { archOS_arch :: Arch , archOS_OS :: OS }- deriving (Read, Show, Eq)+ deriving (Read, Show, Eq, Ord) -- | Architectures --@@ -38,8 +38,6 @@ | ArchPPC | ArchPPC_64 PPC_64ABI | ArchS390X- | ArchSPARC- | ArchSPARC64 | ArchARM ArmISA [ArmISAExt] ArmABI | ArchAArch64 | ArchAlpha@@ -47,14 +45,14 @@ | ArchMipsel | ArchRISCV64 | ArchJavaScript- deriving (Read, Show, Eq)+ deriving (Read, Show, Eq, Ord) -- | ARM Instruction Set Architecture data ArmISA = ARMv5 | ARMv6 | ARMv7- deriving (Read, Show, Eq)+ deriving (Read, Show, Eq, Ord) -- | ARM extensions data ArmISAExt@@ -63,20 +61,20 @@ | VFPv3D16 | NEON | IWMMX2- deriving (Read, Show, Eq)+ deriving (Read, Show, Eq, Ord) -- | ARM ABI data ArmABI = SOFT | SOFTFP | HARD- deriving (Read, Show, Eq)+ deriving (Read, Show, Eq, Ord) -- | PowerPC 64-bit ABI data PPC_64ABI = ELF_V1 -- ^ PowerPC64 | ELF_V2 -- ^ PowerPC64 LE- deriving (Read, Show, Eq)+ deriving (Read, Show, Eq, Ord) -- | Operating systems. --@@ -97,7 +95,7 @@ | OSQNXNTO | OSAIX | OSHurd- deriving (Read, Show, Eq)+ deriving (Read, Show, Eq, Ord) -- Note [Platform Syntax]@@ -126,8 +124,6 @@ ArchPPC_64 ELF_V1 -> "powerpc64" ArchPPC_64 ELF_V2 -> "powerpc64le" ArchS390X -> "s390x"- ArchSPARC -> "sparc"- ArchSPARC64 -> "sparc64" ArchARM ARMv5 _ _ -> "armv5" ArchARM ARMv6 _ _ -> "armv6" ArchARM ARMv7 _ _ -> "armv7"
− GHC/Platform/Host.hs
@@ -1,12 +0,0 @@-module GHC.Platform.Host where--import GHC.Platform.ArchOS--hostPlatformArch :: Arch-hostPlatformArch = ArchX86_64--hostPlatformOS :: OS-hostPlatformOS = OSLinux--hostPlatformArchOS :: ArchOS-hostPlatformArchOS = ArchOS hostPlatformArch hostPlatformOS
GHC/Unit/Database.hs view
@@ -88,8 +88,9 @@ import Control.Monad (when) import System.FilePath as FilePath #if !defined(mingw32_HOST_OS)+import Data.Bits ((.|.)) import System.Posix.Files-import GHC.IO.Exception (ioe_type, IOErrorType(NoSuchThing))+import System.Posix.Types (FileMode) #endif import System.IO import System.IO.Error@@ -99,7 +100,7 @@ import System.Directory -- | @ghc-boot@'s UnitInfo, serialized to the database.-type DbUnitInfo = GenericUnitInfo BS.ByteString BS.ByteString BS.ByteString BS.ByteString BS.ByteString DbModule+type DbUnitInfo = GenericUnitInfo BS.ByteString BS.ByteString BS.ByteString BS.ByteString DbModule -- | Information about an unit (a unit is an installed module library). --@@ -109,14 +110,16 @@ -- Some types are left as parameters to be instantiated differently in ghc-pkg -- and in ghc itself. ---data GenericUnitInfo compid srcpkgid srcpkgname uid modulename mod = GenericUnitInfo+data GenericUnitInfo srcpkgid srcpkgname uid modulename mod = GenericUnitInfo { unitId :: uid -- ^ Unique unit identifier that is used during compilation (e.g. to -- generate symbols). - , unitInstanceOf :: compid+ , unitInstanceOf :: uid -- ^ Identifier of an indefinite unit (i.e. with module holes) that this -- unit is an instance of.+ --+ -- For non instantiated units, unitInstanceOf=unitId , unitInstantiations :: [(modulename, mod)] -- ^ How this unit instantiates some of its module holes. Map hole module@@ -252,16 +255,15 @@ -- | Convert between GenericUnitInfo instances mapGenericUnitInfo :: (uid1 -> uid2)- -> (cid1 -> cid2) -> (srcpkg1 -> srcpkg2) -> (srcpkgname1 -> srcpkgname2) -> (modname1 -> modname2) -> (mod1 -> mod2)- -> (GenericUnitInfo cid1 srcpkg1 srcpkgname1 uid1 modname1 mod1- -> GenericUnitInfo cid2 srcpkg2 srcpkgname2 uid2 modname2 mod2)-mapGenericUnitInfo fuid fcid fsrcpkg fsrcpkgname fmodname fmod g@(GenericUnitInfo {..}) =+ -> (GenericUnitInfo srcpkg1 srcpkgname1 uid1 modname1 mod1+ -> GenericUnitInfo srcpkg2 srcpkgname2 uid2 modname2 mod2)+mapGenericUnitInfo fuid fsrcpkg fsrcpkgname fmodname fmod g@(GenericUnitInfo {..}) = g { unitId = fuid unitId- , unitInstanceOf = fcid unitInstanceOf+ , unitInstanceOf = fuid unitInstanceOf , unitInstantiations = fmap (bimap fmodname fmod) unitInstantiations , unitPackageId = fsrcpkg unitPackageId , unitPackageName = fsrcpkgname unitPackageName@@ -412,8 +414,14 @@ -- | Write the whole of the package DB, both parts. -- writePackageDb :: Binary pkgs => FilePath -> [DbUnitInfo] -> pkgs -> IO ()-writePackageDb file ghcPkgs ghcPkgPart =+writePackageDb file ghcPkgs ghcPkgPart = do writeFileAtomic file (runPut putDbForGhcPkg)+#if !defined(mingw32_HOST_OS)+ addFileMode file 0o444+ -- ^ In case the current umask is too restrictive force all read bits to+ -- allow access.+#endif+ return () where putDbForGhcPkg = do putHeader@@ -425,6 +433,13 @@ ghcPartLen = fromIntegral (BS.Lazy.length ghcPart) ghcPart = encode ghcPkgs +#if !defined(mingw32_HOST_OS)+addFileMode :: FilePath -> FileMode -> IO ()+addFileMode file m = do+ o <- fileMode <$> getFileStatus file+ setFileMode file (m .|. o)+#endif+ getHeader :: Get (Word32, Word32) getHeader = do magic <- getByteString (BS.length headerMagic)@@ -507,26 +522,6 @@ -- Copied from Cabal's Distribution.Simple.Utils. writeFileAtomic :: FilePath -> BS.Lazy.ByteString -> IO () writeFileAtomic targetPath content = do- -- Figure out how to update the file mode after we create the temporary file- let no_update _path = return ()-#if !defined(mingw32_HOST_OS)- let on_error ioe =- -- If the file doesn't yet exist then just use the default owner and- -- mode.- case ioe_type ioe of- NoSuchThing -> return no_update- _ -> ioError ioe- let handleIO :: (IOException -> IO a) -> IO a -> IO a- handleIO = flip catch- set_metadata <- handleIO on_error $ do- status <- getFileStatus targetPath- return $ \path -> do- setFileMode path (fileMode status)- setOwnerAndGroup path (fileOwner status) (fileGroup status)-#else- let set_metadata = no_update-#endif- let (targetDir, targetFile) = splitFileName targetPath Exception.bracketOnError (openBinaryTempFileWithDefaultPermissions targetDir $ targetFile <.> "tmp")@@ -534,7 +529,6 @@ (\(tmpPath, handle) -> do BS.Lazy.hPut handle content hClose handle- set_metadata tmpPath renameFile tmpPath targetPath) instance Binary DbUnitInfo where@@ -711,7 +705,7 @@ -- Also perform a similar substitution for the older GHC-specific -- "$topdir" variable. The "topdir" is the location of the ghc -- installation (obtained from the -B option).-mungeUnitInfoPaths :: FilePathST -> FilePathST -> GenericUnitInfo a b c d e f -> GenericUnitInfo a b c d e f+mungeUnitInfoPaths :: FilePathST -> FilePathST -> GenericUnitInfo a b c d e -> GenericUnitInfo a b c d e mungeUnitInfoPaths top_dir pkgroot pkg = -- TODO: similar code is duplicated in utils/ghc-pkg/Main.hs pkg
GHC/Utils/Encoding.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE CPP #-}-{-# LANGUAGE BangPatterns, MagicHash, UnboxedTuples #-}+{-# LANGUAGE BangPatterns, MagicHash, UnboxedTuples, MultiWayIf #-} {-# OPTIONS_GHC -O2 -fno-warn-name-shadowing #-} -- We always optimise this, otherwise performance of a non-optimised -- compiler is severely affected. This module used to live in the `ghc`
− GHC/Version.hs
@@ -1,21 +0,0 @@-module GHC.Version where--import Prelude -- See Note [Why do we import Prelude here?]--cProjectGitCommitId :: String-cProjectGitCommitId = "fbaee70d380973f71fa6e9e15be746532e5a4fc5"--cProjectVersion :: String-cProjectVersion = "9.2.2"--cProjectVersionInt :: String-cProjectVersionInt = "902"--cProjectPatchLevel :: String-cProjectPatchLevel = "2"--cProjectPatchLevel1 :: String-cProjectPatchLevel1 = "2"--cProjectPatchLevel2 :: String-cProjectPatchLevel2 = ""
+ Setup.hs view
@@ -0,0 +1,120 @@+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE LambdaCase #-}+module Main where++import Distribution.Simple+import Distribution.Simple.BuildPaths+import Distribution.Types.LocalBuildInfo+import Distribution.Verbosity+import Distribution.Simple.Program+import Distribution.Simple.Utils+import Distribution.Simple.Setup++import System.IO+import System.Directory+import System.FilePath+import System.Environment+import Control.Monad+import Data.Char+import GHC.ResponseFile++main :: IO ()+main = defaultMainWithHooks ghcHooks+ where+ ghcHooks = simpleUserHooks+ { postConf = \args cfg pd lbi -> do+ let verbosity = fromFlagOrDefault minBound (configVerbosity cfg)+ ghcAutogen verbosity lbi+ postConf simpleUserHooks args cfg pd lbi+ }++ghcAutogen :: Verbosity -> LocalBuildInfo -> IO ()+ghcAutogen verbosity lbi@LocalBuildInfo{..} = do+ -- Get compiler/ root directory from the cabal file+ let Just compilerRoot = takeDirectory <$> pkgDescrFile++ let platformHostFile = "GHC/Platform/Host.hs"+ platformHostPath = autogenPackageModulesDir lbi </> platformHostFile+ ghcVersionFile = "GHC/Version.hs"+ ghcVersionPath = autogenPackageModulesDir lbi </> ghcVersionFile++ -- Get compiler settings+ settings <- lookupEnv "HADRIAN_SETTINGS" >>= \case+ Just settings -> pure $ Left $ read settings+ Nothing -> do+ (ghc,withPrograms) <- requireProgram normal ghcProgram withPrograms+ Right . read <$> getProgramOutput normal ghc ["--info"]++ -- Write GHC.Platform.Host+ createDirectoryIfMissingVerbose verbosity True (takeDirectory platformHostPath)+ rewriteFileEx verbosity platformHostPath (generatePlatformHostHs settings)++ -- Write GHC.Version+ createDirectoryIfMissingVerbose verbosity True (takeDirectory ghcVersionPath)+ rewriteFileEx verbosity ghcVersionPath (generateVersionHs settings)++-- | Takes either a list of hadrian generated settings, or a list of settings from ghc --info,+-- and keys in both lists, and looks up the value in the appropriate list+getSetting :: Either [(String,String)] [(String,String)] -> String -> String -> Either String String+getSetting settings kh kr = case settings of+ Left settings -> go settings kh+ Right settings -> go settings kr+ where+ go settings k = case lookup k settings of+ Nothing -> Left (show k ++ " not found in settings: " ++ show settings)+ Just v -> Right v++generatePlatformHostHs :: Either [(String,String)] [(String,String)] -> String+generatePlatformHostHs settings = either error id $ do+ let getSetting' = getSetting settings+ cHostPlatformArch <- getSetting' "hostPlatformArch" "target arch"+ cHostPlatformOS <- getSetting' "hostPlatformOS" "target os"+ return $ unlines+ [ "module GHC.Platform.Host where"+ , ""+ , "import GHC.Platform.ArchOS"+ , ""+ , "hostPlatformArch :: Arch"+ , "hostPlatformArch = " ++ cHostPlatformArch+ , ""+ , "hostPlatformOS :: OS"+ , "hostPlatformOS = " ++ cHostPlatformOS+ , ""+ , "hostPlatformArchOS :: ArchOS"+ , "hostPlatformArchOS = ArchOS hostPlatformArch hostPlatformOS"+ ]++generateVersionHs :: Either [(String,String)] [(String,String)] -> String+generateVersionHs settings = either error id $ do+ let getSetting' = getSetting settings+ cProjectGitCommitId <- getSetting' "cProjectGitCommitId" "Project Git commit id"+ cProjectVersion <- getSetting' "cProjectVersion" "Project version"+ cProjectVersionInt <- getSetting' "cProjectVersionInt" "Project Version Int"++ cProjectPatchLevel <- getSetting' "cProjectPatchLevel" "Project Patch Level"+ cProjectPatchLevel1 <- getSetting' "cProjectPatchLevel1" "Project Patch Level1"+ cProjectPatchLevel2 <- getSetting' "cProjectPatchLevel2" "Project Patch Level2"+ return $ unlines+ [ "module GHC.Version where"+ , ""+ , "import Prelude -- See Note [Why do we import Prelude here?]"+ , ""+ , "cProjectGitCommitId :: String"+ , "cProjectGitCommitId = " ++ show cProjectGitCommitId+ , ""+ , "cProjectVersion :: String"+ , "cProjectVersion = " ++ show cProjectVersion+ , ""+ , "cProjectVersionInt :: String"+ , "cProjectVersionInt = " ++ show cProjectVersionInt+ , ""+ , "cProjectPatchLevel :: String"+ , "cProjectPatchLevel = " ++ show cProjectPatchLevel+ , ""+ , "cProjectPatchLevel1 :: String"+ , "cProjectPatchLevel1 = " ++ show cProjectPatchLevel1+ , ""+ , "cProjectPatchLevel2 :: String"+ , "cProjectPatchLevel2 = " ++ show cProjectPatchLevel2+ ]
ghc-boot.cabal view
@@ -5,7 +5,7 @@ -- ghc-boot.cabal. name: ghc-boot-version: 9.2.2+version: 9.4.1 license: BSD-3-Clause license-file: LICENSE category: GHC@@ -24,9 +24,12 @@ The package database format and this library are constructed in such a way that while ghc-pkg depends on Cabal, the GHC library and program do not have to depend on Cabal.-build-type: Simple+build-type: Custom extra-source-files: changelog.md +custom-setup+ setup-depends: base >= 3 && < 5, Cabal >= 1.6 && <3.9, directory, filepath+ source-repository head type: git location: https://gitlab.haskell.org/ghc/ghc.git@@ -62,18 +65,18 @@ , GHC.Lexeme -- but done by Hadrian- -- autogen-modules:- -- GHC.Version- -- GHC.Platform.Host+ autogen-modules:+ GHC.Version+ GHC.Platform.Host - build-depends: base >= 4.7 && < 4.17,+ build-depends: base >= 4.7 && < 4.18, binary == 0.8.*, bytestring >= 0.10 && < 0.12, containers >= 0.5 && < 0.7, directory >= 1.2 && < 1.4, filepath >= 1.3 && < 1.5, deepseq >= 1.4 && < 1.5,- ghc-boot-th == 9.2.2+ ghc-boot-th == 9.4.1 if !os(windows) build-depends: unix >= 2.7 && < 2.8