Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
bb50afba02 | ||
|
501e639f6b | ||
|
6ff0bc0482 |
6
.gitignore
vendored
6
.gitignore
vendored
@ -25,9 +25,3 @@ testsuite-6.12.3.tar.bz2
|
||||
/ghc-8.0.2/
|
||||
/ghc-8.2.2-src.tar.xz
|
||||
/ghc-8.2.2-testsuite.tar.xz
|
||||
/ghc-8.4.4-src.tar.xz
|
||||
/ghc-8.6.5-src.tar.xz
|
||||
/ghc-8.8.3-src.tar.xz
|
||||
/ghc-8.8.3-src.tar.xz.sig
|
||||
/ghc-8.8.4-src.tar.xz.sig
|
||||
/ghc-8.8.4-src.tar.xz
|
||||
|
@ -1,277 +0,0 @@
|
||||
From 6e361d895dda4600a85e01c72ff219474b5c7190 Mon Sep 17 00:00:00 2001
|
||||
From: Kavon Farvardin <kavon@farvard.in>
|
||||
Date: Thu, 4 Oct 2018 13:44:55 -0400
|
||||
Subject: [PATCH] Multiple fixes / improvements for LLVM backend
|
||||
|
||||
- Fix for #13904 -- stop "trashing" callee-saved registers, since it is
|
||||
not actually doing anything useful.
|
||||
|
||||
- Fix for #14251 -- fixes the calling convention for functions passing
|
||||
raw SSE-register values by adding padding as needed to get the values
|
||||
in the right registers. This problem cropped up when some args were
|
||||
unused an dropped from the live list.
|
||||
|
||||
- Fixed a typo in 'readnone' attribute
|
||||
|
||||
- Added 'lower-expect' pass to level 0 LLVM optimization passes to
|
||||
improve block layout in LLVM for stack checks, etc.
|
||||
|
||||
Test Plan: `make test WAYS=optllvm` and `make test WAYS=llvm`
|
||||
|
||||
Reviewers: bgamari, simonmar, angerman
|
||||
|
||||
Reviewed By: angerman
|
||||
|
||||
Subscribers: rwbarton, carter
|
||||
|
||||
GHC Trac Issues: #13904, #14251
|
||||
|
||||
Differential Revision: https://phabricator.haskell.org/D5190
|
||||
|
||||
(cherry picked from commit adcb5fb47c0942671d409b940d8884daa9359ca4)
|
||||
---
|
||||
compiler/llvmGen/Llvm/Types.hs | 2 +-
|
||||
compiler/llvmGen/LlvmCodeGen/Base.hs | 62 ++++++++++++++++++++----
|
||||
compiler/llvmGen/LlvmCodeGen/CodeGen.hs | 59 +++++-----------------
|
||||
compiler/main/DriverPipeline.hs | 2 +-
|
||||
testsuite/tests/codeGen/should_run/all.T | 4 +-
|
||||
5 files changed, 67 insertions(+), 62 deletions(-)
|
||||
|
||||
diff --git a/compiler/llvmGen/Llvm/Types.hs b/compiler/llvmGen/Llvm/Types.hs
|
||||
index 87111499fc0..c1c51afcf0f 100644
|
||||
--- a/compiler/llvmGen/Llvm/Types.hs
|
||||
+++ b/compiler/llvmGen/Llvm/Types.hs
|
||||
@@ -560,7 +560,7 @@ instance Outputable LlvmFuncAttr where
|
||||
ppr OptSize = text "optsize"
|
||||
ppr NoReturn = text "noreturn"
|
||||
ppr NoUnwind = text "nounwind"
|
||||
- ppr ReadNone = text "readnon"
|
||||
+ ppr ReadNone = text "readnone"
|
||||
ppr ReadOnly = text "readonly"
|
||||
ppr Ssp = text "ssp"
|
||||
ppr SspReq = text "ssqreq"
|
||||
diff --git a/compiler/llvmGen/LlvmCodeGen/Base.hs b/compiler/llvmGen/LlvmCodeGen/Base.hs
|
||||
index 6e20da48c1b..ec91bacc4c8 100644
|
||||
--- a/compiler/llvmGen/LlvmCodeGen/Base.hs
|
||||
+++ b/compiler/llvmGen/LlvmCodeGen/Base.hs
|
||||
@@ -26,7 +26,7 @@ module LlvmCodeGen.Base (
|
||||
|
||||
cmmToLlvmType, widthToLlvmFloat, widthToLlvmInt, llvmFunTy,
|
||||
llvmFunSig, llvmFunArgs, llvmStdFunAttrs, llvmFunAlign, llvmInfAlign,
|
||||
- llvmPtrBits, tysToParams, llvmFunSection,
|
||||
+ llvmPtrBits, tysToParams, llvmFunSection, padLiveArgs, isSSE,
|
||||
|
||||
strCLabel_llvm, strDisplayName_llvm, strProcedureName_llvm,
|
||||
getGlobalPtr, generateExternDecls,
|
||||
@@ -58,6 +58,8 @@ import ErrUtils
|
||||
import qualified Stream
|
||||
|
||||
import Control.Monad (ap)
|
||||
+import Data.List (sort)
|
||||
+import Data.Maybe (mapMaybe)
|
||||
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- * Some Data Types
|
||||
@@ -147,16 +149,58 @@ llvmFunSection dflags lbl
|
||||
-- | A Function's arguments
|
||||
llvmFunArgs :: DynFlags -> LiveGlobalRegs -> [LlvmVar]
|
||||
llvmFunArgs dflags live =
|
||||
- map (lmGlobalRegArg dflags) (filter isPassed (activeStgRegs platform))
|
||||
+ map (lmGlobalRegArg dflags) (filter isPassed allRegs)
|
||||
where platform = targetPlatform dflags
|
||||
- isLive r = not (isSSE r) || r `elem` alwaysLive || r `elem` live
|
||||
+ allRegs = activeStgRegs platform
|
||||
+ paddedLive = map (\(_,r) -> r) $ padLiveArgs live
|
||||
+ isLive r = r `elem` alwaysLive || r `elem` paddedLive
|
||||
isPassed r = not (isSSE r) || isLive r
|
||||
- isSSE (FloatReg _) = True
|
||||
- isSSE (DoubleReg _) = True
|
||||
- isSSE (XmmReg _) = True
|
||||
- isSSE (YmmReg _) = True
|
||||
- isSSE (ZmmReg _) = True
|
||||
- isSSE _ = False
|
||||
+
|
||||
+
|
||||
+isSSE :: GlobalReg -> Bool
|
||||
+isSSE (FloatReg _) = True
|
||||
+isSSE (DoubleReg _) = True
|
||||
+isSSE (XmmReg _) = True
|
||||
+isSSE (YmmReg _) = True
|
||||
+isSSE (ZmmReg _) = True
|
||||
+isSSE _ = False
|
||||
+
|
||||
+sseRegNum :: GlobalReg -> Maybe Int
|
||||
+sseRegNum (FloatReg i) = Just i
|
||||
+sseRegNum (DoubleReg i) = Just i
|
||||
+sseRegNum (XmmReg i) = Just i
|
||||
+sseRegNum (YmmReg i) = Just i
|
||||
+sseRegNum (ZmmReg i) = Just i
|
||||
+sseRegNum _ = Nothing
|
||||
+
|
||||
+-- the bool indicates whether the global reg was added as padding.
|
||||
+-- the returned list is not sorted in any particular order,
|
||||
+-- but does indicate the set of live registers needed, with SSE padding.
|
||||
+padLiveArgs :: LiveGlobalRegs -> [(Bool, GlobalReg)]
|
||||
+padLiveArgs live = allRegs
|
||||
+ where
|
||||
+ sseRegNums = sort $ mapMaybe sseRegNum live
|
||||
+ (_, padding) = foldl assignSlots (1, []) $ sseRegNums
|
||||
+ allRegs = padding ++ map (\r -> (False, r)) live
|
||||
+
|
||||
+ assignSlots (i, acc) regNum
|
||||
+ | i == regNum = -- don't need padding here
|
||||
+ (i+1, acc)
|
||||
+ | i < regNum = let -- add padding for slots i .. regNum-1
|
||||
+ numNeeded = regNum-i
|
||||
+ acc' = genPad i numNeeded ++ acc
|
||||
+ in
|
||||
+ (regNum+1, acc')
|
||||
+ | otherwise = error "padLiveArgs -- i > regNum ??"
|
||||
+
|
||||
+ genPad start n =
|
||||
+ take n $ flip map (iterate (+1) start) (\i ->
|
||||
+ (True, FloatReg i))
|
||||
+ -- NOTE: Picking float should be fine for the following reasons:
|
||||
+ -- (1) Float aliases with all the other SSE register types on
|
||||
+ -- the given platform.
|
||||
+ -- (2) The argument is not live anyways.
|
||||
+
|
||||
|
||||
-- | Llvm standard fun attributes
|
||||
llvmStdFunAttrs :: [LlvmFuncAttr]
|
||||
diff --git a/compiler/llvmGen/LlvmCodeGen/CodeGen.hs b/compiler/llvmGen/LlvmCodeGen/CodeGen.hs
|
||||
index e812dd445f1..a7121b7909a 100644
|
||||
--- a/compiler/llvmGen/LlvmCodeGen/CodeGen.hs
|
||||
+++ b/compiler/llvmGen/LlvmCodeGen/CodeGen.hs
|
||||
@@ -14,7 +14,7 @@ import LlvmCodeGen.Base
|
||||
import LlvmCodeGen.Regs
|
||||
|
||||
import BlockId
|
||||
-import CodeGen.Platform ( activeStgRegs, callerSaves )
|
||||
+import CodeGen.Platform ( activeStgRegs )
|
||||
import CLabel
|
||||
import Cmm
|
||||
import PprCmm
|
||||
@@ -211,7 +211,6 @@ genCall t@(PrimTarget (MO_Prefetch_Data localityInt)) [] args
|
||||
fptr <- liftExprData $ getFunPtr funTy t
|
||||
argVars' <- castVarsW Signed $ zip argVars argTy
|
||||
|
||||
- doTrashStmts
|
||||
let argSuffix = [mkIntLit i32 0, mkIntLit i32 localityInt, mkIntLit i32 1]
|
||||
statement $ Expr $ Call StdCall fptr (argVars' ++ argSuffix) []
|
||||
| otherwise = panic $ "prefetch locality level integer must be between 0 and 3, given: " ++ (show localityInt)
|
||||
@@ -294,7 +293,6 @@ genCall t@(PrimTarget op) [] args
|
||||
fptr <- getFunPtrW funTy t
|
||||
argVars' <- castVarsW Signed $ zip argVars argTy
|
||||
|
||||
- doTrashStmts
|
||||
let alignVal = mkIntLit i32 align
|
||||
arguments = argVars' ++ (alignVal:isVolVal)
|
||||
statement $ Expr $ Call StdCall fptr arguments []
|
||||
@@ -446,7 +444,6 @@ genCall target res args = runStmtsDecls $ do
|
||||
| never_returns = statement $ Unreachable
|
||||
| otherwise = return ()
|
||||
|
||||
- doTrashStmts
|
||||
|
||||
-- make the actual call
|
||||
case retTy of
|
||||
@@ -1759,12 +1756,9 @@ genLit _ CmmHighStackMark
|
||||
funPrologue :: LiveGlobalRegs -> [CmmBlock] -> LlvmM StmtData
|
||||
funPrologue live cmmBlocks = do
|
||||
|
||||
- trash <- getTrashRegs
|
||||
let getAssignedRegs :: CmmNode O O -> [CmmReg]
|
||||
getAssignedRegs (CmmAssign reg _) = [reg]
|
||||
- -- Calls will trash all registers. Unfortunately, this needs them to
|
||||
- -- be stack-allocated in the first place.
|
||||
- getAssignedRegs (CmmUnsafeForeignCall _ rs _) = map CmmGlobal trash ++ map CmmLocal rs
|
||||
+ getAssignedRegs (CmmUnsafeForeignCall _ rs _) = map CmmLocal rs
|
||||
getAssignedRegs _ = []
|
||||
getRegsBlock (_, body, _) = concatMap getAssignedRegs $ blockToList body
|
||||
assignedRegs = nub $ concatMap (getRegsBlock . blockSplit) cmmBlocks
|
||||
@@ -1794,14 +1788,9 @@ funPrologue live cmmBlocks = do
|
||||
funEpilogue :: LiveGlobalRegs -> LlvmM ([LlvmVar], LlvmStatements)
|
||||
funEpilogue live = do
|
||||
|
||||
- -- Have information and liveness optimisation is enabled?
|
||||
- let liveRegs = alwaysLive ++ live
|
||||
- isSSE (FloatReg _) = True
|
||||
- isSSE (DoubleReg _) = True
|
||||
- isSSE (XmmReg _) = True
|
||||
- isSSE (YmmReg _) = True
|
||||
- isSSE (ZmmReg _) = True
|
||||
- isSSE _ = False
|
||||
+ -- the bool indicates whether the register is padding.
|
||||
+ let alwaysNeeded = map (\r -> (False, r)) alwaysLive
|
||||
+ livePadded = alwaysNeeded ++ padLiveArgs live
|
||||
|
||||
-- Set to value or "undef" depending on whether the register is
|
||||
-- actually live
|
||||
@@ -1813,39 +1802,17 @@ funEpilogue live = do
|
||||
let ty = (pLower . getVarType $ lmGlobalRegVar dflags r)
|
||||
return (Just $ LMLitVar $ LMUndefLit ty, nilOL)
|
||||
platform <- getDynFlag targetPlatform
|
||||
- loads <- flip mapM (activeStgRegs platform) $ \r -> case () of
|
||||
- _ | r `elem` liveRegs -> loadExpr r
|
||||
- | not (isSSE r) -> loadUndef r
|
||||
+ let allRegs = activeStgRegs platform
|
||||
+ loads <- flip mapM allRegs $ \r -> case () of
|
||||
+ _ | (False, r) `elem` livePadded
|
||||
+ -> loadExpr r -- if r is not padding, load it
|
||||
+ | not (isSSE r) || (True, r) `elem` livePadded
|
||||
+ -> loadUndef r
|
||||
| otherwise -> return (Nothing, nilOL)
|
||||
|
||||
let (vars, stmts) = unzip loads
|
||||
return (catMaybes vars, concatOL stmts)
|
||||
|
||||
-
|
||||
--- | A series of statements to trash all the STG registers.
|
||||
---
|
||||
--- In LLVM we pass the STG registers around everywhere in function calls.
|
||||
--- So this means LLVM considers them live across the entire function, when
|
||||
--- in reality they usually aren't. For Caller save registers across C calls
|
||||
--- the saving and restoring of them is done by the Cmm code generator,
|
||||
--- using Cmm local vars. So to stop LLVM saving them as well (and saving
|
||||
--- all of them since it thinks they're always live, we trash them just
|
||||
--- before the call by assigning the 'undef' value to them. The ones we
|
||||
--- need are restored from the Cmm local var and the ones we don't need
|
||||
--- are fine to be trashed.
|
||||
-getTrashStmts :: LlvmM LlvmStatements
|
||||
-getTrashStmts = do
|
||||
- regs <- getTrashRegs
|
||||
- stmts <- flip mapM regs $ \ r -> do
|
||||
- reg <- getCmmReg (CmmGlobal r)
|
||||
- let ty = (pLower . getVarType) reg
|
||||
- return $ Store (LMLitVar $ LMUndefLit ty) reg
|
||||
- return $ toOL stmts
|
||||
-
|
||||
-getTrashRegs :: LlvmM [GlobalReg]
|
||||
-getTrashRegs = do plat <- getLlvmPlatform
|
||||
- return $ filter (callerSaves plat) (activeStgRegs plat)
|
||||
-
|
||||
-- | Get a function pointer to the CLabel specified.
|
||||
--
|
||||
-- This is for Haskell functions, function type is assumed, so doesn't work
|
||||
@@ -1967,7 +1934,3 @@ getCmmRegW = lift . getCmmReg
|
||||
genLoadW :: Atomic -> CmmExpr -> CmmType -> WriterT LlvmAccum LlvmM LlvmVar
|
||||
genLoadW atomic e ty = liftExprData $ genLoad atomic e ty
|
||||
|
||||
-doTrashStmts :: WriterT LlvmAccum LlvmM ()
|
||||
-doTrashStmts = do
|
||||
- stmts <- lift getTrashStmts
|
||||
- tell $ LlvmAccum stmts mempty
|
||||
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
|
||||
index 86dd913461c..f4d5e7f553c 100644
|
||||
--- a/compiler/main/DriverPipeline.hs
|
||||
+++ b/compiler/main/DriverPipeline.hs
|
||||
@@ -1465,7 +1465,7 @@ runPhase (RealPhase LlvmOpt) input_fn dflags
|
||||
-- we always (unless -optlo specified) run Opt since we rely on it to
|
||||
-- fix up some pretty big deficiencies in the code we generate
|
||||
llvmOpts = case optLevel dflags of
|
||||
- 0 -> "-mem2reg -globalopt"
|
||||
+ 0 -> "-mem2reg -globalopt -lower-expect"
|
||||
1 -> "-O1 -globalopt"
|
||||
_ -> "-O2"
|
||||
|
70
D4159.patch
Normal file
70
D4159.patch
Normal file
@ -0,0 +1,70 @@
|
||||
diff --git a/utils/ghc-pkg/Main.hs b/utils/ghc-pkg/Main.hs
|
||||
--- a/utils/ghc-pkg/Main.hs
|
||||
+++ b/utils/ghc-pkg/Main.hs
|
||||
@@ -1208,7 +1208,18 @@
|
||||
pkgsCabalFormat = packages db
|
||||
|
||||
pkgsGhcCacheFormat :: [PackageCacheFormat]
|
||||
- pkgsGhcCacheFormat = map convertPackageInfoToCacheFormat pkgsCabalFormat
|
||||
+ pkgsGhcCacheFormat
|
||||
+ = map (recomputeValidAbiDeps pkgsCabalFormat) -- Note [Recompute abi-depends]
|
||||
+ $ map convertPackageInfoToCacheFormat
|
||||
+ pkgsCabalFormat
|
||||
+
|
||||
+ hasAnyAbiDepends :: InstalledPackageInfo -> Bool
|
||||
+ hasAnyAbiDepends x = length (abiDepends x) > 0
|
||||
+
|
||||
+-- -- warn when we find any (possibly-)bogus abi-depends fields;
|
||||
+-- -- Note [Recompute abi-depends]
|
||||
+-- when (any hasAnyAbiDepends pkgsCabalFormat) $
|
||||
+-- infoLn "ignoring (possibly broken) abi-depends field for packages"
|
||||
|
||||
when (verbosity > Normal) $
|
||||
infoLn ("writing cache " ++ filename)
|
||||
@@ -1231,6 +1242,45 @@
|
||||
ModuleName
|
||||
OpenModule
|
||||
|
||||
+{- Note [Recompute abi-depends]
|
||||
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
+
|
||||
+Like most fields, `ghc-pkg` relies on who-ever is performing package
|
||||
+registration to fill in fields; this includes the `abi-depends` field present
|
||||
+for the package.
|
||||
+
|
||||
+However, this was likely a mistake, and is not very robust; in certain cases,
|
||||
+versions of Cabal may use bogus abi-depends fields for a package when doing
|
||||
+builds. Why? Because package database information is aggressively cached; it is
|
||||
+possible to work Cabal into a situation where it uses a cached version of
|
||||
+`abi-depends`, rather than the one in the actual database after it has been
|
||||
+recomputed.
|
||||
+
|
||||
+However, there is an easy fix: ghc-pkg /already/ knows the `abi-depends` of a
|
||||
+package, because they are the ABIs of the packages pointed at by the `depends`
|
||||
+field. So it can simply look up the abi from the dependencies in the original
|
||||
+database, and ignore whatever the system registering gave it.
|
||||
+
|
||||
+So, instead, we do two things here:
|
||||
+
|
||||
+ - We throw away the information for a registered package's `abi-depends` field.
|
||||
+
|
||||
+ - We recompute it: we simply look up the unit ID of the package in the original
|
||||
+ database, and use *its* abi-depends.
|
||||
+
|
||||
+See Trac #14381, and Cabal issue #4728.
|
||||
+
|
||||
+-}
|
||||
+
|
||||
+recomputeValidAbiDeps :: [InstalledPackageInfo] -> PackageCacheFormat -> PackageCacheFormat
|
||||
+recomputeValidAbiDeps db pkg = pkg { GhcPkg.abiDepends = catMaybes (newAbiDeps) }
|
||||
+ where
|
||||
+ newAbiDeps = flip map (GhcPkg.abiDepends pkg) $ \(k, _) ->
|
||||
+ case filter (\d -> installedUnitId d == k) db of
|
||||
+ [] -> Nothing
|
||||
+ [x] -> Just (k, unAbiHash (abiHash x))
|
||||
+ _ -> Nothing -- ???
|
||||
+
|
||||
convertPackageInfoToCacheFormat :: InstalledPackageInfo -> PackageCacheFormat
|
||||
convertPackageInfoToCacheFormat pkg =
|
||||
GhcPkg.InstalledPackageInfo {
|
||||
|
@ -1,10 +0,0 @@
|
||||
--- ghc-8.8.0.20190721/libraries/containers/containers/include/containers.h~ 2019-06-26 20:39:26.000000000 +0000
|
||||
+++ ghc-8.8.0.20190721/libraries/containers/containers/include/containers.h 2019-07-27 08:55:10.747060247 +0000
|
||||
@@ -35,7 +35,6 @@
|
||||
|
||||
#ifdef __GLASGOW_HASKELL__
|
||||
# define USE_ST_MONAD 1
|
||||
-# define USE_UNBOXED_ARRAYS 1
|
||||
#endif
|
||||
|
||||
#endif
|
@ -1,31 +0,0 @@
|
||||
Description: Allow unregisterised ghc-8.6 to build newer GHC
|
||||
Commit af9b744bbf1 introduced a regression stopping existing unregisterised
|
||||
compilers from being able to compile newer versions of GHC. The problem is
|
||||
that the bootstrap compiler uses the newer `includes/stg/MiscClosures.h` file
|
||||
where some defines have been renamed, resulting in the following error:
|
||||
.
|
||||
error: ‘stg_atomicModifyMutVarzh’ undeclared (first use in this function); did you mean ‘stg_atomicModifyMutVar2zh’?
|
||||
.
|
||||
For more information, see https://gitlab.haskell.org/ghc/ghc/issues/17111.
|
||||
.
|
||||
This patch can be removed, once ghc-8.6 is no longer the bootstrap compiler.
|
||||
Author: Ilias Tsitsimpis <iliastsi@debian.org>
|
||||
Bug: https://gitlab.haskell.org/ghc/ghc/issues/17111
|
||||
|
||||
Index: b/includes/stg/MiscClosures.h
|
||||
===================================================================
|
||||
--- a/includes/stg/MiscClosures.h
|
||||
+++ b/includes/stg/MiscClosures.h
|
||||
@@ -390,8 +390,12 @@ RTS_FUN_DECL(stg_copySmallMutableArrayzh
|
||||
RTS_FUN_DECL(stg_casSmallArrayzh);
|
||||
|
||||
RTS_FUN_DECL(stg_newMutVarzh);
|
||||
+#if __GLASGOW_HASKELL__ < 808
|
||||
+RTS_FUN_DECL(stg_atomicModifyMutVarzh);
|
||||
+#else
|
||||
RTS_FUN_DECL(stg_atomicModifyMutVar2zh);
|
||||
RTS_FUN_DECL(stg_atomicModifyMutVarzuzh);
|
||||
+#endif
|
||||
RTS_FUN_DECL(stg_casMutVarzh);
|
||||
|
||||
RTS_FUN_DECL(stg_isEmptyMVarzh);
|
@ -1,51 +0,0 @@
|
||||
Description: Allow unregisterised ghc-8.2 to build newer GHC
|
||||
Commit b68697e579d38ca29c2b84377dc2affa04659a28 introduced a regression
|
||||
stopping existing unregisteristed compilers from being used to compile a newer
|
||||
version of GHC. The problem is that the bootstrap compiler uses the newer Stg.h
|
||||
where EB_, IB_, etc, definitions have changed resulting in the following error:
|
||||
.
|
||||
error: conflicting types for 'ghc_GhcPrelude_zdtrModule4_bytes'
|
||||
note: in definition of macro 'EB_'
|
||||
#define EB_(X) extern const char X[]
|
||||
note: previous definition of 'ghc_GhcPrelude_zdtrModule4_bytes' was here
|
||||
char ghc_GhcPrelude_zdtrModule4_bytes[] = "ghc";
|
||||
.
|
||||
For more information about the problem, see https://phabricator.haskell.org/D4114.
|
||||
.
|
||||
This patch is a rework of https://phabricator.haskell.org/D3741.
|
||||
It modifies Stg.h to include the old definitions, if a compiler older than
|
||||
8.4 is being used.
|
||||
.
|
||||
This patch can be removed, once ghc-8.2 is no longer the bootstrap compiler.
|
||||
Author: Ilias Tsitsimpis <iliastsi@debian.org>
|
||||
Bug: https://ghc.haskell.org/trac/ghc/ticket/15201
|
||||
|
||||
Index: b/includes/Stg.h
|
||||
===================================================================
|
||||
--- a/includes/Stg.h
|
||||
+++ b/includes/Stg.h
|
||||
@@ -232,6 +232,16 @@ typedef StgInt I_;
|
||||
typedef StgWord StgWordArray[];
|
||||
typedef StgFunPtr F_;
|
||||
|
||||
+#if __GLASGOW_HASKELL__ < 804
|
||||
+#define EB_(X) extern char X[]
|
||||
+#define IB_(X) static char X[]
|
||||
+#define EI_(X) extern StgWordArray (X) GNU_ATTRIBUTE(aligned (8))
|
||||
+#define II_(X) static StgWordArray (X) GNU_ATTRIBUTE(aligned (8))
|
||||
+#define IF_(f) static StgFunPtr GNUC3_ATTRIBUTE(used) f(void)
|
||||
+#define FN_(f) StgFunPtr f(void)
|
||||
+#define EF_(f) StgFunPtr f(void) /* External Cmm functions */
|
||||
+#define EFF_(f) void f() /* See Note [External function prototypes] */
|
||||
+#else
|
||||
/* byte arrays (and strings): */
|
||||
#define EB_(X) extern const char X[]
|
||||
#define IB_(X) static const char X[]
|
||||
@@ -250,6 +260,7 @@ typedef StgFunPtr F_;
|
||||
#define EF_(f) StgFunPtr f(void) /* External Cmm functions */
|
||||
/* foreign functions: */
|
||||
#define EFF_(f) void f() /* See Note [External function prototypes] */
|
||||
+#endif /* __GLASGOW_HASKELL__ < 804 */
|
||||
|
||||
/* Note [External function prototypes] See Trac #8965, #11395
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
@ -1,58 +0,0 @@
|
||||
Description: Allow unregisterised ghc-8.4 to build newer GHC
|
||||
Commit 4075656e8bb introduced a regression stopping existing unregisteristed
|
||||
compilers from being able to compile newer versions of GHC. The problem is
|
||||
that the bootstrap compiler uses the newer `rts/storage/ClosureTypes.h` file
|
||||
where some defines have been renamed, resulting in the following error:
|
||||
.
|
||||
error: ‘stg_MUT_ARR_PTRS_FROZEN0_info’ undeclared (first use in this function); did you mean ‘stg_MUT_ARR_PTRS_FROZEN_DIRTY_info’?
|
||||
.
|
||||
For more information, see https://gitlab.haskell.org/ghc/ghc/issues/15913.
|
||||
.
|
||||
This patch can be removed, once ghc-8.4 is no longer the bootstrap compiler.
|
||||
Author: Ilias Tsitsimpis <iliastsi@debian.org>
|
||||
Bug: https://gitlab.haskell.org/ghc/ghc/issues/15913
|
||||
Bug-Debian: https://bugs.debian.org/932941
|
||||
|
||||
Index: b/includes/rts/storage/ClosureTypes.h
|
||||
===================================================================
|
||||
--- a/includes/rts/storage/ClosureTypes.h
|
||||
+++ b/includes/rts/storage/ClosureTypes.h
|
||||
@@ -82,5 +82,11 @@
|
||||
#define SMALL_MUT_ARR_PTRS_DIRTY 60
|
||||
#define SMALL_MUT_ARR_PTRS_FROZEN_DIRTY 61
|
||||
#define SMALL_MUT_ARR_PTRS_FROZEN_CLEAN 62
|
||||
+#if __GLASGOW_HASKELL__ < 806
|
||||
+#define SMALL_MUT_ARR_PTRS_FROZEN0 SMALL_MUT_ARR_PTRS_FROZEN_DIRTY
|
||||
+#define SMALL_MUT_ARR_PTRS_FROZEN SMALL_MUT_ARR_PTRS_FROZEN_CLEAN
|
||||
+#define MUT_ARR_PTRS_FROZEN0 MUT_ARR_PTRS_FROZEN_DIRTY
|
||||
+#define MUT_ARR_PTRS_FROZEN MUT_ARR_PTRS_FROZEN_CLEAN
|
||||
+#endif
|
||||
#define COMPACT_NFDATA 63
|
||||
#define N_CLOSURE_TYPES 64
|
||||
Index: b/includes/stg/MiscClosures.h
|
||||
===================================================================
|
||||
--- a/includes/stg/MiscClosures.h
|
||||
+++ b/includes/stg/MiscClosures.h
|
||||
@@ -116,12 +116,22 @@ RTS_ENTRY(stg_ARR_WORDS);
|
||||
RTS_ENTRY(stg_MUT_ARR_WORDS);
|
||||
RTS_ENTRY(stg_MUT_ARR_PTRS_CLEAN);
|
||||
RTS_ENTRY(stg_MUT_ARR_PTRS_DIRTY);
|
||||
+#if __GLASGOW_HASKELL__ < 806
|
||||
+RTS_ENTRY(stg_MUT_ARR_PTRS_FROZEN);
|
||||
+RTS_ENTRY(stg_MUT_ARR_PTRS_FROZEN0);
|
||||
+#else
|
||||
RTS_ENTRY(stg_MUT_ARR_PTRS_FROZEN_CLEAN);
|
||||
RTS_ENTRY(stg_MUT_ARR_PTRS_FROZEN_DIRTY);
|
||||
+#endif
|
||||
RTS_ENTRY(stg_SMALL_MUT_ARR_PTRS_CLEAN);
|
||||
RTS_ENTRY(stg_SMALL_MUT_ARR_PTRS_DIRTY);
|
||||
+#if __GLASGOW_HASKELL__ < 806
|
||||
+RTS_ENTRY(stg_SMALL_MUT_ARR_PTRS_FROZEN);
|
||||
+RTS_ENTRY(stg_SMALL_MUT_ARR_PTRS_FROZEN0);
|
||||
+#else
|
||||
RTS_ENTRY(stg_SMALL_MUT_ARR_PTRS_FROZEN_CLEAN);
|
||||
RTS_ENTRY(stg_SMALL_MUT_ARR_PTRS_FROZEN_DIRTY);
|
||||
+#endif
|
||||
RTS_ENTRY(stg_MUT_VAR_CLEAN);
|
||||
RTS_ENTRY(stg_MUT_VAR_DIRTY);
|
||||
RTS_ENTRY(stg_END_TSO_QUEUE);
|
78
ghc-7.8-arm7_saner-linker-opt-handling-9873.patch
Normal file
78
ghc-7.8-arm7_saner-linker-opt-handling-9873.patch
Normal file
@ -0,0 +1,78 @@
|
||||
On ARM, we want to make sure that GHC uses the gold linker.
|
||||
|
||||
In order to achieve that, we need to get `-fuse-ld=gold` into
|
||||
SettingsCCompilerLinkFlags in the settings.
|
||||
|
||||
This field is filled with only CONF_GCC_LINKER_OPTS_STAGE2. So we want that
|
||||
flag to show up there.
|
||||
|
||||
But this variable is used in a few other cases (LDFLAGS, options to hsc2hs)
|
||||
where -fuse-ld=gold caused problems.
|
||||
(These problems were not investigated. Maybe _they_ could be solved?)
|
||||
|
||||
So as a work-around we remove any other use of CONF_GCC_LINKER_OPTS_STAGE2.
|
||||
|
||||
|
||||
Index: ghc-7.8.3.20141119/libffi/ghc.mk
|
||||
===================================================================
|
||||
--- ghc-7.8.3.20141119.orig/libffi/ghc.mk 2014-04-07 20:26:08.000000000 +0200
|
||||
+++ ghc-7.8.3.20141119/libffi/ghc.mk 2014-12-08 18:57:03.392339809 +0100
|
||||
@@ -88,7 +88,7 @@
|
||||
NM=$(NM) \
|
||||
RANLIB=$(REAL_RANLIB_CMD) \
|
||||
CFLAGS="$(SRC_CC_OPTS) $(CONF_CC_OPTS_STAGE1) -w" \
|
||||
- LDFLAGS="$(SRC_LD_OPTS) $(CONF_GCC_LINKER_OPTS_STAGE1) -w" \
|
||||
+ LDFLAGS="$(SRC_LD_OPTS) -w" \
|
||||
"$(SHELL)" ./configure \
|
||||
--prefix=$(TOP)/libffi/build/inst \
|
||||
--libdir=$(TOP)/libffi/build/inst/lib \
|
||||
Index: ghc-7.8.3.20141119/mk/config.mk.in
|
||||
===================================================================
|
||||
--- ghc-7.8.3.20141119.orig/mk/config.mk.in 2014-12-08 18:49:28.215171926 +0100
|
||||
+++ ghc-7.8.3.20141119/mk/config.mk.in 2014-12-08 18:57:20.637055726 +0100
|
||||
@@ -570,7 +570,6 @@
|
||||
# $1 = stage
|
||||
SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --cflag=,$$(filter-out -O,$$(SRC_CC_OPTS) $$(CONF_CC_OPTS_STAGE$1)))
|
||||
SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --cflag=,$$(CONF_CPP_OPTS_STAGE$1))
|
||||
-SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --lflag=,$$(CONF_GCC_LINKER_OPTS_STAGE$1))
|
||||
endef
|
||||
$(eval $(call set_stage_HSC2HS_OPTS,0))
|
||||
$(eval $(call set_stage_HSC2HS_OPTS,1))
|
||||
Index: ghc-7.8.3.20141119/rules/build-package-data.mk
|
||||
===================================================================
|
||||
--- ghc-7.8.3.20141119.orig/rules/build-package-data.mk 2014-04-14 14:38:12.000000000 +0200
|
||||
+++ ghc-7.8.3.20141119/rules/build-package-data.mk 2014-12-08 18:57:49.366250332 +0100
|
||||
@@ -50,7 +50,7 @@
|
||||
# for a feature it may not generate warning-free C code, and thus may
|
||||
# think that the feature doesn't exist if -Werror is on.
|
||||
$1_$2_CONFIGURE_CFLAGS = $$(filter-out -Werror,$$(SRC_CC_OPTS)) $$(CONF_CC_OPTS_STAGE$3) $$($1_CC_OPTS) $$($1_$2_CC_OPTS) $$(SRC_CC_WARNING_OPTS)
|
||||
-$1_$2_CONFIGURE_LDFLAGS = $$(SRC_LD_OPTS) $$(CONF_GCC_LINKER_OPTS_STAGE$3) $$($1_LD_OPTS) $$($1_$2_LD_OPTS)
|
||||
+$1_$2_CONFIGURE_LDFLAGS = $$(SRC_LD_OPTS) $$($1_LD_OPTS) $$($1_$2_LD_OPTS)
|
||||
$1_$2_CONFIGURE_CPPFLAGS = $$(SRC_CPP_OPTS) $$(CONF_CPP_OPTS_STAGE$3) $$($1_CPP_OPTS) $$($1_$2_CPP_OPTS)
|
||||
|
||||
$1_$2_CONFIGURE_OPTS += --configure-option=CFLAGS="$$($1_$2_CONFIGURE_CFLAGS)"
|
||||
Index: ghc-7.8.3.20141119/rules/distdir-opts.mk
|
||||
===================================================================
|
||||
--- ghc-7.8.3.20141119.orig/rules/distdir-opts.mk 2014-04-07 20:26:08.000000000 +0200
|
||||
+++ ghc-7.8.3.20141119/rules/distdir-opts.mk 2014-12-08 18:58:18.435461083 +0100
|
||||
@@ -64,7 +64,6 @@
|
||||
endif
|
||||
|
||||
$1_$2_DIST_LD_OPTS = \
|
||||
- $$(CONF_GCC_LINKER_OPTS_STAGE$3) \
|
||||
$$(SRC_LD_OPTS) \
|
||||
$$($1_LD_OPTS) \
|
||||
$$($1_$2_LD_OPTS) \
|
||||
Index: ghc-7.8.3.20141119/utils/hsc2hs/ghc.mk
|
||||
===================================================================
|
||||
--- ghc-7.8.3.20141119.orig/utils/hsc2hs/ghc.mk 2014-04-07 20:26:15.000000000 +0200
|
||||
+++ ghc-7.8.3.20141119/utils/hsc2hs/ghc.mk 2014-12-08 18:57:07.848524715 +0100
|
||||
@@ -27,7 +27,7 @@
|
||||
# system uses it for all stages and passes the right options for each stage
|
||||
# on the command line
|
||||
define utils/hsc2hs_dist-install_SHELL_WRAPPER_EXTRA
|
||||
-echo 'HSC2HS_EXTRA="$(addprefix --cflag=,$(CONF_CC_OPTS_STAGE1)) $(addprefix --lflag=,$(CONF_GCC_LINKER_OPTS_STAGE1))"' >> "$(WRAPPER)"
|
||||
+echo 'HSC2HS_EXTRA="$(addprefix --cflag=,$(CONF_CC_OPTS_STAGE1))"' >> "$(WRAPPER)"
|
||||
endef
|
||||
|
||||
ifneq "$(BINDIST)" "YES"
|
@ -1,35 +0,0 @@
|
||||
--- ghc-8.6.3/docs/users_guide/flags.py~ 2018-09-21 06:18:23.000000000 +0800
|
||||
+++ ghc-8.6.3/docs/users_guide/flags.py 2019-03-05 10:20:38.639782096 +0800
|
||||
@@ -49,6 +49,8 @@
|
||||
import sphinx
|
||||
from sphinx import addnodes
|
||||
from sphinx.domains.std import GenericObject
|
||||
+from sphinx.domains import ObjType
|
||||
+from sphinx.roles import XRefRole
|
||||
from sphinx.errors import SphinxError
|
||||
from distutils.version import LooseVersion
|
||||
from utils import build_table_from_list
|
||||
@@ -603,14 +605,21 @@
|
||||
sphinx_version = LooseVersion(sphinx.__version__)
|
||||
override_arg = {'override': True} if sphinx_version >= LooseVersion('1.8') else {}
|
||||
|
||||
+ # Yuck: We can't use app.add_object_type since we need to provide the
|
||||
+ # Directive instance ourselves.
|
||||
+ std_object_types = app.registry.domain_object_types.setdefault('std', {})
|
||||
+
|
||||
# Add ghc-flag directive, and override the class with our own
|
||||
- app.add_object_type('ghc-flag', 'ghc-flag')
|
||||
app.add_directive_to_domain('std', 'ghc-flag', Flag, **override_arg)
|
||||
+ app.add_role_to_domain('std', 'ghc-flag', XRefRole())
|
||||
+ std_object_types['ghc-flag'] = ObjType('ghc-flag', 'ghc-flag')
|
||||
|
||||
# Add extension directive, and override the class with our own
|
||||
- app.add_object_type('extension', 'extension')
|
||||
app.add_directive_to_domain('std', 'extension', LanguageExtension,
|
||||
**override_arg)
|
||||
+ app.add_role_to_domain('std', 'extension', XRefRole())
|
||||
+ std_object_types['extension'] = ObjType('ghc-flag', 'ghc-flag')
|
||||
+
|
||||
# NB: language-extension would be misinterpreted by sphinx, and produce
|
||||
# lang="extensions" XML attributes
|
||||
|
@ -1,12 +1,20 @@
|
||||
--- ghc-8.2.2/libraries/Cabal/Cabal/Distribution/Simple/Install.hs~ 2017-05-05 23:51:43.000000000 +0900
|
||||
+++ ghc-8.2.2/libraries/Cabal/Cabal/Distribution/Simple/Install.hs 2018-02-27 12:22:13.159432104 +0900
|
||||
@@ -215,8 +215,7 @@
|
||||
--- ghc-8.2.2/libraries/Cabal/Cabal/Distribution/Simple/Install.hs~ 2017-05-05 16:51:43.000000000 +0200
|
||||
+++ ghc-8.2.2/libraries/Cabal/Cabal/Distribution/Simple/Install.hs 2018-01-23 23:05:47.047081056 +0100
|
||||
@@ -36,7 +36,7 @@
|
||||
import Distribution.Simple.Utils
|
||||
( createDirectoryIfMissingVerbose
|
||||
, installDirectoryContents, installOrdinaryFile, isInSearchPath
|
||||
- , die', info, noticeNoWrap, warn, matchDirFileGlob )
|
||||
+ , die', info, noticeNoWrap, warn, matchDirFileGlob, debug )
|
||||
import Distribution.Simple.Compiler
|
||||
( CompilerFlavor(..), compilerFlavor )
|
||||
import Distribution.Simple.Setup
|
||||
@@ -215,7 +215,7 @@
|
||||
++ " in " ++ binPref)
|
||||
inPath <- isInSearchPath binPref
|
||||
when (not inPath) $
|
||||
- warn verbosity ("The directory " ++ binPref
|
||||
- ++ " is not in the system search path.")
|
||||
+ warn verbosity ("Executable installed in " ++ binPref)
|
||||
+ debug verbosity ("The directory " ++ binPref
|
||||
++ " is not in the system search path.")
|
||||
case compilerFlavor (compiler lbi) of
|
||||
GHC -> GHC.installExe verbosity lbi binPref buildPref progFix pkg_descr exe
|
||||
GHCJS -> GHCJS.installExe verbosity lbi binPref buildPref progFix pkg_descr exe
|
||||
|
43
ghc-Debian-reproducible-tmp-names.patch
Normal file
43
ghc-Debian-reproducible-tmp-names.patch
Normal file
@ -0,0 +1,43 @@
|
||||
This is an attempt to make GHC build reproducible. The name of .c files may end
|
||||
up in the resulting binary (in the debug section), but not the directory.
|
||||
|
||||
Instead of using the process id, create a hash from the command line arguments,
|
||||
and assume that is going to be unique.
|
||||
|
||||
Index: ghc-8.0.2/compiler/main/SysTools.hs
|
||||
===================================================================
|
||||
--- ghc-8.0.2.orig/compiler/main/SysTools.hs
|
||||
+++ ghc-8.0.2/compiler/main/SysTools.hs
|
||||
@@ -65,6 +65,7 @@
|
||||
import Util
|
||||
import DynFlags
|
||||
import Exception
|
||||
+import Fingerprint
|
||||
|
||||
import LlvmCodeGen.Base (llvmVersionStr, supportedLlvmVersion)
|
||||
|
||||
@@ -1145,8 +1146,8 @@
|
||||
mapping <- readIORef dir_ref
|
||||
case Map.lookup tmp_dir mapping of
|
||||
Nothing -> do
|
||||
- pid <- getProcessID
|
||||
- let prefix = tmp_dir </> "ghc" ++ show pid ++ "_"
|
||||
+ pid <- getStableProcessID
|
||||
+ let prefix = tmp_dir </> "ghc" ++ pid ++ "_"
|
||||
mask_ $ mkTempDir prefix
|
||||
Just dir -> return dir
|
||||
where
|
||||
@@ -1562,6 +1563,13 @@
|
||||
getProcessID = System.Posix.Internals.c_getpid >>= return . fromIntegral
|
||||
#endif
|
||||
|
||||
+-- Debian-specific hack to get reproducible output, by not using the "random"
|
||||
+-- pid, but rather something determinisic
|
||||
+getStableProcessID :: IO String
|
||||
+getStableProcessID = do
|
||||
+ args <- getArgs
|
||||
+ return $ take 4 $ show $ fingerprintString $ unwords args
|
||||
+
|
||||
-- Divvy up text stream into lines, taking platform dependent
|
||||
-- line termination into account.
|
||||
linesPlatform :: String -> [String]
|
11
ghc-configure-fix-sphinx-version-check.patch
Normal file
11
ghc-configure-fix-sphinx-version-check.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- ghc-8.2.2/configure.ac~ 2017-11-21 05:22:42.000000000 +0900
|
||||
+++ ghc-8.2.2/configure.ac 2018-05-28 12:37:35.296728423 +0900
|
||||
@@ -745,7 +745,7 @@
|
||||
AC_CACHE_CHECK([for version of sphinx-build], fp_cv_sphinx_version,
|
||||
changequote(, )dnl
|
||||
[if test -n "$SPHINXBUILD"; then
|
||||
- fp_cv_sphinx_version=`"$SPHINXBUILD" --version 2>&1 | sed 's/Sphinx\( (sphinx-build)\)\? v\?\([0-9]\.[0-9]\.[0-9]\)/\2/' | head -n1`;
|
||||
+ fp_cv_sphinx_version=`"$SPHINXBUILD" --version 2>&1 | sed 's/.* v\?\([0-9]\.[0-9]\.[0-9]\)/\1/' | head -n1`;
|
||||
fi;
|
||||
changequote([, ])dnl
|
||||
])
|
38
ghc-doc-index
Executable file
38
ghc-doc-index
Executable file
@ -0,0 +1,38 @@
|
||||
#!/bin/sh
|
||||
|
||||
LOCKFILE=/var/lock/ghc-doc-index.lock
|
||||
|
||||
# the lockfile is not meant to be perfect, it's just in case
|
||||
# two cron scripts get run close to each other to keep
|
||||
# them from stepping on each other's toes.
|
||||
if [ -f $LOCKFILE ]; then
|
||||
echo "Locked with $LOCKFILE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$(id -u)" != "0" ]; then
|
||||
echo Need to be root!
|
||||
exit 1
|
||||
fi
|
||||
|
||||
trap "{ rm -f $LOCKFILE ; exit 255; }" EXIT
|
||||
touch $LOCKFILE
|
||||
|
||||
PKGDIRCACHE=/var/lib/ghc/pkg-dir.cache
|
||||
LISTING="env LANG=C ls -dl"
|
||||
|
||||
# only re-index ghc docs when there are changes
|
||||
cd /usr/share/doc/ghc/html/libraries
|
||||
if [ -r "$PKGDIRCACHE" ]; then
|
||||
$LISTING */ > $PKGDIRCACHE.new
|
||||
DIR_DIFF=$(diff $PKGDIRCACHE $PKGDIRCACHE.new)
|
||||
else
|
||||
$LISTING */ > $PKGDIRCACHE
|
||||
fi
|
||||
if [ -x "gen_contents_index" -a ! -r "$PKGDIRCACHE.new" -o -n "$DIR_DIFF" ]; then
|
||||
./gen_contents_index
|
||||
fi
|
||||
|
||||
if [ -f $PKGDIRCACHE.new ]; then
|
||||
mv -f $PKGDIRCACHE.new $PKGDIRCACHE
|
||||
fi
|
9
ghc-doc-index.cron
Executable file
9
ghc-doc-index.cron
Executable file
@ -0,0 +1,9 @@
|
||||
#! /bin/bash
|
||||
# updates the library documentation index after updates
|
||||
|
||||
# This can be disabled by uninstalling ghc-doc-index
|
||||
# or adding ghc-doc-index to "./jobs-deny".
|
||||
|
||||
/usr/bin/ghc-doc-index
|
||||
|
||||
exit 0
|
@ -1,11 +0,0 @@
|
||||
--- ghc-8.6.5/libraries/gen_contents_index~ 2020-02-24 15:02:26.318866694 +0800
|
||||
+++ ghc-8.6.5/libraries/gen_contents_index 2020-04-09 18:18:40.290722327 +0800
|
||||
@@ -47,6 +47,8 @@
|
||||
HADDOCK_ARGS="$HADDOCK_ARGS $HADDOCK_ARG"
|
||||
done
|
||||
else
|
||||
+ if ! ls */*.haddock &>/dev/null; then exit 0; fi
|
||||
+
|
||||
HADDOCK=/usr/bin/haddock
|
||||
# We don't want the GHC API to swamp the index
|
||||
HADDOCK_FILES=`ls -1 */*.haddock | grep -v '/ghc\.haddock' | sort`
|
587
ghc.spec
587
ghc.spec
@ -1,156 +1,126 @@
|
||||
# disable prof, docs, perf build, debuginfo
|
||||
# NB This must be disabled (bcond_with) for all koji production builds
|
||||
# disable prof, docs, perf build
|
||||
# NB This SHOULD be disabled 'bcond_with' for all koji production builds
|
||||
%bcond_with quickbuild
|
||||
|
||||
# make sure ghc libraries' ABI hashes unchanged
|
||||
%bcond_without abicheck
|
||||
|
||||
# to handle RCs
|
||||
%global ghc_release %{version}
|
||||
|
||||
%global base_ver 4.13.0.0
|
||||
# make sure ghc libraries' ABI hashes unchanged
|
||||
%bcond_without abicheck
|
||||
|
||||
# skip testsuite (takes time and not really being used)
|
||||
%bcond_with testsuite
|
||||
|
||||
# build profiling libraries
|
||||
# build haddock
|
||||
# build docs (haddock and manuals)
|
||||
# - combined since disabling haddock seems to cause no manuals built
|
||||
# - <https://ghc.haskell.org/trac/ghc/ticket/15190>
|
||||
# perf production build (disable for quick build)
|
||||
%if %{with quickbuild}
|
||||
%undefine with_ghc_prof
|
||||
%undefine with_haddock
|
||||
%bcond_with prof
|
||||
%bcond_with docs
|
||||
%bcond_with perf_build
|
||||
%undefine _enable_debug_packages
|
||||
%else
|
||||
%bcond_without haddock
|
||||
%bcond_without prof
|
||||
%bcond_without docs
|
||||
%bcond_without perf_build
|
||||
%endif
|
||||
|
||||
# to enable dwarf info (only on intel archs): overrides perf
|
||||
# default is off: bcond_with
|
||||
%ifarch x86_64 i686
|
||||
%bcond_with dwarf
|
||||
%endif
|
||||
|
||||
# locked together since disabling haddock causes no manuals built
|
||||
# and disabling haddock still created index.html
|
||||
# https://ghc.haskell.org/trac/ghc/ticket/15190
|
||||
%{?with_haddock:%bcond_without manual}
|
||||
|
||||
# no longer build testsuite (takes time and not really being used)
|
||||
%bcond_with testsuite
|
||||
|
||||
# 8.8 needs llvm-7.0
|
||||
%global llvm_major 7.0
|
||||
# 8.2 needs llvm-3.9
|
||||
%global llvm_major 3.9
|
||||
%global ghc_llvm_archs armv7hl aarch64
|
||||
|
||||
%global ghc_unregisterized_arches s390 s390x %{mips}
|
||||
|
||||
Name: ghc
|
||||
Version: 8.8.4
|
||||
# ghc must be rebuilt after a version bump to avoid ABI change problems
|
||||
Version: 8.2.2
|
||||
# Since library subpackages are versioned:
|
||||
# - release can only be reset if *all* library versions get bumped simultaneously
|
||||
# (sometimes after a major release)
|
||||
# - minor release numbers for a branch should be incremented monotonically
|
||||
Release: 108%{?dist}
|
||||
Release: 70%{?dist}
|
||||
Summary: Glasgow Haskell Compiler
|
||||
|
||||
License: BSD and HaskellReport
|
||||
URL: https://haskell.org/ghc/
|
||||
Source0: https://downloads.haskell.org/ghc/%{ghc_release}/ghc-%{version}-src.tar.xz
|
||||
Source0: https://downloads.haskell.org/~ghc/%{ghc_release}/ghc-%{version}-src.tar.xz
|
||||
%if %{with testsuite}
|
||||
Source1: https://downloads.haskell.org/ghc/%{ghc_release}/ghc-%{version}-testsuite.tar.xz
|
||||
Source1: https://downloads.haskell.org/~ghc/%{ghc_release}/ghc-%{version}-testsuite.tar.xz
|
||||
%endif
|
||||
Source2: https://downloads.haskell.org/ghc/%{ghc_release}/ghc-%{version}-src.tar.xz.sig
|
||||
Source3: ghc-doc-index.cron
|
||||
Source4: ghc-doc-index
|
||||
Source5: ghc-pkg.man
|
||||
Source6: haddock.man
|
||||
Source7: runghc.man
|
||||
# absolute haddock path (was for html/libraries -> libraries)
|
||||
Patch1: ghc-gen_contents_index-haddock-path.patch
|
||||
Patch2: ghc-Cabal-install-PATH-warning.patch
|
||||
Patch3: ghc-gen_contents_index-nodocs.patch
|
||||
# https://phabricator.haskell.org/rGHC4eebc8016f68719e1ccdf460754a97d1f4d6ef05
|
||||
Patch6: ghc-8.6.3-sphinx-1.8.patch
|
||||
# https://github.com/haskell/cabal/issues/4728
|
||||
# https://ghc.haskell.org/trac/ghc/ticket/14381
|
||||
# https://phabricator.haskell.org/D4159
|
||||
Patch4: D4159.patch
|
||||
# https://github.com/ghc/ghc/pull/143
|
||||
Patch5: ghc-configure-fix-sphinx-version-check.patch
|
||||
|
||||
# Arch dependent patches
|
||||
|
||||
# arm
|
||||
Patch12: ghc-armv7-VFPv3D16--NEON.patch
|
||||
|
||||
# for unregisterized (s390x)
|
||||
# for s390x
|
||||
# https://ghc.haskell.org/trac/ghc/ticket/15689
|
||||
Patch15: ghc-warnings.mk-CC-Wall.patch
|
||||
Patch16: fix-build-using-unregisterised-v8.6.patch
|
||||
|
||||
# bigendian (s390x and ppc64)
|
||||
# https://gitlab.haskell.org/ghc/ghc/issues/15411
|
||||
# https://gitlab.haskell.org/ghc/ghc/issues/16505
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1651448
|
||||
# https://ghc.haskell.org/trac/ghc/ticket/15914
|
||||
# https://gitlab.haskell.org/ghc/ghc/issues/16973
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1733030
|
||||
Patch18: Disable-unboxed-arrays.patch
|
||||
|
||||
# Debian patches:
|
||||
Patch24: buildpath-abi-stability.patch
|
||||
Patch26: no-missing-haddock-file-warning.patch
|
||||
Patch28: x32-use-native-x86_64-insn.patch
|
||||
Patch24: ghc-Debian-buildpath-abi-stability.patch
|
||||
Patch26: ghc-Debian-no-missing-haddock-file-warning.patch
|
||||
Patch27: ghc-Debian-reproducible-tmp-names.patch
|
||||
Patch28: ghc-Debian-x32-use-native-x86_64-insn.patch
|
||||
|
||||
# fedora ghc has been bootstrapped on
|
||||
# %%{ix86} x86_64 ppc ppc64 armv7hl s390 s390x ppc64le aarch64
|
||||
# and retired arches: alpha sparcv9 armv5tel
|
||||
# see also deprecated ghc_arches defined in /etc/rpm/macros.ghc-srpm by redhat-rpm-macros
|
||||
|
||||
BuildRequires: ghc-compiler > 8.4
|
||||
BuildRequires: ghc-compiler
|
||||
# for ABI hash checking
|
||||
%if %{with abicheck}
|
||||
BuildRequires: ghc
|
||||
%endif
|
||||
BuildRequires: ghc-rpm-macros-extra >= 2.0.6
|
||||
BuildRequires: ghc-rpm-macros-extra >= 1.8
|
||||
BuildRequires: ghc-binary-devel
|
||||
BuildRequires: ghc-bytestring-devel
|
||||
BuildRequires: ghc-containers-devel
|
||||
BuildRequires: ghc-directory-devel
|
||||
BuildRequires: ghc-pretty-devel
|
||||
BuildRequires: ghc-process-devel
|
||||
BuildRequires: ghc-transformers-devel
|
||||
BuildRequires: alex
|
||||
BuildRequires: gmp-devel
|
||||
BuildRequires: libffi-devel
|
||||
BuildRequires: make
|
||||
# for terminfo
|
||||
BuildRequires: ncurses-devel
|
||||
# for man and docs
|
||||
BuildRequires: perl-interpreter
|
||||
%if %{with testsuite}
|
||||
BuildRequires: python3
|
||||
%endif
|
||||
%if %{with manual}
|
||||
%if %{with docs}
|
||||
BuildRequires: python3-sphinx
|
||||
%endif
|
||||
%ifarch %{ghc_llvm_archs}
|
||||
BuildRequires: llvm%{llvm_major}
|
||||
%endif
|
||||
%if %{with dwarf}
|
||||
BuildRequires: elfutils-devel
|
||||
%endif
|
||||
# patch5
|
||||
BuildRequires: autoconf
|
||||
%ifarch armv7hl
|
||||
# patch12
|
||||
BuildRequires: autoconf, automake
|
||||
%endif
|
||||
%if %{without quickbuild}
|
||||
#BuildRequires: gnupg2
|
||||
%endif
|
||||
Requires: ghc-compiler = %{version}-%{release}
|
||||
%if %{with docs}
|
||||
Requires: ghc-doc-cron = %{version}-%{release}
|
||||
%endif
|
||||
Requires: ghc-ghc-devel = %{version}-%{release}
|
||||
Requires: ghc-devel = %{version}-%{release}
|
||||
%if %{with haddock}
|
||||
Suggests: ghc-doc = %{version}-%{release}
|
||||
Suggests: ghc-doc-index = %{version}-%{release}
|
||||
Requires: ghc-libraries = %{version}-%{release}
|
||||
%if %{with docs}
|
||||
Requires: ghc-manual = %{version}-%{release}
|
||||
%endif
|
||||
%if %{with manual}
|
||||
Suggests: ghc-manual = %{version}-%{release}
|
||||
%endif
|
||||
%if %{with ghc_prof}
|
||||
Suggests: ghc-prof = %{version}-%{release}
|
||||
%endif
|
||||
Recommends: zlib-devel
|
||||
|
||||
%description
|
||||
GHC is a state-of-the-art, open source, compiler and interactive environment
|
||||
@ -179,9 +149,15 @@ for the functional language Haskell. Highlights:
|
||||
Summary: GHC compiler and utilities
|
||||
License: BSD
|
||||
Requires: gcc%{?_isa}
|
||||
Requires: ghc-base-devel%{?_isa} = %{base_ver}-%{release}
|
||||
%if %{without haddock}
|
||||
# added during f31
|
||||
Requires: ghc-base-devel%{?_isa}
|
||||
# for alternatives
|
||||
Requires(post): %{_sbindir}/update-alternatives
|
||||
Requires(postun): %{_sbindir}/update-alternatives
|
||||
# added in f14
|
||||
Obsoletes: ghc-doc < 6.12.3-4
|
||||
%if %{without docs}
|
||||
Obsoletes: ghc-doc-cron < %{version}-%{release}
|
||||
# added in f28
|
||||
Obsoletes: ghc-doc-index < %{version}-%{release}
|
||||
%endif
|
||||
%ifarch %{ghc_llvm_archs}
|
||||
@ -191,34 +167,28 @@ Requires: llvm%{llvm_major}
|
||||
%description compiler
|
||||
The package contains the GHC compiler, tools and utilities.
|
||||
|
||||
The ghc libraries are provided by ghc-devel.
|
||||
The ghc libraries are provided by ghc-libraries.
|
||||
To install all of ghc (including the ghc library),
|
||||
install the main ghc package.
|
||||
|
||||
|
||||
%if %{with haddock}
|
||||
%package doc
|
||||
Summary: Haskell library documentation meta package
|
||||
%if %{with docs}
|
||||
%package doc-cron
|
||||
Summary: GHC library documentation indexing cronjob
|
||||
License: BSD
|
||||
|
||||
%description doc
|
||||
Installing this package causes ghc-*-doc packages corresponding to ghc-*-devel
|
||||
packages to be automatically installed too.
|
||||
|
||||
|
||||
%package doc-index
|
||||
Summary: GHC library documentation indexing
|
||||
License: BSD
|
||||
Obsoletes: ghc-doc-cron < %{version}-%{release}
|
||||
Requires: ghc-compiler = %{version}-%{release}
|
||||
Requires: crontabs
|
||||
# added in f28
|
||||
Obsoletes: ghc-doc-index < %{version}-%{release}
|
||||
BuildArch: noarch
|
||||
|
||||
%description doc-index
|
||||
The package enables re-indexing of installed library documention.
|
||||
%description doc-cron
|
||||
The package provides a cronjob for re-indexing installed library development
|
||||
documention.
|
||||
%endif
|
||||
|
||||
|
||||
%if %{with manual}
|
||||
%if %{with docs}
|
||||
%package manual
|
||||
Summary: GHC manual
|
||||
License: BSD
|
||||
@ -232,109 +202,99 @@ This package provides the User Guide and Haddock manual.
|
||||
# ghclibdir also needs ghc_version_override for bootstrapping
|
||||
%global ghc_version_override %{version}
|
||||
|
||||
# EL7 rpm supports fileattrs ghc.attr
|
||||
%if 0%{?rhel} && 0%{?rhel} < 7
|
||||
# needs ghc_version_override for bootstrapping
|
||||
%global _use_internal_dependency_generator 0
|
||||
%global __find_provides /usr/lib/rpm/rpmdeps --provides
|
||||
%global __find_requires %{_rpmconfigdir}/ghc-deps.sh %{buildroot}%{ghclibdir}
|
||||
%endif
|
||||
|
||||
%global ghc_pkg_c_deps ghc-compiler = %{ghc_version_override}-%{release}
|
||||
|
||||
%global BSDHaskellReport %{quote:BSD and HaskellReport}
|
||||
|
||||
# use "./libraries-versions.sh" to check versions
|
||||
%if %{defined ghclibdir}
|
||||
%ghc_lib_subpackage -d -l BSD Cabal-3.0.1.0
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport array-0.5.4.0
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport -c gmp-devel%{?_isa},libffi-devel%{?_isa} base-%{base_ver}
|
||||
%ghc_lib_subpackage -d -l BSD binary-0.8.7.0
|
||||
%ghc_lib_subpackage -d -l BSD bytestring-0.10.10.1
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport containers-0.6.2.1
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport deepseq-1.4.4.0
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport directory-1.3.6.0
|
||||
%ghc_lib_subpackage -d -l BSD filepath-1.4.2.1
|
||||
%ghc_lib_subpackage -d -l BSD Cabal-2.0.1.0
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport array-0.5.2.0
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport -c gmp-devel%{?_isa},libffi-devel%{?_isa} base-4.10.1.0
|
||||
%ghc_lib_subpackage -d -l BSD binary-0.8.5.1
|
||||
%ghc_lib_subpackage -d -l BSD bytestring-0.10.8.2
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport containers-0.5.10.2
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport deepseq-1.4.3.0
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport directory-1.3.0.2
|
||||
%ghc_lib_subpackage -d -l BSD filepath-1.4.1.2
|
||||
%define ghc_pkg_obsoletes ghc-bin-package-db-devel < 0.0.0.0-12
|
||||
# in ghc not ghc-libraries:
|
||||
%ghc_lib_subpackage -d -x ghc-%{ghc_version_override}
|
||||
%undefine ghc_pkg_obsoletes
|
||||
%ghc_lib_subpackage -d -x -l BSD ghc-boot-%{ghc_version_override}
|
||||
%ghc_lib_subpackage -d -l BSD ghc-boot-th-%{ghc_version_override}
|
||||
%ghc_lib_subpackage -d -l BSD ghc-compact-0.1.0.0
|
||||
%ghc_lib_subpackage -d -l BSD ghc-heap-%{ghc_version_override}
|
||||
# see below for ghc-prim
|
||||
%ghc_lib_subpackage -d -l BSD haskeline-0.7.5.0
|
||||
%ghc_lib_subpackage -d -l BSD -x ghci-%{ghc_version_override}
|
||||
%ghc_lib_subpackage -d -l BSD haskeline-0.7.4.0
|
||||
%ghc_lib_subpackage -d -l BSD hoopl-3.10.2.2
|
||||
%ghc_lib_subpackage -d -l BSD hpc-0.6.0.3
|
||||
# see below for integer-gmp
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport libiserv-%{ghc_version_override}
|
||||
%ghc_lib_subpackage -d -l BSD mtl-2.2.2
|
||||
%ghc_lib_subpackage -d -l BSD parsec-3.1.14.0
|
||||
%ghc_lib_subpackage -d -l BSD pretty-1.1.3.6
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport process-1.6.9.0
|
||||
%ghc_lib_subpackage -d -l BSD stm-2.5.0.0
|
||||
%ghc_lib_subpackage -d -l BSD template-haskell-2.15.0.0
|
||||
%ghc_lib_subpackage -d -l BSD -c ncurses-devel%{?_isa} terminfo-0.4.1.4
|
||||
%ghc_lib_subpackage -d -l BSD text-1.2.4.0
|
||||
%ghc_lib_subpackage -d -l BSD time-1.9.3
|
||||
%ghc_lib_subpackage -d -l BSD transformers-0.5.6.2
|
||||
%ghc_lib_subpackage -d -l BSD pretty-1.1.3.3
|
||||
%ghc_lib_subpackage -d -l %BSDHaskellReport process-1.6.1.0
|
||||
%ghc_lib_subpackage -d -l BSD template-haskell-2.12.0.0
|
||||
%ghc_lib_subpackage -d -l BSD -c ncurses-devel%{?_isa} terminfo-0.4.1.0
|
||||
%ghc_lib_subpackage -d -l BSD time-1.8.0.2
|
||||
%ghc_lib_subpackage -d -l BSD transformers-0.5.2.0
|
||||
%ghc_lib_subpackage -d -l BSD unix-2.7.2.2
|
||||
%if %{with haddock}
|
||||
%ghc_lib_subpackage -d -l BSD xhtml-3000.2.2.1
|
||||
%if %{with docs}
|
||||
%ghc_lib_subpackage -d -l BSD xhtml-3000.2.2
|
||||
%endif
|
||||
# in ghc not ghc-devel:
|
||||
%ghc_lib_subpackage -d -x ghc-%{ghc_version_override}
|
||||
%ghc_lib_subpackage -d -x -l BSD ghc-boot-%{ghc_version_override}
|
||||
%ghc_lib_subpackage -d -x -l BSD ghci-%{ghc_version_override}
|
||||
%endif
|
||||
|
||||
%global version %{ghc_version_override}
|
||||
|
||||
%package devel
|
||||
%package libraries
|
||||
Summary: GHC development libraries meta package
|
||||
License: BSD and HaskellReport
|
||||
Requires: ghc-compiler = %{version}-%{release}
|
||||
Obsoletes: ghc-libraries < %{version}-%{release}
|
||||
Provides: ghc-libraries = %{version}-%{release}
|
||||
Obsoletes: ghc-devel < %{version}-%{release}
|
||||
Provides: ghc-devel = %{version}-%{release}
|
||||
Obsoletes: ghc-prof < %{version}-%{release}
|
||||
Provides: ghc-prof = %{version}-%{release}
|
||||
# since f15
|
||||
Obsoletes: ghc-libs < 7.0.1-3
|
||||
%{?ghc_packages_list:Requires: %(echo %{ghc_packages_list} | sed -e "s/\([^ ]*\)-\([^ ]*\)/ghc-\1-devel = \2-%{release},/g")}
|
||||
|
||||
%description devel
|
||||
%description libraries
|
||||
This is a meta-package for all the development library packages in GHC
|
||||
except the ghc library, which is installed by the toplevel ghc metapackage.
|
||||
|
||||
|
||||
%if %{with ghc_prof}
|
||||
%package prof
|
||||
Summary: GHC profiling libraries meta package
|
||||
License: BSD
|
||||
Requires: ghc-compiler = %{version}-%{release}
|
||||
|
||||
%description prof
|
||||
Installing this package causes ghc-*-prof packages corresponding to ghc-*-devel
|
||||
packages to be automatically installed too.
|
||||
%endif
|
||||
|
||||
|
||||
%prep
|
||||
%if %{without quickbuild}
|
||||
#%%{gpgverify} --keyring='%{SOURCE3}' --signature='%{SOURCE2}' --data='%{SOURCE0}'
|
||||
%endif
|
||||
%setup -q -n %{name}-%{version} %{?with_testsuite:-b1}
|
||||
|
||||
%patch1 -p1 -b .orig
|
||||
%patch3 -p1 -b .orig
|
||||
|
||||
%patch2 -p1 -b .orig
|
||||
%patch6 -p1 -b .orig
|
||||
%patch4 -p1 -b .orig
|
||||
%patch5 -p1 -b .orig
|
||||
|
||||
%if 0%{?fedora} || 0%{?rhel} > 6
|
||||
rm -r libffi-tarballs
|
||||
%endif
|
||||
|
||||
%ifarch armv7hl
|
||||
%patch12 -p1 -b .orig
|
||||
%endif
|
||||
|
||||
%ifarch %{ghc_unregisterized_arches}
|
||||
%ifarch s390x
|
||||
%patch15 -p1 -b .orig
|
||||
%patch16 -p1 -b .orig
|
||||
%endif
|
||||
|
||||
# bigendian
|
||||
%ifarch ppc64 s390x
|
||||
%patch18 -p1 -b .orig
|
||||
%endif
|
||||
|
||||
# debian
|
||||
%patch24 -p1 -b .orig
|
||||
%patch26 -p1 -b .orig
|
||||
%patch27 -p1 -b .orig
|
||||
%patch28 -p1 -b .orig
|
||||
|
||||
%global gen_contents_index gen_contents_index.orig
|
||||
%if %{with haddock}
|
||||
%if %{with docs}
|
||||
if [ ! -f "libraries/%{gen_contents_index}" ]; then
|
||||
echo "Missing libraries/%{gen_contents_index}, needed at end of %%install!"
|
||||
exit 1
|
||||
@ -347,12 +307,8 @@ cat > mk/build.mk << EOF
|
||||
%ifarch %{ghc_llvm_archs}
|
||||
BuildFlavour = perf-llvm
|
||||
%else
|
||||
%if %{with dwarf}
|
||||
BuildFlavour = dwarf
|
||||
%else
|
||||
BuildFlavour = perf
|
||||
%endif
|
||||
%endif
|
||||
%else
|
||||
%ifarch %{ghc_llvm_archs}
|
||||
BuildFlavour = quick-llvm
|
||||
@ -360,33 +316,37 @@ BuildFlavour = quick-llvm
|
||||
BuildFlavour = quick
|
||||
%endif
|
||||
%endif
|
||||
GhcLibWays = v dyn %{?with_ghc_prof:p}
|
||||
%if %{with haddock}
|
||||
GhcLibWays = v dyn %{?with_prof:p}
|
||||
%if %{with docs}
|
||||
HADDOCK_DOCS = YES
|
||||
EXTRA_HADDOCK_OPTS += --hyperlinked-source --hoogle --quickjump
|
||||
BUILD_MAN = YES
|
||||
%else
|
||||
HADDOCK_DOCS = NO
|
||||
%endif
|
||||
%if %{with manual}
|
||||
BUILD_MAN = YES
|
||||
BUILD_SPHINX_HTML = YES
|
||||
%else
|
||||
BUILD_MAN = NO
|
||||
BUILD_SPHINX_HTML = NO
|
||||
%endif
|
||||
EXTRA_HADDOCK_OPTS += --hyperlinked-source
|
||||
BUILD_SPHINX_PDF = NO
|
||||
EOF
|
||||
## for verbose build output
|
||||
#GhcStage1HcOpts=-v4
|
||||
## enable RTS debugging:
|
||||
## (http://ghc.haskell.org/trac/ghc/wiki/Debugging/RuntimeSystem)
|
||||
#EXTRA_HC_OPTS=-debug
|
||||
|
||||
%build
|
||||
# for patch12
|
||||
%ifarch armv7hl
|
||||
autoreconf
|
||||
%else
|
||||
# for patch5
|
||||
autoconf
|
||||
%endif
|
||||
|
||||
%ghc_set_gcc_flags
|
||||
# replace later with ghc_set_gcc_flags
|
||||
export CFLAGS="${CFLAGS:-%optflags}"
|
||||
export LDFLAGS="${LDFLAGS:-%{?__global_ldflags}}"
|
||||
# for ghc >= 8.2
|
||||
export CC=%{_bindir}/gcc
|
||||
|
||||
# * %%configure induces cross-build due to different target/host/build platform names
|
||||
./configure --prefix=%{_prefix} --exec-prefix=%{_exec_prefix} \
|
||||
--bindir=%{_bindir} --sbindir=%{_sbindir} --sysconfdir=%{_sysconfdir} \
|
||||
@ -394,15 +354,14 @@ export CC=%{_bindir}/gcc
|
||||
--libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} \
|
||||
--sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} \
|
||||
--docdir=%{_docdir}/ghc \
|
||||
--with-llc=%{_bindir}/llc-%{llvm_major} --with-opt=%{_bindir}/opt-%{llvm_major} \
|
||||
%if 0%{?fedora} || 0%{?rhel} > 6
|
||||
--with-system-libffi \
|
||||
%ifarch %{ghc_unregisterized_arches}
|
||||
--enable-unregisterised \
|
||||
%endif
|
||||
%{?with_dwarf:--enable-dwarf-unwind} \
|
||||
%{nil}
|
||||
|
||||
# avoid "ghc: hGetContents: invalid argument (invalid byte sequence)"
|
||||
export LANG=C.utf8
|
||||
export LANG=en_US.utf8
|
||||
make %{?_smp_mflags}
|
||||
|
||||
|
||||
@ -410,72 +369,97 @@ make %{?_smp_mflags}
|
||||
make DESTDIR=%{buildroot} install
|
||||
|
||||
%if %{defined _ghcdynlibdir}
|
||||
mv %{buildroot}%{ghclibdir}/*/libHS*ghc%{ghc_version}.so %{buildroot}%{_ghcdynlibdir}/
|
||||
for i in $(find %{buildroot} -type f -executable -exec sh -c "file {} | grep -q 'dynamically linked'" \; -print); do
|
||||
mv %{buildroot}%{ghclibdir}/*/libHS*ghc%{ghc_version}.so %{buildroot}%{_libdir}/
|
||||
for i in $(find %{buildroot} -type f -exec sh -c "file {} | grep -q 'dynamically linked'" \; -print); do
|
||||
chrpath -d $i
|
||||
done
|
||||
for i in %{buildroot}%{ghclibdir}/package.conf.d/*.conf; do
|
||||
sed -i -e 's!^dynamic-library-dirs: .*!dynamic-library-dirs: %{_ghcdynlibdir}!' $i
|
||||
sed -i -e 's!^dynamic-library-dirs: .*!dynamic-library-dirs: %{_libdir}!' $i
|
||||
done
|
||||
sed -i -e 's!^library-dirs: %{ghclibdir}/rts!&\ndynamic-library-dirs: %{_ghcdynlibdir}!' %{buildroot}%{ghclibdir}/package.conf.d/rts.conf
|
||||
%endif
|
||||
|
||||
# containers src moved to a subdir
|
||||
cp -p libraries/containers/containers/LICENSE libraries/containers/LICENSE
|
||||
|
||||
# libraries licenses
|
||||
rm %{buildroot}%{ghc_html_libraries_dir}/{ghc-prim,integer-gmp}-*/LICENSE
|
||||
mkdir -p %{buildroot}%{_ghclicensedir}
|
||||
for i in $(cd %{buildroot}%{ghc_html_libraries_dir}; ls */LICENSE); do
|
||||
pkg=$(dirname $i | sed -e "s/\\(.*\\)-.*/\\1/")
|
||||
mkdir %{buildroot}%{_ghclicensedir}/ghc-$pkg
|
||||
mv %{buildroot}%{ghc_html_libraries_dir}/$i %{buildroot}%{_ghclicensedir}/ghc-$pkg/
|
||||
done
|
||||
|
||||
for i in %{ghc_packages_list}; do
|
||||
name=$(echo $i | sed -e "s/\(.*\)-.*/\1/")
|
||||
ver=$(echo $i | sed -e "s/.*-\(.*\)/\1/")
|
||||
%ghc_gen_filelists $name $ver
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8
|
||||
echo "%%doc libraries/$name/LICENSE" >> ghc-$name.files
|
||||
%else
|
||||
echo "%%license libraries/$name/LICENSE" >> ghc-$name.files
|
||||
%endif
|
||||
done
|
||||
|
||||
echo "%%dir %{ghclibdir}" >> ghc-base%{?_ghcdynlibdir:-devel}.files
|
||||
echo "%{ghclibdir}/include" >> ghc-base-devel.files
|
||||
|
||||
%ghc_gen_filelists ghc-boot %{ghc_version_override}
|
||||
%ghc_gen_filelists ghc %{ghc_version_override}
|
||||
%ghc_gen_filelists ghci %{ghc_version_override}
|
||||
%ghc_gen_filelists ghc-prim 0.5.3
|
||||
%ghc_gen_filelists integer-gmp 1.0.2.0
|
||||
%ghc_gen_filelists ghc-prim 0.5.1.1
|
||||
%ghc_gen_filelists integer-gmp 1.0.1.0
|
||||
|
||||
%define merge_filelist()\
|
||||
cp -p libraries/%1/LICENSE libraries/LICENSE.%1\
|
||||
echo "%%license libraries/LICENSE.%1" >> ghc-%2.files\
|
||||
cat ghc-%1.files >> ghc-%2.files\
|
||||
for i in devel doc prof; do\
|
||||
cat ghc-%1-$i.files >> ghc-%2-$i.files\
|
||||
done
|
||||
cat ghc-%1-devel.files >> ghc-%2-devel.files\
|
||||
cp -p libraries/%1/LICENSE libraries/LICENSE.%1\
|
||||
%if 0%{?rhel} && 0%{?rhel} < 8\
|
||||
echo "%%doc libraries/LICENSE.%1" >> ghc-%2.files\
|
||||
%else\
|
||||
echo "%%license libraries/LICENSE.%1" >> ghc-%2.files\
|
||||
%endif
|
||||
|
||||
%merge_filelist integer-gmp base
|
||||
%merge_filelist ghc-prim base
|
||||
|
||||
# add rts libs
|
||||
rm -f rts.files
|
||||
touch rts.files
|
||||
ls %{buildroot}%{?_ghcdynlibdir}%{!?_ghcdynlibdir:%{ghclibdir}/rts}/libHSrts*-ghc%{ghc_version}.so >> rts.files
|
||||
find %{buildroot}%{ghclibdir}/rts -type d -fprintf rts-devel.files '%%%%dir %p\n' -o -name 'libHSrts*_p.a' -fprint rts-prof.files -o -fprint rts-devel.files
|
||||
echo "%{ghclibdir}/package.conf.d/rts.conf" >> rts-devel.files
|
||||
sed -i -e "s!%{buildroot}!!g" rts.files rts-devel.files rts-prof.files
|
||||
cat rts.files >> ghc-base.files
|
||||
cat rts-devel.files >> ghc-base-devel.files
|
||||
cat rts-prof.files >> ghc-base-prof.files
|
||||
%if %{defined _ghcdynlibdir}
|
||||
echo "%{ghclibdir}/rts" >> ghc-base-devel.files
|
||||
%else
|
||||
echo "%%dir %{ghclibdir}/rts" >> ghc-base.files
|
||||
ls -d %{buildroot}%{ghclibdir}/rts/lib*.a >> ghc-base-devel.files
|
||||
%endif
|
||||
ls %{buildroot}%{?_ghcdynlibdir}%{!?_ghcdynlibdir:%{ghclibdir}/rts}/libHSrts*.so >> ghc-base.files
|
||||
%if 0%{?rhel} && 0%{?rhel} < 7
|
||||
ls %{buildroot}%{ghclibdir}/rts/libffi.so.* >> ghc-base.files
|
||||
%endif
|
||||
%if %{defined _ghcdynlibdir}
|
||||
sed -i -e 's!^library-dirs: %{ghclibdir}/rts!&\ndynamic-library-dirs: %{_libdir}!' %{buildroot}%{ghclibdir}/package.conf.d/rts.conf
|
||||
%endif
|
||||
|
||||
ls -d %{buildroot}%{ghclibdir}/package.conf.d/rts.conf %{buildroot}%{ghclibdir}/include >> ghc-base-devel.files
|
||||
%if 0%{?rhel} && 0%{?rhel} < 7
|
||||
ls %{buildroot}%{ghclibdir}/rts/libffi.so >> ghc-base-devel.files
|
||||
%endif
|
||||
|
||||
sed -i -e "s|^%{buildroot}||g" ghc-base*.files
|
||||
|
||||
# these are handled as alternatives
|
||||
for i in hsc2hs runhaskell; do
|
||||
if [ -x %{buildroot}%{_bindir}/$i-ghc ]; then
|
||||
rm %{buildroot}%{_bindir}/$i
|
||||
else
|
||||
mv %{buildroot}%{_bindir}/$i{,-ghc}
|
||||
fi
|
||||
touch %{buildroot}%{_bindir}/$i
|
||||
done
|
||||
|
||||
%ghc_strip_dynlinked
|
||||
|
||||
%if %{with docs}
|
||||
mkdir -p %{buildroot}%{_sysconfdir}/cron.hourly
|
||||
install -p --mode=0755 %SOURCE3 %{buildroot}%{_sysconfdir}/cron.hourly/ghc-doc-index
|
||||
mkdir -p %{buildroot}%{_localstatedir}/lib/ghc
|
||||
touch %{buildroot}%{_localstatedir}/lib/ghc/pkg-dir.cache{,.new}
|
||||
install -p --mode=0755 %SOURCE4 %{buildroot}%{_bindir}/ghc-doc-index
|
||||
|
||||
%if %{with haddock}
|
||||
# generate initial lib doc index
|
||||
cd libraries
|
||||
sh %{gen_contents_index} --intree --verbose
|
||||
cd ..
|
||||
%endif
|
||||
|
||||
# we package the library license files separately
|
||||
find %{buildroot}%{ghc_html_libraries_dir} -name LICENSE -exec rm '{}' ';'
|
||||
|
||||
mkdir -p %{buildroot}%{_mandir}/man1
|
||||
install -p -m 0644 %{SOURCE5} %{buildroot}%{_mandir}/man1/ghc-pkg.1
|
||||
install -p -m 0644 %{SOURCE6} %{buildroot}%{_mandir}/man1/haddock.1
|
||||
@ -536,26 +520,29 @@ make test
|
||||
%endif
|
||||
|
||||
|
||||
%if %{defined ghclibdir}
|
||||
%transfiletriggerin compiler -- %{ghclibdir}/package.conf.d
|
||||
%ghc_pkg_recache
|
||||
%end
|
||||
%post compiler
|
||||
# Alas, GHC, Hugs, and nhc all come with different set of tools in
|
||||
# addition to a runFOO:
|
||||
#
|
||||
# * GHC: hsc2hs
|
||||
# * Hugs: hsc2hs, cpphs
|
||||
# * nhc: cpphs
|
||||
#
|
||||
# Therefore it is currently not possible to use --slave below to form
|
||||
# link groups under a single name 'runhaskell'. Either these tools
|
||||
# should be disentangled from the Haskell implementations, or all
|
||||
# implementations should have the same set of tools. *sigh*
|
||||
|
||||
%transfiletriggerpostun compiler -- %{ghclibdir}/package.conf.d
|
||||
%ghc_pkg_recache
|
||||
%end
|
||||
update-alternatives --install %{_bindir}/runhaskell runhaskell \
|
||||
%{_bindir}/runghc 500
|
||||
update-alternatives --install %{_bindir}/hsc2hs hsc2hs \
|
||||
%{_bindir}/hsc2hs-ghc 500
|
||||
|
||||
|
||||
%if %{with haddock}
|
||||
%transfiletriggerin doc-index -- %{ghc_html_libraries_dir}
|
||||
env -C %{ghc_html_libraries_dir} ./gen_contents_index
|
||||
%end
|
||||
|
||||
%transfiletriggerpostun doc-index -- %{ghc_html_libraries_dir}
|
||||
env -C %{ghc_html_libraries_dir} ./gen_contents_index
|
||||
%end
|
||||
%endif
|
||||
%endif
|
||||
%preun compiler
|
||||
if [ "$1" = 0 ]; then
|
||||
update-alternatives --remove runhaskell %{_bindir}/runghc
|
||||
update-alternatives --remove hsc2hs %{_bindir}/hsc2hs-ghc
|
||||
fi
|
||||
|
||||
|
||||
%files
|
||||
@ -571,10 +558,11 @@ env -C %{ghc_html_libraries_dir} ./gen_contents_index
|
||||
%{_bindir}/ghci-%{version}
|
||||
%{_bindir}/hp2ps
|
||||
%{_bindir}/hpc
|
||||
%{_bindir}/hsc2hs
|
||||
%{_bindir}/runghc
|
||||
%{_bindir}/runghc-%{ghc_version}
|
||||
%{_bindir}/runhaskell
|
||||
%ghost %{_bindir}/hsc2hs
|
||||
%{_bindir}/hsc2hs-ghc
|
||||
%{_bindir}/runghc*
|
||||
%ghost %{_bindir}/runhaskell
|
||||
%{_bindir}/runhaskell-ghc
|
||||
%dir %{ghclibdir}/bin
|
||||
%{ghclibdir}/bin/ghc
|
||||
%{ghclibdir}/bin/ghc-pkg
|
||||
@ -582,19 +570,17 @@ env -C %{ghc_html_libraries_dir} ./gen_contents_index
|
||||
%{ghclibdir}/bin/hsc2hs
|
||||
%{ghclibdir}/bin/ghc-iserv
|
||||
%{ghclibdir}/bin/ghc-iserv-dyn
|
||||
%if %{with ghc_prof}
|
||||
%if %{with prof}
|
||||
%{ghclibdir}/bin/ghc-iserv-prof
|
||||
%endif
|
||||
%{ghclibdir}/bin/runghc
|
||||
%ifnarch %{ghc_unregisterized_arches}
|
||||
%ifnarch s390 s390x %{mips}
|
||||
%{ghclibdir}/bin/ghc-split
|
||||
%endif
|
||||
%{ghclibdir}/bin/hp2ps
|
||||
%{ghclibdir}/bin/unlit
|
||||
%{ghclibdir}/ghc-usage.txt
|
||||
%{ghclibdir}/ghci-usage.txt
|
||||
%{ghclibdir}/llvm-passes
|
||||
%{ghclibdir}/llvm-targets
|
||||
%dir %{ghclibdir}/package.conf.d
|
||||
%ghost %{ghclibdir}/package.conf.d/package.cache
|
||||
%{ghclibdir}/package.conf.d/package.cache.lock
|
||||
@ -607,150 +593,53 @@ env -C %{ghc_html_libraries_dir} ./gen_contents_index
|
||||
%{_mandir}/man1/haddock.1*
|
||||
%{_mandir}/man1/runghc.1*
|
||||
|
||||
%if %{with haddock}
|
||||
%if %{with docs}
|
||||
%{_bindir}/ghc-doc-index
|
||||
%{_bindir}/haddock
|
||||
%{_bindir}/haddock-ghc-%{version}
|
||||
%{ghclibdir}/bin/haddock
|
||||
%{ghclibdir}/html
|
||||
%{ghclibdir}/latex
|
||||
%if %{with docs}
|
||||
%{_mandir}/man1/ghc.1*
|
||||
%endif
|
||||
%dir %{ghc_html_dir}/libraries
|
||||
%{ghc_html_dir}/libraries/gen_contents_index
|
||||
%{ghc_html_dir}/libraries/prologue.txt
|
||||
%ghost %{ghc_html_dir}/libraries/doc-index*.html
|
||||
%ghost %{ghc_html_dir}/libraries/haddock-bundle.min.js
|
||||
%ghost %{ghc_html_dir}/libraries/haddock-util.js
|
||||
%ghost %{ghc_html_dir}/libraries/hslogo-16.png
|
||||
%ghost %{ghc_html_dir}/libraries/index*.html
|
||||
%ghost %{ghc_html_dir}/libraries/linuwial.css
|
||||
%ghost %{ghc_html_dir}/libraries/minus.gif
|
||||
%ghost %{ghc_html_dir}/libraries/ocean.css
|
||||
%ghost %{ghc_html_dir}/libraries/plus.gif
|
||||
%ghost %{ghc_html_dir}/libraries/quick-jump.css
|
||||
%ghost %{ghc_html_dir}/libraries/synopsis.png
|
||||
%endif
|
||||
%if %{with manual}
|
||||
%{_mandir}/man1/ghc.1*
|
||||
%dir %{_localstatedir}/lib/ghc
|
||||
%ghost %{_localstatedir}/lib/ghc/pkg-dir.cache
|
||||
%ghost %{_localstatedir}/lib/ghc/pkg-dir.cache.new
|
||||
%endif
|
||||
|
||||
%files devel
|
||||
|
||||
%if %{with haddock}
|
||||
%files doc
|
||||
|
||||
%files doc-index
|
||||
%if %{with docs}
|
||||
%files doc-cron
|
||||
%config(noreplace) %{_sysconfdir}/cron.hourly/ghc-doc-index
|
||||
%endif
|
||||
|
||||
%if %{with manual}
|
||||
%files libraries
|
||||
|
||||
|
||||
%if %{with docs}
|
||||
%files manual
|
||||
## needs pandoc
|
||||
#%%{ghc_html_dir}/Cabal
|
||||
%if %{with haddock}
|
||||
%if %{with docs}
|
||||
%{ghc_html_dir}/haddock
|
||||
%endif
|
||||
%{ghc_html_dir}/index.html
|
||||
%{ghc_html_dir}/users_guide
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%if %{with ghc_prof}
|
||||
%files prof
|
||||
%endif
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Aug 18 2020 Troy Dawson <tdawson@redhat.com> - 8.8.4-108
|
||||
- Cleanup old %if statements
|
||||
|
||||
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 8.8.4-107
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Thu Jul 16 2020 Jens Petersen <petersen@redhat.com> - 8.8.4-106
|
||||
- 8.8.4 bugfix releases
|
||||
- https://downloads.haskell.org/ghc/8.8.4/docs/html/users_guide/8.8.4-notes.html
|
||||
- bytestring-0.10.10.1 and process-1.6.9.0
|
||||
|
||||
* Tue Jul 14 2020 Jens Petersen <petersen@redhat.com> - 8.8.3-105
|
||||
- rebase to 8.8.3 from ghc:8.8 module stream
|
||||
- https://downloads.haskell.org/ghc/8.8.1/docs/html/users_guide/8.8.1-notes.html
|
||||
- https://downloads.haskell.org/ghc/8.8.2/docs/html/users_guide/8.8.2-notes.html
|
||||
- https://downloads.haskell.org/ghc/8.8.3/docs/html/users_guide/8.8.3-notes.html
|
||||
|
||||
* Mon Jul 6 2020 Jens Petersen <petersen@redhat.com> - 8.6.5-104
|
||||
- use python3-sphinx also for rhel8
|
||||
|
||||
* Thu Apr 9 2020 Jens Petersen <petersen@redhat.com> - 8.6.5-103
|
||||
- fix running of gen_contents_index when no haddocks (#1813548)
|
||||
|
||||
* Mon Feb 10 2020 Jens Petersen <petersen@redhat.com> - 8.6.5-102
|
||||
- rebuild against ghc-rpm-macros fixed for subpackage prof deps
|
||||
|
||||
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 8.6.5-101
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Wed Jul 31 2019 Jens Petersen <petersen@redhat.com> - 8.6.5-100
|
||||
- update to GHC 8.6.5 (backport ghc:8.6 module stream)
|
||||
- https://downloads.haskell.org/~ghc/8.6.5/docs/html/users_guide/8.6.1-notes.html
|
||||
- https://downloads.haskell.org/~ghc/8.6.5/docs/html/users_guide/8.6.2-notes.html
|
||||
- https://downloads.haskell.org/~ghc/8.6.5/docs/html/users_guide/8.6.3-notes.html
|
||||
- https://downloads.haskell.org/~ghc/8.6.5/docs/html/users_guide/8.6.4-notes.html
|
||||
- https://downloads.haskell.org/~ghc/8.6.5/docs/html/users_guide/8.6.5-notes.html
|
||||
- fix process library initgroups issue
|
||||
(https://github.com/haskell/process/pull/148)
|
||||
- add fix-build-using-unregisterized-v8.4.patch for s390x (#1648537)
|
||||
https://gitlab.haskell.org/ghc/ghc/issues/15913
|
||||
- add bigendian patch for containers (#1651448)
|
||||
https://gitlab.haskell.org/ghc/ghc/issues/15411
|
||||
- Debian patches:
|
||||
- add_-latomic_to_ghc-prim.patch,
|
||||
- rts osReserveHeapMemory block alignment
|
||||
|
||||
* Tue Jul 30 2019 Jens Petersen <petersen@redhat.com> - 8.4.4-99
|
||||
- subpackage library haddock documentation and profiling libraries
|
||||
- add ghc-doc and ghc-prof metapackages to pull in lib docs and prof libs
|
||||
- rename ghc-doc-cron with ghc-doc-index using file triggers
|
||||
- rename ghc-libraries to ghc-devel
|
||||
- for quickbuild disable debuginfo
|
||||
- lock ghc-compiler requires ghc-base-devel to ver-rel
|
||||
- drop alternatives for runhaskell and hsc2hs
|
||||
- use ghc_set_gcc_flags, with_ghc_prof, and with_haddock
|
||||
|
||||
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org>
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Fri Jun 28 2019 Jens Petersen <petersen@redhat.com> - 8.4.4-75
|
||||
- add transfiletriggers that will replace individual post/postun scriptlets
|
||||
|
||||
* Mon Mar 4 2019 Jens Petersen <petersen@redhat.com> - 8.4.4-74
|
||||
- unregisterized: fix 32bit adjacent floats issue
|
||||
(https://ghc.haskell.org/trac/ghc/ticket/15853)
|
||||
|
||||
* Sat Feb 16 2019 Jens Petersen <petersen@redhat.com> - 8.4.4-73
|
||||
- update to GHC 8.4
|
||||
- https://ghc.haskell.org/trac/ghc/blog/ghc-8.4.1-released
|
||||
- new patches:
|
||||
- 6e361d895dda4600a85e01c72ff219474b5c7190.patch
|
||||
- fix-build-using-unregisterized-v8.2.patch
|
||||
- ghc-sphinx-1.8-4eebc8016.patch
|
||||
- dropped patch:
|
||||
- D4159.patch
|
||||
- ghc-7.8-arm7_saner-linker-opt-handling-9873.patch
|
||||
- ghc-Debian-reproducible-tmp-names.patch
|
||||
- rely on rpm to strip
|
||||
|
||||
* Fri Feb 8 2019 Jens Petersen <petersen@redhat.com> - 8.2.2-72
|
||||
- add ghc_unregisterized_arches
|
||||
- Recommends zlib-devel
|
||||
- epel6 tweaks
|
||||
|
||||
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 8.2.2-72
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Sun Nov 18 2018 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 8.2.2-71
|
||||
- Use C.UTF-8 locale
|
||||
See https://fedoraproject.org/wiki/Changes/Remove_glibc-langpacks-all_from_buildroot
|
||||
|
||||
* Mon Oct 22 2018 Jens Petersen <petersen@redhat.com>
|
||||
- Recommends for ghc-manual and ghc-doc-cron
|
||||
|
||||
* Wed Oct 17 2018 Jens Petersen <petersen@redhat.com> - 8.2.2-70
|
||||
- backport quickbuild config from 8.4 module and extend to perf_build
|
||||
- disable -Wall on s390x like in 8.4 module to silence warning flood
|
||||
|
4
sources
4
sources
@ -1,2 +1,2 @@
|
||||
SHA512 (ghc-8.8.4-src.tar.xz.sig) = 1ed2e64e8b75a147d7c66b0018119f54ac740131b6f74612aa975c9120d8f7a8a2286829cef22ef2cd16262af0604659daa41c09ef3bdec6c22b8d086fbc1166
|
||||
SHA512 (ghc-8.8.4-src.tar.xz) = efd23bd819f7429486696a3a929a040471db7ea8a2d1f1d832e4cf0825b9e1e0c5e6ecad0ab8376f58b74e9c28c1d2f773bd126596d6d853c9e57d57e5ceb090
|
||||
SHA512 (ghc-8.2.2-src.tar.xz) = 6549416f470b599973d409fa45f59c25b07e6a94798cef1a19ad432547dc225338cf4dbc4a4793114b4a417798a3b59b122b92b020251074405c5302b7ffe799
|
||||
SHA512 (ghc-8.2.2-testsuite.tar.xz) = 5b60413910bce2ef0d71e2f531d7297cefc0b03df3e23d63f7a872d9a264e1512b2d6631a3fba35e72d113389762ba34d503649ea4a852ce9fd42e94ef6b96dc
|
||||
|
Loading…
Reference in New Issue
Block a user