summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/misc/emulators/retroarch/default.nix36
-rw-r--r--pkgs/misc/emulators/retroarch/wrapper.nix4
2 files changed, 38 insertions, 2 deletions
diff --git a/pkgs/misc/emulators/retroarch/default.nix b/pkgs/misc/emulators/retroarch/default.nix
index e898a5804b0..c834f6c9047 100644
--- a/pkgs/misc/emulators/retroarch/default.nix
+++ b/pkgs/misc/emulators/retroarch/default.nix
@@ -12,11 +12,20 @@
 , udev ? null
 , enableNvidiaCgToolkit ? false, nvidia_cg_toolkit ? null
 , withVulkan ? stdenv.isLinux, vulkan-loader ? null
+, targetPlatform, fetchurl
 }:
 
 with stdenv.lib;
 
-stdenv.mkDerivation rec {
+let
+
+  # ibtool is closed source so we have to download the blob
+  osx-MainMenu = fetchurl {
+    url = "https://github.com/matthewbauer/RetroArch/raw/b146a9ac6b2b516652a7bf05a9db5a804eab323d/pkg/apple/OSX/en.lproj/MainMenu.nib";
+    sha256 = "13k1l628wy0rp6wxrpwr4g1m9c997d0q8ks50f8zhmh40l5j2sp8";
+  };
+
+in stdenv.mkDerivation rec {
   name = "retroarch-bare-${version}";
   version = "1.7.1";
 
@@ -39,8 +48,31 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  postInstall = optional withVulkan ''
+  postInstall = optionalString withVulkan ''
     wrapProgram $out/bin/retroarch --prefix LD_LIBRARY_PATH ':' ${vulkan-loader}/lib
+  '' + optionalString targetPlatform.isDarwin ''
+    EXECUTABLE_NAME=RetroArch
+    PRODUCT_NAME=RetroArch
+    MACOSX_DEPLOYMENT_TARGET=10.5
+    app=$out/Applications/$PRODUCT_NAME.app
+
+    install -D pkg/apple/OSX/Info.plist $app/Contents/Info.plist
+    echo "APPL????" > $app/Contents/PkgInfo
+    mkdir -p $app/Contents/MacOS
+    ln -s $out/bin/retroarch $app/Contents/MacOS/$EXECUTABLE_NAME
+
+    # Hack to fill in Info.plist template w/o using xcode
+    sed -i -e 's,''${EXECUTABLE_NAME}'",$EXECUTABLE_NAME," \
+           -e 's,''${MACOSX_DEPLOYMENT_TARGET}'",$MACOSX_DEPLOYMENT_TARGET," \
+           -e 's,''${PRODUCT_NAME}'",$PRODUCT_NAME," \
+           -e 's,''${PRODUCT_NAME:rfc1034identifier}'",$PRODUCT_NAME," \
+           $app/Contents/Info.plist
+
+    install -D ${osx-MainMenu} \
+               $app/Contents/Resources/en.lproj/MainMenu.nib
+    install -D pkg/apple/OSX/en.lproj/InfoPlist.strings \
+               $app/Contents/Resources/en.lproj/InfoPlist.strings
+    install -D media/retroarch.icns $app/Contents/Resources/retroarch.icns
   '';
 
   preFixup = "rm $out/bin/retroarch-cg2glsl";
diff --git a/pkgs/misc/emulators/retroarch/wrapper.nix b/pkgs/misc/emulators/retroarch/wrapper.nix
index 58d41699854..71b26b4af6f 100644
--- a/pkgs/misc/emulators/retroarch/wrapper.nix
+++ b/pkgs/misc/emulators/retroarch/wrapper.nix
@@ -21,6 +21,10 @@ stdenv.mkDerivation {
 
     ln -s -t $out ${retroarch}/share
 
+    if [ -d ${retroarch}/Applications ]; then
+      ln -s -t $out ${retroarch}/Applications
+    fi
+
     makeWrapper ${retroarch}/bin/retroarch $out/bin/retroarch \
       --suffix-each LD_LIBRARY_PATH ':' "$cores" \
       --add-flags "-L $out/lib/ --menu" \