module System.Debian (
ControlFile,
DebVersion, compareDebVersion, checkDebVersion
)
where
import System.Exit ( ExitCode(ExitFailure, ExitSuccess) )
import System.IO.Unsafe (unsafePerformIO)
import System.Process ( rawSystem )
type ControlFile = [(String, String)]
data DebVersion = DebVersion String
deriving (DebVersion -> DebVersion -> Bool
(DebVersion -> DebVersion -> Bool)
-> (DebVersion -> DebVersion -> Bool) -> Eq DebVersion
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DebVersion -> DebVersion -> Bool
== :: DebVersion -> DebVersion -> Bool
$c/= :: DebVersion -> DebVersion -> Bool
/= :: DebVersion -> DebVersion -> Bool
Eq)
instance Ord DebVersion where
compare :: DebVersion -> DebVersion -> Ordering
compare (DebVersion [Char]
v1) (DebVersion [Char]
v2) =
IO Ordering -> Ordering
forall a. IO a -> a
unsafePerformIO (IO Ordering -> Ordering) -> IO Ordering -> Ordering
forall a b. (a -> b) -> a -> b
$ [Char] -> [Char] -> IO Ordering
compareDebVersion [Char]
v1 [Char]
v2
compareDebVersion :: String -> String -> IO Ordering
compareDebVersion :: [Char] -> [Char] -> IO Ordering
compareDebVersion [Char]
v1 [Char]
v2 =
let runit :: [Char] -> IO Bool
runit [Char]
op = [Char] -> [Char] -> [Char] -> IO Bool
checkDebVersion [Char]
v1 [Char]
op [Char]
v2
in do islt <- [Char] -> IO Bool
runit [Char]
"lt"
if islt
then return LT
else do isgt <- runit "gt"
if isgt
then return GT
else return EQ
checkDebVersion :: String
-> String
-> String
-> IO Bool
checkDebVersion :: [Char] -> [Char] -> [Char] -> IO Bool
checkDebVersion [Char]
v1 [Char]
op [Char]
v2 =
do ec <- [Char] -> [[Char]] -> IO ExitCode
rawSystem [Char]
"dpkg" [[Char]
"--compare-versions", [Char]
v1, [Char]
op, [Char]
v2]
case ec of
ExitCode
ExitSuccess -> Bool -> IO Bool
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
True
ExitFailure Int
_ -> Bool -> IO Bool
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
False