1{ stdenv, lib, fetchurl, buildEnv, makeWrapper
2
3, xorg, alsa-lib, at-spi2-core, dbus, glib, gtk3, atk, pango, freetype
4, fontconfig , gdk-pixbuf, cairo, mesa, nss, nspr, expat, systemd
5, libcap, libdrm, libxkbcommon
6, libnotify
7, ffmpeg, libxcb, cups
8, sqlite, udev
9, libuuid
10, sdk ? false
11}:
12let
13 bits = if stdenv.hostPlatform.system == "x86_64-linux" then "x64"
14 else "ia32";
15
16 nwEnv = buildEnv {
17 name = "nwjs-env";
18 paths = [
19 xorg.libX11 xorg.libXrender glib gtk3 atk at-spi2-core pango cairo gdk-pixbuf
20 freetype fontconfig xorg.libXcomposite alsa-lib xorg.libXdamage
21 xorg.libXext xorg.libXfixes mesa nss nspr expat dbus
22 xorg.libXtst xorg.libXi xorg.libXcursor xorg.libXrandr
23 xorg.libXScrnSaver xorg.libxshmfence cups
24 libcap libdrm libnotify
25 libxkbcommon
26 # libnw-specific (not chromium dependencies)
27 ffmpeg libxcb
28 # chromium runtime deps (dlopen’d)
29 sqlite udev
30 libuuid
31 ];
32
33 extraOutputsToInstall = [ "lib" "out" ];
34 };
35
36in stdenv.mkDerivation rec {
37 pname = "nwjs";
38 version = "0.54.1";
39
40 src = if sdk then fetchurl {
41 url = "https://dl.nwjs.io/v${version}/nwjs-sdk-v${version}-linux-${bits}.tar.gz";
42 sha256 = if bits == "x64" then
43 "sha256-1qeU4+EIki0M7yJPkRuzFwMdswfDOni5gltdmM6A/ds=" else
44 "sha256-wDEGePE9lrKa6OAzeiDLhVj992c0TJgiMHb8lJ4PF80=";
45 } else fetchurl {
46 url = "https://dl.nwjs.io/v${version}/nwjs-v${version}-linux-${bits}.tar.gz";
47 sha256 = if bits == "x64" then
48 "sha256-TACEM06K2t6dDXRD44lSW7GRi77yzSW4BZJw8gT+fl4=" else
49 "sha256-yX9knqFV5VQTT3TJDmQoDgt17NqH8fLt+bLQAqKleTU=";
50 };
51
52 # we have runtime deps like sqlite3 that should remain
53 dontPatchELF = true;
54
55 installPhase =
56 let ccPath = lib.makeLibraryPath [ stdenv.cc.cc ];
57 in ''
58 mkdir -p $out/share/nwjs
59 cp -R * $out/share/nwjs
60 find $out/share/nwjs
61
62 patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/share/nwjs/nw
63
64 ln -s ${lib.getLib systemd}/lib/libudev.so $out/share/nwjs/libudev.so.0
65
66 libpath="$out/share/nwjs/lib/"
67 for f in "$libpath"/*.so; do
68 patchelf --set-rpath "${nwEnv}/lib:${ccPath}:$libpath" "$f"
69 done
70 patchelf --set-rpath "${nwEnv}/lib:${nwEnv}/lib64:${ccPath}:$libpath" $out/share/nwjs/nw
71 # check, whether all RPATHs are correct (all dependencies found)
72 checkfile=$(mktemp)
73 for f in "$libpath"/*.so "$out/share/nwjs/nw"; do
74 (echo "$f:";
75 ldd "$f" ) > "$checkfile"
76 done
77 if <"$checkfile" grep -e "not found"; then
78 cat "$checkfile"
79 exit 1
80 fi
81
82 mkdir -p $out/bin
83 ln -s $out/share/nwjs/nw $out/bin
84
85 mkdir $out/lib
86 ln -s $out/share/nwjs/lib/libnw.so $out/lib/libnw.so
87 '';
88
89 nativeBuildInputs = [ makeWrapper ];
90
91 meta = with lib; {
92 description = "An app runtime based on Chromium and node.js";
93 homepage = "https://nwjs.io/";
94 platforms = ["i686-linux" "x86_64-linux"];
95 maintainers = [ maintainers.offline ];
96 license = licenses.bsd3;
97 };
98}