deskflow/cmake/Packaging.cmake
Nick Bolton ad330d7fba
FreeBSD GitHub runner with vmactions/freebsd-vm@v1 (#7474)
* Add experimental BSD job to CI

* Remove container

* cd into ` synergy/synergy/`

* Change unix to bsd

* Use only run param and not prepare

* Install python3 on FreeBSD

* Add missing command to prepare param

* Add all the Unix-like BSD-derived

* Use latest python3 for NetBSD and DragonFly BSD

* Use env for cmd and correct prepare commands

* Add deps config for unix-like

* Install Python deps on Unix-like

* Return matching entry in `get_unix_like_os`

* Add cmake dep for cmakelang py module

* Back out Unix-like support in `install_deps.py` (Python is tricky on BSD)

* Back out BSD from config

* Create install_deps.sh script for BSD-derived

* Use .sh script instead of .py for BSD-derived

* Add other case and fixed syntax

* Use /usr/bin/env

* Use more available sh

* Restore debian command

* Fixed syntax error

* Remove prepare args

* Remove space

* Use which instead of command

* Add libX11 dep

* Add other BSD-derivatives

* Set CMAKE_REQUIRED_INCLUDES

* Fixed bad separator for CMAKE_REQUIRED_INCLUDES

* Add debug lines

* Set CMAKE_REQUIRED_LIBRARIES to lib names

* use CMAKE_REQUIRED_QUIET

* Set CMAKE_REQUIRED_FLAGS for BSD

* Message for BSD packaging

* Make PKG_CONFIG_FOUND optional

* Move debug to all OS

* Remove solaris for now, too many missing packages

* Add missing  override to XWindowsScreen.h

* Add PC_GLIB_INCLUDE_DIRS

* Fixed glib include

* Make libnotify optional

* Set CMAKE_LIBRARY_PATH

* Only run tests if toml++ available

* Also run integ tests

* Remove DragonFly (C++ version too old)

* Fixed NetBSD command

* Aww sucks. Well, I tried. Patches welcome

* Update ChangeLog

* Fixed README for OpenBSD, NetBSD, DragonFly BSD, Solaris

* Add missing case for SunOS

* Drop redundant virtual specifiers

* Print libs on FreeBSD

* Restore link_directories

* Beef up to ubuntu-24.04-16-core-x64, export QT_QPA_PLATFORM, improve comment

* Remove debug line

* Simplify debug text

* Restore ubuntu-latest

* Fixed really stupid typo

* Beef up with ubuntu-22.04-16-core-x64

* Revert "Beef up with ubuntu-22.04-16-core-x64"

This reverts commit 3de5773ef6.

* Add missing name

* Make .sh file primary deps file

* Tweaked deps instruction label
2024-09-06 10:03:34 +01:00

160 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")
configure_linux_packaging()
elseif(${CMAKE_SYSTEM_NAME} MATCHES "|.*BSD")
message(STATUS "BSD packaging not yet supported")
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
#
macro(configure_linux_packaging)
message(STATUS "Configuring Linux packaging")
set(CPACK_PACKAGE_VERSION ${SYNERGY_VERSION_LINUX})
set(CPACK_GENERATOR "DEB;RPM;TGZ")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Synergy <developers@symless.com>")
set(CPACK_DEBIAN_PACKAGE_SECTION "utils")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_RPM_PACKAGE_LICENSE "GPLv2")
set(CPACK_RPM_PACKAGE_GROUP "Applications/System")
# 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")
# 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(VERBOSE "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(VERBOSE "Copying directory ${sourceFile}")
make_directory(${destDir}/${sourceFile})
else()
message(VERBOSE "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(VERBOSE "Configuring file ${templateFile}")
configure_file(${sourceTemplateFilePath} ${destDir}/${templateFile} @ONLY)
endforeach(templateFile)
endmacro(configure_files)