jql: 8.0.0 -> 8.0.2 (#362884)
[NixPkgs.git] / pkgs / applications / emulators / mame / default.nix
blobd4fe0df3679129a2af140b1b301bf7610470c33b
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   alsa-lib,
6   SDL2,
7   SDL2_ttf,
8   copyDesktopItems,
9   expat,
10   flac,
11   fontconfig,
12   glm,
13   installShellFiles,
14   libXi,
15   libXinerama,
16   libjpeg,
17   libpcap,
18   libpulseaudio,
19   makeDesktopItem,
20   makeWrapper,
21   papirus-icon-theme,
22   pkg-config,
23   portaudio,
24   portmidi,
25   pugixml,
26   python3,
27   qtbase,
28   rapidjson,
29   sqlite,
30   utf8proc,
31   which,
32   writeScript,
33   zlib,
34   darwin,
37 let
38   inherit (darwin.apple_sdk.frameworks) CoreAudioKit ForceFeedback;
40 stdenv.mkDerivation rec {
41   pname = "mame";
42   version = "0.272";
43   srcVersion = builtins.replaceStrings [ "." ] [ "" ] version;
45   src = fetchFromGitHub {
46     owner = "mamedev";
47     repo = "mame";
48     rev = "mame${srcVersion}";
49     hash = "sha256-qD9xWP4KtPJWqje9QVb5wozgLTc+hE84kkEFM6Re+Sk=";
50   };
52   outputs = [
53     "out"
54     "tools"
55   ];
57   makeFlags = [
58     "CC=${stdenv.cc.targetPrefix}cc"
59     "CXX=${stdenv.cc.targetPrefix}c++"
60     "TOOLS=1"
61     "USE_LIBSDL=1"
62     # "USE_SYSTEM_LIB_ASIO=1"
63     "USE_SYSTEM_LIB_EXPAT=1"
64     "USE_SYSTEM_LIB_FLAC=1"
65     "USE_SYSTEM_LIB_GLM=1"
66     "USE_SYSTEM_LIB_JPEG=1"
67     # https://www.mamedev.org/?p=523
68     # "USE_SYSTEM_LIB_LUA=1"
69     "USE_SYSTEM_LIB_PORTAUDIO=1"
70     "USE_SYSTEM_LIB_PORTMIDI=1"
71     "USE_SYSTEM_LIB_PUGIXML=1"
72     "USE_SYSTEM_LIB_RAPIDJSON=1"
73     "USE_SYSTEM_LIB_UTF8PROC=1"
74     "USE_SYSTEM_LIB_SQLITE3=1"
75     "USE_SYSTEM_LIB_ZLIB=1"
76   ];
78   dontWrapQtApps = true;
80   # https://docs.mamedev.org/initialsetup/compilingmame.html
81   buildInputs =
82     [
83       expat
84       zlib
85       flac
86       portmidi
87       portaudio
88       utf8proc
89       libjpeg
90       rapidjson
91       pugixml
92       glm
93       SDL2
94       SDL2_ttf
95       sqlite
96       qtbase
97     ]
98     ++ lib.optionals stdenv.hostPlatform.isLinux [
99       alsa-lib
100       libpulseaudio
101       libXinerama
102       libXi
103       fontconfig
104     ]
105     ++ lib.optionals stdenv.hostPlatform.isDarwin [
106       libpcap
107       CoreAudioKit
108       ForceFeedback
109     ];
111   nativeBuildInputs = [
112     copyDesktopItems
113     installShellFiles
114     makeWrapper
115     pkg-config
116     python3
117     which
118   ];
120   patches = [
121     # by default MAME assumes that paths with stock resources are relative and
122     # that you run MAME changing to install directory, so we add absolute paths
123     # here
124     ./001-use-absolute-paths.diff
125   ];
127   # Since the bug described in https://github.com/NixOS/nixpkgs/issues/135438,
128   # it is not possible to use substituteAll
129   postPatch = ''
130     substituteInPlace src/emu/emuopts.cpp \
131       --subst-var-by mamePath "$out/opt/mame"
132   '';
134   desktopItems = [
135     (makeDesktopItem {
136       name = "MAME";
137       desktopName = "MAME";
138       exec = "mame";
139       icon = "mame";
140       type = "Application";
141       genericName = "MAME is a multi-purpose emulation framework";
142       comment = "Play vintage games using the MAME emulator";
143       categories = [
144         "Game"
145         "Emulator"
146       ];
147       keywords = [
148         "Game"
149         "Emulator"
150         "Arcade"
151       ];
152     })
153   ];
155   # TODO: copy shaders from src/osd/modules/opengl/shader/glsl*.*h
156   # to the final package after we figure out how they work
157   installPhase =
158     let
159       icon = "${papirus-icon-theme}/share/icons/Papirus/32x32/apps/mame.svg";
160     in
161     ''
162       runHook preInstall
164       # mame
165       mkdir -p $out/opt/mame
167       install -Dm755 mame -t $out/bin
168       install -Dm644 ${icon} $out/share/icons/hicolor/scalable/apps/mame.svg
169       installManPage docs/man/*.1 docs/man/*.6
170       cp -ar {artwork,bgfx,plugins,language,ctrlr,keymaps,hash} $out/opt/mame
172       # mame-tools
173       for _tool in castool chdman floptool imgtool jedutil ldresample ldverify \
174                    nltool nlwav pngcmp regrep romcmp split srcclean testkeys \
175                    unidasm; do
176          install -Dm755 $_tool -t $tools/bin
177       done
178       mv $tools/bin/{,mame-}split
180       runHook postInstall
181     '';
183   # man1 is the tools documentation, man6 is the emulator documentation
184   # Need to be done in postFixup otherwise multi-output hook will move it back to $out
185   postFixup = ''
186     moveToOutput share/man/man1 $tools
187   '';
189   enableParallelBuilding = true;
191   passthru.updateScript = writeScript "mame-update-script" ''
192     #!/usr/bin/env nix-shell
193     #!nix-shell -i bash -p curl common-updater-scripts jq
195     set -eu -o pipefail
197     latest_version=$(curl -s https://api.github.com/repos/mamedev/mame/releases/latest | jq --raw-output .tag_name)
198     update-source-version mame "''${latest_version/mame0/0.}"
199   '';
201   meta = with lib; {
202     homepage = "https://www.mamedev.org/";
203     description = "Multi-purpose emulation framework";
204     longDescription = ''
205       MAME's purpose is to preserve decades of software history. As electronic
206       technology continues to rush forward, MAME prevents this important
207       "vintage" software from being lost and forgotten. This is achieved by
208       documenting the hardware and how it functions. The source code to MAME
209       serves as this documentation. The fact that the software is usable serves
210       primarily to validate the accuracy of the documentation (how else can you
211       prove that you have recreated the hardware faithfully?). Over time, MAME
212       (originally stood for Multiple Arcade Machine Emulator) absorbed the
213       sister-project MESS (Multi Emulator Super System), so MAME now documents a
214       wide variety of (mostly vintage) computers, video game consoles and
215       calculators, in addition to the arcade video games that were its initial
216       focus.
217     '';
218     changelog = "https://github.com/mamedev/mame/releases/download/mame${srcVersion}/whatsnew_${srcVersion}.txt";
219     license = with licenses; [
220       bsd3
221       gpl2Plus
222     ];
223     maintainers = with maintainers; [ thiagokokada ];
224     platforms = platforms.unix;
225     broken = stdenv.hostPlatform.isDarwin;
226     mainProgram = "mame";
227   };