From fb3f115692db84f5f427755d9cf02cc14e9262fa Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 7 Apr 2023 12:42:04 +0200 Subject: [PATCH 01/17] BUILD(cmake): Fix incorrect usage of pkg_search_module The incorrect use of this function caused calls to get_pkgconf_variable to fail. Fixes #6038 --- cmake/pkg-utils.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/pkg-utils.cmake b/cmake/pkg-utils.cmake index b5e0de74a61..bcf7f6ab980 100644 --- a/cmake/pkg-utils.cmake +++ b/cmake/pkg-utils.cmake @@ -252,8 +252,8 @@ function(get_pkgconf_variable) message(FATAL_ERROR "get_pkgconf_variable: pkg-config was not found - can't use it to fetch variables") endif() - pkg_search_module("${GET_PKGCONF_VAR_MODULE}" QUIET) - if(NOT ${GET_PKGCONF_VAR_MODULE}_FOUND) + pkg_search_module("PKGCONF_MODULE" "${GET_PKGCONF_VAR_MODULE}" QUIET) + if(NOT PKGCONF_MODULE_FOUND) if(GET_PKGCONF_VAR_DEBUG) message(STATUS "Unable to find module \"${GET_PKGCONF_VAR_MODULE}\" via pkg-conf") set(VAR_VALUE "NOTFOUND") From 81b6eb47733fb3d04c77ffbe3e030068b211b0e8 Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 7 Apr 2023 12:46:35 +0200 Subject: [PATCH 02/17] BUILD(cmake): Don't quietly ignore pkgconf issues When inferring install paths from pkgconf, failures to do so should not be silently ignored. Fixes #6038 --- auxiliary_files/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index 77eb27d2cc3..30ca1b02ee8 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -69,7 +69,6 @@ if(server) OUTPUT_VARIABLE SYSUSERS_DIR MODULE systemd VARIABLE_NAME sysusersdir - QUIET ) if(NOT SYSUSERS_DIR) # Fallback value, in case it could not be fetched via pkg-config @@ -79,7 +78,6 @@ if(server) OUTPUT_VARIABLE SYSTEMD_SERVICE_DIR MODULE systemd VARIABLE_NAME systemd_system_unit_dir - QUIET ) if(NOT SYSTEMD_SERVICE_DIR) # Default to /etc/systemd/system - This is not where packages ought to install their service files (rather From ea988fe0c8900881a607f856f7efc1bd4b0aa642 Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 7 Apr 2023 12:52:04 +0200 Subject: [PATCH 03/17] BUILD(cmake): Fix fallback install dir for sysusersdir --- auxiliary_files/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index 30ca1b02ee8..02ec0e3f45c 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -72,7 +72,7 @@ if(server) ) if(NOT SYSUSERS_DIR) # Fallback value, in case it could not be fetched via pkg-config - set(SYSUSERS_DIR "${CMAKE_INSTALL_SYSCONFDIR}/sysconfig.d") + set(SYSUSERS_DIR "${CMAKE_INSTALL_SYSCONFDIR}/sysusers.d") endif() get_pkgconf_variable( OUTPUT_VARIABLE SYSTEMD_SERVICE_DIR From eccc834c7c68e88e36868e6b6d0c9cad6f599789 Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 7 Apr 2023 12:52:21 +0200 Subject: [PATCH 04/17] BUILD(cmake): Warn when using fallback install dirs --- auxiliary_files/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index 02ec0e3f45c..cfa982c6aa3 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -73,6 +73,7 @@ if(server) if(NOT SYSUSERS_DIR) # Fallback value, in case it could not be fetched via pkg-config set(SYSUSERS_DIR "${CMAKE_INSTALL_SYSCONFDIR}/sysusers.d") + message(WARNING "Using fallback install path for sysusers directory at '${SYSUSERS_DIR}'") endif() get_pkgconf_variable( OUTPUT_VARIABLE SYSTEMD_SERVICE_DIR @@ -84,6 +85,7 @@ if(server) # it's where an admin is supposed to add their system files), but this seems to be the most consistent # path across different platforms, so we use it anyway. set(SYSTEMD_SERVICE_DIR "${CMAKE_INSTALL_SYSCONFDIR}/systemd/system") + message(WARNING "Using fallback install path for systemd service directory at '${SYSTEMD_SERVICE_DIR}'") endif() delayed_configure_files( From 745f4af3b6fae59c3d6f50aa912a7a19588d52a6 Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 7 Apr 2023 12:59:04 +0200 Subject: [PATCH 05/17] BUILD(cmake): Restrict read access for installed server ini file Fixes #6039 --- auxiliary_files/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index cfa982c6aa3..9195a86318b 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -115,7 +115,10 @@ if(server) if(UNIX AND NOT APPLE) install(FILES "man_files/mumble-server.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc) - install(FILES "mumble-server.ini" DESTINATION "${MUMBLE_INSTALL_SYSCONFDIR}" COMPONENT mumble_server) + install( + FILES "mumble-server.ini" DESTINATION "${MUMBLE_INSTALL_SYSCONFDIR}" COMPONENT mumble_server + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ + ) if(ice) install(FILES "${CMAKE_SOURCE_DIR}/src/murmur/MumbleServer.ice" DESTINATION "${MUMBLE_INSTALL_SYSCONFDIR}" COMPONENT mumble_server) From 3eb0668caab2b141bf1c403c484a8baa4e524bc1 Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 7 Apr 2023 13:02:18 +0200 Subject: [PATCH 06/17] BUILD(cmake): Search for sysusers_dir to apply more broadly --- auxiliary_files/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index 9195a86318b..921a48dcc70 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -68,7 +68,7 @@ if(server) get_pkgconf_variable( OUTPUT_VARIABLE SYSUSERS_DIR MODULE systemd - VARIABLE_NAME sysusersdir + VARIABLE_NAME sysusers_dir ) if(NOT SYSUSERS_DIR) # Fallback value, in case it could not be fetched via pkg-config From 00369086c7de9fe59b7d5aad9993ced0d3358354 Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 7 Apr 2023 13:15:13 +0200 Subject: [PATCH 07/17] BUILD(cmake): Ensure ownership of installed INI file By using systemd-tmpfiles, we can let the system set the ownership of the installed Mumble server INI file to be root and the group ownership to be _mumble-server, which is the special user that will start the server through the systemd service file. The group ownership ensures that the server has read access to the INI file. --- auxiliary_files/CMakeLists.txt | 10 ++++++++++ auxiliary_files/config_files/mumble-server.tmpfiles | 6 ++++++ 2 files changed, 16 insertions(+) create mode 100644 auxiliary_files/config_files/mumble-server.tmpfiles diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index 921a48dcc70..9f7ff7a109b 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -87,6 +87,15 @@ if(server) set(SYSTEMD_SERVICE_DIR "${CMAKE_INSTALL_SYSCONFDIR}/systemd/system") message(WARNING "Using fallback install path for systemd service directory at '${SYSTEMD_SERVICE_DIR}'") endif() + get_pkgconf_variable( + OUTPUT_VARIABLE TMPFILES_DIR + MODULE systemd + VARIABLE_NAME tmpfiles_dir + ) + if(NOT TMPFILES_DIR) + set(TMPFILES_DIR "${CMAKE_INSTALL_SYSCONFDIR}/tmpfiles.d") + message(WARNING "Using fallback install path for tmpfiles directory at '${TMPFILES_DIR}'") + endif() delayed_configure_files( TARGET mumble-server @@ -106,6 +115,7 @@ if(server) install(FILES "man_files/mumble-server-user-wrapper.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc) install(FILES "config_files/mumble-server.sysusers" DESTINATION "${SYSUSERS_DIR}" COMPONENT mumble_server RENAME "mumble-server.conf") + install(FILES "config_files/mumble-server.tmpfiles" DESTINATION "${TMPFILES_DIR}" COMPONENT mumble_server RENAME "mumble-server.conf") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server.service" DESTINATION "${SYSTEMD_SERVICE_DIR}" COMPONENT mumble_server) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server-user-wrapper" DESTINATION "${MUMBLE_INSTALL_EXECUTABLEDIR}" COMPONENT mumble_server) diff --git a/auxiliary_files/config_files/mumble-server.tmpfiles b/auxiliary_files/config_files/mumble-server.tmpfiles new file mode 100644 index 00000000000..2bb9a3b9142 --- /dev/null +++ b/auxiliary_files/config_files/mumble-server.tmpfiles @@ -0,0 +1,6 @@ +# When this file is processed by systemd-tmpfiles, it will change the group-ownership +# of the installed Mumble server ini file to _mumble-server to make it readable for the +# special user used to execute the Mumble server when started via systemd + +# Type # Path # Mode # User # Group +z /etc/mumble/mumble-server.ini 0640 root _mumble-server From 91bd715c1125ff76a833a5c28e77885bdf1e149a Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 7 Apr 2023 13:35:16 +0200 Subject: [PATCH 08/17] BUILD(cmake): Make mumble-server-userwrapper executable --- auxiliary_files/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index 9f7ff7a109b..6c0d3a73730 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -118,7 +118,9 @@ if(server) install(FILES "config_files/mumble-server.tmpfiles" DESTINATION "${TMPFILES_DIR}" COMPONENT mumble_server RENAME "mumble-server.conf") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server.service" DESTINATION "${SYSTEMD_SERVICE_DIR}" COMPONENT mumble_server) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server-user-wrapper" DESTINATION "${MUMBLE_INSTALL_EXECUTABLEDIR}" COMPONENT mumble_server) + install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server-user-wrapper" DESTINATION "${MUMBLE_INSTALL_EXECUTABLEDIR}" COMPONENT mumble_server + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) install(FILES "config_files/mumble-server.conf" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/dbus-1/system.d" COMPONENT mumble_server) endif() From 3be8a5a33518d393d45cf7893a59eb1d61e37c17 Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 7 Apr 2023 13:39:07 +0200 Subject: [PATCH 09/17] MAINT: Use proper paths in mumble-server-userwrapper The script assumed that the server executable is installed to /usr/sbin, but this is not necessarily the case. --- auxiliary_files/run_scripts/mumble-server-user-wrapper.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/auxiliary_files/run_scripts/mumble-server-user-wrapper.in b/auxiliary_files/run_scripts/mumble-server-user-wrapper.in index 3890e5753d4..cf67b1b66ff 100755 --- a/auxiliary_files/run_scripts/mumble-server-user-wrapper.in +++ b/auxiliary_files/run_scripts/mumble-server-user-wrapper.in @@ -44,7 +44,7 @@ done DBUSFILE=$DIR/.dbus.sh if [ $DO_KILL == 1 ]; then - if pkill -U $UID -u $EUID -o -x -f "/usr/sbin/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini"; then + if pkill -U $UID -u $EUID -o -x -f "@MUMBLE_INSTALL_ABS_EXECUTABLEDIR@/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini"; then echo "Termination signal sent" else echo "Mumble server process not found; not terminated" @@ -82,11 +82,11 @@ fi if [ "X$SETPW" != "X" ]; then echo "Setting superuser password to \"$SETPW\"" - /usr/sbin/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini -supw $SETPW + @MUMBLE_INSTALL_ABS_EXECUTABLEDIR@/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini -supw $SETPW exit 0 fi -PID=$(pgrep -U $UID -u $EUID -o -x -f "/usr/sbin/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini") +PID=$(pgrep -U $UID -u $EUID -o -x -f "@MUMBLE_INSTALL_ABS_EXECUTABLEDIR@/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini") if [ $DO_STATUS == 1 ]; then if [ "X$PID" != "X" ]; then @@ -117,4 +117,4 @@ if ! dbus-send --print-reply --dest=org.freedesktop.DBus --type=method_call / or fi echo "Starting Mumble server" -exec /usr/sbin/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini +exec @MUMBLE_INSTALL_ABS_EXECUTABLEDIR@/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini From 1fbf541d3f87f495617361c981f94399ab57855c Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Sat, 8 Apr 2023 13:55:13 +0200 Subject: [PATCH 10/17] MAINT: Rename cmake project "mumble" Since the project's name appears in the cmake generated install path for the doc directory and it these directory names are usually lowercase, the project name was changed to be lowercase as well. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 877cfe023ae..c5180625424 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ endif() # Get compilation year string(TIMESTAMP MUMBLE_BUILD_YEAR "%Y") -project(Mumble +project(mumble VERSION "1.6.${BUILD_NUMBER}" DESCRIPTION "Open source, low-latency, high quality voice chat." HOMEPAGE_URL "https://www.mumble.info" From a7a82faafc3e8fd141a3001bacdca85e36bd9aaf Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Sat, 8 Apr 2023 13:57:58 +0200 Subject: [PATCH 11/17] BUILD(cmake): Centralize install path handling Instead of computing the install paths for auxiliary files inside the respective directory, we now bundle the install path determination with the rest of the paths inside the dedicated script. --- auxiliary_files/CMakeLists.txt | 42 ++----------- cmake/install-paths.cmake | 110 ++++++++++++++++++++++++++------- 2 files changed, 92 insertions(+), 60 deletions(-) diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index 6c0d3a73730..1a8c859d9b0 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -52,8 +52,8 @@ if(client AND UNIX AND NOT APPLE) @ONLY ) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/info.mumble.Mumble.appdata.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo") - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/info.mumble.Mumble.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/info.mumble.Mumble.appdata.xml" DESTINATION "${MUMBLE_INSTALL_METADATADIR}") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/info.mumble.Mumble.desktop" DESTINATION "${MUMBLE_INSTALL_APPLICATIONSDIR}") # Install Mumble client man files install(FILES "man_files/mumble.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc) @@ -65,38 +65,6 @@ if(server) # systemd related files if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") - get_pkgconf_variable( - OUTPUT_VARIABLE SYSUSERS_DIR - MODULE systemd - VARIABLE_NAME sysusers_dir - ) - if(NOT SYSUSERS_DIR) - # Fallback value, in case it could not be fetched via pkg-config - set(SYSUSERS_DIR "${CMAKE_INSTALL_SYSCONFDIR}/sysusers.d") - message(WARNING "Using fallback install path for sysusers directory at '${SYSUSERS_DIR}'") - endif() - get_pkgconf_variable( - OUTPUT_VARIABLE SYSTEMD_SERVICE_DIR - MODULE systemd - VARIABLE_NAME systemd_system_unit_dir - ) - if(NOT SYSTEMD_SERVICE_DIR) - # Default to /etc/systemd/system - This is not where packages ought to install their service files (rather - # it's where an admin is supposed to add their system files), but this seems to be the most consistent - # path across different platforms, so we use it anyway. - set(SYSTEMD_SERVICE_DIR "${CMAKE_INSTALL_SYSCONFDIR}/systemd/system") - message(WARNING "Using fallback install path for systemd service directory at '${SYSTEMD_SERVICE_DIR}'") - endif() - get_pkgconf_variable( - OUTPUT_VARIABLE TMPFILES_DIR - MODULE systemd - VARIABLE_NAME tmpfiles_dir - ) - if(NOT TMPFILES_DIR) - set(TMPFILES_DIR "${CMAKE_INSTALL_SYSCONFDIR}/tmpfiles.d") - message(WARNING "Using fallback install path for tmpfiles directory at '${TMPFILES_DIR}'") - endif() - delayed_configure_files( TARGET mumble-server FILES @@ -114,10 +82,10 @@ if(server) install(FILES "man_files/mumble-server-user-wrapper.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc) - install(FILES "config_files/mumble-server.sysusers" DESTINATION "${SYSUSERS_DIR}" COMPONENT mumble_server RENAME "mumble-server.conf") - install(FILES "config_files/mumble-server.tmpfiles" DESTINATION "${TMPFILES_DIR}" COMPONENT mumble_server RENAME "mumble-server.conf") + install(FILES "config_files/mumble-server.sysusers" DESTINATION "${MUMBLE_INSTALL_SYSUSERSDIR}" COMPONENT mumble_server RENAME "mumble-server.conf") + install(FILES "config_files/mumble-server.tmpfiles" DESTINATION "${MUMBLE_INSTALL_TMPFILESDIR}" COMPONENT mumble_server RENAME "mumble-server.conf") - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server.service" DESTINATION "${SYSTEMD_SERVICE_DIR}" COMPONENT mumble_server) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server.service" DESTINATION "${MUMBLE_INSTALL_SERVICEFILEDIR}" COMPONENT mumble_server) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server-user-wrapper" DESTINATION "${MUMBLE_INSTALL_EXECUTABLEDIR}" COMPONENT mumble_server PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) diff --git a/cmake/install-paths.cmake b/cmake/install-paths.cmake index aea041cfded..08e129403b9 100644 --- a/cmake/install-paths.cmake +++ b/cmake/install-paths.cmake @@ -4,6 +4,7 @@ # Mumble source tree or at . include(GNUInstallDirs) +include(pkg-utils) # Turns a path into an absolute path if it isn't absolute already function(make_absolute out_path in_path) @@ -19,27 +20,65 @@ function(assert_is_relative path) endif() endfunction() +function(pkgconf_install_path outputVariable module variable default) + find_package(PkgConfig) + + if(NOT PkgConfig_FOUND) + # Immediately use the default and return + set(${outputVariable} "${default}" PARENT_SCOPE) + return() + endif() + + get_pkgconf_variable( + OUTPUT_VARIABLE PKGCONF_PATH + MODULE ${module} + VARIABLE_NAME ${variable} + ) + + if(NOT PKGCONF_PATH) + set(${outputVariable} "${default}" PARENT_SCOPE) + message(WARNING "Using fallback install path for ${outputVariable}: '${default}'") + elseif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(${outputVariable} "${PKGCONF_PATH}" PARENT_SCOPE) + else() + # The paths returned by pkgconf are always absolute, which breaks cmake's system using + # CMAKE_INSTALL_PREFIX to determine where file should be installed to. + # Therefore, we have to make the path relative instead. + if("${PKGCONF_PATH}" MATCHES "^/usr/local/.*") + string(REGEX REPLACE "^/usr/local/" "" REL_PATH "${PKGCONF_PATH}") + elseif("${PKGCONF_PATH}" MATCHES "^/usr/.*") + string(REGEX REPLACE "^/usr/" "" REL_PATH "${PKGCONF_PATH}") + else() + string(REGEX REPLACE "^/" "" REL_PATH "${PKGCONF_PATH}") + endif() + + set(${outputVariable} "${REL_PATH}" PARENT_SCOPE) + endif() +endfunction() + if(UNIX) if(APPLE) set(EXECUTABLEDIR_DEFAULT ".") - set(LIBDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/mumble") - set(PLUGINDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/mumble/plugins") - set(SCRIPTDIR_DEFAULT "${CMAKE_INSTALL_BINDIR}") - set(MANDIR_DEFAULT "${CMAKE_INSTALL_MANDIR}/man1") - set(DOCDIR_DEFAULT "${CMAKE_INSTALL_DOCDIR}") - set(LICENSEDIR_DEFAULT "${EXECUTABLEDIR_DEFAULT}/licenses") - set(SYSCONFDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/mumble") + set(SERVICEFILEDIR_DEFAULT "./services/") + set(SYSUSERSDIR_DEFAULT "./sysusers/") + set(TMPFILESDIR_DEFAULT "./tmpfiles/") else() - set(EXECUTABLEDIR_DEFAULT "bin") - set(LIBDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/mumble") - set(PLUGINDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/mumble/plugins") - set(SCRIPTDIR_DEFAULT "${CMAKE_INSTALL_BINDIR}") - set(MANDIR_DEFAULT "${CMAKE_INSTALL_MANDIR}/man1") - set(DOCDIR_DEFAULT "${CMAKE_INSTALL_DOCDIR}") - set(LICENSEDIR_DEFAULT "${EXECUTABLEDIR_DEFAULT}/licenses") - set(SYSCONFDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/mumble") + set(EXECUTABLEDIR_DEFAULT "${CMAKE_INSTALL_BINDIR}") + pkgconf_install_path(SERVICEFILEDIR_DEFAULT systemd systemd_system_unit_dir "${CMAKE_INSTALL_SYSCONFDIR}/systemd/system/") + pkgconf_install_path(SYSUSERSDIR_DEFAULT systemd sysusers_dir "${CMAKE_INSTALL_SYSCONFDIR}/sysusers.d") + pkgconf_install_path(TMPFILESDIR_DEFAULT systemd tmpfiles_dir "${CMAKE_INSTALL_SYSCONFDIR}/tmpfiles.d") endif() + + set(LIBDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/mumble") + set(PLUGINDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/mumble/plugins") + set(SCRIPTDIR_DEFAULT "${CMAKE_INSTALL_BINDIR}") + set(MANDIR_DEFAULT "${CMAKE_INSTALL_MANDIR}/man1") + set(DOCDIR_DEFAULT "${CMAKE_INSTALL_DOCDIR}") + set(LICENSEDIR_DEFAULT "${EXECUTABLEDIR_DEFAULT}/licenses") + set(SYSCONFDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/mumble") + set(METADATADIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/metainfo") + set(APPLICATIONSDIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/applications") else() set(EXECUTABLEDIR_DEFAULT ".") # In order for the installer to produce a working version of Mumble, this @@ -51,6 +90,11 @@ else() set(DOCDIR_DEFAULT "./docs") set(LICENSEDIR_DEFAULT "${EXECUTABLEDIR_DEFAULT}/licenses") set(SYSCONFDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/mumble") + set(METADATADIR_DEFAULT "./metainfo") + set(APPLICATIONSDIR_DEFAULT "./applications") + set(SERVICEFILEDIR_DEFAULT "./services/") + set(SYSUSERSDIR_DEFAULT "./sysusers/") + set(TMPFILESDIR_DEFAULT "./tmpfiles/") endif() set(MUMBLE_INSTALL_EXECUTABLEDIR "${EXECUTABLEDIR_DEFAULT}" CACHE PATH "The directory to install the main executable(s) into") @@ -61,6 +105,11 @@ set(MUMBLE_INSTALL_MANDIR "${MANDIR_DEFAULT}" CACHE PATH "The directory to insta set(MUMBLE_INSTALL_DOCDIR "${DOCDIR_DEFAULT}" CACHE PATH "The directory to install documentation files into") set(MUMBLE_INSTALL_LICENSEDIR "${LICENSEDIR_DEFAULT}" CACHE PATH "The directory to install license files into") set(MUMBLE_INSTALL_SYSCONFDIR "${SYSCONFDIR_DEFAULT}" CACHE PATH "The directory to install system-wide config files to") +set(MUMBLE_INSTALL_METADATADIR "${METADATADIR_DEFAULT}" CACHE PATH "The directory to install metadata files files to") +set(MUMBLE_INSTALL_APPLICATIONSDIR "${APPLICATIONSDIR_DEFAULT}" CACHE PATH "The directory to install application files files to") +set(MUMBLE_INSTALL_SERVICEFILEDIR "${SERVICEFILEDIR_DEFAULT}" CACHE PATH "The directory to install systemd service files to") +set(MUMBLE_INSTALL_SYSUSERSDIR "${SYSUSERSDIR_DEFAULT}" CACHE PATH "The directory to install systemd sysusers files to") +set(MUMBLE_INSTALL_TMPFILESDIR "${TMPFILESDIR_DEFAULT}" CACHE PATH "The directory to install systemd tmpfiles files to") if(packaging) # Using absolute install paths doesn't allow CPack to create the installer for us. @@ -73,6 +122,11 @@ if(packaging) assert_is_relative("${MUMBLE_INSTALL_DOCDIR}") assert_is_relative("${MUMBLE_INSTALL_LICENSEDIR}") assert_is_relative("${MUMBLE_INSTALL_SYSCONFDIR}") + assert_is_relative("${MUMBLE_INSTALL_METADATADIR}") + assert_is_relative("${MUMBLE_INSTALL_APPLICATIONSDIR}") + assert_is_relative("${MUMBLE_INSTALL_SERVICEFILEDIR}") + assert_is_relative("${MUMBLE_INSTALL_SYSUSERSDIR}") + assert_is_relative("${MUMBLE_INSTALL_TMPFILESDIR}") if (WIN32) if(NOT "${MUMBLE_INSTALL_LIBDIR}" STREQUAL "${LIBDIR_DEFAULT}") @@ -92,20 +146,30 @@ make_absolute(MUMBLE_INSTALL_ABS_MANDIR "${MUMBLE_INSTALL_MANDIR}") make_absolute(MUMBLE_INSTALL_ABS_DOCDIR "${MUMBLE_INSTALL_DOCDIR}") make_absolute(MUMBLE_INSTALL_ABS_LICENSEDIR "${MUMBLE_INSTALL_LICENSEDIR}") make_absolute(MUMBLE_INSTALL_ABS_SYSCONFDIR "${MUMBLE_INSTALL_SYSCONFDIR}") +make_absolute(MUMBLE_INSTALL_ABS_METADATADIR "${MUMBLE_INSTALL_METADATADIR}") +make_absolute(MUMBLE_INSTALL_ABS_APPLICATIONSDIR "${MUMBLE_INSTALL_APPLICATIONSDIR}") +make_absolute(MUMBLE_INSTALL_ABS_SERVICEFILEDIR "${MUMBLE_INSTALL_SERVICEFILEDIR}") +make_absolute(MUMBLE_INSTALL_ABS_SYSUSERSDIR "${MUMBLE_INSTALL_SYSUSERSDIR}") +make_absolute(MUMBLE_INSTALL_ABS_TMPFILESDIR "${MUMBLE_INSTALL_TMPFILESDIR}") option(display-install-paths OFF) if(display-install-paths) message(STATUS "") message(STATUS "These are the paths the different components will be installed to:") - message(STATUS "Executables: \"${MUMBLE_INSTALL_ABS_EXECUTABLEDIR}\"") - message(STATUS "Libraries: \"${MUMBLE_INSTALL_ABS_LIBDIR}\"") - message(STATUS "Plugins: \"${MUMBLE_INSTALL_ABS_PLUGINDIR}\"") - message(STATUS "Scripts: \"${MUMBLE_INSTALL_ABS_SCRIPTDIR}\"") - message(STATUS "Man-files: \"${MUMBLE_INSTALL_ABS_MANDIR}\"") - message(STATUS "Documentation: \"${MUMBLE_INSTALL_ABS_DOCDIR}\"") - message(STATUS "Licenses: \"${MUMBLE_INSTALL_ABS_LICENSEDIR}\"") - message(STATUS "Config files: \"${MUMBLE_INSTALL_ABS_SYSCONFDIR}\"") + message(STATUS "Executables: \"${MUMBLE_INSTALL_ABS_EXECUTABLEDIR}\"") + message(STATUS "Libraries: \"${MUMBLE_INSTALL_ABS_LIBDIR}\"") + message(STATUS "Plugins: \"${MUMBLE_INSTALL_ABS_PLUGINDIR}\"") + message(STATUS "Scripts: \"${MUMBLE_INSTALL_ABS_SCRIPTDIR}\"") + message(STATUS "Man-files: \"${MUMBLE_INSTALL_ABS_MANDIR}\"") + message(STATUS "Documentation: \"${MUMBLE_INSTALL_ABS_DOCDIR}\"") + message(STATUS "Licenses: \"${MUMBLE_INSTALL_ABS_LICENSEDIR}\"") + message(STATUS "Config files: \"${MUMBLE_INSTALL_ABS_SYSCONFDIR}\"") + message(STATUS "Metadata files: \"${MUMBLE_INSTALL_ABS_METADATADIR}\"") + message(STATUS "Application files: \"${MUMBLE_INSTALL_ABS_APPLICATIONSDIR}\"") + message(STATUS "Service files: \"${MUMBLE_INSTALL_ABS_SERVICEFILEDIR}\"") + message(STATUS "Sysusers files: \"${MUMBLE_INSTALL_ABS_SYSUSERSDIR}\"") + message(STATUS "Tmpfiles files: \"${MUMBLE_INSTALL_ABS_TMPFILESDIR}\"") message(STATUS "") endif() From fbe59221735bd473ee98d76086f964829fb1c0bd Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Sat, 8 Apr 2023 16:23:48 +0200 Subject: [PATCH 12/17] MAINT: Remove system DBus config file If the config file was installed, then every user on the system running this DBus service would have unlimited access to the Mumble server. This is certainly not what we want and given that the DBus API to the server is considered deprecated anyway, this commit simply removes the config file from the Mumble source tree. Fixes #6098 --- auxiliary_files/CMakeLists.txt | 2 -- auxiliary_files/config_files/mumble-server.conf | 12 ------------ 2 files changed, 14 deletions(-) delete mode 100644 auxiliary_files/config_files/mumble-server.conf diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index 1a8c859d9b0..6c6852f2ae9 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -61,7 +61,6 @@ endif() if(server) file(COPY "mumble-server.ini" DESTINATION ${CMAKE_BINARY_DIR}) - file(COPY "config_files/mumble-server.conf" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) # systemd related files if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") @@ -89,7 +88,6 @@ if(server) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server-user-wrapper" DESTINATION "${MUMBLE_INSTALL_EXECUTABLEDIR}" COMPONENT mumble_server PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - install(FILES "config_files/mumble-server.conf" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/dbus-1/system.d" COMPONENT mumble_server) endif() if(UNIX AND NOT APPLE) diff --git a/auxiliary_files/config_files/mumble-server.conf b/auxiliary_files/config_files/mumble-server.conf deleted file mode 100644 index 1c81f9027a0..00000000000 --- a/auxiliary_files/config_files/mumble-server.conf +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - From 0f69b00ca85bc82fcd0dea9c476629a6304c526e Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 29 Dec 2023 20:35:13 +0100 Subject: [PATCH 13/17] BUILD(cmake): Use proper path in tmpfiles.d file --- auxiliary_files/CMakeLists.txt | 3 ++- .../{mumble-server.tmpfiles => mumble-server.tmpfiles.in} | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) rename auxiliary_files/config_files/{mumble-server.tmpfiles => mumble-server.tmpfiles.in} (78%) diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index 6c6852f2ae9..a8ef32ed132 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -68,6 +68,7 @@ if(server) TARGET mumble-server FILES "${CMAKE_CURRENT_SOURCE_DIR}/config_files/mumble-server.service.in=${CMAKE_CURRENT_BINARY_DIR}/mumble-server.service" + "${CMAKE_CURRENT_SOURCE_DIR}/config_files/mumble-server.tmpfiles.in=${CMAKE_CURRENT_BINARY_DIR}/mumble-server.tmpfiles" "${CMAKE_CURRENT_SOURCE_DIR}/run_scripts/mumble-server-user-wrapper.in=${CMAKE_CURRENT_BINARY_DIR}/mumble-server-user-wrapper" PASSTHROUGH_VARIABLES MUMBLE_BUILD_YEAR @@ -82,7 +83,7 @@ if(server) install(FILES "man_files/mumble-server-user-wrapper.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc) install(FILES "config_files/mumble-server.sysusers" DESTINATION "${MUMBLE_INSTALL_SYSUSERSDIR}" COMPONENT mumble_server RENAME "mumble-server.conf") - install(FILES "config_files/mumble-server.tmpfiles" DESTINATION "${MUMBLE_INSTALL_TMPFILESDIR}" COMPONENT mumble_server RENAME "mumble-server.conf") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server.tmpfiles" DESTINATION "${MUMBLE_INSTALL_TMPFILESDIR}" COMPONENT mumble_server RENAME "mumble-server.conf") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server.service" DESTINATION "${MUMBLE_INSTALL_SERVICEFILEDIR}" COMPONENT mumble_server) install( diff --git a/auxiliary_files/config_files/mumble-server.tmpfiles b/auxiliary_files/config_files/mumble-server.tmpfiles.in similarity index 78% rename from auxiliary_files/config_files/mumble-server.tmpfiles rename to auxiliary_files/config_files/mumble-server.tmpfiles.in index 2bb9a3b9142..8057917347f 100644 --- a/auxiliary_files/config_files/mumble-server.tmpfiles +++ b/auxiliary_files/config_files/mumble-server.tmpfiles.in @@ -3,4 +3,4 @@ # special user used to execute the Mumble server when started via systemd # Type # Path # Mode # User # Group -z /etc/mumble/mumble-server.ini 0640 root _mumble-server +z @MUMBLE_INSTALL_ABS_SYSCONFDIR@/mumble-server.ini 0640 root _mumble-server From ff9e1882a8bfeb6017f1389e26d302ef4e32a1a3 Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 29 Dec 2023 20:36:12 +0100 Subject: [PATCH 14/17] BUILD(cmake): Only use pkgconf install paths when explicitly requested --- cmake/install-paths.cmake | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/cmake/install-paths.cmake b/cmake/install-paths.cmake index 08e129403b9..c2d348063a6 100644 --- a/cmake/install-paths.cmake +++ b/cmake/install-paths.cmake @@ -6,6 +6,8 @@ include(GNUInstallDirs) include(pkg-utils) +option(use-pkgconf-install-paths OFF) + # Turns a path into an absolute path if it isn't absolute already function(make_absolute out_path in_path) get_filename_component(abs_path "${in_path}" ABSOLUTE BASE_DIR "${CMAKE_INSTALL_PREFIX}") @@ -38,21 +40,14 @@ function(pkgconf_install_path outputVariable module variable default) if(NOT PKGCONF_PATH) set(${outputVariable} "${default}" PARENT_SCOPE) message(WARNING "Using fallback install path for ${outputVariable}: '${default}'") - elseif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(${outputVariable} "${PKGCONF_PATH}" PARENT_SCOPE) else() - # The paths returned by pkgconf are always absolute, which breaks cmake's system using - # CMAKE_INSTALL_PREFIX to determine where file should be installed to. - # Therefore, we have to make the path relative instead. - if("${PKGCONF_PATH}" MATCHES "^/usr/local/.*") - string(REGEX REPLACE "^/usr/local/" "" REL_PATH "${PKGCONF_PATH}") - elseif("${PKGCONF_PATH}" MATCHES "^/usr/.*") - string(REGEX REPLACE "^/usr/" "" REL_PATH "${PKGCONF_PATH}") - else() - string(REGEX REPLACE "^/" "" REL_PATH "${PKGCONF_PATH}") + if(NOT CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + # The paths returned by pkgconf are always absolute, which breaks cmake's system using + # CMAKE_INSTALL_PREFIX to determine where file should be installed to. + message(WARNING "Install paths determined by pkgconf are unaffected by CMAKE_INSTALL_PREFIX - current path: ${PKGCONF_PATH}") endif() - set(${outputVariable} "${REL_PATH}" PARENT_SCOPE) + set(${outputVariable} "${PKGCONF_PATH}" PARENT_SCOPE) endif() endfunction() @@ -65,9 +60,15 @@ if(UNIX) set(TMPFILESDIR_DEFAULT "./tmpfiles/") else() set(EXECUTABLEDIR_DEFAULT "${CMAKE_INSTALL_BINDIR}") - pkgconf_install_path(SERVICEFILEDIR_DEFAULT systemd systemd_system_unit_dir "${CMAKE_INSTALL_SYSCONFDIR}/systemd/system/") - pkgconf_install_path(SYSUSERSDIR_DEFAULT systemd sysusers_dir "${CMAKE_INSTALL_SYSCONFDIR}/sysusers.d") - pkgconf_install_path(TMPFILESDIR_DEFAULT systemd tmpfiles_dir "${CMAKE_INSTALL_SYSCONFDIR}/tmpfiles.d") + if (use-pkgconf-install-paths) + pkgconf_install_path(SERVICEFILEDIR_DEFAULT systemd systemd_system_unit_dir "${CMAKE_INSTALL_SYSCONFDIR}/systemd/system/") + pkgconf_install_path(SYSUSERSDIR_DEFAULT systemd sysusers_dir "${CMAKE_INSTALL_SYSCONFDIR}/sysusers.d") + pkgconf_install_path(TMPFILESDIR_DEFAULT systemd tmpfiles_dir "${CMAKE_INSTALL_SYSCONFDIR}/tmpfiles.d") + else() + set(SERVICEFILEDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/systemd/system/") + set(SYSUSERSDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/sysusers.d") + set(TMPFILESDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/tmpfiles.d") + endif() endif() set(LIBDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/mumble") From adc2b201280bd13c7caf032679ad3d4f17daeda3 Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 29 Dec 2023 20:38:32 +0100 Subject: [PATCH 15/17] BUILD(cmake): Install licenses into doc dir by default --- cmake/install-paths.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/install-paths.cmake b/cmake/install-paths.cmake index c2d348063a6..943a3765b94 100644 --- a/cmake/install-paths.cmake +++ b/cmake/install-paths.cmake @@ -76,7 +76,7 @@ if(UNIX) set(SCRIPTDIR_DEFAULT "${CMAKE_INSTALL_BINDIR}") set(MANDIR_DEFAULT "${CMAKE_INSTALL_MANDIR}/man1") set(DOCDIR_DEFAULT "${CMAKE_INSTALL_DOCDIR}") - set(LICENSEDIR_DEFAULT "${EXECUTABLEDIR_DEFAULT}/licenses") + set(LICENSEDIR_DEFAULT "${DOCDIR_DEFAULT}") set(SYSCONFDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/mumble") set(METADATADIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/metainfo") set(APPLICATIONSDIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/applications") @@ -89,7 +89,7 @@ else() set(SCRIPTDIR_DEFAULT "./scripts") set(MANDIR_DEFAULT "./man1") set(DOCDIR_DEFAULT "./docs") - set(LICENSEDIR_DEFAULT "${EXECUTABLEDIR_DEFAULT}/licenses") + set(LICENSEDIR_DEFAULT "${DOCDIR_DEFAULT}") set(SYSCONFDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/mumble") set(METADATADIR_DEFAULT "./metainfo") set(APPLICATIONSDIR_DEFAULT "./applications") From a437cd1b9e4a0f1789428ac667f3e8742007e36c Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 29 Dec 2023 20:39:14 +0100 Subject: [PATCH 16/17] BUILD(cmake): Add install path for misc shared files (e.g. Ice file) --- auxiliary_files/CMakeLists.txt | 2 +- cmake/install-paths.cmake | 38 ++++++++++++++++++++++------------ 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt index a8ef32ed132..86850e900d4 100644 --- a/auxiliary_files/CMakeLists.txt +++ b/auxiliary_files/CMakeLists.txt @@ -100,7 +100,7 @@ if(server) ) if(ice) - install(FILES "${CMAKE_SOURCE_DIR}/src/murmur/MumbleServer.ice" DESTINATION "${MUMBLE_INSTALL_SYSCONFDIR}" COMPONENT mumble_server) + install(FILES "${CMAKE_SOURCE_DIR}/src/murmur/MumbleServer.ice" DESTINATION "${MUMBLE_INSTALL_SERVER_SHAREDIR}" COMPONENT mumble_server) endif() endif() endif() diff --git a/cmake/install-paths.cmake b/cmake/install-paths.cmake index 943a3765b94..64aedcedbfb 100644 --- a/cmake/install-paths.cmake +++ b/cmake/install-paths.cmake @@ -80,6 +80,8 @@ if(UNIX) set(SYSCONFDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/mumble") set(METADATADIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/metainfo") set(APPLICATIONSDIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/applications") + set(CLIENT_SHAREDIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/mumble") + set(SERVER_SHAREDIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/mumble-server") else() set(EXECUTABLEDIR_DEFAULT ".") # In order for the installer to produce a working version of Mumble, this @@ -96,6 +98,8 @@ else() set(SERVICEFILEDIR_DEFAULT "./services/") set(SYSUSERSDIR_DEFAULT "./sysusers/") set(TMPFILESDIR_DEFAULT "./tmpfiles/") + set(CLIENT_SHAREDIR_DEFAULT "./share/mumble") + set(SERVER_SHAREDIR_DEFAULT "./share/mumble-server") endif() set(MUMBLE_INSTALL_EXECUTABLEDIR "${EXECUTABLEDIR_DEFAULT}" CACHE PATH "The directory to install the main executable(s) into") @@ -111,6 +115,8 @@ set(MUMBLE_INSTALL_APPLICATIONSDIR "${APPLICATIONSDIR_DEFAULT}" CACHE PATH "The set(MUMBLE_INSTALL_SERVICEFILEDIR "${SERVICEFILEDIR_DEFAULT}" CACHE PATH "The directory to install systemd service files to") set(MUMBLE_INSTALL_SYSUSERSDIR "${SYSUSERSDIR_DEFAULT}" CACHE PATH "The directory to install systemd sysusers files to") set(MUMBLE_INSTALL_TMPFILESDIR "${TMPFILESDIR_DEFAULT}" CACHE PATH "The directory to install systemd tmpfiles files to") +set(MUMBLE_INSTALL_CLIENT_SHAREDIR "${CLIENT_SHAREDIR_DEFAULT}" CACHE PATH "The directory to install miscellaneous client files to") +set(MUMBLE_INSTALL_SERVER_SHAREDIR "${SERVER_SHAREDIR_DEFAULT}" CACHE PATH "The directory to install miscellaneous server files to") if(packaging) # Using absolute install paths doesn't allow CPack to create the installer for us. @@ -128,6 +134,8 @@ if(packaging) assert_is_relative("${MUMBLE_INSTALL_SERVICEFILEDIR}") assert_is_relative("${MUMBLE_INSTALL_SYSUSERSDIR}") assert_is_relative("${MUMBLE_INSTALL_TMPFILESDIR}") + assert_is_relative("${MUMBLE_INSTALL_CLIENT_SHAREDIR}") + assert_is_relative("${MUMBLE_INSTALL_SERVER_SHAREDIR}") if (WIN32) if(NOT "${MUMBLE_INSTALL_LIBDIR}" STREQUAL "${LIBDIR_DEFAULT}") @@ -152,25 +160,29 @@ make_absolute(MUMBLE_INSTALL_ABS_APPLICATIONSDIR "${MUMBLE_INSTALL_APPLICATIONSD make_absolute(MUMBLE_INSTALL_ABS_SERVICEFILEDIR "${MUMBLE_INSTALL_SERVICEFILEDIR}") make_absolute(MUMBLE_INSTALL_ABS_SYSUSERSDIR "${MUMBLE_INSTALL_SYSUSERSDIR}") make_absolute(MUMBLE_INSTALL_ABS_TMPFILESDIR "${MUMBLE_INSTALL_TMPFILESDIR}") +make_absolute(MUMBLE_INSTALL_ABS_CLIENT_SHAREDIR "${MUMBLE_INSTALL_CLIENT_SHAREDIR}") +make_absolute(MUMBLE_INSTALL_ABS_SERVER_SHAREDIR "${MUMBLE_INSTALL_SERVER_SHAREDIR}") option(display-install-paths OFF) if(display-install-paths) message(STATUS "") message(STATUS "These are the paths the different components will be installed to:") - message(STATUS "Executables: \"${MUMBLE_INSTALL_ABS_EXECUTABLEDIR}\"") - message(STATUS "Libraries: \"${MUMBLE_INSTALL_ABS_LIBDIR}\"") - message(STATUS "Plugins: \"${MUMBLE_INSTALL_ABS_PLUGINDIR}\"") - message(STATUS "Scripts: \"${MUMBLE_INSTALL_ABS_SCRIPTDIR}\"") - message(STATUS "Man-files: \"${MUMBLE_INSTALL_ABS_MANDIR}\"") - message(STATUS "Documentation: \"${MUMBLE_INSTALL_ABS_DOCDIR}\"") - message(STATUS "Licenses: \"${MUMBLE_INSTALL_ABS_LICENSEDIR}\"") - message(STATUS "Config files: \"${MUMBLE_INSTALL_ABS_SYSCONFDIR}\"") - message(STATUS "Metadata files: \"${MUMBLE_INSTALL_ABS_METADATADIR}\"") - message(STATUS "Application files: \"${MUMBLE_INSTALL_ABS_APPLICATIONSDIR}\"") - message(STATUS "Service files: \"${MUMBLE_INSTALL_ABS_SERVICEFILEDIR}\"") - message(STATUS "Sysusers files: \"${MUMBLE_INSTALL_ABS_SYSUSERSDIR}\"") - message(STATUS "Tmpfiles files: \"${MUMBLE_INSTALL_ABS_TMPFILESDIR}\"") + message(STATUS "Executables: \"${MUMBLE_INSTALL_ABS_EXECUTABLEDIR}\"") + message(STATUS "Libraries: \"${MUMBLE_INSTALL_ABS_LIBDIR}\"") + message(STATUS "Plugins: \"${MUMBLE_INSTALL_ABS_PLUGINDIR}\"") + message(STATUS "Scripts: \"${MUMBLE_INSTALL_ABS_SCRIPTDIR}\"") + message(STATUS "Man-files: \"${MUMBLE_INSTALL_ABS_MANDIR}\"") + message(STATUS "Documentation: \"${MUMBLE_INSTALL_ABS_DOCDIR}\"") + message(STATUS "Licenses: \"${MUMBLE_INSTALL_ABS_LICENSEDIR}\"") + message(STATUS "Config files: \"${MUMBLE_INSTALL_ABS_SYSCONFDIR}\"") + message(STATUS "Metadata files: \"${MUMBLE_INSTALL_ABS_METADATADIR}\"") + message(STATUS "Application files: \"${MUMBLE_INSTALL_ABS_APPLICATIONSDIR}\"") + message(STATUS "Service files: \"${MUMBLE_INSTALL_ABS_SERVICEFILEDIR}\"") + message(STATUS "Sysusers files: \"${MUMBLE_INSTALL_ABS_SYSUSERSDIR}\"") + message(STATUS "Tmpfiles files: \"${MUMBLE_INSTALL_ABS_TMPFILESDIR}\"") + message(STATUS "Shared client files: \"${MUMBLE_INSTALL_ABS_CLIENT_SHAREDIR}\"") + message(STATUS "Shared server files: \"${MUMBLE_INSTALL_ABS_SERVER_SHAREDIR}\"") message(STATUS "") endif() From 6925837e03e724e836b642bb530ca9775172edf1 Mon Sep 17 00:00:00 2001 From: Robert Adam Date: Fri, 29 Dec 2023 20:44:57 +0100 Subject: [PATCH 17/17] MAINT: Fix cmake option generation --- cmake/install-paths.cmake | 4 ++-- docs/dev/build-instructions/cmake_options.md | 10 ++++++++++ scripts/generate_cmake_options_docs.py | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/cmake/install-paths.cmake b/cmake/install-paths.cmake index 64aedcedbfb..bf0c9fe728c 100644 --- a/cmake/install-paths.cmake +++ b/cmake/install-paths.cmake @@ -6,7 +6,7 @@ include(GNUInstallDirs) include(pkg-utils) -option(use-pkgconf-install-paths OFF) +option(use-pkgconf-install-paths "Try to query install paths from pkgconf - this is incompatible to using CMAKE_INSTALL_PREFIX" OFF) # Turns a path into an absolute path if it isn't absolute already function(make_absolute out_path in_path) @@ -163,7 +163,7 @@ make_absolute(MUMBLE_INSTALL_ABS_TMPFILESDIR "${MUMBLE_INSTALL_TMPFILESDIR}") make_absolute(MUMBLE_INSTALL_ABS_CLIENT_SHAREDIR "${MUMBLE_INSTALL_CLIENT_SHAREDIR}") make_absolute(MUMBLE_INSTALL_ABS_SERVER_SHAREDIR "${MUMBLE_INSTALL_SERVER_SHAREDIR}") -option(display-install-paths OFF) +option(display-install-paths "Print out base install paths during project configuration" OFF) if(display-install-paths) message(STATUS "") diff --git a/docs/dev/build-instructions/cmake_options.md b/docs/dev/build-instructions/cmake_options.md index 85151ebbe4d..642e3d6d6a2 100644 --- a/docs/dev/build-instructions/cmake_options.md +++ b/docs/dev/build-instructions/cmake_options.md @@ -74,6 +74,11 @@ Include support for reporting crashes to the Mumble developers. Prints extended information during the search for the needed dependencies (Default: OFF) +### display-install-paths + +Print out base install paths during project configuration +(Default: OFF) + ### elevation Set \"uiAccess=true\", required for global shortcuts to work with privileged applications. Requires the client's executable to be signed with a trusted code signing certificate. @@ -234,6 +239,11 @@ Include languages other than English. Check for updates by default. (Default: ON) +### use-pkgconf-install-paths + +Try to query install paths from pkgconf - this is incompatible to using CMAKE_INSTALL_PREFIX +(Default: OFF) + ### warnings-as-errors All warnings are treated as errors. diff --git a/scripts/generate_cmake_options_docs.py b/scripts/generate_cmake_options_docs.py index 1e1e1467f69..6fd4b836cef 100755 --- a/scripts/generate_cmake_options_docs.py +++ b/scripts/generate_cmake_options_docs.py @@ -49,7 +49,7 @@ def main(): for currentFile in cmakeFiles: content = open(currentFile, "r").read() - pattern = re.compile("option\(([a-zA-Z_\-0-9]+)\s+\"(.*?)\"\s+(.*?)\)") + pattern = re.compile(r"option\(([a-zA-Z_\-0-9]+)\s+\"(.*?)\"\s+(.*?)\)") pos = 0 match = pattern.search(content, pos)