aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/office/jabref/default.nix
blob: 03da2170b3d35341543475d9f2804f4076fc9195 (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
{ stdenv, fetchurl, makeWrapper, makeDesktopItem, wrapGAppsHook, gtk3, gsettings-desktop-schemas
, zlib , libX11, libXext, libXi, libXrender, libXtst, libGL, alsaLib, libav, cairo, freetype, pango, gdk-pixbuf, glib }:

stdenv.mkDerivation rec {
  version = "5.1";
  pname = "jabref";

  src = fetchurl {
    url = "https://github.com/JabRef/jabref/releases/download/v${version}/JabRef-${version}-portable_linux.tar.gz";
    sha256 = "04f612byrq3agzy26byg1sgrjyhcpa8xfj0ssh8dl8d8vnhx9742";
  };

  preferLocalBuild = true;

  desktopItem = makeDesktopItem {
    comment =  meta.description;
    name = "jabref";
    desktopName = "JabRef";
    genericName = "Bibliography manager";
    categories = "Office;";
    icon = "jabref";
    exec = "jabref";
  };

  nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
  buildInputs = [ gsettings-desktop-schemas ] ++ systemLibs;

  systemLibs = [ gtk3 zlib libX11 libXext libXi libXrender libXtst libGL alsaLib libav cairo freetype pango gdk-pixbuf glib ];
  systemLibPaths = stdenv.lib.makeLibraryPath systemLibs;

  installPhase = ''
    mkdir -p $out/share/java $out/share/icons

    cp -r lib $out/lib

    for f in $out/lib/runtime/bin/j*; do
      patchelf \
        --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
        --set-rpath "${ stdenv.lib.makeLibraryPath [ zlib ]}:$out/lib/runtime/lib:$out/lib/runtime/lib/server" $f
    done

    for f in $out/lib/runtime/lib/*.so; do
      patchelf \
        --set-rpath "${systemLibPaths}:$out/lib/runtime/lib:$out/lib/runtime/lib/server" $f
    done

    # patching the libs in the JImage runtime image is quite impossible as there is no documented way
    # of rebuilding the image after it has been extracted
    # the image format itself is "intendedly not documented" - maybe one of the reasons the
    # devolpers constantly broke "jimage recreate" and dropped it in OpenJDK 9 Build 116 Early Access
    # so, for now just copy the image and provide our lib paths through the wrapper

    makeWrapper $out/lib/runtime/bin/java $out/bin/jabref \
      --add-flags '-Djava.library.path=${systemLibPaths}' --add-flags "-p $out/lib/app -m org.jabref/org.jabref.JabRefLauncher" \
      --run 'export LD_LIBRARY_PATH=${systemLibPaths}:$LD_LIBRARY_PATH'

    cp -r ${desktopItem}/share/applications $out/share/

    # we still need to unpack the runtime image to get the icon
    mkdir unpacked
    $out/lib/runtime/bin/jimage extract --dir=./unpacked lib/runtime/lib/modules
    cp unpacked/org.jabref/icons/jabref.svg $out/share/icons/jabref.svg
  '';

  meta = with stdenv.lib; {
    description = "Open source bibliography reference manager";
    homepage = "https://www.jabref.org";
    license = licenses.gpl2;
    platforms = platforms.unix;
    maintainers = [ maintainers.gebner ];
  };
}