cabal2nix 2.9.3 → 2.10.0
raw patch · 7 files changed
+216/−212 lines, 7 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Cabal2nix: instance GHC.Show.Show Cabal2nix.Options
+ Cabal2nix: Options :: Maybe String -> [String] -> Bool -> Bool -> Bool -> Bool -> Maybe String -> Bool -> Bool -> Bool -> Maybe Bool -> [String] -> Maybe FilePath -> Bool -> [String] -> CompilerId -> Platform -> Maybe FilePath -> Maybe UTCTime -> NixpkgsResolver -> String -> Options
+ Cabal2nix: [optCompiler] :: Options -> CompilerId
+ Cabal2nix: [optDoCheck] :: Options -> Bool
+ Cabal2nix: [optEnableExecutableProfiling] :: Options -> Bool
+ Cabal2nix: [optEnableLibraryProfiling] :: Options -> Bool
+ Cabal2nix: [optEnableProfiling] :: Options -> Maybe Bool
+ Cabal2nix: [optExtraArgs] :: Options -> [String]
+ Cabal2nix: [optFlags] :: Options -> [String]
+ Cabal2nix: [optHackageDb] :: Options -> Maybe FilePath
+ Cabal2nix: [optHackageSnapshot] :: Options -> Maybe UTCTime
+ Cabal2nix: [optHaddock] :: Options -> Bool
+ Cabal2nix: [optHpack] :: Options -> Bool
+ Cabal2nix: [optHyperlinkSource] :: Options -> Bool
+ Cabal2nix: [optJailbreak] :: Options -> Bool
+ Cabal2nix: [optMaintainer] :: Options -> [String]
+ Cabal2nix: [optNixShellOutput] :: Options -> Bool
+ Cabal2nix: [optNixpkgsIdentifier] :: Options -> NixpkgsResolver
+ Cabal2nix: [optRevision] :: Options -> Maybe String
+ Cabal2nix: [optSha256] :: Options -> Maybe String
+ Cabal2nix: [optSubpath] :: Options -> Maybe FilePath
+ Cabal2nix: [optSystem] :: Options -> Platform
+ Cabal2nix: [optUrl] :: Options -> String
+ Cabal2nix: data Options
+ Cabal2nix: parseArgs :: [String] -> IO Options
+ Distribution.Nixpkgs.Haskell.Hackage: parsePackageData :: HackageDB -> PackageName -> PackageData -> PackageData
- Cabal2nix: cabal2nix' :: [String] -> IO (Either Doc Derivation)
+ Cabal2nix: cabal2nix' :: Options -> IO (Either Doc Derivation)
- Cabal2nix: cabal2nixWithDB :: HackageDB -> [String] -> IO (Either Doc Derivation)
+ Cabal2nix: cabal2nixWithDB :: HackageDB -> Options -> IO (Either Doc Derivation)
Files
- cabal2nix.cabal +190/−192
- src/Cabal2nix.hs +15/−12
- src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs +3/−3
- src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs +1/−0
- src/Distribution/Nixpkgs/Haskell/Hackage.hs +1/−1
- src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs +2/−2
- test/Main.hs +4/−2
cabal2nix.cabal view
@@ -1,206 +1,204 @@-name: cabal2nix-version: 2.9.3-synopsis: Convert Cabal files into Nix build instructions.-category: Distribution, Nix-stability: stable-homepage: https://github.com/nixos/cabal2nix#readme-bug-reports: https://github.com/nixos/cabal2nix/issues-author: Peter Simons,- Andres Loeh,- Benno Fünfstück,- Mateusz Kowalczyk,- Michael Alan Dorman,- Tom Smalley,- Mathijs Kwik,- Shea Levy,- Dmitry Malikov,- Eric Seidel,- Jacob Mitchell,- Graham Christensen,- Hamish Mackenzie,- Nikolay Amiantov,- Aycan iRiCAN,- Bryan Gardiner,- Joe Hermaszewski,- John Wiegley,- Philipp Hausmann,- Spencer Janssen,- Tom Hunger,- William Casarin,- koral,- ksaric,- Adam Vogt,- Alexey Shmalko,- Corey O'Connor,- Cray Elliott,- David Johnson,- Dmitry Bushev,- Domen Kožar,- Felix Kunzmann,- Gabriel Ebner,- Gergely Risko,- Joachim Fasting,- John Albietz,- John Chee,- Jussi Maki,- Lisanna Dettwyler,- Mark Laws,- Mark Wotton,- Matthew Pickering,- Matthew Stewart,- Matvey Aksenov,- Nicholas Clarke,- Nicolas Rolland,- Oliver Charles,- Pascal Wittmann,- Patrick John Wheeler,- Phil de Joux,- Piotr Bogdan,- Profpatsch,- Raymond Gauthier,- Renzo Carbonara,- Rodney Lorrimar,- Sibi,- Sukant Hajra,- Tanner Doshier,- Vaibhav Sagar,- Viktar Basharymau,- danbst,- karsten gebbert,- laMudri,- Александр Цамутали-maintainer: Peter Simons <simons@cryp.to>-license: BSD3-license-file: LICENSE-tested-with: GHC == 8.2.2, GHC == 8.4.3-build-type: Simple-cabal-version: 1.24-+name: cabal2nix+version: 2.10.0+synopsis: Convert Cabal files into Nix build instructions. description:- Convert Cabal files into Nix build instructions. Users of Nix can install the- latest version by running:+ Convert Cabal files into Nix build instructions. Users of Nix can install the latest+ version by running: . > nix-env -i cabal2nix--extra-source-files:- README.md- test/golden-test-cases/*.cabal- test/golden-test-cases/*.nix.golden+license: BSD3+license-file: LICENSE+author: Peter Simons,+ Andres Loeh,+ Benno Fünfstück,+ Mateusz Kowalczyk,+ Michael Alan Dorman,+ Tom Smalley,+ Mathijs Kwik,+ Shea Levy,+ Dmitry Malikov,+ Eric Seidel,+ Jacob Mitchell,+ Graham Christensen,+ Hamish Mackenzie,+ Nikolay Amiantov,+ Aycan iRiCAN,+ Bryan Gardiner,+ Joe Hermaszewski,+ John Wiegley,+ Philipp Hausmann,+ Spencer Janssen,+ Tom Hunger,+ William Casarin,+ koral,+ ksaric,+ Adam Vogt,+ Alexey Shmalko,+ Corey O'Connor,+ Cray Elliott,+ David Johnson,+ Dmitry Bushev,+ Domen Kožar,+ Felix Kunzmann,+ Gabriel Ebner,+ Gergely Risko,+ Joachim Fasting,+ John Albietz,+ John Chee,+ Jussi Maki,+ Lisanna Dettwyler,+ Mark Laws,+ Mark Wotton,+ Matthew Pickering,+ Matthew Stewart,+ Matvey Aksenov,+ Nicholas Clarke,+ Nicolas Rolland,+ Oliver Charles,+ Pascal Wittmann,+ Patrick John Wheeler,+ Phil de Joux,+ Piotr Bogdan,+ Profpatsch,+ Raymond Gauthier,+ Renzo Carbonara,+ Rodney Lorrimar,+ Sibi,+ Sukant Hajra,+ Tanner Doshier,+ Vaibhav Sagar,+ Viktar Basharymau,+ danbst,+ karsten gebbert,+ laMudri,+ Александр Цамутали+maintainer: Peter Simons <simons@cryp.to>+stability: stable+tested-with: GHC == 8.4.3+category: Distribution, Nix+homepage: https://github.com/nixos/cabal2nix#readme+bug-reports: https://github.com/nixos/cabal2nix/issues+build-type: Simple+extra-source-files: README.md+ test/golden-test-cases/*.cabal+ test/golden-test-cases/*.nix.golden+cabal-version: 1.24 source-repository head- type: git+ type: git location: https://github.com/nixos/cabal2nix library- hs-source-dirs: src- other-extensions: CPP DeriveGeneric FlexibleInstances MultiParamTypeClasses- OverloadedStrings RecordWildCards ScopedTypeVariables- StandaloneDeriving TemplateHaskell- default-extensions: MonadFailDesugaring- ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates- -Wredundant-constraints- build-depends:- Cabal >2.2- , aeson- , ansi-wl-pprint- , base <5- , bytestring- , containers- , deepseq >=1.4- , directory- , distribution-nixpkgs >=1.1.1- , filepath- , hackage-db >=2.0.1- , hopenssl >=2- , hpack >= 0.26- , language-nix- , lens- , optparse-applicative- , pretty >=1.1.2- , process- , split- , text- , time- , transformers- , yaml- exposed-modules:- Cabal2nix- Distribution.Nixpkgs.Fetch- Distribution.Nixpkgs.Haskell- Distribution.Nixpkgs.Haskell.BuildInfo- Distribution.Nixpkgs.Haskell.Constraint- Distribution.Nixpkgs.Haskell.Derivation- Distribution.Nixpkgs.Haskell.FromCabal- Distribution.Nixpkgs.Haskell.FromCabal.Configuration- Distribution.Nixpkgs.Haskell.FromCabal.Flags- Distribution.Nixpkgs.Haskell.FromCabal.License- Distribution.Nixpkgs.Haskell.FromCabal.Name- Distribution.Nixpkgs.Haskell.FromCabal.Normalize- Distribution.Nixpkgs.Haskell.FromCabal.PostProcess- Distribution.Nixpkgs.Haskell.Hackage- Distribution.Nixpkgs.Haskell.OrphanInstances- Distribution.Nixpkgs.Haskell.PackageSourceSpec- other-modules:- Paths_cabal2nix- default-language: Haskell2010+ exposed-modules: Cabal2nix+ Distribution.Nixpkgs.Fetch+ Distribution.Nixpkgs.Haskell+ Distribution.Nixpkgs.Haskell.BuildInfo+ Distribution.Nixpkgs.Haskell.Constraint+ Distribution.Nixpkgs.Haskell.Derivation+ Distribution.Nixpkgs.Haskell.FromCabal+ Distribution.Nixpkgs.Haskell.FromCabal.Configuration+ Distribution.Nixpkgs.Haskell.FromCabal.Flags+ Distribution.Nixpkgs.Haskell.FromCabal.License+ Distribution.Nixpkgs.Haskell.FromCabal.Name+ Distribution.Nixpkgs.Haskell.FromCabal.Normalize+ Distribution.Nixpkgs.Haskell.FromCabal.PostProcess+ Distribution.Nixpkgs.Haskell.Hackage+ Distribution.Nixpkgs.Haskell.OrphanInstances+ Distribution.Nixpkgs.Haskell.PackageSourceSpec+ other-modules: Paths_cabal2nix+ hs-source-dirs: src+ build-depends: base < 5+ , Cabal > 2.2+ , aeson+ , ansi-wl-pprint+ , bytestring+ , containers+ , deepseq >= 1.4+ , directory+ , distribution-nixpkgs >= 1.1.1+ , filepath+ , hackage-db >= 2.0.1+ , hopenssl >= 2+ , hpack >= 0.26+ , language-nix+ , lens+ , optparse-applicative+ , pretty >= 1.1.2+ , process+ , split+ , text+ , time+ , transformers+ , yaml+ default-language: Haskell2010+ default-extensions: MonadFailDesugaring+ other-extensions: MultiParamTypeClasses+ ScopedTypeVariables+ FlexibleInstances+ CPP+ TemplateHaskell+ StandaloneDeriving+ RecordWildCards+ OverloadedStrings+ DeriveGeneric+ ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates+ -Wredundant-constraints executable cabal2nix- main-is: Main.hs- hs-source-dirs: cabal2nix- default-extensions: MonadFailDesugaring- ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates- -Wredundant-constraints- build-depends: base, cabal2nix- default-language: Haskell2010+ main-is: Main.hs+ hs-source-dirs: cabal2nix+ build-depends: base, cabal2nix+ default-language: Haskell2010+ default-extensions: MonadFailDesugaring+ ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates+ -Wredundant-constraints executable hackage2nix- main-is: Main.hs- hs-source-dirs: hackage2nix- default-extensions: MonadFailDesugaring- ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates- -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N- build-depends:- Cabal >2.2- , aeson- , base <5- , bytestring- , cabal2nix- , containers- , directory- , distribution-nixpkgs >=1.1.1- , filepath- , hopenssl >=2- , language-nix- , lens- , monad-par- , monad-par-extras- , mtl- , optparse-applicative- , pretty >=1.1.2- other-modules:- Paths_cabal2nix- HackageGit- default-language: Haskell2010+ main-is: Main.hs+ other-modules: HackageGit+ Paths_cabal2nix+ hs-source-dirs: hackage2nix+ build-depends: base < 5+ , Cabal > 2.2+ , aeson+ , bytestring+ , cabal2nix+ , containers+ , directory+ , distribution-nixpkgs >= 1.1.1+ , filepath+ , hopenssl >= 2+ , language-nix+ , lens+ , monad-par+ , monad-par-extras+ , mtl+ , optparse-applicative+ , pretty >= 1.1.2+ default-language: Haskell2010+ default-extensions: MonadFailDesugaring+ ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates+ -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N test-suite regression-test- type: exitcode-stdio-1.0- main-is: Main.hs- hs-source-dirs: test- default-extensions: MonadFailDesugaring- ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates- -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N- -with-rtsopts=-K1K- build-depends: base- , Cabal >2.2- , cabal2nix- , containers- , directory- , filepath- , language-nix- , lens- , pretty- , process >1.2- , tasty- , tasty-golden- build-tools: cabal2nix- default-language: Haskell2010+ type: exitcode-stdio-1.0+ main-is: Main.hs+ hs-source-dirs: test+ build-depends: base+ , Cabal > 2.2+ , cabal2nix+ , containers+ , directory+ , filepath+ , language-nix+ , lens+ , pretty+ , process > 1.2+ , tasty+ , tasty-golden+ default-language: Haskell2010+ default-extensions: MonadFailDesugaring+ build-tools: cabal2nix+ ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates+ -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N+ -with-rtsopts=-K1K
src/Cabal2nix.hs view
@@ -3,7 +3,8 @@ {-# LANGUAGE RecordWildCards #-} module Cabal2nix- ( main, cabal2nix, cabal2nix', cabal2nixWithDB+ ( main, cabal2nix, cabal2nix', cabal2nixWithDB, parseArgs+ , Options(..) ) where @@ -61,9 +62,9 @@ , optSystem :: Platform , optSubpath :: Maybe FilePath , optHackageSnapshot :: Maybe UTCTime+ , optNixpkgsIdentifier :: NixpkgsResolver , optUrl :: String }- deriving (Show) options :: Parser Options options = Options@@ -87,6 +88,7 @@ <*> option (maybeReader parsePlatform) (long "system" <> help "host system (in either short Nix format or full LLVM style) to use when evaluating the Cabal file" <> value buildPlatform <> showDefaultWith display) <*> optional (strOption $ long "subpath" <> metavar "PATH" <> help "Path to Cabal file's directory relative to the URI (default is root directory)") <*> optional (option utcTimeReader (long "hackage-snapshot" <> help "hackage snapshot time, ISO format"))+ <*> pure (\i -> Just (binding # (i, path # [i]))) <*> strArgument (metavar "URI") -- | A parser for the date. Hackage updates happen maybe once or twice a month.@@ -183,19 +185,15 @@ hpackOverrides = over phaseOverrides (++ "preConfigure = \"hpack\";") . set (libraryDepends . tool . contains (PP.pkg "hpack")) True -cabal2nix' :: [String] -> IO (Either Doc Derivation)-cabal2nix' args = do- opts@Options {..} <- handleParseResult $ execParserPure defaultPrefs pinfo args-+cabal2nix' :: Options -> IO (Either Doc Derivation)+cabal2nix' opts@Options{..} = do pkg <- getPackage optHpack optHackageDb optHackageSnapshot $ Source optUrl (fromMaybe "" optRevision) (maybe UnknownHash Guess optSha256) (fromMaybe "" optSubpath) processPackage opts pkg -cabal2nixWithDB :: DB.HackageDB -> [String] -> IO (Either Doc Derivation)-cabal2nixWithDB db args = do- opts@Options {..} <- handleParseResult $ execParserPure defaultPrefs pinfo args+cabal2nixWithDB :: DB.HackageDB -> Options -> IO (Either Doc Derivation)+cabal2nixWithDB db opts@Options{..} = do when (isJust optHackageDb) $ hPutStrLn stderr "WARN: HackageDB provided directly; ignoring --hackage-db" when (isJust optHackageSnapshot) $ hPutStrLn stderr "WARN: HackageDB provided directly; ignoring --hackage-snapshot"- pkg <- getPackage' optHpack (return db) $ Source optUrl (fromMaybe "" optRevision) (maybe UnknownHash Guess optSha256) (fromMaybe "" optSubpath) processPackage opts pkg @@ -210,7 +208,7 @@ deriv :: Derivation deriv = withHpackOverrides $ fromGenericPackageDescription (const True)- (\i -> Just (binding # (i, path # [i])))+ optNixpkgsIdentifier optSystem (unknownCompilerInfo optCompiler NoAbiTag) flags@@ -253,7 +251,12 @@ pure $ if optNixShellOutput then Left shell else Right deriv cabal2nix :: [String] -> IO ()-cabal2nix = cabal2nix' >=> putStrLn . either render prettyShow+cabal2nix = parseArgs >=> cabal2nix' >=> putStrLn . either render prettyShow++parseArgs :: [String] -> IO Options+parseArgs = handleParseResult . execParserPure defaultPrefs pinfo++-- Utils readFlagList :: [String] -> FlagAssignment readFlagList = mkFlagAssignment . map tagWithValue
src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs view
@@ -30,13 +30,13 @@ , enable "pairing" , enable "production" , enable "quvi"- , enable "s3"+ , disable "s3" , enable "tahoe" , enable "tdfa" , ("testsuite", version `withinRange` "< 6.20170925 || >= 6.20171214") , enable "torrentparser"- , enable "webapp"- , enable "webapp-secure"+ , disable "webapp"+ , disable "webapp-secure" , enable "webdav" , enable "xmpp" ]
src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs view
@@ -68,6 +68,7 @@ , ("github-backup", set (executableDepends . tool . contains (pkg "git")) True) , ("GLFW", over (libraryDepends . system) (Set.union (Set.fromList [bind "pkgs.xorg.libXext", bind "pkgs.xorg.libXfixes"]))) , ("GlomeVec", set (libraryDepends . pkgconfig . contains (bind "self.llvmPackages.llvm")) True)+ , ("graphviz", set (testDepends . system . contains (pkg "graphviz")) True) , ("gtk3", gtk3Hook) , ("haddock", haddockHook) -- https://github.com/haskell/haddock/issues/511 , ("hakyll", set (testDepends . tool . contains (pkg "utillinux")) True) -- test suite depends on "rev"
src/Distribution/Nixpkgs/Haskell/Hackage.hs view
@@ -1,6 +1,6 @@ module Distribution.Nixpkgs.Haskell.Hackage ( HackageDB, PackageData, VersionData(..)- , hackageTarball, readTarball+ , hackageTarball, readTarball, parsePackageData ) where
src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs view
@@ -202,8 +202,8 @@ mPackage <- liftIO $ Hpack.readPackageConfig Hpack.defaultDecodeOptions {Hpack.decodeOptionsTarget = dir </> Hpack.packageConfig} case mPackage of Left err -> liftIO $ hPutStrLn stderr ("*** hpack error: " ++ show err ++ ". Exiting.") >> exitFailure- Right (Hpack.DecodeResult pkg' _ _) -> do- let hpackOutput = encodeUtf8 $ Hpack.renderPackage [] pkg'+ Right r -> do+ let hpackOutput = encodeUtf8 $ Hpack.renderPackage [] (Hpack.decodeResultPackage r) hash = printSHA256 $ digest (digestByName "sha256") hpackOutput case runParseGenericPackageDescription "<hpack output>" hpackOutput of Left msg -> liftIO $ do
test/Main.hs view
@@ -27,8 +27,10 @@ main :: IO () main = do- -- TODO: run this test with all kinds of setLocaleEncoding values to ensure we don't- -- depend on the system environment: https://github.com/NixOS/cabal2nix/issues/333+ -- TODO: Run this test with all kinds of setLocaleEncoding values to ensure we don't+ -- depend on the system environment: https://github.com/NixOS/cabal2nix/issues/333.+ --+ -- TODO: Run this test without $HOME defined to ensure that we don't need that variable. cabal2nix <- findExecutable "cabal2nix" >>= maybe (fail "cannot find 'cabal2nix' in $PATH") return testCases <- listDirectoryFilesBySuffix ".cabal" "test/golden-test-cases" defaultMain $ testGroup "regression-tests"