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.7 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 COMPONENTS
198 199 200 201 202 203 204 205 206 207 208
        Archive 
        Completion
        Config 
        CoreAddons
        GuiAddons 
        I18n 
        IconThemes 
        ItemModels 
        ItemViews
        WidgetsAddons 
        XmlGui 
209
    OPTIONAL_COMPONENTS
Boudewijn Rempt's avatar
Boudewijn Rempt committed
210
        KIO
211
)
212

Boudewijn Rempt's avatar
Boudewijn Rempt committed
213

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

233
set(QT_QTQUICK_FOUND ${Qt5Quick_FOUND})
234

235 236
set(QT_QTTEST_LIBRARY Qt5::Test)

Jigar Raisinghani's avatar
Jigar Raisinghani committed
237
if (USEOPENGL)
238
    find_package(Qt5 ${MIN_QT_VERSION} REQUIRED OpenGL)
239
    set(QT_QTOPENGL_FOUND ${Qt5OpenGL_FOUND})
240 241 242
    if (NOT WIN32)
        find_package(Qt5 ${MIN_QT_VERSION} REQUIRED X11Extras)
    endif()
243
endif ()
Jigar Raisinghani's avatar
Jigar Raisinghani committed
244

245
include (MacroLibrary)
246 247
include (MacroAdditionalCleanFiles)
include (MacroAddFileDependencies)
248
include (ECMInstallIcons)
249

250 251
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
252 253
macro_bool_to_01(KF5KIO_FOUND HAVE_KIO)

254 255
find_package(X11)
if(X11_FOUND)
256
    find_package(Qt5 ${MIN_QT_VERSION} REQUIRED NO_MODULE COMPONENTS
257 258 259 260 261 262 263 264
                 X11Extras
    )
    set(HAVE_X11 TRUE)
    add_definitions(-DHAVE_X11)
else()
    set(HAVE_X11 FALSE)
endif()

Boudewijn Rempt's avatar
Boudewijn Rempt committed
265 266 267 268 269 270 271
# 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
272
  -DQT_NO_URL_CAST_FROM_STRING
273
  -DQT_DISABLE_DEPRECATED_BEFORE=0
Boudewijn Rempt's avatar
Boudewijn Rempt committed
274 275
)

276

277 278 279 280 281
# 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)
282
    add_definitions(-DCOMPILING_TESTS)
283
endif()
284

285 286 287 288 289 290
# 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)
291
endif()
292

293 294
# set custom krita plugin installdir
set(CALLIGRA_PLUGIN_INSTALL_DIR ${LIB_INSTALL_DIR}/krita)
295

296 297 298 299 300
 ###########################
############################
## Required dependencies  ##
############################
###########################
301

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

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

316 317
if (APPLE)
   find_package(Carbon REQUIRED)
318
endif ()
319

320 321 322 323 324 325
 ###########################
############################
## Optional dependencies  ##
############################
###########################

326

327
##
Jigar Raisinghani's avatar
Jigar Raisinghani committed
328
## Check for OpenEXR
329
##
330

331 332
macro_optional_find_package(OpenEXR)
macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR)
333

334 335 336
##
## Look for OpenGL
##
337
set(HAVE_OPENGL 0)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
338 339
if (USEOPENGL)
    macro_optional_find_package(OpenGL)
340

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

355 356 357 358 359 360 361 362
##
## 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 )
363

364
##
Maximiliano Curia's avatar
Maximiliano Curia committed
365
## Test for eigen3
366
##
Maximiliano Curia's avatar
Maximiliano Curia committed
367 368
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")
369

370 371 372
##
## Test for exiv2
##
373 374 375
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")
376

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

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

400 401 402 403
configure_file(config-vc.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-vc.h )

if(HAVE_VC)
    message(STATUS "Vc found!")
404 405
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                        "${CMAKE_SOURCE_DIR}/cmake/vc")
406

407 408
    include (VcMacros)

