packages feed

hark-0.2: src/Parsers/Chost.hs

{-----------------------------------------------------------------
 
  (c) 2008-2009 Markus Dittrich 
 
  This program is free software; you can redistribute it 
  and/or modify it under the terms of the GNU General Public 
  License Version 3 as published by the Free Software Foundation. 
 
  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 Version 3 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.

--------------------------------------------------------------------}


-- | this module parses the CHOST info of a package
module Parsers.Chost ( get_chost
                     ) where 


-- imports
import qualified Data.ByteString as B(ByteString)
import qualified Data.ByteString.Char8 as BC(pack)
import Prelude
import System.FilePath.Posix((</>))
import Text.Regex.PCRE((=~))


-- local imports
import Helpers.FileIO(read_file)



-- | open the SLOT info of a package and return as a
-- ByteString
get_chost :: FilePath -> IO B.ByteString
get_chost p = read_file (p </> "CHOST") 
             >>= \item -> return $ determine_chost item

  where
    -- if we can't figure out the CHOST we simply
    -- propagate the string "???" to the user
    determine_chost x 
      | x =~ "i686-"      = BC.pack "x86"
      | x =~ "x86_64-"    = BC.pack "amd64" 
      | x =~ "alpha-"     = BC.pack "alpha"
      | x =~ "arm-"       = BC.pack "arm"
      | x =~ "hppa-"      = BC.pack "hppa"
      | x =~ "ia64-"      = BC.pack "ia64"
      | x =~ "m68k-"      = BC.pack "m68k"
      | x =~ "mips64-"    = BC.pack "mips"
      | x =~ "powerpc-"   = BC.pack "ppc"
      | x =~ "powerpc64-" = BC.pack "ppc64"
      | x =~ "s390-"      = BC.pack "s390"
      | x =~ "sh-"        = BC.pack "sh"
      | x =~ "sparc-"     = BC.pack "sparc"
      | otherwise         = BC.pack "???"