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 22.8 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
cmake_policy(SET CMP0002 OLD)
8
#cmake_policy CMP0017 was introduced in version 2.8.4
9
if (NOT ${CMAKE_VERSION} VERSION_LESS 2.8.3)
10
    cmake_policy(SET CMP0017 NEW)
11
endif ()
Laurent Montel's avatar
Laurent Montel committed
12

13
if (NOT ${CMAKE_VERSION} VERSION_LESS 2.8.12)
14
    cmake_policy(SET CMP0022 OLD)
15
endif ()
16

17
if (NOT ${CMAKE_VERSION} VERSION_LESS 3.0.0)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
18
    cmake_policy(SET CMP0026 OLD) 
19
    cmake_policy(SET CMP0046 OLD)
20
endif ()
21

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

27 28 29 30 31 32 33 34 35 36 37 38 39 40
# 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()

41 42 43 44 45
 ######################
#######################
## Constants defines ##
#######################
######################
Thomas Zander's avatar
Thomas Zander committed
46

Jigar Raisinghani's avatar
Jigar Raisinghani committed
47 48
# define common versions of Calligra applications, used to generate calligraversion.h
# update these version for every release:
49 50 51 52 53
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
54
#set(CALLIGRA_BETA 1) # uncomment only for Beta
Jigar Raisinghani's avatar
Jigar Raisinghani committed
55
#set(CALLIGRA_RC 1) # uncomment only for RC
Friedrich W. H. Kossebau's avatar
Friedrich W. H. Kossebau committed
56
set(CALLIGRA_YEAR 2015) # update every year
Jigar Raisinghani's avatar
Jigar Raisinghani committed
57 58 59 60 61 62 63

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

message(STATUS "Calligra version: ${CALLIGRA_VERSION_STRING}")

64 65 66 67 68 69
# 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
70
else()
71 72
    # 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
73 74 75
endif()
set(GENERIC_CALLIGRA_LIB_VERSION "${GENERIC_CALLIGRA_LIB_VERSION_MAJOR}.0.0")
set(GENERIC_CALLIGRA_LIB_SOVERSION "${GENERIC_CALLIGRA_LIB_VERSION_MAJOR}")
76

77 78 79 80 81
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                      "${CMAKE_SOURCE_DIR}/cmake/modules")
LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/transitional")

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

Jigar Raisinghani's avatar
Jigar Raisinghani committed
83 84 85
# fetch git revision for the current build

set(CALLIGRA_GIT_SHA1_STRING "")
86
set(CALLIGRA_GIT_BRANCH_STRING "")
Jigar Raisinghani's avatar
Jigar Raisinghani committed
87 88 89

include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
90
get_git_branch(GIT_BRANCH)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
91

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

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

Jigar Raisinghani's avatar
Jigar Raisinghani committed
111 112 113 114 115
 ############
#############
## Options ##
#############
############
116

Jigar Raisinghani's avatar
Jigar Raisinghani committed
117
option(USEOPENGL "Allow the use of OpenGL for Krita" ON)
118 119
if (WIN32)
    option(USE_BREAKPAD "Build the crash handler for Krita (only on windows)" OFF)
120
endif ()
Boudewijn Rempt's avatar
Boudewijn Rempt committed
121
option(GHNS "support Get Hot New Stuff" OFF)
122

123
option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binary. Should be used by packagers only." ON)
124

125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
 #######################
########################
## 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)
143
include(MacroJPEG)
144 145 146 147

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

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

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

159 160
if (RELEASE_BUILD)
    set(CALLIGRA_SHOULD_BUILD_STAGING FALSE)
161
else ()
162
    set(CALLIGRA_SHOULD_BUILD_STAGING TRUE)
163
endif ()
164

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

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

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

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

include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings)
include(FeatureSummary)

