summaryrefslogtreecommitdiff
path: root/compiler/main/SysTools/Tasks.hs
diff options
context:
space:
mode:
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 45d2efbbbf..45ca73bcf9 100644
--- a/compiler/main/SysTools/Tasks.hs
+++ b/compiler/main/SysTools/Tasks.hs
@@ -15,14 +15,13 @@ import Outputable
import 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
@@ -193,7 +192,7 @@ figureLlvmVersion dflags = 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
@@ -203,18 +202,12 @@ figureLlvmVersion dflags = 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
@@ -226,7 +219,6 @@ figureLlvmVersion dflags = do
text ("Make sure you have installed LLVM " ++
llvmVersionStr supportedLlvmVersion) ]
return Nothing)
- return ver
runLink :: DynFlags -> [Option] -> IO ()