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