diff --git a/CMakeLists.txt b/CMakeLists.txt index ccaf235e..5e6b487e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,11 @@ -# synergy -- mouse and keyboard sharing utility +# Synergy -- mouse and keyboard sharing utility # Copyright (C) 2012-2016 Symless Ltd. # Copyright (C) 2009 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 @@ -14,10 +14,17 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -cmake_minimum_required(VERSION 3.4) +cmake_minimum_required (VERSION 3.4) +project (synergy C CXX) -# Version number for Synergy -if(DEFINED ENV{SYNERGY_VERSION_MAJOR}) +option (SYNERGY_BUILD_LEGACY_SERVICE "Build the legacy service (synergyd)" ON) + +set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") +set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") + + +# TODO: Eliminate variables not prefixed with SYNERGY_ +if (DEFINED ENV{SYNERGY_VERSION_MAJOR}) set (VERSION_MAJOR $ENV{SYNERGY_VERSION_MAJOR}) set (VERSION_MINOR $ENV{SYNERGY_VERSION_MINOR}) set (VERSION_REV $ENV{SYNERGY_VERSION_PATCH}) @@ -30,361 +37,336 @@ else() set (VERSION_STAGE git) endif() -set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REV}") -set(SYNERGY_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REV}") -# CMake complains if we don't have this. +set (SYNERGY_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REV}") +set (VERSION $SYNERGY_VERSION) +message (STATUS "Synergy version is " $SYNERGY_VERSION) + + +# TODO: Find out why we need these, and remove them if (COMMAND cmake_policy) - cmake_policy(SET CMP0003 NEW) + cmake_policy (SET CMP0003 NEW) + cmake_policy (SET CMP0005 NEW) endif() -# We're escaping quotes in the Windows version number, because -# for some reason CMake won't do it at config version 2.4.7 -# It seems that this restores the newer behaviour where define -# args are not auto-escaped. -if (COMMAND cmake_policy) - cmake_policy(SET CMP0005 NEW) -endif() -# First, declare project (important for prerequisite checks). -project(synergy C CXX) - -set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") -set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") - -# Set some easy to type variables. -set(root_dir ${CMAKE_SOURCE_DIR}) -set(cmake_dir ${root_dir}/res) -set(bin_dir ${root_dir}/bin) -set(doc_dir ${root_dir}/doc) -set(doc_dir ${root_dir}/doc) - -# Declare libs, so we can use list in linker later. There's probably -# a more elegant way of doing this; with SCons, when you check for the -# lib, it is automatically passed to the linker. -set(libs) - -# only include headers as "source" if not unix makefiles, -# which is useful when using an IDE. +# Add headers to source list if (${CMAKE_GENERATOR} STREQUAL "Unix Makefiles") - set(SYNERGY_ADD_HEADERS FALSE) + set (SYNERGY_ADD_HEADERS FALSE) else() - set(SYNERGY_ADD_HEADERS TRUE) + set (SYNERGY_ADD_HEADERS TRUE) endif() -# Depending on the platform, pass in the required defines. -if (UNIX) - if (NOT APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") - endif() - # For config.h, detect the libraries, functions, etc. - include(CheckIncludeFiles) - include(CheckLibraryExists) - include(CheckFunctionExists) - include(CheckTypeSize) - include(CheckIncludeFileCXX) - include(CheckSymbolExists) - include(CheckCSourceCompiles) - - check_include_file_cxx(istream HAVE_ISTREAM) - check_include_file_cxx(ostream HAVE_OSTREAM) - check_include_file_cxx(sstream HAVE_SSTREAM) - - check_include_files(inttypes.h HAVE_INTTYPES_H) - check_include_files(locale.h HAVE_LOCALE_H) - check_include_files(memory.h HAVE_MEMORY_H) - check_include_files(stdlib.h HAVE_STDLIB_H) - check_include_files(strings.h HAVE_STRINGS_H) - check_include_files(string.h HAVE_STRING_H) - check_include_files(sys/select.h HAVE_SYS_SELECT_H) - check_include_files(sys/socket.h HAVE_SYS_SOCKET_H) - check_include_files(sys/stat.h HAVE_SYS_STAT_H) - check_include_files(sys/time.h HAVE_SYS_TIME_H) - check_include_files(sys/utsname.h HAVE_SYS_UTSNAME_H) - check_include_files(unistd.h HAVE_UNISTD_H) - check_include_files(wchar.h HAVE_WCHAR_H) - - check_function_exists(getpwuid_r HAVE_GETPWUID_R) - check_function_exists(gmtime_r HAVE_GMTIME_R) - check_function_exists(nanosleep HAVE_NANOSLEEP) - check_function_exists(poll HAVE_POLL) - check_function_exists(sigwait HAVE_POSIX_SIGWAIT) - check_function_exists(strftime HAVE_STRFTIME) - check_function_exists(vsnprintf HAVE_VSNPRINTF) - check_function_exists(inet_aton HAVE_INET_ATON) - - # For some reason, the check_function_exists macro doesn't detect - # the inet_aton on some pure Unix platforms (e.g. sunos5). So we - # need to do a more detailed check and also include some extra libs. - if (NOT HAVE_INET_ATON) - - set(CMAKE_REQUIRED_LIBRARIES nsl) - check_c_source_compiles( - "#include \n int main() { inet_aton(0, 0); }" - HAVE_INET_ATON_ADV) - set(CMAKE_REQUIRED_LIBRARIES) - - if (HAVE_INET_ATON_ADV) - - # Override the previous fail. - set(HAVE_INET_ATON 1) - - # Assume that both nsl and socket will be needed, - # it seems safe to add socket on the back of nsl, - # since socket only ever needed when nsl is needed. - list(APPEND libs nsl socket) - - endif() - - endif() - - check_type_size(char SIZEOF_CHAR) - check_type_size(int SIZEOF_INT) - check_type_size(long SIZEOF_LONG) - check_type_size(short SIZEOF_SHORT) - - # pthread is used on both Linux and Mac - check_library_exists("pthread" pthread_create "" HAVE_PTHREAD) - if (HAVE_PTHREAD) - list(APPEND libs pthread) - else() - message(FATAL_ERROR "Missing library: pthread") - endif() - - # curl is used on both Linux and Mac - find_package(CURL) - if (CURL_FOUND) - list(APPEND libs curl) - else() - message(FATAL_ERROR "Missing library: curl") - endif() - - if (APPLE) - set(CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS} -DGTEST_USE_OWN_TR1_TUPLE=1") - - find_library(lib_ScreenSaver ScreenSaver) - find_library(lib_IOKit IOKit) - find_library(lib_ApplicationServices ApplicationServices) - find_library(lib_Foundation Foundation) - find_library(lib_Carbon Carbon) - - list(APPEND libs - ${lib_ScreenSaver} - ${lib_IOKit} - ${lib_ApplicationServices} - ${lib_Foundation} - ${lib_Carbon} - ) - - else() # not-apple - - # add include dir for bsd (posix uses /usr/include/) - set(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH}:/usr/local/include") - - set(XKBlib "X11/Xlib.h;X11/XKBlib.h") - set(CMAKE_EXTRA_INCLUDE_FILES "${XKBlib};X11/extensions/Xrandr.h") - check_type_size("XRRNotifyEvent" X11_EXTENSIONS_XRANDR_H) - set(HAVE_X11_EXTENSIONS_XRANDR_H "${X11_EXTENSIONS_XRANDR_H}") - set(CMAKE_EXTRA_INCLUDE_FILES) - - check_include_files("${XKBlib};X11/extensions/dpms.h" HAVE_X11_EXTENSIONS_DPMS_H) - check_include_files("X11/extensions/Xinerama.h" HAVE_X11_EXTENSIONS_XINERAMA_H) - check_include_files("${XKBlib};X11/extensions/XKBstr.h" HAVE_X11_EXTENSIONS_XKBSTR_H) - check_include_files("X11/extensions/XKB.h" HAVE_XKB_EXTENSION) - check_include_files("X11/extensions/XTest.h" HAVE_X11_EXTENSIONS_XTEST_H) - check_include_files("${XKBlib}" HAVE_X11_XKBLIB_H) - check_include_files("X11/extensions/XInput2.h" HAVE_XI2) - - if (HAVE_X11_EXTENSIONS_DPMS_H) - # Assume that function prototypes declared, when include exists. - set(HAVE_DPMS_PROTOTYPES 1) - endif() - - if (NOT HAVE_X11_XKBLIB_H) - message(FATAL_ERROR "Missing header: " ${XKBlib}) - endif() - - check_library_exists("SM;ICE" IceConnectionNumber "" HAVE_ICE) - check_library_exists("Xext;X11" DPMSQueryExtension "" HAVE_Xext) - check_library_exists("Xtst;Xext;X11" XTestQueryExtension "" HAVE_Xtst) - check_library_exists("Xinerama" XineramaQueryExtension "" HAVE_Xinerama) - check_library_exists("Xi" XISelectEvents "" HAVE_Xi) - check_library_exists("Xrandr" XRRQueryExtension "" HAVE_Xrandr) - - if (HAVE_ICE) - - # Assume we have SM if we have ICE. - set(HAVE_SM 1) - list(APPEND libs SM ICE) - - endif() - - if (HAVE_Xtst) - - # Xtxt depends on X11. - set(HAVE_X11) - list(APPEND libs Xtst X11) - - else() - - message(FATAL_ERROR "Missing library: Xtst") - - endif() - - if (HAVE_Xext) - list(APPEND libs Xext) - endif() - - if (HAVE_Xinerama) - list(APPEND libs Xinerama) - else (HAVE_Xinerama) - if (HAVE_X11_EXTENSIONS_XINERAMA_H) - set(HAVE_X11_EXTENSIONS_XINERAMA_H 0) - message(WARNING "Old Xinerama implementation detected, disabled") - endif() - endif() - - if (HAVE_Xrandr) - list(APPEND libs Xrandr) - endif() - - # this was outside of the linux scope, - # not sure why, moving it back inside. - if(HAVE_Xi) - list(APPEND libs Xi) - endif() - - endif() - - # For config.h, set some static values; it may be a good idea to make - # these values dynamic for non-standard UNIX compilers. - set(ACCEPT_TYPE_ARG3 socklen_t) - set(HAVE_CXX_BOOL 1) - set(HAVE_CXX_CASTS 1) - set(HAVE_CXX_EXCEPTIONS 1) - set(HAVE_CXX_MUTABLE 1) - set(HAVE_CXX_STDLIB 1) - set(HAVE_PTHREAD_SIGNAL 1) - set(SELECT_TYPE_ARG1 int) - set(SELECT_TYPE_ARG234 "(fd_set *)") - set(SELECT_TYPE_ARG5 "(struct timeval *)") - set(STDC_HEADERS 1) - set(TIME_WITH_SYS_TIME 1) - set(HAVE_SOCKLEN_T 1) - - # For config.h, save the results based on a template (config.h.in). - configure_file(res/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/lib/config.h) - - add_definitions(-DSYSAPI_UNIX=1 -DHAVE_CONFIG_H) - - if (APPLE) - add_definitions(-DWINAPI_CARBON=1 -D_THREAD_SAFE) - else (APPLE) - add_definitions(-DWINAPI_XWINDOWS=1) - endif() - -else() # not-unix - - list(APPEND libs Wtsapi32 Userenv Wininet comsuppw Shlwapi) - - add_definitions( - /DWIN32 - /D_WINDOWS - /D_CRT_SECURE_NO_WARNINGS - /DVERSION=\"${VERSION}\" - /D_XKEYCHECK_H - ) - - if (MSVC_VERSION EQUAL 1600) - set(SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/synergy.sln") - if (EXISTS "${SLN_FILENAME}" ) - file(APPEND "${SLN_FILENAME}" "\n# This should be regenerated!\n") - endif() - endif() - -endif() - -if (WIN32) - set(OPENSSL_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ext/openssl/windows) - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(OPENSSL_BASE_DIR "${OPENSSL_BASE_DIR}/x64") - else() - set(OPENSSL_BASE_DIR "${OPENSSL_BASE_DIR}/x86") - endif() - set(OPENSSL_LIBS - ${OPENSSL_BASE_DIR}/lib/libeay32.lib - ${OPENSSL_BASE_DIR}/lib/ssleay32.lib - ) -endif() +set (libs) if (UNIX) - if (APPLE) - set(OPENSSL_BASE_DIR /usr/local/opt/openssl) - set(OPENSSL_LIBS - ${OPENSSL_BASE_DIR}/lib/libssl.a - ${OPENSSL_BASE_DIR}/lib/libcrypto.a - ) - else() - set(OPENSSL_LIBS ssl crypto) - endif() + if (NOT APPLE) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") + endif() + + # For config.h, detect the libraries, functions, etc. + include (CheckIncludeFiles) + include (CheckLibraryExists) + include (CheckFunctionExists) + include (CheckTypeSize) + include (CheckIncludeFileCXX) + include (CheckSymbolExists) + include (CheckCSourceCompiles) + + check_include_file_cxx (istream HAVE_ISTREAM) + check_include_file_cxx (ostream HAVE_OSTREAM) + check_include_file_cxx (sstream HAVE_SSTREAM) + + check_include_files (inttypes.h HAVE_INTTYPES_H) + check_include_files (locale.h HAVE_LOCALE_H) + check_include_files (memory.h HAVE_MEMORY_H) + check_include_files (stdlib.h HAVE_STDLIB_H) + check_include_files (strings.h HAVE_STRINGS_H) + check_include_files (string.h HAVE_STRING_H) + check_include_files (sys/select.h HAVE_SYS_SELECT_H) + check_include_files (sys/socket.h HAVE_SYS_SOCKET_H) + check_include_files (sys/stat.h HAVE_SYS_STAT_H) + check_include_files (sys/time.h HAVE_SYS_TIME_H) + check_include_files (sys/utsname.h HAVE_SYS_UTSNAME_H) + check_include_files (unistd.h HAVE_UNISTD_H) + check_include_files (wchar.h HAVE_WCHAR_H) + + check_function_exists (getpwuid_r HAVE_GETPWUID_R) + check_function_exists (gmtime_r HAVE_GMTIME_R) + check_function_exists (nanosleep HAVE_NANOSLEEP) + check_function_exists (poll HAVE_POLL) + check_function_exists (sigwait HAVE_POSIX_SIGWAIT) + check_function_exists (strftime HAVE_STRFTIME) + check_function_exists (vsnprintf HAVE_VSNPRINTF) + check_function_exists (inet_aton HAVE_INET_ATON) + + # For some reason, the check_function_exists macro doesn't detect + # the inet_aton on some pure Unix platforms (e.g. sunos5). So we + # need to do a more detailed check and also include some extra libs. + if (NOT HAVE_INET_ATON) + set (CMAKE_REQUIRED_LIBRARIES nsl) + + check_c_source_compiles ( + "#include \n int main() { inet_aton (0, 0); }" + HAVE_INET_ATON_ADV) + + set (CMAKE_REQUIRED_LIBRARIES) + + if (HAVE_INET_ATON_ADV) + # Override the previous fail. + set (HAVE_INET_ATON 1) + + # Assume that both nsl and socket will be needed, + # it seems safe to add socket on the back of nsl, + # since socket only ever needed when nsl is needed. + list (APPEND libs nsl socket) + endif() + + endif() + + check_type_size (char SIZEOF_CHAR) + check_type_size (int SIZEOF_INT) + check_type_size (long SIZEOF_LONG) + check_type_size (short SIZEOF_SHORT) + + # pthread is used on both Linux and Mac + check_library_exists ("pthread" pthread_create "" HAVE_PTHREAD) + if (HAVE_PTHREAD) + list (APPEND libs pthread) + else() + message (FATAL_ERROR "Missing library: pthread") + endif() + + # curl is used on both Linux and Mac + find_package (CURL) + if (CURL_FOUND) + list (APPEND libs curl) + else() + message (FATAL_ERROR "Missing library: curl") + endif() + + if (APPLE) + set (CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS} -DGTEST_USE_OWN_TR1_TUPLE=1") + + find_library (lib_ScreenSaver ScreenSaver) + find_library (lib_IOKit IOKit) + find_library (lib_ApplicationServices ApplicationServices) + find_library (lib_Foundation Foundation) + find_library (lib_Carbon Carbon) + + list (APPEND libs + ${lib_ScreenSaver} + ${lib_IOKit} + ${lib_ApplicationServices} + ${lib_Foundation} + ${lib_Carbon} + ) + + else() # not-apple + + # add include dir for bsd (posix uses /usr/include/) + set (CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH}:/usr/local/include") + + set (XKBlib "X11/Xlib.h;X11/XKBlib.h") + set (CMAKE_EXTRA_INCLUDE_FILES "${XKBlib};X11/extensions/Xrandr.h") + check_type_size ("XRRNotifyEvent" X11_EXTENSIONS_XRANDR_H) + set (HAVE_X11_EXTENSIONS_XRANDR_H "${X11_EXTENSIONS_XRANDR_H}") + set (CMAKE_EXTRA_INCLUDE_FILES) + + check_include_files ("${XKBlib};X11/extensions/dpms.h" HAVE_X11_EXTENSIONS_DPMS_H) + check_include_files ("X11/extensions/Xinerama.h" HAVE_X11_EXTENSIONS_XINERAMA_H) + check_include_files ("${XKBlib};X11/extensions/XKBstr.h" HAVE_X11_EXTENSIONS_XKBSTR_H) + check_include_files ("X11/extensions/XKB.h" HAVE_XKB_EXTENSION) + check_include_files ("X11/extensions/XTest.h" HAVE_X11_EXTENSIONS_XTEST_H) + check_include_files ("${XKBlib}" HAVE_X11_XKBLIB_H) + check_include_files ("X11/extensions/XInput2.h" HAVE_XI2) + + if (HAVE_X11_EXTENSIONS_DPMS_H) + # Assume that function prototypes declared, when include exists. + set (HAVE_DPMS_PROTOTYPES 1) + endif() + + if (NOT HAVE_X11_XKBLIB_H) + message (FATAL_ERROR "Missing header: " ${XKBlib}) + endif() + + check_library_exists ("SM;ICE" IceConnectionNumber "" HAVE_ICE) + check_library_exists ("Xext;X11" DPMSQueryExtension "" HAVE_Xext) + check_library_exists ("Xtst;Xext;X11" XTestQueryExtension "" HAVE_Xtst) + check_library_exists ("Xinerama" XineramaQueryExtension "" HAVE_Xinerama) + check_library_exists ("Xi" XISelectEvents "" HAVE_Xi) + check_library_exists ("Xrandr" XRRQueryExtension "" HAVE_Xrandr) + + if (HAVE_ICE) + + # Assume we have SM if we have ICE. + set (HAVE_SM 1) + list (APPEND libs SM ICE) + + endif() + + if (HAVE_Xtst) + + # Xtxt depends on X11. + set (HAVE_X11) + list (APPEND libs Xtst X11) + + else() + + message (FATAL_ERROR "Missing library: Xtst") + + endif() + + if (HAVE_Xext) + list (APPEND libs Xext) + endif() + + if (HAVE_Xinerama) + list (APPEND libs Xinerama) + else (HAVE_Xinerama) + if (HAVE_X11_EXTENSIONS_XINERAMA_H) + set (HAVE_X11_EXTENSIONS_XINERAMA_H 0) + message (WARNING "Old Xinerama implementation detected, disabled") + endif() + endif() + + if (HAVE_Xrandr) + list (APPEND libs Xrandr) + endif() + + # this was outside of the linux scope, + # not sure why, moving it back inside. + if (HAVE_Xi) + list (APPEND libs Xi) + endif() + + endif() + + # For config.h, set some static values; it may be a good idea to make + # these values dynamic for non-standard UNIX compilers. + set (ACCEPT_TYPE_ARG3 socklen_t) + set (HAVE_CXX_BOOL 1) + set (HAVE_CXX_CASTS 1) + set (HAVE_CXX_EXCEPTIONS 1) + set (HAVE_CXX_MUTABLE 1) + set (HAVE_CXX_STDLIB 1) + set (HAVE_PTHREAD_SIGNAL 1) + set (SELECT_TYPE_ARG1 int) + set (SELECT_TYPE_ARG234 " (fd_set *)") + set (SELECT_TYPE_ARG5 " (struct timeval *)") + set (STDC_HEADERS 1) + set (TIME_WITH_SYS_TIME 1) + set (HAVE_SOCKLEN_T 1) + + # For config.h, save the results based on a template (config.h.in). + configure_file (res/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/lib/config.h) + + add_definitions (-DSYSAPI_UNIX=1 -DHAVE_CONFIG_H) + + if (APPLE) + add_definitions (-DWINAPI_CARBON=1 -D_THREAD_SAFE) + else() + add_definitions (-DWINAPI_XWINDOWS=1) + endif() + +elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /D _BIND_TO_CURRENT_VCLIBS_VERSION=1") + set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD /O2 /Ob2") + + list (APPEND libs Wtsapi32 Userenv Wininet comsuppw Shlwapi) + + add_definitions ( + /DWIN32 + /D_WINDOWS + /D_CRT_SECURE_NO_WARNINGS + /DVERSION=\"${VERSION}\" + /D_XKEYCHECK_H + ) endif() -set(OPENSSL_INCLUDE ${OPENSSL_BASE_DIR}/include) +# +# OpenSSL +# +if (${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set (OPENSSL_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/ext/openssl/windows) -if (WIN32) - # TODO: consider using /analyze to uncover potential bugs in the source code. + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + set (OPENSSL_ROOT "${OPENSSL_ROOT}/x64") + else() + set (OPENSSL_ROOT "${OPENSSL_ROOT}/x86") + endif() - # /MP - use multi cores to compile. - # /D _BIND_TO_CURRENT_VCLIBS_VERSION - TODO: explain why. - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /D _BIND_TO_CURRENT_VCLIBS_VERSION=1") - - # /MD - use multi-core libraries. - # /O2 - get the fastest code. - # /Ob2 - expand inline functions (auto-inlining). - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD /O2 /Ob2") + set (OPENSSL_LIBS + ${OPENSSL_ROOT}/lib/libeay32.lib + ${OPENSSL_ROOT}/lib/ssleay32.lib + ) +elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set (OPENSSL_ROOT /usr/local/opt/openssl) + + set (OPENSSL_LIBS + ${OPENSSL_ROOT}/lib/libssl.a + ${OPENSSL_ROOT}/lib/libcrypto.a + ) + +elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") + set (OPENSSL_LIBS ssl crypto) +else() + message (FATAL_ERROR "Couldn't find OpenSSL") endif() -macro(configure_files srcDir destDir) - message(STATUS "Configuring directory ${destDir}") - make_directory (${destDir}) +set (OPENSSL_INCLUDE ${OPENSSL_ROOT}/include) - file (GLOB_RECURSE sourceFiles RELATIVE ${srcDir} ${srcDir}/*) - file (GLOB_RECURSE templateFiles LIST_DIRECTORIES false RELATIVE ${srcDir} ${srcDir}/*.in) - list (REMOVE_ITEM sourceFiles ${templateFiles}) +# +# Configure_file... but for directories, recursively. +# +macro (configure_files srcDir destDir) + message (STATUS "Configuring directory ${destDir}") + make_directory (${destDir}) - 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) + file (GLOB_RECURSE sourceFiles RELATIVE ${srcDir} ${srcDir}/*) + file (GLOB_RECURSE templateFiles LIST_DIRECTORIES false RELATIVE ${srcDir} ${srcDir}/*.in) + list (REMOVE_ITEM sourceFiles ${templateFiles}) - foreach (templateFile ${templateFiles}) - set (sourceTemplateFilePath ${srcDir}/${templateFile}) + 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) + message (STATUS "Configuring file ${templateFile}") + configure_file (${sourceTemplateFilePath} ${destDir}/${templateFile} @ONLY) + endforeach (templateFile) endmacro (configure_files) +# +# macOS app Bundle +# if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set (CMAKE_INSTALL_RPATH "@loader_path/../Libraries;@loader_path/../Frameworks") - set (SYNERGY_BUNDLE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/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) + set (CMAKE_INSTALL_RPATH "@loader_path/../Libraries;@loader_path/../Frameworks") - configure_files (${SYNERGY_BUNDLE_SOURCE_DIR} ${SYNERGY_BUNDLE_DIR}) -elseif(WIN32 AND NOT UNIX) - configure_files (${CMAKE_CURRENT_SOURCE_DIR}/dist/wix ${CMAKE_BINARY_DIR}/installer) + set (SYNERGY_BUNDLE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/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}) endif() -option(SYNERGY_BUILD_LEGACY_SERVICE "Build the legacy service (synergyd)" ON) -add_subdirectory(src) +# +# Windows installer +# +if (${CMAKE_SYSTEM_NAME} MATCHES "Windows") + configure_files (${CMAKE_CURRENT_SOURCE_DIR}/dist/wix ${CMAKE_BINARY_DIR}/installer) +endif() +add_subdirectory (src)