about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/gtkd/default.nix
blob: 5cef820db149723929d9451ed1e37fa1592e6137 (plain) (blame)
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
{ stdenv, fetchzip, fetchpatch, atk, cairo, dmd, gdk-pixbuf, gnome3, gst_all_1, librsvg
, glib, gtk3, gtksourceview4, libgda, libpeas, pango, pkgconfig, 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 = [ dmd pkgconfig 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=${pkgconfig}/bin/${pkgconfig.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 stdenv.lib; {
    description = "D binding and OO wrapper for GTK";
    homepage = "https://gtkd.org";
    license = licenses.lgpl3Plus;
    platforms = platforms.linux ++ platforms.darwin;
  };
}