aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/development/libraries/wxwidgets/3.1/default.nix
blob: 8b0e6811efff2752a618b2b3276889b2f8b90b11 (plain)
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
, fetchFromGitHub
, fetchurl
, pkgconfig
, libXinerama
, libSM
, libXxf86vm
, libXtst
, gtk2
, GConf ? null
, gtk3
, xorgproto
, gst_all_1
, setfile
, libGLSupported ? stdenv.lib.elem stdenv.hostPlatform.system stdenv.lib.platforms.mesaPlatforms
, withMesa ? libGLSupported
, libGLU ? null
, libGL ? null
, compat28 ? false
, compat30 ? true
, unicode ? true
, withGtk2 ? true
, withWebKit ? false
, webkitgtk ? null
, AGL ? null
, Carbon ? null
, Cocoa ? null
, Kernel ? null
, QTKit ? null
}:

with stdenv.lib;

assert withMesa -> libGLU != null && libGL != null;
assert withWebKit -> webkitgtk != null;

assert assertMsg (withGtk2 -> withWebKit == false) "wxGTK31: You cannot enable withWebKit when using withGtk2.";

stdenv.mkDerivation rec {
  version = "3.1.4";
  pname = "wxwidgets";

  src = fetchFromGitHub {
    owner = "wxWidgets";
    repo = "wxWidgets";
    rev = "v${version}";
    sha256 = "1fwzrk6w5k0vs8kqdq5lpzdbp5c09hx740wg6mi6vgmc1r67dv67";
    fetchSubmodules = true;
  };

  buildInputs = [
    libXinerama
    libSM
    libXxf86vm
    libXtst
    xorgproto
    gst_all_1.gstreamer
    gst_all_1.gst-plugins-base
  ] ++ optionals withGtk2 [ gtk2 GConf ]
  ++ optional (!withGtk2) gtk3
  ++ optional withMesa libGLU
  ++ optional withWebKit webkitgtk
  ++ optionals stdenv.isDarwin [ setfile Carbon Cocoa Kernel QTKit ];

  nativeBuildInputs = [ pkgconfig ];

  propagatedBuildInputs = optional stdenv.isDarwin AGL;

  patches = [
    (fetchurl {
      # https://trac.wxwidgets.org/ticket/17942
      url = "https://trac.wxwidgets.org/raw-attachment/ticket/17942/"
        + "fix_assertion_using_hide_in_destroy.diff";
      sha256 = "009y3dav79wiig789vkkc07g1qdqprg1544lih79199kb1h64lvy";
    })
  ];

  configureFlags =
    [
      "--disable-precomp-headers"
      "--enable-mediactrl"
      (if compat28 then "--enable-compat28" else "--disable-compat28")
      (if compat30 then "--enable-compat30" else "--disable-compat30")
    ]
    ++ optional unicode "--enable-unicode"
    ++ optional withMesa "--with-opengl"
    ++ optionals stdenv.isDarwin
      # allow building on 64-bit
      [ "--with-cocoa" "--enable-universal-binaries" "--with-macosx-version-min=10.7" ]
    ++ optionals withWebKit
      [ "--enable-webview" "--enable-webviewwebkit" ];

  SEARCH_LIB = "${libGLU.out}/lib ${libGL.out}/lib ";

  preConfigure = "
    substituteInPlace configure --replace 'SEARCH_INCLUDE=' 'DUMMY_SEARCH_INCLUDE='
    substituteInPlace configure --replace 'SEARCH_LIB=' 'DUMMY_SEARCH_LIB='
    substituteInPlace configure --replace /usr /no-such-path
  " + optionalString stdenv.isDarwin ''
    substituteInPlace configure --replace \
      'ac_cv_prog_SETFILE="/Developer/Tools/SetFile"' \
      'ac_cv_prog_SETFILE="${setfile}/bin/SetFile"'
    substituteInPlace configure --replace \
      "-framework System" \
      -lSystem
  '';

  postInstall = "
    (cd $out/include && ln -s wx-*/* .)
  ";

  passthru = {
    inherit compat28 compat30 unicode;
    gtk = if withGtk2 then gtk2 else gtk3;
  };

  enableParallelBuilding = true;

  meta = {
    platforms = with platforms; darwin ++ linux;
    license = licenses.wxWindows;
    homepage = "https://www.wxwidgets.org/";
    description = "A C++ library that lets developers create applications for Windows, macOS, Linux and other platforms with a single code base";
    longDescription = ''
      WxWidgets gives you a single, easy-to-use API for
      writing GUI applications on multiple platforms that still utilize the
      native platform's controls and utilities. Link with the appropriate library
      for your platform and compiler, and your application will adopt the look
      and feel appropriate to that platform. On top of great GUI functionality,
      wxWidgets gives you: online help, network programming, streams, clipboard
      and drag and drop, multithreading, image loading and saving in a variety of
      popular formats, database support, HTML viewing and printing, and much
      more.
    '';
    badPlatforms = [ "x86_64-darwin" ];
    maintainers = with maintainers; [ tfmoraes ];
  };
}