summaryrefslogtreecommitdiff
path: root/compiler/main/SysTools/Tasks.hs
diff options
context:
space:
mode:
authorÖmer Sinan Ağacan <omeragacan@gmail.com>2019-08-23 14:43:11 +0300
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-08-29 04:28:35 -0400
commitbf9dfe1ca32270f5e946e0f8ac1bb97184de6e4c (patch)
treea0b9142a0f43caff401f6b0b1b3af85e70712c28 /compiler/main/SysTools/Tasks.hs
parent66282ba5d7ef0e4f7491464fc05b83e4526c9704 (diff)
downloadhaskell-bf9dfe1ca32270f5e946e0f8ac1bb97184de6e4c.tar.gz
Fix LLVM version check yet again
There were two problems with LLVM version checking: - The parser would only parse x and x.y formatted versions. E.g. 1.2.3 would be rejected. - The version check was too strict and would reject x.y formatted versions. E.g. when we support version 7 it'd reject 7.0 ("LLVM version 7.0") and only accept 7 ("LLVM version 7"). We now parse versions with arbitrarily deep minor numbering (x.y.z.t...) and accept versions as long as the major version matches the supported version (e.g. 7.1, 7.1.2, 7.1.2.3 ...).
Diffstat (limited to 'compiler/main/SysTools/Tasks.hs')
-rw-r--r--compiler/main/SysTools/Tasks.hs18
1 files changed, 5 insertions, 13 deletions
diff --git a/compiler/main/SysTools/Tasks.hs b/compiler/main/SysTools/Tasks.hs
index eeaadfa5b8..9ee3ba467c 100644
--- a/compiler/main/SysTools/Tasks.hs
+++ b/compiler/main/SysTools/Tasks.hs
@@ -16,14 +16,13 @@ import Outputable
import GHC.Platform
import Util
-import Data.Char
import Data.List
import System.IO
import System.Process
import GhcPrelude
-import LlvmCodeGen.Base (LlvmVersion (..), llvmVersionStr, supportedLlvmVersion)
+import LlvmCodeGen.Base (LlvmVersion, llvmVersionStr, supportedLlvmVersion, parseLlvmVersion)
import SysTools.Process
import SysTools.Info
@@ -209,7 +208,7 @@ figureLlvmVersion dflags = traceToolCommand dflags "llc" $ do
-- of the options they've specified. llc doesn't care what other
-- options are specified when '-version' is used.
args' = args ++ ["-version"]
- ver <- catchIO (do
+ catchIO (do
(pin, pout, perr, _) <- runInteractiveProcess pgm args'
Nothing Nothing
{- > llc -version
@@ -219,18 +218,12 @@ figureLlvmVersion dflags = traceToolCommand dflags "llc" $ do
-}
hSetBinaryMode pout False
_ <- hGetLine pout
- vline <- dropWhile (not . isDigit) `fmap` hGetLine pout
- v <- case span (/= '.') vline of
- ("",_) -> fail "no digits!"
- (x,"") -> return $ LlvmVersion (read x)
- (x,y) -> return $ LlvmVersionOld
- (read x)
- (read $ takeWhile isDigit $ drop 1 y)
-
+ vline <- hGetLine pout
+ let mb_ver = parseLlvmVersion vline
hClose pin
hClose pout
hClose perr
- return $ Just v
+ return mb_ver
)
(\err -> do
debugTraceMsg dflags 2
@@ -242,7 +235,6 @@ figureLlvmVersion dflags = traceToolCommand dflags "llc" $ do
text ("Make sure you have installed LLVM " ++
llvmVersionStr supportedLlvmVersion) ]
return Nothing)
- return ver
runLink :: DynFlags -> [Option] -> IO ()