CMakeLists.txt 21.2 KB
Newer Older
Boudewijn Rempt's avatar
Boudewijn Rempt committed
1
project(krita)
Laurent Montel's avatar
Laurent Montel committed
2

3 4
message(STATUS "Using CMake version: ${CMAKE_VERSION}")

5
cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
6

7 8 9
set(MIN_QT_VERSION 5.3.0)
set(MIN_FRAMEWORKS_VERSION 5.7.0)

10
cmake_policy(SET CMP0002 OLD)
11
#cmake_policy CMP0017 was introduced in version 2.8.4
12
if (NOT ${CMAKE_VERSION} VERSION_LESS 2.8.3)
13
    cmake_policy(SET CMP0017 NEW)
14
endif ()
Laurent Montel's avatar
Laurent Montel committed
15

16
if (NOT ${CMAKE_VERSION} VERSION_LESS 2.8.12)
17
    cmake_policy(SET CMP0022 OLD)
18
endif ()
19

20
if (NOT ${CMAKE_VERSION} VERSION_LESS 3.0.0)
21
    cmake_policy(SET CMP0026 OLD)
22
    cmake_policy(SET CMP0046 OLD)
23
endif ()
24

25
if(NOT ${CMAKE_VERSION} VERSION_LESS 3.3.0)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
26
    cmake_policy(SET CMP0059 OLD)
27
    cmake_policy(SET CMP0063 OLD)
28
endif()
29

30 31 32 33 34 35 36 37 38 39 40 41 42 43
# QT5TODO: remove KDE4_BUILD_TESTS once all kde4_add_unit_test have been converted
# transitional forward compatibility:
# BUILD_TESTING is cmake standard, KDE4_BUILD_TESTS not used by ECM/KF5, but only
# macros in cmake/transitional. Just, Macros from cmake/transitional,
# incl. kde4_add_unit_test, are only picked up if no macros from kdelibs4 are installed,
# because that transitional path is appended. Prepending instead might possibly unwantedly
# mask ECM/KF5 macros. Not tested.
# So have BUILD_TESTING define KDE4_BUILD_TESTS.
if (BUILD_TESTING)
    set(KDE4_BUILD_TESTS TRUE)
else()
    set(KDE4_BUILD_TESTS FALSE)
endif()

44 45 46 47 48
 ######################
#######################
## Constants defines ##
#######################
######################
Thomas Zander's avatar
Thomas Zander committed
49

Jigar Raisinghani's avatar
Jigar Raisinghani committed
50 51
# define common versions of Calligra applications, used to generate calligraversion.h
# update these version for every release:
52 53 54 55 56
set(CALLIGRA_VERSION_STRING "3.0 Alpha")
set(CALLIGRA_STABLE_VERSION_MAJOR 3) # 3 for 3.x, 4 for 4.x, etc.
set(CALLIGRA_STABLE_VERSION_MINOR 0) # 0 for 3.0, 1 for 3.1, etc.
set(CALLIGRA_VERSION_RELEASE 89)     # 89 for Alpha, increase for next test releases, set 0 for first Stable, etc.
set(CALLIGRA_ALPHA 1) # uncomment only for Alpha
Cyrille Berger Skott's avatar
Cyrille Berger Skott committed
57
#set(CALLIGRA_BETA 1) # uncomment only for Beta
Jigar Raisinghani's avatar
Jigar Raisinghani committed
58
#set(CALLIGRA_RC 1) # uncomment only for RC
Friedrich W. H. Kossebau's avatar
Friedrich W. H. Kossebau committed
59
set(CALLIGRA_YEAR 2015) # update every year
Jigar Raisinghani's avatar
Jigar Raisinghani committed
60 61 62 63 64

if(NOT DEFINED CALLIGRA_ALPHA AND NOT DEFINED CALLIGRA_BETA AND NOT DEFINED CALLIGRA_RC)
    set(CALLIGRA_STABLE 1) # do not edit
endif()

65
message(STATUS "Krita version: ${CALLIGRA_VERSION_STRING}")
Jigar Raisinghani's avatar
Jigar Raisinghani committed
66

67 68 69 70 71 72
# Define the generic version of the Calligra libraries here
# This makes it easy to advance it when the next Calligra release comes.
# 14 was the last GENERIC_CALLIGRA_LIB_VERSION_MAJOR of the previous Calligra series
# (2.x) so we're starting with 15 in 3.x series.
if(CALLIGRA_STABLE_VERSION_MAJOR EQUAL 3)
    math(EXPR GENERIC_CALLIGRA_LIB_VERSION_MAJOR "${CALLIGRA_STABLE_VERSION_MINOR} + 15")
