Skip to content

Commit 001aa97

Browse files
Merge pull request #650 from NixOS/replace-no-fail
FromCabal.PostProcess: ignore missing old binding in replace
2 parents a9c686c + b08641a commit 001aa97

File tree

6 files changed

+500
-8
lines changed

6 files changed

+500
-8
lines changed

cabal2nix/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
* `git-annex`
2525
* `haddock`
2626
* `tz`
27+
* Postprocessing hooks utilising `replace` no longer fail when they can't find
28+
the binding to replace. This fixes an issue where `cabal2nix` would fail to
29+
generate an expression for a package when `hackage2nix` would succeed.
2730

2831
## 2.19.1
2932

cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,10 @@ bind s = binding # (i, path # is)
202202

203203
-- | @replace old new bset@ replaces the Nix binding @old@ with @new@ in the
204204
-- set of bindings @bset@. If @old@ is not found in @bset@, then the function
205-
-- fails with an 'error'.
205+
-- returns @bset@. Unfortunately, the set of 'Binding's may be different
206+
-- between 'Derivation's generated by @cabal2nix@ and @hackage2nix@.
206207
replace :: Binding -> Binding -> Set Binding -> Set Binding
207-
replace old new bs
208-
| old `Set.member` bs = Set.insert new (Set.delete old bs)
209-
| otherwise = error (unwords [ "post-process: cannot replace name binding"
210-
, show old, "by", show new
211-
, "because it's not found in set"
212-
, show bs
213-
])
208+
replace old new = Set.map (\x -> if x == old then new else x)
214209

