From 666ca01a0557c14e634b68689c71457408cc08bf Mon Sep 17 00:00:00 2001 From: Pim Vermeer Date: Sat, 20 Jan 2024 14:12:51 +0000 Subject: [PATCH 1/4] fix(build-linux): find the correct paths for systemd units and udev rules in cmake --- cmake/FindSystemd.cmake | 34 ++++++++++++++++++++++++++++++++++ cmake/FindUdev.cmake | 28 ++++++++++++++++++++++++++++ cmake/packaging/linux.cmake | 7 +++++-- 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 cmake/FindSystemd.cmake create mode 100644 cmake/FindUdev.cmake diff --git a/cmake/FindSystemd.cmake b/cmake/FindSystemd.cmake new file mode 100644 index 0000000000..36d73be6a4 --- /dev/null +++ b/cmake/FindSystemd.cmake @@ -0,0 +1,34 @@ +# - Try to find Systemd +# Once done this will define +# +# SYSTEMD_FOUND - system has systemd +# SYSTEMD_USER_UNIT_INSTALL_DIR - the systemd system unit install directory +# SYSTEMD_SYSTEM_UNIT_INSTALL_DIR - the systemd user unit install directory + +IF (NOT WIN32) + + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_check_modules(SYSTEMD "systemd") + endif() + + if (SYSTEMD_FOUND) + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} + --variable=systemd_user_unit_dir systemd + OUTPUT_VARIABLE SYSTEMD_USER_UNIT_INSTALL_DIR) + + string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_USER_UNIT_INSTALL_DIR + "${SYSTEMD_USER_UNIT_INSTALL_DIR}") + + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} + --variable=systemd_system_unit_dir systemd + OUTPUT_VARIABLE SYSTEMD_SYSTEM_UNIT_INSTALL_DIR) + + string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SYSTEM_UNIT_INSTALL_DIR + "${SYSTEMD_SYSTEM_UNIT_INSTALL_DIR}") + + mark_as_advanced(SYSTEMD_USER_UNIT_INSTALL_DIR SYSTEMD_SYSTEM_UNIT_INSTALL_DIR) + + endif () + +ENDIF () diff --git a/cmake/FindUdev.cmake b/cmake/FindUdev.cmake new file mode 100644 index 0000000000..748c322347 --- /dev/null +++ b/cmake/FindUdev.cmake @@ -0,0 +1,28 @@ +# - Try to find Udev +# Once done this will define +# +# UDEV_FOUND - system has udev +# UDEV_RULES_INSTALL_DIR - the udev rules install directory + +IF (NOT WIN32) + + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_check_modules(UDEV "udev") + endif() + + if (UDEV_FOUND) + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} + --variable=udevdir udev + OUTPUT_VARIABLE UDEV_RULES_INSTALL_DIR) + + string(REGEX REPLACE "[ \t\n]+" "" UDEV_RULES_INSTALL_DIR + "${UDEV_RULES_INSTALL_DIR}") + + set(UDEV_RULES_INSTALL_DIR "${UDEV_RULES_INSTALL_DIR}/rules.d") + + mark_as_advanced(UDEV_RULES_INSTALL_DIR) + + endif () + +ENDIF () diff --git a/cmake/packaging/linux.cmake b/cmake/packaging/linux.cmake index 517224d3cb..8563414a40 100644 --- a/cmake/packaging/linux.cmake +++ b/cmake/packaging/linux.cmake @@ -8,10 +8,13 @@ if(${SUNSHINE_BUILD_APPIMAGE} OR ${SUNSHINE_BUILD_FLATPAK}) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sunshine.service" DESTINATION "${SUNSHINE_ASSETS_DIR}/systemd/user") else() + find_package(Systemd) + find_package(Udev) + install(FILES "${SUNSHINE_SOURCE_ASSETS_DIR}/linux/misc/85-sunshine.rules" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/udev/rules.d") + DESTINATION "${UDEV_RULES_INSTALL_DIR}") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sunshine.service" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/systemd/user") + DESTINATION "${SYSTEMD_USER_UNIT_INSTALL_DIR}") endif() # Post install From bf2adcb7e3ce92556c85e7ab2f6bad12636db8b9 Mon Sep 17 00:00:00 2001 From: Pim Vermeer Date: Sun, 21 Jan 2024 16:57:13 +0000 Subject: [PATCH 2/4] fix(style): make cmake-lint happy --- cmake/FindSystemd.cmake | 34 +++++++++++++++++----------------- cmake/FindUdev.cmake | 28 ++++++++++++++-------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/cmake/FindSystemd.cmake b/cmake/FindSystemd.cmake index 36d73be6a4..3f1d259966 100644 --- a/cmake/FindSystemd.cmake +++ b/cmake/FindSystemd.cmake @@ -7,28 +7,28 @@ IF (NOT WIN32) - find_package(PkgConfig QUIET) - if(PKG_CONFIG_FOUND) - pkg_check_modules(SYSTEMD "systemd") - endif() + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_check_modules(SYSTEMD "systemd") + endif() - if (SYSTEMD_FOUND) - execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} - --variable=systemd_user_unit_dir systemd - OUTPUT_VARIABLE SYSTEMD_USER_UNIT_INSTALL_DIR) + if (SYSTEMD_FOUND) + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} + --variable=systemd_user_unit_dir systemd + OUTPUT_VARIABLE SYSTEMD_USER_UNIT_INSTALL_DIR) - string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_USER_UNIT_INSTALL_DIR - "${SYSTEMD_USER_UNIT_INSTALL_DIR}") + string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_USER_UNIT_INSTALL_DIR + "${SYSTEMD_USER_UNIT_INSTALL_DIR}") - execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} - --variable=systemd_system_unit_dir systemd - OUTPUT_VARIABLE SYSTEMD_SYSTEM_UNIT_INSTALL_DIR) + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} + --variable=systemd_system_unit_dir systemd + OUTPUT_VARIABLE SYSTEMD_SYSTEM_UNIT_INSTALL_DIR) - string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SYSTEM_UNIT_INSTALL_DIR - "${SYSTEMD_SYSTEM_UNIT_INSTALL_DIR}") + string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SYSTEM_UNIT_INSTALL_DIR + "${SYSTEMD_SYSTEM_UNIT_INSTALL_DIR}") - mark_as_advanced(SYSTEMD_USER_UNIT_INSTALL_DIR SYSTEMD_SYSTEM_UNIT_INSTALL_DIR) + mark_as_advanced(SYSTEMD_USER_UNIT_INSTALL_DIR SYSTEMD_SYSTEM_UNIT_INSTALL_DIR) - endif () + endif () ENDIF () diff --git a/cmake/FindUdev.cmake b/cmake/FindUdev.cmake index 748c322347..8343f791d3 100644 --- a/cmake/FindUdev.cmake +++ b/cmake/FindUdev.cmake @@ -6,23 +6,23 @@ IF (NOT WIN32) - find_package(PkgConfig QUIET) - if(PKG_CONFIG_FOUND) - pkg_check_modules(UDEV "udev") - endif() + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_check_modules(UDEV "udev") + endif() - if (UDEV_FOUND) - execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} - --variable=udevdir udev - OUTPUT_VARIABLE UDEV_RULES_INSTALL_DIR) + if (UDEV_FOUND) + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} + --variable=udevdir udev + OUTPUT_VARIABLE UDEV_RULES_INSTALL_DIR) - string(REGEX REPLACE "[ \t\n]+" "" UDEV_RULES_INSTALL_DIR - "${UDEV_RULES_INSTALL_DIR}") - - set(UDEV_RULES_INSTALL_DIR "${UDEV_RULES_INSTALL_DIR}/rules.d") + string(REGEX REPLACE "[ \t\n]+" "" UDEV_RULES_INSTALL_DIR + "${UDEV_RULES_INSTALL_DIR}") - mark_as_advanced(UDEV_RULES_INSTALL_DIR) + set(UDEV_RULES_INSTALL_DIR "${UDEV_RULES_INSTALL_DIR}/rules.d") - endif () + mark_as_advanced(UDEV_RULES_INSTALL_DIR) + + endif () ENDIF () From 71b0b5ace3cc40525edfecbb69d24d639f11a7d8 Mon Sep 17 00:00:00 2001 From: Pim Vermeer Date: Sun, 21 Jan 2024 17:00:39 +0000 Subject: [PATCH 3/4] fix(build-linux): added missing udev dependency to debian based docker --- docker/debian-bookworm.dockerfile | 1 + docker/debian-bullseye.dockerfile | 1 + docker/ubuntu-20.04.dockerfile | 1 + docker/ubuntu-22.04.dockerfile | 1 + 4 files changed, 4 insertions(+) diff --git a/docker/debian-bookworm.dockerfile b/docker/debian-bookworm.dockerfile index 6eb1108bf1..a62e092eab 100644 --- a/docker/debian-bookworm.dockerfile +++ b/docker/debian-bookworm.dockerfile @@ -61,6 +61,7 @@ apt-get install -y --no-install-recommends \ libxtst-dev \ nodejs \ npm \ + udev \ wget if [[ "${TARGETPLATFORM}" == 'linux/amd64' ]]; then apt-get install -y --no-install-recommends \ diff --git a/docker/debian-bullseye.dockerfile b/docker/debian-bullseye.dockerfile index d9862432ce..f355307631 100644 --- a/docker/debian-bullseye.dockerfile +++ b/docker/debian-bullseye.dockerfile @@ -60,6 +60,7 @@ apt-get install -y --no-install-recommends \ libxfixes-dev \ libxrandr-dev \ libxtst-dev \ + udev \ wget if [[ "${TARGETPLATFORM}" == 'linux/amd64' ]]; then apt-get install -y --no-install-recommends \ diff --git a/docker/ubuntu-20.04.dockerfile b/docker/ubuntu-20.04.dockerfile index 4715475ac6..d677830db5 100644 --- a/docker/ubuntu-20.04.dockerfile +++ b/docker/ubuntu-20.04.dockerfile @@ -61,6 +61,7 @@ apt-get install -y --no-install-recommends \ libxfixes-dev \ libxrandr-dev \ libxtst-dev \ + udev \ wget if [[ "${TARGETPLATFORM}" == 'linux/amd64' ]]; then apt-get install -y --no-install-recommends \ diff --git a/docker/ubuntu-22.04.dockerfile b/docker/ubuntu-22.04.dockerfile index 0e975df055..ab6ec096a3 100644 --- a/docker/ubuntu-22.04.dockerfile +++ b/docker/ubuntu-22.04.dockerfile @@ -60,6 +60,7 @@ apt-get install -y --no-install-recommends \ libxfixes-dev \ libxrandr-dev \ libxtst-dev \ + udev \ wget if [[ "${TARGETPLATFORM}" == 'linux/amd64' ]]; then apt-get install -y --no-install-recommends \ From ee34af30088cbe661099e74f243b2423fb7788e9 Mon Sep 17 00:00:00 2001 From: Pim Vermeer Date: Sun, 21 Jan 2024 17:06:50 +0000 Subject: [PATCH 4/4] fix(build-linux): use older variable name in systemd query The Ubuntu 20.x uses an older systemd version. Both variable names work for all distros. --- cmake/FindSystemd.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/FindSystemd.cmake b/cmake/FindSystemd.cmake index 3f1d259966..c41ca64d24 100644 --- a/cmake/FindSystemd.cmake +++ b/cmake/FindSystemd.cmake @@ -14,14 +14,14 @@ IF (NOT WIN32) if (SYSTEMD_FOUND) execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} - --variable=systemd_user_unit_dir systemd + --variable=systemduserunitdir systemd OUTPUT_VARIABLE SYSTEMD_USER_UNIT_INSTALL_DIR) string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_USER_UNIT_INSTALL_DIR "${SYSTEMD_USER_UNIT_INSTALL_DIR}") execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} - --variable=systemd_system_unit_dir systemd + --variable=systemdsystemunitdir systemd OUTPUT_VARIABLE SYSTEMD_SYSTEM_UNIT_INSTALL_DIR) string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SYSTEM_UNIT_INSTALL_DIR