commit:     93f2338a21aac12956e09a794d976b4cb5c32a4c
Author:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 22 22:58:57 2022 +0000
Commit:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Fri Sep 23 00:27:16 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=93f2338a

games-emulation/pcsx2: sync live

See pcsx2-1.7.3329's commit for some details on changes.

Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>

 games-emulation/pcsx2/pcsx2-9999.ebuild | 202 +++++++++++++++++++++++---------
 1 file changed, 146 insertions(+), 56 deletions(-)

diff --git a/games-emulation/pcsx2/pcsx2-9999.ebuild 
b/games-emulation/pcsx2/pcsx2-9999.ebuild
index 00afde986d44..e4673dc1422c 100644
--- a/games-emulation/pcsx2/pcsx2-9999.ebuild
+++ b/games-emulation/pcsx2/pcsx2-9999.ebuild
@@ -1,108 +1,198 @@
 # Copyright 1999-2022 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
-EAPI=7
+EAPI=8
 
 WX_GTK_VER="3.0-gtk3"
-inherit cmake fcaps git-r3 toolchain-funcs wxwidgets
+inherit cmake fcaps flag-o-matic wxwidgets
 
-DESCRIPTION="A PlayStation 2 emulator"
+if [[ ${PV} == 9999 ]]; then
+       inherit git-r3
+       EGIT_REPO_URI="https://github.com/PCSX2/pcsx2.git";
+else
+       HASH_GLSLANG=c9706bdda0ac22b9856f1aa8261e5b9e15cd20c5
+       HASH_VULKAN=9f4c61a31435a7a90a314fc68aeb386c92a09c0f
+       SRC_URI="
+               https://github.com/PCSX2/pcsx2/archive/refs/tags/v${PV}.tar.gz 
-> ${P}.tar.gz
+               vulkan? (
+                       
https://github.com/KhronosGroup/glslang/archive/${HASH_GLSLANG}.tar.gz -> 
${PN}-glslang-${HASH_GLSLANG::10}.tar.gz
+                       
https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz -> 
${PN}-vulkan-headers-${HASH_VULKAN::10}.tar.gz
+               )"
+       KEYWORDS="-* ~amd64"
+fi
+
+DESCRIPTION="PlayStation 2 emulator"
 HOMEPAGE="https://pcsx2.net/";
-EGIT_REPO_URI="https://github.com/PCSX2/${PN}.git";
-EGIT_SUBMODULES=(
-       3rdparty/glslang/glslang # needs StandAlone/ResourceLimits.h
-       3rdparty/imgui/imgui # not made to be system-wide
-       3rdparty/vulkan-headers # to keep in sync with glslang
-)
 
-LICENSE="GPL-3 Apache-2.0 OFL-1.1" # TODO: needs review for a full list
+LICENSE="
+       GPL-3+ Apache-2.0 BSD BSD-2 BSD-4 Boost-1.0 GPL-2+ LGPL-2.1+
+       LGPL-3+ MIT OFL-1.1 ZLIB public-domain"
 SLOT="0"
-KEYWORDS=""
-IUSE="pulseaudio test"
-
+IUSE="cpu_flags_x86_sse4_1 pulseaudio qt6 test vulkan wayland"
+REQUIRED_USE="cpu_flags_x86_sse4_1" # dies at runtime if no support
 RESTRICT="!test? ( test )"
 
 RDEPEND="
        app-arch/xz-utils
        app-arch/zstd:=
        dev-cpp/rapidyaml:=
-       dev-libs/glib:2
        dev-libs/libaio
        dev-libs/libchdr
        >=dev-libs/libfmt-7.1.3:=
-       dev-libs/libxml2:2
        dev-libs/libzip:=[zstd]
-       media-libs/alsa-lib
        media-libs/cubeb
-       media-libs/freetype
+       media-libs/harfbuzz
        media-libs/libglvnd
        media-libs/libpng:=
        media-libs/libsamplerate
-       media-libs/libsdl2[haptic,joystick,sound]
+       >=media-libs/libsdl2-2.0.22[haptic,joystick]
        media-libs/libsoundtouch:=
        net-libs/libpcap
-       sys-libs/zlib
+       sys-libs/zlib:=
        virtual/libudev:=
-       x11-libs/gdk-pixbuf:2
-       x11-libs/gtk+:3
-       x11-libs/libICE
        x11-libs/libX11
-       x11-libs/libXext
        x11-libs/libXrandr
