blob: 0d7c51ca6c53b4abd999c0a5615c36c5606aca08 [file] [log] [blame]
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
IF(POLICY CMP0022)
CMAKE_POLICY(SET CMP0022 NEW)
ENDIF(POLICY CMP0022)
IF(POLICY CMP0043)
CMAKE_POLICY(SET CMP0043 NEW)
ENDIF(POLICY CMP0043)
IF(POLICY CMP0020)
CMAKE_POLICY(SET CMP0020 NEW)
ENDIF(POLICY CMP0020)
IF(POLICY CMP0063)
CMAKE_POLICY(SET CMP0063 NEW)
ENDIF(POLICY CMP0063)
INCLUDE(GNUInstallDirs)
INCLUDE(CMakePackageConfigHelpers)
INCLUDE(GenerateExportHeader)
option (ENABLE_SHARED "Build shared library" ON)
string(SUBSTRING ${CMAKE_GENERATOR} 0 14 CMAKE_GENERATOR_SHORT)
if(CMAKE_GENERATOR_SHORT MATCHES "Visual Studio ")
message(STATUS "Generating VS project")
set(CMAKE_CXX_COMPILER_ID "MSVC")
set(ENABLE_TEST false)
set(ENABLE_STATIC true)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi /W0")
endif()
if (NOT (CMAKE_CXX_COMPILER_ID MATCHES "MSVC"))
ADD_DEFINITIONS(
${QT_DEFINITIONS}
-fexceptions
-O2
)
endif()
# Options
set(CHK_FREEABLE_BEFORE_ERASE_ACCOUNT_DESCRIPTION
"Check that an account has been marked freeable by the client
before freeing the structures. This avoids various race
conditions while removing accounts but may not be supported by
all clients. ON by default on Linux systems, otherwise OFF.")
IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
option (CHK_FREEABLE_BEFORE_ERASE_ACCOUNT CHK_FREEABLE_BEFORE_ERASE_ACCOUNT_DESCRIPTION ON)
ELSE()
option (CHK_FREEABLE_BEFORE_ERASE_ACCOUNT CHK_FREEABLE_BEFORE_ERASE_ACCOUNT_DESCRIPTION OFF)
ENDIF()
PROJECT(ringclient)
# First, check is the compiler is new enough, most version of Clang are fine
# until problems arise, checking for GCC is enough
IF (CMAKE_COMPILER_IS_GNUCC)
EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
IF (GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8)
MESSAGE(STATUS "Found GCC version >= 4.8: " ${GCC_VERSION})
ELSE()
MESSAGE(FATAL_ERROR "Your version of GCC is too old, please install GCC 4.8 or later")
ENDIF()
ENDIF()
SET(CMAKE_CXX_STANDARD 14)
SET(CXX_STANDARD_REQUIRED TRUE)
SET(CMAKE_AUTOMOC TRUE)
SET(LOCAL_CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/")
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${LOCAL_CMAKE_MODULE_PATH})
SET(QT5_MODULE_PATH ${QT5_PATH}/lib/cmake)
FIND_PACKAGE(Ring REQUIRED)
FIND_PACKAGE(Qt5Core REQUIRED)
FIND_PACKAGE(Qt5LinguistTools) # translations
FIND_PACKAGE(Qt5Sql REQUIRED)
FIND_PACKAGE(Qt5Gui REQUIRED)
IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux" AND NOT ENABLE_LIBWRAP)
FIND_PACKAGE(Qt5DBus)
ELSE()
SET(ENABLE_LIBWRAP true)
ENDIF()
IF(NOT ENABLE_TEST)
SET(ENABLE_TEST false)
ENDIF()
IF((${ENABLE_TEST} MATCHES true))
SET(ENABLE_LIBWRAP true) # because mocks use the same interface present in src/qtwrapper
ENDIF()
if (NOT (CMAKE_CXX_COMPILER_ID MATCHES "MSVC"))
# Enable some useful warnings
ADD_DEFINITIONS(
-Wall
-Wextra
-Wmissing-declarations
-Wmissing-noreturn
-Wpointer-arith
-Wcast-align
-Wwrite-strings
-Wformat-nonliteral
-Wformat-security
-Wswitch-enum
-Winit-self
-Wmissing-include-dirs
-Wundef
-Wmissing-format-attribute
-Wno-reorder
-Wunused
-Wuninitialized
-Woverloaded-virtual
-Wunused-value
-pedantic
-Wnonnull
-Wsequence-point
#-Wsystem-headers
-Wsizeof-pointer-memaccess
#-Wuseless-cast
-Wvarargs
#See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55578
-Wno-unused-function
-Wno-attributes
)
endif()
#Add more warnings for compilers that support it. I used this command:
#curl https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Warning-Options.html | \
#grep -E "^[\t ]+<br><dt><code>-W[a-zA-Z=-]*" -o | grep -E "\-W[a-zA-Z=-]*" -o >
#cat /tmp/48 /tmp/49 | sort | uniq -u
# IF (CMAKE_COMPILER_IS_GNUCC)
IF (CMAKE_COMPILER_IS_GNUCC)
IF (GCC_VERSION VERSION_GREATER 4.9 OR GCC_VERSION VERSION_EQUAL 4.9)
ADD_DEFINITIONS(
-Wunused-but-set-parameter
-Wconditionally-supported
#-Wsuggest-attribute=const
-Wno-cpp
-Wdouble-promotion
-Wdate-time
-Wdelete-incomplete
-Wfloat-conversion
)
ENDIF()
if (GCC_VERSION VERSION_GREATER 5.1 OR GCC_VERSION VERSION_EQUAL 5.1)
ADD_DEFINITIONS(
#-Wsuggest-override
#-Wsuggest-final-types
#-Wsuggest-final-methods
-Wbool-compare
-Wformat-signedness
-Wlogical-not-parentheses
-Wnormalized
-Wshift-count-negative
-Wshift-count-overflow
-Wsized-deallocation
-Wsizeof-array-argument
)
ENDIF()
IF (GCC_VERSION VERSION_GREATER 6.0 OR GCC_VERSION VERSION_EQUAL 6.0)
ADD_DEFINITIONS(
-Wnull-dereference
-Wshift-negative-value
-Wshift-overflow
-Wduplicated-cond
-Wmisleading-indentation
)
ENDIF()
ENDIF()
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
ADD_DEFINITIONS(
-Wno-c++98-compat
-Wno-c++98-compat-pedantic
-Wno-unknown-pragmas
-Wno-documentation-unknown-command
-Wno-padded
-Wno-old-style-cast
-Wno-sign-conversion
-Wno-exit-time-destructors
-Wno-global-constructors
-Wno-shorten-64-to-32
#-Weverything
)
endif()
# OS X
IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
SET(CMAKE_MACOSX_RPATH ON)
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
SET(CMAKE_INSTALL_RPATH "${CMAKE_CURRENT_SOURCE_DIR}")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
IF(${ENABLE_LIBWRAP} MATCHES true)
# The daemon is only required for when using direct linking
IF (${RING_FOUND} MATCHES "false")
MESSAGE(FATAL_ERROR "The daemon is required")
ENDIF()
ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/src/qtwrapper)
ADD_DEFINITIONS(-DENABLE_LIBWRAP=true) # Use native calls (no dbus)
if (NOT (CMAKE_CXX_COMPILER_ID MATCHES "MSVC"))
ADD_DEFINITIONS(-Wno-unknown-pragmas)
endif()
SET(ENABLE_QT5 true) # Use Qt5
MESSAGE(STATUS "Compiling with qtwrapper enabled, Qt5 enabled.")
INCLUDE_DIRECTORIES (${CMAKE_SOURCE_DIR}/src/qtwrapper/)
IF(${VERBOSE_IPC} MATCHES true)
MESSAGE(STATUS "Adding more debug output")
ADD_DEFINITIONS(-DVERBOSE_IPC=true)
ENDIF()
ENDIF()
IF (${RING_FOUND} MATCHES "true")
INCLUDE_DIRECTORIES(${ring_INCLUDE_DIRS})
ENDIF()
IF(NOT (${ENABLE_VIDEO} MATCHES false))
MESSAGE(STATUS "VIDEO enabled")
SET(ENABLE_VIDEO 1 CACHE BOOLEAN "Enable video")
add_definitions( -DENABLE_VIDEO=true )
ENDIF(NOT (${ENABLE_VIDEO} MATCHES false))
# ADD_DEFINITIONS(-DQT_DISABLE_DEPRECATED_BEFORE=1)
if (CHK_FREEABLE_BEFORE_ERASE_ACCOUNT)
ADD_DEFINITIONS(
-DCHK_FREEABLE_BEFORE_ERASE_ACCOUNT
)
endif ()
SET(GENERIC_LIB_VERSION "1.0.0")
INCLUDE_DIRECTORIES(SYSTEM ${QT_INCLUDES} )
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src)
INCLUDE_DIRECTORIES ( ${CMAKE_CURRENT_BINARY_DIR})
IF(NOT (CMAKE_CXX_COMPILER_ID MATCHES "MSVC"))
# Build dbus api
IF(DEFINED RING_XML_INTERFACES_DIR)
SET (dbus_xml_introspecs_path ${RING_XML_INTERFACES_DIR})
ELSEIF(EXISTS "${RING_BUILD_DIR}/../bin/dbus")
SET (dbus_xml_introspecs_path ${RING_BUILD_DIR}/../bin/dbus)
ELSE()
SET (dbus_xml_introspecs_path ${CMAKE_INSTALL_PREFIX}/share/dbus-1/interfaces)
ENDIF()
MESSAGE(STATUS "Using Ring DBus-XML interfaces in ${dbus_xml_introspecs_path}")
ENDIF()
#File to compile
SET( libringclient_LIB_SRCS
#Data objects
src/call.cpp
src/uri.cpp
src/account.cpp
src/person.cpp
src/contactmethod.cpp
src/numbercategory.cpp
src/macro.cpp
src/collectionextensioninterface.cpp
src/video/rate.cpp
src/video/device.cpp
src/video/renderer.cpp
src/certificate.cpp
src/securityflaw.cpp
src/ringtone.cpp
src/profile.cpp
src/contactrequest.cpp
src/media/media.cpp
src/media/audio.cpp
src/media/video.cpp
src/media/text.cpp
src/media/file.cpp
src/media/recording.cpp
src/media/avrecording.cpp
src/media/textrecording.cpp
#Models
src/accountmodel.cpp
src/availableaccountmodel.cpp
src/callmodel.cpp
src/categorizedhistorymodel.cpp
src/categorizedbookmarkmodel.cpp
src/categorizedcontactmodel.cpp
src/presencestatusmodel.cpp
src/phonedirectorymodel.cpp
src/historytimecategorymodel.cpp
src/numbercategorymodel.cpp
src/macromodel.cpp
src/keyexchangemodel.cpp
src/tlsmethodmodel.cpp
src/protocolmodel.cpp
src/profilemodel.cpp
src/ringtonemodel.cpp
src/securityevaluationmodel.cpp
src/personmodel.cpp
src/collectionmodel.cpp
src/collectionextensionmodel.cpp
src/collectionmanagerinterface.cpp
src/networkinterfacemodel.cpp
src/certificatemodel.cpp
src/ciphermodel.cpp
src/chainoftrustmodel.cpp
src/video/devicemodel.cpp
src/video/sourcemodel.cpp
src/video/channel.cpp
src/video/resolution.cpp
src/video/configurationproxy.cpp
src/audio/alsapluginmodel.cpp
src/audio/inputdevicemodel.cpp
src/audio/managermodel.cpp
src/audio/outputdevicemodel.cpp
src/audio/ringtonedevicemodel.cpp
src/audio/settings.cpp
src/media/recordingmodel.cpp
src/bannedcontactmodel.cpp
src/contactmodel.cpp
src/newcallmodel.cpp
src/newdevicemodel.cpp
src/newcodecmodel.cpp
src/conversationmodel.cpp
src/database.cpp
src/authority/daemon.cpp
src/authority/databasehelper.cpp
src/lrc.cpp
src/newaccountmodel.cpp
src/callbackshandler.cpp
src/behaviorcontroller.cpp
src/datatransfermodel.cpp
src/newvideo.cpp
src/shmrenderer.cpp
src/directrenderer.cpp
#Data collections
src/collectioninterface.cpp
src/collectioneditor.cpp
src/fallbackpersoncollection.cpp
src/daemoncertificatecollection.cpp
src/foldercertificatecollection.cpp
src/localrecordingcollection.cpp
src/localtextrecordingcollection.cpp
src/localprofilecollection.cpp
src/localringtonecollection.cpp
src/peerprofilecollection.cpp
#Communication
src/dbus/configurationmanager.cpp
src/dbus/callmanager.cpp
src/dbus/instancemanager.cpp
src/dbus/videomanager.cpp
src/dbus/presencemanager.cpp
#Default interface implementations
src/globalinstances.cpp
src/presenceserializerdefault.cpp
src/pixmapmanipulatordefault.cpp
src/shortcutcreatordefault.cpp
src/actionextenderdefault.cpp
src/dbuserrorhandlerdefault.cpp
#Other
src/avmodel.cpp
src/hookmanager.cpp
src/namedirectory.cpp
src/itembase.cpp
src/private/vcardutils.cpp
src/private/videorenderermanager.cpp
src/video/previewmanager.cpp
src/private/sortproxies.cpp
src/private/threadworker.cpp
src/mime.cpp
src/smartinfohub.cpp
src/usage_statistics.cpp
#Extension
src/extensions/presencecollectionextension.cpp
src/extensions/securityevaluationextension.cpp
)
# Public API
SET( libringclient_LIB_HDRS
src/account.h
src/accountmodel.h
src/availableaccountmodel.h
src/call.h
src/call.hpp
src/callmodel.h
src/categorizedhistorymodel.h
src/person.h
src/collectioninterface.h
src/collectioninterface.hpp
src/categorizedbookmarkmodel.h
src/categorizedcontactmodel.h
src/presencestatusmodel.h
src/contactmethod.h
src/phonedirectorymodel.h
src/historytimecategorymodel.h
src/numbercategorymodel.h
src/keyexchangemodel.h
src/tlsmethodmodel.h
src/protocolmodel.h
src/profilemodel.h
src/numbercategory.h
src/ringtonemodel.h
src/localrecordingcollection.h
src/localringtonecollection.h
src/localprofilecollection.h
src/localtextrecordingcollection.h
src/peerprofilecollection.h
src/securityevaluationmodel.h
src/certificate.h
src/personmodel.h
src/collectionmodel.h
src/collectionextensionmodel.h
src/collectionextensionmodel.hpp
src/macromodel.h
src/hookmanager.h
src/namedirectory.h
src/uri.h
src/macro.h
src/ringtone.h
src/profile.h
src/itembase.h
src/itembase.hpp
src/mime.h
src/collectionextensioninterface.h
src/collectionmanagerinterface.h
src/collectionmanagerinterface.hpp
src/networkinterfacemodel.h
src/certificatemodel.h
src/ciphermodel.h
src/collectionmediator.h
src/collectionmediator.hpp
src/collectioneditor.h
src/collectioneditor.hpp
src/fallbackpersoncollection.h
src/daemoncertificatecollection.h
src/foldercertificatecollection.h
src/securityflaw.h
src/collectioncreationinterface.h
src/collectionconfigurationinterface.h
src/chainoftrustmodel.h
src/contactrequest.h
src/globalinstances.h
src/presenceserializerdefault.h
src/pixmapmanipulatordefault.h
src/shortcutcreatordefault.h
src/dbuserrorhandlerdefault.h
src/itemdataroles.h
src/smartinfohub.h
src/usage_statistics.h
src/bannedcontactmodel.h
src/vcard.h
src/shmrenderer.h
src/directrenderer.h
)
SET(libringclient_api_LIB_HDRS
src/api/interaction.h
src/api/conversation.h
src/api/contact.h
src/api/call.h
src/api/account.h
src/api/lrc.h
src/api/avmodel.h
src/api/newaccountmodel.h
src/api/newcallmodel.h
src/api/newcodecmodel.h
src/api/newdevicemodel.h
src/api/contactmodel.h
src/api/conversationmodel.h
src/api/profile.h
src/api/behaviorcontroller.h
src/api/datatransfermodel.h
src/api/datatransfer.h
src/api/newvideo.h
)
SET(libringclient_video_LIB_HDRS
src/video/device.h
src/video/devicemodel.h
src/video/sourcemodel.h
src/video/renderer.h
src/video/resolution.h
src/video/channel.h
src/video/rate.h
src/video/previewmanager.h
src/video/configurationproxy.h
#The renderer implementations are not exported on purpose
)
SET(libringclient_audio_LIB_HDRS
src/audio/alsapluginmodel.h
src/audio/inputdevicemodel.h
src/audio/managermodel.h
src/audio/outputdevicemodel.h
src/audio/ringtonedevicemodel.h
src/audio/settings.h
)
SET(libringclient_extensions_LIB_HDRS
src/extensions/presencecollectionextension.h
src/extensions/securityevaluationextension.h
)
SET(libringclient_media_LIB_HDRS
src/media/media.h
src/media/audio.h
src/media/video.h
src/media/text.h
src/media/file.h
src/media/recording.h
src/media/avrecording.h
src/media/textrecording.h
src/media/recordingmodel.h
)
SET(libringclient_interface_LIB_HDRS
src/interfaces/contactmethodselectori.h
src/interfaces/presenceserializeri.h
src/interfaces/itemmodelstateserializeri.h
src/interfaces/pixmapmanipulatori.h
src/interfaces/shortcutcreatori.h
src/interfaces/actionextenderi.h
src/interfaces/dbuserrorhandleri.h
)
SET( libringclient_extra_LIB_HDRS
src/typedefs.h
)
IF(${ENABLE_LIBWRAP} MATCHES true OR ${ENABLE_TEST} MATCHES true)
# done this way because of bug in cmake 2.8
# (not necessary in 3.0+)
ELSE()
# presence manager interface
SET ( presencemanager_xml ${dbus_xml_introspecs_path}/cx.ring.Ring.PresenceManager.xml )
SET( dbus_metatype_path "${CMAKE_CURRENT_SOURCE_DIR}/src/dbus/metatypes.h")
SET_SOURCE_FILES_PROPERTIES(
${presencemanager_xml}
PROPERTIES
CLASSNAME PresenceManagerInterface
INCLUDE ${dbus_metatype_path}
)
QT5_ADD_DBUS_INTERFACE(
libringclient_LIB_SRCS
${presencemanager_xml}
presencemanager_dbus_interface
)
# configuration manager interface
SET ( configurationmanager_xml ${dbus_xml_introspecs_path}/cx.ring.Ring.ConfigurationManager.xml )
SET_SOURCE_FILES_PROPERTIES(
${configurationmanager_xml}
PROPERTIES
CLASSNAME ConfigurationManagerInterface
INCLUDE ${dbus_metatype_path}
)
QT5_ADD_DBUS_INTERFACE(
libringclient_LIB_SRCS
${configurationmanager_xml}
configurationmanager_dbus_interface
)
# call manager interface
SET ( callmanager_xml ${dbus_xml_introspecs_path}/cx.ring.Ring.CallManager.xml )
SET_SOURCE_FILES_PROPERTIES(
${callmanager_xml}
PROPERTIES
CLASSNAME CallManagerInterface
INCLUDE ${dbus_metatype_path}
)
QT5_ADD_DBUS_INTERFACE(
libringclient_LIB_SRCS
${callmanager_xml}
callmanager_dbus_interface
)
# video manager interface
SET ( video_xml ${dbus_xml_introspecs_path}/cx.ring.Ring.VideoManager.xml )
SET_SOURCE_FILES_PROPERTIES(
${video_xml}
PROPERTIES
CLASSNAME VideoManagerInterface
INCLUDE ${dbus_metatype_path}
)
QT5_ADD_DBUS_INTERFACE(
libringclient_LIB_SRCS
${video_xml}
video_dbus_interface
)
# instance interface
SET ( instance_xml ${dbus_xml_introspecs_path}/cx.ring.Ring.Instance.xml )
SET_SOURCE_FILES_PROPERTIES(
${instance_xml}
PROPERTIES
CLASSNAME InstanceManagerInterface
INCLUDE ${dbus_metatype_path}
)
QT5_ADD_DBUS_INTERFACE(
libringclient_LIB_SRCS
${instance_xml}
instance_dbus_interface
)
ENDIF()
# Manually wrap private files and interfaces
SET(libringclient_PRIVATE_HDRS
src/private/call_p.h
src/private/namedirectory_p.h
src/private/account_p.h
src/private/sortproxies.h
src/private/accountmodel_p.h
src/private/phonedirectorymodel_p.h
src/private/videorenderer_p.h
src/private/textrecording_p.h
src/private/videodevice_p.h
src/private/collectionmodel_p.h
src/private/securityflaw_p.h
src/private/macromodel_p.h
src/private/person_p.h
src/collectioncreationinterface.h
src/private/securityevaluationmodel_p.h
src/collectionconfigurationinterface.h
src/private/imconversationmanagerprivate.h
src/private/smartInfoHub_p.h
src/private/certificatemodel_p.h
)
IF(${ENABLE_LIBWRAP} MATCHES true AND ${ENABLE_TEST} MATCHES false)
SET(libringclient_PRIVATE_HDRS
${libringclient_PRIVATE_HDRS}
src/qtwrapper/callmanager_wrap.h
src/qtwrapper/configurationmanager_wrap.h
src/qtwrapper/instancemanager_wrap.h
src/qtwrapper/presencemanager_wrap.h
src/qtwrapper/videomanager_wrap.h
)
ENDIF()
IF(NOT ${ENABLE_TEST} MATCHES true)
QT5_WRAP_CPP(LIB_HEADER_MOC ${libringclient_PRIVATE_HDRS})
ENDIF()
IF(NOT ${ENABLE_STATIC} MATCHES false)
message(STATUS "Configuring as static lib")
add_library( ringclient_static STATIC ${libringclient_LIB_SRCS} ${LIB_HEADER_MOC} )
target_link_libraries(ringclient_static Qt5::Core)
target_link_libraries(ringclient_static Qt5::Gui)
target_link_libraries( ringclient_static
-lpthread
${QT_QTDBUS_LIBRARY}
${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY}
Qt5::Sql
)
SET_TARGET_PROPERTIES( ringclient_static
PROPERTIES VERSION ${GENERIC_LIB_VERSION}
)
ENDIF()
if (ENABLE_SHARED)
message(STATUS "Configuring as shared lib")
add_library(ringclient SHARED ${libringclient_LIB_SRCS} ${LIB_HEADER_MOC} )
target_link_libraries(ringclient Qt5::Core Qt5::Gui)
endif()
IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
if (ENABLE_SHARED)
target_link_libraries(ringclient Qt5::DBus)
endif()
IF(${ENABLE_STATIC} MATCHES true)
target_link_libraries(ringclient_static Qt5::DBus)
ENDIF()
ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
FIND_PACKAGE(Qt5Concurrent)
#For some reason, QSemaphore wont compile on Windows without QtConcurrent
if(${ENABLE_STATIC} MATCHES true)
target_link_libraries(ringclient_static Qt5::Concurrent)
endif()
if(ENABLE_SHARED)
target_link_libraries(ringclient Qt5::Concurrent)
endif()
ENDIF()
IF (NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
TARGET_LINK_LIBRARIES( ringclient
-lpthread
${QT_QTCORE_LIBRARY}
Qt5::Gui
Qt5::Sql
)
ENDIF()
IF(${ENABLE_LIBWRAP} MATCHES true)
IF((NOT ${ring_BIN} MATCHES "ring_BIN-NOTFOUND") AND ENABLE_SHARED)
TARGET_LINK_LIBRARIES( ringclient
qtwrapper
${ring_BIN}
)
ELSE()
# Allow building with undefined symbols when only the daemon headers are provided
# It speeds up our CI builds
IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
SET_TARGET_PROPERTIES( ringclient PROPERTIES LINK_FLAGS "-undefined dynamic_lookup" )
ENDIF()
ENDIF()
IF(NOT ${ENABLE_STATIC} MATCHES false)
TARGET_LINK_LIBRARIES( ringclient_static
qtwrapper
${ring_BIN}
)
ENDIF()
ELSE()
TARGET_LINK_LIBRARIES( ringclient
${QT_QTDBUS_LIBRARY}
)
ENDIF()
IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
TARGET_LINK_LIBRARIES( ringclient
-lrt
)
IF(NOT ${ENABLE_STATIC} MATCHES false)
TARGET_LINK_LIBRARIES( ringclient_static
-lrt
)
ENDIF()
ENDIF()
if(ENABLE_SHARED)
SET_TARGET_PROPERTIES( ringclient
PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_VERSION}
)
endif()
SET(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include)
INSTALL( FILES ${libringclient_LIB_HDRS} ${libringclient_extra_LIB_HDRS}
DESTINATION ${INCLUDE_INSTALL_DIR}/libringclient
COMPONENT Devel
)
INSTALL( FILES ${libringclient_video_LIB_HDRS}
DESTINATION ${INCLUDE_INSTALL_DIR}/libringclient/video
COMPONENT Devel
)
INSTALL( FILES ${libringclient_audio_LIB_HDRS}
DESTINATION ${INCLUDE_INSTALL_DIR}/libringclient/audio
COMPONENT Devel
)
INSTALL( FILES ${libringclient_media_LIB_HDRS}
DESTINATION ${INCLUDE_INSTALL_DIR}/libringclient/media
COMPONENT Devel
)
INSTALL( FILES ${libringclient_extensions_LIB_HDRS}
DESTINATION ${INCLUDE_INSTALL_DIR}/libringclient/extensions
COMPONENT Devel
)
INSTALL( FILES ${libringclient_interface_LIB_HDRS}
DESTINATION ${INCLUDE_INSTALL_DIR}/libringclient/interfaces
COMPONENT Devel
)
INSTALL( FILES ${libringclient_api_LIB_HDRS}
DESTINATION ${INCLUDE_INSTALL_DIR}/libringclient/api
COMPONENT Devel
)
#This hack force Debian based system to return a non multi-arch path
#this is required to prevent the .deb libringclient.so from having an
#higher priority than the prefixed one.
STRING(REPLACE "${CMAKE_LIBRARY_ARCHITECTURE}" "" SANE_LIBRARY_PATH "${CMAKE_INSTALL_FULL_LIBDIR}" )
IF(NOT ${ENABLE_STATIC} MATCHES false)
INSTALL( TARGETS ringclient_static
ARCHIVE DESTINATION ${SANE_LIBRARY_PATH}
LIBRARY DESTINATION ${SANE_LIBRARY_PATH}
DESTINATION ${SANE_LIBRARY_PATH}
)
ENDIF()
if(ENABLE_SHARED)
INSTALL( TARGETS ringclient
ARCHIVE DESTINATION ${SANE_LIBRARY_PATH}
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
LIBRARY DESTINATION ${SANE_LIBRARY_PATH}
DESTINATION ${SANE_LIBRARY_PATH}
)
endif()
SET(LIB_INSTALL_DIR ${SANE_LIBRARY_PATH})
# Create a CMake config file
# TARGET_INCLUDE_DIRECTORIES(ringclient PUBLIC
# "$<INSTALL_INTERFACE:$<CMAKE_INSTALL_PREFIX>/${INCLUDE_INSTALL_DIR}/libringclient>"
# )
SET(libringclient_CONFIG_PATH "${CMAKE_CURRENT_BINARY_DIR}/LibRingClientConfig.cmake")
CONFIGURE_PACKAGE_CONFIG_FILE(
"${CMAKE_SOURCE_DIR}/cmake/LibRingClientConfig.cmake.in" ${libringclient_CONFIG_PATH}
INSTALL_DESTINATION ${LIB_INSTALL_DIR}/libringclient/cmake
PATH_VARS INCLUDE_INSTALL_DIR
)
INSTALL( FILES ${libringclient_CONFIG_PATH}
DESTINATION ${SANE_LIBRARY_PATH}/cmake/LibRingClient
COMPONENT Devel
)
# WRITE_BASIC_PACKAGE_VERSION_FILE(
# ${libringclient_CONFIG_PATH}
# VERSION ${GENERIC_LIB_VERSION}
# COMPATIBILITY SameMajorVersion
# )
# translations
IF( Qt5LinguistTools_FOUND )
# translation template file
SET(TS_TEMPLATE ${CMAKE_SOURCE_DIR}/translations/lrc_en.ts)
# get all translation files except the template
FILE(GLOB TS_FILES ${CMAKE_SOURCE_DIR}/translations/*.ts)
LIST(REMOVE_ITEM TS_FILES ${TS_TEMPLATE})
# compiled .qm files
QT5_ADD_TRANSLATION(QM_FILES ${TS_FILES})
ADD_CUSTOM_TARGET(translations ALL DEPENDS ${QM_FILES})
INSTALL(FILES ${QM_FILES} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/libringclient/translations")
ENDIF()
# uninstall target
CONFIGURE_FILE(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY)
ADD_CUSTOM_TARGET(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
IF((${ENABLE_TEST} MATCHES true))
ADD_DEFINITIONS(-DENABLE_LIBWRAP=true) # Avoid dbus models
ADD_DEFINITIONS(-DENABLE_TEST=true) # Use mocks
INCLUDE_DIRECTORIES(SYSTEM ${Qt5Core_INCLUDE_DIRS} )
INCLUDE_DIRECTORIES(SYSTEM ${Qt5Gui_INCLUDE_DIRS} )
FIND_PACKAGE(Cppunit REQUIRED)
FIND_PACKAGE(Qt5Widgets)
MESSAGE(STATUS "Is cppunit present? " ${CPPUNIT_FOUND})
# unit testing
IF (CPPUNIT_FOUND)
add_executable(LRCTester
test/mocks/callmanager_mock.h
test/mocks/configurationmanager_mock.h
test/mocks/instancemanager_mock.h
test/mocks/presencemanager_mock.h
test/mocks/videomanager_mock.h
test/test_runner.cpp
test/databasetester.h
test/databasetester.cpp
test/utils/waitforsignalhelper.h
test/utils/waitforsignalhelper.cpp
test/conversationmodeltester.h
test/conversationmodeltester.cpp
test/contactmodeltester.h
test/contactmodeltester.cpp
test/datatransfertester.h
test/datatransfertester.cpp
test/newcallmodeltester.h
test/newcallmodeltester.cpp
test/newaccountmodeltester.h
test/newaccountmodeltester.cpp
${libringclient_LIB_SRCS}
${LIB_HEADER_MOC}
${libringclient_PRIVATE_HDRS}
)
TARGET_LINK_LIBRARIES(LRCTester
-lcppunit
-lpthread
${QT_QTCORE_LIBRARY}
Qt5::Gui
Qt5::Sql
)
IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
TARGET_LINK_LIBRARIES( LRCTester
-lrt
)
ENDIF()
enable_testing()
add_test(TEST LRCTester)
ENDIF()
ENDIF()