1{ stdenv, fetchgit, autoreconfHook
2, pkgconfig, libtool, boost, SDL
3, glib, pango, gettext, curl, xorg
4, libpng, libjpeg, giflib, speex, atk
5
6# renderers
7, enableAGG ? true, agg ? null
8, enableCairo ? false, cairo ? null
9, enableOpenGL ? false, mesa ? null
10
11# GUI toolkits
12, enableGTK ? true, gtk2 ? null, gnome2 ? null, gnome3 ? null
13, enableSDL ? false
14, enableQt ? false, qt4 ? null
15
16# media
17, enableFFmpeg ? true, ffmpeg_2 ? null
18, enableGstreamer ? false, gst-plugins-base ? null
19 , gst-plugins-ugly ? null
20 , gst-ffmpeg ? null
21
22# misc
23, enableJemalloc ? true, jemalloc ? null
24, enableHwAccel ? true
25, enablePlugins ? false, xulrunner ? null, npapi_sdk ? null
26}:
27
28with stdenv.lib;
29
30let
31 available = x: x != null;
32
33 sound =
34 if enableFFmpeg then "ffmpeg" else
35 if enableGstreamer then "gst" else "none";
36
37 renderers = []
38 ++ optional enableAGG "agg"
39 ++ optional enableCairo "cairo"
40 ++ optional enableOpenGL "opengl";
41
42 toolkits = []
43 ++ optional enableGTK "gtk"
44 ++ optional enableSDL "sdl"
45 ++ optional enableQt "qt4";
46
47in
48
49# renderers
50assert enableAGG -> available agg;
51assert enableCairo -> available cairo;
52assert enableOpenGL -> available mesa;
53
54# GUI toolkits
55assert enableGTK -> all available [ gtk2 gnome2.gtkglext gnome3.gconf ];
56assert enableSDL -> available SDL;
57assert enableQt -> available qt4;
58
59# media libraries
60assert enableFFmpeg -> available ffmpeg_2 ;
61assert enableGstreamer -> all available [ gst-plugins-base gst-plugins-ugly gst-ffmpeg ];
62
63# misc
64assert enableJemalloc -> available jemalloc;
65assert enableHwAccel -> available mesa;
66assert enablePlugins -> all available [ xulrunner npapi_sdk ];
67
68assert length toolkits == 0 -> throw "at least one GUI toolkit must be enabled";
69assert length renderers == 0 -> throw "at least one renderer must be enabled";
70
71
72stdenv.mkDerivation rec {
73 name = "gnash-${version}";
74 version = "0.8.11-2017-03-08";
75
76 src = fetchgit {
77 url = "git://git.sv.gnu.org/gnash.git";
78 rev = "8a11e60585db4ed6bc4eafadfbd9b3123ced45d9";
79 sha256 = "1qas084gc4s9cb2jbwi2s1h4hk7m92xmrsb596sd14h0i44dai02";
80 };
81
82 postPatch = ''
83 sed -i 's|jemalloc.h|jemalloc/jemalloc.h|' libbase/jemalloc_gnash.c
84 '';
85
86 nativeBuildInputs = [ autoreconfHook pkgconfig libtool ];
87 buildInputs = [
88 glib gettext boost curl SDL speex
89 xorg.libXmu xorg.libSM xorg.libXt
90 libpng libjpeg giflib pango atk
91 ] ++ optional enableAGG agg
92 ++ optional enableCairo cairo
93 ++ optional enableOpenGL mesa
94 ++ optional enableQt qt4
95 ++ optional enableFFmpeg ffmpeg_2
96 ++ optional enableJemalloc jemalloc
97 ++ optional enableHwAccel mesa
98 ++ optionals enablePlugins [ xulrunner npapi_sdk ]
99 ++ optionals enableGTK [ gtk2 gnome2.gtkglext gnome3.gconf ]
100 ++ optionals enableGstreamer [ gst-plugins-base gst-plugins-ugly gst-ffmpeg ];
101
102 configureFlags = with stdenv.lib; [
103 "--with-boost-incl=${boost.dev}/include"
104 "--with-boost-lib=${boost.out}/lib"
105 "--enable-renderer=${concatStringsSep "," renderers}"
106 "--enable-gui=${concatStringsSep "," toolkits}"
107 "--enable-media=${sound}"
108 "--with-npapi-install=prefix"
109 (enableFeature enablePlugins "plugins")
110 (enableFeature enableJemalloc "jemalloc")
111 (optionalString enableHwAccel "--enable-device=egl")
112 ];
113
114 meta = {
115 homepage = https://savannah.gnu.org/projects/gnash;
116 description = "A flash (SWF) player and browser plugin";
117 license = licenses.gpl3;
118 maintainers = with maintainers; [ rnhmjoj ];
119 };
120}