-       x11-libs/wxGTK:${WX_GTK_VER}[X]
-       pulseaudio? ( media-sound/pulseaudio )
-"
+       qt6? (
+               dev-qt/qtbase:6[gui,network,widgets]
+               net-misc/curl
+       )
+       !qt6? (
+               dev-libs/glib:2
+               x11-libs/gdk-pixbuf:2
+               x11-libs/gtk+:3[wayland?]
+               x11-libs/wxGTK:${WX_GTK_VER}[X]
+               pulseaudio? ( media-libs/libpulse )
+       )
+       vulkan? ( media-libs/vulkan-loader )
+       wayland? ( dev-libs/wayland )"
 DEPEND="
        ${RDEPEND}
-       x11-base/xorg-proto"
-BDEPEND="test? ( dev-cpp/gtest )"
+       x11-base/xorg-proto
+       test? ( dev-cpp/gtest )"
+BDEPEND="
+       dev-lang/perl
+       qt6? ( dev-qt/qttools[linguist] )
+       !qt6? ( sys-devel/gettext )"
 
 FILECAPS=(
-       -m 755 "CAP_NET_RAW+eip CAP_NET_ADMIN+eip" usr/bin/pcsx2
+       -m 0755 "CAP_NET_RAW+eip CAP_NET_ADMIN+eip" usr/bin/pcsx2
 )
 
 PATCHES=(
        "${FILESDIR}"/${PN}-1.7.0-crcs.patch
+       "${FILESDIR}"/${PN}-1.7.3329-clang16.patch
+       "${FILESDIR}"/${PN}-1.7.3329-lto.patch
+       "${FILESDIR}"/${PN}-1.7.3329-musl.patch
+       "${FILESDIR}"/${PN}-1.7.3329-qt6.patch
+       "${FILESDIR}"/${PN}-1.7.3329-unbundle.patch
+       "${FILESDIR}"/${PN}-1.7.3329-wx-vs-sdl.patch
 )
 
