summary refs log tree commit diff
path: root/pkgs/misc/gnash/default.nix
blob: cfc0c3f7301ac1c8994589801908220120c7b1a9 (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
{ stdenv, fetchgit, fetchpatch, autoreconfHook
, pkgconfig, libtool, boost, SDL
, glib, pango, gettext, curl, xorg
, libpng, libjpeg, giflib, speex, atk

# renderers
, enableAGG    ? true,  agg   ? null
, enableCairo  ? false, cairo ? null
, enableOpenGL ? false
, libGLU ? null
, libGL  ? null

# GUI toolkits
, enableGTK ? true,  gtk2 ? null, gnome2 ? null
, enableSDL ? false
, enableQt  ? false, qt4  ? null

# media
, enableFFmpeg   ? true, ffmpeg_2 ? null

# misc
, enableJemalloc ? true, jemalloc ? null
, enableHwAccel  ? true
, enablePlugins  ? false, xulrunner ? null, npapi_sdk ? null
}:

with stdenv.lib;

let
  available = x: x != null;

  sound =
    if enableFFmpeg then "ffmpeg" else "none";

  renderers = []
    ++ optional enableAGG    "agg"
    ++ optional enableCairo  "cairo"
    ++ optional enableOpenGL "opengl";

  toolkits = []
    ++ optional enableGTK "gtk"
    ++ optional enableSDL "sdl"
    ++ optional enableQt  "qt4";

in

# renderers
assert enableAGG    -> available agg;
assert enableCairo  -> available cairo;
assert enableOpenGL -> all available [ libGLU libGL ];

# GUI toolkits
assert enableGTK -> all available [ gtk2 gnome2.gtkglext gnome2.GConf ];
assert enableSDL -> available SDL;
assert enableQt  -> available qt4;

# media libraries
assert enableFFmpeg    -> available ffmpeg_2 ;

# misc
assert enableJemalloc -> available jemalloc;
assert enableHwAccel  -> all available [ libGLU libGL ];
assert enablePlugins  -> all available [ xulrunner npapi_sdk ];

assert length toolkits  == 0 -> throw "at least one GUI toolkit must be enabled";
assert length renderers == 0 -> throw "at least one renderer must be enabled";


stdenv.mkDerivation {
  pname = "gnash";
  version = "0.8.11-2019-30-01";

  src = fetchgit {
    url = "git://git.sv.gnu.org/gnash.git";
    rev = "583ccbc1275c7701dc4843ec12142ff86bb305b4";
    sha256 = "0fh0bljn0i6ypyh6l99afi855p7ki7lm869nq1qj6k8hrrwhmfry";
  };

  postPatch = ''
    sed -i 's|jemalloc.h|jemalloc/jemalloc.h|' libbase/jemalloc_gnash.c
  '';

  nativeBuildInputs = [ autoreconfHook pkgconfig libtool ];
  buildInputs = [
    glib gettext boost curl SDL speex
    xorg.libXmu xorg.libSM xorg.libXt
    libpng libjpeg giflib pango atk
  ] ++ optional  enableAGG       agg
    ++ optional  enableCairo     cairo
    ++ optional  enableQt        qt4
    ++ optional  enableFFmpeg    ffmpeg_2
    ++ optional  enableJemalloc  jemalloc
    ++ optional  enableHwAccel   [ libGL libGLU ]
    ++ optionals enableOpenGL    [ libGL libGLU ]
    ++ optionals enablePlugins   [ xulrunner npapi_sdk ]
    ++ optionals enableGTK       [ gtk2 gnome2.gtkglext gnome2.GConf ];

  patches = [
    (fetchpatch { # fix compilation due to bad detection of libgif version: https://savannah.gnu.org/patch/index.php?9873
      url = "https://savannah.gnu.org/patch/download.php?file_id=47859";
      sha256 = "0aimayzgi5065gkcfcr8d5lkd9c0471q7dqmln42hjzq847n6d5y";
    })
  ];

  configureFlags = with stdenv.lib; [
    "--with-boost-incl=${boost.dev}/include"
    "--with-boost-lib=${boost.out}/lib"
    "--enable-renderer=${concatStringsSep "," renderers}"
    "--enable-gui=${concatStringsSep "," toolkits}"
    "--enable-media=${sound}"
    "--with-npapi-install=prefix"
    (enableFeature enablePlugins  "plugins")
    (enableFeature enableJemalloc "jemalloc")
    (optionalString enableHwAccel "--enable-device=egl")
  ];

  meta = {
    homepage    = https://savannah.gnu.org/projects/gnash;
    description = "A flash (SWF) player and browser plugin";
    license     = licenses.gpl3;
    maintainers = with maintainers; [ rnhmjoj ];
  };
}