git.iko.soy/typeable/cabal2nix
on master help sign in
hackage2nix: move target platform from the configuration file to command line
2e1eab1Peter Simons
hackage2nix/src/Configuration.hs+2−7
@@ -19,13 +19,9 @@ import Language.Nix.Identifier
19
19
20data Configuration = Configuration
20data Configuration = Configuration
21 {
21 {
22− -- |Target architecture. Used by 'finalizePackageDescription' to
23− -- choose appropriate flags and dependencies.
24− platform :: Platform
25−
26 -- |Target compiler. Used by 'finalizePackageDescription' to choose
22 -- |Target compiler. Used by 'finalizePackageDescription' to choose
27 -- appropriate flags and dependencies.
23 -- appropriate flags and dependencies.
28− , compilerInfo :: CompilerInfo
24+ compilerInfo :: CompilerInfo
29
25
30 -- |Core packages found on Hackageg
26 -- |Core packages found on Hackageg
31 , corePackages :: Set PackageIdentifier
27 , corePackages :: Set PackageIdentifier
@@ -53,8 +49,7 @@ instance NFData Configuration where rnf = genericRnf
53
49
54instance FromJSON Configuration where
50instance FromJSON Configuration where
55 parseJSON (Object o) = Configuration
51 parseJSON (Object o) = Configuration
56− <$> o .:? "platform" .!= buildPlatform
57− <*> o .:? "compiler" .!= unknownCompilerInfo buildCompilerId NoAbiTag
52+ <$> o .:? "compiler" .!= unknownCompilerInfo buildCompilerId NoAbiTag
58 <*> o .:? "core-packages" .!= mempty
53 <*> o .:? "core-packages" .!= mempty
59 <*> o .:? "default-package-overrides" .!= mempty
54 <*> o .:? "default-package-overrides" .!= mempty
60 <*> o .:? "extra-packages" .!= mempty
55 <*> o .:? "extra-packages" .!= mempty
hackage2nix/src/Main.hs+11−7
@@ -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
19+import Data.String
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
56 }
59 }
57 deriving (Show)
60 deriving (Show)
58
61
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")
65
69
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
91
95
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)
95
99
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
98 let
102 let
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)
159
163
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
162
166
163 isInDefaultPackageSet :: Bool
167 isInDefaultPackageSet :: Bool
164 isInDefaultPackageSet = maybe False (== pkgversion) (Map.lookup name generatedDefaultPackageSet)
168 isInDefaultPackageSet = maybe False (== pkgversion) (Map.lookup name generatedDefaultPackageSet)