Members of the KDE Community are recommended to subscribe to the kde-community mailing list at https://mail.kde.org/mailman/listinfo/kde-community to allow them to participate in important discussions and receive other important announcements

CMakeLists.txt 21.6 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)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
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's avatar
Cyrille Berger 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 122
if (WIN32)
    option(USE_BREAKPAD "Build the crash handler for Krita (only on windows)" OFF)
123
endif ()
124

125
option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binary. Should be used by packagers only." OFF)
126

127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
 #######################
########################
## Productset setting ##
########################
#######################

# For predefined productsets see the definitions in CalligraProducts.cmake and
# 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
include(CalligraProductSetMacros)
145
include(MacroJPEG)
146 147 148 149

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

150
set(PRODUCTSET_DEFAULT "ALL")
151 152 153 154 155
# temporary migration support
if (CREATIVEONLY)
    set(WARN_ABOUT_CREATIVEONLY TRUE)
    set(PRODUCTSET_DEFAULT "CREATIVE")
endif ()
156 157

if(NOT PRODUCTSET)
158
    set(PRODUCTSET ${PRODUCTSET_DEFAULT} CACHE STRING "Set of products/features to build" FORCE)
159
endif()
160

161 162
if (RELEASE_BUILD)
    set(CALLIGRA_SHOULD_BUILD_STAGING FALSE)
163
else ()
164
    set(CALLIGRA_SHOULD_BUILD_STAGING TRUE)
165
endif ()
166

167
# finally choose products/features to build
168
calligra_set_productset(${PRODUCTSET})
169

170 171 172 173 174
 ########################
#########################
## Look for KDE and Qt ##
#########################
########################
Cyrille Berger's avatar
Cyrille Berger committed
175

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

include(CMakePackageConfigHelpers)
include(WriteBasicConfigVersionFile)
Yue Liu's avatar
Yue Liu committed
189
include(CheckFunctionExists)
190 191 192 193 194

include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings)
include(FeatureSummary)
195
include(KDE4Macros)
196

197
find_package(KF5 ${MIN_FRAMEWORKS_VERSION} REQUIRED 
198 199 200 201 202 203 204 205 206
        Archive 
        Completion
        Config 
        CoreAddons
        GuiAddons 
        I18n 
        ItemModels 
        ItemViews
        WidgetsAddons 
207
        WindowSystem
208
    OPTIONAL_COMPONENTS
Boudewijn Rempt's avatar
Boudewijn Rempt committed
209
        KIO
210
)
211

Boudewijn Rempt's avatar
Boudewijn Rempt committed
212

213
find_package(Qt5 ${MIN_QT_VERSION} REQUIRED 
214 215 216 217 218 219 220 221 222 223
        Core 
        Gui 
        Widgets 
        Xml 
        Network 
        PrintSupport
        Svg 
        Test 
        Concurrent
    OPTIONAL_COMPONENTS
224
        Quick
Boudewijn Rempt's avatar
Boudewijn Rempt committed
225 226
        X11Extras
        DBus
227
)
228

229
set(HAVE_DBUS Qt5DBus_FOUND)
230

231 232
set(QT_QTTEST_LIBRARY Qt5::Test)

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

241
include (MacroLibrary)
242 243
include (MacroAdditionalCleanFiles)
include (MacroAddFileDependencies)
244
include (ECMInstallIcons)
245

246 247
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
248 249
macro_bool_to_01(KF5KIO_FOUND HAVE_KIO)

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

Boudewijn Rempt's avatar
Boudewijn Rempt committed
261 262 263 264 265 266 267
# 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
268
  -DQT_NO_URL_CAST_FROM_STRING
269
  -DQT_DISABLE_DEPRECATED_BEFORE=0
Boudewijn Rempt's avatar
Boudewijn Rempt committed
270 271
)

272

273 274 275 276 277
# 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)
278
    add_definitions(-DCOMPILING_TESTS)
279
endif()
280

281 282 283 284 285 286
# 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)
287
endif()
288

289 290
# set custom krita plugin installdir
set(CALLIGRA_PLUGIN_INSTALL_DIR ${LIB_INSTALL_DIR}/krita)
291

292 293 294 295 296
 ###########################
############################
## Required dependencies  ##
############################
###########################
297

Laurent Montel's avatar
Laurent Montel committed
298 299
find_package(Perl REQUIRED)
find_package(ZLIB REQUIRED)
300
find_package(PNG REQUIRED)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
301 302 303
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})
304
endif()
Dmitry Kazakov's avatar
Dmitry Kazakov committed
305 306

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

312 313
if (APPLE)
   find_package(Carbon REQUIRED)
314
endif ()
315

316 317 318 319 320 321
 ###########################
############################
## Optional dependencies  ##
############################
###########################

322

323
##
Jigar Raisinghani's avatar
Jigar Raisinghani committed
324
## Check for OpenEXR
325
##
326

327 328
macro_optional_find_package(OpenEXR)
macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR)
329

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

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

351 352 353 354 355 356 357 358
##
## 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 )
359

360
##
Maximiliano Curia's avatar
Maximiliano Curia committed
361
## Test for eigen3
362
##
Maximiliano Curia's avatar
Maximiliano Curia committed
363 364
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")
365

