diff --git a/pkgs/applications/emulators/libretro/default.nix b/pkgs/applications/emulators/libretro/default.nix index 7cac65848810..46faa0f29e9b 100644 --- a/pkgs/applications/emulators/libretro/default.nix +++ b/pkgs/applications/emulators/libretro/default.nix @@ -4,7 +4,7 @@ }: lib.makeScope newScope (self: { - mkLibretroCore = self.callPackage ./mkLibretroCore.nix; + mkLibretroCore = self.callPackage ./mkLibretroCore.nix { }; atari800 = self.callPackage ./cores/atari800.nix { }; diff --git a/pkgs/applications/emulators/libretro/mkLibretroCore.nix b/pkgs/applications/emulators/libretro/mkLibretroCore.nix index 892f5798c4d9..1702f150e4ee 100644 --- a/pkgs/applications/emulators/libretro/mkLibretroCore.nix +++ b/pkgs/applications/emulators/libretro/mkLibretroCore.nix @@ -6,96 +6,93 @@ retroarch-bare, unstableGitUpdater, zlib, - # Params - core, - makefile ? "Makefile.libretro", - extraBuildInputs ? [ ], - extraNativeBuildInputs ? [ ], - ## Location of resulting RetroArch core on $out - libretroCore ? "/lib/retroarch/cores", - ## The core filename is derived from the core name - ## Setting `normalizeCore` to `true` will convert `-` to `_` on the core filename - normalizeCore ? true, - ... -}@args: +}: -let - d2u = if normalizeCore then (lib.replaceStrings [ "-" ] [ "_" ]) else (x: x); - coreDir = placeholder "out" + libretroCore; - coreFilename = "${d2u core}_libretro${stdenv.hostPlatform.extensions.sharedLibrary}"; - mainProgram = "retroarch-${core}"; - extraArgs = builtins.removeAttrs args [ - "lib" - "stdenv" - "makeWrapper" - "retroarch-bare" - "unstableGitUpdater" - "zlib" +lib.extendMkDerivation { + constructDrv = stdenv.mkDerivation; + excludeDrvArgNames = [ "core" "extraBuildInputs" "extraNativeBuildInputs" "libretroCore" - "makefile" "normalizeCore" - "passthru" - "meta" ]; -in -stdenv.mkDerivation ( - { - pname = "libretro-${core}"; - buildInputs = [ zlib ] ++ extraBuildInputs; - nativeBuildInputs = [ makeWrapper ] ++ extraNativeBuildInputs; + extendDrvArgs = + finalAttrs: + { + core, + enableParallelBuilding ? true, + extraBuildInputs ? [ ], + extraNativeBuildInputs ? [ ], + makeFlags ? [ ], + makefile ? "Makefile.libretro", + meta ? { }, + passthru ? { }, + strictDeps ? true, + ## Location of resulting RetroArch core on $out + libretroCore ? "/lib/retroarch/cores", + ## The core filename is derived from the core name + ## Setting `normalizeCore` to `true` will convert `-` to `_` on the core filename + normalizeCore ? true, + ... + }: + let + d2u = if normalizeCore then (lib.replaceStrings [ "-" ] [ "_" ]) else (x: x); + coreDir = placeholder "out" + libretroCore; + coreFilename = "${d2u core}_libretro${stdenv.hostPlatform.extensions.sharedLibrary}"; + mainProgram = "retroarch-${core}"; + in + { + pname = "libretro-${core}"; - inherit makefile; + buildInputs = [ zlib ] ++ extraBuildInputs; + nativeBuildInputs = [ makeWrapper ] ++ extraNativeBuildInputs; - makeFlags = [ - "platform=${ - { - linux = "unix"; - darwin = "osx"; - windows = "win"; - } - .${stdenv.hostPlatform.parsed.kernel.name} or stdenv.hostPlatform.parsed.kernel.name - }" - "ARCH=${ - { - armv7l = "arm"; - armv6l = "arm"; - aarch64 = "arm64"; - i686 = "x86"; - } - .${stdenv.hostPlatform.parsed.cpu.name} or stdenv.hostPlatform.parsed.cpu.name - }" - ] ++ (args.makeFlags or [ ]); + inherit enableParallelBuilding makefile strictDeps; - installPhase = '' - runHook preInstall + makeFlags = [ + "platform=${ + { + linux = "unix"; + darwin = "osx"; + windows = "win"; + } + .${stdenv.hostPlatform.parsed.kernel.name} or stdenv.hostPlatform.parsed.kernel.name + }" + "ARCH=${ + { + armv7l = "arm"; + armv6l = "arm"; + aarch64 = "arm64"; + i686 = "x86"; + } + .${stdenv.hostPlatform.parsed.cpu.name} or stdenv.hostPlatform.parsed.cpu.name + }" + ] ++ makeFlags; - install -Dt ${coreDir} ${coreFilename} - makeWrapper ${retroarch-bare}/bin/retroarch $out/bin/${mainProgram} \ - --add-flags "-L ${coreDir}/${coreFilename}" + installPhase = '' + runHook preInstall - runHook postInstall - ''; + install -Dt ${coreDir} ${coreFilename} + makeWrapper ${retroarch-bare}/bin/retroarch $out/bin/${mainProgram} \ + --add-flags "-L ${coreDir}/${coreFilename}" - enableParallelBuilding = true; + runHook postInstall + ''; - passthru = { - inherit core libretroCore; - # libretro repos sometimes has a fake tag like "Current", ignore - # it by setting hardcodeZeroVersion - updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; - } // (args.passthru or { }); + passthru = { + inherit core libretroCore; + # libretro repos sometimes has a fake tag like "Current", ignore + # it by setting hardcodeZeroVersion + updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; + } // passthru; - meta = { - inherit mainProgram; - inherit (retroarch-bare.meta) platforms; - homepage = "https://www.libretro.com/"; - teams = [ lib.teams.libretro ]; - } // (args.meta or { }); - } - // extraArgs -) + meta = { + inherit mainProgram; + inherit (retroarch-bare.meta) platforms; + teams = [ lib.teams.libretro ]; + } // meta; + }; +}