module AutoPkg.Cabal ( cabalParse , PackageDescription (..) ) where import Distribution.Version import Distribution.PackageDescription (FlagName (..), GenericPackageDescription (..), PackageDescription (..)) import Distribution.PackageDescription.Parse (parsePackageDescription, ParseResult (..)) import Distribution.PackageDescription.Configuration (finalizePackageDescription) import qualified Distribution.System as DS import qualified Distribution.Compiler as DC import System.Info import AutoPkg.Util cabalParse :: String -> IO PackageDescription cabalParse text = do let desc = parsePackageDescription text case parsePackageDescription text of ParseOk [] generic -> finalize generic _ -> error ("parsePackageDescription : " ++ (show desc)) finalize :: GenericPackageDescription -> IO PackageDescription finalize generic = do let ghc = versionBranch compilerVersion let compiler = DC.CompilerId DC.GHC (Version ghc []) flags = [(FlagName "splitBase", True)] pkgIndex = \ _ -> True platform = DS.Platform archId DS.Linux result = finalizePackageDescription flags pkgIndex platform compiler [] generic return $ either (error . show) fst result archId :: DS.Arch archId = case arch of -- From Distribution.System "i386" -> DS.I386 "x86_64" -> DS.X86_64 "powerpc" -> DS.PPC "powerpc64" -> DS.PPC64 "sparc" -> DS.Sparc "arm" -> DS.Arm "mips" -> DS.Mips "sh" -> DS.SH "ia64" -> DS.IA64 "s390" -> DS.S390 "alpha" -> DS.Alpha "hppa" -> DS.Hppa "rs6000" -> DS.Rs6000 "m68k" -> DS.M68k "vax" -> DS.Vax _ -> errorExit $ "Unknown arch '" ++ arch ++ "'"