{- arch-tag: Debian Package utilities main file Copyright (C) 2004 John Goerzen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -} {- | Module : System.Debian Copyright : Copyright (C) 2004 John Goerzen License : GNU GPL, version 2 or above Maintainer : John Goerzen Stability : provisional Portability: portable This module provides various helpful utilities for dealing with Debian files and programs. Written by John Goerzen, jgoerzen\@complete.org -} module System.Debian (-- * Control or Similar File Utilities ControlFile, -- * Version Number Utilities DebVersion, compareDebVersion, checkDebVersion ) where import System.Cmd import System.IO.Unsafe import System.Exit {- | The type representing the contents of a Debian control file, or any control-like file (such as the output from apt-cache show, etc.) -} type ControlFile = [(String, String)] ---------------------------------------------------------------------- -- VERSION NUMBERS ---------------------------------------------------------------------- {- | The type representing a Debian version number. This type is an instance of 'Prelude.Ord', but you can also use 'compareDebVersion' if you prefer. -} data DebVersion = DebVersion String deriving (Eq) instance Ord DebVersion where compare (DebVersion v1) (DebVersion v2) = {- This is OK since compareDebVersion should always be the same. -} unsafePerformIO $ compareDebVersion v1 v2 {- | Compare the versions of two packages. -} compareDebVersion :: String -> String -> IO Ordering compareDebVersion v1 v2 = let runit op = checkDebVersion v1 op v2 in do islt <- runit "lt" if islt then return LT else do isgt <- runit "gt" if isgt then return GT else return EQ checkDebVersion :: String -- ^ Version 1 -> String -- ^ Operator -> String -- ^ Version 2 -> IO Bool checkDebVersion v1 op v2 = do ec <- rawSystem "dpkg" ["--compare-versions", v1, op, v2] case ec of ExitSuccess -> return True ExitFailure _ -> return False