XBMC AdvancedLauncher RetroArch launchers.

These are wrappers for retroarch wrappers, they are needed since launching a
process from XBMC(as a display manager and probably otherwise), using
AdvancedLauncher, results in it and it's parent recieving the same gamepad
input.

These wrappers will produce no sound on XBMC and AdvancedLauncher setups not
using a sound daemon, since XBMC gets paused while still holding onto the sound
device.
This commit is contained in:
Edward Tjörnhammar 2014-10-02 20:09:18 +02:00
parent bee638d269
commit 9d93f9bcda
3 changed files with 58 additions and 5 deletions

View file

@ -24,7 +24,10 @@ let
--add-flags "-L $COREDIR/${d2u core}_libretro.so $@"
'';
passthru.libretroCore = "/lib/retroarch/cores";
passthru = {
core = core;
libretroCore = "/lib/retroarch/cores";
};
meta = with stdenv.lib; {
inherit description;

View file

@ -0,0 +1,39 @@
{ stdenv, pkgs, cores }:
assert cores != [];
with pkgs.lib;
let
script = exec: ''
#!${stdenv.shell}
nohup sh -c "sleep 1 && pkill -SIGSTOP xbmc" &
nohup sh -c "${exec} '$@' -f;pkill -SIGCONT xbmc"
'';
scriptSh = exec: pkgs.writeScript ("xbmc-"+exec.name) (script exec.path);
execs = map (core: rec { name = core.core; path = core+"/bin/retroarch-"+name;}) cores;
in
stdenv.mkDerivation rec {
name = "xbmc-retroarch-advanced-launchers-${version}";
version = "0.2";
dontBuild = true;
buildCommand = ''
mkdir -p $out/bin
${stdenv.lib.concatMapStrings (exec: "ln -s ${scriptSh exec} $out/bin/xbmc-${exec.name};") execs}
'';
meta = {
description = "XBMC retroarch advanced launchers";
longDescription = ''
These retroarch launchers are intended to be used with
anglescry advanced launcher for XBMC since device input is
caught by both XBMC and the retroarch process.
'';
license = "GPL-3";
};
}

View file

@ -10519,13 +10519,11 @@ let
gtk_modules = [ libcanberra ];
};
wrapRetroArch = { retroarch }:
retroArchCores =
let
cfg = stdenv.lib.attrByPath [ "retroarch" ] {} config;
in
import ../misc/emulators/retroarch/wrapper.nix {
inherit stdenv lib makeWrapper retroarch;
cores = with libretro;
with libretro;
([ ]
++ lib.optional (cfg.enable4do or false) _4do
++ lib.optional (cfg.enableBsnesMercury or false) bsnes-mercury
@ -10543,6 +10541,14 @@ let
++ lib.optional (cfg.enableStella or false) stella
++ lib.optional (cfg.enableVbaNext or false) vba-next
);
wrapRetroArch = { retroarch }:
let
cfg = stdenv.lib.attrByPath [ "retroarch" ] {} config;
in
import ../misc/emulators/retroarch/wrapper.nix {
inherit stdenv lib makeWrapper retroarch;
cores = retroArchCores;
};
wxhexeditor = callPackage ../applications/editors/wxhexeditor { };
@ -10574,6 +10580,11 @@ let
ffmpeg = ffmpeg_1;
};
xbmc-retroarch-advanced-launchers =
callPackage ../misc/emulators/retroarch/xbmc-advanced-launchers.nix {
cores = retroArchCores;
};
xca = callPackage ../applications/misc/xca { };
xcalib = callPackage ../tools/X11/xcalib { };