366 367 368
##
## Test for exiv2
##
369 370 371
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")
372

373 374
##
## Test for lcms
375
##
376
macro_optional_find_package(LCMS2)
377
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")
378
if(LCMS2_FOUND)
379
    if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
380
        set(HAVE_LCMS24 TRUE)
381
    endif()
382
    set(HAVE_REQUIRED_LCMS_VERSION TRUE)
383
    set(HAVE_LCMS2 TRUE)
384
endif()
385

386 387 388 389 390
##
## Test for Vc
##
set(OLD_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} )
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
391
macro_optional_find_package(Vc 0.6.70)
392 393
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)
394 395
macro_bool_to_01(PACKAGERS_BUILD DO_PACKAGERS_BUILD)

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

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

403 404
    include (VcMacros)

Stefano Bonicatti's avatar
Stefano Bonicatti committed
405 406 407 408 409
    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()
410

411 412 413 414
    #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")

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

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

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

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

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

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

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

473
if(WIN32)
474
    set(KDE4_ICON_DIR ${KDE_INSTALL_FULL_ICONDIR})
475 476 477 478 479 480 481 482
    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} )


483
else()
484
    set (KDE4_ICON_DIR  ${CMAKE_INSTALL_PREFIX}/share/icons)
485
endif()
486

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

493 494 495 496
##
## Test SharedMimeInfo
##
macro_optional_find_package(SharedMimeInfo)
497
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).")
498 499 500 501 502

##
## Test for qt-poppler
##
macro_optional_find_package(Poppler)
503
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")
504

505

506 507 508 509
##
## Generate a file for prefix information
##

510 511 512 513 514
 ###############################
################################
## Add Calligra helper macros ##
################################
###############################
Cyrille Berger's avatar
Cyrille Berger committed
515

Boudewijn Rempt's avatar
Boudewijn Rempt committed
516
include(MacroCalligraAddBenchmark)
517
include(MacroCalligraAddTest)
Cyrille Berger's avatar
Cyrille Berger committed
518

519 520 521 522 523 524
 ####################
#####################
## Define includes ##
#####################
####################

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

528 529 530 531 532 533 534

set(KOVERSION_INCLUDES ${CMAKE_SOURCE_DIR}/libs/version 
                       ${CMAKE_BINARY_DIR}/libs/version 
)

include_directories(${KOVERSION_INCLUDES})

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

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

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

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

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

574
# vectorimage
Jigar Raisinghani's avatar
Jigar Raisinghani committed
575
set(VECTORIMAGE_INCLUDES
576 577 578 579
                   ${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
580

581 582 583 584 585 586 587
# 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}
588
                   ${KOODF_INCLUDES})
589

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

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

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

608 609 610 611 612
 ###################################################
####################################################
## Detect which products/features can be compiled ##
####################################################
###################################################
613

614 615 616 617 618 619
if (NOT WIN32)
    set(NOT_WIN TRUE)
endif()
if (NOT QT_MAC_USE_COCOA)
    set(NOT_COCOA TRUE)
endif()
620

621 622 623 624 625 626 627 628
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"
    SHARED_MIME_INFO_FOUND "SharedMimeInfo not found"
    Boost_SYSTEM_FOUND "boost-system devel not found"
    REQUIRED_Xinput_FOUND "Xinput devel not found "
)
629

630 631 632 633 634 635
#############################################
####  Backward compatibility BUILD_x=off ####
#############################################

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

638 639 640 641 642
#############################################
####      Temporarily broken products    ####
#############################################

# If a product does not build due to some temporary brokeness disable it here,
643 644
# by calling calligra_disable_product with the product id and the reason,
# e.g.:
645
# calligra_disable_product(APP_KEXI "isn't buildable at the moment")
646 647 648 649 650

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

651
calligra_drop_unbuildable_products()
Jarosław Staniek's avatar
Jarosław Staniek committed
652

653 654 655 656 657 658
 ###################
####################
## Subdirectories ##
####################
###################

659
if(SHOULD_BUILD_APP_KRITA)
660
  add_subdirectory(krita)
661
endif()
662

663 664
# non-app directories are moved here because they can depend on SHOULD_BUILD_{appname} variables set above
add_subdirectory(libs)
665
add_subdirectory(3rdparty)
666
add_subdirectory(interfaces)
667
add_subdirectory(plugins)
Laurent Montel's avatar
Laurent Montel committed
668

669
macro_display_feature_log()
670

671
calligra_product_deps_report("product_deps")
672
calligra_log_should_build()
673

674
add_custom_target(apidox doc/api/gendocs.pl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
675 676

configure_file(KoConfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h )
677 678 679 680 681 682

## temporary warning
if (WARN_ABOUT_CREATIVEONLY)
    message(STATUS "WARNING:\n   You are using a deprecated build flag,\n   switch from \"-DCREATIVEONLY=ON\" to \"-DPRODUCTSET=CREATIVE\"\n   and remove the line \"CREATIVEONLY:BOOL=ON\" from CMakeCache.txt")
    message(STATUS "-------------------------------------------------------------------" )
endif ()