about summary refs log tree commit diff
path: root/pkgs/applications/emulators/retroarch
diff options
context:
space:
mode:
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>2022-10-19 12:01:22 +0000
committerGitHub <noreply@github.com>2022-10-19 12:01:22 +0000
commitbbaff9a043d0bea6eef68b7e87ee71caafe50d5c (patch)
treeded704aba47a6169e5f5ac7531802f23004ea7eb /pkgs/applications/emulators/retroarch
parentcea1c3f0cddbd290d326e9dccb3fbb56d4d49578 (diff)
parent678b994771c7fadfb3d7d3d96ee63fdf6fc574d0 (diff)
Merge master into staging-next
Diffstat (limited to 'pkgs/applications/emulators/retroarch')
-rw-r--r--pkgs/applications/emulators/retroarch/cores.nix2
-rw-r--r--pkgs/applications/emulators/retroarch/default.nix93
-rw-r--r--pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patch25
-rw-r--r--pkgs/applications/emulators/retroarch/fix-config.patch26
-rw-r--r--pkgs/applications/emulators/retroarch/fix-libretro-paths.patch28
-rw-r--r--pkgs/applications/emulators/retroarch/hashes.json52
-rw-r--r--pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patch84
-rw-r--r--pkgs/applications/emulators/retroarch/use-fixed-paths.patch154
8 files changed, 237 insertions, 227 deletions
diff --git a/pkgs/applications/emulators/retroarch/cores.nix b/pkgs/applications/emulators/retroarch/cores.nix
index 1224aa74f29cc..65b117629306f 100644
--- a/pkgs/applications/emulators/retroarch/cores.nix
+++ b/pkgs/applications/emulators/retroarch/cores.nix
@@ -55,7 +55,7 @@ let
     , stdenvOverride ? stdenv
     , src ? (getCoreSrc core)
     , broken ? false
-    , version ? "unstable-2022-10-01"
+    , version ? "unstable-2022-10-18"
     , platforms ? retroarch.meta.platforms
       # The resulting core file is based on core name
       # Setting `normalizeCore` to `true` will convert `-` to `_` on the core filename
diff --git a/pkgs/applications/emulators/retroarch/default.nix b/pkgs/applications/emulators/retroarch/default.nix
index 1754ad5eccb6b..a8a20682afd43 100644
--- a/pkgs/applications/emulators/retroarch/default.nix
+++ b/pkgs/applications/emulators/retroarch/default.nix
@@ -4,6 +4,7 @@
 , enableNvidiaCgToolkit ? false
 , withGamemode ? stdenv.isLinux
 , withVulkan ? stdenv.isLinux
+, withWayland ? stdenv.isLinux
 , alsa-lib
 , AppKit
 , dbus
@@ -33,19 +34,20 @@
 , udev
 , vulkan-loader
 , wayland
-, which
 }:
 
 let
-  version = "1.11.0";
+  version = "1.12.0";
   libretroCoreInfo = fetchFromGitHub {
     owner = "libretro";
     repo = "libretro-core-info";
-    sha256 = "sha256-46T87BpzWUQHD7CsCF2sZo065Sl8Y4Sj1zwzBWmCiiU=";
-    rev = "v${version}";
+    sha256 = "sha256-9Sfp/JkMJIe34YGNRxf93fONOBuQxR2pduoJU+xtuF0=";
+    # Upstream didn't tag a new libretro-core-info in 1.12.0 release
+    rev = "v1.11.1";
   };
-  runtimeLibs = lib.optional withVulkan vulkan-loader
-    ++ lib.optional withGamemode gamemode.lib;
+  runtimeLibs =
+    lib.optional withVulkan vulkan-loader ++
+    lib.optional withGamemode (lib.getLib gamemode);
 in
 stdenv.mkDerivation rec {
   pname = "retroarch-bare";
@@ -54,60 +56,77 @@ stdenv.mkDerivation rec {
   src = fetchFromGitHub {
     owner = "libretro";
     repo = "RetroArch";
-    sha256 = "sha256-/rOf85TQTXbY9kIETaO5E58f2ZvKPqEFLsbNne/+/lw=";
+    sha256 = "sha256-doLWNA8aTAllxx3zABtvZaegBQEPIi8276zbytPSdBU=";
     rev = "v${version}";
   };
 
   patches = [
-    ./disable-menu_show_core_updater.patch
-    ./use-fixed-paths-on-libretro_info_path.patch
+    ./use-fixed-paths.patch
   ];
 
   postPatch = ''
     substituteInPlace "frontend/drivers/platform_unix.c" \
-      --replace "@libretro_directory@" "$out/lib" \
-      --replace "@libretro_info_path@" "$out/share/libretro/info"
+      --subst-var-by libretro_directory "$out/lib" \
+      --subst-var-by libretro_info_path "$out/share/libretro/info" \
+      --subst-var-by out "$out"
     substituteInPlace "frontend/drivers/platform_darwin.m" \
-      --replace "@libretro_directory@" "$out/lib" \
-      --replace "@libretro_info_path@" "$out/share/libretro/info"
+      --subst-var-by libretro_directory "$out/lib" \
+      --subst-var-by libretro_info_path "$out/share/libretro/info"
   '';
 
   nativeBuildInputs = [ pkg-config ] ++
-    lib.optional stdenv.isLinux wayland ++
+    lib.optional withWayland wayland ++
     lib.optional (runtimeLibs != [ ]) makeWrapper;
 
-  buildInputs = [ ffmpeg_4 freetype libxml2 libGLU libGL python3 SDL2 which ] ++
-    lib.optional enableNvidiaCgToolkit nvidia_cg_toolkit ++
-    lib.optional withVulkan vulkan-loader ++
-    lib.optionals stdenv.isDarwin [ libobjc AppKit Foundation ] ++
-    lib.optionals stdenv.isLinux [
-      alsa-lib
-      dbus
-      libX11
-      libXdmcp
-      libXext
-      libXxf86vm
-      libdrm
-      libpulseaudio
-      libv4l
-      libxkbcommon
-      mesa
-      udev
-      wayland
-    ];
+  buildInputs = [
+    ffmpeg_4
+    freetype
+    libGL
+    libGLU
+    libxml2
+    python3
+    SDL2
+  ] ++
+  lib.optional enableNvidiaCgToolkit nvidia_cg_toolkit ++
+  lib.optional withVulkan vulkan-loader ++
+  lib.optional withWayland wayland ++
+  lib.optionals stdenv.isDarwin [ libobjc AppKit Foundation ] ++
+  lib.optionals stdenv.isLinux [
+    alsa-lib
+    dbus
+    libX11
+    libXdmcp
+    libXext
+    libXxf86vm
+    libdrm
+    libpulseaudio
+    libv4l
+    libxkbcommon
+    mesa
+    udev
+  ];
 
   enableParallelBuilding = true;
 
-  configureFlags = lib.optionals stdenv.isLinux [ "--enable-kms" "--enable-egl" "--enable-dbus" ];
+  configureFlags = [
+    "--disable-update_cores"
+  ] ++
+  lib.optionals stdenv.isLinux [
+    "--enable-dbus"
+    "--enable-egl"
+    "--enable-kms"
+  ];
 
   postInstall = ''
-    mkdir -p $out/share/libretro/info
     # TODO: ideally each core should have its own core information
+    mkdir -p $out/share/libretro/info
     cp -r ${libretroCoreInfo}/* $out/share/libretro/info
-  '' + lib.optionalString (runtimeLibs != [ ]) ''
+  '' +
+  lib.optionalString (runtimeLibs != [ ]) ''
     wrapProgram $out/bin/retroarch \
       --prefix LD_LIBRARY_PATH ':' ${lib.makeLibraryPath runtimeLibs}
-  '' + lib.optionalString stdenv.isDarwin ''
+  '' +
+  lib.optionalString stdenv.isDarwin ''
     # https://github.com/libretro/RetroArch/blob/master/retroarch-apple-packaging.sh
     app=$out/Applications/RetroArch.app
     mkdir -p $app/Contents/MacOS
diff --git a/pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patch b/pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patch
deleted file mode 100644
index 427cb4871dc96..0000000000000
--- a/pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 546b343294209abbb193883ab76b679b7f99c6d3 Mon Sep 17 00:00:00 2001
-From: Thiago Kenji Okada <thiagokokada@gmail.com>
-Date: Sat, 20 Nov 2021 16:03:50 -0300
-Subject: [PATCH] Disable "menu_show_core_updater"
-
----
- retroarch.cfg | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/retroarch.cfg b/retroarch.cfg
-index cdcb199c9f..ab72f3920f 100644
---- a/retroarch.cfg
-+++ b/retroarch.cfg
-@@ -681,7 +681,7 @@
- # menu_show_online_updater = true
- 
- # If disabled, will hide the ability to update cores (and core info files) inside the menu.
--# menu_show_core_updater = true
-+menu_show_core_updater = false
- 
- # If disabled, the libretro core will keep running in the background when we
- # are in the menu.
--- 
-2.31.1
-
diff --git a/pkgs/applications/emulators/retroarch/fix-config.patch b/pkgs/applications/emulators/retroarch/fix-config.patch
deleted file mode 100644
index 1a71bf43cb11f..0000000000000
--- a/pkgs/applications/emulators/retroarch/fix-config.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git a/retroarch.cfg b/retroarch.cfg
-index cdcb199c9f..08b9b1cf10 100644
---- a/retroarch.cfg
-+++ b/retroarch.cfg
-@@ -681,7 +681,7 @@
- # menu_show_online_updater = true
- 
- # If disabled, will hide the ability to update cores (and core info files) inside the menu.
--# menu_show_core_updater = true
-+menu_show_core_updater = false
- 
- # If disabled, the libretro core will keep running in the background when we
- # are in the menu.
-@@ -823,10 +823,10 @@
- # rgui_browser_directory =
- 
- # Core directory for libretro core implementations.
--# libretro_directory =
-+libretro_directory = @libretro_directory@
- 
- # Core info directory for libretro core information.
--# libretro_info_path =
-+libretro_info_path = @libretro_info_path@
- 
- # Path to content database directory.
- # content_database_path =
diff --git a/pkgs/applications/emulators/retroarch/fix-libretro-paths.patch b/pkgs/applications/emulators/retroarch/fix-libretro-paths.patch
deleted file mode 100644
index 203ce836533d5..0000000000000
--- a/pkgs/applications/emulators/retroarch/fix-libretro-paths.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff --git a/configuration.c b/configuration.c
-index e6a3841324..afb1d6e2ce 100644
---- a/configuration.c
-+++ b/configuration.c
-@@ -1456,7 +1456,7 @@ static struct config_path_setting *populate_settings_path(
-    SETTING_PATH("core_options_path",
-          settings->paths.path_core_options, false, NULL, true);
-    SETTING_PATH("libretro_info_path",
--         settings->paths.path_libretro_info, false, NULL, true);
-+         settings->paths.path_libretro_info, false, NULL, false);
-    SETTING_PATH("content_database_path",
-          settings->paths.path_content_database, false, NULL, true);
-    SETTING_PATH("cheat_database_path",
-diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c
-index 722e1c595c..e7313ee038 100644
---- a/frontend/drivers/platform_unix.c
-+++ b/frontend/drivers/platform_unix.c
-@@ -1825,8 +1825,8 @@ static void frontend_unix_get_env(int *argc,
-    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
-          "core_info", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
- #else
--   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
--         "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
-+   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], "@libretro_info_path@",
-+         "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
- #endif
-    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG], base_path,
-          "autoconfig", sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG]));
diff --git a/pkgs/applications/emulators/retroarch/hashes.json b/pkgs/applications/emulators/retroarch/hashes.json
index fac926c9062bd..af63572e61c07 100644
--- a/pkgs/applications/emulators/retroarch/hashes.json
+++ b/pkgs/applications/emulators/retroarch/hashes.json
@@ -153,8 +153,8 @@
     "fbneo": {
         "owner": "libretro",
         "repo": "fbneo",
-        "rev": "8678b0fcd02c4049c0cfa40a0ab87fded1bbedd8",
-        "sha256": "MiLYaURj17Sq8V31SDFQ93XH4DAYMQQelVq+4EBmtro="
+        "rev": "758f24740d81ff833c1868befd98ccd11909255f",
+        "sha256": "VhfsvohRWICWqKWry0fgUS76kiXBsnjY9DytxEvulKA="
     },
     "fceumm": {
         "owner": "libretro",
@@ -219,8 +219,8 @@
     "mame": {
         "owner": "libretro",
         "repo": "mame",
-        "rev": "fcacbc7811a9b69874fd09b91e7217e44c6a0980",
-        "sha256": "WiBmqBcqxXmeQOmTN4FDDUv680uqAkpYUOnvJ7FXn4k="
+        "rev": "0d935696dce53a13eaf0705f4a108ee348f3c613",
+        "sha256": "HnJ3eHzTpR7Lsi1ATn3B314y0KNKJ0+qNGcDbFvmZEA="
     },
     "mame2000": {
         "owner": "libretro",
@@ -237,8 +237,8 @@
     "mame2003-plus": {
         "owner": "libretro",
         "repo": "mame2003-plus-libretro",
-        "rev": "982db57b325b54aa90a60bd2e512b624d3b6642c",
-        "sha256": "uyysUD/PULHyaOw42GJoBsT9fYdYuAl4eLCVNRU8/Sw="
+        "rev": "d88d5c118e8d7075ec0a4e6deebb4cd3f18a8dd1",
+        "sha256": "9offucQMCpMqo4StYscS6kivXCYHy4Sn+Cs/3MoNwsw="
     },
     "mame2010": {
         "owner": "libretro",
@@ -261,8 +261,8 @@
     "melonds": {
         "owner": "libretro",
         "repo": "melonds",
-        "rev": "6a03f3f11a729dbf698ec53954c735a0680aca01",
-        "sha256": "GH/G/UzwjNqHwtIwx6VohP4XsJKe+EFU2n+GX43IByM="
+        "rev": "5e52c245fb38cabe881fbfa6513280ee44fc5bd8",
+        "sha256": "jWBZ5wg1dKEgoEV09VTGJ+I4+8uiivAHhpTiD9tPaYg="
     },
     "mesen": {
         "owner": "libretro",
@@ -285,8 +285,8 @@
     "mgba": {
         "owner": "libretro",
         "repo": "mgba",
-        "rev": "db7ace387cdc87d9f2bd4f9f5211c26ce0b07867",
-        "sha256": "i/U5yrnGQBRHqBu8c/mQ7Eov43+6IOOs+H8pSKXNM1E="
+        "rev": "199a03e719436018779fe9299706c597fb2e9231",
+        "sha256": "3Q3MBzezCvl1Er45AeUM/QI0a+JiGn/PfYpqMaaiuds="
     },
     "mupen64plus": {
         "owner": "libretro",
@@ -346,28 +346,28 @@
     "pcsx_rearmed": {
         "owner": "libretro",
         "repo": "pcsx_rearmed",
-        "rev": "5b406fd9567c0829171af44b3325dae6dd155732",
-        "sha256": "V+z58fRSaLurDiu4Y/xQjndkMKPSmEGjay3foDkppM0="
+        "rev": "5ced3945423cda0010597b27b7da6bce77b12baa",
+        "sha256": "8O2XyEr40HqQf8mHxmvB6/UT837HZw8SrKBy/JH66p4="
     },
     "picodrive": {
         "owner": "libretro",
         "repo": "picodrive",
-        "rev": "26719f348eb579a8372e2c58ef0132d95d9dc817",
-        "sha256": "xD8RxFHeKOltIc35Zudj29x+vkq2AXfSKu0/ZzQQHi4=",
+        "rev": "0a4ec83cbfaebb65fb1c40f26ffaf28131f9003b",
+        "sha256": "NOMQoDmXGrxrquAcSLo6Otcz8bH4gnhqcG/zzet3Dtk=",
         "fetchSubmodules": true
     },
     "play": {
         "owner": "jpd002",
         "repo": "Play-",
-        "rev": "1129440ab6ede8263275dc3a5eec1624d20442fb",
-        "sha256": "nTJjxVPGOofnIZbjGe3GZDIj4YnC73IbSdGsSuVIjEA=",
+        "rev": "1126c39cd8ebf56af347c475139d4db97fc7cc19",
+        "sha256": "H/cYFWl8rA/ZdoygEjr7h1y6Z0n29Z+OCzzVMvIuVyo=",
         "fetchSubmodules": true
     },
     "ppsspp": {
         "owner": "hrydgard",
         "repo": "ppsspp",
-        "rev": "16f93a26844b26e11cf9becfd275c4a637bfd1ab",
-        "sha256": "k1URDPE4kRMY1LUeR2zcLJFGt0Gnt5N8gTQHpIxDdRw=",
+        "rev": "4af4b0dddc638b00205d9943f17a2806e438fe83",
+        "sha256": "5n+Mg2ZDTJd5fk1OZAiYnCT13G3LAWahXPA+MwaOF08=",
         "fetchSubmodules": true
     },
     "prboom": {
@@ -385,8 +385,8 @@
     "puae": {
         "owner": "libretro",
         "repo": "libretro-uae",
-        "rev": "1b7dd443ff89d667d99f8c44454a91ed59bcabd9",
-        "sha256": "YJiZEtB0rBFffEZj/hB7zEFBUp02kCzblq4CtCmygKo="
+        "rev": "4d8ebafe3f91c4998e8d73940e9558d863ecf93b",
+        "sha256": "dzfZFm7L+Qe3WwSYiMLp3cQm8zk0pWVB68nBe/H1Hvc="
     },
     "quicknes": {
         "owner": "libretro",
@@ -439,8 +439,8 @@
     "stella": {
         "owner": "stella-emu",
         "repo": "stella",
-        "rev": "65115cc3a133d68979f3096bdecb067bcaedb493",
-        "sha256": "letOnjaIGIjC9xwj5C156VkBhMPFtVq12FG7SuC5+OY="
+        "rev": "7193c405327e0f2156d24d53836162f4b44af079",
+        "sha256": "A9icQON+0WrknjGp/0wiFNSWs2ot2s0X5lucCdk4O/s="
     },
     "stella2014": {
         "owner": "libretro",
@@ -451,8 +451,8 @@
     "swanstation": {
         "owner": "libretro",
         "repo": "swanstation",
-        "rev": "b6a18318bd7bf0d3b28b50d2b554810ea11b30cb",
-        "sha256": "jZ6SfiHFJyaTFvINrEe61yhUtWYoqRzaAi0vLuDnMuo="
+        "rev": "ff0b451a573885a5b3a4f291f7b22f3ffc667a17",
+        "sha256": "jz8tkvgonc4icRt12tt1BBCCiwec0ucix7Hp7PNPl8E="
     },
     "tgbdual": {
         "owner": "libretro",
@@ -476,8 +476,8 @@
     "vba-m": {
         "owner": "libretro",
         "repo": "vbam-libretro",
-        "rev": "7c25d64d6903c6d859cce781c52da0671c4f7d3e",
-        "sha256": "U+jBM34sZxny9lpuegQ8YDKBwYrWOAyLBMKumoQCok4="
+        "rev": "7e30b038893de63e674944f75581d57c7685ea3a",
+        "sha256": "CmmiKiy0mFqAiagUHFV5wRSZ0MkzADrHRAG+h82dWAQ="
     },
     "vba-next": {
         "owner": "libretro",
diff --git a/pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patch b/pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patch
deleted file mode 100644
index fd3913ea157ea..0000000000000
--- a/pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From 7bf021529ff15ca2580b15b3c0bfdc137d5beffe Mon Sep 17 00:00:00 2001
-From: Thiago Kenji Okada <thiagokokada@gmail.com>
-Date: Wed, 9 Mar 2022 18:24:15 +0000
-Subject: [PATCH] Use fixed paths on "libretro_info_path"
-
-This patch sets "libretro_info_path" to `handle = false`, so instead of
-using the values from `retroarch.cfg`, it will always use the default.
-
-Also, it patches the default "libretro_info_path" to the
-`@libretro_info_path` string, so we can substitute it with the full path
-to it during build.
----
- configuration.c                    |  2 +-
- frontend/drivers/platform_darwin.m |  9 ++-------
- frontend/drivers/platform_unix.c   | 12 ++++--------
- 3 files changed, 7 insertions(+), 16 deletions(-)
-
-diff --git a/configuration.c b/configuration.c
-index 7e346ff6e9..c4b2100203 100644
---- a/configuration.c
-+++ b/configuration.c
-@@ -1466,7 +1466,7 @@ static struct config_path_setting *populate_settings_path(
-    SETTING_PATH("core_options_path",
-          settings->paths.path_core_options, false, NULL, true);
-    SETTING_PATH("libretro_info_path",
--         settings->paths.path_libretro_info, false, NULL, true);
-+         settings->paths.path_libretro_info, false, NULL, false);
-    SETTING_PATH("content_database_path",
-          settings->paths.path_content_database, false, NULL, true);
-    SETTING_PATH("cheat_database_path",
-diff --git a/frontend/drivers/platform_darwin.m b/frontend/drivers/platform_darwin.m
-index 6c5fdca400..552dcb7e2b 100644
---- a/frontend/drivers/platform_darwin.m
-+++ b/frontend/drivers/platform_darwin.m
-@@ -388,14 +388,9 @@ static void frontend_darwin_get_env(int *argc, char *argv[],
-          home_dir_buf, "shaders_glsl",
-          sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER]));
- #endif
--#ifdef HAVE_UPDATE_CORES
-     fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE],
--		    home_dir_buf, "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
--#else
--    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE],
--		    bundle_path_buf, "modules", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
--#endif
--   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], home_dir_buf, "info", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
-+		    "@libretro_directory@", "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
-+   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], "@libretro_info_path@", "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
-    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_OVERLAY], home_dir_buf, "overlays", sizeof(g_defaults.dirs[DEFAULT_DIR_OVERLAY]));
- #ifdef HAVE_VIDEO_LAYOUT
-    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_LAYOUT], home_dir_buf, "layouts", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_LAYOUT]));
-diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c
-index b3b5dad173..7f1561e523 100644
---- a/frontend/drivers/platform_unix.c
-+++ b/frontend/drivers/platform_unix.c
-@@ -1820,12 +1820,8 @@ static void frontend_unix_get_env(int *argc,
-       strcpy_literal(base_path, "retroarch");
- #endif
- 
--   if (!string_is_empty(libretro_directory))
--      strlcpy(g_defaults.dirs[DEFAULT_DIR_CORE], libretro_directory,
--            sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
--   else
--      fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE], base_path,
--            "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
-+   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE], "@libretro_directory@",
-+         "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
- #if defined(DINGUX)
-    /* On platforms that require manual core installation/
-     * removal, placing core info files in the same directory
-@@ -1834,8 +1830,8 @@ static void frontend_unix_get_env(int *argc,
-    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
-          "core_info", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
- #else
--   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
--         "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
-+   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], "@libretro_info_path@",
-+         "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
- #endif
-    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG], base_path,
-          "autoconfig", sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG]));
--- 
-2.32.0
-
diff --git a/pkgs/applications/emulators/retroarch/use-fixed-paths.patch b/pkgs/applications/emulators/retroarch/use-fixed-paths.patch
new file mode 100644
index 0000000000000..a4837e63af7f7
--- /dev/null
+++ b/pkgs/applications/emulators/retroarch/use-fixed-paths.patch
@@ -0,0 +1,154 @@
+From 8a1cffebb23f9d2a28228cd8cbf4fd80836157e8 Mon Sep 17 00:00:00 2001
+From: Thiago Kenji Okada <thiagokokada@gmail.com>
+Date: Tue, 18 Oct 2022 17:41:33 +0100
+Subject: [PATCH] Use fixed paths
+
+---
+ configuration.c                    |  2 +-
+ frontend/drivers/platform_darwin.m |  4 +--
+ frontend/drivers/platform_unix.c   | 56 +++++++++++++++---------------
+ 3 files changed, 31 insertions(+), 31 deletions(-)
+
+diff --git a/configuration.c b/configuration.c
+index ac4779b2d7..d980892dda 100644
+--- a/configuration.c
++++ b/configuration.c
+@@ -1468,7 +1468,7 @@ static struct config_path_setting *populate_settings_path(
+    SETTING_PATH("core_options_path",
+          settings->paths.path_core_options, false, NULL, true);
+    SETTING_PATH("libretro_info_path",
+-         settings->paths.path_libretro_info, false, NULL, true);
++         settings->paths.path_libretro_info, false, NULL, false);
+    SETTING_PATH("content_database_path",
+          settings->paths.path_content_database, false, NULL, true);
+    SETTING_PATH("cheat_database_path",
+diff --git a/frontend/drivers/platform_darwin.m b/frontend/drivers/platform_darwin.m
+index c771ec0f55..d5e21a1f4d 100644
+--- a/frontend/drivers/platform_darwin.m
++++ b/frontend/drivers/platform_darwin.m
+@@ -400,9 +400,9 @@ static void frontend_darwin_get_env(int *argc, char *argv[],
+ 		    home_dir_buf, "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
+ #else
+     fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE],
+-		    bundle_path_buf, "modules", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
++		    "@libretro_directory@", "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
+ #endif
+-   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], home_dir_buf, "info", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
++   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], "@libretro_info_path@", "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
+    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_OVERLAY], home_dir_buf, "overlays", sizeof(g_defaults.dirs[DEFAULT_DIR_OVERLAY]));
+ #ifdef HAVE_VIDEO_LAYOUT
+    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_LAYOUT], home_dir_buf, "layouts", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_LAYOUT]));
+diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c
+index 29e9a0d633..dba8abe941 100644
+--- a/frontend/drivers/platform_unix.c
++++ b/frontend/drivers/platform_unix.c
+@@ -1792,8 +1792,8 @@ static void frontend_unix_get_env(int *argc,
+       strlcpy(g_defaults.dirs[DEFAULT_DIR_CORE], libretro_directory,
+             sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
+    else
+-      fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE], base_path,
+-            "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
++      fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE], "@libretro_directory@",
++            "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
+ #if defined(DINGUX)
+    /* On platforms that require manual core installation/
+     * removal, placing core info files in the same directory
+@@ -1802,27 +1802,27 @@ static void frontend_unix_get_env(int *argc,
+    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
+          "core_info", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
+ #else
+-   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
+-         "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
++   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], "@libretro_info_path@",
++         "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
+ #endif
+    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG], base_path,
+          "autoconfig", sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG]));
+ 
+-   if (path_is_directory("/usr/local/share/retroarch/assets"))
++   if (path_is_directory("@out@/local/share/retroarch/assets"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_ASSETS],
+-            "/usr/local/share/retroarch",
++            "@out@/local/share/retroarch",
+             "assets", sizeof(g_defaults.dirs[DEFAULT_DIR_ASSETS]));
+-   else if (path_is_directory("/usr/share/retroarch/assets"))
++   else if (path_is_directory("@out@/share/retroarch/assets"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_ASSETS],
+-            "/usr/share/retroarch",
++            "@out@/share/retroarch",
+             "assets", sizeof(g_defaults.dirs[DEFAULT_DIR_ASSETS]));
+-   else if (path_is_directory("/usr/local/share/games/retroarch/assets"))
++   else if (path_is_directory("@out@/local/share/games/retroarch/assets"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_ASSETS],
+-            "/usr/local/share/games/retroarch",
++            "@out@/local/share/games/retroarch",
+             "assets", sizeof(g_defaults.dirs[DEFAULT_DIR_ASSETS]));
+-   else if (path_is_directory("/usr/share/games/retroarch/assets"))
++   else if (path_is_directory("@out@/share/games/retroarch/assets"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_ASSETS],
+-            "/usr/share/games/retroarch",
++            "@out@/share/games/retroarch",
+             "assets", sizeof(g_defaults.dirs[DEFAULT_DIR_ASSETS]));
+    else
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_ASSETS], base_path,
+@@ -1834,41 +1834,41 @@ static void frontend_unix_get_env(int *argc,
+    fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER], base_path,
+          "filters/video", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER]));
+ #else
+-   if (path_is_directory("/usr/local/share/retroarch/filters/audio"))
++   if (path_is_directory("@out@/local/share/retroarch/filters/audio"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUDIO_FILTER],
+-            "/usr/local/share/retroarch",
++            "@out@/local/share/retroarch",
+             "filters/audio", sizeof(g_defaults.dirs[DEFAULT_DIR_AUDIO_FILTER]));
+-   else if (path_is_directory("/usr/share/retroarch/filters/audio"))
++   else if (path_is_directory("@out@/share/retroarch/filters/audio"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUDIO_FILTER],
+-            "/usr/share/retroarch",
++            "@out@/share/retroarch",
+             "filters/audio", sizeof(g_defaults.dirs[DEFAULT_DIR_AUDIO_FILTER]));
+-   else if (path_is_directory("/usr/local/share/games/retroarch/filters/audio"))
++   else if (path_is_directory("@out@/local/share/games/retroarch/filters/audio"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUDIO_FILTER],
+-            "/usr/local/share/games/retroarch",
++            "@out@/local/share/games/retroarch",
+             "filters/audio", sizeof(g_defaults.dirs[DEFAULT_DIR_AUDIO_FILTER]));
+-   else if (path_is_directory("/usr/share/games/retroarch/filters/audio"))
++   else if (path_is_directory("@out@/share/games/retroarch/filters/audio"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUDIO_FILTER],
+-            "/usr/share/games/retroarch",
++            "@out@/share/games/retroarch",
+             "filters/audio", sizeof(g_defaults.dirs[DEFAULT_DIR_AUDIO_FILTER]));
+    else
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUDIO_FILTER], base_path,
+             "filters/audio", sizeof(g_defaults.dirs[DEFAULT_DIR_AUDIO_FILTER]));
+ 
+-   if (path_is_directory("/usr/local/share/retroarch/filters/video"))
++   if (path_is_directory("@out@/local/share/retroarch/filters/video"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER],
+-            "/usr/local/share/retroarch",
++            "@out@/local/share/retroarch",
+             "filters/video", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER]));
+-   else if (path_is_directory("/usr/share/retroarch/filters/video"))
++   else if (path_is_directory("@out@/share/retroarch/filters/video"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER],
+-            "/usr/share/retroarch",
++            "@out@/share/retroarch",
+             "filters/video", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER]));
+-   else if (path_is_directory("/usr/local/share/games/retroarch/filters/video"))
++   else if (path_is_directory("@out@/local/share/games/retroarch/filters/video"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER],
+-            "/usr/local/share/games/retroarch",
++            "@out@/local/share/games/retroarch",
+             "filters/video", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER]));
+-   else if (path_is_directory("/usr/share/games/retroarch/filters/video"))
++   else if (path_is_directory("@out@/share/games/retroarch/filters/video"))
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER],
+-            "/usr/share/games/retroarch",
++            "@out@/share/games/retroarch",
+             "filters/video", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER]));
+    else
+       fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER], base_path,
+-- 
+2.37.3
+