git.iko.soy/typeable/cabal2nix
on master help sign in
Fix broken Nixpkgs resolver in cabal2nix.

Our Nixpkgs name resolver must return the top-level name 'foo' as 'pkgs.foo' because that is the path system packages have from the PoV of Haskell packages. We always did that in hackage2nix, but both cabal2nix and the regression tests were broken in that regard. Fixes https://github.com/NixOS/cabal2nix/issues/364.

commit8278602c78230a6dfadefcadc0ca6f9b1677ecd2 authorPeter Simons <simons@cryp.to> dateMon 23 Jul 2018, 12:11 (8 years ago) parent0e1f29c
5 files changed+306−2
src/Cabal2nix.hs+1−1 src/Distribution/Nixpkgs/Haskell/FromCabal.hs+8 test/Main.hs+1−1 test/golden-test-cases/opencv.cabal+263 test/golden-test-cases/opencv.nix.golden+33
src/Cabal2nix.hs+1−1
@@ -88,7 +88,7 @@ options = Options
8888 <*> 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)
8989 <*> optional (strOption $ long "subpath" <> metavar "PATH" <> help "Path to Cabal file's directory relative to the URI (default is root directory)")
9090 <*> optional (option utcTimeReader (long "hackage-snapshot" <> help "hackage snapshot time, ISO format"))
91− <*> pure (\i -> Just (binding # (i, path # [i])))
91+ <*> pure (\i -> Just (binding # (i, path # [ident # "pkgs", i])))
9292 <*> strArgument (metavar "URI")
9393
9494-- | A parser for the date. Hackage updates happen maybe once or twice a month.
src/Distribution/Nixpkgs/Haskell/FromCabal.hs+8
@@ -122,6 +122,14 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags Package
122122 resolveInHackage i | (i^.ident) `elem` [ unPackageName n | (Dependency n _) <- missingDeps ] = bindNull i
123123 | otherwise = binding # (i, path # ["self",i]) -- TODO: "self" shouldn't be hardcoded.
124124
125+ -- TODO: This is all very confusing. Haskell packages refer to the Nixpkgs
126+ -- derivation 'foo' as 'pkgs.foo', because they live in the 'haskellPackages'
127+ -- name space -- not on the top level. Therefore, we built our Nixpkgs lookup
128+ -- function so that top level names are returned as 'pkgs.foo'. As a result, we
129+ -- end up pre-pending that path to all kinds of names all over the place. I
130+ -- suppose the correct approach would be to assume that the lookup function
131+ -- returns names that live in the top-level and to adapt the code in
132+ -- PostProcess.hs et all to that fact.
125133 goodScopes :: Set [Identifier]
126134 goodScopes = Set.fromList (map ("pkgs":) [[], ["xorg"], ["xlibs"], ["gnome2"], ["gnome"], ["gnome3"], ["kde4"]])
127135
test/Main.hs+1−1
@@ -46,7 +46,7 @@ testLibrary cabalFile = do
4646 cabal2nix :: GenericPackageDescription -> Derivation
4747 cabal2nix gpd = fromGenericPackageDescription
4848 (const True)
49− (\i -> Just (binding # (i, path # [i])))
49+ (\i -> Just (binding # (i, path # [ident # "pkgs", i])))
5050 (Platform X86_64 Linux)
5151 (unknownCompilerInfo (CompilerId GHC (mkVersion [8,2])) NoAbiTag)
5252 (configureCabalFlags (packageId gpd))
test/golden-test-cases/opencv.cabalnew file+263
@@ -0,0 +1,263 @@
1+name: opencv
2+version: 0.0.2.1
3+homepage: https://github.com/LumiGuide/haskell-opencv
4+bug-reports: https://github.com/LumiGuide/haskell-opencv/issues
5+license: BSD3
6+license-file: LICENSE
7+author: Roel van Dijk <roel@lambdacube.nl>, Bas van Dijk <v.dijk.bas@gmail.com>
8+maintainer: Roel van Dijk <roel@lambdacube.nl>, Bas van Dijk <v.dijk.bas@gmail.com>
9+build-type: Custom
10+cabal-version: >=1.23
11+category: AI, Graphics
12+synopsis: Haskell binding to OpenCV-3.x
13+description: <<https://raw.githubusercontent.com/LumiGuide/haskell-opencv/master/data/haskell-opencv-logo-200x82.png>>
14+ .
15+ This is a Haskell library providing a binding to OpenCV-3.x.
16+ It binds directly with the C++ API using the @inline-c@ Haskell library.
17+ .
18+ The library is far from complete but the framework is there to easily
19+ bind missing functionality.
20+ .
21+ Note that the OpenCV contrib modules are provided by
22+ <http://hackage.haskell.org/package/opencv-extra opencv-extra>.
23+ .
24+ Make sure to checkout the
25+ <https://github.com/LumiGuide/haskell-opencv/tree/master/opencv-examples opencv-examples>.
26+
27+extra-source-files:
28+ CHANGELOG.md
29+ data/*.png
30+ data/*.jpg
31+ data/*.mp4
32+ data/*.xml
33+
34+extra-doc-files:
35+ doc/generated/*.png
36+ doc/generated/examples/*.png
37+ doc/generated/examples/*.gif
38+ doc/color_conversions.png
39+
40+source-repository head
41+ type: git
42+ location: git://github.com/LumiGuide/haskell-opencv.git
43+ subdir: opencv
44+
45+flag internal-documentation
46+ description: Enables documentation generation for internal modules.
47+ default: False
48+ manual: True
49+
50+custom-setup
51+ setup-depends: base, Cabal >= 1.23
52+
53+library
54+ hs-source-dirs: src
55+ include-dirs: include
56+ install-includes:
57+ haskell_opencv_matx_typedefs.hpp
58+ hsc_macros.hpp
59+ namespace.hpp
60+ orb.hpp
61+ simple_blob_detector.hpp
62+ termcriteria.hpp
63+ video_motion_analysis.hpp
64+
65+ cc-options: -Wall -std=c++11
66+ ghc-options: -Wall -fwarn-incomplete-patterns -funbox-strict-fields
67+ if flag(internal-documentation)
68+ cpp-options: -DENABLE_INTERNAL_DOCUMENTATION
69+
70+ build-depends:
71+ aeson >= 0.9.0.1
72+ , base >= 4.8 && <5
73+ , base64-bytestring >= 1.0.0.1
74+ , bindings-DSL >= 1.0.23
75+ , bytestring >= 0.10.6
76+ , containers >= 0.5.6.2
77+ , data-default >= 0.7.1.1
78+ , deepseq >= 1.4.1.1
79+ , inline-c >= 0.6
80+ , inline-c-cpp >= 0.2.1
81+ , JuicyPixels >= 3.2.8.1
82+ , linear >= 1.20.4
83+ , primitive >= 0.6.1
84+ , repa >= 3.4.0.2
85+ , template-haskell >= 2.10
86+ , text >= 1.2.2.1
87+ , transformers >= 0.4.2
88+ , vector >= 0.11
89+
90+ exposed-modules:
91+ OpenCV
92+ OpenCV.Calib3d
93+ OpenCV.Core.ArrayOps
94+ OpenCV.Core.Types
95+ OpenCV.Core.Types.Mat
96+ OpenCV.Core.Types.Mat.HMat
97+ OpenCV.Core.Types.Mat.Repa
98+ OpenCV.Core.Types.Matx
99+ OpenCV.Core.Types.Point
100+ OpenCV.Core.Types.Rect
101+ OpenCV.Core.Types.Size
102+ OpenCV.Core.Types.Vec
103+ OpenCV.Exception
104+ OpenCV.Features2d
105+ OpenCV.HighGui
106+ OpenCV.ImgCodecs
107+ OpenCV.ImgProc.ColorMaps
108+ OpenCV.ImgProc.Drawing
109+ OpenCV.ImgProc.FeatureDetection
110+ OpenCV.ImgProc.GeometricImgTransform
111+ OpenCV.ImgProc.ImgFiltering
112+ OpenCV.ImgProc.MiscImgTransform
113+ OpenCV.ImgProc.MiscImgTransform.ColorCodes
114+ OpenCV.ImgProc.ObjectDetection
115+ OpenCV.ImgProc.StructuralAnalysis
116+ OpenCV.ImgProc.Types
117+ OpenCV.ImgProc.CascadeClassifier
118+ OpenCV.JSON
119+ OpenCV.Photo
120+ OpenCV.TypeLevel
121+ OpenCV.Unsafe
122+ OpenCV.Video
123+ OpenCV.Video.MotionAnalysis
124+ OpenCV.VideoIO.Types
125+ OpenCV.VideoIO.VideoCapture
126+ OpenCV.VideoIO.VideoWriter
127+
128+ OpenCV.Internal
129+ OpenCV.Internal.Mutable
130+ OpenCV.Internal.C.Inline
131+ OpenCV.Internal.C.PlacementNew
132+ OpenCV.Internal.C.PlacementNew.TH
133+ OpenCV.Internal.C.Types
134+ OpenCV.Internal.Calib3d.Constants
135+ OpenCV.Internal.Core.ArrayOps
136+ OpenCV.Internal.Core.Types
137+ OpenCV.Internal.Core.Types.Constants
138+ OpenCV.Internal.Core.Types.Mat
139+ OpenCV.Internal.Core.Types.Mat.Depth
140+ OpenCV.Internal.Core.Types.Mat.HMat
141+ OpenCV.Internal.Core.Types.Mat.Marshal
142+ OpenCV.Internal.Core.Types.Mat.ToFrom
143+ OpenCV.Internal.Core.Types.Matx
144+ OpenCV.Internal.Core.Types.Matx.TH
145+ OpenCV.Internal.Core.Types.Point
146+ OpenCV.Internal.Core.Types.Point.TH
147+ OpenCV.Internal.Core.Types.Rect
148+ OpenCV.Internal.Core.Types.Rect.TH
149+ OpenCV.Internal.Core.Types.Size
150+ OpenCV.Internal.Core.Types.Size.TH
151+ OpenCV.Internal.Core.Types.Vec
152+ OpenCV.Internal.Core.Types.Vec.TH
153+ OpenCV.Internal.Exception
154+ OpenCV.Internal.ImgCodecs
155+ OpenCV.Internal.ImgProc.MiscImgTransform
156+ OpenCV.Internal.ImgProc.MiscImgTransform.TypeLevel
157+ OpenCV.Internal.ImgProc.MiscImgTransform.ColorCodes
158+ OpenCV.Internal.ImgProc.Types
159+ OpenCV.Internal.Photo.Constants
160+ OpenCV.Internal.VideoIO.Constants
161+ OpenCV.Internal.VideoIO.Types
162+ OpenCV.Juicy
163+
164+ default-extensions:
165+ BangPatterns
166+ DataKinds
167+ FlexibleContexts
168+ FlexibleInstances
169+ LambdaCase
170+ OverloadedStrings
171+ PackageImports
172+ PolyKinds
173+ ScopedTypeVariables
174+ TupleSections
175+ TypeFamilies
176+ TypeOperators
177+
178+ default-language: Haskell2010
179+ pkgconfig-depends: opencv >= 3.0.0
180+ extra-libraries: stdc++
181+
182+test-suite doc-images-opencv
183+ type: exitcode-stdio-1.0
184+ hs-source-dirs: doc
185+ main-is: images.hs
186+ other-modules:
187+ ExampleExtractor
188+ Language.Haskell.Meta.Syntax.Translate
189+ default-language: Haskell2010
190+ ghc-options: -Wall -fwarn-incomplete-patterns -threaded -funbox-strict-fields -rtsopts
191+ build-depends:
192+ base >= 4.8 && < 5
193+ , bytestring >= 0.10.6
194+ , containers >= 0.5.6.2
195+ , data-default >= 0.7.1.1
196+ , directory >= 1.2.2
197+ , Glob >= 0.9
198+ , haskell-src-exts >= 1.18.2
199+ , JuicyPixels >= 3.2.8.1
200+ , linear >= 1.20.4
201+ , opencv
202+ , primitive >= 0.6.1
203+ , template-haskell >= 2.10
204+ , text >= 1.2.2.1
205+ , transformers >= 0.4.2
206+ , vector >= 0.11
207+
208+ default-extensions:
209+ BangPatterns
210+ DataKinds
211+ LambdaCase
212+ OverloadedStrings
213+ PackageImports
214+ PolyKinds
215+ ScopedTypeVariables
216+ TupleSections
217+ TypeFamilies
218+ TypeOperators
219+
220+test-suite test-opencv
221+ type: exitcode-stdio-1.0
222+ hs-source-dirs: test
223+ main-is: test.hs
224+ default-language: Haskell2010
225+ ghc-options: -Wall -fwarn-incomplete-patterns -threaded -funbox-strict-fields -rtsopts
226+ build-depends:
227+ base >= 4.8 && < 5
228+ , bytestring >= 0.10.6
229+ , lens >= 4.13
230+ , linear >= 1.20.4
231+ , opencv
232+ , QuickCheck >= 2.10.1
233+ , repa >= 3.4.0.2
234+ , tasty >= 0.11.0.2
235+ , tasty-hunit >= 0.9.2
236+ , tasty-quickcheck >= 0.8.4
237+ , transformers >= 0.4.2
238+ , vector >= 0.11
239+
240+ default-extensions:
241+ DataKinds
242+ FlexibleContexts
243+ PackageImports
244+ RankNTypes
245+ ScopedTypeVariables
246+ TypeOperators
247+
248+benchmark bench-opencv
249+ type: exitcode-stdio-1.0
250+ hs-source-dirs: bench
251+ main-is: bench.hs
252+ default-language: Haskell2010
253+ ghc-options: -Wall -fwarn-incomplete-patterns -threaded -funbox-strict-fields -rtsopts
254+ build-depends:
255+ base >= 4.8 && < 5
256+ , bytestring >= 0.10.6
257+ , criterion >= 1.1.1
258+ , opencv
259+ , repa >= 3.4.0.2
260+
261+ default-extensions:
262+ DataKinds
263+ PackageImports
test/golden-test-cases/opencv.nix.goldennew file+33
@@ -0,0 +1,33 @@
1+{ mkDerivation, aeson, base, base64-bytestring, bindings-DSL
2+, bytestring, Cabal, containers, criterion, data-default, deepseq
3+, directory, Glob, haskell-src-exts, inline-c, inline-c-cpp
4+, JuicyPixels, lens, linear, opencv3, primitive, QuickCheck, repa
5+, stdenv, tasty, tasty-hunit, tasty-quickcheck, template-haskell
6+, text, transformers, vector
7+}:
8+mkDerivation {
9+ pname = "opencv";
10+ version = "0.0.2.1";
11+ sha256 = "deadbeef";
12+ configureFlags = [
13+ "--with-gcc=${stdenv.cc}/bin/c++" "--with-ld=${stdenv.cc}/bin/c++"
14+ ];
15+ setupHaskellDepends = [ base Cabal ];
16+ libraryHaskellDepends = [
17+ aeson base base64-bytestring bindings-DSL bytestring containers
18+ data-default deepseq inline-c inline-c-cpp JuicyPixels linear
19+ primitive repa template-haskell text transformers vector
20+ ];
21+ libraryPkgconfigDepends = [ opencv3 ];
22+ testHaskellDepends = [
23+ base bytestring containers data-default directory Glob
24+ haskell-src-exts JuicyPixels lens linear primitive QuickCheck repa
25+ tasty tasty-hunit tasty-quickcheck template-haskell text
26+ transformers vector
27+ ];
28+ benchmarkHaskellDepends = [ base bytestring criterion repa ];
29+ hardeningDisable = [ "bindnow" ];
30+ homepage = "https://github.com/LumiGuide/haskell-opencv";
31+ description = "Haskell binding to OpenCV-3.x";
32+ license = stdenv.lib.licenses.bsd3;
33+}