194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
find_package(KF5 5.7.0 REQUIRED COMPONENTS 
        Archive 
        Codecs 
        Completion
        Config 
        ConfigWidgets 
        CoreAddons
        Emoticons 
        GlobalAccel
        GuiAddons 
        I18n 
        IconThemes 
        ItemModels 
        ItemViews
        KDELibs4Support
        KIO 
        Kross 
        Parts 
        Sonnet
        TextEditor 
        TextWidgets 
        ThreadWeaver
        Wallet 
        WidgetsAddons 
        WindowSystem
        XmlGui 
220
    OPTIONAL_COMPONENTS
221
        NotifyConfig
222
        Activities
223
        KHtml
224
)
225 226 227
if(KF5_Activities_FOUND)
    set(HAVE_KACTIVITIES TRUE)
endif()
228

229
find_package(Qt5 5.3.0 REQUIRED COMPONENTS Core Gui Widgets Xml Network PrintSupport
230
                                           Script Svg Test Concurrent)
231
find_package(Qt5 5.3.0 COMPONENTS UiTools Sql WebKit WebKitWidgets DBus Declarative Qml Quick X11Extras)
232 233

set(QT_QTDBUS_FOUND ${Qt5DBus_FOUND})
234
set(QT_QTWEBKIT_FOUND ${Qt5WebKit_FOUND})
235
set(QT_QTDECLARATIVE_FOUND ${Qt5Declarative_FOUND})
236
set(QT_QTQUICK_FOUND ${Qt5Quick_FOUND})
237

238 239
set(QT_QTTEST_LIBRARY Qt5::Test)

Jigar Raisinghani's avatar
Jigar Raisinghani committed
240
if (USEOPENGL)
241
    find_package(Qt5 5.3.0 REQUIRED OpenGL)
242
    set(QT_QTOPENGL_FOUND ${Qt5OpenGL_FOUND})
243
endif ()
Jigar Raisinghani's avatar
Jigar Raisinghani committed
244

245

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

Boudewijn Rempt's avatar
Boudewijn Rempt committed
251
if (GHNS)
252 253
    find_package(Attica)
    find_package(NewStuff)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
254
    macro_log_feature(LIBATTICA_FOUND "LibAttica" "Attica is used for Get Hot New Stuff." "https://projects.kde.org/projects/kdesupport/attica" FALSE "" "You need at least version 3.0 for uploading of resources to work.")
255

Boudewijn Rempt's avatar
Boudewijn Rempt committed
256 257
    if (NOT LIBATTICA_FOUND)
        set(GHNS FALSE)
258 259 260 261
    else ()
        message(STATUS "WARNING: You are compiling with Get Hot New Stuff enabled. Do not do that when building distribution packages. GHNS is unusable these days until someone starts maintaining it again.")
    endif ()
endif ()
262

263 264
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")

265 266 267 268 269 270 271 272 273 274 275
find_package(X11)
if(X11_FOUND)
    find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE COMPONENTS
                 X11Extras
    )
    set(HAVE_X11 TRUE)
    add_definitions(-DHAVE_X11)
else()
    set(HAVE_X11 FALSE)
endif()

Boudewijn Rempt's avatar
Boudewijn Rempt committed
276 277 278 279 280 281 282
# 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
283
  -DQT_NO_URL_CAST_FROM_STRING
Boudewijn Rempt's avatar
Boudewijn Rempt committed
284 285
)

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

294 295 296 297 298 299
# 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)
300
endif()
301

302 303
# set custom calligra plugin installdir
set(CALLIGRA_PLUGIN_INSTALL_DIR ${LIB_INSTALL_DIR}/calligra)
304

305 306 307 308 309
# TEMPORARY: for initial Qt5/KF5 build porting phase deprecation warnings are only annoying noise
# remove once code porting phase starts, perhaps first locally in product subdirs
if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUC)
    add_definitions(-Wno-deprecated -Wno-deprecated-declarations)
endif ()
310

311 312 313 314 315
 ###########################
############################
## Required dependencies  ##
############################
###########################
316

