cabal2nix 2.8.2 → 2.9
raw patch · 23 files changed
+84/−173 lines, 23 filesdep ~Cabaldep ~hackage-dbPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: Cabal, hackage-db
API changes (from Hackage documentation)
- Distribution.Nixpkgs.Haskell.FromCabal.Normalize: normalizeCabalFlags :: FlagAssignment -> FlagAssignment
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance (Control.DeepSeq.NFData v, Control.DeepSeq.NFData c, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Distribution.Types.CondTree.CondBranch v c a)
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance (Control.DeepSeq.NFData v, Control.DeepSeq.NFData c, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Distribution.Types.CondTree.CondTree v c a)
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Compiler.CompilerFlavor
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Compiler.CompilerId
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.License.License
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.System.Arch
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.System.OS
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.System.Platform
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.Benchmark.Benchmark
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.BenchmarkInterface.BenchmarkInterface
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.BenchmarkType.BenchmarkType
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.BuildInfo.BuildInfo
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.BuildType.BuildType
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.Executable.Executable
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.ExecutableScope.ExecutableScope
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.ForeignLib.ForeignLib
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.ForeignLib.LibVersionInfo
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.ForeignLibOption.ForeignLibOption
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.ForeignLibType.ForeignLibType
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.GenericPackageDescription.ConfVar
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.GenericPackageDescription.Flag
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.GenericPackageDescription.FlagName
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.GenericPackageDescription.GenericPackageDescription
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.IncludeRenaming.IncludeRenaming
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.Library.Library
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.Mixin.Mixin
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.ModuleReexport.ModuleReexport
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.ModuleRenaming.ModuleRenaming
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.PackageDescription.PackageDescription
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.SetupBuildInfo.SetupBuildInfo
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.SourceRepo.RepoKind
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.SourceRepo.RepoType
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.SourceRepo.SourceRepo
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.TestSuite.TestSuite
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.TestSuiteInterface.TestSuiteInterface
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Distribution.Types.TestType.TestType
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Language.Haskell.Extension.Extension
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Language.Haskell.Extension.KnownExtension
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData Language.Haskell.Extension.Language
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Distribution.Types.Condition.Condition a)
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Data.String.IsString Distribution.Version.Version
- Distribution.Nixpkgs.Haskell.OrphanInstances: instance Data.String.IsString Distribution.Version.VersionRange
+ Distribution.Nixpkgs.Haskell.OrphanInstances: instance Data.String.IsString Distribution.Types.Version.Version
+ Distribution.Nixpkgs.Haskell.OrphanInstances: instance Data.String.IsString Distribution.Types.VersionRange.VersionRange
Files
- cabal2nix.cabal +7/−6
- hackage2nix/HackageGit.hs +4/−9
- hackage2nix/Main.hs +1/−3
- src/Cabal2nix.hs +3/−5
- src/Distribution/Nixpkgs/Haskell/Derivation.hs +2/−2
- src/Distribution/Nixpkgs/Haskell/FromCabal.hs +3/−1
- src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs +4/−1
- src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs +8/−8
- src/Distribution/Nixpkgs/Haskell/FromCabal/Normalize.hs +1/−20
- src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs +13/−12
- src/Distribution/Nixpkgs/Haskell/Hackage.hs +2/−1
- src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs +0/−50
- src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs +18/−17
- test/Main.hs +4/−2
- test/golden-test-cases/SHA.nix.golden +2/−3
- test/golden-test-cases/butcher.nix.golden +0/−4
- test/golden-test-cases/giphy-api.nix.golden +0/−1
- test/golden-test-cases/gl.nix.golden +2/−2
- test/golden-test-cases/highlighting-kate.nix.golden +0/−1
- test/golden-test-cases/mwc-random.nix.golden +2/−7
- test/golden-test-cases/servant-checked-exceptions.nix.golden +3/−9
- test/golden-test-cases/texmath.nix.golden +2/−3
- test/golden-test-cases/weigh.nix.golden +3/−6
cabal2nix.cabal view
@@ -1,5 +1,5 @@ name: cabal2nix-version: 2.8.2+version: 2.9 synopsis: Convert Cabal files into Nix build instructions. category: Distribution, Nix stability: stable@@ -97,7 +97,7 @@ other-extensions: CPP DeriveGeneric FlexibleInstances MultiParamTypeClasses OverloadedStrings RecordWildCards ScopedTypeVariables StandaloneDeriving TemplateHaskell ghc-options: -Wall build-depends:- Cabal >2+ Cabal >2.2 , aeson , ansi-wl-pprint , base <5@@ -107,7 +107,7 @@ , directory , distribution-nixpkgs >=1.1 , filepath- , hackage-db >2+ , hackage-db >=2.0.1 , hopenssl >=2 , hpack >= 0.26 , language-nix@@ -153,7 +153,7 @@ hs-source-dirs: hackage2nix ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N build-depends:- Cabal >2+ Cabal >2.2 , aeson , base <5 , bytestring@@ -181,7 +181,7 @@ main-is: Main.hs hs-source-dirs: test build-depends: base- , Cabal > 2+ , Cabal >2.2 , cabal2nix , filepath , language-nix@@ -189,5 +189,6 @@ , pretty , tasty , tasty-golden- ghc-options: -Wall+ -- TODO: Why does 1K not work any longer?+ ghc-options: -Wall -with-rtsopts=-K48K default-language: Haskell2010
hackage2nix/HackageGit.hs view
@@ -10,17 +10,15 @@ import Control.Lens hiding ( (<.>) ) import Control.Monad import Data.Aeson-import Data.ByteString.Char8 ( ByteString ) import qualified Data.ByteString.Char8 as BS import Data.Map as Map import Data.Set as Set import Data.String-import Data.String.UTF8 ( toString, fromRep ) import Distribution.Nixpkgs.Hashes import Distribution.Nixpkgs.Haskell.OrphanInstances ( ) import Distribution.Package import Distribution.PackageDescription-import Distribution.PackageDescription.Parse ( parseGenericPackageDescription, ParseResult(..) )+import Distribution.PackageDescription.Parsec ( parseGenericPackageDescriptionMaybe ) import Distribution.Text import Distribution.Version import OpenSSL.Digest ( digest, digestByName )@@ -42,18 +40,15 @@ let isDirectory p = doesDirectoryExist (path </> p) getDirectoryContents path >>= filterM isDirectory . Prelude.filter (\x -> head x /= '.') -decodeUTF8 :: ByteString -> String-decodeUTF8 = toString . fromRep- type SHA256Hash = String readPackage :: FilePath -> PackageIdentifier -> IO (GenericPackageDescription, SHA256Hash) readPackage dirPrefix (PackageIdentifier name version) = do let cabalFile = dirPrefix </> unPackageName name </> display version </> unPackageName name <.> "cabal" buf <- BS.readFile cabalFile- cabal <- case parseGenericPackageDescription (decodeUTF8 buf) of- ParseOk _ a -> return a- ParseFailed err -> fail (cabalFile ++ ": " ++ show err)+ cabal <- case parseGenericPackageDescriptionMaybe buf of+ Just a -> return a+ Nothing -> fail ("cannot parse cabal file " ++ cabalFile) return (cabal, printSHA256 (digest (digestByName "sha256") buf)) declareLenses [d|
hackage2nix/Main.hs view
@@ -78,9 +78,7 @@ . Map.delete "som" -- TODO: https://github.com/NixOS/cabal2nix/issues/164 . Map.delete "type" -- TODO: https://github.com/NixOS/cabal2nix/issues/163 . Map.delete "control-invariants" -- TODO: depends on "assert"- . over (at ("hermes")) ((fmap (set (contains "1.3.4.3") False))) -- TODO: https://github.com/haskell/hackage-server/issues/436- . over (at ("gogol-admin-reports")) ((fmap (set (contains "0.2.0") False))) -- TODO: https://github.com/commercialhaskell/all-cabal-hashes/issues/11- . over (at ("wai-middleware-prometheus")) ((fmap (set (contains "0.2.0") False))) -- TODO: https://github.com/commercialhaskell/all-cabal-hashes/issues/15+ . over (at ("hermes")) ((fmap (set (contains "1.3.4.3") False))) -- TODO: https://github.com/haskell/hackage-server/issues/436 hackage <- fixup <$> readHackage hackageRepository let hackagePackagesFile :: FilePath
src/Cabal2nix.hs view
@@ -19,13 +19,12 @@ import Distribution.Nixpkgs.Fetch import Distribution.Nixpkgs.Haskell import Distribution.Nixpkgs.Haskell.FromCabal-import Distribution.Nixpkgs.Haskell.FromCabal.Normalize ( normalizeCabalFlags ) import Distribution.Nixpkgs.Haskell.FromCabal.Flags import qualified Distribution.Nixpkgs.Haskell.FromCabal.PostProcess as PP (pkg) import qualified Distribution.Nixpkgs.Haskell.Hackage as DB import Distribution.Nixpkgs.Haskell.PackageSourceSpec import Distribution.Nixpkgs.Meta-import Distribution.PackageDescription ( mkFlagName, FlagAssignment )+import Distribution.PackageDescription ( mkFlagName, mkFlagAssignment, FlagAssignment ) import Distribution.Package ( packageId ) import Distribution.Simple.Utils ( lowercase ) import Distribution.System@@ -164,8 +163,7 @@ withHpackOverrides = if pkgRanHpack pkg then hpackOverrides else id flags :: FlagAssignment- flags = normalizeCabalFlags $- configureCabalFlags (packageId (pkgCabal pkg)) ++ readFlagList optFlags+ flags = configureCabalFlags (packageId (pkgCabal pkg)) `mappend` readFlagList optFlags deriv :: Derivation deriv = withHpackOverrides $ fromGenericPackageDescription (const True)@@ -219,6 +217,6 @@ Right d -> pPrint d readFlagList :: [String] -> FlagAssignment-readFlagList = map tagWithValue+readFlagList = mkFlagAssignment . map tagWithValue where tagWithValue ('-':fname) = (mkFlagName (lowercase fname), False) tagWithValue fname = (mkFlagName (lowercase fname), True)
src/Distribution/Nixpkgs/Haskell/Derivation.hs view
@@ -23,7 +23,7 @@ import Distribution.Nixpkgs.Haskell.OrphanInstances ( ) import Distribution.Nixpkgs.Meta import Distribution.Package-import Distribution.PackageDescription ( FlagAssignment, unFlagName )+import Distribution.PackageDescription ( FlagAssignment, unFlagName, unFlagAssignment ) import GHC.Generics ( Generic ) import Language.Nix import Language.Nix.PrettyPrinting@@ -140,7 +140,7 @@ , Set.fromList ["fetch" ++ derivKind _src | derivKind _src /= "" && not isHackagePackage] ] - renderedFlags = [ text "-f" <> (if enable then empty else char '-') <> text (unFlagName f) | (f, enable) <- _cabalFlags ]+ renderedFlags = [ text "-f" <> (if enable then empty else char '-') <> text (unFlagName f) | (f, enable) <- unFlagAssignment _cabalFlags ] ++ map text (toAscList _configureFlags) isHackagePackage = "mirror://hackage/" `isPrefixOf` derivUrl _src sourceAttr DerivationSource {..}
src/Distribution/Nixpkgs/Haskell/FromCabal.hs view
@@ -11,6 +11,7 @@ import Data.Set ( Set ) import qualified Data.Set as Set import Distribution.Compiler+import Distribution.License import Distribution.Nixpkgs.Haskell import qualified Distribution.Nixpkgs.Haskell as Nix import Distribution.Nixpkgs.Haskell.Constraint@@ -115,7 +116,7 @@ xrev = maybe 0 read (lookup "x-revision" customFieldsPD) nixLicense :: Nix.License- nixLicense = fromCabalLicense license+ nixLicense = fromCabalLicense (either licenseFromSPDX id licenseRaw) resolveInHackage :: Identifier -> Binding resolveInHackage i | (i^.ident) `elem` [ unPackageName n | (Dependency n _) <- missingDeps ] = bindNull i@@ -141,6 +142,7 @@ internalLibNames = fmap unqualComponentNameToPackageName . catMaybes $ libName <$> subLibraries convertBuildInfo :: Cabal.BuildInfo -> Nix.BuildInfo+ convertBuildInfo Cabal.BuildInfo {..} | not buildable = mempty convertBuildInfo Cabal.BuildInfo {..} = mempty & haskell .~ Set.fromList [ resolveInHackage (toNixName x) | (Dependency x _) <- targetBuildDepends, x `notElem` internalLibNames ] & system .~ Set.fromList [ resolveInNixpkgs y | x <- extraLibs, y <- libNixName x ]
src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs view
@@ -9,7 +9,10 @@ import Distribution.Version configureCabalFlags :: PackageIdentifier -> FlagAssignment-configureCabalFlags (PackageIdentifier name version)+configureCabalFlags = mkFlagAssignment . configureCabalFlags'++configureCabalFlags' :: PackageIdentifier -> [(FlagName,Bool)]+configureCabalFlags' (PackageIdentifier name version) | name == "accelerate-examples"= [disable "opencl"] | name == "arithmoi" = [disable "llvm"] | name == "cabal-plan" = [enable "exe"]
src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs view
@@ -48,13 +48,13 @@ libNixName "gdk-pixbuf-2.0" = return "gdk_pixbuf" libNixName "gdk-x11-2.0" = return "gdk_x11" libNixName "gio-2.0" = return "glib"-libNixName "GL" = return "mesa"-libNixName "GLU" = ["freeglut","mesa"]-libNixName "glut" = ["freeglut","mesa"]-libNixName "gnome-keyring" = return "gnome_keyring"-libNixName "gnome-keyring-1" = return "gnome_keyring"-libNixName "gnome-vfs-2.0" = return "gnome_vfs"-libNixName "gnome-vfs-module-2.0" = return "gnome_vfs_module"+libNixName "GL" = return "libGL"+libNixName "GLU" = ["libGLU","libGL"]+libNixName "glut" = ["freeglut","libGLU","libGL"]+libNixName "gnome-keyring" = return "gnome-keyring"+libNixName "gnome-keyring-1" = return "gnome-keyring"+libNixName "gnome-vfs-2.0" = return "gnome-vfs"+libNixName "gnome-vfs-module-2.0" = return "gnome-vfs_module" libNixName "gobject-2.0" = return "glib" libNixName "gobject-introspection-1.0" = return "gobjectIntrospection" libNixName "gstreamer-audio-0.10" = return "gst-plugins-base"@@ -145,7 +145,7 @@ libNixName "uuid" = return "libossp_uuid"; libNixName "wayland-client" = return "wayland" libNixName "wayland-cursor" = return "wayland"-libNixName "wayland-egl" = return "mesa"+libNixName "wayland-egl" = return "libGL" libNixName "wayland-server" = return "wayland" libNixName "webkit2gtk-4.0" = return "webkitgtk" -- This is the current API, so let it reference an alias for the latest version. libNixName "webkit2gtk-web-extension-4.0" = return "webkitgtk-web-extension" -- This package doesn't actually exist in nixpkgs at present.
src/Distribution/Nixpkgs/Haskell/FromCabal/Normalize.hs view
@@ -1,17 +1,13 @@ {-# LANGUAGE OverloadedStrings #-} -module Distribution.Nixpkgs.Haskell.FromCabal.Normalize ( normalize, normalizeCabalFlags ) where+module Distribution.Nixpkgs.Haskell.FromCabal.Normalize ( normalize ) where import Control.Lens-import Data.Function-import Data.List import qualified Data.Set as Set import Data.String import Distribution.Nixpkgs.Haskell import Distribution.Nixpkgs.Meta import Distribution.Package-import Distribution.PackageDescription ( FlagAssignment, mkFlagName, unFlagName )-import Distribution.Simple.Utils ( lowercase ) import Language.Nix hiding ( quote ) normalize :: Derivation -> Derivation@@ -21,7 +17,6 @@ & over testDepends (normalizeBuildInfo (packageName drv)) & over benchmarkDepends (normalizeBuildInfo (packageName drv)) & over metaSection normalizeMeta- & over cabalFlags normalizeCabalFlags & jailbreak %~ (&& (packageName drv /= "jailbreak-cabal")) normalizeBuildInfo :: PackageName -> BuildInfo -> BuildInfo@@ -46,17 +41,3 @@ quote ('"':cs) = '\\' : '"' : quote cs quote (c:cs) = c : quote cs quote [] = []---- | When a flag is specified multiple times, the last occurrence counts. Flag--- names are spelled all lowercase.------ >>> normalizeCabalFlags [(mkFlagName "foo", True), (mkFlagName "FOO", True), (mkFlagName "Foo", False)]--- [(FlagName "foo",False)]--normalizeCabalFlags :: FlagAssignment -> FlagAssignment-normalizeCabalFlags flags =- sortBy (compare `on` fst) $- reverse $- nubBy ((==) `on` fst) $- reverse- [ (mkFlagName (lowercase (unFlagName n)), b) | (n, b) <- flags ]
src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs view
@@ -42,9 +42,9 @@ , ("bindings-GLFW", over (libraryDepends . system) (Set.union (Set.fromList [bind "pkgs.xorg.libXext", bind "pkgs.xorg.libXfixes"]))) , ("bindings-lxc", over (metaSection . platforms) (Set.filter (\(Platform _ os) -> os == Linux))) , ("bustle", set (libraryDepends . pkgconfig . contains "system-glib = pkgs.glib") True) , ("bustle", set (libraryDepends . pkgconfig . contains "system-glib = pkgs.glib") True)+ , ("Cabal", set doCheck False) -- test suite doesn't work in Nix , ("cabal-helper", set doCheck False) -- https://github.com/DanielG/cabal-helper/issues/17 , ("cabal-install", set doCheck False . set phaseOverrides cabalInstallPostInstall)- , ("Cabal", set doCheck False) -- test suite doesn't work in Nix , ("darcs", set phaseOverrides darcsInstallPostInstall . set doCheck False) , ("dbus", set doCheck False) -- don't execute tests that try to access the network , ("dns", set testTarget "spec") -- don't execute tests that try to access the network@@ -52,25 +52,25 @@ , ("freenect < 1.2.1", over configureFlags (Set.union (Set.fromList ["--extra-include-dirs=${pkgs.freenect}/include/libfreenect", "--extra-lib-dirs=${pkgs.freenect}/lib"]))) , ("gf", set phaseOverrides gfPhaseOverrides . set doCheck False) , ("gi-cairo", giCairoPhaseOverrides) -- https://github.com/haskell-gi/haskell-gi/issues/36+ , ("gi-gst", giGstLibOverrides "gstreamer") -- https://github.com/haskell-gi/haskell-gi/issues/36 , ("gi-gstaudio", giGstLibOverrides "gst-plugins-base") -- https://github.com/haskell-gi/haskell-gi/issues/36 , ("gi-gstbase", giGstLibOverrides "gst-plugins-base") -- https://github.com/haskell-gi/haskell-gi/issues/36- , ("gi-gst", giGstLibOverrides "gstreamer") -- https://github.com/haskell-gi/haskell-gi/issues/36 , ("gi-gstvideo", giGstLibOverrides "gst-plugins-base") -- https://github.com/haskell-gi/haskell-gi/issues/36 , ("gi-javascriptcore < 4.0.0.0", webkitgtk24xHook) -- https://github.com/haskell-gi/haskell-gi/issues/36- , ("gio", set (libraryDepends . pkgconfig . contains "system-glib = pkgs.glib") True)- , ("gi-pangocairo", giCairoPhaseOverrides) -- https://github.com/haskell-gi/haskell-gi/issues/36 , ("gi-pango", giCairoPhaseOverrides) -- https://github.com/haskell-gi/haskell-gi/issues/36- , ("git-annex", gitAnnexHook)+ , ("gi-pangocairo", giCairoPhaseOverrides) -- https://github.com/haskell-gi/haskell-gi/issues/36+ , ("gi-webkit", webkitgtk24xHook) -- https://github.com/haskell-gi/haskell-gi/issues/36+ , ("gio", set (libraryDepends . pkgconfig . contains "system-glib = pkgs.glib") True)+ , ("git", set doCheck False) -- https://github.com/vincenthz/hit/issues/33 , ("git-annex >= 6.20170925 && < 6.20171214", set doCheck False) -- some versions of git-annex require their test suite to be run inside of a git checkout+ , ("git-annex", gitAnnexHook) , ("github-backup", set (executableDepends . tool . contains (pkg "git")) True)- , ("git", set doCheck False) -- https://github.com/vincenthz/hit/issues/33- , ("gi-webkit", webkitgtk24xHook) -- https://github.com/haskell-gi/haskell-gi/issues/36+ , ("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) , ("gtk3", gtk3Hook) , ("haddock", haddockHook) -- https://github.com/haskell/haddock/issues/511 , ("hakyll", set (testDepends . tool . contains (pkg "utillinux")) True) -- test suite depends on "rev" , ("haskell-src-exts", set doCheck False)- , ("hspec-core >= 2.4.4", hspecCoreOverrides) , ("hfsevents", hfseventsOverrides) , ("HFuse", set phaseOverrides hfusePreConfigure) , ("hlibgit2 >= 0.18.0.14", set (testDepends . tool . contains (pkg "git")) True)@@ -80,8 +80,9 @@ , ("hsignal < 0.2.7.4", set phaseOverrides "prePatch = \"rm -v Setup.lhs\";") -- https://github.com/amcphail/hsignal/issues/1 , ("hslua < 0.9.3", over (libraryDepends . each) (replace (pkg "lua") (pkg "lua5_1"))) , ("hslua >= 0.9.3", over (libraryDepends . each) (replace (pkg "lua") (pkg "lua5_3")))- , ("http-client-openssl >= 0.2.0.1", set doCheck False) -- attempts to access the network+ , ("hspec-core >= 2.4.4", hspecCoreOverrides) , ("http-client", set doCheck False) -- attempts to access the network+ , ("http-client-openssl >= 0.2.0.1", set doCheck False) -- attempts to access the network , ("http-client-tls >= 0.2.2", set doCheck False) -- attempts to access the network , ("http-conduit", set doCheck False) -- attempts to access the network , ("imagemagick", set (libraryDepends . pkgconfig . contains (pkg "imagemagick")) True) -- https://github.com/NixOS/cabal2nix/issues/136@@ -99,8 +100,8 @@ , ("numeric-qq", set doCheck False) -- test suite doesn't finish even after 1+ days , ("opencv", opencvOverrides) , ("pandoc >= 1.16.0.2", set doCheck False) -- https://github.com/jgm/pandoc/issues/2709 and https://github.com/fpco/stackage/issues/1332- , ("pandoc-citeproc", set doCheck False) -- https://github.com/jgm/pandoc-citeproc/issues/172 , ("pandoc", set jailbreak False) -- jailbreak-cabal break the build+ , ("pandoc-citeproc", set doCheck False) -- https://github.com/jgm/pandoc-citeproc/issues/172 , ("purescript", set doCheck False) -- test suite doesn't cope with Nix build env , ("qtah-cpp-qt5", set (libraryDepends . system . contains (bind "pkgs.qt5.qtbase")) True) , ("qtah-qt5", set (libraryDepends . tool . contains (bind "pkgs.qt5.qtbase")) True)@@ -119,13 +120,13 @@ , ("twilio", set doCheck False) -- attempts to access the network , ("tz", set phaseOverrides "preConfigure = \"export TZDIR=${pkgs.tzdata}/share/zoneinfo\";") , ("udev", over (metaSection . platforms) (Set.filter (\(Platform _ os) -> os == Linux))) , ("bustle", set (libraryDepends . pkgconfig . contains "system-glib = pkgs.glib") True)- , ("webkitgtk3-javascriptcore", webkitgtk24xHook) -- https://github.com/haskell-gi/haskell-gi/issues/36 , ("webkitgtk3", webkitgtk24xHook) -- https://github.com/haskell-gi/haskell-gi/issues/36+ , ("webkitgtk3-javascriptcore", webkitgtk24xHook) -- https://github.com/haskell-gi/haskell-gi/issues/36 , ("websockets", set doCheck False) -- https://github.com/jaspervdj/websockets/issues/104 , ("Win32", over (metaSection . platforms) (Set.filter (\(Platform _ os) -> os == Windows))) , ("Win32-shortcut", over (metaSection . platforms) (Set.filter (\(Platform _ os) -> os == Windows)))- , ("wxcore", set (libraryDepends . pkgconfig . contains (pkg "wxGTK")) True) , ("wxc", wxcHook)+ , ("wxcore", set (libraryDepends . pkgconfig . contains (pkg "wxGTK")) True) , ("X11", over (libraryDepends . system) (Set.union (Set.fromList $ map bind ["pkgs.xorg.libXinerama","pkgs.xorg.libXext","pkgs.xorg.libXrender","pkgs.xorg.libXScrnSaver"]))) , ("xmonad", set phaseOverrides xmonadPostInstall) , ("zip-archive < 0.3.1", over (testDepends . tool) (replace (bind "self.zip") (pkg "zip")))
src/Distribution/Nixpkgs/Haskell/Hackage.hs view
@@ -1,7 +1,8 @@ module Distribution.Nixpkgs.Haskell.Hackage ( HackageDB, PackageData, VersionData(..) , hackageTarball, readTarball- ) where+ )+ where import Data.Map as Map import qualified Distribution.Hackage.DB.Parsed as P
src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs view
@@ -8,62 +8,12 @@ import qualified Data.Text as T import Data.Yaml import Distribution.Compiler-import Distribution.License import Distribution.Package-import Distribution.PackageDescription import Distribution.System import Distribution.Text-import Distribution.Types.CondTree-import Distribution.Types.ExecutableScope-import Distribution.Types.ForeignLib-import Distribution.Types.ForeignLibOption-import Distribution.Types.ForeignLibType-import Distribution.Types.IncludeRenaming-import Distribution.Types.Mixin import Distribution.Version-import Language.Haskell.Extension -instance NFData SetupBuildInfo-instance (NFData v, NFData c, NFData a) => NFData (CondTree v c a)-instance (NFData v, NFData c, NFData a) => NFData (CondBranch v c a)-instance NFData Arch-instance NFData Benchmark-instance NFData BenchmarkInterface-instance NFData BenchmarkType-instance NFData BuildInfo-instance NFData BuildType-instance NFData LibVersionInfo-instance NFData CompilerFlavor-instance NFData ConfVar-instance NFData ExecutableScope-instance NFData IncludeRenaming-instance NFData ForeignLibType-instance NFData ForeignLibOption-instance NFData Executable-instance NFData Extension-instance NFData Flag-instance NFData Mixin-instance NFData FlagName-instance NFData GenericPackageDescription-instance NFData KnownExtension-instance NFData Language-instance NFData Library-instance NFData ForeignLib-instance NFData License-instance NFData ModuleReexport-instance NFData ModuleRenaming-instance NFData OS-instance NFData PackageDescription-instance NFData RepoKind-instance NFData RepoType-instance NFData SourceRepo-instance NFData TestSuite-instance NFData TestSuiteInterface-instance NFData TestType-instance NFData a => NFData (Condition a)-instance NFData Platform instance NFData CompilerInfo-instance NFData CompilerId instance NFData AbiTag instance IsString Version where
src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs view
@@ -2,10 +2,12 @@ ( Package(..), getPackage, getPackage', loadHackageDB, sourceFromHackage ) where +import Control.DeepSeq (force) import qualified Control.Exception as Exception import Control.Monad import Control.Monad.IO.Class import Control.Monad.Trans.Maybe+import qualified Data.ByteString.Char8 as BS -- TODO: Deal with utf-8 encoding!! import Data.List ( isSuffixOf, isPrefixOf ) import qualified Data.Map as DB import Data.Maybe@@ -16,16 +18,16 @@ import qualified Distribution.Package as Cabal import Distribution.PackageDescription import qualified Distribution.PackageDescription as Cabal-import Distribution.PackageDescription.Parse as Cabal+import Distribution.PackageDescription.Parsec as Cabal import Distribution.Text ( simpleParse, display ) import Distribution.Version-import qualified Hpack.Render as Hpack import qualified Hpack.Config as Hpack+import qualified Hpack.Render as Hpack import OpenSSL.Digest ( digestString, digestByName ) import System.Directory ( doesDirectoryExist, doesFileExist, createDirectoryIfMissing, getHomeDirectory, getDirectoryContents ) import System.Exit ( exitFailure ) import System.FilePath ( (</>), (<.>) )-import System.IO ( hPutStrLn, stderr, hPutStr )+import System.IO data Package = Package { pkgSource :: DerivationSource@@ -197,27 +199,26 @@ Right (Hpack.DecodeResult pkg' _ _) -> do let hpackOutput = Hpack.renderPackage [] pkg' hash = printSHA256 $ digestString (digestByName "sha256") hpackOutput- case parseGenericPackageDescription hpackOutput of- ParseFailed perr -> liftIO $ do- hPutStrLn stderr $ "*** cannot parse hpack output: " ++ show perr- hPutStrLn stderr $ "*** hpack output:\n" ++ hpackOutput+ case parseGenericPackageDescriptionMaybe (BS.pack hpackOutput) of+ Nothing -> liftIO $ do+ hPutStrLn stderr "*** cannot parse hpack output:"+ hPutStrLn stderr hpackOutput fail "*** Exiting."- ParseOk _ pkg -> MaybeT $ return $ Just $ (,) True $ setCabalFileHash hash pkg+ Just pkg -> MaybeT $ return $ Just $ (,) True $ setCabalFileHash hash pkg cabalFromFile :: Bool -> FilePath -> MaybeT IO Cabal.GenericPackageDescription cabalFromFile failHard file =- -- readFile throws an error if it's used on binary files which contain sequences+ -- hGetContents throws an error if it's used on files which contain sequences -- that do not represent valid characters. To catch that exception, we need to- -- wrap the whole block in `catchIO`, because of lazy IO. The `case` will force- -- the reading of the file, so we will always catch the expression here.+ -- wrap the whole block in `catchIO`. MaybeT $ handleIO (\err -> Nothing <$ hPutStrLn stderr ("*** parsing cabal file: " ++ show err)) $ do- buf <- readFile file+ buf <- withFile file ReadMode $ \ h -> do+ hSetEncoding h utf8+ hGetContents h >>= Exception.evaluate . force let hash = printSHA256 (digestString (digestByName "sha256") buf)- case parseGenericPackageDescription buf of- ParseFailed perr -> if failHard- then fail ("cannot parse " ++ show file ++ ": " ++ show perr)- else return Nothing- ParseOk _ pkg -> return $ Just $ setCabalFileHash hash pkg+ case parseGenericPackageDescriptionMaybe (BS.pack buf) of+ Nothing -> if failHard then fail ("cannot parse " ++ show file) else return Nothing+ Just pkg -> return $ Just $ setCabalFileHash hash pkg setCabalFileHash :: String -> GenericPackageDescription -> GenericPackageDescription setCabalFileHash sha256 gpd = gpd { packageDescription = (packageDescription gpd) {
test/Main.hs view
@@ -7,7 +7,7 @@ import Control.Lens import Distribution.Compiler import Distribution.PackageDescription-import Distribution.PackageDescription.Parse+import Distribution.PackageDescription.Parsec import Distribution.System import Distribution.Verbosity import Distribution.Version@@ -19,6 +19,8 @@ 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 testCases <- findByExtension [".cabal"] "test/golden-test-cases" defaultMain $ testGroup "regression-tests" (map regressionTest testCases) @@ -33,7 +35,7 @@ (\i -> Just (binding # (i, path # [i]))) (Platform X86_64 Linux) (unknownCompilerInfo (CompilerId GHC (mkVersion [8,2])) NoAbiTag)- []+ mempty [] gpd & src .~ DerivationSource
test/golden-test-cases/SHA.nix.golden view
@@ -1,5 +1,5 @@-{ mkDerivation, array, base, binary, bytestring, directory-, fetchurl, QuickCheck, test-framework, test-framework-quickcheck2+{ mkDerivation, array, base, binary, bytestring, fetchurl+, QuickCheck, test-framework, test-framework-quickcheck2 }: mkDerivation { pname = "SHA";@@ -11,7 +11,6 @@ isLibrary = true; isExecutable = true; libraryHaskellDepends = [ array base binary bytestring ];- executableHaskellDepends = [ base bytestring directory ]; testHaskellDepends = [ array base binary bytestring QuickCheck test-framework test-framework-quickcheck2
test/golden-test-cases/butcher.nix.golden view
@@ -13,10 +13,6 @@ base bifunctors containers deque either extra free microlens microlens-th mtl multistate pretty transformers unsafe void ];- testHaskellDepends = [- base containers deque either extra free microlens microlens-th mtl- multistate pretty transformers unsafe- ]; homepage = "https://github.com/lspitzner/butcher/"; description = "Chops a command or program invocation into digestable pieces"; license = stdenv.lib.licenses.bsd3;
test/golden-test-cases/giphy-api.nix.golden view
@@ -17,7 +17,6 @@ microlens microlens-th mtl network-uri servant servant-client text transformers ];- executableHaskellDepends = [ base network-uri text ]; testHaskellDepends = [ aeson base basic-prelude bytestring containers directory hspec lens network-uri text
test/golden-test-cases/gl.nix.golden view
@@ -1,5 +1,5 @@ { mkDerivation, base, Cabal, containers, directory, fetchurl-, filepath, fixed, half, hxt, mesa, transformers+, filepath, fixed, half, hxt, libGL, transformers }: mkDerivation { pname = "gl";@@ -14,7 +14,7 @@ libraryHaskellDepends = [ base containers fixed half transformers ];- librarySystemDepends = [ mesa ];+ librarySystemDepends = [ libGL ]; description = "Complete OpenGL raw bindings"; license = stdenv.lib.licenses.bsd3; }
test/golden-test-cases/highlighting-kate.nix.golden view
@@ -15,7 +15,6 @@ base blaze-html containers mtl parsec regex-pcre-builtin utf8-string ];- executableHaskellDepends = [ base blaze-html containers filepath ]; testHaskellDepends = [ base blaze-html containers Diff directory filepath process ];
test/golden-test-cases/mwc-random.nix.golden view
@@ -1,6 +1,5 @@-{ mkDerivation, base, fetchurl, HUnit, math-functions, primitive-, QuickCheck, statistics, test-framework, test-framework-hunit-, test-framework-quickcheck2, time, vector+{ mkDerivation, base, fetchurl, math-functions, primitive, time+, vector }: mkDerivation { pname = "mwc-random";@@ -11,10 +10,6 @@ }; libraryHaskellDepends = [ base math-functions primitive time vector- ];- testHaskellDepends = [- base HUnit QuickCheck statistics test-framework- test-framework-hunit test-framework-quickcheck2 vector ]; doCheck = false; homepage = "https://github.com/bos/mwc-random";
test/golden-test-cases/servant-checked-exceptions.nix.golden view
@@ -1,8 +1,7 @@ { mkDerivation, aeson, base, bytestring, deepseq, doctest, fetchurl-, Glob, hspec-wai, http-api-data, http-client, http-media-, natural-transformation, optparse-applicative, profunctors-, servant, servant-client, servant-docs, servant-server, tagged-, tasty, tasty-hspec, tasty-hunit, text, wai, warp+, Glob, hspec-wai, http-media, profunctors, servant, servant-client+, servant-docs, servant-server, tagged, tasty, tasty-hspec+, tasty-hunit, text, wai }: mkDerivation { pname = "servant-checked-exceptions";@@ -16,11 +15,6 @@ libraryHaskellDepends = [ aeson base bytestring deepseq http-media profunctors servant servant-client servant-docs servant-server tagged text- ];- executableHaskellDepends = [- aeson base http-api-data http-client natural-transformation- optparse-applicative servant servant-client servant-docs- servant-server text wai warp ]; testHaskellDepends = [ base bytestring doctest Glob hspec-wai servant servant-server tasty
test/golden-test-cases/texmath.nix.golden view
@@ -1,6 +1,6 @@ { mkDerivation, base, bytestring, containers, directory, fetchurl-, filepath, mtl, network-uri, pandoc-types, parsec, process, split-, syb, temporary, text, utf8-string, xml+, filepath, mtl, pandoc-types, parsec, process, split, syb+, temporary, text, utf8-string, xml }: mkDerivation { pname = "texmath";@@ -14,7 +14,6 @@ libraryHaskellDepends = [ base containers mtl pandoc-types parsec syb xml ];- executableHaskellDepends = [ network-uri ]; testHaskellDepends = [ base bytestring directory filepath process split temporary text utf8-string xml
test/golden-test-cases/weigh.nix.golden view
@@ -1,6 +1,5 @@-{ mkDerivation, base, bytestring-trie, containers, deepseq-, fetchurl, mtl, process, random, split, template-haskell-, temporary, unordered-containers+{ mkDerivation, base, deepseq, fetchurl, mtl, process, split+, template-haskell, temporary }: mkDerivation { pname = "weigh";@@ -12,9 +11,7 @@ libraryHaskellDepends = [ base deepseq mtl process split template-haskell temporary ];- testHaskellDepends = [- base bytestring-trie containers deepseq random unordered-containers- ];+ testHaskellDepends = [ base deepseq ]; homepage = "https://github.com/fpco/weigh#readme"; description = "Measure allocations of a Haskell functions/values"; license = stdenv.lib.licenses.bsd3;