{-# LANGUAGE NoImplicitPrelude #-}
module Stack.Types.MsysEnvironment
( MsysEnvironment (..)
, msysEnvArch
, relDirMsysEnv
) where
import Data.Aeson.Types ( FromJSON (..) )
import Distribution.System ( Arch (..) )
import Stack.Constants
( relDirClang32, relDirClang64, relDirClangArm64
, relDirMingw32, relDirMingw64, relDirUcrt64
)
import Stack.Prelude
data MsysEnvironment
= CLANG32
| CLANG64
| CLANGARM64
| MINGW32
| MINGW64
| UCRT64
deriving (MsysEnvironment -> MsysEnvironment -> Bool
(MsysEnvironment -> MsysEnvironment -> Bool)
-> (MsysEnvironment -> MsysEnvironment -> Bool)
-> Eq MsysEnvironment
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MsysEnvironment -> MsysEnvironment -> Bool
== :: MsysEnvironment -> MsysEnvironment -> Bool
$c/= :: MsysEnvironment -> MsysEnvironment -> Bool
/= :: MsysEnvironment -> MsysEnvironment -> Bool
Eq, Eq MsysEnvironment
Eq MsysEnvironment =>
(MsysEnvironment -> MsysEnvironment -> Ordering)
-> (MsysEnvironment -> MsysEnvironment -> Bool)
-> (MsysEnvironment -> MsysEnvironment -> Bool)
-> (MsysEnvironment -> MsysEnvironment -> Bool)
-> (MsysEnvironment -> MsysEnvironment -> Bool)
-> (MsysEnvironment -> MsysEnvironment -> MsysEnvironment)
-> (MsysEnvironment -> MsysEnvironment -> MsysEnvironment)
-> Ord MsysEnvironment
MsysEnvironment -> MsysEnvironment -> Bool
MsysEnvironment -> MsysEnvironment -> Ordering
MsysEnvironment -> MsysEnvironment -> MsysEnvironment
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: MsysEnvironment -> MsysEnvironment -> Ordering
compare :: MsysEnvironment -> MsysEnvironment -> Ordering
$c< :: MsysEnvironment -> MsysEnvironment -> Bool
< :: MsysEnvironment -> MsysEnvironment -> Bool
$c<= :: MsysEnvironment -> MsysEnvironment -> Bool
<= :: MsysEnvironment -> MsysEnvironment -> Bool
$c> :: MsysEnvironment -> MsysEnvironment -> Bool
> :: MsysEnvironment -> MsysEnvironment -> Bool
$c>= :: MsysEnvironment -> MsysEnvironment -> Bool
>= :: MsysEnvironment -> MsysEnvironment -> Bool
$cmax :: MsysEnvironment -> MsysEnvironment -> MsysEnvironment
max :: MsysEnvironment -> MsysEnvironment -> MsysEnvironment
$cmin :: MsysEnvironment -> MsysEnvironment -> MsysEnvironment
min :: MsysEnvironment -> MsysEnvironment -> MsysEnvironment
Ord, Int -> MsysEnvironment -> ShowS
[MsysEnvironment] -> ShowS
MsysEnvironment -> String
(Int -> MsysEnvironment -> ShowS)
-> (MsysEnvironment -> String)
-> ([MsysEnvironment] -> ShowS)
-> Show MsysEnvironment
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MsysEnvironment -> ShowS
showsPrec :: Int -> MsysEnvironment -> ShowS
$cshow :: MsysEnvironment -> String
show :: MsysEnvironment -> String
$cshowList :: [MsysEnvironment] -> ShowS
showList :: [MsysEnvironment] -> ShowS
Show)
instance FromJSON MsysEnvironment where
parseJSON :: Value -> Parser MsysEnvironment
parseJSON Value
v = do
String
s <- Value -> Parser String
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
case String
s of
String
"CLANG32" -> MsysEnvironment -> Parser MsysEnvironment
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MsysEnvironment
CLANG32
String
"CLANG64" -> MsysEnvironment -> Parser MsysEnvironment
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MsysEnvironment
CLANG64
String
"CLANGARM64" -> MsysEnvironment -> Parser MsysEnvironment
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MsysEnvironment
CLANGARM64
String
"MINGW32" -> MsysEnvironment -> Parser MsysEnvironment
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MsysEnvironment
MINGW32
String
"MINGW64" -> MsysEnvironment -> Parser MsysEnvironment
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MsysEnvironment
MINGW64
String
"UCRT64" -> MsysEnvironment -> Parser MsysEnvironment
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MsysEnvironment
UCRT64
String
_ -> String -> Parser MsysEnvironment
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String
"Unknown MSYS2 environment: " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
s)
msysEnvArch :: MsysEnvironment -> Arch
msysEnvArch :: MsysEnvironment -> Arch
msysEnvArch MsysEnvironment
env = case MsysEnvironment
env of
MsysEnvironment
CLANG32 -> Arch
I386
MsysEnvironment
CLANG64 -> Arch
X86_64
MsysEnvironment
CLANGARM64 -> Arch
AArch64
MsysEnvironment
MINGW32 -> Arch
I386
MsysEnvironment
MINGW64 -> Arch
X86_64
MsysEnvironment
UCRT64 -> Arch
X86_64
relDirMsysEnv :: MsysEnvironment -> Path Rel Dir
relDirMsysEnv :: MsysEnvironment -> Path Rel Dir
relDirMsysEnv MsysEnvironment
env = case MsysEnvironment
env of
MsysEnvironment
CLANG32 -> Path Rel Dir
relDirClang32
MsysEnvironment
CLANG64 -> Path Rel Dir
relDirClang64
MsysEnvironment
CLANGARM64 -> Path Rel Dir
relDirClangArm64
MsysEnvironment
MINGW32 -> Path Rel Dir
relDirMingw32
MsysEnvironment
MINGW64 -> Path Rel Dir
relDirMingw64
MsysEnvironment
UCRT64 -> Path Rel Dir
relDirUcrt64