Stefano Bonicatti's avatar
Stefano Bonicatti committed
409 410 411 412 413
    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()
414

415 416 417 418
    #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")

419
        if(Vc_COMPILER_IS_GCC OR Vc_COMPILER_IS_CLANG)
420 421 422 423
            AddCompilerFlag("-std=c++11" _ok)
            if(NOT _ok)
                AddCompilerFlag("-std=c++0x" _ok)
            endif()
424
        endif()
425 426 427

        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
428
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX AVX2)
429
        else()
430
            set(${_objs} ${_src})
431
        endif()
432 433 434 435
        endmacro()

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

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
452
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX)
453
        else()
454
            set(${_objs} ${_src})
455
        endif()
456 457
        endmacro()
    endif()
458

459 460 461
    if (NOT PACKAGERS_BUILD)
      # Optimize the whole Calligra for current architecture
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_DEFINITIONS}")
462 463
    endif ()
endif()
464 465
set(CMAKE_MODULE_PATH ${OLD_CMAKE_MODULE_PATH} )

466 467 468
##
## Test for Xinput
##
469
if(NOT WIN32 AND NOT APPLE)
470
  set(REQUIRED_Xinput_FOUND ${X11_Xinput_FOUND})
471
else()
472
  set(REQUIRED_Xinput_FOUND TRUE)
473
endif()
474

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

477
if(WIN32)
478
    set(KDE4_ICON_DIR ${KDE_INSTALL_FULL_ICONDIR})
479 480 481 482 483 484 485 486
    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} )


487
else()
488
    set (KDE4_ICON_DIR  ${CMAKE_INSTALL_PREFIX}/share/icons)
489
endif()
490

491 492 493
##
## Test endianess
##
David Faure's avatar
David Faure committed
494
include (TestBigEndian)
495
test_big_endian(CMAKE_WORDS_BIGENDIAN)
496

497 498 499 500
##
## Test SharedMimeInfo
##
macro_optional_find_package(SharedMimeInfo)
501
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).")
502 503 504 505 506

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

509

510 511 512 513
##
## Generate a file for prefix information
##

514 515 516 517 518
 ###############################
################################
## Add Calligra helper macros ##
################################
###############################
Cyrille Berger's avatar
Cyrille Berger committed
519

Boudewijn Rempt's avatar
Boudewijn Rempt committed
520
include(MacroCalligraAddBenchmark)
521
include(MacroCalligraAddTest)
Cyrille Berger's avatar
Cyrille Berger committed
522

523 524 525 526 527 528
 ####################
#####################
## Define includes ##
#####################
####################

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

532 533 534 535 536 537 538

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

include_directories(${KOVERSION_INCLUDES})

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

542 543
set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2
                    ${CMAKE_BINARY_DIR}/libs/kundo2)
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
                   ${CMAKE_SOURCE_DIR}/libs/widgetutils
570
                   ${CMAKE_SOURCE_DIR}/libs/widgetutils/config
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
if (NOT WIN32)
    set(NOT_WIN TRUE)
endif()
if (NOT QT_MAC_USE_COCOA)
    set(NOT_COCOA TRUE)
endif()
622

623 624 625 626 627 628 629 630
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 "
)
631

632 633 634 635 636 637
#############################################
####  Backward compatibility BUILD_x=off ####
#############################################

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

640 641 642 643 644
#############################################
####      Temporarily broken products    ####
#############################################

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

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

653
calligra_drop_unbuildable_products()
Jarosław Staniek's avatar
Jarosław Staniek committed
654

655 656 657 658 659 660
 ###################
####################
## Subdirectories ##
####################
###################

661
if(SHOULD_BUILD_APP_KRITA)
662
  add_subdirectory(krita)
663
endif()
664

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

672
macro_display_feature_log()
673

674
calligra_product_deps_report("product_deps")
675
calligra_log_should_build()
676

677
add_custom_target(apidox doc/api/gendocs.pl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
678 679

configure_file(KoConfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h )
680 681 682 683 684 685

## 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 ()