107 lines
3.7 KiB
CMake
107 lines
3.7 KiB
CMake
# Deskflow -- mouse and keyboard sharing utility
|
|
# Copyright (C) 2024 Symless Ltd.
|
|
#
|
|
# 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/>.
|
|
|
|
macro(configure_options)
|
|
|
|
set(DEFAULT_BUILD_GUI ON)
|
|
set(DEFAULT_BUILD_TESTS ON)
|
|
|
|
# unified binary is off by default for now, for backwards compatibility.
|
|
set(DEFAULT_BUILD_UNIFIED OFF)
|
|
|
|
# coverage is off by default because it's GCC only and a developer preference.
|
|
set(DEFAULT_ENABLE_COVERAGE OFF)
|
|
|
|
if("$ENV{DESKFLOW_BUILD_MINIMAL}" STREQUAL "true")
|
|
set(DEFAULT_BUILD_GUI OFF)
|
|
set(DEFAULT_BUILD_INSTALLER OFF)
|
|
endif()
|
|
|
|
if("$ENV{DESKFLOW_BUILD_TESTS}" STREQUAL "false")
|
|
set(DEFAULT_BUILD_TESTS OFF)
|
|
endif()
|
|
|
|
if("$ENV{DESKFLOW_BUILD_UNIFIED}" STREQUAL "true")
|
|
set(DEFAULT_BUILD_UNIFIED ON)
|
|
endif()
|
|
|
|
if("$ENV{DESKFLOW_ENABLE_COVERAGE}" STREQUAL "true")
|
|
set(DEFAULT_ENABLE_COVERAGE ON)
|
|
endif()
|
|
|
|
option(BUILD_GUI "Build GUI" ${DEFAULT_BUILD_GUI})
|
|
option(BUILD_TESTS "Build tests" ${DEFAULT_BUILD_TESTS})
|
|
option(BUILD_UNIFIED "Build unified binary" ${DEFAULT_BUILD_UNIFIED})
|
|
option(ENABLE_COVERAGE "Enable test coverage" ${DEFAULT_ENABLE_COVERAGE})
|
|
|
|
endmacro()
|
|
|
|
macro(post_config)
|
|
|
|
# Build to a temp bin dir on Windows and then copy to the final bin dir
|
|
# (ignore copy fail). It is neccesary to do this. Since the binary may already
|
|
# be running and you can't write to a running binary (on Windows). It's common
|
|
# to use Deskflow to develop Deskflow (i.e. eating your own dog food immediately
|
|
# making it).
|
|
if(WIN32)
|
|
|
|
if(NOT target)
|
|
message(FATAL_ERROR "target not set")
|
|
endif()
|
|
|
|
set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
|
${BIN_TEMP_DIR})
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
macro(post_config_all)
|
|
|
|
if(WIN32)
|
|
# Always try to copy the files to the bin directory after every build and deliberatly ignore
|
|
# copy errors, usually the error is because a running process has locked the file.
|
|
#
|
|
# It is useful to copy every time because the copy may have failed last time due to the file
|
|
# being in use, and we'll usually want to try again (after killing the process).
|
|
#
|
|
# Yes, this looks like a ridiculous thing to do, but it really is necessary to
|
|
# use a Python script to copy files on Windows. Why? Two reasons:
|
|
#
|
|
# 1. Windows file locks (on running processes) creates a very painful development
|
|
# experience; you can't overwrite the binary you're running it.
|
|
# Why not just stop the process? Windows services are an abject PITA to manage,
|
|
# and we don't always care about overwriting all binaries.
|
|
#
|
|
# 2. The Windows copy command is limited and gives vague/misleading errors.
|
|
# The CMake copy command also has similar shortfalls.
|
|
#
|
|
# Patches welcome! :)
|
|
add_custom_target(
|
|
run_post_build ALL
|
|
COMMAND ${Python_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/fancy_copy.py
|
|
${BIN_TEMP_DIR} ${PROJECT_BINARY_DIR}/bin --ignore-errors
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
VERBATIM
|
|
COMMENT "Copying files to bin dir")
|
|
|
|
add_dependencies(
|
|
run_post_build
|
|
deskflow
|
|
deskflow-client
|
|
deskflow-server
|
|
deskflow-daemon)
|
|
endif()
|
|
|
|
endmacro()
|