about summary refs log tree commit diff
path: root/pkgs/applications/misc/playonlinux/default.nix
blob: 0b4f445c00669c6bf3b89326547a13e6967396b5 (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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
{ lib, stdenv
, makeWrapper
, fetchurl
, cabextract
, gettext
, glxinfo
, gnupg
, icoutils
, imagemagick
, netcat-gnu
, p7zip
, python3
, unzip
, wget
, wine
, xdg-user-dirs
, xterm
, pkgs
, pkgsi686Linux
, which
, curl
, jq
, xorg
, libGL
, steam-run
# needed for avoiding crash on file selector
, gsettings-desktop-schemas
, glib
, wrapGAppsHook
, hicolor-icon-theme
}:

let
  version = "4.4";

  binpath = lib.makeBinPath [
    cabextract
    python
    gettext
    glxinfo
    gnupg
    icoutils
    imagemagick
    netcat-gnu
    p7zip
    unzip
    wget
    wine
    xdg-user-dirs
    xterm
    which
    curl
    jq
  ];

  ld32 =
    if stdenv.hostPlatform.system == "x86_64-linux" then "${stdenv.cc}/nix-support/dynamic-linker-m32"
    else if stdenv.hostPlatform.system == "i686-linux" then "${stdenv.cc}/nix-support/dynamic-linker"
    else throw "Unsupported platform for PlayOnLinux: ${stdenv.hostPlatform.system}";
  ld64 = "${stdenv.cc}/nix-support/dynamic-linker";
  libs = pkgs: lib.makeLibraryPath [ xorg.libX11 libGL ];

  python = python3.withPackages(ps: with ps; [
    wxpython
    setuptools
    natsort
  ]);

in stdenv.mkDerivation {
  pname = "playonlinux";
  inherit version;

  src = fetchurl {
    url = "https://www.playonlinux.com/script_files/PlayOnLinux/${version}/PlayOnLinux_${version}.tar.gz";
    sha256 = "0n40927c8cnjackfns68zwl7h4d7dvhf7cyqdkazzwwx4k2xxvma";
  };

  patches = [
    ./0001-fix-locale.patch
  ];

  nativeBuildInputs = [ makeWrapper wrapGAppsHook ];

  preBuild = ''
    makeFlagsArray+=(PYTHON="python -m py_compile")
  '';

  buildInputs = [
    glib
    xorg.libX11
    libGL
    python
    gsettings-desktop-schemas
    hicolor-icon-theme
  ];

  postPatch = ''
    substituteAllInPlace python/lib/lng.py
    patchShebangs python tests/python
    sed -i "s/ %F//g" etc/PlayOnLinux.desktop
  '';

  installPhase = ''
    install -d $out/share/playonlinux
    cp -r . $out/share/playonlinux/

    install -D -m644 etc/PlayOnLinux.desktop $out/share/applications/playonlinux.desktop

    makeWrapper $out/share/playonlinux/playonlinux{,-wrapper} \
      --prefix PATH : ${binpath} \
      --prefix XDG_DATA_DIRS : ${gsettings-desktop-schemas}/share/GConf
    # steam-run is needed to run the downloaded wine executables
    mkdir -p $out/bin
    cat > $out/bin/playonlinux <<EOF
    #!${stdenv.shell} -e
    exec ${steam-run}/bin/steam-run $out/share/playonlinux/playonlinux-wrapper "\$@"
    EOF
    chmod a+x $out/bin/playonlinux

    bunzip2 $out/share/playonlinux/bin/check_dd_x86.bz2
    patchelf --set-interpreter $(cat ${ld32}) --set-rpath ${libs pkgsi686Linux} $out/share/playonlinux/bin/check_dd_x86
    ${if stdenv.hostPlatform.system == "x86_64-linux" then ''
      bunzip2 $out/share/playonlinux/bin/check_dd_amd64.bz2
      patchelf --set-interpreter $(cat ${ld64}) --set-rpath ${libs pkgs} $out/share/playonlinux/bin/check_dd_amd64
    '' else ''
      rm $out/share/playonlinux/bin/check_dd_amd64.bz2
    ''}
    for f in $out/share/playonlinux/bin/*; do
      bzip2 $f
    done
  '';

  dontWrapGApps = true;
  postFixup = ''
    makeWrapper $out/share/playonlinux/playonlinux{,-wrapped} \
      --prefix PATH : ${binpath} \
      ''${gappsWrapperArgs[@]}
    makeWrapper ${steam-run}/bin/steam-run $out/bin/playonlinux \
      --add-flags $out/share/playonlinux/playonlinux-wrapped
  '';

  meta = with lib; {
    description = "GUI for managing Windows programs under linux";
    homepage = "https://www.playonlinux.com/";
    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
    license = licenses.gpl3;
    maintainers = [ maintainers.pasqui23 ];
    platforms = [ "x86_64-linux" "i686-linux" ];
    mainProgram = "playonlinux";
  };
}