Codebase list charmtimetracker / 772abe68-ac6b-4249-b1dc-2de6557a25c5/main CMakeLists.txt
772abe68-ac6b-4249-b1dc-2de6557a25c5/main

Tree @772abe68-ac6b-4249-b1dc-2de6557a25c5/main (Download .tar.gz)

CMakeLists.txt @772abe68-ac6b-4249-b1dc-2de6557a25c5/mainraw · history · blame

CMAKE_MINIMUM_REQUIRED( VERSION 2.8.12 )
PROJECT( Charm CXX )

include(FeatureSummary)

set(ECM_MODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake/ECM/modules/")
set(CMAKE_MODULE_PATH ${ECM_MODULE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/ECM/kde-modules" )

include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)

include(ECMInstallIcons)


IF( NOT Charm_VERSION )
    FIND_PACKAGE( Git QUIET )
    IF( EXISTS ${GIT_EXECUTABLE} )
        EXECUTE_PROCESS( COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=1
            RESULT_VARIABLE GIT_RESULT
            OUTPUT_VARIABLE Charm_VERSION
            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
        OUTPUT_STRIP_TRAILING_WHITESPACE )
        IF( NOT GIT_RESULT EQUAL 0 )
            MESSAGE( FATAL_ERROR "Cannot get 'git describe' version!" )
        ENDIF()
    ENDIF()
ENDIF()

STRING( REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.(.*)$" Charm_VERSION "${Charm_VERSION}")
SET( Charm_VERSION_MAJOR "${CMAKE_MATCH_1}" )
SET( Charm_VERSION_MINOR "${CMAKE_MATCH_2}" )
SET( Charm_VERSION_PATCH "${CMAKE_MATCH_3}" )
SET( Charm_VERSION_COUNT 3 )

IF( NOT ( DEFINED Charm_VERSION_MAJOR AND DEFINED Charm_VERSION_MINOR AND DEFINED Charm_VERSION_PATCH ) )
    MESSAGE( FATAL_ERROR "No Git executable or valid Charm version argument found.\n"
    "Please pass a version to CMake e.g. cmake -DCharm_VERSION=1.0.0" )
ENDIF()

MESSAGE( STATUS "Building Charm ${Charm_VERSION} in ${CMAKE_BUILD_TYPE} mode" )

find_package( Qt5Core REQUIRED)

find_package(Qt5Widgets REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5Sql REQUIRED)
find_package(Qt5Test REQUIRED)
find_package(Qt5PrintSupport)

if(WIN32)
    find_package(Qt5WinExtras REQUIRED)
endif()

IF(APPLE)
    find_package(Qt5MacExtras REQUIRED)
ENDIF()

IF(UNIX AND NOT APPLE)
    find_package(Qt5DBus QUIET)
ENDIF()



find_package(Qt5Keychain REQUIRED)
set_package_properties(Qt5Keychain PROPERTIES
                                   DESCRIPTION "Provides support for secure credentials storage"
                                   URL "https://github.com/frankosterfeld/qtkeychain"
                                   TYPE REQUIRED)

SET(CHARM_MAC_HIGHRES_SUPPORT_ENABLED ON)


ENABLE_TESTING()

IF( UNIX AND NOT APPLE )
    set( Charm_EXECUTABLE charmtimetracker )
ELSE()
    set( Charm_EXECUTABLE Charm )
ENDIF()

SET( BIN_INSTALL_DIR bin )
SET( DOC_INSTALL_DIR ${CMAKE_INSTALL_DOCBUNDLEDIR}/${Charm_EXECUTABLE} )
SET( ICONS_DIR "${CMAKE_SOURCE_DIR}/Charm/Icons" )

IF( CHARM_PREPARE_DEPLOY AND WIN32 OR APPLE)
SET( BIN_INSTALL_DIR . )
    SET( DOC_INSTALL_DIR . )
ENDIF()

OPTION( CHARM_IDLE_DETECTION "Build the Charm idle detector" ON )
OPTION( CHARM_TIMESHEET_TOOLS "Build the Charm timesheet tools" OFF )
set( CHARM_IDLE_TIME "360" CACHE STRING "Set the idle timeout (in seconds, default 360)" )
OPTION( CHARM_CI_SUPPORT "Build Charm with command interface support" OFF )

IF( CHARM_CI_SUPPORT )
    OPTION( CHARM_CI_TCPSERVER "Build Charm with TCP command interface support" ON )
    OPTION( CHARM_CI_LOCALSERVER "Build Charm with local socket command interface support" ON )
ENDIF()

OPTION(CHARM_PREPARE_DEPLOY "Deploy dependencies with install target(Windows, Apple)" ON)

ADD_SUBDIRECTORY( Core )
ADD_SUBDIRECTORY( Charm )

IF( CHARM_TIMESHEET_TOOLS AND UNIX )
    # Only build the tools if they are explicitly requested to avoid
    # the Qt MySQL driver dependency.
    ADD_SUBDIRECTORY( Tools/TimesheetProcessor )
    ADD_SUBDIRECTORY( Tools/TimesheetGenerator )
    MESSAGE( STATUS "Building the Charm timesheet tools")
ENDIF()

ADD_SUBDIRECTORY( Tests )

CONFIGURE_FILE( CharmCMake.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/CharmCMake.h )

SET( LICENSE_FILE "License.txt" )
SET( README_FILE "ReadMe.md" )
IF( NOT APPLE )
    INSTALL( FILES "${LICENSE_FILE}" "${README_FILE}" DESTINATION ${DOC_INSTALL_DIR} )
ENDIF()

IF (WIN32)
    FIND_PACKAGE( PythonInterp 3.5 QUIET)
    set_package_properties(PythonInterp PROPERTIES
                                        PURPOSE "Used to create Windows installer"
                                        TYPE OPTIONAL)


    IF(PYTHONINTERP_FOUND)
        OPTION(CHARM_SIGN_INSTALLER "Sign the installer and the contained files" ON)

        SET(EXTRA_PACKAGE_COMMANDS )
        FIND_PACKAGE( OpenSSL QUIET)
        set_package_properties(OpenSSL PROPERTIES
                                       PURPOSE "Deployment of openssl libraries."
                                       TYPE OPTIONAL)

        IF (OPENSSL_FOUND)
            SET(EXTRA_PACKAGE_COMMANDS ${EXTRA_PACKAGE_COMMANDS} --deployOpenSSL "${OPENSSL_INCLUDE_DIR}/../")
        ENDIF()
        IF( CMAKE_BUILD_TYPE MATCHES "^([Dd][Ee][Bb][Uu][Gg])" )
            SET(EXTRA_PACKAGE_COMMANDS ${EXTRA_PACKAGE_COMMANDS} --buildType debug)
        ENDIF()

        IF (CMAKE_SIZEOF_VOID_P EQUAL 8)
            set(EXTRA_PACKAGE_COMMANDS ${EXTRA_PACKAGE_COMMANDS} --architecture x64)
        ELSE()
            set(EXTRA_PACKAGE_COMMANDS ${EXTRA_PACKAGE_COMMANDS} --architecture x86)
        ENDIF()

        IF(CHARM_SIGN_INSTALLER)
            set(EXTRA_PACKAGE_COMMANDS ${EXTRA_PACKAGE_COMMANDS} --sign)
        ENDIF()


        ADD_CUSTOM_TARGET(package
            COMMAND
                ${PYTHON_EXECUTABLE}
                "${CMAKE_CURRENT_SOURCE_DIR}/scripts/create-win-installer.py"
                --installerName "Charm-${Charm_VERSION}.exe"
                --applicationFileName "bin/Charm.exe"
                --buildDir "${CMAKE_CURRENT_BINARY_DIR}"
                --productName Charm
                --productVersion "${Charm_VERSION}"
                --companyName KDAB
                --applicationIcon "${CMAKE_CURRENT_SOURCE_DIR}/Charm/Icons/Charm.ico"
                --productLicence "${CMAKE_CURRENT_SOURCE_DIR}/License.txt"
                ${EXTRA_PACKAGE_COMMANDS}
            DEPENDS
                ${Charm_EXECUTABLE}
            VERBATIM)
    ENDIF()
ENDIF()

feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES)