module Cabal2Nix.Generate ( cabal2nix ) where import Cabal2Nix.Flags import Cabal2Nix.License import Cabal2Nix.Normalize import Cabal2Nix.PostProcess import Data.Maybe import Distribution.Compiler import Distribution.NixOS.Derivation.Cabal import qualified Distribution.Package as Cabal import qualified Distribution.PackageDescription as Cabal import Distribution.PackageDescription.Configuration import Distribution.System cabal2nix :: Cabal.GenericPackageDescription -> Derivation cabal2nix cabal = normalize $ postProcess MkDerivation { pname = let Cabal.PackageName x = Cabal.pkgName pkg in x , version = Cabal.pkgVersion pkg , src = error "cabal2nix left the src field undefined" , isLibrary = isJust (Cabal.library tpkg) , isExecutable = not (null (Cabal.executables tpkg)) , extraFunctionArgs = [] , buildDepends = map unDep deps , testDepends = map unDep tstDeps ++ concatMap Cabal.extraLibs tests , buildTools = map unDep tools , extraLibs = libs , pkgConfDeps = pcs , configureFlags = [] , cabalFlags = configureCabalFlags pkg , runHaddock = True , jailbreak = False , doCheck = True , testTarget = "" , hyperlinkSource = True , enableSplitObjs = True , phaseOverrides = "" , metaSection = Meta { homepage = Cabal.homepage descr , description = Cabal.synopsis descr , license = fromCabalLicense (Cabal.license descr) , platforms = [] , hydraPlatforms = [] , maintainers = [] } } where descr = Cabal.packageDescription cabal pkg = Cabal.package descr deps = Cabal.buildDepends tpkg tests = map Cabal.testBuildInfo (Cabal.testSuites tpkg) libDeps = map Cabal.libBuildInfo (maybeToList (Cabal.library tpkg)) exeDeps = map Cabal.buildInfo (Cabal.executables tpkg) tstDeps = concatMap Cabal.buildTools tests ++ concatMap Cabal.pkgconfigDepends tests ++ concatMap Cabal.targetBuildDepends tests tools = concatMap Cabal.buildTools (libDeps ++ exeDeps) libs = concatMap Cabal.extraLibs (libDeps ++ exeDeps) pcs = map unDep (concatMap Cabal.pkgconfigDepends (libDeps ++ exeDeps)) Right (tpkg, _) = finalizePackageDescription (configureCabalFlags pkg) (const True) (Platform I386 Linux) -- shouldn't be hardcoded (CompilerId GHC (Version [7,6,3] [])) -- dito [] cabal unDep :: Cabal.Dependency -> String unDep (Cabal.Dependency (Cabal.PackageName x) _) = x