public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: net-misc/sunshine/files/, net-misc/sunshine/
@ 2024-02-17 23:39 James Le Cuirot
  0 siblings, 0 replies; 5+ messages in thread
From: James Le Cuirot @ 2024-02-17 23:39 UTC (permalink / raw
  To: gentoo-commits

commit:     6a7bec1d282feb000ac04014e41a9a61c6018610
Author:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 17 23:22:01 2024 +0000
Commit:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Sat Feb 17 23:38:49 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6a7bec1d

net-misc/sunshine: New package

Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>

 net-misc/sunshine/Manifest                         |  11 +
 .../sunshine/files/sunshine-0.21.0-no-x11.patch    |  36 ++
 .../files/sunshine-0.21.0-system-deps.patch        | 341 +++++++++++++++++++
 .../sunshine/files/sunshine-0.21.0-vaapi.patch     |  26 ++
 .../sunshine/files/sunshine-custom-ffmpeg.patch    | 163 +++++++++
 net-misc/sunshine/files/sunshine-system-json.patch |  56 +++
 net-misc/sunshine/metadata.xml                     |  20 ++
 net-misc/sunshine/sunshine-0.21.0.ebuild           | 374 ++++++++++++++++++++
 net-misc/sunshine/sunshine-9999.ebuild             | 377 +++++++++++++++++++++
 9 files changed, 1404 insertions(+)

diff --git a/net-misc/sunshine/Manifest b/net-misc/sunshine/Manifest
new file mode 100644
index 000000000000..a7940bffef95
--- /dev/null
+++ b/net-misc/sunshine/Manifest
@@ -0,0 +1,11 @@
+DIST LizardByte-build-deps-2aafe061cd52a944cb3b5f86d1f25e9ad2a19bec.tar.gz 24171 BLAKE2B bcc8f1829eae4ba85a9cbdaca7876a4a52c979f3b8ef0f0a56876fcb171025544bd1997455c2b8fff59564deca433366ae03f14cbb0929f78c87f991b269156f SHA512 892184ec0ff321b2b7e2000dc605d1162955cb04ff259f6032f124f1ff50a1fe485e2cf2c0b735788f8615c9aba87ca040205599cb4b91881daa462a53340bd7
+DIST LizardByte-tray-e08bdbe5aa7de0ad9c0ce36257016e07c7e6e2c0.tar.gz 1066914 BLAKE2B 814e4aeace655cb06d50cbe26847f107b4141cec40fc812b924e87e4e14c7cddf8ee6dce0f54f76bf1f5c8dd355a8d7e32485759caa2c91aa24b1c594f1a879d SHA512 04df675d3fa8676b08a566bbbfb90af80b1efdd5ffc264f9aced3116ad1a3ad14c80a486a84f1ed800fd2ea2c2046e36f2919a2bb48cecdfca3baa3b650d3c48
+DIST Simple-Web-Server-27b41f5ee154cca0fce4fe2955dd886d04e3a4ed.tar.bz2 63258 BLAKE2B e80a6cd92825038ca75b973281b676584f9e488b45b1f9c6ed526236c0a7188b97ae2bba9d7b5557893452dd1ba8778faff2ade840cc169d20b4cf0e51fc8394 SHA512 2eba1d8bd53bb3e29e51a72000918b44730f73b4df26824f25cb6a4860dd21f8aaa7f77124fb500ffe9601ebeca66d1c21a06cad239ed27481e9cae088afbd44
+DIST ffmpeg-6.1.1.tar.xz 10458600 BLAKE2B 77827ff92b47c773ed82e7b7793dbb135c370fe23501169cb1eab08ff5ede77cfd5b397e8fb1d38756812cc82277898fd5c74b7d8495842556570c0c5570daeb SHA512 fca3f8635f29182e3ae0fe843a8a53614e4b47e22c11508df3ff7cdbafbb4b5ee0d82d9b3332871f7c1032033b1cad2f67557d7c5f7f7d85e2adadca122965d5
+DIST moonlight-common-c-6e9ed871bc3e013386c775b2ee7d31deb1151068.tar.gz 143942 BLAKE2B d8e98cffc683cc7ef6ad9e58c0a154a60e4bf5742fba8c4bce270b84c2af6ff455a6f7e2920e3b83db052c2a1632e787f9a444b381a8a7476ab79fa4f79560ad SHA512 a9024ba400e6804c0b26db57fa16ddbcd080982f852d26fd1ca8ae84f969bacd883c4adc83105bd18e1af4d34e831dc241d0278f88549b46497eb62c72f39bf2
+DIST moonlight-enet-c6bb0e50118d08252eee308de8412751218442d6.tar.gz 85497 BLAKE2B 484cf25d37ed230946edc7417ca20ea4c16828f2a099fd6a88dca08dc78a5314e837c96d9a7536ace3e45c55d0edd8698568af8d5087adc7429bc4d3966cfbae SHA512 1e7f93639139ec3d02c5b442dd2d49e2ab8e729b7c4ee51d9b2da4061f8e3794e7984858cfb87d279b85939a9fed6d0c4a3b9994c30597791461e612a64843e2
+DIST nanors-e9e242e98e27037830490b2a752895ca68f75f8b.tar.gz 194694 BLAKE2B 1effd7c0884ffd38b63d61a7872337797529ef2012f9de0950088a5004cb32a2fb2c14bcab2ec6719968864e5e6b9a67e96afa39466e2071bf4a0cd752ae4b29 SHA512 548be25650619a6c31944cd7a745fd40d5bc5008f2d7f91e0207a10b923764cb88fd2ddcb71eaed7c4863ec89b34d61011b666e292da071ac3b4429e4d7dd027
+DIST nv-codec-headers-22441b505d9d9afc1e3002290820909846c24bdc.tar.gz 77625 BLAKE2B 5b80efdf8a8290e5e1620779f92a874deff561fb66e6ad8c6c84ce7161c7540521a0c60b93ecdd6702e668b113bc12c56e4f02583ffffa72b0cc892d41db1966 SHA512 3fa66cc36a982db24b3f57925dd4cef99ead58f5e01ad2764638d16749b35c41f1ae5ad0cf7c73e4e62ad5391065ba2345e309ebf339b274532560d2c4820153
+DIST sunshine-0.21.0.tar.gz 24066116 BLAKE2B cc7ecf20ea69ed9c35c97194ca803f5a329234d1857b8f9dcee070c08ccc36de4481acc4f493c4d5f9b7fce5f5bf6986630d26233e7fc0495a688d7f2fea4696 SHA512 96e71ca6e36f7944b5f96005e2cab4287cba0fd0d2e561e6eeea7fa1cbf047576ca6debc786d34d7543dab361841fbf59cbb950e0d3413be8ba8dfb81342056e
+DIST sunshine-node-modules-0.21.0.tar.xz 2171156 BLAKE2B aa592d7041d08ff3dc795bf7afb5197e849afc7479df3c2e66e03b279f91cfb083e2e9f51ef594756b83b87b89214f48192be76b2efc7574a6aaf28d77ca7b37 SHA512 0a1cd9017b079a63f58f7fb4f2aaff8e2449788b213ddb6fa1da6bebf8a1d259ecc5900bb4ceaa15ca7bdca817792aeeff31e205d48593c3a55261c9f99d8f04
+DIST wlr-protocols-4264185db3b7e961e7f157e1cc4fd0ab75137568.tar.bz2 19574 BLAKE2B 65666095f186857e3c5274b23d5c40b40b0ba5d945c7b34331a06320128cb69a36a76baf2381b635858736ca6ed438c2ed67c03fac1c20e1ec4d71de27037e42 SHA512 0e6afde055d9b76bcb8c717433b78814f2cf9338ead451d3119f62463198ef272029767898e8f7d32896f2732be3aaa2a0373c671d8196e745d62f6116cd1583

diff --git a/net-misc/sunshine/files/sunshine-0.21.0-no-x11.patch b/net-misc/sunshine/files/sunshine-0.21.0-no-x11.patch
new file mode 100644
index 000000000000..a013be390095
--- /dev/null
+++ b/net-misc/sunshine/files/sunshine-0.21.0-no-x11.patch
@@ -0,0 +1,36 @@
+From 34ca4390bbae4dadf451af7dd4ec920a263558be Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Sun, 31 Dec 2023 20:57:45 +0000
+Subject: [PATCH 2/2] Fix grabbing code when DRM is enabled and X11 is disabled
+ (#1956)
+
+---
+ src/platform/linux/x11grab.h | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/platform/linux/x11grab.h b/src/platform/linux/x11grab.h
+index 24e96f6..4c2f347 100644
+--- a/src/platform/linux/x11grab.h
++++ b/src/platform/linux/x11grab.h
+@@ -51,9 +51,6 @@ namespace platf::x11 {
+   xdisplay_t
+   make_display();
+ #else
+-  // It's never something different from nullptr
+-  util::safe_ptr<_XDisplay, std::default_delete<_XDisplay>>;
+-
+   class cursor_t {
+   public:
+     static std::optional<cursor_t>
+@@ -65,7 +62,7 @@ namespace platf::x11 {
+     blend(img_t &, int, int) {}
+   };
+ 
+-  xdisplay_t
++  void *
+   make_display() { return nullptr; }
+ #endif
+ }  // namespace platf::x11
+-- 
+2.43.0
+

diff --git a/net-misc/sunshine/files/sunshine-0.21.0-system-deps.patch b/net-misc/sunshine/files/sunshine-0.21.0-system-deps.patch
new file mode 100644
index 000000000000..bfb5d41aba15
--- /dev/null
+++ b/net-misc/sunshine/files/sunshine-0.21.0-system-deps.patch
@@ -0,0 +1,341 @@
+From 9ac47f2b21391758065cc32df2d54e59a56425b8 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Mon, 1 Jan 2024 01:04:04 +0000
+Subject: [PATCH 1/4] Optionally allow the system installation of MiniUPnP to
+ be used (#1959)
+
+---
+ cmake/compile_definitions/common.cmake |  2 +-
+ cmake/dependencies/common.cmake        | 38 ++++++++++++++++++--------
+ cmake/prep/options.cmake               |  2 ++
+ 3 files changed, 29 insertions(+), 13 deletions(-)
+
+diff --git a/cmake/compile_definitions/common.cmake b/cmake/compile_definitions/common.cmake
+index f10b200..c096920 100644
+--- a/cmake/compile_definitions/common.cmake
++++ b/cmake/compile_definitions/common.cmake
+@@ -118,7 +118,7 @@ else()
+ endif()
+ 
+ list(APPEND SUNSHINE_EXTERNAL_LIBRARIES
+-        libminiupnpc-static
++        ${MINIUPNP_LIBRARIES}
+         ${CMAKE_THREAD_LIBS_INIT}
+         enet
+         opus
+diff --git a/cmake/dependencies/common.cmake b/cmake/dependencies/common.cmake
+index 9bc7c56..b26b12a 100644
+--- a/cmake/dependencies/common.cmake
++++ b/cmake/dependencies/common.cmake
+@@ -9,13 +9,33 @@ add_subdirectory(third-party/moonlight-common-c/enet)
+ # web server
+ add_subdirectory(third-party/Simple-Web-Server)
+ 
++# common dependencies
++find_package(OpenSSL REQUIRED)
++find_package(PkgConfig REQUIRED)
++find_package(Threads REQUIRED)
++pkg_check_modules(CURL REQUIRED libcurl)
++
+ # miniupnp
+-set(UPNPC_BUILD_SHARED OFF CACHE BOOL "No shared libraries")
+-set(UPNPC_BUILD_TESTS OFF CACHE BOOL "Don't build tests for miniupnpc")
+-set(UPNPC_BUILD_SAMPLE OFF CACHE BOOL "Don't build samples for miniupnpc")
+-set(UPNPC_NO_INSTALL ON CACHE BOOL "Don't install any libraries build for miniupnpc")
+-add_subdirectory(third-party/miniupnp/miniupnpc)
+-include_directories(SYSTEM third-party/miniupnp/miniupnpc/include)
++if(SUNSHINE_SYSTEM_MINIUPNP)
++    pkg_check_modules(MINIUPNP miniupnpc REQUIRED)
++
++    # Use includedir pkg-config variable rather than MINIUPNP_INCLUDE_DIRS
++    # defined above. The latter may be blank, as pkg-config sometimes omits -I
++    # flags for directories that are searched by default (e.g. /usr/include),
++    # but we need a value to append /miniupnpc to. Normally source files would
++    # prefix their #include directives with miniupnpc/, but this does not align
++    # with the directory structure of the git submodule used below.
++    pkg_get_variable(MINIUPNP_INCLUDE_DIR miniupnpc includedir)
++    include_directories(SYSTEM ${MINIUPNP_INCLUDE_DIR}/miniupnpc)
++else()
++    set(UPNPC_BUILD_SHARED OFF CACHE BOOL "No shared libraries")
++    set(UPNPC_BUILD_TESTS OFF CACHE BOOL "Don't build tests for miniupnpc")
++    set(UPNPC_BUILD_SAMPLE OFF CACHE BOOL "Don't build samples for miniupnpc")
++    set(UPNPC_NO_INSTALL ON CACHE BOOL "Don't install any libraries build for miniupnpc")
++    set(MINIUPNP_LIBRARIES libminiupnpc-static)
++    add_subdirectory(third-party/miniupnp/miniupnpc)
++    include_directories(SYSTEM third-party/miniupnp/miniupnpc/include)
++endif()
+ 
+ # ffmpeg pre-compiled binaries
+ if(WIN32)
+@@ -66,12 +86,6 @@ set(FFMPEG_LIBRARIES
+         ${HDR10_PLUS_LIBRARY}
+         ${FFMPEG_PLATFORM_LIBRARIES})
+ 
+-# common dependencies
+-find_package(OpenSSL REQUIRED)
+-find_package(PkgConfig REQUIRED)
+-find_package(Threads REQUIRED)
+-pkg_check_modules(CURL REQUIRED libcurl)
+-
+ # platform specific dependencies
+ if(WIN32)
+     include(${CMAKE_MODULE_PATH}/dependencies/windows.cmake)
+diff --git a/cmake/prep/options.cmake b/cmake/prep/options.cmake
+index 1a216d2..cb26461 100644
+--- a/cmake/prep/options.cmake
++++ b/cmake/prep/options.cmake
+@@ -4,6 +4,8 @@ option(SUNSHINE_CONFIGURE_ONLY "Configure special files only, then exit." OFF)
+ option(SUNSHINE_ENABLE_TRAY "Enable system tray icon. This option will be ignored on macOS." ON)
+ option(SUNSHINE_REQUIRE_TRAY "Require system tray icon. Fail the build if tray requirements are not met." ON)
+ 
++option(SUNSHINE_SYSTEM_MINIUPNP "Use system installation of MiniUPnP rather than the submodule." OFF)
++
+ if(APPLE)
+     option(SUNSHINE_CONFIGURE_PORTFILE
+             "Configure macOS Portfile. Recommended to use with SUNSHINE_CONFIGURE_ONLY" OFF)
+-- 
+2.43.0
+
+
+From 2056874748872e820c343556fc6ede4449e376f8 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Mon, 1 Jan 2024 16:49:00 +0000
+Subject: [PATCH 2/4] Optionally allow the system installation of
+ wayland-protocols to be used (#1966)
+
+---
+ cmake/compile_definitions/linux.cmake | 11 +++++++++--
+ cmake/macros/linux.cmake              |  8 ++++----
+ cmake/prep/options.cmake              |  1 +
+ 3 files changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/cmake/compile_definitions/linux.cmake b/cmake/compile_definitions/linux.cmake
+index f28152e..a13a823 100644
+--- a/cmake/compile_definitions/linux.cmake
++++ b/cmake/compile_definitions/linux.cmake
+@@ -127,8 +127,15 @@ endif()
+ if(WAYLAND_FOUND)
+     add_compile_definitions(SUNSHINE_BUILD_WAYLAND)
+ 
+-    GEN_WAYLAND("wayland-protocols" "unstable/xdg-output" xdg-output-unstable-v1)
+-    GEN_WAYLAND("wlr-protocols" "unstable" wlr-export-dmabuf-unstable-v1)
++    if(NOT SUNSHINE_SYSTEM_WAYLAND_PROTOCOLS)
++        set(WAYLAND_PROTOCOLS_DIR "${CMAKE_SOURCE_DIR}/third-party/wayland-protocols")
++    else()
++        pkg_get_variable(WAYLAND_PROTOCOLS_DIR wayland-protocols pkgdatadir)
++        pkg_check_modules(WAYLAND_PROTOCOLS wayland-protocols REQUIRED)
++    endif()
++
++    GEN_WAYLAND("${WAYLAND_PROTOCOLS_DIR}" "unstable/xdg-output" xdg-output-unstable-v1)
++    GEN_WAYLAND("${CMAKE_SOURCE_DIR}/third-party/wlr-protocols" "unstable" wlr-export-dmabuf-unstable-v1)
+ 
+     include_directories(
+             SYSTEM
+diff --git a/cmake/macros/linux.cmake b/cmake/macros/linux.cmake
+index d84d045..0bb5e04 100644
+--- a/cmake/macros/linux.cmake
++++ b/cmake/macros/linux.cmake
+@@ -5,17 +5,17 @@ macro(GEN_WAYLAND wayland_directory subdirectory filename)
+     file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/generated-src)
+ 
+     message("wayland-scanner private-code \
+-${CMAKE_SOURCE_DIR}/third-party/${wayland_directory}/${subdirectory}/${filename}.xml \
++${wayland_directory}/${subdirectory}/${filename}.xml \
+ ${CMAKE_BINARY_DIR}/generated-src/${filename}.c")
+     message("wayland-scanner client-header \
+-${CMAKE_SOURCE_DIR}/third-party/${wayland_directory}/${subdirectory}/${filename}.xml \
++${wayland_directory}/${subdirectory}/${filename}.xml \
+ ${CMAKE_BINARY_DIR}/generated-src/${filename}.h")
+     execute_process(
+             COMMAND wayland-scanner private-code
+-            ${CMAKE_SOURCE_DIR}/third-party/${wayland_directory}/${subdirectory}/${filename}.xml
++            ${wayland_directory}/${subdirectory}/${filename}.xml
+             ${CMAKE_BINARY_DIR}/generated-src/${filename}.c
+             COMMAND wayland-scanner client-header
+-            ${CMAKE_SOURCE_DIR}/third-party/${wayland_directory}/${subdirectory}/${filename}.xml
++            ${wayland_directory}/${subdirectory}/${filename}.xml
+             ${CMAKE_BINARY_DIR}/generated-src/${filename}.h
+ 
+             RESULT_VARIABLE EXIT_INT
+diff --git a/cmake/prep/options.cmake b/cmake/prep/options.cmake
+index cb26461..dc6b5f6 100644
+--- a/cmake/prep/options.cmake
++++ b/cmake/prep/options.cmake
+@@ -5,6 +5,7 @@ option(SUNSHINE_ENABLE_TRAY "Enable system tray icon. This option will be ignore
+ option(SUNSHINE_REQUIRE_TRAY "Require system tray icon. Fail the build if tray requirements are not met." ON)
+ 
+ option(SUNSHINE_SYSTEM_MINIUPNP "Use system installation of MiniUPnP rather than the submodule." OFF)
++option(SUNSHINE_SYSTEM_WAYLAND_PROTOCOLS "Use system installation of wayland-protocols rather than the submodule." OFF)
+ 
+ if(APPLE)
+     option(SUNSHINE_CONFIGURE_PORTFILE
+-- 
+2.43.0
+
+
+From a0a6d322c292efa67a59df7b4c71beeb17b322ce Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Mon, 1 Jan 2024 11:17:08 +0000
+Subject: [PATCH 3/4] Allow a custom FFmpeg build to be provided using CMake
+ options
+
+---
+ cmake/dependencies/common.cmake | 96 ++++++++++++++++++---------------
+ 1 file changed, 53 insertions(+), 43 deletions(-)
+
+diff --git a/cmake/dependencies/common.cmake b/cmake/dependencies/common.cmake
+index b26b12a..30069d3 100644
+--- a/cmake/dependencies/common.cmake
++++ b/cmake/dependencies/common.cmake
+@@ -38,53 +38,63 @@ else()
+ endif()
+ 
+ # ffmpeg pre-compiled binaries
+-if(WIN32)
+-    if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
+-        message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
+-    endif()
+-    set(FFMPEG_PLATFORM_LIBRARIES mfplat ole32 strmiids mfuuid vpl)
+-    set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-windows-x86_64")
+-elseif(APPLE)
+-    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-macos-x86_64")
+-    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
+-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-macos-aarch64")
+-    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc")
+-        message(FATAL_ERROR "PowerPC is not supported on macOS")
+-    else()
+-        message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
++if(NOT DEFINED FFMPEG_PREPARED_BINARIES)
++    if(WIN32)
++        if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
++            message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
++        endif()
++        set(FFMPEG_PLATFORM_LIBRARIES mfplat ole32 strmiids mfuuid vpl)
++        set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-windows-x86_64")
++    elseif(APPLE)
++        if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
++            set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-macos-x86_64")
++        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
++            set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-macos-aarch64")
++        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc")
++            message(FATAL_ERROR "PowerPC is not supported on macOS")
++        else()
++            message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
++        endif()
++    elseif(UNIX)
++        set(FFMPEG_PLATFORM_LIBRARIES va va-drm va-x11 vdpau X11)
++        if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
++            list(APPEND FFMPEG_PLATFORM_LIBRARIES mfx)
++            set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-linux-x86_64")
++            set(CPACK_DEB_PLATFORM_PACKAGE_DEPENDS "libmfx1,")
++            set(CPACK_RPM_PLATFORM_PACKAGE_REQUIRES "intel-mediasdk >= 22.3.0,")
++        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
++            set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-linux-aarch64")
++        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64")
++            set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-linux-powerpc64le")
++        else()
++            message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
++        endif()
+     endif()
+-elseif(UNIX)
+-    set(FFMPEG_PLATFORM_LIBRARIES va va-drm va-x11 vdpau X11)
+-    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+-        list(APPEND FFMPEG_PLATFORM_LIBRARIES mfx)
+-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-linux-x86_64")
+-        set(CPACK_DEB_PLATFORM_PACKAGE_DEPENDS "libmfx1,")
+-        set(CPACK_RPM_PLATFORM_PACKAGE_REQUIRES "intel-mediasdk >= 22.3.0,")
+-    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
+-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-linux-aarch64")
+-    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64")
+-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-linux-powerpc64le")
+-    else()
+-        message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
++    if(EXISTS ${FFMPEG_PREPARED_BINARIES}/lib/libhdr10plus.a)
++        set(HDR10_PLUS_LIBRARY
++                ${FFMPEG_PREPARED_BINARIES}/lib/libhdr10plus.a)
+     endif()
++    set(FFMPEG_LIBRARIES
++            ${FFMPEG_PREPARED_BINARIES}/lib/libavcodec.a
++            ${FFMPEG_PREPARED_BINARIES}/lib/libavutil.a
++            ${FFMPEG_PREPARED_BINARIES}/lib/libcbs.a
++            ${FFMPEG_PREPARED_BINARIES}/lib/libSvtAv1Enc.a
++            ${FFMPEG_PREPARED_BINARIES}/lib/libswscale.a
++            ${FFMPEG_PREPARED_BINARIES}/lib/libx264.a
++            ${FFMPEG_PREPARED_BINARIES}/lib/libx265.a
++            ${HDR10_PLUS_LIBRARY}
++            ${FFMPEG_PLATFORM_LIBRARIES})
++else()
++    set(FFMPEG_LIBRARIES
++        "${FFMPEG_PREPARED_BINARIES}/lib/libavcodec.a"
++        "${FFMPEG_PREPARED_BINARIES}/lib/libavutil.a"
++        "${FFMPEG_PREPARED_BINARIES}/lib/libcbs.a"
++        "${FFMPEG_PREPARED_BINARIES}/lib/libswscale.a"
++        ${FFMPEG_PLATFORM_LIBRARIES})
+ endif()
++
+ set(FFMPEG_INCLUDE_DIRS
+-        ${FFMPEG_PREPARED_BINARIES}/include)
+-if(EXISTS ${FFMPEG_PREPARED_BINARIES}/lib/libhdr10plus.a)
+-    set(HDR10_PLUS_LIBRARY
+-            ${FFMPEG_PREPARED_BINARIES}/lib/libhdr10plus.a)
+-endif()
+-set(FFMPEG_LIBRARIES
+-        ${FFMPEG_PREPARED_BINARIES}/lib/libavcodec.a
+-        ${FFMPEG_PREPARED_BINARIES}/lib/libavutil.a
+-        ${FFMPEG_PREPARED_BINARIES}/lib/libcbs.a
+-        ${FFMPEG_PREPARED_BINARIES}/lib/libSvtAv1Enc.a
+-        ${FFMPEG_PREPARED_BINARIES}/lib/libswscale.a
+-        ${FFMPEG_PREPARED_BINARIES}/lib/libx264.a
+-        ${FFMPEG_PREPARED_BINARIES}/lib/libx265.a
+-        ${HDR10_PLUS_LIBRARY}
+-        ${FFMPEG_PLATFORM_LIBRARIES})
++        "${FFMPEG_PREPARED_BINARIES}/include")
+ 
+ # platform specific dependencies
+ if(WIN32)
+-- 
+2.43.0
+
+
+From c871ffc1606f148e55f80415a289317f74820ddf Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Mon, 1 Jan 2024 13:34:20 +0000
+Subject: [PATCH 4/4] Move numa from general PLATFORM_LIBRARIES to
+ FFMPEG_PLATFORM_LIBRARIES
+
+It's only needed if libx265 was built with NUMA support. This support
+may be disabled in a custom FFmpeg build.
+---
+ cmake/compile_definitions/linux.cmake | 1 -
+ cmake/dependencies/common.cmake       | 2 +-
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/cmake/compile_definitions/linux.cmake b/cmake/compile_definitions/linux.cmake
+index a13a823..a2baa9c 100644
+--- a/cmake/compile_definitions/linux.cmake
++++ b/cmake/compile_definitions/linux.cmake
+@@ -223,7 +223,6 @@ list(APPEND PLATFORM_LIBRARIES
+         Boost::dynamic_linking
+         dl
+         evdev
+-        numa
+         pulse
+         pulse-simple)
+ 
+diff --git a/cmake/dependencies/common.cmake b/cmake/dependencies/common.cmake
+index 30069d3..fc86ab7 100644
+--- a/cmake/dependencies/common.cmake
++++ b/cmake/dependencies/common.cmake
+@@ -56,7 +56,7 @@ if(NOT DEFINED FFMPEG_PREPARED_BINARIES)
+             message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
+         endif()
+     elseif(UNIX)
+-        set(FFMPEG_PLATFORM_LIBRARIES va va-drm va-x11 vdpau X11)
++        set(FFMPEG_PLATFORM_LIBRARIES numa va va-drm va-x11 vdpau X11)
+         if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+             list(APPEND FFMPEG_PLATFORM_LIBRARIES mfx)
+             set(FFMPEG_PREPARED_BINARIES "${CMAKE_CURRENT_SOURCE_DIR}/third-party/ffmpeg-linux-x86_64")
+-- 
+2.43.0
+

diff --git a/net-misc/sunshine/files/sunshine-0.21.0-vaapi.patch b/net-misc/sunshine/files/sunshine-0.21.0-vaapi.patch
new file mode 100644
index 000000000000..3db5e47d44d9
--- /dev/null
+++ b/net-misc/sunshine/files/sunshine-0.21.0-vaapi.patch
@@ -0,0 +1,26 @@
+From dac48e21278339e72c9b3efb5dab63d9c10b5975 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@aura-online.co.uk>
+Date: Sun, 31 Dec 2023 20:10:48 +0000
+Subject: [PATCH 1/2] Use dl handle for libva's vaTerminate rather than actual
+ function (#1955)
+
+---
+ src/platform/linux/vaapi.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/platform/linux/vaapi.cpp b/src/platform/linux/vaapi.cpp
+index 18b0dff..77daeab 100644
+--- a/src/platform/linux/vaapi.cpp
++++ b/src/platform/linux/vaapi.cpp
+@@ -520,7 +520,7 @@ namespace va {
+     auto hwctx = (AVVAAPIDeviceContext *) ctx->hwctx;
+     auto priv = (VAAPIDevicePriv *) ctx->user_opaque;
+ 
+-    vaTerminate(hwctx->display);
++    terminate(hwctx->display);
+     close(priv->drm_fd);
+     av_freep(&priv);
+   }
+-- 
+2.43.0
+

diff --git a/net-misc/sunshine/files/sunshine-custom-ffmpeg.patch b/net-misc/sunshine/files/sunshine-custom-ffmpeg.patch
new file mode 100644
index 000000000000..94febe187c1f
--- /dev/null
+++ b/net-misc/sunshine/files/sunshine-custom-ffmpeg.patch
@@ -0,0 +1,163 @@
+From 64783df9d7ed22916894387a8ff1f73a97dbb760 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Mon, 1 Jan 2024 11:17:08 +0000
+Subject: [PATCH 1/2] Allow a custom FFmpeg build to be provided using CMake
+ options
+
+---
+ cmake/dependencies/common.cmake | 90 ++++++++++++++++++---------------
+ 1 file changed, 50 insertions(+), 40 deletions(-)
+
+diff --git a/cmake/dependencies/common.cmake b/cmake/dependencies/common.cmake
+index a1f3512..d921c1b 100644
+--- a/cmake/dependencies/common.cmake
++++ b/cmake/dependencies/common.cmake
+@@ -23,53 +23,63 @@ include_directories(SYSTEM ${MINIUPNP_INCLUDE_DIRS})
+ add_subdirectory("${CMAKE_SOURCE_DIR}/third-party/nlohmann_json")
+ 
+ # ffmpeg pre-compiled binaries
+-if(WIN32)
+-    if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
+-        message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
++if(NOT DEFINED FFMPEG_PREPARED_BINARIES)
++    if(WIN32)
++        if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
++            message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
++        endif()
++        set(FFMPEG_PLATFORM_LIBRARIES mfplat ole32 strmiids mfuuid vpl)
++        set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/windows-x86_64")
++    elseif(APPLE)
++        if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
++            set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/macos-x86_64")
++        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
++            set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/macos-aarch64")
++        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc")
++            message(FATAL_ERROR "PowerPC is not supported on macOS")
++        else()
++            message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
++        endif()
++    elseif(UNIX)
++        set(FFMPEG_PLATFORM_LIBRARIES va va-drm va-x11 vdpau X11)
++        if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
++            list(APPEND FFMPEG_PLATFORM_LIBRARIES mfx)
++            set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/linux-x86_64")
++            set(CPACK_DEB_PLATFORM_PACKAGE_DEPENDS "libmfx1,")
++            set(CPACK_RPM_PLATFORM_PACKAGE_REQUIRES "intel-mediasdk >= 22.3.0,")
++        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
++            set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/linux-aarch64")
++        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64")
++            set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/linux-powerpc64le")
++        else()
++            message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
++        endif()
+     endif()
+-    set(FFMPEG_PLATFORM_LIBRARIES mfplat ole32 strmiids mfuuid vpl)
+-    set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/windows-x86_64")
+-elseif(APPLE)
+-    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/macos-x86_64")
+-    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
+-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/macos-aarch64")
+-    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc")
+-        message(FATAL_ERROR "PowerPC is not supported on macOS")
+-    else()
+-        message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
++    if(EXISTS "${FFMPEG_PREPARED_BINARIES}/lib/libhdr10plus.a")
++        set(HDR10_PLUS_LIBRARY
++                "${FFMPEG_PREPARED_BINARIES}/lib/libhdr10plus.a")
+     endif()
+-elseif(UNIX)
+-    set(FFMPEG_PLATFORM_LIBRARIES va va-drm va-x11 vdpau X11)
+-    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+-        list(APPEND FFMPEG_PLATFORM_LIBRARIES mfx)
+-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/linux-x86_64")
+-        set(CPACK_DEB_PLATFORM_PACKAGE_DEPENDS "libmfx1,")
+-        set(CPACK_RPM_PLATFORM_PACKAGE_REQUIRES "intel-mediasdk >= 22.3.0,")
+-    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
+-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/linux-aarch64")
+-    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64")
+-        set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/linux-powerpc64le")
+-    else()
+-        message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
+-    endif()
+-endif()
+-set(FFMPEG_INCLUDE_DIRS
+-        "${FFMPEG_PREPARED_BINARIES}/include")
+-if(EXISTS "${FFMPEG_PREPARED_BINARIES}/lib/libhdr10plus.a")
+-    set(HDR10_PLUS_LIBRARY
+-            "${FFMPEG_PREPARED_BINARIES}/lib/libhdr10plus.a")
+-endif()
+-set(FFMPEG_LIBRARIES
++    set(FFMPEG_LIBRARIES
++            "${FFMPEG_PREPARED_BINARIES}/lib/libavcodec.a"
++            "${FFMPEG_PREPARED_BINARIES}/lib/libavutil.a"
++            "${FFMPEG_PREPARED_BINARIES}/lib/libcbs.a"
++            "${FFMPEG_PREPARED_BINARIES}/lib/libSvtAv1Enc.a"
++            "${FFMPEG_PREPARED_BINARIES}/lib/libswscale.a"
++            "${FFMPEG_PREPARED_BINARIES}/lib/libx264.a"
++            "${FFMPEG_PREPARED_BINARIES}/lib/libx265.a"
++            ${HDR10_PLUS_LIBRARY}
++            ${FFMPEG_PLATFORM_LIBRARIES})
++else()
++    set(FFMPEG_LIBRARIES
+         "${FFMPEG_PREPARED_BINARIES}/lib/libavcodec.a"
+         "${FFMPEG_PREPARED_BINARIES}/lib/libavutil.a"
+         "${FFMPEG_PREPARED_BINARIES}/lib/libcbs.a"
+-        "${FFMPEG_PREPARED_BINARIES}/lib/libSvtAv1Enc.a"
+         "${FFMPEG_PREPARED_BINARIES}/lib/libswscale.a"
+-        "${FFMPEG_PREPARED_BINARIES}/lib/libx264.a"
+-        "${FFMPEG_PREPARED_BINARIES}/lib/libx265.a"
+-        ${HDR10_PLUS_LIBRARY}
+         ${FFMPEG_PLATFORM_LIBRARIES})
++endif()
++
++set(FFMPEG_INCLUDE_DIRS
++        "${FFMPEG_PREPARED_BINARIES}/include")
+ 
+ # platform specific dependencies
+ if(WIN32)
+-- 
+2.43.0
+
+
+From b7a479b15216900fdc4cbc5587d8fd90e366f5a5 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Mon, 1 Jan 2024 13:34:20 +0000
+Subject: [PATCH 2/2] Move numa from general PLATFORM_LIBRARIES to
+ FFMPEG_PLATFORM_LIBRARIES
+
+It's only needed if libx265 was built with NUMA support. This support
+may be disabled in a custom FFmpeg build.
+---
+ cmake/compile_definitions/linux.cmake | 1 -
+ cmake/dependencies/common.cmake       | 2 +-
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/cmake/compile_definitions/linux.cmake b/cmake/compile_definitions/linux.cmake
+index 613a090..e1fda2c 100644
+--- a/cmake/compile_definitions/linux.cmake
++++ b/cmake/compile_definitions/linux.cmake
+@@ -242,7 +242,6 @@ list(APPEND PLATFORM_LIBRARIES
+         Boost::dynamic_linking
+         dl
+         evdev
+-        numa
+         pulse
+         pulse-simple)
+ 
+diff --git a/cmake/dependencies/common.cmake b/cmake/dependencies/common.cmake
+index d921c1b..23695e3 100644
+--- a/cmake/dependencies/common.cmake
++++ b/cmake/dependencies/common.cmake
+@@ -41,7 +41,7 @@ if(NOT DEFINED FFMPEG_PREPARED_BINARIES)
+             message(FATAL_ERROR "Unsupported system processor:" ${CMAKE_SYSTEM_PROCESSOR})
+         endif()
+     elseif(UNIX)
+-        set(FFMPEG_PLATFORM_LIBRARIES va va-drm va-x11 vdpau X11)
++        set(FFMPEG_PLATFORM_LIBRARIES numa va va-drm va-x11 vdpau X11)
+         if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+             list(APPEND FFMPEG_PLATFORM_LIBRARIES mfx)
+             set(FFMPEG_PREPARED_BINARIES "${CMAKE_SOURCE_DIR}/third-party/build-deps/ffmpeg/linux-x86_64")
+-- 
+2.43.0
+

diff --git a/net-misc/sunshine/files/sunshine-system-json.patch b/net-misc/sunshine/files/sunshine-system-json.patch
new file mode 100644
index 000000000000..62e405e8546f
--- /dev/null
+++ b/net-misc/sunshine/files/sunshine-system-json.patch
@@ -0,0 +1,56 @@
+From ec7c960954bba6a3aab03ff74fdbd3bc89948d4c Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Sat, 17 Feb 2024 17:02:45 +0000
+Subject: [PATCH] Optionally allow the system installation of nlohmann_json to
+ be used
+
+---
+ cmake/compile_definitions/common.cmake | 2 +-
+ cmake/dependencies/common.cmake        | 8 +++++++-
+ cmake/prep/options.cmake               | 1 +
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/compile_definitions/common.cmake b/cmake/compile_definitions/common.cmake
+index 94f1ac5..c65930c 100644
+--- a/cmake/compile_definitions/common.cmake
++++ b/cmake/compile_definitions/common.cmake
+@@ -135,4 +135,4 @@ list(APPEND SUNSHINE_EXTERNAL_LIBRARIES
+         ${OPENSSL_LIBRARIES}
+         ${CURL_LIBRARIES}
+         ${PLATFORM_LIBRARIES}
+-        nlohmann_json::nlohmann_json)
++        ${JSON_LIBRARIES})
+diff --git a/cmake/dependencies/common.cmake b/cmake/dependencies/common.cmake
+index a1f3512..849afe7 100644
+--- a/cmake/dependencies/common.cmake
++++ b/cmake/dependencies/common.cmake
+@@ -20,7 +20,13 @@ pkg_check_modules(MINIUPNP miniupnpc REQUIRED)
+ include_directories(SYSTEM ${MINIUPNP_INCLUDE_DIRS})
+ 
+ # nlohmann_json
+-add_subdirectory("${CMAKE_SOURCE_DIR}/third-party/nlohmann_json")
++if(NOT SUNSHINE_SYSTEM_NLOHMANN_JSON)
++    add_subdirectory("${CMAKE_SOURCE_DIR}/third-party/nlohmann_json")
++    set(JSON_LIBRARIES nlohmann_json::nlohmann_json)
++else()
++    pkg_check_modules(NLOHMANN_JSON nlohmann_json REQUIRED IMPORTED_TARGET)
++    set(JSON_LIBRARIES PkgConfig::NLOHMANN_JSON)
++endif()
+ 
+ # ffmpeg pre-compiled binaries
+ if(WIN32)
+diff --git a/cmake/prep/options.cmake b/cmake/prep/options.cmake
+index 7a8d728..8a7c2f6 100644
+--- a/cmake/prep/options.cmake
++++ b/cmake/prep/options.cmake
+@@ -4,6 +4,7 @@ option(SUNSHINE_CONFIGURE_ONLY "Configure special files only, then exit." OFF)
+ option(SUNSHINE_ENABLE_TRAY "Enable system tray icon. This option will be ignored on macOS." ON)
+ option(SUNSHINE_REQUIRE_TRAY "Require system tray icon. Fail the build if tray requirements are not met." ON)
+ 
++option(SUNSHINE_SYSTEM_NLOHMANN_JSON "Use system installation of nlohmann_json rather than the submodule." OFF)
+ option(SUNSHINE_SYSTEM_WAYLAND_PROTOCOLS "Use system installation of wayland-protocols rather than the submodule." OFF)
+ 
+ if(APPLE)
+-- 
+2.43.0
+

diff --git a/net-misc/sunshine/metadata.xml b/net-misc/sunshine/metadata.xml
new file mode 100644
index 000000000000..11dc749f56cf
--- /dev/null
+++ b/net-misc/sunshine/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<maintainer type="person">
+		<email>chewi@gentoo.org</email>
+		<name>James Le Cuirot</name>
+	</maintainer>
+	<upstream>
+		<remote-id type="github">LizardByte/Sunshine</remote-id>
+		<bugs-to>https://bugs.gentoo.org</bugs-to>
+	</upstream>
+	<use>
+		<flag name="cuda">Enable accelerated video encoding on NVIDIA hardware</flag>
+		<flag name="libdrm">Enable video encoding via <pkg>x11-libs/libdrm</pkg></flag>
+		<flag name="svt-av1">Enables software AV1 encoding via <pkg>media-libs/svt-av1</pkg></flag>
+		<flag name="trayicon">Enable system tray icon</flag>
+		<flag name="x264">Enable software H.264 encoding via <pkg>media-libs/x264</pkg></flag>
+		<flag name="x265">Enable software HEVC encoding via <pkg>media-libs/x265</pkg></flag>
+	</use>
+</pkgmetadata>

diff --git a/net-misc/sunshine/sunshine-0.21.0.ebuild b/net-misc/sunshine/sunshine-0.21.0.ebuild
new file mode 100644
index 000000000000..f7a4308dec1f
--- /dev/null
+++ b/net-misc/sunshine/sunshine-0.21.0.ebuild
@@ -0,0 +1,374 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# These don't necessarily have to align with the upstream release.
+# We do have nv-codec-headers packaged, but Sunshine is very picky here.
+BUILD_DEPS_COMMIT="2aafe061cd52a944cb3b5f86d1f25e9ad2a19bec"
+ENET_COMMIT="c6bb0e50118d08252eee308de8412751218442d6"
+MOONLIGHT_COMMIT="6e9ed871bc3e013386c775b2ee7d31deb1151068"
+NANORS_COMMIT="e9e242e98e27037830490b2a752895ca68f75f8b"
+NV_CODEC_COMMIT="22441b505d9d9afc1e3002290820909846c24bdc"
+TRAY_COMMIT="e08bdbe5aa7de0ad9c0ce36257016e07c7e6e2c0"
+SWS_COMMIT="27b41f5ee154cca0fce4fe2955dd886d04e3a4ed"
+WLRP_COMMIT="4264185db3b7e961e7f157e1cc4fd0ab75137568"
+FFMPEG_VERSION="6.1.1"
+
+# To make the node-modules tarball:
+# PV=
+# git fetch
+# git checkout v$PV
+# rm -rf node_modules
+# npm install
+# XZ_OPT=-9 tar --xform="s:^:Sunshine-$PV/:" -Jcf /var/cache/distfiles/sunshine-node-modules-$PV.tar.xz node_modules
+
+if [[ ${PV} = 9999* ]]; then
+	inherit git-r3
+else
+	SRC_URI="
+		https://github.com/LizardByte/Sunshine/archive/refs/tags/v${PV}.tar.gz
+			-> ${P}.tar.gz
+		https://github.com/LizardByte/build-deps/archive/${BUILD_DEPS_COMMIT}.tar.gz
+			-> LizardByte-build-deps-${BUILD_DEPS_COMMIT}.tar.gz
+		https://github.com/cgutman/enet/archive/${ENET_COMMIT}.tar.gz
+			-> moonlight-enet-${ENET_COMMIT}.tar.gz
+		https://github.com/moonlight-stream/moonlight-common-c/archive/${MOONLIGHT_COMMIT}.tar.gz
+			-> moonlight-common-c-${MOONLIGHT_COMMIT}.tar.gz
+		https://github.com/sleepybishop/nanors/archive/${NANORS_COMMIT}.tar.gz
+			-> nanors-${NANORS_COMMIT}.tar.gz
+		https://github.com/FFmpeg/nv-codec-headers/archive/${NV_CODEC_COMMIT}.tar.gz
+			-> nv-codec-headers-${NV_CODEC_COMMIT}.tar.gz
+		https://github.com/LizardByte/tray/archive/${TRAY_COMMIT}.tar.gz
+			-> LizardByte-tray-${TRAY_COMMIT}.tar.gz
+		https://gitlab.com/eidheim/Simple-Web-Server/-/archive/${SWS_COMMIT}/Simple-Web-Server-${SWS_COMMIT}.tar.bz2
+		https://gitlab.freedesktop.org/wlroots/wlr-protocols/-/archive/${WLRP_COMMIT}/wlr-protocols-${WLRP_COMMIT}.tar.bz2
+		https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.xz
+		https://dev.gentoo.org/~chewi/distfiles/${PN}-node-modules-${PV}.tar.xz
+	"
+	KEYWORDS="~amd64 ~arm64"
+	S="${WORKDIR}/Sunshine-${PV}"
+fi
+
+inherit cmake fcaps flag-o-matic toolchain-funcs udev xdg
+
+DESCRIPTION="Self-hosted game stream host for Moonlight"
+HOMEPAGE="https://github.com/LizardByte/Sunshine"
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="cuda debug libdrm svt-av1 trayicon vaapi wayland X x264 x265"
+
+# Strings for CPU features in the useflag[:configure_option] form
+# if :configure_option isn't set, it will use 'useflag' as configure option
+ARM_CPU_FEATURES=(
+	cpu_flags_arm_thumb:armv5te
+	cpu_flags_arm_v6:armv6
+	cpu_flags_arm_thumb2:armv6t2
+	cpu_flags_arm_neon:neon
+	cpu_flags_arm_vfp:vfp
+	cpu_flags_arm_vfpv3:vfpv3
+	cpu_flags_arm_v8:armv8
+)
+ARM_CPU_REQUIRED_USE="
+	arm64? ( cpu_flags_arm_v8 )
+	cpu_flags_arm_v8? ( cpu_flags_arm_vfpv3 cpu_flags_arm_neon )
+	cpu_flags_arm_neon? (
+		cpu_flags_arm_vfp
+		arm? ( cpu_flags_arm_thumb2 )
+	)
+	cpu_flags_arm_vfpv3? ( cpu_flags_arm_vfp )
+	cpu_flags_arm_thumb2? ( cpu_flags_arm_v6 )
+	cpu_flags_arm_v6? (
+		arm? ( cpu_flags_arm_thumb )
+	)
+"
+PPC_CPU_FEATURES=( cpu_flags_ppc_altivec:altivec cpu_flags_ppc_vsx:vsx cpu_flags_ppc_vsx2:power8 )
+PPC_CPU_REQUIRED_USE="
+	cpu_flags_ppc_vsx? ( cpu_flags_ppc_altivec )
+	cpu_flags_ppc_vsx2? ( cpu_flags_ppc_vsx )
+"
+X86_CPU_FEATURES_RAW=( 3dnow:amd3dnow 3dnowext:amd3dnowext aes:aesni avx:avx avx2:avx2 fma3:fma3 fma4:fma4 mmx:mmx
+					   mmxext:mmxext sse:sse sse2:sse2 sse3:sse3 ssse3:ssse3 sse4_1:sse4 sse4_2:sse42 xop:xop )
+X86_CPU_FEATURES=( ${X86_CPU_FEATURES_RAW[@]/#/cpu_flags_x86_} )
+X86_CPU_REQUIRED_USE="
+	cpu_flags_x86_avx2? ( cpu_flags_x86_avx )
+	cpu_flags_x86_fma4? ( cpu_flags_x86_avx )
+	cpu_flags_x86_fma3? ( cpu_flags_x86_avx )
+	cpu_flags_x86_xop?  ( cpu_flags_x86_avx )
+	cpu_flags_x86_avx?  ( cpu_flags_x86_sse4_2 )
+	cpu_flags_x86_aes? ( cpu_flags_x86_sse4_2 )
+	cpu_flags_x86_sse4_2?  ( cpu_flags_x86_sse4_1 )
+	cpu_flags_x86_sse4_1?  ( cpu_flags_x86_ssse3 )
+	cpu_flags_x86_ssse3?  ( cpu_flags_x86_sse3 )
+	cpu_flags_x86_sse3?  ( cpu_flags_x86_sse2 )
+	cpu_flags_x86_sse2?  ( cpu_flags_x86_sse )
+	cpu_flags_x86_sse?  ( cpu_flags_x86_mmxext )
+	cpu_flags_x86_mmxext?  ( cpu_flags_x86_mmx )
+	cpu_flags_x86_3dnowext?  ( cpu_flags_x86_3dnow )
+	cpu_flags_x86_3dnow?  ( cpu_flags_x86_mmx )
+"
+
+CPU_FEATURES_MAP=(
+	${ARM_CPU_FEATURES[@]}
+	${PPC_CPU_FEATURES[@]}
+	${X86_CPU_FEATURES[@]}
+)
+IUSE="${IUSE}
+	${CPU_FEATURES_MAP[@]%:*}"
+
+CPU_REQUIRED_USE="
+	${ARM_CPU_REQUIRED_USE}
+	${PPC_CPU_REQUIRED_USE}
+	${X86_CPU_REQUIRED_USE}
+"
+
+REQUIRED_USE="
+	${CPU_REQUIRED_USE}
+	|| ( cuda libdrm wayland X )
+"
+
+CDEPEND="
+	dev-libs/boost:=[nls]
+	dev-libs/libevdev
+	dev-libs/openssl:=
+	media-libs/libpulse
+	media-libs/opus
+	net-libs/miniupnpc:=
+	net-misc/curl
+	libdrm? (
+		sys-libs/libcap
+		x11-libs/libdrm
+	)
+	svt-av1? ( media-libs/svt-av1 )
+	trayicon? (
+		dev-libs/libayatana-appindicator
+		x11-libs/libnotify
+	)
+	vaapi? ( media-libs/libva:=[wayland?,X?] )
+	wayland? ( dev-libs/wayland )
+	X? ( x11-libs/libX11 )
+	x264? ( media-libs/x264:= )
+	x265? ( media-libs/x265:= )
+"
+
+RDEPEND="
+	${CDEPEND}
+	media-libs/mesa[vaapi?]
+	X? (
+		x11-libs/libxcb
+		x11-libs/libXfixes
+		x11-libs/libXrandr
+		x11-libs/libXtst
+	)
+"
+
+DEPEND="
+	${CDEPEND}
+	media-libs/amf-headers
+	wayland? ( dev-libs/wayland-protocols )
+"
+
+BDEPEND="
+	net-libs/nodejs[npm]
+	virtual/pkgconfig
+	cpu_flags_x86_mmx? ( || ( >=dev-lang/nasm-2.13 >=dev-lang/yasm-1.3 ) )
+	cuda? ( dev-util/nvidia-cuda-toolkit )
+	wayland? ( dev-util/wayland-scanner )
+"
+
+PATCHES=(
+	"${FILESDIR}"/${P}-vaapi.patch
+	"${FILESDIR}"/${P}-no-x11.patch
+	"${FILESDIR}"/${P}-system-deps.patch
+)
+
+# Make this mess a bit simpler.
+CMAKE_IN_SOURCE_BUILD=1
+
+# Make npm behave.
+export npm_config_audit=false
+export npm_config_color=false
+export npm_config_foreground_scripts=true
+export npm_config_loglevel=verbose
+export npm_config_progress=false
+export npm_config_save=false
+
+src_unpack() {
+	if [[ ${PV} = 9999* ]]; then
+		local EGIT_REPO_URI="https://github.com/LizardByte/build-deps.git"
+		local EGIT_SUBMODULES=( '-*' )
+		local EGIT_CHECKOUT_DIR=${WORKDIR}/build-deps
+		git-r3_src_unpack
+
+		# Use upstream server like our ffmpeg package does, not GitHub.
+		local EGIT_REPO_URI="https://git.ffmpeg.org/ffmpeg.git"
+		local EGIT_SUBMODULES=( '-*' )
+		local EGIT_CHECKOUT_DIR=${EGIT_CHECKOUT_DIR}/ffmpeg_sources/ffmpeg
+		local EGIT_COMMIT=$(git --git-dir=build-deps/.git rev-parse HEAD:ffmpeg_sources/ffmpeg)
+		local EGIT_BRANCH=release/$(ver_cut 1-2 ${FFMPEG_VERSION})
+		git-r3_src_unpack
+
+		local EGIT_REPO_URI="https://github.com/LizardByte/Sunshine.git"
+		local EGIT_SUBMODULES=(
+			third-party/{moonlight-common-c{,/enet},nanors,nv-codec-headers,tray,Simple-Web-Server,wlr-protocols}
+		)
+		unset EGIT_CHECKOUT_DIR EGIT_COMMIT EGIT_BRANCH
+		git-r3_src_unpack
+
+		# This downloads things so must go in src_unpack to avoid the sandbox.
+		cd "${S}" || die
+		npm install || die
+	else
+		default
+		ln -snf build-deps-${BUILD_DEPS_COMMIT} build-deps || die
+		find moonlight-common-c-${MOONLIGHT_COMMIT} "${S}"/third-party build-deps/ffmpeg_sources \
+			-mindepth 1 -type d -empty -delete || die
+		ln -snf ../enet-${ENET_COMMIT} moonlight-common-c-${MOONLIGHT_COMMIT}/enet || die
+		ln -snf ../../moonlight-common-c-${MOONLIGHT_COMMIT} "${S}"/third-party/moonlight-common-c || die
+		ln -snf ../../nanors-${NANORS_COMMIT} "${S}"/third-party/nanors || die
+		ln -snf ../../nv-codec-headers-${NV_CODEC_COMMIT} "${S}"/third-party/nv-codec-headers || die
+		ln -snf ../../tray-${TRAY_COMMIT} "${S}"/third-party/tray || die
+		ln -snf ../../Simple-Web-Server-${SWS_COMMIT} "${S}"/third-party/Simple-Web-Server || die
+		ln -snf ../../wlr-protocols-${WLRP_COMMIT} "${S}"/third-party/wlr-protocols || die
+		ln -snf ../../ffmpeg-${FFMPEG_VERSION} build-deps/ffmpeg_sources/ffmpeg || die
+	fi
+}
+
+src_prepare() {
+	# Apply general ffmpeg patches.
+	cd "${WORKDIR}"/build-deps/ffmpeg_sources/ffmpeg || die
+	eapply "${WORKDIR}"/build-deps/ffmpeg_patches/ffmpeg/*.patch
+
+	# Copy ffmpeg sources because CBS build applies extra patches.
+	cp -a ./ "${WORKDIR}"/ffmpeg-build || die
+
+	cd "${S}" || die
+	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_src_prepare
+	default_src_prepare() { :; } # Hack to avoid double patching! :(
+	CMAKE_USE_DIR="${S}" cmake_src_prepare
+}
+
+src_configure() {
+	local myconf=(
+		--prefix="${S}"/third-party/ffmpeg
+		--cc="$(tc-getCC)"
+		--cxx="$(tc-getCXX)"
+		--ar="$(tc-getAR)"
+		--nm="$(tc-getNM)"
+		--strip="$(tc-getSTRIP)"
+		--ranlib="$(tc-getRANLIB)"
+		--pkg-config="$(tc-getPKG_CONFIG)"
+		--optflags="${CFLAGS}"
+		--disable-all
+		--disable-autodetect
+		--disable-error-resilience
+		--disable-everything
+		--disable-faan
+		--disable-iconv
+		--disable-network
+		--disable-optimizations
+		--disable-stripping
+		--enable-amf
+		--enable-avcodec
+		--enable-ffnvcodec
+		--enable-gpl
+		--enable-nvenc
+		--enable-static
+		--enable-swscale
+		--enable-v4l2_m2m
+		$(use_enable cuda)
+		$(use_enable cuda cuda_llvm)
+		$(use_enable svt-av1 libsvtav1)
+		$(use_enable vaapi)
+		$(use_enable x264 libx264)
+		$(use_enable x265 libx265)
+		$(usex svt-av1 --enable-encoder=libsvtav1 "")
+		$(usex vaapi --enable-encoder=h264_vaapi,hevc_vaapi,av1_vaapi "")
+		$(usex x264 --enable-encoder=libx264 "")
+		$(usex x265 --enable-encoder=libx265 "")
+		--enable-encoder=h264_amf,hevc_amf,av1_amf
+		--enable-encoder=h264_nvenc,hevc_nvenc,av1_nvenc
+		--enable-encoder=h264_v4l2m2m,hevc_v4l2m2m
+	)
+
+	# CPU features
+	for i in "${CPU_FEATURES_MAP[@]}" ; do
+		use ${i%:*} || myconf+=( --disable-${i#*:} )
+	done
+	# Bug #917277, #917278
+	myconf+=( --disable-dotprod --disable-i8mm )
+
+	# Try to get cpu type based on CFLAGS.
+	# Bug #172723
+	# We need to do this so that features of that CPU will be better used
+	# If they contain an unknown CPU it will not hurt since ffmpeg's configure
+	# will just ignore it.
+	for i in $(get-flag mcpu) $(get-flag march) ; do
+		[[ ${i} = native ]] && i="host" # bug #273421
+		myconf+=( --cpu=${i} )
+		break
+	done
+
+	# cross compile support
+	if tc-is-cross-compiler ; then
+		myconf+=( --enable-cross-compile --arch=$(tc-arch-kernel) --cross-prefix=${CHOST}- --host-cc="$(tc-getBUILD_CC)" )
+		case ${CHOST} in
+			*mingw32*)
+				myconf+=( --target-os=mingw32 )
+				;;
+			*linux*)
+				myconf+=( --target-os=linux )
+				;;
+		esac
+	fi
+
+	cd "${WORKDIR}"/ffmpeg-build || die
+	echo ./configure "${myconf[@]}"
+	./configure "${myconf[@]}" || die
+
+	local mycmakeargs=(
+		-DBUILD_SHARED_LIBS=no
+		-DCMAKE_INSTALL_PREFIX="${S}"/third-party/ffmpeg
+		$(usex arm64 -DCROSS_COMPILE_ARM=yes "")
+		$(usex ppc64 -DCROSS_COMPILE_PPC=yes "")
+	)
+	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_src_configure
+
+	local mycmakeargs=(
+		-DCMAKE_DISABLE_FIND_PACKAGE_Git=yes
+		-DFFMPEG_PLATFORM_LIBRARIES="$(usex svt-av1 SvtAv1Enc '');$(usex vaapi 'va;va-drm' '');$(usev x264);$(usev x265)"
+		-DFFMPEG_PREPARED_BINARIES="${S}"/third-party/ffmpeg
+		-DSUNSHINE_ASSETS_DIR=share/${PN}
+		-DSUNSHINE_ENABLE_CUDA=$(usex cuda)
+		-DSUNSHINE_ENABLE_DRM=$(usex libdrm)
+		-DSUNSHINE_ENABLE_WAYLAND=$(usex wayland)
+		-DSUNSHINE_ENABLE_X11=$(usex X)
+		-DSUNSHINE_ENABLE_TRAY=$(usex trayicon)
+		-DSUNSHINE_REQUIRE_TRAY=$(usex trayicon)
+		-DSUNSHINE_SYSTEM_MINIUPNP=yes
+		-DSUNSHINE_SYSTEM_WAYLAND_PROTOCOLS=yes
+	)
+	CMAKE_USE_DIR="${S}" cmake_src_configure
+}
+
+src_compile() {
+	emake -C "${WORKDIR}"/ffmpeg-build V=1
+	emake -C "${WORKDIR}"/ffmpeg-build V=1 install
+	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_src_compile
+	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_build install
+	CMAKE_USE_DIR="${S}" npm_config_offline=1 cmake_src_compile
+}
+
+pkg_postinst() {
+	udev_reload
+	xdg_pkg_postinst
+	use libdrm && fcaps cap_sys_admin+p usr/bin/"$(readlink "${EROOT}"/usr/bin/${PN})"
+
+	elog "At upstream's request, please report any issues to https://bugs.gentoo.org"
+	elog "rather than going directly to them."
+}
+
+pkg_postrm() {
+	udev_reload
+	xdg_pkg_postrm
+}

diff --git a/net-misc/sunshine/sunshine-9999.ebuild b/net-misc/sunshine/sunshine-9999.ebuild
new file mode 100644
index 000000000000..2a51de91c8f3
--- /dev/null
+++ b/net-misc/sunshine/sunshine-9999.ebuild
@@ -0,0 +1,377 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# These don't necessarily have to align with the upstream release.
+# We do have nv-codec-headers packaged, but Sunshine is very picky here.
+BUILD_DEPS_COMMIT="2aafe061cd52a944cb3b5f86d1f25e9ad2a19bec"
+ENET_COMMIT="c6bb0e50118d08252eee308de8412751218442d6"
+MOONLIGHT_COMMIT="6e9ed871bc3e013386c775b2ee7d31deb1151068"
+NANORS_COMMIT="e9e242e98e27037830490b2a752895ca68f75f8b"
+NV_CODEC_COMMIT="22441b505d9d9afc1e3002290820909846c24bdc"
+TRAY_COMMIT="e08bdbe5aa7de0ad9c0ce36257016e07c7e6e2c0"
+SWS_COMMIT="27b41f5ee154cca0fce4fe2955dd886d04e3a4ed"
+WLRP_COMMIT="4264185db3b7e961e7f157e1cc4fd0ab75137568"
+FFMPEG_VERSION="6.1.1"
+
+# To make the node-modules tarball:
+# PV=
+# git fetch
+# git checkout v$PV
+# rm -rf node_modules
+# npm install
+# XZ_OPT=-9 tar --xform="s:^:Sunshine-$PV/:" -Jcf /var/cache/distfiles/sunshine-node-modules-$PV.tar.xz node_modules
+
+if [[ ${PV} = 9999* ]]; then
+	inherit git-r3
+else
+	SRC_URI="
+		https://github.com/LizardByte/Sunshine/archive/refs/tags/v${PV}.tar.gz
+			-> ${P}.tar.gz
+		https://github.com/LizardByte/build-deps/archive/${BUILD_DEPS_COMMIT}.tar.gz
+			-> LizardByte-build-deps-${BUILD_DEPS_COMMIT}.tar.gz
+		https://github.com/cgutman/enet/archive/${ENET_COMMIT}.tar.gz
+			-> moonlight-enet-${ENET_COMMIT}.tar.gz
+		https://github.com/moonlight-stream/moonlight-common-c/archive/${MOONLIGHT_COMMIT}.tar.gz
+			-> moonlight-common-c-${MOONLIGHT_COMMIT}.tar.gz
+		https://github.com/sleepybishop/nanors/archive/${NANORS_COMMIT}.tar.gz
+			-> nanors-${NANORS_COMMIT}.tar.gz
+		https://github.com/FFmpeg/nv-codec-headers/archive/${NV_CODEC_COMMIT}.tar.gz
+			-> nv-codec-headers-${NV_CODEC_COMMIT}.tar.gz
+		https://github.com/LizardByte/tray/archive/${TRAY_COMMIT}.tar.gz
+			-> LizardByte-tray-${TRAY_COMMIT}.tar.gz
+		https://gitlab.com/eidheim/Simple-Web-Server/-/archive/${SWS_COMMIT}/Simple-Web-Server-${SWS_COMMIT}.tar.bz2
+		https://gitlab.freedesktop.org/wlroots/wlr-protocols/-/archive/${WLRP_COMMIT}/wlr-protocols-${WLRP_COMMIT}.tar.bz2
+		https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.xz
+		https://dev.gentoo.org/~chewi/distfiles/${PN}-node-modules-${PV}.tar.xz
+	"
+	KEYWORDS="~amd64 ~arm64"
+	S="${WORKDIR}/Sunshine-${PV}"
+fi
+
+inherit cmake fcaps flag-o-matic systemd toolchain-funcs udev xdg
+
+DESCRIPTION="Self-hosted game stream host for Moonlight"
+HOMEPAGE="https://github.com/LizardByte/Sunshine"
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="cuda debug libdrm svt-av1 trayicon vaapi wayland X x264 x265"
+
+# Strings for CPU features in the useflag[:configure_option] form
+# if :configure_option isn't set, it will use 'useflag' as configure option
+ARM_CPU_FEATURES=(
+	cpu_flags_arm_thumb:armv5te
+	cpu_flags_arm_v6:armv6
+	cpu_flags_arm_thumb2:armv6t2
+	cpu_flags_arm_neon:neon
+	cpu_flags_arm_vfp:vfp
+	cpu_flags_arm_vfpv3:vfpv3
+	cpu_flags_arm_v8:armv8
+)
+ARM_CPU_REQUIRED_USE="
+	arm64? ( cpu_flags_arm_v8 )
+	cpu_flags_arm_v8? ( cpu_flags_arm_vfpv3 cpu_flags_arm_neon )
+	cpu_flags_arm_neon? (
+		cpu_flags_arm_vfp
+		arm? ( cpu_flags_arm_thumb2 )
+	)
+	cpu_flags_arm_vfpv3? ( cpu_flags_arm_vfp )
+	cpu_flags_arm_thumb2? ( cpu_flags_arm_v6 )
+	cpu_flags_arm_v6? (
+		arm? ( cpu_flags_arm_thumb )
+	)
+"
+PPC_CPU_FEATURES=( cpu_flags_ppc_altivec:altivec cpu_flags_ppc_vsx:vsx cpu_flags_ppc_vsx2:power8 )
+PPC_CPU_REQUIRED_USE="
+	cpu_flags_ppc_vsx? ( cpu_flags_ppc_altivec )
+	cpu_flags_ppc_vsx2? ( cpu_flags_ppc_vsx )
+"
+X86_CPU_FEATURES_RAW=( 3dnow:amd3dnow 3dnowext:amd3dnowext aes:aesni avx:avx avx2:avx2 fma3:fma3 fma4:fma4 mmx:mmx
+					   mmxext:mmxext sse:sse sse2:sse2 sse3:sse3 ssse3:ssse3 sse4_1:sse4 sse4_2:sse42 xop:xop )
+X86_CPU_FEATURES=( ${X86_CPU_FEATURES_RAW[@]/#/cpu_flags_x86_} )
+X86_CPU_REQUIRED_USE="
+	cpu_flags_x86_avx2? ( cpu_flags_x86_avx )
+	cpu_flags_x86_fma4? ( cpu_flags_x86_avx )
+	cpu_flags_x86_fma3? ( cpu_flags_x86_avx )
+	cpu_flags_x86_xop?  ( cpu_flags_x86_avx )
+	cpu_flags_x86_avx?  ( cpu_flags_x86_sse4_2 )
+	cpu_flags_x86_aes? ( cpu_flags_x86_sse4_2 )
+	cpu_flags_x86_sse4_2?  ( cpu_flags_x86_sse4_1 )
+	cpu_flags_x86_sse4_1?  ( cpu_flags_x86_ssse3 )
+	cpu_flags_x86_ssse3?  ( cpu_flags_x86_sse3 )
+	cpu_flags_x86_sse3?  ( cpu_flags_x86_sse2 )
+	cpu_flags_x86_sse2?  ( cpu_flags_x86_sse )
+	cpu_flags_x86_sse?  ( cpu_flags_x86_mmxext )
+	cpu_flags_x86_mmxext?  ( cpu_flags_x86_mmx )
+	cpu_flags_x86_3dnowext?  ( cpu_flags_x86_3dnow )
+	cpu_flags_x86_3dnow?  ( cpu_flags_x86_mmx )
+"
+
+CPU_FEATURES_MAP=(
+	${ARM_CPU_FEATURES[@]}
+	${PPC_CPU_FEATURES[@]}
+	${X86_CPU_FEATURES[@]}
+)
+IUSE="${IUSE}
+	${CPU_FEATURES_MAP[@]%:*}"
+
+CPU_REQUIRED_USE="
+	${ARM_CPU_REQUIRED_USE}
+	${PPC_CPU_REQUIRED_USE}
+	${X86_CPU_REQUIRED_USE}
+"
+
+REQUIRED_USE="
+	${CPU_REQUIRED_USE}
+	|| ( cuda libdrm wayland X )
+"
+
+CDEPEND="
+	dev-libs/boost:=[nls]
+	dev-libs/libevdev
+	dev-libs/openssl:=
+	media-libs/libpulse
+	media-libs/opus
+	net-libs/miniupnpc:=
+	net-misc/curl
+	libdrm? (
+		sys-libs/libcap
+		x11-libs/libdrm
+	)
+	svt-av1? ( media-libs/svt-av1 )
+	trayicon? (
+		dev-libs/libayatana-appindicator
+		x11-libs/libnotify
+	)
+	vaapi? ( media-libs/libva:=[wayland?,X?] )
+	wayland? ( dev-libs/wayland )
+	X? ( x11-libs/libX11 )
+	x264? ( media-libs/x264:= )
+	x265? ( media-libs/x265:= )
+"
+
+RDEPEND="
+	${CDEPEND}
+	media-libs/mesa[vaapi?]
+	X? (
+		x11-libs/libxcb
+		x11-libs/libXfixes
+		x11-libs/libXrandr
+		x11-libs/libXtst
+	)
+"
+
+DEPEND="
+	${CDEPEND}
+	dev-cpp/nlohmann_json
+	media-libs/amf-headers
+	wayland? ( dev-libs/wayland-protocols )
+"
+
+BDEPEND="
+	net-libs/nodejs[npm]
+	virtual/pkgconfig
+	cpu_flags_x86_mmx? ( || ( >=dev-lang/nasm-2.13 >=dev-lang/yasm-1.3 ) )
+	cuda? ( dev-util/nvidia-cuda-toolkit )
+	wayland? ( dev-util/wayland-scanner )
+"
+
+PATCHES=(
+	"${FILESDIR}"/${PN}-custom-ffmpeg.patch
+	"${FILESDIR}"/${PN}-system-json.patch
+)
+
+# Make this mess a bit simpler.
+CMAKE_IN_SOURCE_BUILD=1
+
+# Make npm behave.
+export npm_config_audit=false
+export npm_config_color=false
+export npm_config_foreground_scripts=true
+export npm_config_loglevel=verbose
+export npm_config_progress=false
+export npm_config_save=false
+
+src_unpack() {
+	if [[ ${PV} = 9999* ]]; then
+		local EGIT_REPO_URI="https://github.com/LizardByte/build-deps.git"
+		local EGIT_SUBMODULES=( '-*' )
+		local EGIT_CHECKOUT_DIR=${WORKDIR}/build-deps
+		git-r3_src_unpack
+
+		# Use upstream server like our ffmpeg package does, not GitHub.
+		local EGIT_REPO_URI="https://git.ffmpeg.org/ffmpeg.git"
+		local EGIT_SUBMODULES=( '-*' )
+		local EGIT_CHECKOUT_DIR=${EGIT_CHECKOUT_DIR}/ffmpeg_sources/ffmpeg
+		local EGIT_COMMIT=$(git --git-dir=build-deps/.git rev-parse HEAD:ffmpeg_sources/ffmpeg)
+		local EGIT_BRANCH=release/$(ver_cut 1-2 ${FFMPEG_VERSION})
+		git-r3_src_unpack
+
+		local EGIT_REPO_URI="https://github.com/LizardByte/Sunshine.git"
+		local EGIT_SUBMODULES=(
+			third-party/{moonlight-common-c{,/enet},nanors,nv-codec-headers,tray,Simple-Web-Server,wlr-protocols}
+		)
+		unset EGIT_CHECKOUT_DIR EGIT_COMMIT EGIT_BRANCH
+		git-r3_src_unpack
+
+		# This downloads things so must go in src_unpack to avoid the sandbox.
+		cd "${S}" || die
+		npm install || die
+	else
+		default
+		ln -snf build-deps-${BUILD_DEPS_COMMIT} build-deps || die
+		find moonlight-common-c-${MOONLIGHT_COMMIT} "${S}"/third-party build-deps/ffmpeg_sources \
+			-mindepth 1 -type d -empty -delete || die
+		ln -snf ../enet-${ENET_COMMIT} moonlight-common-c-${MOONLIGHT_COMMIT}/enet || die
+		ln -snf ../../moonlight-common-c-${MOONLIGHT_COMMIT} "${S}"/third-party/moonlight-common-c || die
+		ln -snf ../../nanors-${NANORS_COMMIT} "${S}"/third-party/nanors || die
+		ln -snf ../../nv-codec-headers-${NV_CODEC_COMMIT} "${S}"/third-party/nv-codec-headers || die
+		ln -snf ../../tray-${TRAY_COMMIT} "${S}"/third-party/tray || die
+		ln -snf ../../Simple-Web-Server-${SWS_COMMIT} "${S}"/third-party/Simple-Web-Server || die
+		ln -snf ../../wlr-protocols-${WLRP_COMMIT} "${S}"/third-party/wlr-protocols || die
+		ln -snf ../../ffmpeg-${FFMPEG_VERSION} build-deps/ffmpeg_sources/ffmpeg || die
+	fi
+}
+
+src_prepare() {
+	# Apply general ffmpeg patches.
+	cd "${WORKDIR}"/build-deps/ffmpeg_sources/ffmpeg || die
+	eapply "${WORKDIR}"/build-deps/ffmpeg_patches/ffmpeg/*.patch
+
+	# Copy ffmpeg sources because CBS build applies extra patches.
+	cp -a ./ "${WORKDIR}"/ffmpeg-build || die
+
+	cd "${S}" || die
+	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_src_prepare
+	default_src_prepare() { :; } # Hack to avoid double patching! :(
+	CMAKE_USE_DIR="${S}" cmake_src_prepare
+}
+
+src_configure() {
+	local myconf=(
+		--prefix="${S}"/third-party/ffmpeg
+		--cc="$(tc-getCC)"
+		--cxx="$(tc-getCXX)"
+		--ar="$(tc-getAR)"
+		--nm="$(tc-getNM)"
+		--strip="$(tc-getSTRIP)"
+		--ranlib="$(tc-getRANLIB)"
+		--pkg-config="$(tc-getPKG_CONFIG)"
+		--optflags="${CFLAGS}"
+		--disable-all
+		--disable-autodetect
+		--disable-error-resilience
+		--disable-everything
+		--disable-faan
+		--disable-iconv
+		--disable-network
+		--disable-optimizations
+		--disable-stripping
+		--enable-amf
+		--enable-avcodec
+		--enable-ffnvcodec
+		--enable-gpl
+		--enable-nvenc
+		--enable-static
+		--enable-swscale
+		--enable-v4l2_m2m
+		$(use_enable cuda)
+		$(use_enable cuda cuda_llvm)
+		$(use_enable svt-av1 libsvtav1)
+		$(use_enable vaapi)
+		$(use_enable x264 libx264)
+		$(use_enable x265 libx265)
+		$(usex svt-av1 --enable-encoder=libsvtav1 "")
+		$(usex vaapi --enable-encoder=h264_vaapi,hevc_vaapi,av1_vaapi "")
+		$(usex x264 --enable-encoder=libx264 "")
+		$(usex x265 --enable-encoder=libx265 "")
+		--enable-encoder=h264_amf,hevc_amf,av1_amf
+		--enable-encoder=h264_nvenc,hevc_nvenc,av1_nvenc
+		--enable-encoder=h264_v4l2m2m,hevc_v4l2m2m
+	)
+
+	# CPU features
+	for i in "${CPU_FEATURES_MAP[@]}" ; do
+		use ${i%:*} || myconf+=( --disable-${i#*:} )
+	done
+	# Bug #917277, #917278
+	myconf+=( --disable-dotprod --disable-i8mm )
+
+	# Try to get cpu type based on CFLAGS.
+	# Bug #172723
+	# We need to do this so that features of that CPU will be better used
+	# If they contain an unknown CPU it will not hurt since ffmpeg's configure
+	# will just ignore it.
+	for i in $(get-flag mcpu) $(get-flag march) ; do
+		[[ ${i} = native ]] && i="host" # bug #273421
+		myconf+=( --cpu=${i} )
+		break
+	done
+
+	# cross compile support
+	if tc-is-cross-compiler ; then
+		myconf+=( --enable-cross-compile --arch=$(tc-arch-kernel) --cross-prefix=${CHOST}- --host-cc="$(tc-getBUILD_CC)" )
+		case ${CHOST} in
+			*mingw32*)
+				myconf+=( --target-os=mingw32 )
+				;;
+			*linux*)
+				myconf+=( --target-os=linux )
+				;;
+		esac
+	fi
+
+	cd "${WORKDIR}"/ffmpeg-build || die
+	echo ./configure "${myconf[@]}"
+	./configure "${myconf[@]}" || die
+
+	local mycmakeargs=(
+		-DBUILD_SHARED_LIBS=no
+		-DCMAKE_INSTALL_PREFIX="${S}"/third-party/ffmpeg
+		$(usex arm64 -DCROSS_COMPILE_ARM=yes "")
+		$(usex ppc64 -DCROSS_COMPILE_PPC=yes "")
+	)
+	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_src_configure
+
+	local mycmakeargs=(
+		-DCMAKE_DISABLE_FIND_PACKAGE_Git=yes
+		-DFFMPEG_PLATFORM_LIBRARIES="$(usex svt-av1 SvtAv1Enc '');$(usex vaapi 'va;va-drm' '');$(usev x264);$(usev x265)"
+		-DFFMPEG_PREPARED_BINARIES="${S}"/third-party/ffmpeg
+		-DSUNSHINE_ASSETS_DIR=share/${PN}
+		-DSUNSHINE_ENABLE_CUDA=$(usex cuda)
+		-DSUNSHINE_ENABLE_DRM=$(usex libdrm)
+		-DSUNSHINE_ENABLE_VAAPI=$(usex vaapi)
+		-DSUNSHINE_ENABLE_WAYLAND=$(usex wayland)
+		-DSUNSHINE_ENABLE_X11=$(usex X)
+		-DSUNSHINE_ENABLE_TRAY=$(usex trayicon)
+		-DSUNSHINE_REQUIRE_TRAY=$(usex trayicon)
+		-DSUNSHINE_SYSTEM_NLOHMANN_JSON=yes
+		-DSUNSHINE_SYSTEM_WAYLAND_PROTOCOLS=yes
+		-DSYSTEMD_USER_UNIT_INSTALL_DIR=$(systemd_get_userunitdir)
+		-DUDEV_RULES_INSTALL_DIR=$(get_udevdir)/rules.d
+	)
+	CMAKE_USE_DIR="${S}" cmake_src_configure
+}
+
+src_compile() {
+	emake -C "${WORKDIR}"/ffmpeg-build V=1
+	emake -C "${WORKDIR}"/ffmpeg-build V=1 install
+	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_src_compile
+	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_build install
+	CMAKE_USE_DIR="${S}" npm_config_offline=1 cmake_src_compile
+}
+
+pkg_postinst() {
+	udev_reload
+	xdg_pkg_postinst
+	use libdrm && fcaps cap_sys_admin+p usr/bin/"$(readlink "${EROOT}"/usr/bin/${PN})"
+
+	elog "At upstream's request, please report any issues to https://bugs.gentoo.org"
+	elog "rather than going directly to them."
+}
+
+pkg_postrm() {
+	udev_reload
+	xdg_pkg_postrm
+}


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: net-misc/sunshine/files/, net-misc/sunshine/
@ 2024-02-18 15:21 James Le Cuirot
  0 siblings, 0 replies; 5+ messages in thread
From: James Le Cuirot @ 2024-02-18 15:21 UTC (permalink / raw
  To: gentoo-commits

commit:     715edd21c8b64ec9d9f7ce84d07f7b54f57d85d4
Author:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 18 15:15:14 2024 +0000
Commit:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Sun Feb 18 15:20:39 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=715edd21

net-misc/sunshine: On second thoughts, unbundle nv-codec-headers

Using the bundled copy is awkward as they need to be "installed". Loosen the
version requirement to just the same major version, which is probably fine.

Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>

 .../sunshine/files/sunshine-0.22.0-nvcodec.patch   | 27 ++++++++++++++++++++++
 net-misc/sunshine/sunshine-0.21.0.ebuild           |  8 ++-----
 net-misc/sunshine/sunshine-9999.ebuild             |  9 +++-----
 3 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/net-misc/sunshine/files/sunshine-0.22.0-nvcodec.patch b/net-misc/sunshine/files/sunshine-0.22.0-nvcodec.patch
new file mode 100644
index 000000000000..bc7681beedf0
--- /dev/null
+++ b/net-misc/sunshine/files/sunshine-0.22.0-nvcodec.patch
@@ -0,0 +1,27 @@
+From 36b5a18ffd0cdf379b579db91bfaacc46e8c4757 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Sun, 18 Feb 2024 10:25:25 +0000
+Subject: [PATCH] Be less strict about the nv-codec-headers version
+
+Using the bundled version is awkward. Restrict the major version only
+and deal with any issues later.
+---
+ src/nvenc/nvenc_base.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/nvenc/nvenc_base.cpp b/src/nvenc/nvenc_base.cpp
+index b9eba5a..e11c4e2 100644
+--- a/src/nvenc/nvenc_base.cpp
++++ b/src/nvenc/nvenc_base.cpp
+@@ -11,7 +11,7 @@
+ // - NV_ENC_*_VER definitions where the value inside NVENCAPI_STRUCT_VERSION() was increased
+ // - Incompatible struct changes in nvEncodeAPI.h (fields removed, semantics changed, etc.)
+ // - Test both old and new drivers with all supported codecs
+-#if NVENCAPI_VERSION != MAKE_NVENC_VER(12U, 0U)
++#if NVENCAPI_MAJOR_VERSION != 12
+   #error Check and update NVENC code for backwards compatibility!
+ #endif
+ 
+-- 
+2.43.0
+

diff --git a/net-misc/sunshine/sunshine-0.21.0.ebuild b/net-misc/sunshine/sunshine-0.21.0.ebuild
index 57588f0457f6..163af1a4bea9 100644
--- a/net-misc/sunshine/sunshine-0.21.0.ebuild
+++ b/net-misc/sunshine/sunshine-0.21.0.ebuild
@@ -4,12 +4,10 @@
 EAPI=8
 
 # These don't necessarily have to align with the upstream release.
-# We do have nv-codec-headers packaged, but Sunshine is very picky here.
 BUILD_DEPS_COMMIT="2aafe061cd52a944cb3b5f86d1f25e9ad2a19bec"
 ENET_COMMIT="c6bb0e50118d08252eee308de8412751218442d6"
 MOONLIGHT_COMMIT="6e9ed871bc3e013386c775b2ee7d31deb1151068"
 NANORS_COMMIT="e9e242e98e27037830490b2a752895ca68f75f8b"
-NV_CODEC_COMMIT="22441b505d9d9afc1e3002290820909846c24bdc"
 TRAY_COMMIT="e08bdbe5aa7de0ad9c0ce36257016e07c7e6e2c0"
 SWS_COMMIT="27b41f5ee154cca0fce4fe2955dd886d04e3a4ed"
 WLRP_COMMIT="4264185db3b7e961e7f157e1cc4fd0ab75137568"
@@ -37,8 +35,6 @@ else
 			-> moonlight-common-c-${MOONLIGHT_COMMIT}.tar.gz
 		https://github.com/sleepybishop/nanors/archive/${NANORS_COMMIT}.tar.gz
 			-> nanors-${NANORS_COMMIT}.tar.gz
-		https://github.com/FFmpeg/nv-codec-headers/archive/${NV_CODEC_COMMIT}.tar.gz
-			-> nv-codec-headers-${NV_CODEC_COMMIT}.tar.gz
 		https://github.com/LizardByte/tray/archive/${TRAY_COMMIT}.tar.gz
 			-> LizardByte-tray-${TRAY_COMMIT}.tar.gz
 		https://gitlab.com/eidheim/Simple-Web-Server/-/archive/${SWS_COMMIT}/Simple-Web-Server-${SWS_COMMIT}.tar.bz2
@@ -169,6 +165,7 @@ DEPEND="
 	${CDEPEND}
 	media-libs/amf-headers
 	media-libs/libva
+	=media-libs/nv-codec-headers-12*
 	wayland? ( dev-libs/wayland-protocols )
 "
 
@@ -214,7 +211,7 @@ src_unpack() {
 
 		local EGIT_REPO_URI="https://github.com/LizardByte/Sunshine.git"
 		local EGIT_SUBMODULES=(
-			third-party/{moonlight-common-c{,/enet},nanors,nv-codec-headers,tray,Simple-Web-Server,wlr-protocols}
+			third-party/{moonlight-common-c{,/enet},nanors,tray,Simple-Web-Server,wlr-protocols}
 		)
 		unset EGIT_CHECKOUT_DIR EGIT_COMMIT EGIT_BRANCH
 		git-r3_src_unpack
@@ -230,7 +227,6 @@ src_unpack() {
 		ln -snf ../enet-${ENET_COMMIT} moonlight-common-c-${MOONLIGHT_COMMIT}/enet || die
 		ln -snf ../../moonlight-common-c-${MOONLIGHT_COMMIT} "${S}"/third-party/moonlight-common-c || die
 		ln -snf ../../nanors-${NANORS_COMMIT} "${S}"/third-party/nanors || die
-		ln -snf ../../nv-codec-headers-${NV_CODEC_COMMIT} "${S}"/third-party/nv-codec-headers || die
 		ln -snf ../../tray-${TRAY_COMMIT} "${S}"/third-party/tray || die
 		ln -snf ../../Simple-Web-Server-${SWS_COMMIT} "${S}"/third-party/Simple-Web-Server || die
 		ln -snf ../../wlr-protocols-${WLRP_COMMIT} "${S}"/third-party/wlr-protocols || die

diff --git a/net-misc/sunshine/sunshine-9999.ebuild b/net-misc/sunshine/sunshine-9999.ebuild
index 99a8ab606364..b99c07ff71f6 100644
--- a/net-misc/sunshine/sunshine-9999.ebuild
+++ b/net-misc/sunshine/sunshine-9999.ebuild
@@ -4,12 +4,10 @@
 EAPI=8
 
 # These don't necessarily have to align with the upstream release.
-# We do have nv-codec-headers packaged, but Sunshine is very picky here.
 BUILD_DEPS_COMMIT="2aafe061cd52a944cb3b5f86d1f25e9ad2a19bec"
 ENET_COMMIT="c6bb0e50118d08252eee308de8412751218442d6"
 MOONLIGHT_COMMIT="6e9ed871bc3e013386c775b2ee7d31deb1151068"
 NANORS_COMMIT="e9e242e98e27037830490b2a752895ca68f75f8b"
-NV_CODEC_COMMIT="22441b505d9d9afc1e3002290820909846c24bdc"
 TRAY_COMMIT="e08bdbe5aa7de0ad9c0ce36257016e07c7e6e2c0"
 SWS_COMMIT="27b41f5ee154cca0fce4fe2955dd886d04e3a4ed"
 WLRP_COMMIT="4264185db3b7e961e7f157e1cc4fd0ab75137568"
@@ -37,8 +35,6 @@ else
 			-> moonlight-common-c-${MOONLIGHT_COMMIT}.tar.gz
 		https://github.com/sleepybishop/nanors/archive/${NANORS_COMMIT}.tar.gz
 			-> nanors-${NANORS_COMMIT}.tar.gz
-		https://github.com/FFmpeg/nv-codec-headers/archive/${NV_CODEC_COMMIT}.tar.gz
-			-> nv-codec-headers-${NV_CODEC_COMMIT}.tar.gz
 		https://github.com/LizardByte/tray/archive/${TRAY_COMMIT}.tar.gz
 			-> LizardByte-tray-${TRAY_COMMIT}.tar.gz
 		https://gitlab.com/eidheim/Simple-Web-Server/-/archive/${SWS_COMMIT}/Simple-Web-Server-${SWS_COMMIT}.tar.bz2
@@ -169,6 +165,7 @@ DEPEND="
 	${CDEPEND}
 	dev-cpp/nlohmann_json
 	media-libs/amf-headers
+	=media-libs/nv-codec-headers-12*
 	wayland? ( dev-libs/wayland-protocols )
 "
 
@@ -183,6 +180,7 @@ BDEPEND="
 PATCHES=(
 	"${FILESDIR}"/${PN}-custom-ffmpeg.patch
 	"${FILESDIR}"/${PN}-system-json.patch
+	"${FILESDIR}"/${PN}-0.22.0-nvcodec.patch
 )
 
 # Make this mess a bit simpler.
@@ -213,7 +211,7 @@ src_unpack() {
 
 		local EGIT_REPO_URI="https://github.com/LizardByte/Sunshine.git"
 		local EGIT_SUBMODULES=(
-			third-party/{moonlight-common-c{,/enet},nanors,nv-codec-headers,tray,Simple-Web-Server,wlr-protocols}
+			third-party/{moonlight-common-c{,/enet},nanors,tray,Simple-Web-Server,wlr-protocols}
 		)
 		unset EGIT_CHECKOUT_DIR EGIT_COMMIT EGIT_BRANCH
 		git-r3_src_unpack
@@ -229,7 +227,6 @@ src_unpack() {
 		ln -snf ../enet-${ENET_COMMIT} moonlight-common-c-${MOONLIGHT_COMMIT}/enet || die
 		ln -snf ../../moonlight-common-c-${MOONLIGHT_COMMIT} "${S}"/third-party/moonlight-common-c || die
 		ln -snf ../../nanors-${NANORS_COMMIT} "${S}"/third-party/nanors || die
-		ln -snf ../../nv-codec-headers-${NV_CODEC_COMMIT} "${S}"/third-party/nv-codec-headers || die
 		ln -snf ../../tray-${TRAY_COMMIT} "${S}"/third-party/tray || die
 		ln -snf ../../Simple-Web-Server-${SWS_COMMIT} "${S}"/third-party/Simple-Web-Server || die
 		ln -snf ../../wlr-protocols-${WLRP_COMMIT} "${S}"/third-party/wlr-protocols || die


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: net-misc/sunshine/files/, net-misc/sunshine/
@ 2024-05-11 17:46 James Le Cuirot
  0 siblings, 0 replies; 5+ messages in thread
From: James Le Cuirot @ 2024-05-11 17:46 UTC (permalink / raw
  To: gentoo-commits

commit:     dd44b9aa5c745304ea924fb12b8503bb8ecd9545
Author:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Sat May 11 17:44:51 2024 +0000
Commit:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Sat May 11 17:44:51 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=dd44b9aa

net-misc/sunshine: Fix NPM issue by shipping pre-compiled assets

It turns out the NPM cache is sensitive to the NPM version. Yarn is better in
this regard, but it wanted to cache 90MB of files covering irrelevant operating
systems and architectures. This is a lot more than 1.3MB of pre-compiled assets.

Closes: https://bugs.gentoo.org/930441
Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>

 net-misc/sunshine/Manifest                      |   2 +-
 net-misc/sunshine/files/sunshine-find-npm.patch | 100 ++++++++++++++++++++++++
 net-misc/sunshine/sunshine-0.23.1.ebuild        |  16 ++--
 net-misc/sunshine/sunshine-9999.ebuild          |  16 ++--
 4 files changed, 115 insertions(+), 19 deletions(-)

diff --git a/net-misc/sunshine/Manifest b/net-misc/sunshine/Manifest
index 4392f4217e78..2efe3ef8929a 100644
--- a/net-misc/sunshine/Manifest
+++ b/net-misc/sunshine/Manifest
@@ -6,5 +6,5 @@ DIST moonlight-common-c-cbd0ec1b25edfb8ee8645fffa49ff95b6e04c70e.tar.gz 148691 B
 DIST moonlight-enet-04e27590670a87a7cd40f5a05cda97467e4e25a3.tar.gz 86434 BLAKE2B 8a5535843e4c650b945882abac1542bf8c79dc420607b88433d239aa5a17380f02e77bb8f1fcbe45dcb8ef894e6c9b4d940f4d3b34b956ce42d86f6a8ca5227a SHA512 6d2e9447e546489365b1fb563ed52664a91981717a3a3a9faa9600ab62be5ac09bd24ee9dd505833d31981ce6222f5ef430268a9f92aa83fa288b5b8d681e2aa
 DIST nanors-e9e242e98e27037830490b2a752895ca68f75f8b.tar.gz 194694 BLAKE2B 1effd7c0884ffd38b63d61a7872337797529ef2012f9de0950088a5004cb32a2fb2c14bcab2ec6719968864e5e6b9a67e96afa39466e2071bf4a0cd752ae4b29 SHA512 548be25650619a6c31944cd7a745fd40d5bc5008f2d7f91e0207a10b923764cb88fd2ddcb71eaed7c4863ec89b34d61011b666e292da071ac3b4429e4d7dd027
 DIST sunshine-0.23.1.tar.gz 24503568 BLAKE2B 0c589f38a7d638c49af6385def2676de04af422f85d37228988bd7c822ffc006dbac0a1695e01527ac7a1d5ee28103cff00d78a97d57f61247772a6e6cc1fe18 SHA512 7a9150baf4ecdad1035666993c60744390e227ebeaf467447c53675dc0aecc7031cd9c9b253fbbbbac072f5592c3690c6acfde41f38d441497a17157417f1e16
-DIST sunshine-npm-cache-0.23.1.tar.xz 23477572 BLAKE2B 24674a6c6ebed1cc31e3fbee2ededef27c1c24cc7f1be63fba19023b1a6171b9e1a0e83363f7eabad1957a96eede471ae3df4df5e5ba66f5c80f57b56781bf52 SHA512 84ec1d393b1c2f333954bf0f5a42e491bf4d7ff2031c8065c56e06eb0eb7f7b750e2d2f6a1da321067212fdf55aa4c917b2ce0db7c957231821282a33966cd93
+DIST sunshine-assets-0.23.1.tar.xz 1269348 BLAKE2B 36dd00fbf4bb1bfa213d53fd9dc78ed1fee9e12efcfb138dbd54932c3f19447d832da506175a982be7564408e06b0699b0b7cb4b9811ab81b47e30681c915bab SHA512 9fe9e0ee29864faa0f67dd4d501d116be1476f2c7ec688646b91eb87cb38e9e9d2baecb8335df29075fd3f60bf05b900c20dcb8406306d68a62c30ff55d1b7aa
 DIST wlr-protocols-2b8d43325b7012cc3f9b55c08d26e50e42beac7d.tar.bz2 19708 BLAKE2B fe20f21ee8282d7afcdbb8f3863e50b217fb71e7814f404f288b0d09d30c9e30135769b12342d9e9126a8cb2ab35d6ced0c5562807d274b1d97224f5f3d02511 SHA512 7935b5089820304aa8cb0e1a8f4e0db6ccd5285973a3f3554ccc935dd88e379eb03c3b2dd199da97b6ff8dfbbbf124ca65fb1c12821a168d34bd7e26d8514edb

diff --git a/net-misc/sunshine/files/sunshine-find-npm.patch b/net-misc/sunshine/files/sunshine-find-npm.patch
new file mode 100644
index 000000000000..42b91299cca5
--- /dev/null
+++ b/net-misc/sunshine/files/sunshine-find-npm.patch
@@ -0,0 +1,100 @@
+From 0fa3273af349089b7d62c996fcaea67b10ed2a0c Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Sat, 4 May 2024 23:32:29 +0100
+Subject: [PATCH 1/2] build: Unify asset building by leveraging CMake's env
+ command
+
+`add_custom_target` can also accept multiple commands to be run in
+sequence. It isn't clear how quoting applies here, but I've tested it,
+and it seems to be behave as expected when spaces are present.
+---
+ cmake/targets/common.cmake  | 7 +++++++
+ cmake/targets/unix.cmake    | 6 ------
+ cmake/targets/windows.cmake | 6 ------
+ 3 files changed, 7 insertions(+), 12 deletions(-)
+
+diff --git a/cmake/targets/common.cmake b/cmake/targets/common.cmake
+index ee79528c..04d8e954 100644
+--- a/cmake/targets/common.cmake
++++ b/cmake/targets/common.cmake
+@@ -15,6 +15,13 @@ else()
+     set(NPM_BUILD_HOMEBREW "")
+ endif()
+ 
++#WebUI build
++add_custom_target(web-ui ALL
++        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
++        COMMENT "Installing NPM Dependencies and Building the Web UI"
++        COMMAND npm install
++        COMMAND "${CMAKE_COMMAND}" -E env "SUNSHINE_BUILD_HOMEBREW=${NPM_BUILD_HOMEBREW}" "SUNSHINE_SOURCE_ASSETS_DIR=${NPM_SOURCE_ASSETS_DIR}" "SUNSHINE_ASSETS_DIR=${NPM_ASSETS_DIR}" npm run build)  # cmake-lint: disable=C0301
++
+ # platform specific target definitions
+ if(WIN32)
+     include(${CMAKE_MODULE_PATH}/targets/windows.cmake)
+diff --git a/cmake/targets/unix.cmake b/cmake/targets/unix.cmake
+index 5527a987..047a0b3d 100644
+--- a/cmake/targets/unix.cmake
++++ b/cmake/targets/unix.cmake
+@@ -1,8 +1,2 @@
+ # unix specific target definitions
+ # put anything here that applies to both linux and macos
+-
+-#WebUI build
+-add_custom_target(web-ui ALL
+-        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+-        COMMENT "Installing NPM Dependencies and Building the Web UI"
+-        COMMAND sh -c \"npm install && SUNSHINE_BUILD_HOMEBREW=${NPM_BUILD_HOMEBREW} SUNSHINE_SOURCE_ASSETS_DIR=${NPM_SOURCE_ASSETS_DIR} SUNSHINE_ASSETS_DIR=${NPM_ASSETS_DIR} npm run build\")  # cmake-lint: disable=C0301
+diff --git a/cmake/targets/windows.cmake b/cmake/targets/windows.cmake
+index e429feaa..341d7c2e 100644
+--- a/cmake/targets/windows.cmake
++++ b/cmake/targets/windows.cmake
+@@ -4,9 +4,3 @@ set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll")
+ find_library(ZLIB ZLIB1)
+ list(APPEND SUNSHINE_EXTERNAL_LIBRARIES
+         Wtsapi32.lib)
+-
+-#WebUI build
+-add_custom_target(web-ui ALL
+-        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+-        COMMENT "Installing NPM Dependencies and Building the Web UI"
+-        COMMAND cmd /C "npm install && set \"SUNSHINE_SOURCE_ASSETS_DIR=${NPM_SOURCE_ASSETS_DIR}\" && set \"SUNSHINE_ASSETS_DIR=${NPM_ASSETS_DIR}\" && npm run build")   # cmake-lint: disable=C0301
+-- 
+2.44.0
+
+
+From f7f93c787bc7c6e82296f0b28c1684ba93cb0956 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Sun, 5 May 2024 23:30:36 +0100
+Subject: [PATCH 2/2] build: Use find_program to find NPM so it can be
+ overridden
+
+This is useful for Gentoo, which needs to be able to do entirely offline
+builds, because it can override this with `true` while shipping
+pre-compiled assets. Gentoo has tried to ship cached NPM modules
+instead, but it turns out these are very sensitive to the NPM version.
+---
+ cmake/targets/common.cmake | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/targets/common.cmake b/cmake/targets/common.cmake
+index 04d8e954..5c489551 100644
+--- a/cmake/targets/common.cmake
++++ b/cmake/targets/common.cmake
+@@ -16,11 +16,12 @@ else()
+ endif()
+ 
+ #WebUI build
++find_program(NPM npm REQUIRED)
+ add_custom_target(web-ui ALL
+         WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+         COMMENT "Installing NPM Dependencies and Building the Web UI"
+-        COMMAND npm install
+-        COMMAND "${CMAKE_COMMAND}" -E env "SUNSHINE_BUILD_HOMEBREW=${NPM_BUILD_HOMEBREW}" "SUNSHINE_SOURCE_ASSETS_DIR=${NPM_SOURCE_ASSETS_DIR}" "SUNSHINE_ASSETS_DIR=${NPM_ASSETS_DIR}" npm run build)  # cmake-lint: disable=C0301
++        COMMAND "${NPM}" install
++        COMMAND "${CMAKE_COMMAND}" -E env "SUNSHINE_BUILD_HOMEBREW=${NPM_BUILD_HOMEBREW}" "SUNSHINE_SOURCE_ASSETS_DIR=${NPM_SOURCE_ASSETS_DIR}" "SUNSHINE_ASSETS_DIR=${NPM_ASSETS_DIR}" "${NPM}" run build)  # cmake-lint: disable=C0301
+ 
+ # platform specific target definitions
+ if(WIN32)
+-- 
+2.44.0
+

diff --git a/net-misc/sunshine/sunshine-0.23.1.ebuild b/net-misc/sunshine/sunshine-0.23.1.ebuild
index 7b106a011c0a..a708fffba539 100644
--- a/net-misc/sunshine/sunshine-0.23.1.ebuild
+++ b/net-misc/sunshine/sunshine-0.23.1.ebuild
@@ -13,13 +13,10 @@ SWS_COMMIT="27b41f5ee154cca0fce4fe2955dd886d04e3a4ed"
 WLRP_COMMIT="2b8d43325b7012cc3f9b55c08d26e50e42beac7d"
 FFMPEG_VERSION="6.1.1"
 
-# To make the node-modules tarball:
+# To make the assets tarball:
 # PV=
-# git fetch
-# git checkout v$PV
-# rm -rf node_modules npm_cache package-lock.json
-# npm_config_cache="${PWD}"/npm_cache npm install --logs-max=0 --omit=optional
-# XZ_OPT=-9 tar --xform="s:^:Sunshine-$PV/:" -Jcf /var/cache/distfiles/sunshine-npm-cache-$PV.tar.xz npm_cache package-lock.json
+# EGIT_OVERRIDE_COMMIT_LIZARDBYTE_SUNSHINE=v$PV ebuild sunshine-9999.ebuild clean compile
+# XZ_OPT=-9 tar --xform="s:^:Sunshine-$PV/:" -Jcf /var/cache/distfiles/sunshine-assets-$PV.tar.xz -C /var/tmp/portage/net-misc/sunshine-9999/work/sunshine-9999 assets/
 
 if [[ ${PV} = 9999* ]]; then
 	inherit git-r3
@@ -40,7 +37,7 @@ else
 		https://gitlab.com/eidheim/Simple-Web-Server/-/archive/${SWS_COMMIT}/Simple-Web-Server-${SWS_COMMIT}.tar.bz2
 		https://gitlab.freedesktop.org/wlroots/wlr-protocols/-/archive/${WLRP_COMMIT}/wlr-protocols-${WLRP_COMMIT}.tar.bz2
 		https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.xz
-		https://dev.gentoo.org/~chewi/distfiles/${PN}-npm-cache-${PV}.tar.xz
+		https://dev.gentoo.org/~chewi/distfiles/${PN}-assets-${PV}.tar.xz
 	"
 	KEYWORDS="~amd64 ~arm64"
 	S="${WORKDIR}/Sunshine-${PV}"
@@ -181,6 +178,7 @@ BDEPEND="
 PATCHES=(
 	"${FILESDIR}"/${PN}-custom-ffmpeg.patch
 	"${FILESDIR}"/${PN}-0.22.0-nvcodec.patch
+	"${FILESDIR}"/${PN}-find-npm.patch
 )
 
 # Make this mess a bit simpler.
@@ -188,7 +186,6 @@ CMAKE_IN_SOURCE_BUILD=1
 
 # Make npm behave.
 export npm_config_audit=false
-export npm_config_cache="${S}"/npm_cache
 export npm_config_color=false
 export npm_config_foreground_scripts=true
 export npm_config_loglevel=verbose
@@ -353,6 +350,7 @@ src_configure() {
 		-DSYSTEMD_USER_UNIT_INSTALL_DIR=$(systemd_get_userunitdir)
 		-DUDEV_RULES_INSTALL_DIR=$(get_udevdir)/rules.d
 	)
+	[[ ${PV} = 9999* ]] || mycmakeargs+=( -DNPM="${BROOT}"/bin/true )
 	CMAKE_USE_DIR="${S}" cmake_src_configure
 }
 
@@ -361,7 +359,7 @@ src_compile() {
 	emake -C "${WORKDIR}"/ffmpeg-build V=1 install
 	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_src_compile
 	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_build install
-	CMAKE_USE_DIR="${S}" npm_config_offline=1 cmake_src_compile
+	CMAKE_USE_DIR="${S}" cmake_src_compile
 }
 
 pkg_postinst() {

diff --git a/net-misc/sunshine/sunshine-9999.ebuild b/net-misc/sunshine/sunshine-9999.ebuild
index 7b106a011c0a..a708fffba539 100644
--- a/net-misc/sunshine/sunshine-9999.ebuild
+++ b/net-misc/sunshine/sunshine-9999.ebuild
@@ -13,13 +13,10 @@ SWS_COMMIT="27b41f5ee154cca0fce4fe2955dd886d04e3a4ed"
 WLRP_COMMIT="2b8d43325b7012cc3f9b55c08d26e50e42beac7d"
 FFMPEG_VERSION="6.1.1"
 
-# To make the node-modules tarball:
+# To make the assets tarball:
 # PV=
-# git fetch
-# git checkout v$PV
-# rm -rf node_modules npm_cache package-lock.json
-# npm_config_cache="${PWD}"/npm_cache npm install --logs-max=0 --omit=optional
-# XZ_OPT=-9 tar --xform="s:^:Sunshine-$PV/:" -Jcf /var/cache/distfiles/sunshine-npm-cache-$PV.tar.xz npm_cache package-lock.json
+# EGIT_OVERRIDE_COMMIT_LIZARDBYTE_SUNSHINE=v$PV ebuild sunshine-9999.ebuild clean compile
+# XZ_OPT=-9 tar --xform="s:^:Sunshine-$PV/:" -Jcf /var/cache/distfiles/sunshine-assets-$PV.tar.xz -C /var/tmp/portage/net-misc/sunshine-9999/work/sunshine-9999 assets/
 
 if [[ ${PV} = 9999* ]]; then
 	inherit git-r3
@@ -40,7 +37,7 @@ else
 		https://gitlab.com/eidheim/Simple-Web-Server/-/archive/${SWS_COMMIT}/Simple-Web-Server-${SWS_COMMIT}.tar.bz2
 		https://gitlab.freedesktop.org/wlroots/wlr-protocols/-/archive/${WLRP_COMMIT}/wlr-protocols-${WLRP_COMMIT}.tar.bz2
 		https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.xz
-		https://dev.gentoo.org/~chewi/distfiles/${PN}-npm-cache-${PV}.tar.xz
+		https://dev.gentoo.org/~chewi/distfiles/${PN}-assets-${PV}.tar.xz
 	"
 	KEYWORDS="~amd64 ~arm64"
 	S="${WORKDIR}/Sunshine-${PV}"
@@ -181,6 +178,7 @@ BDEPEND="
 PATCHES=(
 	"${FILESDIR}"/${PN}-custom-ffmpeg.patch
 	"${FILESDIR}"/${PN}-0.22.0-nvcodec.patch
+	"${FILESDIR}"/${PN}-find-npm.patch
 )
 
 # Make this mess a bit simpler.
@@ -188,7 +186,6 @@ CMAKE_IN_SOURCE_BUILD=1
 
 # Make npm behave.
 export npm_config_audit=false
-export npm_config_cache="${S}"/npm_cache
 export npm_config_color=false
 export npm_config_foreground_scripts=true
 export npm_config_loglevel=verbose
@@ -353,6 +350,7 @@ src_configure() {
 		-DSYSTEMD_USER_UNIT_INSTALL_DIR=$(systemd_get_userunitdir)
 		-DUDEV_RULES_INSTALL_DIR=$(get_udevdir)/rules.d
 	)
+	[[ ${PV} = 9999* ]] || mycmakeargs+=( -DNPM="${BROOT}"/bin/true )
 	CMAKE_USE_DIR="${S}" cmake_src_configure
 }
 
@@ -361,7 +359,7 @@ src_compile() {
 	emake -C "${WORKDIR}"/ffmpeg-build V=1 install
 	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_src_compile
 	CMAKE_USE_DIR="${WORKDIR}/build-deps" cmake_build install
-	CMAKE_USE_DIR="${S}" npm_config_offline=1 cmake_src_compile
+	CMAKE_USE_DIR="${S}" cmake_src_compile
 }
 
 pkg_postinst() {


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: net-misc/sunshine/files/, net-misc/sunshine/
@ 2024-06-23 15:46 James Le Cuirot
  0 siblings, 0 replies; 5+ messages in thread
From: James Le Cuirot @ 2024-06-23 15:46 UTC (permalink / raw
  To: gentoo-commits

commit:     09eb59d7880d5a499b3890def7989f532715fefe
Author:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Sun Jun 23 15:45:38 2024 +0000
Commit:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Sun Jun 23 15:46:17 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=09eb59d7

net-misc/sunshine: Fix 0.23.1 with newer miniupnpc using patch

Closes: https://bugs.gentoo.org/934173
Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>

 net-misc/sunshine/files/sunshine-miniupnpc.patch | 43 ++++++++++++++++++++++++
 net-misc/sunshine/sunshine-0.23.1.ebuild         |  1 +
 2 files changed, 44 insertions(+)

diff --git a/net-misc/sunshine/files/sunshine-miniupnpc.patch b/net-misc/sunshine/files/sunshine-miniupnpc.patch
new file mode 100644
index 000000000000..3847724eedc5
--- /dev/null
+++ b/net-misc/sunshine/files/sunshine-miniupnpc.patch
@@ -0,0 +1,43 @@
+https://bugs.gentoo.org/934173
+https://github.com/LizardByte/Sunshine/pull/2746
+
+From 850f656676d30ffb47028e865982e56be161d179 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Sun, 23 Jun 2024 16:21:23 +0100
+Subject: [PATCH] fix(upnp): Support miniupnpc API version 18 (release 2.2.8)
+
+---
+ src/upnp.cpp | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/upnp.cpp b/src/upnp.cpp
+index 2743ebae..e6ec057b 100644
+--- a/src/upnp.cpp
++++ b/src/upnp.cpp
+@@ -109,7 +109,11 @@ namespace upnp {
+       IGDdatas data;
+       urls_t urls;
+       std::array<char, INET6_ADDRESS_STRLEN> lan_addr;
++#if (MINIUPNPC_API_VERSION >= 18)
++      auto status = UPNP_GetValidIGD(device.get(), &urls.el, &data, lan_addr.data(), lan_addr.size(), nullptr, 0);
++#else
+       auto status = UPNP_GetValidIGD(device.get(), &urls.el, &data, lan_addr.data(), lan_addr.size());
++#endif
+       if (status != 1 && status != 2) {
+         BOOST_LOG(debug) << "No valid IPv6 IGD: "sv << status_string(status);
+         return false;
+@@ -331,7 +335,11 @@ namespace upnp {
+         std::array<char, INET6_ADDRESS_STRLEN> lan_addr;
+ 
+         urls_t urls;
++#if (MINIUPNPC_API_VERSION >= 18)
++        auto status = UPNP_GetValidIGD(device.get(), &urls.el, &data, lan_addr.data(), lan_addr.size(), nullptr, 0);
++#else
+         auto status = UPNP_GetValidIGD(device.get(), &urls.el, &data, lan_addr.data(), lan_addr.size());
++#endif
+         if (status != 1 && status != 2) {
+           BOOST_LOG(error) << status_string(status);
+           mapped = false;
+-- 
+2.45.2
+

diff --git a/net-misc/sunshine/sunshine-0.23.1.ebuild b/net-misc/sunshine/sunshine-0.23.1.ebuild
index f700216a63b6..d197b35c6616 100644
--- a/net-misc/sunshine/sunshine-0.23.1.ebuild
+++ b/net-misc/sunshine/sunshine-0.23.1.ebuild
@@ -179,6 +179,7 @@ PATCHES=(
 	"${FILESDIR}"/${PN}-custom-ffmpeg.patch
 	"${FILESDIR}"/${PN}-0.22.0-nvcodec.patch
 	"${FILESDIR}"/${PN}-find-npm.patch
+	"${FILESDIR}"/${PN}-miniupnpc.patch
 )
 
 # Make this mess a bit simpler.


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: net-misc/sunshine/files/, net-misc/sunshine/
@ 2024-11-08 23:46 James Le Cuirot
  0 siblings, 0 replies; 5+ messages in thread
From: James Le Cuirot @ 2024-11-08 23:46 UTC (permalink / raw
  To: gentoo-commits

commit:     2b59d622f9fe3930d3a4de276a342940bb2e8fd2
Author:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Fri Nov  8 23:45:53 2024 +0000
Commit:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Fri Nov  8 23:45:53 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2b59d622

net-misc/sunshine: Patch 0.23.1 to build against Boost 1.86

Upstream has made the latest require 1.86, but this patch works with 1.85 too.

Closes: https://bugs.gentoo.org/942795
Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>

 net-misc/sunshine/files/sunshine-boost-1.86.patch | 150 ++++++++++++++++++++++
 net-misc/sunshine/sunshine-0.23.1.ebuild          |   1 +
 net-misc/sunshine/sunshine-9999.ebuild            |   2 +-
 3 files changed, 152 insertions(+), 1 deletion(-)

diff --git a/net-misc/sunshine/files/sunshine-boost-1.86.patch b/net-misc/sunshine/files/sunshine-boost-1.86.patch
new file mode 100644
index 000000000000..374e8b5ab004
--- /dev/null
+++ b/net-misc/sunshine/files/sunshine-boost-1.86.patch
@@ -0,0 +1,150 @@
+diff --git a/src/platform/common.h b/src/platform/common.h
+index 007f7ece..e3827d33 100644
+--- a/src/platform/common.h
++++ b/src/platform/common.h
+@@ -23,6 +23,14 @@ extern "C" {
+ 
+ using namespace std::literals;
+ 
++#if BOOST_VERSION < 108600
++#include <boost/process.hpp>
++namespace bp = boost::process;
++#else
++#include <boost/process/v1.hpp>
++namespace bp = boost::process::v1;
++#endif
++
+ struct sockaddr;
+ struct AVFrame;
+ struct AVBufferRef;
+@@ -39,7 +47,11 @@ namespace boost {
+   namespace filesystem {
+     class path;
+   }
++#if BOOST_VERSION < 108600
+   namespace process {
++#else
++  namespace process::inline v1 {
++#endif
+     class child;
+     class group;
+     template <typename Char>
+@@ -585,8 +597,8 @@ namespace platf {
+   bool
+   needs_encoder_reenumeration();
+ 
+-  boost::process::child
+-  run_command(bool elevated, bool interactive, const std::string &cmd, boost::filesystem::path &working_dir, const boost::process::environment &env, FILE *file, std::error_code &ec, boost::process::group *group);
++  bp::child
++  run_command(bool elevated, bool interactive, const std::string &cmd, boost::filesystem::path &working_dir, const bp::environment &env, FILE *file, std::error_code &ec, bp::group *group);
+ 
+   enum class thread_priority_e : int {
+     low,
+diff --git a/src/platform/linux/misc.cpp b/src/platform/linux/misc.cpp
+index 980c0804..1eed6c76 100644
+--- a/src/platform/linux/misc.cpp
++++ b/src/platform/linux/misc.cpp
+@@ -15,7 +15,6 @@
+ // lib includes
+ #include <arpa/inet.h>
+ #include <boost/asio/ip/address.hpp>
+-#include <boost/process.hpp>
+ #include <dlfcn.h>
+ #include <fcntl.h>
+ #include <ifaddrs.h>
+@@ -40,7 +39,6 @@
+ 
+ using namespace std::literals;
+ namespace fs = std::filesystem;
+-namespace bp = boost::process;
+ 
+ window_system_e window_system;
+ 
+@@ -269,7 +267,7 @@ namespace platf {
+     auto working_dir = boost::filesystem::path(std::getenv("HOME"));
+     std::string cmd = R"(xdg-open ")" + url + R"(")";
+ 
+-    boost::process::environment _env = boost::this_process::environment();
++    bp::environment _env = boost::this_process::environment();
+     std::error_code ec;
+     auto child = run_command(false, false, cmd, working_dir, _env, nullptr, ec, nullptr);
+     if (ec) {
+diff --git a/src/process.cpp b/src/process.cpp
+index 89dc4dc5..678a48f6 100644
+--- a/src/process.cpp
++++ b/src/process.cpp
+@@ -40,7 +40,6 @@
+ 
+ namespace proc {
+   using namespace std::literals;
+-  namespace bp = boost::process;
+   namespace pt = boost::property_tree;
+ 
+   proc_t proc;
+@@ -131,7 +130,7 @@ namespace proc {
+     // If the cmd path is not an absolute path, resolve it using our PATH variable
+     boost::filesystem::path cmd_path(parts.at(0));
+     if (!cmd_path.is_absolute()) {
+-      cmd_path = boost::process::search_path(parts.at(0));
++      cmd_path = bp::search_path(parts.at(0));
+       if (cmd_path.empty()) {
+         BOOST_LOG(error) << "Unable to find executable ["sv << parts.at(0) << "]. Is it in your PATH?"sv;
+         return boost::filesystem::path();
+diff --git a/src/process.h b/src/process.h
+index c8754992..771af105 100644
+--- a/src/process.h
++++ b/src/process.h
+@@ -11,8 +11,6 @@
+ #include <optional>
+ #include <unordered_map>
+ 
+-#include <boost/process.hpp>
+-
+ #include "config.h"
+ #include "platform/common.h"
+ #include "rtsp.h"
+@@ -68,7 +66,7 @@ namespace proc {
+     KITTY_DEFAULT_CONSTR_MOVE_THROW(proc_t)
+ 
+     proc_t(
+-      boost::process::environment &&env,
++      bp::environment &&env,
+       std::vector<ctx_t> &&apps):
+         _app_id(0),
+         _env(std::move(env)),
+@@ -99,7 +97,7 @@ namespace proc {
+   private:
+     int _app_id;
+ 
+-    boost::process::environment _env;
++    bp::environment _env;
+     std::vector<ctx_t> _apps;
+     ctx_t _app;
+     std::chrono::steady_clock::time_point _app_launch_time;
+@@ -107,8 +105,8 @@ namespace proc {
+     // If no command associated with _app_id, yet it's still running
+     bool placebo {};
+ 
+-    boost::process::child _process;
+-    boost::process::group _process_group;
++    bp::child _process;
++    bp::group _process_group;
+ 
+     file_t _pipe;
+     std::vector<cmd_t>::const_iterator _app_prep_it;
+diff --git a/src/system_tray.cpp b/src/system_tray.cpp
+index c34c3d75..e684ec83 100644
+--- a/src/system_tray.cpp
++++ b/src/system_tray.cpp
+@@ -33,7 +33,11 @@
+   // lib includes
+   #include "tray/tray.h"
+   #include <boost/filesystem.hpp>
++#if BOOST_VERSION < 108600
+   #include <boost/process/environment.hpp>
++#else
++  #include <boost/process/v1/environment.hpp>
++#endif
+ 
+   // local includes
+   #include "confighttp.h"

diff --git a/net-misc/sunshine/sunshine-0.23.1.ebuild b/net-misc/sunshine/sunshine-0.23.1.ebuild
index d3f22bd6db88..81552c090837 100644
--- a/net-misc/sunshine/sunshine-0.23.1.ebuild
+++ b/net-misc/sunshine/sunshine-0.23.1.ebuild
@@ -180,6 +180,7 @@ PATCHES=(
 	"${FILESDIR}"/${PN}-0.22.0-nvcodec.patch
 	"${FILESDIR}"/${PN}-find-npm.patch
 	"${FILESDIR}"/${PN}-miniupnpc.patch
+	"${FILESDIR}"/${PN}-boost-1.86.patch
 )
 
 # Make this mess a bit simpler.

diff --git a/net-misc/sunshine/sunshine-9999.ebuild b/net-misc/sunshine/sunshine-9999.ebuild
index 14c21c43170b..ea60b498ecf2 100644
--- a/net-misc/sunshine/sunshine-9999.ebuild
+++ b/net-misc/sunshine/sunshine-9999.ebuild
@@ -126,7 +126,7 @@ REQUIRED_USE="
 "
 
 CDEPEND="
-	>=dev-libs/boost-1.85:=[nls]
+	>=dev-libs/boost-1.86:=[nls]
 	dev-libs/libevdev
 	dev-libs/openssl:=
 	media-libs/opus


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-11-08 23:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-17 23:39 [gentoo-commits] repo/gentoo:master commit in: net-misc/sunshine/files/, net-misc/sunshine/ James Le Cuirot
  -- strict thread matches above, loose matches on Subject: below --
2024-02-18 15:21 James Le Cuirot
2024-05-11 17:46 James Le Cuirot
2024-06-23 15:46 James Le Cuirot
2024-11-08 23:46 James Le Cuirot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox