CMakeLists.txt 6.41 KB
Newer Older
WINTZ Julien's avatar
WINTZ Julien committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14
## Version: $Id$
##
######################################################################
##
### Commentary:
##
######################################################################
##
### Change Log:
##
######################################################################
##
### Code:

15
cmake_minimum_required(VERSION 3.6.0)
WINTZ Julien's avatar
WINTZ Julien committed
16 17 18 19 20 21 22 23 24

######################################################################

project(dtkWidgets)

## ###################################################################
## Version setup
## ###################################################################

25
set(${PROJECT_NAME}_VERSION_MAJOR 2)
CABEL Tristan's avatar
CABEL Tristan committed
26
set(${PROJECT_NAME}_VERSION_MINOR 9)
NICLAUSSE Nicolas's avatar
NICLAUSSE Nicolas committed
27
set(${PROJECT_NAME}_VERSION_PATCH 1)
WINTZ Julien's avatar
WINTZ Julien committed
28 29 30 31 32 33 34 35 36 37 38 39 40
set(${PROJECT_NAME}_VERSION
  ${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH})

## ###################################################################
## Output directory setup
## ###################################################################

include(GNUInstallDirs)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)

WINTZ Julien's avatar
WINTZ Julien committed
41 42 43
set(CMAKE_INSTALL_RPATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON)

44 45 46 47 48 49 50 51 52 53
## ###################################################################
## Default build type (RelWithDebInfo)
## ###################################################################

if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
  set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
  set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)

WINTZ Julien's avatar
WINTZ Julien committed
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
## #################################################################
## Install prefix
## #################################################################

if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/install" CACHE PATH "${PROJECT_NAME} install prefix" FORCE)
endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)

## #################################################################
## Generate compilation database
## #################################################################

set(CMAKE_EXPORT_COMPILE_COMMANDS "ON")

## #################################################################
## Build setup
## #################################################################

72
set(CMAKE_CXX_STANDARD 14)
WINTZ Julien's avatar
WINTZ Julien committed
73 74
set(CMAKE_CXX_STANDARD_REQUIRED ON)

WINTZ Julien's avatar
WINTZ Julien committed
75 76 77 78 79
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

NICLAUSSE Nicolas's avatar
NICLAUSSE Nicolas committed
80 81 82 83
if(MSVC)
  add_definitions("/wd4068")
endif(MSVC)

84 85 86 87 88
## ###################################################################
## Test setup
## ###################################################################

include(CTest)
WINTZ Julien's avatar
WINTZ Julien committed
89

90 91
enable_testing()

WINTZ Julien's avatar
WINTZ Julien committed
92 93 94 95 96 97 98 99 100 101
## ###################################################################
## Dependencies - cmake
## ###################################################################

include(GenerateExportHeader)

## #################################################################
## Dependencies - external
## #################################################################

102
find_package(Qt5 REQUIRED COMPONENTS Core Gui WebSockets Widgets Xml Test)
WINTZ Julien's avatar
WINTZ Julien committed
103

104
find_package(dtkCore REQUIRED)
105
find_package(dtkFonts REQUIRED)
106
find_package(dtkLog REQUIRED)
WINTZ Julien's avatar
WINTZ Julien committed
107
find_package(dtkThemes REQUIRED)
WINTZ Julien's avatar
WINTZ Julien committed
108

109
include_directories(${dtkCore_INCLUDE_DIRS})
WINTZ Julien's avatar
WINTZ Julien committed
110
include_directories(${dtkFonts_INCLUDE_DIRS})
111
include_directories(${dtkLog_INCLUDE_DIRS})
WINTZ Julien's avatar
WINTZ Julien committed
112
include_directories(${dtkThemes_INCLUDE_DIRS})
WINTZ Julien's avatar
WINTZ Julien committed
113

WINTZ Julien's avatar
WINTZ Julien committed
114 115 116 117 118 119 120
## #################################################################
## Dependencies - internal
## #################################################################

include_directories(${CMAKE_BINARY_DIR})
include_directories(${CMAKE_SOURCE_DIR}/src)
include_directories(${CMAKE_SOURCE_DIR}/src/dtkWidgets)
121 122
include_directories(${CMAKE_SOURCE_DIR}/tst)
include_directories(${CMAKE_SOURCE_DIR}/tst/dtkWidgets)
WINTZ Julien's avatar
WINTZ Julien committed
123 124 125 126 127 128

## ###################################################################
## Input
## ###################################################################

add_subdirectory(src)
129
add_subdirectory(tst)
130
add_subdirectory(exp)
WINTZ Julien's avatar
WINTZ Julien committed
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161

## ###################################################################
## Exporting
## ###################################################################

export(PACKAGE ${PROJECT_NAME})

configure_file(${CMAKE_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
  "${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake" @ONLY)

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.install.cmake.in
  "${CMAKE_BINARY_DIR}/install/${PROJECT_NAME}Config.cmake" @ONLY)

configure_file(${CMAKE_SOURCE_DIR}/cmake/${PROJECT_NAME}ConfigVersion.cmake.in
  "${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" @ONLY)

install(FILES
  "${CMAKE_BINARY_DIR}/install/${PROJECT_NAME}Config.cmake"
  "${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
  DESTINATION  ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})

install(EXPORT ${PROJECT_NAME}Depends DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})

## ###################################################################
## Beautifying
## ###################################################################

mark_as_advanced(${PROJECT_NAME}_VERSION_MAJOR)
mark_as_advanced(${PROJECT_NAME}_VERSION_MINOR)
mark_as_advanced(${PROJECT_NAME}_VERSION_BUILD)

162
mark_as_advanced(Qt5_DIR)
WINTZ Julien's avatar
WINTZ Julien committed
163 164
mark_as_advanced(Qt5Core_DIR)
mark_as_advanced(Qt5Gui_DIR)
165
mark_as_advanced(Qt5OpenGL_DIR)
WINTZ Julien's avatar
WINTZ Julien committed
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
mark_as_advanced(Qt5Test_DIR)
mark_as_advanced(Qt5Widgets_DIR)

mark_as_advanced(CMAKE_AR)
mark_as_advanced(CMAKE_BUILD_TYPE)
mark_as_advanced(CMAKE_INSTALL_PREFIX)
mark_as_advanced(CMAKE_OSX_ARCHITECTURES)
mark_as_advanced(CMAKE_OSX_DEPLOYMENT_TARGET)
mark_as_advanced(CMAKE_OSX_SYSROOT)

## ###################################################################
## Packaging
## ###################################################################

include(InstallRequiredSystemLibraries)

set(CPACK_PACKAGE_VERSION_MAJOR "${${PROJECT_NAME}_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${${PROJECT_NAME}_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${${PROJECT_NAME}_VERSION_PATCH}")

include(CPack)

######################################################################
### CMakeLists.txt ends here