Laurent Montel's avatar
Laurent Montel committed
317 318
find_package(Perl REQUIRED)
find_package(ZLIB REQUIRED)
319
find_package(PNG REQUIRED)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
320 321 322
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})
323
endif()
Dmitry Kazakov's avatar
Dmitry Kazakov committed
324 325

add_definitions(-DBOOST_ALL_NO_LIB)
326
find_package(Boost REQUIRED COMPONENTS system) # for pigment and stage
327
if (NOT Boost_FOUND)
328 329
    message(FATAL_ERROR "Did not find Boost. Boost is required for the core libraries, stage, sheets and krita.")
endif ()
330

331 332
if (APPLE)
   find_package(Carbon REQUIRED)
333
endif ()
334

335 336 337 338 339 340
 ###########################
############################
## Optional dependencies  ##
############################
###########################

341

342
##
Jigar Raisinghani's avatar
Jigar Raisinghani committed
343
## Check for OpenEXR
344
##
345

346 347
macro_optional_find_package(OpenEXR)
macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR)
348

349 350 351
##
## Look for OpenGL
##
352
set(HAVE_OPENGL 0)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
353 354
if (USEOPENGL)
    macro_optional_find_package(OpenGL)
355

Jigar Raisinghani's avatar
Jigar Raisinghani committed
356 357 358 359 360
    if(OPENGL_FOUND)
        message(STATUS "Found OpenGL: ${OPENGL_LIBRARIES}")
        if(QT_QTOPENGL_FOUND)
            message(STATUS "Found Qt OpenGL support")
            set(HAVE_OPENGL 1)
361
        else()
Jigar Raisinghani's avatar
Jigar Raisinghani committed
362
            message(STATUS "Did NOT find Qt OpenGL support. Check your Qt configuration")
363 364
        endif()
    else()
Jigar Raisinghani's avatar
Jigar Raisinghani committed
365
        message(STATUS "Did NOT find OpenGL libraries")
366
    endif()
367
    macro_log_feature(HAVE_OPENGL "OpenGL" "OpenGL support" "" FALSE "" "Required by Gemini, parts of Krita and optionally by flake")
368
endif()
369

370 371 372 373 374 375 376 377
##
## 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 )
378

379
##
Maximiliano Curia's avatar
Maximiliano Curia committed
380
## Test for eigen3
381
##
Maximiliano Curia's avatar
Maximiliano Curia committed
382 383
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")
384

385 386 387
##
## Test for exiv2
##
388 389 390
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")
391

392 393
##
## Test for lcms
394
##
395
macro_optional_find_package(LCMS2)
396
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")
397
if(LCMS2_FOUND)
398
    if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
399
        set(HAVE_LCMS24 TRUE)
400
    endif()
401
    set(HAVE_REQUIRED_LCMS_VERSION TRUE)
402
    set(HAVE_LCMS2 TRUE)
403
endif()
404

405 406 407 408 409
##
## Test for Vc
##
set(OLD_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} )
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
410
macro_optional_find_package(Vc 0.6.70)
411 412
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)
413 414
macro_bool_to_01(PACKAGERS_BUILD DO_PACKAGERS_BUILD)

415 416 417 418
configure_file(config-vc.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-vc.h )

if(HAVE_VC)
    message(STATUS "Vc found!")
419 420
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                        "${CMAKE_SOURCE_DIR}/cmake/vc")
421

422 423
    include (VcMacros)

Stefano Bonicatti's avatar
Stefano Bonicatti committed
424 425 426 427 428
    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()
429

430 431 432 433
    #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")

434
        if(Vc_COMPILER_IS_GCC OR Vc_COMPILER_IS_CLANG)
435 436 437 438
            AddCompilerFlag("-std=c++11" _ok)
            if(NOT _ok)
                AddCompilerFlag("-std=c++0x" _ok)
            endif()
439
        endif()
440 441 442

        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
443
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX AVX2)
444
        else()
445
            set(${_objs} ${_src})
446
        endif()
447 448 449 450
        endmacro()

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
451
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX AVX2)
452
        else()
