@@ -16,6 +16,7 @@ import Data.Maybe
1616import Data.Monoid
1717import Data.Set ( Set )
1818import qualified Data.Set as Set
19+import Data.String
1920import Data.Yaml ( decodeFile )
2021import Distribution.Nixpkgs.Fetch
2122import Distribution.Nixpkgs.Haskell
@@ -28,6 +29,7 @@ import Distribution.Nixpkgs.Meta
2829import Distribution.Nixpkgs.PackageMap
2930import Distribution.Package
3031import Distribution.PackageDescription hiding ( options, buildDepends, extraLibs, buildTools )
32+import Distribution.System
3133import Distribution.Text
3234import Distribution.Version
3335import Language.Nix
@@ -53,15 +55,17 @@ data Options = Options
5355 , preferredVersionsFile :: Maybe FilePath
5456 , nixpkgsRepository :: FilePath
5557 , configFile :: FilePath
58+ , targetPlatform :: Platform
5659 }
5760 deriving (Show)
5861
5962options :: Parser Options
6063options = 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")
6265 <*> 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")
64− <*> strOption (long "config" <> help "path to configuration file" <> value "nixpkgs/pkgs/development/haskell-modules/configuration-hackage2nix.yaml" <> showDefault <> metavar "PATH")
66+ <*> strOption (long "nixpkgs" <> help "path to Nixpkgs repository" <> value "<nixpkgs>" <> showDefaultWith id <> 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")
6569
6670pinfo :: ParserInfo Options
6771pinfo = info
@@ -87,14 +91,14 @@ main = do
8791 . Map.delete "dictionary-sharing" -- TODO: https://github.com/NixOS/cabal2nix/issues/175
8892 . Map.filter (/= Map.empty)
8993 . Map.mapWithKey (enforcePreferredVersions preferredVersions)
90− runParIO $ generatePackageSet defaultConfiguration (fixup hackage) nixpkgs
94+ runParIO $ generatePackageSet targetPlatform defaultConfiguration (fixup hackage) nixpkgs
9195
9296enforcePreferredVersions :: [Constraint] -> String -> Map Version GenericPackageDescription
9397 -> Map Version GenericPackageDescription
9498enforcePreferredVersions cs pkg = Map.filterWithKey (\v _ -> PackageIdentifier (PackageName pkg) v `satisfiesConstraints` cs)
9599
96−generatePackageSet :: Configuration -> Hackage -> Nixpkgs -> ParIO ()
97−generatePackageSet config hackage nixpkgs = do
100+generatePackageSet :: Platform -> Configuration -> Hackage -> Nixpkgs -> ParIO ()
101+generatePackageSet targetPlatform config hackage nixpkgs = do
98102 let
99103 hardCorePackages :: Set PackageIdentifier -- TODO: review whether this set is needed at all
100104 hardCorePackages = Set.filter isOnHackage (corePackages config)
@@ -158,7 +162,7 @@ generatePackageSet config hackage nixpkgs = do
158162 flagAssignment = configureCabalFlags (packageId descr)
159163
160164 drv' :: Derivation
161− drv' = fromGenericPackageDescription haskellResolver nixpkgsResolver (platform config) (compilerInfo config) flagAssignment [] descr
165+ drv' = fromGenericPackageDescription haskellResolver nixpkgsResolver targetPlatform (compilerInfo config) flagAssignment [] descr
162166
163167 isInDefaultPackageSet :: Bool
164168 isInDefaultPackageSet = maybe False (== pkgversion) (Map.lookup name generatedDefaultPackageSet)