summary refs log tree commit diff
path: root/pkgs/misc/gnash/default.nix
blob: 56dfe2f19f87cec67fe54daa8e06f5d403d639b4 (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
{ 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";
    })

    # Fix build with modern Pango
    # https://savannah.gnu.org/bugs/index.php?57759
    (fetchpatch {
      url = "https://savannah.gnu.org/file/0001-Do-not-depend-on-pangox.patch?file_id=48366";
      sha256 = "02x7sl5zwd1ld2n4b6bp16c5gk91qsap0spfbb5iwpglq3galv2l";
    })
  ];

  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 ];
  };
}