453
            set(${_objs} ${_src})
454
        endif()
455 456 457 458
        endmacro()
    else()
        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
459
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX)
460
        else()
461
            set(${_objs} ${_src})
462
        endif()
463 464 465 466
        endmacro()

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
467
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX)
468
        else()
469
            set(${_objs} ${_src})
470
        endif()
471 472
        endmacro()
    endif()
473

474 475 476
    if (NOT PACKAGERS_BUILD)
      # Optimize the whole Calligra for current architecture
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_DEFINITIONS}")
477 478
    endif ()
endif()
479 480
set(CMAKE_MODULE_PATH ${OLD_CMAKE_MODULE_PATH} )

481 482 483
##
## Test for Xinput
##
484
if(NOT WIN32 AND NOT APPLE)
485
  set(REQUIRED_Xinput_FOUND ${X11_Xinput_FOUND})
486
else()
487
  set(REQUIRED_Xinput_FOUND TRUE)
488
endif()
489

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

492
if(WIN32)
493
    set(KDE4_ICON_DIR ${KDE_INSTALL_FULL_ICONDIR})
494 495 496 497 498 499 500 501
    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} )


502
else()
503
    set (KDE4_ICON_DIR  ${CMAKE_INSTALL_PREFIX}/share/icons)
504
endif()
505

506 507 508
##
## Test endianess
##
David Faure's avatar
David Faure committed
509
include (TestBigEndian)
510
test_big_endian(CMAKE_WORDS_BIGENDIAN)
511

512 513 514 515
##
## Test SharedMimeInfo
##
macro_optional_find_package(SharedMimeInfo)
516
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).")
517 518 519 520 521

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

524

525 526 527 528
##
## Generate a file for prefix information
##

529 530 531 532 533
 ###############################
################################
## Add Calligra helper macros ##
################################
###############################
Cyrille Berger's avatar
Cyrille Berger committed
534

Boudewijn Rempt's avatar
Boudewijn Rempt committed
535
include(MacroCalligraAddBenchmark)
536
include(MacroCalligraAddTest)
Cyrille Berger's avatar
Cyrille Berger committed
537

538 539 540 541 542 543
 ####################
#####################
## Define includes ##
#####################
####################

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

547 548 549 550 551 552 553

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

include_directories(${KOVERSION_INCLUDES})

554 555 556
# koplugin is at the bottom of the stack
set(KOPLUGIN_INCLUDES ${CMAKE_SOURCE_DIR}/libs/koplugin)

557 558
set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2
                    ${CMAKE_BINARY_DIR}/libs/kundo2)
559

560
# koodf is at the bottom of the stack
561
set(KOODF_INCLUDES ${CMAKE_SOURCE_DIR}/libs/odf
562
                   ${CMAKE_SOURCE_DIR}/libs/store
563
                   ${CMAKE_BINARY_DIR}/libs/odf
564
                   ${CMAKE_BINARY_DIR}/libs/store
565
                   ${KOVERSION_INCLUDES} 
566
                   )
Boudewijn Rempt's avatar
Boudewijn Rempt committed
567

568
# pigment depends on koplugin and lcms
569
set(PIGMENT_INCLUDES ${KOPLUGIN_INCLUDES}
570
                   ${KOVERSION_INCLUDES} 
571
                   ${CMAKE_SOURCE_DIR}/libs/pigment
572
                   ${CMAKE_BINARY_DIR}/libs/pigment
573
                   ${CMAKE_SOURCE_DIR}/libs/pigment/compositeops
574
                   ${CMAKE_SOURCE_DIR}/libs/pigment/resources
575
                   ${Boost_INCLUDE_DIRS}
576 577
                   
                   )
578

