{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Distribution.Nixpkgs.Haskell.FromCabal
( HaskellResolver, NixpkgsResolver
, fromGenericPackageDescription , finalizeGenericPackageDescription , fromPackageDescription
) where
import Control.Lens
import Data.Maybe
import Data.Set ( Set )
import qualified Data.Set as Set
import Distribution.Compiler
import Distribution.Nixpkgs.Haskell
import qualified Distribution.Nixpkgs.Haskell as Nix
import Distribution.Nixpkgs.Haskell.Constraint
import Distribution.Nixpkgs.Haskell.FromCabal.License
import Distribution.Nixpkgs.Haskell.FromCabal.Name
import Distribution.Nixpkgs.Haskell.FromCabal.Normalize
import Distribution.Nixpkgs.Haskell.FromCabal.PostProcess (postProcess)
import qualified Distribution.Nixpkgs.License as Nix
import qualified Distribution.Nixpkgs.Meta as Nix
import Distribution.Package
import Distribution.PackageDescription
import qualified Distribution.PackageDescription as Cabal
import Distribution.PackageDescription.Configuration as Cabal
import Distribution.System
import Distribution.Text ( display )
import Distribution.Types.ComponentRequestedSpec as Cabal
import Distribution.Types.ExeDependency as Cabal
import Distribution.Types.LegacyExeDependency as Cabal
import Distribution.Types.PkgconfigDependency as Cabal
import Distribution.Types.UnqualComponentName as Cabal
import Distribution.Utils.ShortText ( fromShortText )
import Distribution.Version
import Language.Nix
type HaskellResolver = Dependency -> Bool
type NixpkgsResolver = Identifier -> Maybe Binding
fromGenericPackageDescription :: HaskellResolver -> NixpkgsResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> Derivation
fromGenericPackageDescription :: HaskellResolver
-> NixpkgsResolver
-> Platform
-> CompilerInfo
-> FlagAssignment
-> [Constraint]
-> GenericPackageDescription
-> Derivation
fromGenericPackageDescription HaskellResolver
haskellResolver NixpkgsResolver
nixpkgsResolver Platform
arch CompilerInfo
compiler FlagAssignment
flags [Constraint]
constraints GenericPackageDescription
genDesc =
HaskellResolver
-> NixpkgsResolver
-> [Constraint]
-> FlagAssignment
-> PackageDescription
-> Derivation
fromPackageDescription HaskellResolver
haskellResolver NixpkgsResolver
nixpkgsResolver [Constraint]
missingDeps FlagAssignment
flags PackageDescription
descr
where
(PackageDescription
descr, [Constraint]
missingDeps) = HaskellResolver
-> Platform
-> CompilerInfo
-> FlagAssignment
-> [Constraint]
-> GenericPackageDescription
-> (PackageDescription, [Constraint])
finalizeGenericPackageDescription HaskellResolver
haskellResolver Platform
arch CompilerInfo
compiler FlagAssignment
flags [Constraint]
constraints GenericPackageDescription
genDesc
finalizeGenericPackageDescription :: HaskellResolver -> Platform -> CompilerInfo -> FlagAssignment -> [Constraint] -> GenericPackageDescription -> (PackageDescription, [Dependency])
finalizeGenericPackageDescription :: HaskellResolver
-> Platform
-> CompilerInfo
-> FlagAssignment
-> [Constraint]
-> GenericPackageDescription
-> (PackageDescription, [Constraint])
finalizeGenericPackageDescription HaskellResolver
haskellResolver Platform
arch CompilerInfo
compiler FlagAssignment
flags [Constraint]
constraints GenericPackageDescription
genDesc =
let
finalize :: HaskellResolver -> Either [Dependency] (PackageDescription,FlagAssignment)
finalize :: HaskellResolver
-> Either [Constraint] (PackageDescription, FlagAssignment)
finalize HaskellResolver
resolver = FlagAssignment
-> ComponentRequestedSpec
-> HaskellResolver
-> Platform
-> CompilerInfo
-> [Constraint]
-> GenericPackageDescription
-> Either [Constraint] (PackageDescription, FlagAssignment)
finalizePD FlagAssignment
flags ComponentRequestedSpec
requestedComponents HaskellResolver
resolver Platform
arch CompilerInfo
compiler [Constraint]
constraints GenericPackageDescription
genDesc
requestedComponents :: ComponentRequestedSpec
requestedComponents :: ComponentRequestedSpec
requestedComponents = ComponentRequestedSpec :: Bool -> Bool -> ComponentRequestedSpec
ComponentRequestedSpec
{ testsRequested :: Bool
testsRequested = Bool
True
, benchmarksRequested :: Bool
benchmarksRequested = Bool
True
}
jailbroken :: HaskellResolver -> HaskellResolver
jailbroken :: HaskellResolver -> HaskellResolver
jailbroken HaskellResolver
resolver (Dependency PackageName
pkg VersionRange
_ Set LibraryName
_) = HaskellResolver
resolver (PackageName -> VersionRange -> Set LibraryName -> Constraint
Dependency PackageName
pkg VersionRange
anyVersion Set LibraryName
forall a. Monoid a => a
mempty)
withInternalLibs :: HaskellResolver -> HaskellResolver
withInternalLibs :: HaskellResolver -> HaskellResolver
withInternalLibs HaskellResolver
resolver Constraint
d = Constraint -> PackageName
depPkgName Constraint
d PackageName -> [PackageName] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [PackageName]
internalNames Bool -> Bool -> Bool
|| HaskellResolver
resolver Constraint
d
internalNames :: [PackageName]
internalNames :: [PackageName]
internalNames = [ UnqualComponentName -> PackageName
unqualComponentNameToPackageName UnqualComponentName
n | (UnqualComponentName
n,CondTree ConfVar [Constraint] Library
_) <- GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Constraint] Library)]
condSubLibraries GenericPackageDescription
genDesc ]
[PackageName] -> [PackageName] -> [PackageName]
forall a. [a] -> [a] -> [a]
++ [ UnqualComponentName -> PackageName
unqualComponentNameToPackageName UnqualComponentName
n | LSubLibName UnqualComponentName
n <- Library -> LibraryName
libName (Library -> LibraryName) -> [Library] -> [LibraryName]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> PackageDescription -> [Library]
subLibraries (GenericPackageDescription -> PackageDescription
packageDescription GenericPackageDescription
genDesc) ]
in case HaskellResolver
-> Either [Constraint] (PackageDescription, FlagAssignment)
finalize (HaskellResolver -> HaskellResolver
jailbroken (HaskellResolver -> HaskellResolver
withInternalLibs HaskellResolver
haskellResolver)) of
Left [Constraint]
m -> case HaskellResolver
-> Either [Constraint] (PackageDescription, FlagAssignment)
finalize (Bool -> HaskellResolver
forall a b. a -> b -> a
const Bool
True) of
Left [Constraint]
_ -> [Char] -> (PackageDescription, [Constraint])
forall a. HasCallStack => [Char] -> a
error ([Char]
"Cabal cannot finalize " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ PackageIdentifier -> [Char]
forall a. Pretty a => a -> [Char]
display (GenericPackageDescription -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId GenericPackageDescription
genDesc))
Right (PackageDescription
d,FlagAssignment
_) -> (PackageDescription
d,[Constraint]
m)
Right (PackageDescription
d,FlagAssignment
_) -> (PackageDescription
d,[])
fromPackageDescription :: HaskellResolver -> NixpkgsResolver -> [Dependency] -> FlagAssignment -> PackageDescription -> Derivation
fromPackageDescription :: HaskellResolver
-> NixpkgsResolver
-> [Constraint]
-> FlagAssignment
-> PackageDescription
-> Derivation
fromPackageDescription HaskellResolver
haskellResolver NixpkgsResolver
nixpkgsResolver [Constraint]
missingDeps FlagAssignment
flags PackageDescription {[Char]
[[Char]]
[([Char], [Char])]
[(CompilerFlavor, VersionRange)]
[Benchmark]
[Executable]
[ForeignLib]
[Library]
[TestSuite]
[SourceRepo]
Maybe Library
Maybe SetupBuildInfo
Maybe BuildType
Either License License
Either Version VersionRange
PackageIdentifier
ShortText
specVersionRaw :: PackageDescription -> Either Version VersionRange
package :: PackageDescription -> PackageIdentifier
licenseRaw :: PackageDescription -> Either License License
licenseFiles :: PackageDescription -> [[Char]]
copyright :: PackageDescription -> ShortText
maintainer :: PackageDescription -> ShortText
author :: PackageDescription -> ShortText
stability :: PackageDescription -> ShortText
testedWith :: PackageDescription -> [(CompilerFlavor, VersionRange)]
homepage :: PackageDescription -> ShortText
pkgUrl :: PackageDescription -> ShortText
bugReports :: PackageDescription -> ShortText
sourceRepos :: PackageDescription -> [SourceRepo]
synopsis :: PackageDescription -> ShortText
description :: PackageDescription -> ShortText
category :: PackageDescription -> ShortText
customFieldsPD :: PackageDescription -> [([Char], [Char])]
buildTypeRaw :: PackageDescription -> Maybe BuildType
setupBuildInfo :: PackageDescription -> Maybe SetupBuildInfo
library :: PackageDescription -> Maybe Library
executables :: PackageDescription -> [Executable]
foreignLibs :: PackageDescription -> [ForeignLib]
testSuites :: PackageDescription -> [TestSuite]
benchmarks :: PackageDescription -> [Benchmark]
dataFiles :: PackageDescription -> [[Char]]
dataDir :: PackageDescription -> [Char]
extraSrcFiles :: PackageDescription -> [[Char]]
extraTmpFiles :: PackageDescription -> [[Char]]
extraDocFiles :: PackageDescription -> [[Char]]
extraDocFiles :: [[Char]]
extraTmpFiles :: [[Char]]
extraSrcFiles :: [[Char]]
dataDir :: [Char]
dataFiles :: [[Char]]
benchmarks :: [Benchmark]
testSuites :: [TestSuite]
foreignLibs :: [ForeignLib]
executables :: [Executable]
subLibraries :: [Library]
library :: Maybe Library
setupBuildInfo :: Maybe SetupBuildInfo
buildTypeRaw :: Maybe BuildType
customFieldsPD :: [([Char], [Char])]
category :: ShortText
description :: ShortText
synopsis :: ShortText
sourceRepos :: [SourceRepo]
bugReports :: ShortText
pkgUrl :: ShortText
homepage :: ShortText
testedWith :: [(CompilerFlavor, VersionRange)]
stability :: ShortText
author :: ShortText
maintainer :: ShortText
copyright :: ShortText
licenseFiles :: [[Char]]
licenseRaw :: Either License License
package :: PackageIdentifier
specVersionRaw :: Either Version VersionRange
subLibraries :: PackageDescription -> [Library]
..} = Derivation -> Derivation
normalize (Derivation -> Derivation) -> Derivation -> Derivation
forall a b. (a -> b) -> a -> b
$ Derivation -> Derivation
postProcess (Derivation -> Derivation) -> Derivation -> Derivation
forall a b. (a -> b) -> a -> b
$ Derivation
nullDerivation
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
isLibrary ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe Library -> Bool
forall a. Maybe a -> Bool
isJust Maybe Library
library
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (PackageIdentifier -> Identity PackageIdentifier)
-> Derivation -> Identity Derivation
Lens' Derivation PackageIdentifier
pkgid ((PackageIdentifier -> Identity PackageIdentifier)
-> Derivation -> Identity Derivation)
-> PackageIdentifier -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ PackageIdentifier
package
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Int -> Identity Int) -> Derivation -> Identity Derivation
Lens' Derivation Int
revision ((Int -> Identity Int) -> Derivation -> Identity Derivation)
-> Int -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Int
xrev
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
isLibrary ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe Library -> Bool
forall a. Maybe a -> Bool
isJust Maybe Library
library
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
isExecutable ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool -> Bool
not ([Executable] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Executable]
executables)
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Set Binding -> Identity (Set Binding))
-> Derivation -> Identity Derivation
Lens' Derivation (Set Binding)
extraFunctionArgs ((Set Binding -> Identity (Set Binding))
-> Derivation -> Identity Derivation)
-> Set Binding -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Set Binding
forall a. Monoid a => a
mempty
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Map [Char] [Char] -> Identity (Map [Char] [Char]))
-> Derivation -> Identity Derivation
Lens' Derivation (Map [Char] [Char])
extraAttributes ((Map [Char] [Char] -> Identity (Map [Char] [Char]))
-> Derivation -> Identity Derivation)
-> Map [Char] [Char] -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Map [Char] [Char]
forall a. Monoid a => a
mempty
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (BuildInfo -> Identity BuildInfo)
-> Derivation -> Identity Derivation
Lens' Derivation BuildInfo
libraryDepends ((BuildInfo -> Identity BuildInfo)
-> Derivation -> Identity Derivation)
-> BuildInfo -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ (Library -> BuildInfo) -> [Library] -> BuildInfo
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (BuildInfo -> BuildInfo
convertBuildInfo (BuildInfo -> BuildInfo)
-> (Library -> BuildInfo) -> Library -> BuildInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Library -> BuildInfo
libBuildInfo) (Maybe Library -> [Library]
forall a. Maybe a -> [a]
maybeToList Maybe Library
library [Library] -> [Library] -> [Library]
forall a. [a] -> [a] -> [a]
++ [Library]
subLibraries)
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (BuildInfo -> Identity BuildInfo)
-> Derivation -> Identity Derivation
Lens' Derivation BuildInfo
executableDepends ((BuildInfo -> Identity BuildInfo)
-> Derivation -> Identity Derivation)
-> BuildInfo -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [BuildInfo] -> BuildInfo
forall a. Monoid a => [a] -> a
mconcat ((Executable -> BuildInfo) -> [Executable] -> [BuildInfo]
forall a b. (a -> b) -> [a] -> [b]
map (BuildInfo -> BuildInfo
convertBuildInfo (BuildInfo -> BuildInfo)
-> (Executable -> BuildInfo) -> Executable -> BuildInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Executable -> BuildInfo
buildInfo) [Executable]
executables)
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (BuildInfo -> Identity BuildInfo)
-> Derivation -> Identity Derivation
Lens' Derivation BuildInfo
testDepends ((BuildInfo -> Identity BuildInfo)
-> Derivation -> Identity Derivation)
-> BuildInfo -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [BuildInfo] -> BuildInfo
forall a. Monoid a => [a] -> a
mconcat ((TestSuite -> BuildInfo) -> [TestSuite] -> [BuildInfo]
forall a b. (a -> b) -> [a] -> [b]
map (BuildInfo -> BuildInfo
convertBuildInfo (BuildInfo -> BuildInfo)
-> (TestSuite -> BuildInfo) -> TestSuite -> BuildInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TestSuite -> BuildInfo
testBuildInfo) [TestSuite]
testSuites)
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (BuildInfo -> Identity BuildInfo)
-> Derivation -> Identity Derivation
Lens' Derivation BuildInfo
benchmarkDepends ((BuildInfo -> Identity BuildInfo)
-> Derivation -> Identity Derivation)
-> BuildInfo -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [BuildInfo] -> BuildInfo
forall a. Monoid a => [a] -> a
mconcat ((Benchmark -> BuildInfo) -> [Benchmark] -> [BuildInfo]
forall a b. (a -> b) -> [a] -> [b]
map (BuildInfo -> BuildInfo
convertBuildInfo (BuildInfo -> BuildInfo)
-> (Benchmark -> BuildInfo) -> Benchmark -> BuildInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Benchmark -> BuildInfo
benchmarkBuildInfo) [Benchmark]
benchmarks)
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (BuildInfo -> Identity BuildInfo)
-> Derivation -> Identity Derivation
Lens' Derivation BuildInfo
Nix.setupDepends ((BuildInfo -> Identity BuildInfo)
-> Derivation -> Identity Derivation)
-> BuildInfo -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ BuildInfo
-> (SetupBuildInfo -> BuildInfo)
-> Maybe SetupBuildInfo
-> BuildInfo
forall b a. b -> (a -> b) -> Maybe a -> b
maybe BuildInfo
forall a. Monoid a => a
mempty SetupBuildInfo -> BuildInfo
convertSetupBuildInfo Maybe SetupBuildInfo
setupBuildInfo
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Set [Char] -> Identity (Set [Char]))
-> Derivation -> Identity Derivation
Lens' Derivation (Set [Char])
configureFlags ((Set [Char] -> Identity (Set [Char]))
-> Derivation -> Identity Derivation)
-> Set [Char] -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Set [Char]
forall a. Monoid a => a
mempty
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (FlagAssignment -> Identity FlagAssignment)
-> Derivation -> Identity Derivation
Lens' Derivation FlagAssignment
cabalFlags ((FlagAssignment -> Identity FlagAssignment)
-> Derivation -> Identity Derivation)
-> FlagAssignment -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ FlagAssignment
flags
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
runHaddock ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool
doHaddockPhase
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
jailbreak ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool
False
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
doCheck ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool
True
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
doBenchmark ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool
False
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& ([Char] -> Identity [Char]) -> Derivation -> Identity Derivation
Lens' Derivation [Char]
testTarget (([Char] -> Identity [Char]) -> Derivation -> Identity Derivation)
-> [Char] -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Char]
forall a. Monoid a => a
mempty
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
hyperlinkSource ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool
True
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
enableSplitObjs ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool
True
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
enableLibraryProfiling ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool
False
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
enableExecutableProfiling ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool
False
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Derivation -> Identity Derivation
Lens' Derivation Bool
enableSeparateDataOutput ((Bool -> Identity Bool) -> Derivation -> Identity Derivation)
-> Bool -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool -> Bool
not ([[Char]] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [[Char]]
dataFiles)
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& ([Char] -> Identity [Char]) -> Derivation -> Identity Derivation
Lens' Derivation [Char]
subpath (([Char] -> Identity [Char]) -> Derivation -> Identity Derivation)
-> [Char] -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Char]
"."
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& ([Char] -> Identity [Char]) -> Derivation -> Identity Derivation
Lens' Derivation [Char]
phaseOverrides (([Char] -> Identity [Char]) -> Derivation -> Identity Derivation)
-> [Char] -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Char]
forall a. Monoid a => a
mempty
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& ([Char] -> Identity [Char]) -> Derivation -> Identity Derivation
Lens' Derivation [Char]
editedCabalFile (([Char] -> Identity [Char]) -> Derivation -> Identity Derivation)
-> [Char] -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ (if Int
xrev Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
0
then [Char] -> Maybe [Char] -> [Char]
forall a. a -> Maybe a -> a
fromMaybe ([Char] -> [Char]
forall a. HasCallStack => [Char] -> a
error (PackageIdentifier -> [Char]
forall a. Pretty a => a -> [Char]
display PackageIdentifier
package [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
": X-Cabal-File-Hash field is missing")) ([Char] -> [([Char], [Char])] -> Maybe [Char]
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup [Char]
"X-Cabal-File-Hash" [([Char], [Char])]
customFieldsPD)
else [Char]
"")
Derivation -> (Derivation -> Derivation) -> Derivation
forall a b. a -> (a -> b) -> b
& (Meta -> Identity Meta) -> Derivation -> Identity Derivation
Lens' Derivation Meta
metaSection ((Meta -> Identity Meta) -> Derivation -> Identity Derivation)
-> Meta -> Derivation -> Derivation
forall s t a b. ASetter s t a b -> b -> s -> t
.~ ( Meta
Nix.nullMeta
#if MIN_VERSION_Cabal(3,2,0)
Meta -> (Meta -> Meta) -> Meta
forall a b. a -> (a -> b) -> b
& ([Char] -> Identity [Char]) -> Meta -> Identity Meta
Lens' Meta [Char]
Nix.homepage (([Char] -> Identity [Char]) -> Meta -> Identity Meta)
-> [Char] -> Meta -> Meta
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Char] -> [Char]
stripRedundanceSpaces (ShortText -> [Char]
fromShortText ShortText
homepage)
Meta -> (Meta -> Meta) -> Meta
forall a b. a -> (a -> b) -> b
& ([Char] -> Identity [Char]) -> Meta -> Identity Meta
Lens' Meta [Char]
Nix.description (([Char] -> Identity [Char]) -> Meta -> Identity Meta)
-> [Char] -> Meta -> Meta
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Char] -> [Char]
stripRedundanceSpaces (ShortText -> [Char]
fromShortText ShortText
synopsis)
#else
& Nix.homepage .~ stripRedundanceSpaces homepage
& Nix.description .~ stripRedundanceSpaces synopsis
#endif
Meta -> (Meta -> Meta) -> Meta
forall a b. a -> (a -> b) -> b
& (License -> Identity License) -> Meta -> Identity Meta
Lens' Meta License
Nix.license ((License -> Identity License) -> Meta -> Identity Meta)
-> License -> Meta -> Meta
forall s t a b. ASetter s t a b -> b -> s -> t
.~ License
nixLicense
Meta -> (Meta -> Meta) -> Meta
forall a b. a -> (a -> b) -> b
& (Set Platform -> Identity (Set Platform)) -> Meta -> Identity Meta
Lens' Meta (Set Platform)
Nix.platforms ((Set Platform -> Identity (Set Platform))
-> Meta -> Identity Meta)
-> Set Platform -> Meta -> Meta
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Set Platform
Nix.allKnownPlatforms
Meta -> (Meta -> Meta) -> Meta
forall a b. a -> (a -> b) -> b
& (Set Platform -> Identity (Set Platform)) -> Meta -> Identity Meta
Lens' Meta (Set Platform)
Nix.hydraPlatforms ((Set Platform -> Identity (Set Platform))
-> Meta -> Identity Meta)
-> Set Platform -> Meta -> Meta
forall s t a b. ASetter s t a b -> b -> s -> t
.~ (if License -> Bool
isFreeLicense License
nixLicense then Set Platform
Nix.allKnownPlatforms else Set Platform
forall a. Set a
Set.empty)
Meta -> (Meta -> Meta) -> Meta
forall a b. a -> (a -> b) -> b
& (Set Identifier -> Identity (Set Identifier))
-> Meta -> Identity Meta
Lens' Meta (Set Identifier)
Nix.maintainers ((Set Identifier -> Identity (Set Identifier))
-> Meta -> Identity Meta)
-> Set Identifier -> Meta -> Meta
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Set Identifier
forall a. Monoid a => a
mempty
Meta -> (Meta -> Meta) -> Meta
forall a b. a -> (a -> b) -> b
& (Bool -> Identity Bool) -> Meta -> Identity Meta
Lens' Meta Bool
Nix.broken ((Bool -> Identity Bool) -> Meta -> Identity Meta)
-> Bool -> Meta -> Meta
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Bool -> Bool
not ([Constraint] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Constraint]
missingDeps)
)
where
xrev :: Int
xrev = Int -> ([Char] -> Int) -> Maybe [Char] -> Int
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Int
0 [Char] -> Int
forall a. Read a => [Char] -> a
read ([Char] -> [([Char], [Char])] -> Maybe [Char]
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup [Char]
"x-revision" [([Char], [Char])]
customFieldsPD)
nixLicense :: Nix.License
nixLicense :: License
nixLicense = (License -> License)
-> (License -> License) -> Either License License -> License
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either License -> License
fromSPDXLicense License -> License
fromCabalLicense Either License License
licenseRaw
resolveInHackage :: Identifier -> Binding
resolveInHackage :: Identifier -> Binding
resolveInHackage Identifier
i | (Identifier
iIdentifier -> Getting [Char] Identifier [Char] -> [Char]
forall s a. s -> Getting a s a -> a
^.Getting [Char] Identifier [Char]
Iso' Identifier [Char]
ident) [Char] -> [[Char]] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [ PackageName -> [Char]
unPackageName PackageName
n | (Dependency PackageName
n VersionRange
_ Set LibraryName
_) <- [Constraint]
missingDeps ] = Identifier -> Binding
bindNull Identifier
i
| Bool
otherwise = Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding)
Iso' Binding (Identifier, Path)
binding (Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding))
-> (Identifier, Path) -> Binding
forall t b. AReview t b -> b -> t
# (Identifier
i, Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path)
Iso' Path [Identifier]
path (Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path))
-> [Identifier] -> Path
forall t b. AReview t b -> b -> t
# [Identifier
"self",Identifier
i])
goodScopes :: Set [Identifier]
goodScopes :: Set [Identifier]
goodScopes = [[Identifier]] -> Set [Identifier]
forall a. Ord a => [a] -> Set a
Set.fromList (([Identifier] -> [Identifier]) -> [[Identifier]] -> [[Identifier]]
forall a b. (a -> b) -> [a] -> [b]
map (Identifier
"pkgs"Identifier -> [Identifier] -> [Identifier]
forall a. a -> [a] -> [a]
:) [[], [Identifier
"xorg"], [Identifier
"xlibs"], [Identifier
"gnome2"], [Identifier
"gnome"], [Identifier
"gnome3"], [Identifier
"kde4"]])
resolveInNixpkgs :: Identifier -> Binding
resolveInNixpkgs :: Identifier -> Binding
resolveInNixpkgs Identifier
i
| Identifier
i Identifier -> [Identifier] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [Identifier
"clang",Identifier
"lldb",Identifier
"llvm"] = Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding)
Iso' Binding (Identifier, Path)
binding (Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding))
-> (Identifier, Path) -> Binding
forall t b. AReview t b -> b -> t
# (Identifier
i, Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path)
Iso' Path [Identifier]
path (Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path))
-> [Identifier] -> Path
forall t b. AReview t b -> b -> t
# [Identifier
"self",Identifier
"llvmPackages",Identifier
i])
| Identifier
i Identifier -> Identifier -> Bool
forall a. Eq a => a -> a -> Bool
== Identifier
"gtk2" = Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding)
Iso' Binding (Identifier, Path)
binding (Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding))
-> (Identifier, Path) -> Binding
forall t b. AReview t b -> b -> t
# (Identifier
i, Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path)
Iso' Path [Identifier]
path (Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path))
-> [Identifier] -> Path
forall t b. AReview t b -> b -> t
# [Identifier
"pkgs",Identifier
"gtk2"])
| Identifier
i Identifier -> Identifier -> Bool
forall a. Eq a => a -> a -> Bool
== Identifier
"gtk3" = Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding)
Iso' Binding (Identifier, Path)
binding (Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding))
-> (Identifier, Path) -> Binding
forall t b. AReview t b -> b -> t
# (Identifier
i, Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path)
Iso' Path [Identifier]
path (Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path))
-> [Identifier] -> Path
forall t b. AReview t b -> b -> t
# [Identifier
"pkgs",Identifier
"gtk3"])
| Identifier
i Identifier -> Identifier -> Bool
forall a. Eq a => a -> a -> Bool
== Identifier
"gtksourceview3" = Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding)
Iso' Binding (Identifier, Path)
binding (Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding))
-> (Identifier, Path) -> Binding
forall t b. AReview t b -> b -> t
# (Identifier
i, Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path)
Iso' Path [Identifier]
path (Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path))
-> [Identifier] -> Path
forall t b. AReview t b -> b -> t
# [Identifier
"pkgs",Identifier
"gtksourceview3"])
| Identifier
i Identifier -> Identifier -> Bool
forall a. Eq a => a -> a -> Bool
== Identifier
"vte_291" = Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding)
Iso' Binding (Identifier, Path)
binding (Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding))
-> (Identifier, Path) -> Binding
forall t b. AReview t b -> b -> t
# (Identifier
i, Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path)
Iso' Path [Identifier]
path (Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path))
-> [Identifier] -> Path
forall t b. AReview t b -> b -> t
# [Identifier
"pkgs",Identifier
"vte"])
| Just Binding
p <- NixpkgsResolver
nixpkgsResolver Identifier
i, [Identifier] -> [Identifier]
forall a. [a] -> [a]
init (Getting [Identifier] Binding [Identifier]
-> Binding -> [Identifier]
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view ((Path -> Const [Identifier] Path)
-> Binding -> Const [Identifier] Binding
Lens' Binding Path
reference ((Path -> Const [Identifier] Path)
-> Binding -> Const [Identifier] Binding)
-> (([Identifier] -> Const [Identifier] [Identifier])
-> Path -> Const [Identifier] Path)
-> Getting [Identifier] Binding [Identifier]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Identifier] -> Const [Identifier] [Identifier])
-> Path -> Const [Identifier] Path
Iso' Path [Identifier]
path) Binding
p) [Identifier] -> Set [Identifier] -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set [Identifier]
goodScopes = Binding
p
| Bool
otherwise = Identifier -> Binding
bindNull Identifier
i
resolveInHackageThenNixpkgs :: Identifier -> Binding
resolveInHackageThenNixpkgs :: Identifier -> Binding
resolveInHackageThenNixpkgs Identifier
i | HaskellResolver
haskellResolver (PackageName -> VersionRange -> Set LibraryName -> Constraint
Dependency ([Char] -> PackageName
mkPackageName (Identifier
iIdentifier -> Getting [Char] Identifier [Char] -> [Char]
forall s a. s -> Getting a s a -> a
^.Getting [Char] Identifier [Char]
Iso' Identifier [Char]
ident)) VersionRange
anyVersion Set LibraryName
forall a. Monoid a => a
mempty) = Identifier -> Binding
resolveInHackage Identifier
i
| Bool
otherwise = Identifier -> Binding
resolveInNixpkgs Identifier
i
internalLibNames :: [PackageName]
internalLibNames :: [PackageName]
internalLibNames = [ UnqualComponentName -> PackageName
unqualComponentNameToPackageName UnqualComponentName
n | LSubLibName UnqualComponentName
n <- Library -> LibraryName
libName (Library -> LibraryName) -> [Library] -> [LibraryName]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Library]
subLibraries ]
doHaddockPhase :: Bool
doHaddockPhase :: Bool
doHaddockPhase | Bool -> Bool
not ([PackageName] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [PackageName]
internalLibNames) = Bool
False
| Just Library
l <- Maybe Library
library = Bool -> Bool
not ([ModuleName] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Library -> [ModuleName]
exposedModules Library
l))
| Bool
otherwise = Bool
True
convertBuildInfo :: Cabal.BuildInfo -> Nix.BuildInfo
convertBuildInfo :: BuildInfo -> BuildInfo
convertBuildInfo Cabal.BuildInfo {Bool
[[Char]]
[([Char], [Char])]
[Language]
[Extension]
[Constraint]
[ExeDependency]
[LegacyExeDependency]
[Mixin]
[ModuleName]
[PkgconfigDependency]
Maybe Language
PerCompilerFlavor [[Char]]
buildable :: BuildInfo -> Bool
buildTools :: BuildInfo -> [LegacyExeDependency]
buildToolDepends :: BuildInfo -> [ExeDependency]
cppOptions :: BuildInfo -> [[Char]]
asmOptions :: BuildInfo -> [[Char]]
cmmOptions :: BuildInfo -> [[Char]]
ccOptions :: BuildInfo -> [[Char]]
cxxOptions :: BuildInfo -> [[Char]]
ldOptions :: BuildInfo -> [[Char]]
pkgconfigDepends :: BuildInfo -> [PkgconfigDependency]
frameworks :: BuildInfo -> [[Char]]
extraFrameworkDirs :: BuildInfo -> [[Char]]
asmSources :: BuildInfo -> [[Char]]
cmmSources :: BuildInfo -> [[Char]]
cSources :: BuildInfo -> [[Char]]
cxxSources :: BuildInfo -> [[Char]]
jsSources :: BuildInfo -> [[Char]]
hsSourceDirs :: BuildInfo -> [[Char]]
otherModules :: BuildInfo -> [ModuleName]
virtualModules :: BuildInfo -> [ModuleName]
autogenModules :: BuildInfo -> [ModuleName]
defaultLanguage :: BuildInfo -> Maybe Language
otherLanguages :: BuildInfo -> [Language]
defaultExtensions :: BuildInfo -> [Extension]
otherExtensions :: BuildInfo -> [Extension]
oldExtensions :: BuildInfo -> [Extension]
extraLibs :: BuildInfo -> [[Char]]
extraGHCiLibs :: BuildInfo -> [[Char]]
extraBundledLibs :: BuildInfo -> [[Char]]
extraLibFlavours :: BuildInfo -> [[Char]]
extraDynLibFlavours :: BuildInfo -> [[Char]]
extraLibDirs :: BuildInfo -> [[Char]]
includeDirs :: BuildInfo -> [[Char]]
includes :: BuildInfo -> [[Char]]
autogenIncludes :: BuildInfo -> [[Char]]
installIncludes :: BuildInfo -> [[Char]]
options :: BuildInfo -> PerCompilerFlavor [[Char]]
profOptions :: BuildInfo -> PerCompilerFlavor [[Char]]
sharedOptions :: BuildInfo -> PerCompilerFlavor [[Char]]
staticOptions :: BuildInfo -> PerCompilerFlavor [[Char]]
customFieldsBI :: BuildInfo -> [([Char], [Char])]
targetBuildDepends :: BuildInfo -> [Constraint]
mixins :: BuildInfo -> [Mixin]
mixins :: [Mixin]
targetBuildDepends :: [Constraint]
customFieldsBI :: [([Char], [Char])]
staticOptions :: PerCompilerFlavor [[Char]]
sharedOptions :: PerCompilerFlavor [[Char]]
profOptions :: PerCompilerFlavor [[Char]]
options :: PerCompilerFlavor [[Char]]
installIncludes :: [[Char]]
autogenIncludes :: [[Char]]
includes :: [[Char]]
includeDirs :: [[Char]]
extraLibDirs :: [[Char]]
extraDynLibFlavours :: [[Char]]
extraLibFlavours :: [[Char]]
extraBundledLibs :: [[Char]]
extraGHCiLibs :: [[Char]]
extraLibs :: [[Char]]
oldExtensions :: [Extension]
otherExtensions :: [Extension]
defaultExtensions :: [Extension]
otherLanguages :: [Language]
defaultLanguage :: Maybe Language
autogenModules :: [ModuleName]
virtualModules :: [ModuleName]
otherModules :: [ModuleName]
hsSourceDirs :: [[Char]]
jsSources :: [[Char]]
cxxSources :: [[Char]]
cSources :: [[Char]]
cmmSources :: [[Char]]
asmSources :: [[Char]]
extraFrameworkDirs :: [[Char]]
frameworks :: [[Char]]
pkgconfigDepends :: [PkgconfigDependency]
ldOptions :: [[Char]]
cxxOptions :: [[Char]]
ccOptions :: [[Char]]
cmmOptions :: [[Char]]
asmOptions :: [[Char]]
cppOptions :: [[Char]]
buildToolDepends :: [ExeDependency]
buildTools :: [LegacyExeDependency]
buildable :: Bool
..} | Bool -> Bool
not Bool
buildable = BuildInfo
forall a. Monoid a => a
mempty
convertBuildInfo Cabal.BuildInfo {Bool
[[Char]]
[([Char], [Char])]
[Language]
[Extension]
[Constraint]
[ExeDependency]
[LegacyExeDependency]
[Mixin]
[ModuleName]
[PkgconfigDependency]
Maybe Language
PerCompilerFlavor [[Char]]
mixins :: [Mixin]
targetBuildDepends :: [Constraint]
customFieldsBI :: [([Char], [Char])]
staticOptions :: PerCompilerFlavor [[Char]]
sharedOptions :: PerCompilerFlavor [[Char]]
profOptions :: PerCompilerFlavor [[Char]]
options :: PerCompilerFlavor [[Char]]
installIncludes :: [[Char]]
autogenIncludes :: [[Char]]
includes :: [[Char]]
includeDirs :: [[Char]]
extraLibDirs :: [[Char]]
extraDynLibFlavours :: [[Char]]
extraLibFlavours :: [[Char]]
extraBundledLibs :: [[Char]]
extraGHCiLibs :: [[Char]]
extraLibs :: [[Char]]
oldExtensions :: [Extension]
otherExtensions :: [Extension]
defaultExtensions :: [Extension]
otherLanguages :: [Language]
defaultLanguage :: Maybe Language
autogenModules :: [ModuleName]
virtualModules :: [ModuleName]
otherModules :: [ModuleName]
hsSourceDirs :: [[Char]]
jsSources :: [[Char]]
cxxSources :: [[Char]]
cSources :: [[Char]]
cmmSources :: [[Char]]
asmSources :: [[Char]]
extraFrameworkDirs :: [[Char]]
frameworks :: [[Char]]
pkgconfigDepends :: [PkgconfigDependency]
ldOptions :: [[Char]]
cxxOptions :: [[Char]]
ccOptions :: [[Char]]
cmmOptions :: [[Char]]
asmOptions :: [[Char]]
cppOptions :: [[Char]]
buildToolDepends :: [ExeDependency]
buildTools :: [LegacyExeDependency]
buildable :: Bool
buildable :: BuildInfo -> Bool
buildTools :: BuildInfo -> [LegacyExeDependency]
buildToolDepends :: BuildInfo -> [ExeDependency]
cppOptions :: BuildInfo -> [[Char]]
asmOptions :: BuildInfo -> [[Char]]
cmmOptions :: BuildInfo -> [[Char]]
ccOptions :: BuildInfo -> [[Char]]
cxxOptions :: BuildInfo -> [[Char]]
ldOptions :: BuildInfo -> [[Char]]
pkgconfigDepends :: BuildInfo -> [PkgconfigDependency]
frameworks :: BuildInfo -> [[Char]]
extraFrameworkDirs :: BuildInfo -> [[Char]]
asmSources :: BuildInfo -> [[Char]]
cmmSources :: BuildInfo -> [[Char]]
cSources :: BuildInfo -> [[Char]]
cxxSources :: BuildInfo -> [[Char]]
jsSources :: BuildInfo -> [[Char]]
hsSourceDirs :: BuildInfo -> [[Char]]
otherModules :: BuildInfo -> [ModuleName]
virtualModules :: BuildInfo -> [ModuleName]
autogenModules :: BuildInfo -> [ModuleName]
defaultLanguage :: BuildInfo -> Maybe Language
otherLanguages :: BuildInfo -> [Language]
defaultExtensions :: BuildInfo -> [Extension]
otherExtensions :: BuildInfo -> [Extension]
oldExtensions :: BuildInfo -> [Extension]
extraLibs :: BuildInfo -> [[Char]]
extraGHCiLibs :: BuildInfo -> [[Char]]
extraBundledLibs :: BuildInfo -> [[Char]]
extraLibFlavours :: BuildInfo -> [[Char]]
extraDynLibFlavours :: BuildInfo -> [[Char]]
extraLibDirs :: BuildInfo -> [[Char]]
includeDirs :: BuildInfo -> [[Char]]
includes :: BuildInfo -> [[Char]]
autogenIncludes :: BuildInfo -> [[Char]]
installIncludes :: BuildInfo -> [[Char]]
options :: BuildInfo -> PerCompilerFlavor [[Char]]
profOptions :: BuildInfo -> PerCompilerFlavor [[Char]]
sharedOptions :: BuildInfo -> PerCompilerFlavor [[Char]]
staticOptions :: BuildInfo -> PerCompilerFlavor [[Char]]
customFieldsBI :: BuildInfo -> [([Char], [Char])]
targetBuildDepends :: BuildInfo -> [Constraint]
mixins :: BuildInfo -> [Mixin]
..} = BuildInfo
forall a. Monoid a => a
mempty
BuildInfo -> (BuildInfo -> BuildInfo) -> BuildInfo
forall a b. a -> (a -> b) -> b
& (Set Binding -> Identity (Set Binding))
-> BuildInfo -> Identity BuildInfo
Lens' BuildInfo (Set Binding)
haskell ((Set Binding -> Identity (Set Binding))
-> BuildInfo -> Identity BuildInfo)
-> Set Binding -> BuildInfo -> BuildInfo
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Binding] -> Set Binding
forall a. Ord a => [a] -> Set a
Set.fromList [ Identifier -> Binding
resolveInHackage (PackageName -> Identifier
toNixName PackageName
x) | (Dependency PackageName
x VersionRange
_ Set LibraryName
_) <- [Constraint]
targetBuildDepends, PackageName
x PackageName -> [PackageName] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [PackageName]
internalLibNames ]
BuildInfo -> (BuildInfo -> BuildInfo) -> BuildInfo
forall a b. a -> (a -> b) -> b
& (Set Binding -> Identity (Set Binding))
-> BuildInfo -> Identity BuildInfo
Lens' BuildInfo (Set Binding)
system ((Set Binding -> Identity (Set Binding))
-> BuildInfo -> Identity BuildInfo)
-> Set Binding -> BuildInfo -> BuildInfo
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Binding] -> Set Binding
forall a. Ord a => [a] -> Set a
Set.fromList [ Identifier -> Binding
resolveInNixpkgs Identifier
y | [Char]
x <- [[Char]]
extraLibs, Identifier
y <- [Char] -> [Identifier]
libNixName [Char]
x ]
BuildInfo -> (BuildInfo -> BuildInfo) -> BuildInfo
forall a b. a -> (a -> b) -> b
& (Set Binding -> Identity (Set Binding))
-> BuildInfo -> Identity BuildInfo
Lens' BuildInfo (Set Binding)
pkgconfig ((Set Binding -> Identity (Set Binding))
-> BuildInfo -> Identity BuildInfo)
-> Set Binding -> BuildInfo -> BuildInfo
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Binding] -> Set Binding
forall a. Ord a => [a] -> Set a
Set.fromList [ Identifier -> Binding
resolveInNixpkgs Identifier
y | PkgconfigDependency PkgconfigName
x PkgconfigVersionRange
_ <- [PkgconfigDependency]
pkgconfigDepends, Identifier
y <- [Char] -> [Identifier]
libNixName (PkgconfigName -> [Char]
unPkgconfigName PkgconfigName
x) ]
BuildInfo -> (BuildInfo -> BuildInfo) -> BuildInfo
forall a b. a -> (a -> b) -> b
& (Set Binding -> Identity (Set Binding))
-> BuildInfo -> Identity BuildInfo
Lens' BuildInfo (Set Binding)
tool ((Set Binding -> Identity (Set Binding))
-> BuildInfo -> Identity BuildInfo)
-> Set Binding -> BuildInfo -> BuildInfo
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Binding] -> Set Binding
forall a. Ord a => [a] -> Set a
Set.fromList ((Identifier -> Binding) -> [Identifier] -> [Binding]
forall a b. (a -> b) -> [a] -> [b]
map Identifier -> Binding
resolveInHackageThenNixpkgs ([Identifier] -> [Binding])
-> ([[Char]] -> [Identifier]) -> [[Char]] -> [Binding]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> [Identifier]) -> [[Char]] -> [Identifier]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap [Char] -> [Identifier]
buildToolNixName
([[Char]] -> [Binding]) -> [[Char]] -> [Binding]
forall a b. (a -> b) -> a -> b
$ [ PackageName -> [Char]
unPackageName PackageName
x | ExeDependency PackageName
x UnqualComponentName
_ VersionRange
_ <- [ExeDependency]
buildToolDepends ] [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [ [Char]
x | LegacyExeDependency [Char]
x VersionRange
_ <- [LegacyExeDependency]
buildTools ])
convertSetupBuildInfo :: Cabal.SetupBuildInfo -> Nix.BuildInfo
convertSetupBuildInfo :: SetupBuildInfo -> BuildInfo
convertSetupBuildInfo SetupBuildInfo
bi = BuildInfo
forall a. Monoid a => a
mempty
BuildInfo -> (BuildInfo -> BuildInfo) -> BuildInfo
forall a b. a -> (a -> b) -> b
& (Set Binding -> Identity (Set Binding))
-> BuildInfo -> Identity BuildInfo
Lens' BuildInfo (Set Binding)
haskell ((Set Binding -> Identity (Set Binding))
-> BuildInfo -> Identity BuildInfo)
-> Set Binding -> BuildInfo -> BuildInfo
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Binding] -> Set Binding
forall a. Ord a => [a] -> Set a
Set.fromList [ Identifier -> Binding
resolveInHackage (PackageName -> Identifier
toNixName PackageName
x) | (Dependency PackageName
x VersionRange
_ Set LibraryName
_) <- SetupBuildInfo -> [Constraint]
Cabal.setupDepends SetupBuildInfo
bi ]
bindNull :: Identifier -> Binding
bindNull :: Identifier -> Binding
bindNull Identifier
i = Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding)
Iso' Binding (Identifier, Path)
binding (Tagged (Identifier, Path) (Identity (Identifier, Path))
-> Tagged Binding (Identity Binding))
-> (Identifier, Path) -> Binding
forall t b. AReview t b -> b -> t
# (Identifier
i, Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path)
Iso' Path [Identifier]
path (Tagged [Identifier] (Identity [Identifier])
-> Tagged Path (Identity Path))
-> [Identifier] -> Path
forall t b. AReview t b -> b -> t
# [Identifier
"null"])
stripRedundanceSpaces :: String -> String
stripRedundanceSpaces :: [Char] -> [Char]
stripRedundanceSpaces = [[Char]] -> [Char]
unwords ([[Char]] -> [Char]) -> ([Char] -> [[Char]]) -> [Char] -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> [[Char]]
words