Jigar Raisinghani's avatar
Jigar Raisinghani committed
73
else()
74 75
    # let's make sure we won't forget to update the "15"
    message(FATAL_ERROR "Reminder: please update offset == 15 used to compute GENERIC_CALLIGRA_LIB_VERSION_MAJOR to something bigger")
Jigar Raisinghani's avatar
Jigar Raisinghani committed
76 77 78
endif()
set(GENERIC_CALLIGRA_LIB_VERSION "${GENERIC_CALLIGRA_LIB_VERSION_MAJOR}.0.0")
set(GENERIC_CALLIGRA_LIB_SOVERSION "${GENERIC_CALLIGRA_LIB_VERSION_MAJOR}")
79

80 81
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                      "${CMAKE_SOURCE_DIR}/cmake/modules")
82
LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/kde_macro")
83 84

message("Module path:" ${CMAKE_MODULE_PATH})
85

Jigar Raisinghani's avatar
Jigar Raisinghani committed
86 87 88
# fetch git revision for the current build

set(CALLIGRA_GIT_SHA1_STRING "")
89
set(CALLIGRA_GIT_BRANCH_STRING "")
Jigar Raisinghani's avatar
Jigar Raisinghani committed
90 91 92

include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
93
get_git_branch(GIT_BRANCH)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
94

95
if(GIT_SHA1 AND GIT_BRANCH)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
96 97
    string(SUBSTRING ${GIT_SHA1} 0 7 GIT_SHA1)
    set(CALLIGRA_GIT_SHA1_STRING ${GIT_SHA1})
98 99
    set(CALLIGRA_GIT_BRANCH_STRING ${GIT_BRANCH})
endif()
100

101 102
if(NOT DEFINED RELEASE_BUILD)
    # estimate mode by CMAKE_BUILD_TYPE content if not set on cmdline
103
    string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER)
104
    set(RELEASE_BUILD_TYPES "release" "relwithdebinfo" "minsizerel")
105
    list(FIND RELEASE_BUILD_TYPES "${CMAKE_BUILD_TYPE_TOLOWER}" INDEX)
106 107
    if (INDEX EQUAL -1)
        set(RELEASE_BUILD FALSE)
108
    else()
109
        set(RELEASE_BUILD TRUE)
110 111
    endif()
endif()
112 113
message(STATUS "Release build: ${RELEASE_BUILD}")

Jigar Raisinghani's avatar
Jigar Raisinghani committed
114 115 116 117 118
 ############
#############
## Options ##
#############
############
119

Jigar Raisinghani's avatar
Jigar Raisinghani committed
120
option(USEOPENGL "Allow the use of OpenGL for Krita" ON)
121
option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binary. Should be used by packagers only." OFF)
122

123 124 125 126 127 128
 #######################
########################
## Productset setting ##
########################
#######################

129
# For predefined productsets see the definitions in KritaProducts.cmake and
130 131 132 133 134 135 136 137 138 139
# in the files in the folder cmake/productsets.

# Finding out the products & features to build is done in 5 steps:
# 1. have the user define the products/features wanted, by giving a productset
# 2. estimate all additional required products/features
# 3. estimate which of the products/features can be build by external deps
# 4. find which products/features have been temporarily disabled due to problems
# 5. estimate which of the products/features can be build by internal deps

# get the special macros
140
include(KritaProductsetMacros)
141
include(MacroJPEG)
142 143

# get the definitions of products, features and product sets
144
include(KritaProducts.cmake)
145

146
set(PRODUCTSET_DEFAULT "ALL")
147 148 149 150 151
# temporary migration support
if (CREATIVEONLY)
    set(WARN_ABOUT_CREATIVEONLY TRUE)
    set(PRODUCTSET_DEFAULT "CREATIVE")
endif ()
152 153

if(NOT PRODUCTSET)
154
    set(PRODUCTSET ${PRODUCTSET_DEFAULT} CACHE STRING "Set of products/features to build" FORCE)
155
endif()
156

157 158
if (RELEASE_BUILD)
    set(CALLIGRA_SHOULD_BUILD_STAGING FALSE)
159
else ()
160
    set(CALLIGRA_SHOULD_BUILD_STAGING TRUE)
161
endif ()
162

163
# finally choose products/features to build
164
calligra_set_productset(${PRODUCTSET})
165

166 167 168 169 170
 ########################
#########################
## Look for KDE and Qt ##
#########################
########################
Cyrille Berger's avatar
Cyrille Berger committed
171

Yue Liu's avatar
Yue Liu committed
172
find_package(ECM 1.7.0 REQUIRED NOMODULE)
173
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
174 175
include(ECMOptionalAddSubdirectory)
include(ECMInstallIcons)
Yue Liu's avatar
Yue Liu committed
176
include(ECMAddAppIcon)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
177 178 179 180 181 182 183 184
include(ECMSetupVersion)
include(ECMMarkNonGuiExecutable)
include(ECMGenerateHeaders)
include(GenerateExportHeader)
include(ECMMarkAsTest)

include(CMakePackageConfigHelpers)
include(WriteBasicConfigVersionFile)
Yue Liu's avatar
Yue Liu committed
185
include(CheckFunctionExists)
186 187 188 189 190

include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings)
include(FeatureSummary)
191
include(KDE4Macros)
192

193 194
# do not reorder to be alphabetical: this is the order in which the frameworks
# depend on each other.
195 196 197 198
find_package(KF5 ${MIN_FRAMEWORKS_VERSION} REQUIRED COMPONENTS
        Archive
        Config
        WidgetsAddons
199
        Completion
200
        CoreAddons
201 202 203
        GuiAddons
        I18n
        ItemModels
204
        ItemViews
205
        WindowSystem
206
)
207
find_package(KF5KIO ${MIN_QT_VERSION})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
208

209 210 211 212 213 214 215
find_package(Qt5 ${MIN_QT_VERSION}
        REQUIRED COMPONENTS
        Core
        Gui
        Widgets
        Xml
        Network
216
        PrintSupport
217 218
        Svg
        Test
219 220
        Concurrent
)
221

222

223 224
# Note: OPTIONAL_COMPONENTS does not seem to be reliable
# (as of ECM 5.15.0, CMake 3.2)
225
find_package(Qt5Quick ${MIN_QT_VERSION})
226
find_package(Qt5DBus ${MIN_QT_VERSION})
227

228
set(HAVE_DBUS ${Qt5DBus_FOUND})
229 230
set(QT_QTTEST_LIBRARY Qt5::Test)

Jigar Raisinghani's avatar
Jigar Raisinghani committed
231
if (USEOPENGL)
232
    find_package(Qt5 ${MIN_QT_VERSION} REQUIRED OpenGL)
233
    set(QT_QTOPENGL_FOUND ${Qt5OpenGL_FOUND})
234
    if (NOT WIN32 AND NOT APPLE)
235 236
        find_package(Qt5 ${MIN_QT_VERSION} REQUIRED X11Extras)
    endif()
237
endif ()
Jigar Raisinghani's avatar
Jigar Raisinghani committed
238

239
include (MacroLibrary)
240 241
include (MacroAdditionalCleanFiles)
include (MacroAddFileDependencies)
242
include (ECMInstallIcons)
243

244 245
macro_ensure_out_of_source_build("Compiling Calligra inside the source directory is not possible. Please refer to the build instruction http://community.kde.org/Calligra/Building/Building_Calligra")

Boudewijn Rempt's avatar
Boudewijn Rempt committed
246 247
macro_bool_to_01(KF5KIO_FOUND HAVE_KIO)

248 249
find_package(X11)
if(X11_FOUND)
250
    find_package(Qt5 ${MIN_QT_VERSION} REQUIRED NO_MODULE COMPONENTS
251 252 253 254 255 256 257 258
                 X11Extras
    )
    set(HAVE_X11 TRUE)
    add_definitions(-DHAVE_X11)
else()
    set(HAVE_X11 FALSE)
endif()

Boudewijn Rempt's avatar
Boudewijn Rempt committed
259 260 261 262 263 264 265
# use sane compile flags
add_definitions(
  -DQT_USE_QSTRINGBUILDER
  -DQT_STRICT_ITERATORS
  -DQT_NO_SIGNALS_SLOTS_KEYWORDS
  -DQT_USE_FAST_OPERATOR_PLUS
  -DQT_USE_FAST_CONCATENATION
266
  -DQT_NO_URL_CAST_FROM_STRING
267
  -DQT_DISABLE_DEPRECATED_BEFORE=0
Boudewijn Rempt's avatar
Boudewijn Rempt committed
268 269
)

270

271 272 273 274 275
# only with this definition will all the FOO_TEST_EXPORT macro do something
# TODO: check if this can be moved to only those places which make use of it,
# to reduce global compiler definitions that would trigger a recompile of
# everything on a change (like adding/removing tests to/from the build)
if(BUILD_TESTING)
276
    add_definitions(-DCOMPILING_TESTS)
277
endif()
278

279 280 281 282 283 284
# overcome some platform incompatibilities
if(WIN32)
    include_directories(${CMAKE_CURRENT_SOURCE_DIR}/winquirks)
    add_definitions(-D_USE_MATH_DEFINES)
    add_definitions(-DNOMINMAX)
    set(WIN32_PLATFORM_NET_LIBS ws2_32.lib netapi32.lib)
285
endif()
286

287 288
# set custom krita plugin installdir
set(CALLIGRA_PLUGIN_INSTALL_DIR ${LIB_INSTALL_DIR}/krita)
289

290 291 292 293 294
 ###########################
############################
## Required dependencies  ##
############################
###########################
295

Laurent Montel's avatar
Laurent Montel committed
296
find_package(ZLIB REQUIRED)
297
find_package(PNG REQUIRED)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
298 299 300
if (APPLE)
    # this is not added correctly on OSX -- see http://forum.kde.org/viewtopic.php?f=139&t=101867&p=221242#p221242
    include_directories(${PNG_INCLUDE_DIR})
301
endif()
Dmitry Kazakov's avatar
Dmitry Kazakov committed
302 303

add_definitions(-DBOOST_ALL_NO_LIB)
304
find_package(Boost REQUIRED COMPONENTS system) # for pigment and stage
305
if (NOT Boost_FOUND)
306 307
    message(FATAL_ERROR "Did not find Boost. Boost is required for the core libraries, stage, sheets and krita.")
endif ()
308

309 310
if (APPLE)
    SET(CMAKE_CXX_FLAGS "-stdlib=libstdc++ -std=c++11")
311
#   find_package(Carbon REQUIRED)
312
endif ()
313

314 315 316 317 318 319
 ###########################
############################
## Optional dependencies  ##
############################
###########################

320

321
##
Jigar Raisinghani's avatar
Jigar Raisinghani committed
322
## Check for OpenEXR
323
##
324

325 326
macro_optional_find_package(OpenEXR)
macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR)
327

328 329 330
##
## Look for OpenGL
##
331
set(HAVE_OPENGL 0)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
332 333
if (USEOPENGL)
    macro_optional_find_package(OpenGL)
334

Jigar Raisinghani's avatar
Jigar Raisinghani committed
335 336 337 338 339
    if(OPENGL_FOUND)
        message(STATUS "Found OpenGL: ${OPENGL_LIBRARIES}")
        if(QT_QTOPENGL_FOUND)
            message(STATUS "Found Qt OpenGL support")
            set(HAVE_OPENGL 1)
340
        else()
Jigar Raisinghani's avatar
Jigar Raisinghani committed
341
            message(STATUS "Did NOT find Qt OpenGL support. Check your Qt configuration")
342 343
        endif()
    else()
Jigar Raisinghani's avatar
Jigar Raisinghani committed
344
        message(STATUS "Did NOT find OpenGL libraries")
345
    endif()
346
    macro_log_feature(HAVE_OPENGL "OpenGL" "OpenGL support" "" FALSE "" "Required by Gemini, parts of Krita and optionally by flake")
347
endif()
348

349 350 351 352 353 354 355 356
##
## Test for GNU Scientific Library
##
macro_optional_find_package(GSL)
macro_log_feature(GSL_FOUND "GSL" "GNU Scientific Library" "http://www.gnu.org/software/gsl"
                  FALSE "1.7" "Required by Krita's Transform tool and Sheets' solver plugin")
macro_bool_to_01(GSL_FOUND HAVE_GSL)
configure_file(config-gsl.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-gsl.h )
357

358
##
Maximiliano Curia's avatar
Maximiliano Curia committed
359
## Test for eigen3
360
##
Maximiliano Curia's avatar
Maximiliano Curia committed
361 362
macro_optional_find_package(Eigen3)
macro_log_feature(EIGEN3_FOUND "Eigen" "C++ template library for linear algebra" "http://eigen.tuxfamily.org" FALSE "3.0" "Required by Calligra Sheets and Krita")
363

364 365 366
##
## Test for exiv2
##
367 368 369
set(EXIV2_MIN_VERSION "0.16")
macro_optional_find_package(Exiv2)
macro_log_feature(EXIV2_FOUND "Exiv2" "Image metadata library and tools" "http://www.exiv2.org" FALSE "0.16" "Required by Krita")
370

371 372
##
## Test for lcms
373
##
374
macro_optional_find_package(LCMS2)
375
macro_log_feature(LCMS2_FOUND "LittleCMS" "Color management engine" "http://www.littlecms.com" FALSE "2.4" "Will be used for color management and is necesary for Krita")
376
if(LCMS2_FOUND)
377
    if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
378
        set(HAVE_LCMS24 TRUE)
379
    endif()
380
    set(HAVE_REQUIRED_LCMS_VERSION TRUE)
381
    set(HAVE_LCMS2 TRUE)
382
endif()
383

384 385 386 387 388
##
## Test for Vc
##
set(OLD_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} )
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
389
macro_optional_find_package(Vc 0.6.70)
390 391
macro_log_feature(Vc_FOUND "Vc" "Portable, zero-overhead SIMD library for C++" "http://code.compeng.uni-frankfurt.de/projects/vc" FALSE "" "Required by the Krita for vectorization")
macro_bool_to_01(Vc_FOUND HAVE_VC)
392 393
macro_bool_to_01(PACKAGERS_BUILD DO_PACKAGERS_BUILD)

394 395 396 397
configure_file(config-vc.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-vc.h )

if(HAVE_VC)
    message(STATUS "Vc found!")
398 399
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                        "${CMAKE_SOURCE_DIR}/cmake/vc")
400

401 402
    include (VcMacros)

Stefano Bonicatti's avatar
Stefano Bonicatti committed
403 404 405 406 407
    if(Vc_COMPILER_IS_CLANG)
        set(ADDITIONAL_VC_FLAGS "-Wabi -ffp-contract=fast")
    else()
        set(ADDITIONAL_VC_FLAGS "-Wabi -fabi-version=0 -ffp-contract=fast")
    endif()
408

409 410 411 412
    #Handle Vc master
    if(Vc_VERSION_MAJOR GREATER 0 OR Vc_VERSION_MINOR GREATER 7)
        message(STATUS "Vc version is greater than 0.7, enabling AVX2 support")

413
        if(Vc_COMPILER_IS_GCC OR Vc_COMPILER_IS_CLANG)
414 415 416 417
            AddCompilerFlag("-std=c++11" _ok)
            if(NOT _ok)
                AddCompilerFlag("-std=c++0x" _ok)
            endif()
418
        endif()
419 420 421

        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
422
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX AVX2)
423
        else()
424
            set(${_objs} ${_src})
425
        endif()
426 427 428 429
        endmacro()

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
430
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX AVX2)
431
        else()
432
            set(${_objs} ${_src})
433
        endif()
434 435 436 437
        endmacro()
    else()
        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
438
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX)
439
        else()
440
            set(${_objs} ${_src})
441
        endif()
442 443 444 445
        endmacro()

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
446
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX)
447
        else()
448
            set(${_objs} ${_src})
449
        endif()
450 451
        endmacro()
    endif()
452

453 454 455
    if (NOT PACKAGERS_BUILD)
      # Optimize the whole Calligra for current architecture
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_DEFINITIONS}")
456 457
    endif ()
endif()
458 459
set(CMAKE_MODULE_PATH ${OLD_CMAKE_MODULE_PATH} )

460 461 462
##
## Test for Xinput
##
463
if(NOT WIN32 AND NOT APPLE)
464
  set(REQUIRED_Xinput_FOUND ${X11_Xinput_FOUND})
465
else()
466
  set(REQUIRED_Xinput_FOUND TRUE)
467
endif()
468

David Faure's avatar
David Faure committed
469
add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS} ${QT_QTDBUS_DEFINITIONS})
Laurent Montel's avatar
Laurent Montel committed
470

471
if(WIN32)
472
    set(KDE4_ICON_DIR ${KDE_INSTALL_FULL_ICONDIR})
