1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
{ lib, stdenv, fetchzip, fetchpatch, atk, cairo, ldc, gdk-pixbuf, gnome3, gst_all_1, librsvg
, glib, gtk3, gtksourceview4, libgda, libpeas, pango, pkg-config, which, vte }:
let
inherit (gst_all_1) gstreamer gst-plugins-base gst-plugins-bad;
in stdenv.mkDerivation rec {
pname = "gtkd";
version = "3.9.0";
outputs = [ "out" "dev" ];
src = fetchzip {
url = "https://gtkd.org/Downloads/sources/GtkD-${version}.zip";
sha256 = "12kc4s5gp6gn456d8pzhww1ggi9qbxldmcpp6855297g2x8xxy5p";
stripRoot = false;
};
nativeBuildInputs = [ ldc pkg-config which ];
propagatedBuildInputs = [
atk cairo gdk-pixbuf glib gstreamer gst-plugins-base gtk3 gtksourceview4
libgda libpeas librsvg pango vte
];
patches = [
# Fix makefile not installing .pc's
(fetchpatch {
url = "https://github.com/gtkd-developers/GtkD/commit/a9db09117ab27127ca4c3b8d2f308fae483a9199.patch";
sha256 = "0ngyqifw1kandc1vk01kms3z65pcisfd75q7z09rml96glhfzjd6";
})
];
prePatch = ''
substituteAll ${./paths.d} generated/gtkd/gtkd/paths.d
substituteInPlace generated/gstreamer/gst/app/c/functions.d \
--replace libgstapp-1.0.so.0 ${gst-plugins-base}/lib/libgstapp-1.0.so.0 \
--replace libgstapp-1.0.0.dylib ${gst-plugins-base}/lib/libgstapp-1.0.0.dylib
substituteInPlace generated/gstreamer/gst/base/c/functions.d \
--replace libgstbase-1.0.so.0 ${gstreamer.out}/lib/libgstbase-1.0.so.0 \
--replace libgstbase-1.0.0.dylib ${gstreamer.out}/lib/libgstbase-1.0.0.dylib
substituteInPlace generated/gstreamer/gst/mpegts/c/functions.d \
--replace libgstmpegts-1.0.so.0 ${gst-plugins-bad.out}/lib/libgstmpegts-1.0.so.0 \
--replace libgstmpegts-1.0.0.dylib ${gst-plugins-bad.out}/lib/libgstmpegts-1.0.0.dylib
substituteInPlace generated/gstreamer/gstinterfaces/c/functions.d \
--replace libgstvideo-1.0.so.0 ${gst-plugins-base}/lib/libgstvideo-1.0.so.0 \
--replace libgstvideo-1.0.0.dylib ${gst-plugins-base}/lib/libgstvideo-1.0.0.dylib
substituteInPlace generated/gstreamer/gstreamer/c/functions.d \
--replace libgstreamer-1.0.so.0 ${gstreamer}/lib/libgstreamer-1.0.so.0 \
--replace libgstreamer-1.0.0.dylib ${gstreamer}/lib/libgstreamer-1.0.0.dylib
substituteInPlace generated/gtkd/atk/c/functions.d \
--replace libatk-1.0.so.0 ${atk}/lib/libatk-1.0.so.0 \
--replace libatk-1.0.0.dylib ${atk}/lib/libatk-1.0.0.dylib
substituteInPlace generated/gtkd/cairo/c/functions.d \
--replace libcairo.so.2 ${cairo}/lib/libcairo.so.2 \
--replace libcairo.dylib ${cairo}/lib/libcairo.dylib
substituteInPlace generated/gtkd/gdk/c/functions.d \
--replace libgdk-3.so.0 ${gtk3}/lib/libgdk-3.so.0 \
--replace libgdk-3.0.dylib ${gtk3}/lib/libgdk-3.0.dylib
substituteInPlace generated/gtkd/gdkpixbuf/c/functions.d \
--replace libgdk_pixbuf-2.0.so.0 ${gdk-pixbuf}/lib/libgdk_pixbuf-2.0.so.0 \
--replace libgdk_pixbuf-2.0.0.dylib ${gdk-pixbuf}/lib/libgdk_pixbuf-2.0.0.dylib
substituteInPlace generated/gtkd/gio/c/functions.d \
--replace libgio-2.0.so.0 ${glib.out}/lib/libgio-2.0.so.0 \
--replace libgio-2.0.0.dylib ${glib.out}/lib/libgio-2.0.0.dylib
substituteInPlace generated/gtkd/glib/c/functions.d \
--replace libglib-2.0.so.0 ${glib.out}/lib/libglib-2.0.so.0 \
--replace libgmodule-2.0.so.0 ${glib.out}/lib/libgmodule-2.0.so.0 \
--replace libgobject-2.0.so.0 ${glib.out}/lib/libgobject-2.0.so.0 \
--replace libglib-2.0.0.dylib ${glib.out}/lib/libglib-2.0.0.dylib \
--replace libgmodule-2.0.0.dylib ${glib.out}/lib/libgmodule-2.0.0.dylib \
--replace libgobject-2.0.0.dylib ${glib.out}/lib/libgobject-2.0.0.dylib
substituteInPlace generated/gtkd/gobject/c/functions.d \
--replace libgobject-2.0.so.0 ${glib.out}/lib/libgobject-2.0.so.0 \
--replace libgobject-2.0.0.dylib ${glib.out}/lib/libgobject-2.0.0.dylib
substituteInPlace generated/gtkd/gtk/c/functions.d \
--replace libgdk-3.so.0 ${gtk3}/lib/libgdk-3.so.0 \
--replace libgtk-3.so.0 ${gtk3}/lib/libgtk-3.so.0 \
--replace libgdk-3.0.dylib ${gtk3}/lib/libgdk-3.0.dylib \
--replace libgtk-3.0.dylib ${gtk3}/lib/libgtk-3.0.dylib
substituteInPlace generated/gtkd/pango/c/functions.d \
--replace libpango-1.0.so.0 ${pango.out}/lib/libpango-1.0.so.0 \
--replace libpangocairo-1.0.so.0 ${pango.out}/lib/libpangocairo-1.0.so.0 \
--replace libpango-1.0.0.dylib ${pango.out}/lib/libpango-1.0.0.dylib \
--replace libpangocairo-1.0.0.dylib ${pango.out}/lib/libpangocairo-1.0.0.dylib
substituteInPlace generated/gtkd/rsvg/c/functions.d \
--replace librsvg-2.so.2 ${librsvg}/lib/librsvg-2.so.2 \
--replace librsvg-2.2.dylib ${librsvg}/lib/librsvg-2.2.dylib
substituteInPlace generated/peas/peas/c/functions.d \
--replace libpeas-1.0.so.0 ${libpeas}/lib/libpeas-1.0.so.0 \
--replace libpeas-gtk-1.0.so.0 ${libpeas}/lib/libpeas-gtk-1.0.so.0 \
--replace libpeas-1.0.0.dylib ${libpeas}/lib/libpeas-1.0.0.dylib \
--replace gtk-1.0.0.dylib ${libpeas}/lib/gtk-1.0.0.dylib
substituteInPlace generated/sourceview/gsv/c/functions.d \
--replace libgtksourceview-4.so.0 ${gtksourceview4}/lib/libgtksourceview-4.so.0 \
--replace libgtksourceview-4.0.dylib ${gtksourceview4}/lib/libgtksourceview-4.0.dylib
substituteInPlace generated/vte/vte/c/functions.d \
--replace libvte-2.91.so.0 ${vte}/lib/libvte-2.91.so.0 \
--replace libvte-2.91.0.dylib ${vte}/lib/libvte-2.91.0.dylib
'';
makeFlags = [
"prefix=${placeholder "out"}"
"PKG_CONFIG=${pkg-config}/bin/${pkg-config.targetPrefix}pkg-config"
];
# The .pc files does not declare an `includedir=`, so the multiple
# outputs setup hook misses this.
postFixup = ''
for pc in $dev/lib/pkgconfig/*; do
substituteInPlace $pc \
--replace "$out/include" "$dev/include"
done
'';
meta = with lib; {
description = "D binding and OO wrapper for GTK";
homepage = "https://gtkd.org";
license = licenses.lgpl3Plus;
platforms = platforms.linux ++ platforms.darwin;
};
}
|