+src_unpack() {
+       if [[ ${PV} == 9999 ]]; then
+               local EGIT_SUBMODULES=()
+               if use vulkan; then
+                       EGIT_SUBMODULES+=(
+                               3rdparty/glslang/glslang # needs 
StandAlone/ResourceLimits.h
+                               3rdparty/vulkan-headers # to keep in sync with 
glslang
+                       )
+               fi
+               git-r3_src_unpack
+       else
+               default
+               if use vulkan; then
+                       rmdir "${S}"/3rdparty/{glslang/glslang,vulkan-headers} 
|| die
+                       mv glslang-${HASH_GLSLANG} 
"${S}"/3rdparty/glslang/glslang || die
+                       mv Vulkan-Headers-${HASH_VULKAN} 
"${S}"/3rdparty/vulkan-headers || die
+               fi
+       fi
+}
+
 src_prepare() {
        cmake_src_prepare
 
-       # unbundle, use sed over patch for less chances to break -9999
-       # note: gentoo's zstd lacks a cmake module which upstream tries to use
-       sed -e '/add_subdir.*cubeb/c\find_package(cubeb REQUIRED)' \
-               -e '/add_subdir.*libchdr/c\pkg_check_modules(chdr REQUIRED 
IMPORTED_TARGET libchdr)\nalias_library(chdr-static PkgConfig::chdr)' \
-               -e '/system_library.*zstd/,/endif()/c\pkg_check_modules(zstd 
REQUIRED IMPORTED_TARGET libzstd)\nalias_library(Zstd::Zstd PkgConfig::zstd)' \
-               -e '/compile_options(\(cubeb\|chdr-static\|speex\)/d' \
-               -i cmake/SearchForStuff.cmake || die
+       # qt6 build doesn't support PACKAGE_MODE and need to set resources 
location
+       sed -e "/EmuFolders::AppRoot =/s|=.*|= 
\"${EPREFIX}/usr/share/PCSX2\";|" \
+               -i pcsx2/Frontend/CommonHost.cpp || die
+
+       # pulseaudio is only used for usb-mic and without qt6, not for audio 
output
+       { use pulseaudio && use !qt6; } || :> cmake/FindPulseAudio.cmake || die
 
-       # pulseaudio is only used for usb-mic, not audio output
-       use pulseaudio || > cmake/FindPulseAudio.cmake || die
+       # GS tests currently fail to build with qt6
+       use !qt6 || sed -i '/add_subdirectory(GS)/d' tests/ctest/CMakeLists.txt 
|| die
+
+       # delete all 3rdparty/* except known-used ones in non-live
+       if [[ ${PV} != 9999 ]]; then
+               local keep=(
+                       cpuinfo glad imgui include jpgd lzma simpleini xbyak
+                       $(usev vulkan 'glslang vulkan-headers')
+               )
+               find 3rdparty -mindepth 1 -maxdepth 1 -type d \
+                       -not \( -false ${keep[*]/#/-o -name } \) -exec rm -r {} 
+ || die
+       fi
 }
 
 src_configure() {
-       # Build with ld.gold fails
-       # https://github.com/PCSX2/pcsx2/issues/1671
-       tc-ld-disable-gold
+       use qt6 || setup-wxwidgets
+
+       # for bundled glslang (bug #858374)
+       use vulkan && append-flags -fno-strict-aliasing
 
-       # pcsx2 build scripts will force CMAKE_BUILD_TYPE=Devel
-       # if it something other than "Devel|Debug|Release"
-       local CMAKE_BUILD_TYPE="Release"
        local mycmakeargs=(
-               -DBUILD_SHARED_LIBS=FALSE
-               -DDISABLE_ADVANCE_SIMD=TRUE
-               -DDISABLE_BUILD_DATE=TRUE
-               -DDISABLE_PCSX2_WRAPPER=TRUE
-               -DDISABLE_SETCAP=TRUE
+               -DBUILD_SHARED_LIBS=no
+               -DDISABLE_BUILD_DATE=yes
+               -DDISABLE_PCSX2_WRAPPER=yes
+               -DDISABLE_SETCAP=yes
                -DENABLE_TESTS=$(usex test)
-               -DPACKAGE_MODE=TRUE
-               -DQT_BUILD=FALSE # TODO when qt6 is in tree
-               -DSDL2_API=TRUE # conditionally needed if wxGTK[sdl], 
cmake/ApiValidation.cmake
-               -DUSE_SYSTEM_LIBS=TRUE
-               -DUSE_VTUNE=FALSE
-               -DXDG_STD=TRUE
+               -DPACKAGE_MODE=yes
+               -DQT_BUILD=$(usex qt6)
+               -DUSE_SYSTEM_LIBS=yes
+               -DUSE_VTUNE=no
+               -DUSE_VULKAN=$(usex vulkan)
+               -DWAYLAND_API=$(usex wayland)
+               -DXDG_STD=yes
+
+               # sse4.1 is the bare minimum required, -m is required at build 
time
+               # (see PCSX2Base.h) and it dies if no support at runtime 
(AppInit.cpp)
+               # https://github.com/PCSX2/pcsx2/pull/4329
+               -DARCH_FLAG=-msse4.1
        )
 
-       setup-wxwidgets
        cmake_src_configure
 }
+
+src_test() {
+       cmake_build unittests
+}
+
+src_install() {
+       cmake_src_install
+
+       use qt6 && newbin "${BUILD_DIR}"/pcsx2-qt/pcsx2-qt pcsx2
+}
+
+pkg_postinst() {
+       fcaps_pkg_postinst
+
+       local replacing_old
+       if [[ ${REPLACING_VERSIONS##* } ]] &&
+               ver_test ${REPLACING_VERSIONS##* } -lt 1.6.1
+       then
+               replacing_old=
+               elog ">=${PN}-1.7 has received several changes since 
<=${PN}-1.6.0, just-in-case"
+               elog "it is recommended to backup your save states and memory 
cards before use."
+               elog "Note that the executable was also renamed from 'PCSX2' to 
'pcsx2'."
+       fi
+
+       if [[ ${PV} != 9999 && ( ! ${REPLACING_VERSIONS} || -v replacing_old ) 
]]; then
+               [[ -v replacing_old ]] && elog
+               elog "${PN}-1.7.x is a development branch using a nightly 
release model"
+               elog "(new 'release' every 1-2 days). Stable 1.6.0 is getting 
old and lacks"
+               elog "many notable features (e.g. native 64bit builds). Given 
it may be a long"
+               elog "time before there is a new stable, Gentoo will carry and 
update 1.7.x"
+               elog "roughly every months."
+               elog
+               elog "Please report an issue if feel a picked nightly release 
needs to be"
+               elog "updated ahead of time or masked (notably for handling 
regressions)."
+       fi
+}

Reply via email to