diff options
author | Sandro <sandro.jaeckel@gmail.com> | 2022-09-25 23:41:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-25 23:41:05 +0200 |
commit | 7c9cb921e6f6f36bd2d06930b02d3a25b647fad1 (patch) | |
tree | fd8510dd1983e6c3bd17a320e8f30d60e2a54b7e /pkgs/applications/emulators/dolphin-emu | |
parent | b39c59506df71399895c027d150f29b76e0b0f4a (diff) | |
parent | e8743bf62d00b05c3cc8d177895d0762e9bad0aa (diff) |
Merge pull request #190373 from IvarWithoutBones/fix-darwin-dolphin
Diffstat (limited to 'pkgs/applications/emulators/dolphin-emu')
-rw-r--r-- | pkgs/applications/emulators/dolphin-emu/master.nix | 165 | ||||
-rw-r--r-- | pkgs/applications/emulators/dolphin-emu/minizip-external-missing-include.patch | 18 |
2 files changed, 149 insertions, 34 deletions
diff --git a/pkgs/applications/emulators/dolphin-emu/master.nix b/pkgs/applications/emulators/dolphin-emu/master.nix index a5c6c4aa3aa9..35a00503ed50 100644 --- a/pkgs/applications/emulators/dolphin-emu/master.nix +++ b/pkgs/applications/emulators/dolphin-emu/master.nix @@ -1,12 +1,52 @@ -{ lib, stdenv, fetchFromGitHub, pkg-config, cmake -, wrapQtAppsHook, qtbase, bluez, ffmpeg, libao, libGLU, libGL, pcre, gettext -, libXrandr, libusb1, libpthreadstubs, libXext, libXxf86vm, libXinerama -, libSM, libXdmcp, readline, openal, udev, libevdev, portaudio, curl, alsa-lib -, miniupnpc, enet, mbedtls, soundtouch, sfml, xz, writeScript -, vulkan-loader ? null, libpulseaudio ? null +{ lib +, stdenv +, fetchFromGitHub +, pkg-config +, cmake +, wrapQtAppsHook +, qtbase +, bluez +, ffmpeg +, libGL +, libXrandr +, libusb1 +, libXext +, openal +, udev +, libevdev +, curl +, alsa-lib +, miniupnpc +, enet +, mbedtls +, soundtouch +, sfml +, xz +, hidapi +, fmt_8 +, vulkan-loader +, libpulseaudio +, bzip2 +, libiconv +, pugixml +, xxHash -# - Inputs used for Darwin -, CoreBluetooth, ForceFeedback, IOKit, OpenGL, libpng, hidapi }: + # Used in passthru +, testers +, dolphin-emu-beta +, writeShellScript +, common-updater-scripts +, jq + + # Darwin-only dependencies +, CoreBluetooth +, ForceFeedback +, IOKit +, VideoToolbox +, OpenGL +, libpng +, moltenvk +}: stdenv.mkDerivation rec { pname = "dolphin-emu"; @@ -20,27 +60,70 @@ stdenv.mkDerivation rec { fetchSubmodules = true; }; - nativeBuildInputs = [ cmake pkg-config ] - ++ lib.optional stdenv.isLinux wrapQtAppsHook; + patches = [ + # On x86_64-darwin CMake reportedly does not work without this in some cases. + # See https://github.com/NixOS/nixpkgs/pull/190373#issuecomment-1241310765 + ./minizip-external-missing-include.patch + ]; + + nativeBuildInputs = [ + cmake + pkg-config + wrapQtAppsHook + ]; buildInputs = [ - curl ffmpeg libao libGLU libGL pcre gettext libpthreadstubs libpulseaudio - libXrandr libXext libXxf86vm libXinerama libSM readline openal libXdmcp - portaudio libusb1 libpng hidapi miniupnpc enet mbedtls soundtouch sfml xz + curl + ffmpeg + pugixml + xxHash + libGL + libpulseaudio + openal + libusb1 + libiconv + libpng + hidapi + miniupnpc + enet + mbedtls + soundtouch + sfml + xz qtbase + fmt_8 + bzip2 ] ++ lib.optionals stdenv.isLinux [ - bluez udev libevdev alsa-lib vulkan-loader + libXrandr + libXext + bluez + udev + libevdev + alsa-lib + vulkan-loader ] ++ lib.optionals stdenv.isDarwin [ - CoreBluetooth OpenGL ForceFeedback IOKit + CoreBluetooth + OpenGL + ForceFeedback + IOKit + VideoToolbox + moltenvk ]; cmakeFlags = [ + "-DDISTRIBUTOR=NixOS" "-DUSE_SHARED_ENET=ON" "-DDOLPHIN_WC_REVISION=${src.rev}" "-DDOLPHIN_WC_DESCRIBE=${version}" "-DDOLPHIN_WC_BRANCH=master" ] ++ lib.optionals stdenv.isDarwin [ "-DOSX_USE_DEFAULT_SEARCH_PATH=True" + "-DUSE_BUNDLED_MOLTENVK=OFF" + # Bundles the application folder into a standalone executable, so we cannot devendor libraries + "-DSKIP_POSTPROCESS_BUNDLE=ON" + # Needs xcode so compilation fails with it enabled. We would want the version to be fixed anyways. + # Note: The updater isn't available on linux, so we dont need to disable it there. + "-DENABLE_AUTOUPDATE=OFF" ]; qtWrapperArgs = lib.optionals stdenv.isLinux [ @@ -50,37 +133,51 @@ stdenv.mkDerivation rec { "--set QT_QPA_PLATFORM xcb" ]; - # - Allow Dolphin to use nix-provided libraries instead of building them - postPatch = '' - sed -i -e 's,DISTRIBUTOR "None",DISTRIBUTOR "NixOS",g' CMakeLists.txt - '' + lib.optionalString stdenv.isDarwin '' - sed -i -e 's,if(NOT APPLE),if(true),g' CMakeLists.txt - sed -i -e 's,if(LIBUSB_FOUND AND NOT APPLE),if(LIBUSB_FOUND),g' \ - CMakeLists.txt + # Use nix-provided libraries instead of submodules + postPatch = lib.optionalString stdenv.isDarwin '' + substituteInPlace CMakeLists.txt \ + --replace "if(NOT APPLE)" "if(true)" \ + --replace "if(LIBUSB_FOUND AND NOT APPLE)" "if(LIBUSB_FOUND)" ''; postInstall = lib.optionalString stdenv.hostPlatform.isLinux '' install -D $src/Data/51-usb-device.rules $out/etc/udev/rules.d/51-usb-device.rules + '' + lib.optionalString stdenv.hostPlatform.isDarwin '' + # Only gets installed automatically if the standalone executable is used + mkdir -p $out/Applications + cp -r ./Binaries/Dolphin.app $out/Applications + ln -s $out/Applications/Dolphin.app/Contents/MacOS/Dolphin $out/bin ''; + passthru = { + tests.version = testers.testVersion { + package = dolphin-emu-beta; + command = "dolphin-emu-nogui --version"; + }; - passthru.updateScript = writeScript "dolphin-update-script" '' - #!/usr/bin/env nix-shell - #!nix-shell -i bash -p curl jq common-updater-scripts - set -eou pipefail - json="$(curl -s https://dolphin-emu.org/update/latest/beta)" - version="$(jq -r '.shortrev' <<< "$json")" - rev="$(jq -r '.hash' <<< "$json")" - update-source-version dolphin-emu-beta "$version" --rev="$rev" - ''; + updateScript = writeShellScript "dolphin-update-script" '' + set -eou pipefail + export PATH=${lib.makeBinPath [ curl jq common-updater-scripts ]} + + json="$(curl -s https://dolphin-emu.org/update/latest/beta)" + version="$(jq -r '.shortrev' <<< "$json")" + rev="$(jq -r '.hash' <<< "$json")" + update-source-version dolphin-emu-beta "$version" --rev="$rev" + ''; + }; meta = with lib; { homepage = "https://dolphin-emu.org"; description = "Gamecube/Wii/Triforce emulator for x86_64 and ARMv8"; - license = licenses.gpl2Plus; - maintainers = with maintainers; [ MP2E ashkitten xfix ]; + mainProgram = "Dolphin"; branch = "master"; - broken = stdenv.isDarwin; + license = licenses.gpl2Plus; platforms = platforms.unix; + maintainers = with maintainers; [ + MP2E + ashkitten + xfix + ivar + ]; }; } diff --git a/pkgs/applications/emulators/dolphin-emu/minizip-external-missing-include.patch b/pkgs/applications/emulators/dolphin-emu/minizip-external-missing-include.patch new file mode 100644 index 000000000000..7da013ecd8f6 --- /dev/null +++ b/pkgs/applications/emulators/dolphin-emu/minizip-external-missing-include.patch @@ -0,0 +1,18 @@ +commit 5e0cb8066fb1653399c54e93e42375295c2562bd +Author: Ivar Scholten <ivar.scholten@protonmail.com> +Date: Fri Sep 9 14:27:55 2022 +0200 + + Externals/minizip: add missing include to CheckFunctionExists + +diff --git a/Externals/minizip/CMakeLists.txt b/Externals/minizip/CMakeLists.txt +index c3d7c5512e..f59f8b295c 100644 +--- a/Externals/minizip/CMakeLists.txt ++++ b/Externals/minizip/CMakeLists.txt +@@ -60,6 +60,7 @@ if (HAVE_INTTYPES_H) + target_compile_definitions(minizip PRIVATE HAVE_INTTYPES_H) + endif() + ++include(CheckFunctionExists) + check_function_exists(fseeko HAVE_FSEEKO) + if (NOT HAVE_FSEEKO) + target_compile_definitions(minizip PRIVATE NO_FSEEKO) |