1module Cabal2Nix.Generate ( cabal2nix, cabal2nix' ) where
4import Cabal2Nix.License
5import Cabal2Nix.Normalize
6import Cabal2Nix.PostProcess
8import Distribution.Compiler
9import Distribution.Nixpkgs.Haskell
10import qualified Distribution.Package as Cabal
11import qualified Distribution.PackageDescription as Cabal
12import Distribution.PackageDescription.Configuration
13import Distribution.System
14import qualified Data.Set as Set
16cabal2nix :: Cabal.FlagAssignment -> Cabal.GenericPackageDescription -> Derivation
17cabal2nix flags' cabal = drv { cabalFlags = flags }
18 where drv = cabal2nix' descr
19 flags = normalizeCabalFlags (flags' ++ configureCabalFlags (Cabal.package (Cabal.packageDescription cabal)))
20 Right (descr, _) = finalizePackageDescription
23 (Platform X86_64 Linux) -- shouldn't be hardcoded
24 (unknownCompilerInfo (CompilerId GHC (Version [7,10,1] [])) NoAbiTag)
28cabal2nix' :: Cabal.PackageDescription -> Derivation
29cabal2nix' tpkg = normalize $ postProcess $ normalize MkDerivation
30 { pname = let Cabal.PackageName x = Cabal.pkgName pkg in x
31 , version = Cabal.pkgVersion pkg
32 , revision = maybe 0 read (lookup "x-revision" xfields)
33 , src = error "cabal2nix left the src field undefined"
34 , isLibrary = isJust (Cabal.library tpkg)
35 , isExecutable = not (null (Cabal.executables tpkg))
36 , extraFunctionArgs = Set.empty
37 , buildDepends = Set.fromList $ map unDep deps
38 , testDepends = Set.fromList $ map unDep tstDeps ++ concatMap Cabal.extraLibs tests
39 , buildTools = Set.fromList $ map unDep tools
40 , extraLibs = Set.fromList libs
41 , pkgConfDeps = Set.fromList pcs
42 , configureFlags = Set.empty
43 , cabalFlags = configureCabalFlags pkg
48 , hyperlinkSource = True
49 , enableSplitObjs = True
51 , editedCabalFile= if isJust (lookup "x-revision" xfields) then fromJust (lookup "x-cabal-file-hash" xfields) else ""
53 { homepage = Cabal.homepage tpkg
54 , description = Cabal.synopsis tpkg
55 , license = fromCabalLicense (Cabal.license tpkg)
56 , platforms = Set.empty
57 , hydraPlatforms = Set.empty
58 , maintainers = Set.empty
63 xfields = Cabal.customFieldsPD tpkg
64 pkg = Cabal.package tpkg
65 deps = Cabal.buildDepends tpkg
66 tests = map Cabal.testBuildInfo (Cabal.testSuites tpkg)
67 libDeps = map Cabal.libBuildInfo (maybeToList (Cabal.library tpkg))
68 exeDeps = map Cabal.buildInfo (Cabal.executables tpkg)
69 tstDeps = concatMap Cabal.buildTools tests ++ concatMap Cabal.pkgconfigDepends tests ++
70 concatMap Cabal.targetBuildDepends tests
71 tools = concatMap Cabal.buildTools (libDeps ++ exeDeps)
72 libs = concatMap Cabal.extraLibs (libDeps ++ exeDeps)
73 pcs = map unDep (concatMap Cabal.pkgconfigDepends (libDeps ++ exeDeps))
75unDep :: Cabal.Dependency -> String
76unDep (Cabal.Dependency (Cabal.PackageName x) _) = x
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list