cabal2nix-1.68: 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 sha256 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