579 580 581 582
# flake depends on koodf and pigment
set(FLAKE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/flake
                   ${KOODF_INCLUDES}
                   ${PIGMENT_INCLUDES}
583
                   ${KUNDO2_INCLUDES}
584
                   ${CMAKE_SOURCE_DIR}/libs/widgetutils
585 586
                   ${CMAKE_SOURCE_DIR}/libs/flake/commands
                   ${CMAKE_SOURCE_DIR}/libs/flake/tools
587
                   ${CMAKE_SOURCE_DIR}/libs/flake/svg
588
                   ${CMAKE_BINARY_DIR}/libs/flake)
589

590
# vectorimage
Jigar Raisinghani's avatar
Jigar Raisinghani committed
591
set(VECTORIMAGE_INCLUDES
592 593 594 595
                   ${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
596

597 598 599 600 601 602 603
# 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}
604
                   ${KOODF_INCLUDES})
605

606 607
# TextLayout depends on kotext
set(TEXTLAYOUT_INCLUDES ${KOTEXT_INCLUDES}
608 609
                   ${CMAKE_SOURCE_DIR}/libs/textlayout
                   ${CMAKE_BINARY_DIR}/libs/textlayout)
610

611
# Widgets depends on kritatext and flake
612
set(KOWIDGETS_INCLUDES ${KOTEXT_INCLUDES}
613
                   ${CMAKE_SOURCE_DIR}/libs/widgetutils
614 615 616
                   ${CMAKE_BINARY_DIR}/libs/widgetutils
                   ${CMAKE_SOURCE_DIR}/libs/widgets
                   ${CMAKE_BINARY_DIR}/libs/widgets)
617

C. Boemann's avatar
C. Boemann committed
618
# BasicFlakes depends on flake, widgets
619
set(BASICFLAKES_INCLUDES ${KOWIDGETS_INCLUDES}
C. Boemann's avatar
C. Boemann committed
620
                   ${CMAKE_SOURCE_DIR}/libs/basicflakes
621
                   ${CMAKE_BINARY_DIR}/libs/basicflakes
C. Boemann's avatar
C. Boemann committed
622 623
                   ${CMAKE_SOURCE_DIR}/libs/basicflakes/tools)

624 625 626 627 628
 ###################################################
####################################################
## Detect which products/features can be compiled ##
####################################################
###################################################
629

630 631 632 633 634 635
if (NOT WIN32)
    set(NOT_WIN TRUE)
endif()
if (NOT QT_MAC_USE_COCOA)
    set(NOT_COCOA TRUE)
endif()
636

637 638 639 640 641 642 643 644
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 "
)
645

646 647 648 649 650 651
#############################################
####  Backward compatibility BUILD_x=off ####
#############################################

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

654 655 656 657 658
#############################################
####      Temporarily broken products    ####
#############################################

# If a product does not build due to some temporary brokeness disable it here,
659 660
# by calling calligra_disable_product with the product id and the reason,
# e.g.:
661
# calligra_disable_product(APP_KEXI "isn't buildable at the moment")
662 663 664 665 666

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

667
calligra_drop_unbuildable_products()
Jarosław Staniek's avatar
Jarosław Staniek committed
668

669 670 671 672 673 674
 ###################
####################
## Subdirectories ##
####################
###################

675
if(SHOULD_BUILD_APP_KRITA)
676
  add_subdirectory(krita)
677
endif()
678

679 680
# non-app directories are moved here because they can depend on SHOULD_BUILD_{appname} variables set above
add_subdirectory(libs)
681
add_subdirectory(3rdparty)
682 683
add_subdirectory(interfaces)
add_subdirectory(cmake)
Laurent Montel's avatar
Laurent Montel committed
684
add_subdirectory(pics)
685
add_subdirectory(plugins)
Laurent Montel's avatar
Laurent Montel committed
686
add_subdirectory(servicetypes)
687
add_subdirectory(devtools)
Laurent Montel's avatar
Laurent Montel committed
688

689
macro_display_feature_log()
690

691
calligra_product_deps_report("product_deps")
692
calligra_log_should_build()
693

694
add_custom_target(apidox doc/api/gendocs.pl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
695 696

configure_file(KoConfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h )
697 698 699 700 701 702

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