473 474 475 476 477 478 479 480
    message(STATUS "using oxygen application icons from ${KDE4_ICON_DIR}")

    set(LIB_INSTALL_DIR ${LIB_INSTALL_DIR}
                        RUNTIME DESTINATION ${BIN_INSTALL_DIR}
                        LIBRARY ${INSTALL_TARGETS_DEFAULT_ARGS}
                        ARCHIVE ${INSTALL_TARGETS_DEFAULT_ARGS} )


481
else()
482
    set (KDE4_ICON_DIR  ${CMAKE_INSTALL_PREFIX}/share/icons)
483
endif()
484

485 486 487
##
## Test endianess
##
David Faure's avatar
David Faure committed
488
include (TestBigEndian)
489
test_big_endian(CMAKE_WORDS_BIGENDIAN)
490

491 492 493 494
##
## Test SharedMimeInfo
##
macro_optional_find_package(SharedMimeInfo)
495
macro_log_feature(SHARED_MIME_INFO_FOUND "SharedMimeInfo" "Shared Mime Info" "http://freedesktop.org/wiki/Software/shared-mime-info" FALSE "" "Required to determine file types OpenRaster (Krita default format).")
496 497 498 499 500

##
## Test for qt-poppler
##
macro_optional_find_package(Poppler)
501
macro_log_feature( POPPLER_FOUND "Poppler-Qt5" "A PDF rendering library" "http://poppler.freedesktop.org" FALSE "" "Required by the Krita PDF filter, Karbon PDF import filter and CSTester PDF feature")
502

503

504 505 506 507
##
## Generate a file for prefix information
##

508 509 510 511 512
 ###############################
################################
## Add Calligra helper macros ##
################################
###############################
Cyrille Berger's avatar
Cyrille Berger committed
513

Boudewijn Rempt's avatar
Boudewijn Rempt committed
514
include(MacroCalligraAddBenchmark)
515
include(MacroCalligraAddTest)
Cyrille Berger's avatar
Cyrille Berger committed
516

517 518 519 520 521 522
 ####################
#####################
## Define includes ##
#####################
####################

523
# for config.h and <toplevel/foo.h> includes (if any?)
524
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/interfaces )
525

526

527 528 529 530
# For kis_debug.h and kis_assert.h
set(KRITAGLOBAL_INCLUDES ${CMAKE_SOURCE_DIR}/krita/libglobal)


531 532
set(KOVERSION_INCLUDES ${CMAKE_SOURCE_DIR}/libs/version
                       ${CMAKE_BINARY_DIR}/libs/version
533 534 535 536
)

include_directories(${KOVERSION_INCLUDES})

537 538 539
# koplugin is at the bottom of the stack
set(KOPLUGIN_INCLUDES ${CMAKE_SOURCE_DIR}/libs/koplugin)

540
set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2
541 542 543 544 545
                    ${CMAKE_BINARY_DIR}/libs/kundo2
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils/config
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils/xmlgui
)
546

547
# koodf is at the bottom of the stack
548
set(KOODF_INCLUDES ${CMAKE_SOURCE_DIR}/libs/odf
549
                   ${CMAKE_SOURCE_DIR}/libs/store
550
                   ${CMAKE_BINARY_DIR}/libs/odf
551
                   ${CMAKE_BINARY_DIR}/libs/store
552
                   ${KOVERSION_INCLUDES}
553
                   )
Boudewijn Rempt's avatar
Boudewijn Rempt committed
554

555
# pigment depends on koplugin and lcms
556
set(PIGMENT_INCLUDES ${KOPLUGIN_INCLUDES}
557
                   ${KOVERSION_INCLUDES}
558
                   ${CMAKE_SOURCE_DIR}/libs/pigment
559
                   ${CMAKE_BINARY_DIR}/libs/pigment
560
                   ${CMAKE_SOURCE_DIR}/libs/pigment/compositeops
561
                   ${CMAKE_SOURCE_DIR}/libs/pigment/resources
562
                   ${Boost_INCLUDE_DIRS}
563

564
                   )
565

566 567 568 569
# flake depends on koodf and pigment
set(FLAKE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/flake
                   ${KOODF_INCLUDES}
                   ${PIGMENT_INCLUDES}
570
                   ${KUNDO2_INCLUDES}
571 572
                   ${CMAKE_SOURCE_DIR}/libs/flake/commands
                   ${CMAKE_SOURCE_DIR}/libs/flake/tools
573
                   ${CMAKE_SOURCE_DIR}/libs/flake/svg
574
                   ${CMAKE_BINARY_DIR}/libs/flake)
575

576
# vectorimage
Jigar Raisinghani's avatar
Jigar Raisinghani committed
577
set(VECTORIMAGE_INCLUDES
578 579 580 581
                   ${CMAKE_SOURCE_DIR}/libs/vectorimage
                   ${CMAKE_SOURCE_DIR}/libs/vectorimage/libemf
                   ${CMAKE_SOURCE_DIR}/libs/vectorimage/libsvm
                   ${CMAKE_SOURCE_DIR}/libs/vectorimage/libwmf)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
582

583 584 585 586 587 588 589
# KoText depends on koplugin, odf
set(KOTEXT_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kotext
                   ${CMAKE_BINARY_DIR}/libs/kotext
                   ${CMAKE_SOURCE_DIR}/libs/kotext/changetracker
                   ${CMAKE_SOURCE_DIR}/libs/kotext/styles
                   ${CMAKE_SOURCE_DIR}/libs/kotext/opendocument
                   ${FLAKE_INCLUDES}
590
                   ${KOODF_INCLUDES})
591

592 593
# TextLayout depends on kotext
set(TEXTLAYOUT_INCLUDES ${KOTEXT_INCLUDES}
594 595
                   ${CMAKE_SOURCE_DIR}/libs/textlayout
                   ${CMAKE_BINARY_DIR}/libs/textlayout)
596

597
# Widgets depends on kritatext and flake
598
set(KOWIDGETS_INCLUDES ${KOTEXT_INCLUDES}
599
                   ${CMAKE_SOURCE_DIR}/libs/widgetutils
600 601 602
                   ${CMAKE_BINARY_DIR}/libs/widgetutils
                   ${CMAKE_SOURCE_DIR}/libs/widgets
                   ${CMAKE_BINARY_DIR}/libs/widgets)
603

C. Boemann's avatar
C. Boemann committed
604
# BasicFlakes depends on flake, widgets
605
set(BASICFLAKES_INCLUDES ${KOWIDGETS_INCLUDES}
C. Boemann's avatar
C. Boemann committed
606
                   ${CMAKE_SOURCE_DIR}/libs/basicflakes
607
                   ${CMAKE_BINARY_DIR}/libs/basicflakes
C. Boemann's avatar
C. Boemann committed
608 609
                   ${CMAKE_SOURCE_DIR}/libs/basicflakes/tools)

610 611 612 613 614
 ###################################################
####################################################
## Detect which products/features can be compiled ##
####################################################
###################################################
615

616 617 618 619 620 621 622
calligra_drop_product_on_bad_condition( APP_KRITA
    EIGEN3_FOUND "Eigen devel not found"
    EXIV2_FOUND "libexiv2 devel not found"
    HAVE_REQUIRED_LCMS_VERSION "lcms devel not found"
    Boost_SYSTEM_FOUND "boost-system devel not found"
    REQUIRED_Xinput_FOUND "Xinput devel not found "
)
623

624 625 626 627 628 629
#############################################
####  Backward compatibility BUILD_x=off ####
#############################################

# workaround: disable directly all products which might be activated by internal
# dependencies, but belong to scope of old flag
630
calligra_drop_products_on_old_flag(krita APP_KRITA)
631

632 633 634 635 636
#############################################
####      Temporarily broken products    ####
#############################################

# If a product does not build due to some temporary brokeness disable it here,
637 638
# by calling calligra_disable_product with the product id and the reason,
# e.g.:
639
# calligra_disable_product(APP_KEXI "isn't buildable at the moment")
640 641 642 643 644

#############################################
####     Calculate buildable products    ####
#############################################

645
calligra_drop_unbuildable_products()
Jarosław Staniek's avatar
Jarosław Staniek committed
646

647 648 649 650 651 652
 ###################
####################
## Subdirectories ##
####################
###################

653
if(SHOULD_BUILD_APP_KRITA)
654
  add_subdirectory(krita)
655
endif()
656

657 658
# non-app directories are moved here because they can depend on SHOULD_BUILD_{appname} variables set above
add_subdirectory(libs)
659
add_subdirectory(plugins)
Laurent Montel's avatar
Laurent Montel committed
660

661
macro_display_feature_log()
662

663
calligra_product_deps_report("product_deps")
664
calligra_log_should_build()
665

666
configure_file(KoConfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h )