mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-16 23:03:40 +01:00
ppsspp: refactor
- new Boolean selectors: - useSystemFfmpeg, default false - because PPSSPP project uses a heavily patched fork of ffmpeg_4 - useSystemSnappy, default true - move wrapping to postFixup - unpin ffmpeg_4 and glew - it required a self-referent argset Phew!
This commit is contained in:
parent
b8e911463e
commit
5236254119
2 changed files with 104 additions and 68 deletions
|
@ -1,25 +1,29 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, SDL2
|
||||
, cmake
|
||||
, copyDesktopItems
|
||||
, ffmpeg_4
|
||||
, glew
|
||||
, libffi
|
||||
, libsForQt5
|
||||
, libzip
|
||||
, makeDesktopItem
|
||||
, makeWrapper
|
||||
, pkg-config
|
||||
, python3
|
||||
, snappy
|
||||
, vulkan-loader
|
||||
, wayland
|
||||
, zlib
|
||||
, enableQt ? false
|
||||
, enableVulkan ? true
|
||||
, forceWayland ? false
|
||||
{
|
||||
lib,
|
||||
SDL2,
|
||||
cmake,
|
||||
copyDesktopItems,
|
||||
fetchFromGitHub,
|
||||
ffmpeg,
|
||||
glew,
|
||||
libffi,
|
||||
libsForQt5,
|
||||
libzip,
|
||||
makeDesktopItem,
|
||||
makeWrapper,
|
||||
pkg-config,
|
||||
python3,
|
||||
snappy,
|
||||
stdenv,
|
||||
vulkan-loader,
|
||||
wayland,
|
||||
zlib,
|
||||
|
||||
enableQt ? false,
|
||||
enableVulkan ? true,
|
||||
forceWayland ? false,
|
||||
useSystemFfmpeg? false,
|
||||
useSystemSnappy? true,
|
||||
}:
|
||||
|
||||
let
|
||||
|
@ -55,26 +59,33 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
makeWrapper
|
||||
pkg-config
|
||||
python3
|
||||
] ++ lib.optionals enableQt [ wrapQtAppsHook ];
|
||||
]
|
||||
++ lib.optionals enableQt [ wrapQtAppsHook ];
|
||||
|
||||
buildInputs = [
|
||||
SDL2
|
||||
ffmpeg_4
|
||||
(glew.override { enableEGL = forceWayland; })
|
||||
glew
|
||||
libzip
|
||||
snappy
|
||||
zlib
|
||||
] ++ lib.optionals enableQt [
|
||||
]
|
||||
++ lib.optionals useSystemFfmpeg [
|
||||
ffmpeg
|
||||
]
|
||||
++ lib.optionals useSystemSnappy [
|
||||
snappy
|
||||
]
|
||||
++ lib.optionals enableQt [
|
||||
qtbase
|
||||
qtmultimedia
|
||||
] ++ lib.optionals enableVulkan [ vulkan-loader ]
|
||||
]
|
||||
++ lib.optionals enableVulkan [ vulkan-loader ]
|
||||
++ lib.optionals vulkanWayland [ wayland libffi ];
|
||||
|
||||
cmakeFlags = [
|
||||
(lib.cmakeBool "HEADLESS" (!enableQt))
|
||||
(lib.cmakeBool "USE_SYSTEM_FFMPEG" true)
|
||||
(lib.cmakeBool "USE_SYSTEM_FFMPEG" useSystemFfmpeg)
|
||||
(lib.cmakeBool "USE_SYSTEM_LIBZIP" true)
|
||||
(lib.cmakeBool "USE_SYSTEM_SNAPPY" true)
|
||||
(lib.cmakeBool "USE_SYSTEM_SNAPPY" useSystemSnappy)
|
||||
(lib.cmakeBool "USE_WAYLAND_WSI" vulkanWayland)
|
||||
(lib.cmakeBool "USING_QT_UI" enableQt)
|
||||
(lib.cmakeFeature "OpenGL_GL_PREFERENCE" "GLVND")
|
||||
|
@ -91,33 +102,40 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
})
|
||||
];
|
||||
|
||||
installPhase = let
|
||||
vulkanPath = lib.makeLibraryPath [ vulkan-loader ];
|
||||
in
|
||||
''
|
||||
runHook preInstall
|
||||
installPhase =
|
||||
lib.concatStringsSep "\n" ([
|
||||
''runHook preInstall''
|
||||
]
|
||||
++ [
|
||||
''mkdir -p $out/share/{applications,ppsspp/bin,icons}''
|
||||
]
|
||||
++ (if enableQt then [
|
||||
''install -Dm555 PPSSPPQt $out/share/ppsspp/bin/''
|
||||
] else [
|
||||
''install -Dm555 PPSSPPHeadless $out/share/ppsspp/bin/''
|
||||
''makeWrapper $out/share/ppsspp/bin/PPSSPPHeadless $out/bin/ppsspp-headless''
|
||||
''install -Dm555 PPSSPPSDL $out/share/ppsspp/bin/''
|
||||
])
|
||||
++ [
|
||||
''mv assets $out/share/ppsspp''
|
||||
''mv ../icons/hicolor $out/share/icons''
|
||||
]
|
||||
++ [
|
||||
''runHook postInstall''
|
||||
]);
|
||||
|
||||
mkdir -p $out/share/{applications,ppsspp,icons}
|
||||
''
|
||||
+ (if enableQt then ''
|
||||
install -Dm555 PPSSPPQt $out/bin/ppsspp
|
||||
wrapProgram $out/bin/ppsspp \
|
||||
'' else ''
|
||||
install -Dm555 PPSSPPHeadless $out/bin/ppsspp-headless
|
||||
install -Dm555 PPSSPPSDL $out/share/ppsspp/
|
||||
makeWrapper $out/share/ppsspp/PPSSPPSDL $out/bin/ppsspp \
|
||||
--set SDL_VIDEODRIVER ${if forceWayland then "wayland" else "x11"} \
|
||||
'')
|
||||
+ lib.optionalString enableVulkan ''
|
||||
--prefix LD_LIBRARY_PATH : ${vulkanPath} \
|
||||
''
|
||||
+ ''
|
||||
|
||||
mv assets $out/share/ppsspp
|
||||
mv ../icons/hicolor $out/share/icons
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
postFixup =
|
||||
let
|
||||
wrapperArgs =
|
||||
lib.concatStringsSep " "
|
||||
(lib.optionals enableVulkan [
|
||||
"--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ vulkan-loader ]}"
|
||||
] ++ lib.optionals (!enableQt) [
|
||||
"--set SDL_VIDEODRIVER ${if forceWayland then "wayland" else "x11"}"
|
||||
]);
|
||||
binToBeWrapped = if enableQt then "PPSSPPQt" else "PPSSPPSDL";
|
||||
in
|
||||
''makeWrapper $out/share/ppsspp/bin/${binToBeWrapped} $out/bin/ppsspp ${wrapperArgs}'';
|
||||
|
||||
meta = {
|
||||
homepage = "https://www.ppsspp.org/";
|
||||
|
|
|
@ -2754,20 +2754,38 @@ with pkgs;
|
|||
|
||||
pcsxr = callPackage ../applications/emulators/pcsxr { };
|
||||
|
||||
ppsspp-sdl = ppsspp.override {
|
||||
enableQt = false;
|
||||
enableVulkan = true;
|
||||
};
|
||||
ppsspp-sdl = let
|
||||
argset = {
|
||||
ffmpeg = ffmpeg_4;
|
||||
glew = glew.override { enableEGL = argset.forceWayland; };
|
||||
enableQt = false;
|
||||
enableVulkan = true;
|
||||
forceWayland = false;
|
||||
};
|
||||
in
|
||||
ppsspp.override argset;
|
||||
|
||||
ppsspp-sdl-wayland = ppsspp.override {
|
||||
forceWayland = true;
|
||||
enableVulkan = false; # https://github.com/hrydgard/ppsspp/issues/13845
|
||||
};
|
||||
ppsspp-sdl-wayland = let
|
||||
argset = {
|
||||
ffmpeg = ffmpeg_4;
|
||||
glew = glew.override { enableEGL = argset.forceWayland; };
|
||||
enableQt = false;
|
||||
enableVulkan = false; # https://github.com/hrydgard/ppsspp/issues/13845
|
||||
forceWayland = true;
|
||||
};
|
||||
in
|
||||
ppsspp.override argset;
|
||||
|
||||
ppsspp-qt = ppsspp.override {
|
||||
enableQt = true;
|
||||
enableVulkan = false; # https://github.com/hrydgard/ppsspp/issues/11628
|
||||
};
|
||||
ppsspp-qt = let
|
||||
argset = {
|
||||
ffmpeg = ffmpeg_4;
|
||||
glew = glew.override { enableEGL = argset.forceWayland; };
|
||||
enableQt = true;
|
||||
enableVulkan = false; # https://github.com/hrydgard/ppsspp/issues/11628
|
||||
forceWayland = false;
|
||||
};
|
||||
in
|
||||
ppsspp.override argset;
|
||||
|
||||
proton-caller = callPackage ../applications/emulators/proton-caller { };
|
||||
|
||||
|
|
Loading…
Reference in a new issue