215210
gtk3Hook :: Derivation -> Derivation -- https://github.com/NixOS/cabal2nix/issues/145
216211
gtk3Hook = set (libraryDepends . pkgconfig . contains (pkg "gtk3")) True
Lines changed: 266 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
1+
name: gi-gst
2+
version: 1.0.30
3+
synopsis: GStreamer bindings
4+
description: Bindings for GStreamer, autogenerated by haskell-gi.
5+
homepage: https://github.com/haskell-gi/haskell-gi
6+
license: LGPL-2.1
7+
license-file: LICENSE
8+
author: Iñaki García Etxebarria
9+
maintainer: Iñaki García Etxebarria
10+
category: Bindings
11+
build-type: Custom
12+
cabal-version: 2.0
13+
14+
extra-source-files: README.md ChangeLog.md stack.yaml Gst.overrides
15+
16+
custom-setup
17+
setup-depends: base >= 4.11 && < 5,
18+
Cabal >= 1.24 && < 4,
19+
haskell-gi >= 0.26.9 && < 0.27,
20+
gi-gobject == 2.0.*,
21+
gi-glib == 2.0.*
22+
23+
library
24+
default-language: Haskell2010
25+
default-extensions: NoImplicitPrelude, ScopedTypeVariables, CPP, OverloadedStrings, NegativeLiterals, ConstraintKinds, TypeFamilies, MultiParamTypeClasses, KindSignatures, FlexibleInstances, UndecidableInstances, DataKinds, FlexibleContexts, UndecidableSuperClasses, TypeOperators
26+
other-extensions: PatternSynonyms, ViewPatterns, TypeApplications
27+
ghc-options: -fno-warn-unused-imports -fno-warn-warnings-deprecations
28+
29+
pkgconfig-depends: gstreamer-1.0
30+
build-depends: base >= 4.8 && <5,
31+
haskell-gi-base >= 0.26 && < 0.27,
32+
haskell-gi >= 0.26.9 && < 0.27,
33+
haskell-gi-overloading < 1.1,
34+
gi-gobject == 2.0.*,
35+
gi-glib == 2.0.*,
36+
bytestring >= 0.10 && < 1,
37+
containers >= 0.5 && < 1,
38+
text >= 1.0 && < 3,
39+
transformers >= 0.4 && < 1
40+
41+
-- Disable overloading when compiling under GHC 8.2.x
42+
-- see https://ghc.haskell.org/trac/ghc/ticket/14382
43+
if impl(ghc == 8.2.*)
44+
build-depends: haskell-gi-overloading == 0.0
45+
46+
-- Note that the following list of exposed modules and autogen
47+
-- modules is for documentation purposes only, so that some
48+
-- documentation appears in hackage. The actual list of modules
49+
-- to be built will be built at configure time, based on the
50+
-- available introspection data.
51+
52+
exposed-modules: GI.Gst.Config,
53+
GI.Gst,
54+
GI.Gst.Callbacks,
55+
GI.Gst.Constants,
56+
GI.Gst.Enums,
57+
GI.Gst.Flags,
58+
GI.Gst.Functions,
59+
GI.Gst.Interfaces,
60+
GI.Gst.Interfaces.ChildProxy,
61+
GI.Gst.Interfaces.Preset,
62+
GI.Gst.Interfaces.TagSetter,
63+
GI.Gst.Interfaces.TocSetter,
64+
GI.Gst.Interfaces.URIHandler,
65+
GI.Gst.Objects,
66+
GI.Gst.Objects.Allocator,
67+
GI.Gst.Objects.Bin,
68+
GI.Gst.Objects.Bitmask,
69+
GI.Gst.Objects.BufferPool,
70+
GI.Gst.Objects.Bus,
71+
GI.Gst.Objects.Clock,
72+
GI.Gst.Objects.ControlBinding,
73+
GI.Gst.Objects.ControlSource,
74+
GI.Gst.Objects.Device,
75+
GI.Gst.Objects.DeviceMonitor,
76+
GI.Gst.Objects.DeviceProvider,
77+
GI.Gst.Objects.DeviceProviderFactory,
78+
GI.Gst.Objects.DoubleRange,
79+
GI.Gst.Objects.DynamicTypeFactory,
80+
GI.Gst.Objects.Element,
81+
GI.Gst.Objects.ElementFactory,
82+
GI.Gst.Objects.FlagSet,
83+
GI.Gst.Objects.Fraction,
84+
GI.Gst.Objects.FractionRange,
85+
GI.Gst.Objects.GhostPad,
86+
GI.Gst.Objects.Int64Range,
87+
GI.Gst.Objects.IntRange,
88+
GI.Gst.Objects.Object,
89+
GI.Gst.Objects.Pad,
90+
GI.Gst.Objects.PadTemplate,
91+
GI.Gst.Objects.ParamArray,
92+
GI.Gst.Objects.ParamFraction,
93+
GI.Gst.Objects.Pipeline,
94+
GI.Gst.Objects.Plugin,
95+
GI.Gst.Objects.PluginFeature,
96+
GI.Gst.Objects.ProxyPad,
97+
GI.Gst.Objects.Registry,
98+
GI.Gst.Objects.SharedTaskPool,
99+
GI.Gst.Objects.Stream,
100+
GI.Gst.Objects.StreamCollection,
101+
GI.Gst.Objects.SystemClock,
102+
GI.Gst.Objects.Task,
103+
GI.Gst.Objects.TaskPool,
104+
GI.Gst.Objects.Tracer,
105+
GI.Gst.Objects.TracerFactory,
106+
GI.Gst.Objects.TracerRecord,
107+
GI.Gst.Objects.TypeFindFactory,
108+
GI.Gst.Objects.ValueArray,
109+
GI.Gst.Objects.ValueList,
110+
GI.Gst.Structs,
111+
GI.Gst.Structs.AllocationParams,
112+
GI.Gst.Structs.AtomicQueue,
113+
GI.Gst.Structs.Buffer,
114+
GI.Gst.Structs.BufferList,
115+
GI.Gst.Structs.BufferPoolAcquireParams,
116+
GI.Gst.Structs.ByteArrayInterface,
117+
GI.Gst.Structs.Caps,
118+
GI.Gst.Structs.CapsFeatures,
119+
GI.Gst.Structs.ClockEntry,
120+
GI.Gst.Structs.Context,
121+
GI.Gst.Structs.CustomMeta,
122+
GI.Gst.Structs.DateTime,
123+
GI.Gst.Structs.DebugCategory,
124+
GI.Gst.Structs.DebugMessage,
125+
GI.Gst.Structs.Event,
126+
GI.Gst.Structs.FormatDefinition,
127+
GI.Gst.Structs.Iterator,
128+
GI.Gst.Structs.MapInfo,
129+
GI.Gst.Structs.Memory,
130+
GI.Gst.Structs.Message,
131+
GI.Gst.Structs.Meta,
132+
GI.Gst.Structs.MetaInfo,
133+
GI.Gst.Structs.MetaTransformCopy,
134+
GI.Gst.Structs.MiniObject,
135+
GI.Gst.Structs.PadProbeInfo,
136+
GI.Gst.Structs.ParamSpecArray,
137+
GI.Gst.Structs.ParamSpecFraction,
138+
GI.Gst.Structs.ParentBufferMeta,
139+
GI.Gst.Structs.ParseContext,
140+
GI.Gst.Structs.PluginDesc,
141+
GI.Gst.Structs.Poll,
142+
GI.Gst.Structs.PollFD,
143+
GI.Gst.Structs.Promise,
144+
GI.Gst.Structs.ProtectionMeta,
145+
GI.Gst.Structs.Query,
146+
GI.Gst.Structs.ReferenceTimestampMeta,
147+
GI.Gst.Structs.Sample,
148+
GI.Gst.Structs.Segment,
149+
GI.Gst.Structs.StaticCaps,
150+
GI.Gst.Structs.StaticPadTemplate,
151+
GI.Gst.Structs.Structure,
152+
GI.Gst.Structs.TagList,
153+
GI.Gst.Structs.TimedValue,
154+
GI.Gst.Structs.Toc,
155+
GI.Gst.Structs.TocEntry,
156+
GI.Gst.Structs.TypeFind,
157+
GI.Gst.Structs.Uri,
158+
GI.Gst.Structs.ValueTable
159+
160+
autogen-modules: GI.Gst.Config,
161+
GI.Gst,
162+
GI.Gst.Callbacks,
163+
GI.Gst.Constants,
164+
GI.Gst.Enums,
165+
GI.Gst.Flags,
166+
GI.Gst.Functions,
167+
GI.Gst.Interfaces,
168+
GI.Gst.Interfaces.ChildProxy,
169+
GI.Gst.Interfaces.Preset,
170+
GI.Gst.Interfaces.TagSetter,
171+
GI.Gst.Interfaces.TocSetter,
172+
GI.Gst.Interfaces.URIHandler,
173+
GI.Gst.Objects,
174+
GI.Gst.Objects.Allocator,
175+
GI.Gst.Objects.Bin,
176+
GI.Gst.Objects.Bitmask,
177+
GI.Gst.Objects.BufferPool,
178+
GI.Gst.Objects.Bus,
179+
GI.Gst.Objects.Clock,
180+
GI.Gst.Objects.ControlBinding,
181+
GI.Gst.Objects.ControlSource,
182+
GI.Gst.Objects.Device,
183+
GI.Gst.Objects.DeviceMonitor,
184+
GI.Gst.Objects.DeviceProvider,
185+
GI.Gst.Objects.DeviceProviderFactory,
186+
GI.Gst.Objects.DoubleRange,
187+
GI.Gst.Objects.DynamicTypeFactory,
188+
GI.Gst.Objects.Element,
189+
GI.Gst.Objects.ElementFactory,
190+
GI.Gst.Objects.FlagSet,
191+
GI.Gst.Objects.Fraction,
192+
GI.Gst.Objects.FractionRange,
193+
GI.Gst.Objects.GhostPad,
194+
GI.Gst.Objects.Int64Range,
195+
GI.Gst.Objects.IntRange,
196+
GI.Gst.Objects.Object,
197+
GI.Gst.Objects.Pad,
198+
GI.Gst.Objects.PadTemplate,
199+
GI.Gst.Objects.ParamArray,
200+
GI.Gst.Objects.ParamFraction,
201+
GI.Gst.Objects.Pipeline,
202+
GI.Gst.Objects.Plugin,
203+
GI.Gst.Objects.PluginFeature,
204+
GI.Gst.Objects.ProxyPad,
205+
GI.Gst.Objects.Registry,
206+
GI.Gst.Objects.SharedTaskPool,
207+
GI.Gst.Objects.Stream,
208+
GI.Gst.Objects.StreamCollection,
209+
GI.Gst.Objects.SystemClock,
210+
GI.Gst.Objects.Task,
211+
GI.Gst.Objects.TaskPool,
212+
GI.Gst.Objects.Tracer,
213+
GI.Gst.Objects.TracerFactory,
214+
GI.Gst.Objects.TracerRecord,
215+
GI.Gst.Objects.TypeFindFactory,
216+
GI.Gst.Objects.ValueArray,
217+
GI.Gst.Objects.ValueList,
218+
GI.Gst.Structs,
219+
GI.Gst.Structs.AllocationParams,
220+
GI.Gst.Structs.AtomicQueue,
221+
GI.Gst.Structs.Buffer,
222+
GI.Gst.Structs.BufferList,
223+
GI.Gst.Structs.BufferPoolAcquireParams,
224+
GI.Gst.Structs.ByteArrayInterface,
225+
GI.Gst.Structs.Caps,
226+
GI.Gst.Structs.CapsFeatures,
227+
GI.Gst.Structs.ClockEntry,
228+
GI.Gst.Structs.Context,
229+
GI.Gst.Structs.CustomMeta,
230+
GI.Gst.Structs.DateTime,
231+
GI.Gst.Structs.DebugCategory,
232+
GI.Gst.Structs.DebugMessage,
233+
GI.Gst.Structs.Event,
234+
GI.Gst.Structs.FormatDefinition,
235+
GI.Gst.Structs.Iterator,
236+
GI.Gst.Structs.MapInfo,
237+
GI.Gst.Structs.Memory,
238+
GI.Gst.Structs.Message,
239+
GI.Gst.Structs.Meta,
240+
GI.Gst.Structs.MetaInfo,
241+
GI.Gst.Structs.MetaTransformCopy,
242+
GI.Gst.Structs.MiniObject,
243+
GI.Gst.Structs.PadProbeInfo,
244+
GI.Gst.Structs.ParamSpecArray,
245+
GI.Gst.Structs.ParamSpecFraction,
246+
GI.Gst.Structs.ParentBufferMeta,
247+
GI.Gst.Structs.ParseContext,
248+
GI.Gst.Structs.PluginDesc,
249+
GI.Gst.Structs.Poll,
250+
GI.Gst.Structs.PollFD,
251+
GI.Gst.Structs.Promise,
252+
GI.Gst.Structs.ProtectionMeta,
253+
GI.Gst.Structs.Query,
254+
GI.Gst.Structs.ReferenceTimestampMeta,
255+
GI.Gst.Structs.Sample,
256+
GI.Gst.Structs.Segment,
257+
GI.Gst.Structs.StaticCaps,
258+
GI.Gst.Structs.StaticPadTemplate,
259+
GI.Gst.Structs.Structure,
260+
GI.Gst.Structs.TagList,
261+
GI.Gst.Structs.TimedValue,
262+
GI.Gst.Structs.Toc,
263+
GI.Gst.Structs.TocEntry,
264+
GI.Gst.Structs.TypeFind,
265+
GI.Gst.Structs.Uri,
266+
GI.Gst.Structs.ValueTable
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{ mkDerivation, base, bytestring, Cabal, containers, gi-glib
2+
, gi-gobject, gstreamer, haskell-gi, haskell-gi-base
3+
, haskell-gi-overloading, lib, text, transformers
4+
}:
5+
mkDerivation {
6+
pname = "gi-gst";
7+
version = "1.0.30";
8+
sha256 = "deadbeef";
9+
setupHaskellDepends = [ base Cabal gi-glib gi-gobject haskell-gi ];
10+
libraryHaskellDepends = [
11+
base bytestring containers gi-glib gi-gobject haskell-gi
12+
haskell-gi-base haskell-gi-overloading text transformers
13+
];
14+
libraryPkgconfigDepends = [ gstreamer ];
15+
homepage = "https://github.com/haskell-gi/haskell-gi";
16+
description = "GStreamer bindings";
17+
license = lib.licenses.lgpl21Only;
18+
}

0 commit comments

Comments
 (0)