summary refs log tree commit diff
path: root/pkgs/applications/emulators/xemu/default.nix
blob: 482ea9e06fd5877e229a9fbff0a8e2e91a585838 (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
{ stdenv
, fetchFromGitHub
, lib
, makeDesktopItem
, copyDesktopItems
, pkg-config
, python3
, ninja
, meson
, which
, perl
, wrapGAppsHook
, glib
, gtk3
, libpcap
, openssl
, libepoxy
, libsamplerate
, SDL2
, SDL2_image
, mesa
, libdrm
, libGLU
, gettext
, vte
}:

stdenv.mkDerivation rec {
  pname = "xemu";
  version = "0.7.84";

  src = fetchFromGitHub {
    owner = "xemu-project";
    repo = "xemu";
    rev = "v${version}";
    fetchSubmodules = true;
    hash = "sha256-pEXjwoQKbMmVNYCnh5nqP7k0acYOAp8SqxYZwPzVwDY=";
  };

  nativeBuildInputs = [
    pkg-config
    python3
    python3.pkgs.pyyaml
    ninja
    which
    meson
    perl
    wrapGAppsHook
    copyDesktopItems
  ];

  buildInputs = [
    glib
    gtk3
    openssl
    mesa
    libepoxy
    libdrm
    libpcap
    libsamplerate
    SDL2
    libGLU
    SDL2_image
    gettext
    vte
  ];

  separateDebugInfo = true;

  dontUseMesonConfigure = true;

  setOutputFlags = false;

  configureFlags = [
    "--disable-strip"
    "--meson=meson"
    "--target-list=i386-softmmu"
    "--disable-werror"
  ];

  buildFlags = [ "qemu-system-i386" ];

  desktopItems = [(makeDesktopItem {
    name = "xemu";
    desktopName = "xemu";
    exec = "xemu";
    icon = "xemu";
  })] ;

  preConfigure = let
    branch = "master";
    commit = "d8fa50e524c22f85ecb2e43108fd6a5501744351";
  in ''
    patchShebangs .
    configureFlagsArray+=("--extra-cflags=-DXBOX=1 -Wno-error=redundant-decls")
    substituteInPlace ./scripts/xemu-version.sh \
      --replace 'date -u' "date -d @$SOURCE_DATE_EPOCH '+%Y-%m-%d %H:%M:%S'"
    # If the versions can't be obtained through git, the build process tries
    # to run `XEMU_COMMIT=$(cat XEMU_COMMIT)` (and similar)
    echo '${commit}' > XEMU_COMMIT
    echo '${branch}' > XEMU_BRANCH
    echo '${version}' > XEMU_VERSION
  '';

  preBuild = ''
    cd build
    substituteInPlace ./build.ninja --replace /usr/bin/env $(which env)
  '';

  installPhase = ''
    runHook preInstall

    mkdir -p $out/{bin,share}
    cp qemu-system-i386 $out/bin/xemu

    for RES in 16x16 24x24 32x32 48x48 128x128 256x256 512x512
    do
      mkdir -p $out/share/icons/hicolor/$RES/apps/
      cp ../ui/icons/xemu_$RES.png $out/share/icons/hicolor/$RES/apps/xemu.png
    done

    runHook postInstall
  '';

  meta = with lib; {
    homepage = "https://xemu.app/";
    description = "Original Xbox emulator";
    maintainers = with maintainers; [ ];
    license = licenses.gpl2Plus;
  };
}