@@ -16,6 +16,7 @@ import Data.Maybe
16import Data.Monoid
16import Data.Monoid
17import Data.Set ( Set )
17import Data.Set ( Set )
18import qualified Data.Set as Set
18import qualified Data.Set as Set
19import Data.Yaml ( decodeFile )
20import Data.Yaml ( decodeFile )
20import Distribution.Nixpkgs.Fetch
21import Distribution.Nixpkgs.Fetch
21import Distribution.Nixpkgs.Haskell
22import Distribution.Nixpkgs.Haskell
@@ -28,6 +29,7 @@ import Distribution.Nixpkgs.Meta
28import Distribution.Nixpkgs.PackageMap
29import Distribution.Nixpkgs.PackageMap
29import Distribution.Package
30import Distribution.Package
30import Distribution.PackageDescription hiding ( options, buildDepends, extraLibs, buildTools )
31import Distribution.PackageDescription hiding ( options, buildDepends, extraLibs, buildTools )
32+import Distribution.System
31import Distribution.Text
33import Distribution.Text
32import Distribution.Version
34import Distribution.Version
33import Language.Nix
35import Language.Nix
@@ -53,15 +55,17 @@ data Options = Options
53 , preferredVersionsFile :: Maybe FilePath
55 , preferredVersionsFile :: Maybe FilePath
54 , nixpkgsRepository :: FilePath
56 , nixpkgsRepository :: FilePath
55 , configFile :: FilePath
57 , configFile :: FilePath
58+ , targetPlatform :: Platform
57 deriving (Show)
60 deriving (Show)
59options :: Parser Options
62options :: Parser Options
60options = Options
63options = Options
61− <$> strOption (long "hackage" <> help "path to Hackage git repository" <> value "hackage" <> showDefault <> metavar "PATH")
64+ <$> strOption (long "hackage" <> help "path to Hackage git repository" <> value "hackage" <> showDefaultWith id <> metavar "PATH")
62 <*> optional (strOption (long "preferred-versions" <> help "path to Hackage preferred-versions file" <> value "hackage/preferred-versions" <> showDefault <> metavar "PATH"))
65 <*> optional (strOption (long "preferred-versions" <> help "path to Hackage preferred-versions file" <> value "hackage/preferred-versions" <> showDefault <> metavar "PATH"))
63− <*> strOption (long "nixpkgs" <> help "path to Nixpkgs repository" <> value "<nixpkgs>" <> showDefault <> metavar "PATH")
66+ <*> strOption (long "nixpkgs" <> help "path to Nixpkgs repository" <> value "<nixpkgs>" <> showDefaultWith id <> metavar "PATH")
64− <*> strOption (long "config" <> help "path to configuration file" <> value "nixpkgs/pkgs/development/haskell-modules/configuration-hackage2nix.yaml" <> showDefault <> metavar "PATH")
67+ <*> strOption (long "config" <> help "path to configuration file" <> value "nixpkgs/pkgs/development/haskell-modules/configuration-hackage2nix.yaml" <> showDefaultWith id <> metavar "PATH")
68+ <*> option (fmap fromString str) (long "platform" <> help "target platform to generate package set for" <> value "x86_64-linux" <> showDefaultWith display <> metavar "PLATFORM")
66pinfo :: ParserInfo Options
70pinfo :: ParserInfo Options
67pinfo = info
71pinfo = info
@@ -87,14 +91,14 @@ main = do
87 . Map.delete "dictionary-sharing" -- TODO: https://github.com/NixOS/cabal2nix/issues/175
91 . Map.delete "dictionary-sharing" -- TODO: https://github.com/NixOS/cabal2nix/issues/175
88 . Map.filter (/= Map.empty)
92 . Map.filter (/= Map.empty)
89 . Map.mapWithKey (enforcePreferredVersions preferredVersions)
93 . Map.mapWithKey (enforcePreferredVersions preferredVersions)
90− runParIO $ generatePackageSet defaultConfiguration (fixup hackage) nixpkgs
94+ runParIO $ generatePackageSet targetPlatform defaultConfiguration (fixup hackage) nixpkgs
92enforcePreferredVersions :: [Constraint] -> String -> Map Version GenericPackageDescription
96enforcePreferredVersions :: [Constraint] -> String -> Map Version GenericPackageDescription
93 -> Map Version GenericPackageDescription
97 -> Map Version GenericPackageDescription
94enforcePreferredVersions cs pkg = Map.filterWithKey (\v _ -> PackageIdentifier (PackageName pkg) v `satisfiesConstraints` cs)
98enforcePreferredVersions cs pkg = Map.filterWithKey (\v _ -> PackageIdentifier (PackageName pkg) v `satisfiesConstraints` cs)
96−generatePackageSet :: Configuration -> Hackage -> Nixpkgs -> ParIO ()
100+generatePackageSet :: Platform -> Configuration -> Hackage -> Nixpkgs -> ParIO ()
97−generatePackageSet config hackage nixpkgs = do
101+generatePackageSet targetPlatform config hackage nixpkgs = do
99 hardCorePackages :: Set PackageIdentifier -- TODO: review whether this set is needed at all
103 hardCorePackages :: Set PackageIdentifier -- TODO: review whether this set is needed at all
100 hardCorePackages = Set.filter isOnHackage (corePackages config)
104 hardCorePackages = Set.filter isOnHackage (corePackages config)
@@ -158,7 +162,7 @@ generatePackageSet config hackage nixpkgs = do
158 flagAssignment = configureCabalFlags (packageId descr)
162 flagAssignment = configureCabalFlags (packageId descr)
160 drv' :: Derivation
164 drv' :: Derivation
161− drv' = fromGenericPackageDescription haskellResolver nixpkgsResolver (platform config) (compilerInfo config) flagAssignment [] descr
165+ drv' = fromGenericPackageDescription haskellResolver nixpkgsResolver targetPlatform (compilerInfo config) flagAssignment [] descr
163 isInDefaultPackageSet :: Bool
167 isInDefaultPackageSet :: Bool
164 isInDefaultPackageSet = maybe False (== pkgversion) (Map.lookup name generatedDefaultPackageSet)
168 isInDefaultPackageSet = maybe False (== pkgversion) (Map.lookup name generatedDefaultPackageSet)