* Improve dev script for daemon * Ignore `.user` files created by Qt * Add `FORCE_DESKTOP_PROCESS` option * Catch errors related to getting profile dir * Disable IPC entirely if forced desktop * Use in-class init for AppConfig members * Refactor config to use safer memory management * Improve launch config to make OS-specific debugger usage clearer * Re-enable MainWindowTests on Windows, further refactor for memory safety, fixed some include orders * Remove dead singleton code * Swap order of tests * Use HTTPs for URLs * Fixed compile errors for `SYNERGY_ENABLE_LICENSING` compile path * Restore exec function call * Remove extra link in cancel dialog * Fixed broken link on activation cancel UI * Close dialog if activated * Fixed macOS enum ref to kCurrentProcess * Improve wording on cancel activation dialog * WIP - Test timeout (compile error) * Finished timeout logic (with smart pointer) * Include string_view * Switch to thread from jthread (maybe not supported by macOS compiler?) * Improve comment * Disable test on Windows * Add TODO related to jthread on macOS * Refactor settings and paths on Windows * Launch in desktop mode on Windows * Remove arg quote wraps which break desktop mode * Fixed qFatal on Linux * Remove test value * Follow original `AppConfig` accessor convention * Disable service checkbox if not Windows * Simplify TLS control enable logic * Update command and Git ignore * Fixed code style * Fixed include consistency * Fixed includes in validator * Fixed lint errors * Update ChangeLog * Use smart pointer for core process * Remove unneccesary default operators * Don't halt on stderr
157 lines
4.9 KiB
CMake
157 lines
4.9 KiB
CMake
# Synergy -- mouse and keyboard sharing utility
|
|
# Copyright (C) 2012-2024 Symless Ltd.
|
|
# Copyright (C) 2009-2012 Nick Bolton
|
|
#
|
|
# This package is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# found in the file LICENSE that should have accompanied this file.
|
|
#
|
|
# This package is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
# If enabled, configure packaging based on OS.
|
|
#
|
|
macro(configure_packaging)
|
|
|
|
if(${BUILD_INSTALLER})
|
|
set(CPACK_PACKAGE_NAME "synergy")
|
|
set(CPACK_PACKAGE_CONTACT "Synergy <support@symless.com>")
|
|
set(CPACK_PACKAGE_DESCRIPTION "Mouse and keyboard sharing utility")
|
|
set(CPACK_PACKAGE_VENDOR "Symless")
|
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
|
|
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
|
configure_windows_packaging()
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
configure_macos_packaging()
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux|.*BSD|DragonFly")
|
|
configure_linux_packaging()
|
|
endif()
|
|
|
|
include(CPack)
|
|
else()
|
|
message(STATUS "Not configuring installer")
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
#
|
|
# Windows installer
|
|
#
|
|
macro(configure_windows_packaging)
|
|
|
|
message(STATUS "Configuring Windows installer")
|
|
|
|
set(CPACK_PACKAGE_VERSION ${SYNERGY_VERSION_MS})
|
|
set(QT_PATH $ENV{CMAKE_PREFIX_PATH})
|
|
|
|
configure_files(${CMAKE_CURRENT_SOURCE_DIR}/res/dist/wix
|
|
${CMAKE_BINARY_DIR}/installer)
|
|
|
|
endmacro()
|
|
|
|
#
|
|
# macOS app bundle
|
|
#
|
|
macro(configure_macos_packaging)
|
|
|
|
message(STATUS "Configuring macOS app bundle")
|
|
|
|
set(CPACK_PACKAGE_VERSION ${SYNERGY_VERSION})
|
|
|
|
set(CMAKE_INSTALL_RPATH
|
|
"@loader_path/../Libraries;@loader_path/../Frameworks")
|
|
set(SYNERGY_BUNDLE_SOURCE_DIR
|
|
${CMAKE_CURRENT_SOURCE_DIR}/res/dist/macos/bundle)
|
|
set(SYNERGY_BUNDLE_DIR ${CMAKE_BINARY_DIR}/bundle)
|
|
set(SYNERGY_BUNDLE_APP_DIR ${SYNERGY_BUNDLE_DIR}/Synergy.app)
|
|
set(SYNERGY_BUNDLE_BINARY_DIR ${SYNERGY_BUNDLE_APP_DIR}/Contents/MacOS)
|
|
|
|
configure_files(${SYNERGY_BUNDLE_SOURCE_DIR} ${SYNERGY_BUNDLE_DIR})
|
|
|
|
endmacro()
|
|
|
|
#
|
|
# Linux packages (including BSD and DragonFly)
|
|
#
|
|
macro(configure_linux_packaging)
|
|
|
|
message(STATUS "Configuring Linux packaging")
|
|
|
|
set(CPACK_PACKAGE_VERSION ${SYNERGY_VERSION_LINUX})
|
|
set(CPACK_GENERATOR "DEB;RPM;TGZ;STGZ")
|
|
|
|
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Synergy <developers@symless.com>")
|
|
set(CPACK_DEBIAN_PACKAGE_SECTION "utils")
|
|
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
|
|
|
# HACK: The GUI depends on the Qt6 QPA plugins package, but that's not picked
|
|
# up by shlibdeps on Ubuntu 22 (though not a problem on Ubuntu 24 and Debian
|
|
# 12), so we must add it manually.
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "qt6-qpa-plugins")
|
|
|
|
set(CPACK_RPM_PACKAGE_LICENSE "GPLv2")
|
|
set(CPACK_RPM_PACKAGE_GROUP "Applications/System")
|
|
|
|
# The default for CMake seems to be /usr/local, which seems uncommon. While
|
|
# the default /usr/local prefix causes the app to appear on Debian and Fedora,
|
|
# it doesn't seem to appear on Arch Linux. Setting the prefix to /usr seems to
|
|
# work on a wider variety of distros, and that also seems to be where most
|
|
# apps install to.
|
|
set(CMAKE_INSTALL_PREFIX /usr)
|
|
|
|
install(FILES res/dist/linux/synergy.desktop DESTINATION share/applications)
|
|
install(FILES res/synergy.png DESTINATION share/pixmaps)
|
|
|
|
# Prepare PKGBUILD for Arch Linux
|
|
configure_file(res/dist/arch/PKGBUILD.in ${CMAKE_BINARY_DIR}/PKGBUILD @ONLY)
|
|
|
|
endmacro()
|
|
|
|
#
|
|
# Same as the `configure_file` command but for directories recursively.
|
|
#
|
|
macro(configure_files srcDir destDir)
|
|
|
|
message(STATUS "Configuring directory ${destDir}")
|
|
make_directory(${destDir})
|
|
|
|
file(
|
|
GLOB_RECURSE sourceFiles
|
|
RELATIVE ${srcDir}
|
|
${srcDir}/*)
|
|
file(
|
|
GLOB_RECURSE templateFiles
|
|
LIST_DIRECTORIES false
|
|
RELATIVE ${srcDir}
|
|
${srcDir}/*.in)
|
|
list(REMOVE_ITEM sourceFiles ${templateFiles})
|
|
|
|
foreach(sourceFile ${sourceFiles})
|
|
set(sourceFilePath ${srcDir}/${sourceFile})
|
|
if(IS_DIRECTORY ${sourceFilePath})
|
|
message(STATUS "Copying directory ${sourceFile}")
|
|
make_directory(${destDir}/${sourceFile})
|
|
else()
|
|
message(STATUS "Copying file ${sourceFile}")
|
|
configure_file(${sourceFilePath} ${destDir}/${sourceFile} COPYONLY)
|
|
endif()
|
|
|
|
endforeach(sourceFile)
|
|
|
|
foreach(templateFile ${templateFiles})
|
|
|
|
set(sourceTemplateFilePath ${srcDir}/${templateFile})
|
|
string(REGEX REPLACE "\.in$" "" templateFile ${templateFile})
|
|
message(STATUS "Configuring file ${templateFile}")
|
|
configure_file(${sourceTemplateFilePath} ${destDir}/${templateFile} @ONLY)
|
|
|
|
endforeach(templateFile)
|
|
|
|
endmacro(configure_files)
|