CMakeLists.txt 22.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
set(MIN_QT_VERSION 5.4.0)
8 9
set(MIN_FRAMEWORKS_VERSION 5.7.0)

10 11 12 13 14
if (POLICY CMP0002)
    cmake_policy(SET CMP0002 OLD)
endif()

if (POLICY CMP0017)
15
    cmake_policy(SET CMP0017 NEW)
16
endif ()
Laurent Montel's avatar
Laurent Montel committed
17

18
if (POLICY CMP0022)
19
    cmake_policy(SET CMP0022 OLD)
20
endif ()
21

22
if (POLICY CMP0026)
23
    cmake_policy(SET CMP0026 OLD)
24 25 26
endif()

if (POLICY CMP0046)
27
    cmake_policy(SET CMP0046 OLD)
28
endif ()
29

30
if (POLICY CMP0059)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
31
    cmake_policy(SET CMP0059 OLD)
32 33 34
endif()

if (POLICY CMP0063)
35
    cmake_policy(SET CMP0063 OLD)
36
endif()
37

Boudewijn Rempt's avatar
Boudewijn Rempt committed
38 39 40 41 42 43 44 45
if (POLICY CMP0054)
    cmake_policy(SET CMP0054 OLD)
endif()

if (POLICY CMP0064)
    cmake_policy(SET CMP0064 OLD)
endif()

Boudewijn Rempt's avatar
Boudewijn Rempt committed
46 47
set(APPLE_SUPPRESS_X11_WARNING TRUE)

48 49 50 51 52 53 54 55 56 57 58 59 60 61
# 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()

62 63 64 65 66
 ######################
#######################
## Constants defines ##
#######################
######################
Thomas Zander's avatar
Thomas Zander committed
67

Jigar Raisinghani's avatar
Jigar Raisinghani committed
68 69
# define common versions of Calligra applications, used to generate calligraversion.h
# update these version for every release:
70 71 72 73 74
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
75
#set(CALLIGRA_BETA 1) # uncomment only for Beta
Jigar Raisinghani's avatar
Jigar Raisinghani committed
76
#set(CALLIGRA_RC 1) # uncomment only for RC
Friedrich W. H. Kossebau's avatar
Friedrich W. H. Kossebau committed
77
set(CALLIGRA_YEAR 2015) # update every year
Jigar Raisinghani's avatar
Jigar Raisinghani committed
78 79 80 81 82

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

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

85 86 87 88 89 90
# 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
91
else()
92 93
    # 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
94 95 96
endif()
set(GENERIC_CALLIGRA_LIB_VERSION "${GENERIC_CALLIGRA_LIB_VERSION_MAJOR}.0.0")
set(GENERIC_CALLIGRA_LIB_SOVERSION "${GENERIC_CALLIGRA_LIB_VERSION_MAJOR}")
97

98 99
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                      "${CMAKE_SOURCE_DIR}/cmake/modules")
100
LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/kde_macro")
101 102

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

Jigar Raisinghani's avatar
Jigar Raisinghani committed
104 105 106
# fetch git revision for the current build

set(CALLIGRA_GIT_SHA1_STRING "")
107
set(CALLIGRA_GIT_BRANCH_STRING "")
Jigar Raisinghani's avatar
Jigar Raisinghani committed
108 109 110

include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
111
get_git_branch(GIT_BRANCH)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
112

113
if(GIT_SHA1 AND GIT_BRANCH)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
114 115
    string(SUBSTRING ${GIT_SHA1} 0 7 GIT_SHA1)
    set(CALLIGRA_GIT_SHA1_STRING ${GIT_SHA1})
116 117
    set(CALLIGRA_GIT_BRANCH_STRING ${GIT_BRANCH})
endif()
118

119 120
if(NOT DEFINED RELEASE_BUILD)
    # estimate mode by CMAKE_BUILD_TYPE content if not set on cmdline
121
    string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER)
122
    set(RELEASE_BUILD_TYPES "release" "relwithdebinfo" "minsizerel")
123
    list(FIND RELEASE_BUILD_TYPES "${CMAKE_BUILD_TYPE_TOLOWER}" INDEX)
124 125
    if (INDEX EQUAL -1)
        set(RELEASE_BUILD FALSE)
126
    else()
127
        set(RELEASE_BUILD TRUE)
128 129
    endif()
endif()
130 131
message(STATUS "Release build: ${RELEASE_BUILD}")

Jigar Raisinghani's avatar
Jigar Raisinghani committed
132 133 134 135 136
 ############
#############
## Options ##
#############
############
137

138 139 140 141 142
if (APPLE)
    set(USEOPENGL OFF)
else()
    option(USEOPENGL "Allow the use of OpenGL for Krita" ON)
endif()
143
option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binary. Should be used by packagers only." OFF)
144

145 146 147 148 149 150
 #######################
########################
## Productset setting ##
########################
#######################

151
# For predefined productsets see the definitions in KritaProducts.cmake and
152 153 154 155 156 157 158 159 160 161
# 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
162
include(CalligraProductSetMacros)
163
include(MacroJPEG)
164 165

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

168
set(PRODUCTSET_DEFAULT "ALL")
169 170 171 172 173
# temporary migration support
if (CREATIVEONLY)
    set(WARN_ABOUT_CREATIVEONLY TRUE)
    set(PRODUCTSET_DEFAULT "CREATIVE")
endif ()
174 175

if(NOT PRODUCTSET)
176
    set(PRODUCTSET ${PRODUCTSET_DEFAULT} CACHE STRING "Set of products/features to build" FORCE)
177
endif()
178

179 180
if (RELEASE_BUILD)
    set(CALLIGRA_SHOULD_BUILD_STAGING FALSE)
181
else ()
182
    set(CALLIGRA_SHOULD_BUILD_STAGING TRUE)
183
endif ()
184

185
# finally choose products/features to build
186
calligra_set_productset(${PRODUCTSET})
187

188 189 190 191 192
 ########################
#########################
## Look for KDE and Qt ##
#########################
########################
Cyrille Berger's avatar
Cyrille Berger committed
193

Yue Liu's avatar
Yue Liu committed
194
find_package(ECM 1.7.0 REQUIRED NOMODULE)
195
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
196
include(ECMOptionalAddSubdirectory)
Yue Liu's avatar
Yue Liu committed
197
include(ECMAddAppIcon)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
198 199 200 201 202
include(ECMSetupVersion)
include(ECMMarkNonGuiExecutable)
include(ECMGenerateHeaders)
include(GenerateExportHeader)
include(ECMMarkAsTest)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
203
include(ECMInstallIcons)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
204 205 206

include(CMakePackageConfigHelpers)
include(WriteBasicConfigVersionFile)
Yue Liu's avatar
Yue Liu committed
207
include(CheckFunctionExists)
208 209 210 211 212

include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings)
include(FeatureSummary)
213
include(KDE4Macros)
214

215 216
# do not reorder to be alphabetical: this is the order in which the frameworks
# depend on each other.
217 218 219 220
find_package(KF5 ${MIN_FRAMEWORKS_VERSION} REQUIRED COMPONENTS
        Archive
        Config
        WidgetsAddons
221
        Completion
222
        CoreAddons
223 224 225
        GuiAddons
        I18n
        ItemModels
226
        ItemViews
227
        WindowSystem
228
)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
229

230 231 232 233 234 235 236
find_package(Qt5 ${MIN_QT_VERSION}
        REQUIRED COMPONENTS
        Core
        Gui
        Widgets
        Xml
        Network
237
        PrintSupport
238 239
        Svg
        Test
240 241
        Concurrent
)
242

243

244 245
# Note: OPTIONAL_COMPONENTS does not seem to be reliable
# (as of ECM 5.15.0, CMake 3.2)
246
find_package(Qt5Quick ${MIN_QT_VERSION})
247
find_package(Qt5DBus ${MIN_QT_VERSION})
248

249
set(HAVE_DBUS ${Qt5DBus_FOUND})
250 251
set(QT_QTTEST_LIBRARY Qt5::Test)

Jigar Raisinghani's avatar
Jigar Raisinghani committed
252
if (USEOPENGL)
253
    if (NOT WIN32 AND NOT APPLE)
254 255
        find_package(Qt5 ${MIN_QT_VERSION} REQUIRED X11Extras)
    endif()
256
endif ()
Jigar Raisinghani's avatar
Jigar Raisinghani committed
257

258
include (MacroLibrary)
259 260
include (MacroAdditionalCleanFiles)
include (MacroAddFileDependencies)
261

262 263
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
264
find_package(KF5KIO ${MIN_FRAMEWORKS_VERSION})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
265
macro_bool_to_01(KF5KIO_FOUND HAVE_KIO)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
266 267
find_package(KF5Crash ${MIN_FRAMEWORKS_VERSION}) 
macro_bool_to_01(KF5Crash_FOUND HAVE_KCRASH)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
268

269 270
find_package(X11)
if(X11_FOUND)
271
    find_package(Qt5 ${MIN_QT_VERSION} REQUIRED NO_MODULE COMPONENTS
272 273 274 275 276 277 278 279
                 X11Extras
    )
    set(HAVE_X11 TRUE)
    add_definitions(-DHAVE_X11)
else()
    set(HAVE_X11 FALSE)
endif()

280 281 282 283 284 285 286
find_package(XCB COMPONENTS XCB ATOM)
if(XCB_FOUND)
  set(HAVE_XCB TRUE)
else()
  set(HAVE_XCB FALSE)
endif()

Boudewijn Rempt's avatar
Boudewijn Rempt committed
287 288 289 290 291 292 293
# 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
294
  -DQT_NO_URL_CAST_FROM_STRING
295
  -DQT_DISABLE_DEPRECATED_BEFORE=0
Boudewijn Rempt's avatar
Boudewijn Rempt committed
296 297
)

298

299 300 301 302 303
# 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)
304
    add_definitions(-DCOMPILING_TESTS)
305
endif()
306

307 308 309 310 311 312
# 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)
313
endif()
314

315 316
# set custom krita plugin installdir
set(CALLIGRA_PLUGIN_INSTALL_DIR ${LIB_INSTALL_DIR}/krita)
317

318 319 320 321 322
 ###########################
############################
## Required dependencies  ##
############################
###########################
323 324

find_package(PNG REQUIRED)
325

Boudewijn Rempt's avatar
Boudewijn Rempt committed
326 327 328
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})
329
endif()
Dmitry Kazakov's avatar
Dmitry Kazakov committed
330 331

add_definitions(-DBOOST_ALL_NO_LIB)
332
find_package(Boost REQUIRED COMPONENTS system) # for pigment and stage
333

334 335
if (APPLE)
    SET(CMAKE_CXX_FLAGS "-stdlib=libstdc++ -std=c++11")
336
#    find_package(Carbon REQUIRED)
337
endif ()
338

339 340 341 342 343 344 345
 ###########################
############################
## Optional dependencies  ##
############################
###########################

##
Jigar Raisinghani's avatar
Jigar Raisinghani committed
346
## Check for OpenEXR
347
##
348 349 350 351
macro_optional_find_package(ZLIB)
macro_log_feature(ZLIB_FOUND "zlib" "Compression library" "http://www.zlib.net/" FALSE "" "Optionally used by the G'Mic and the PSD plugins")
macro_bool_to_01(ZLIB_FOUND HAVE_ZLIB)

352

353
macro_optional_find_package(OpenEXR)
354
macro_log_feature(OPENEXR_FOUND "OpenEXR" "High dynamic-range (HDR) image file format" "http://www.openexr.com" FALSE "" "Required by the Krita OpenEXR filter")
355
macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR)
356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
set(LINK_OPENEXR_LIB)
if(OPENEXR_FOUND)
    include_directories(${OPENEXR_INCLUDE_DIR})
    set(LINK_OPENEXR_LIB ${OPENEXR_LIBRARIES})
    add_definitions(${OPENEXR_DEFINITIONS})
endif()

macro_optional_find_package(TIFF)
macro_log_feature(TIFF_FOUND "tiff" "TIFF Library and Utilities" "http://www.remotesensing.org/libtiff" FALSE "" "Required by the Krita TIFF filter")

macro_optional_find_package(JPEG)
macro_log_feature(JPEG_FOUND "jpeg" "Free library for JPEG image compression. Note: libjpeg8 is NOT supported." "http://www.libjpeg-turbo.org" FALSE "" "Required by the Krita JPEG filter")

macro_optional_find_package(OpenJPEG)
macro_log_feature(OPENJPEG_FOUND "openjpeg" "Free library for JPEG 2000 image compression" "http://www.openjpeg.org" FALSE "" "Required by the Krita JPEG 2000 filter")

set(LIBRAW_MIN_VERSION  "0.16")
macro_optional_find_package(LibRaw ${LIBRAW_MIN_VERSION})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
374
macro_log_feature(LIBRAW_FOUND "LibRaw" "Library to decode RAW images" "http://www.libraw.org" FALSE "" "Required to build the raw import plugin")
375 376 377 378

macro_optional_find_package(FFTW3)
macro_log_feature(FFTW3_FOUND "FFTW3" "A fast, free C FFT library" "http://www.fftw.org/" FALSE "" "Required by the Krita for fast convolution operators and some G'Mic features")
macro_bool_to_01(FFTW3_FOUND HAVE_FFTW3)
379

380 381 382
macro_optional_find_package(OCIO)
macro_log_feature(OCIO_FOUND "OCIO" "The OpenColorIO Library" "http://www.opencolorio.org" FALSE "" "Required by the Krita LUT docker")
macro_bool_to_01(OCIO_FOUND HAVE_OCIO)
383 384 385
##
## Look for OpenGL
##
386
set(HAVE_OPENGL 0)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
387
if (USEOPENGL)
388 389 390 391
    # TODO: see if there is a better check for QtGui being built with opengl support (and thus the QOpenGL* classes)
    if(Qt5Gui_OPENGL_IMPLEMENTATION)
        message(STATUS "Found QtGui OpenGL support")
        set(HAVE_OPENGL 1)
392
    else()
393
        message(STATUS "Did NOT find QtGui OpenGL support. Check your Qt configuration")
394 395
    endif()
endif()
396

397 398 399 400
##
## Test for GNU Scientific Library
##
macro_optional_find_package(GSL)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
401
macro_log_feature(GSL_FOUND "GSL" "GNU Scientific Library" "http://www.gnu.org/software/gsl" FALSE "1.7" "Required by Krita's Transform tool.")
402 403
macro_bool_to_01(GSL_FOUND HAVE_GSL)
configure_file(config-gsl.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-gsl.h )
404

405
##
Maximiliano Curia's avatar
Maximiliano Curia committed
406
## Test for eigen3
407
##
Maximiliano Curia's avatar
Maximiliano Curia committed
408
macro_optional_find_package(Eigen3)
409
macro_log_feature(EIGEN3_FOUND "Eigen" "C++ template library for linear algebra" "http://eigen.tuxfamily.org" FALSE "3.0" "Required by Krita")
410

411 412 413
##
## Test for exiv2
##
414 415 416
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")
417

418 419
##
## Test for lcms
420
##
421
macro_optional_find_package(LCMS2)
422
macro_log_feature(LCMS2_FOUND "LittleCMS" "Color management engine" "http://www.littlecms.com" FALSE "2.4" "Will be used for color management and is necessary for Krita")
423
if(LCMS2_FOUND)
424
    if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
425
        set(HAVE_LCMS24 TRUE)
426
    endif()
427
    set(HAVE_REQUIRED_LCMS_VERSION TRUE)
428
    set(HAVE_LCMS2 TRUE)
429
endif()
430

431 432 433 434 435
##
## Test for Vc
##
set(OLD_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} )
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
436
macro_optional_find_package(Vc 0.6.70)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
437
macro_log_feature(Vc_FOUND "Vc" "Portable, zero-overhead SIMD library for C++" "https://github.com/VcDevel/Vc" FALSE "" "Required by the Krita for vectorization")
438
macro_bool_to_01(Vc_FOUND HAVE_VC)
439 440
macro_bool_to_01(PACKAGERS_BUILD DO_PACKAGERS_BUILD)

441 442 443 444
configure_file(config-vc.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-vc.h )

if(HAVE_VC)
    message(STATUS "Vc found!")
445 446
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                        "${CMAKE_SOURCE_DIR}/cmake/vc")
447

448 449
    include (VcMacros)

Stefano Bonicatti's avatar
Stefano Bonicatti committed
450 451 452 453 454
    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()
455

456 457 458 459
    #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")

460
        if(Vc_COMPILER_IS_GCC OR Vc_COMPILER_IS_CLANG)
461 462 463 464
            AddCompilerFlag("-std=c++11" _ok)
            if(NOT _ok)
                AddCompilerFlag("-std=c++0x" _ok)
            endif()
465
        endif()
466 467 468

        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
469
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX AVX2)
470
        else()
471
            set(${_objs} ${_src})
472
        endif()
473 474 475 476
        endmacro()

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
477
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX AVX2)
478
        else()
479
            set(${_objs} ${_src})
480
        endif()
481 482 483 484
        endmacro()
    else()
        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
485
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX)
486
        else()
487
            set(${_objs} ${_src})
488
        endif()
489 490 491 492
        endmacro()

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
493
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX)
494
        else()
495
            set(${_objs} ${_src})
496
        endif()
497 498
        endmacro()
    endif()
499

500
    if (NOT PACKAGERS_BUILD)
501 502
        # Optimize everything for the current architecture
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_DEFINITIONS}")
503 504
    endif ()
endif()
505 506
set(CMAKE_MODULE_PATH ${OLD_CMAKE_MODULE_PATH} )

507 508 509
##
## Test for Xinput
##
510
if(NOT WIN32 AND NOT APPLE)
511
  set(REQUIRED_Xinput_FOUND ${X11_Xinput_FOUND})
512
else()
513
  set(REQUIRED_Xinput_FOUND TRUE)
514
endif()
515

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

518
if(WIN32)
519 520 521 522
    set(LIB_INSTALL_DIR ${LIB_INSTALL_DIR}
                        RUNTIME DESTINATION ${BIN_INSTALL_DIR}
                        LIBRARY ${INSTALL_TARGETS_DEFAULT_ARGS}
                        ARCHIVE ${INSTALL_TARGETS_DEFAULT_ARGS} )
523
endif()
524

525 526 527
##
## Test endianess
##
David Faure's avatar
David Faure committed
528
include (TestBigEndian)
529
test_big_endian(CMAKE_WORDS_BIGENDIAN)
530

531 532 533 534
##
## Test SharedMimeInfo
##
macro_optional_find_package(SharedMimeInfo)
535
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).")
536 537 538 539 540

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

543 544 545 546 547 548 549 550 551 552
##
## Test for pthreads (for G'Mic)
##
macro_optional_find_package(Threads)
macro_log_feature(Threads_FOUND "PThreads" "A low-level threading library" "" FALSE "" "Optionally used by the G'Mic plugin")

##
## Test for OpenMP (for G'Mic)
##
macro_optional_find_package(OpenMP)
553
macro_log_feature(OPENMP_FOUND "OpenMP" "A low-level parallel execution library" "http://openmp.org/wp/" FALSE "" "Optionally used by the G'Mic plugin")
554

555
##
556
## Test for Curl (for G'Mic)
557
##
558
macro_optional_find_package(CURL)
559
macro_log_feature(CURL_FOUND "CURL" "A tool to fetch remote data" "http://curl.haxx.se/" FALSE "" "Optionally used by the G'Mic plugin")
560

561 562 563 564 565
 ###############################
################################
## Add Calligra helper macros ##
################################
###############################
Cyrille Berger's avatar
Cyrille Berger committed
566

Boudewijn Rempt's avatar
Boudewijn Rempt committed
567
include(MacroCalligraAddBenchmark)
568
include(MacroCalligraAddTest)
Cyrille Berger's avatar
Cyrille Berger committed
569

570 571 572 573 574 575
 ####################
#####################
## Define includes ##
#####################
####################

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

579

580 581 582 583
# For kis_debug.h and kis_assert.h
set(KRITAGLOBAL_INCLUDES ${CMAKE_SOURCE_DIR}/krita/libglobal)


584 585
set(KOVERSION_INCLUDES ${CMAKE_SOURCE_DIR}/libs/version
                       ${CMAKE_BINARY_DIR}/libs/version
586 587 588 589
)

include_directories(${KOVERSION_INCLUDES})

590 591 592
# koplugin is at the bottom of the stack
set(KOPLUGIN_INCLUDES ${CMAKE_SOURCE_DIR}/libs/koplugin)

593
set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2
594 595 596 597 598
                    ${CMAKE_BINARY_DIR}/libs/kundo2
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils/config
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils/xmlgui
)
599

600
# koodf is at the bottom of the stack
601
set(KOODF_INCLUDES ${CMAKE_SOURCE_DIR}/libs/odf
602
                   ${CMAKE_SOURCE_DIR}/libs/store
603
                   ${CMAKE_BINARY_DIR}/libs/odf
604
                   ${CMAKE_BINARY_DIR}/libs/store
605
                   ${KOVERSION_INCLUDES}
606
                   )
Boudewijn Rempt's avatar
Boudewijn Rempt committed
607

608
# pigment depends on koplugin and lcms
609
set(PIGMENT_INCLUDES ${KOPLUGIN_INCLUDES}
610
                   ${KOVERSION_INCLUDES}
611
                   ${CMAKE_SOURCE_DIR}/libs/pigment
612
                   ${CMAKE_BINARY_DIR}/libs/pigment
613
                   ${CMAKE_SOURCE_DIR}/libs/pigment/compositeops
614
                   ${CMAKE_SOURCE_DIR}/libs/pigment/resources
615
                   ${Boost_INCLUDE_DIRS}
616

617
                   )
618

619 620 621 622
# flake depends on koodf and pigment
set(FLAKE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/flake
                   ${KOODF_INCLUDES}
                   ${PIGMENT_INCLUDES}
623
                   ${KUNDO2_INCLUDES}
624 625
                   ${CMAKE_SOURCE_DIR}/libs/flake/commands
                   ${CMAKE_SOURCE_DIR}/libs/flake/tools
626
                   ${CMAKE_SOURCE_DIR}/libs/flake/svg
627
                   ${CMAKE_BINARY_DIR}/libs/flake)
628

629
# vectorimage
Jigar Raisinghani's avatar
Jigar Raisinghani committed
630
set(VECTORIMAGE_INCLUDES
631 632 633 634
                   ${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
635

636
# Widgets depends on kritatext and flake
637
set(KOWIDGETS_INCLUDES ${FLAKE_INCLUDES}
638
                   ${CMAKE_SOURCE_DIR}/libs/widgetutils
639 640 641
                   ${CMAKE_BINARY_DIR}/libs/widgetutils
                   ${CMAKE_SOURCE_DIR}/libs/widgets
                   ${CMAKE_BINARY_DIR}/libs/widgets)
642

C. Boemann's avatar
C. Boemann committed
643
# BasicFlakes depends on flake, widgets
644
set(BASICFLAKES_INCLUDES ${KOWIDGETS_INCLUDES}
C. Boemann's avatar
C. Boemann committed
645
                   ${CMAKE_SOURCE_DIR}/libs/basicflakes
646
                   ${CMAKE_BINARY_DIR}/libs/basicflakes
C. Boemann's avatar
C. Boemann committed
647 648
                   ${CMAKE_SOURCE_DIR}/libs/basicflakes/tools)

649 650 651 652 653
 ###################################################
####################################################
## Detect which products/features can be compiled ##
####################################################
###################################################
654

Boudewijn Rempt's avatar
Boudewijn Rempt committed
655
calligra_drop_product_on_bad_condition( APP_KRITA
656 657 658 659 660 661
    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 "
)
662

663 664 665 666 667 668
#############################################
####  Backward compatibility BUILD_x=off ####
#############################################

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

671 672 673 674 675
#############################################
####      Temporarily broken products    ####
#############################################

# If a product does not build due to some temporary brokeness disable it here,
676 677
# by calling calligra_disable_product with the product id and the reason,
# e.g.:
678
# calligra_disable_product(APP_KEXI "isn't buildable at the moment")
679 680 681 682 683

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

684
calligra_drop_unbuildable_products()
Jarosław Staniek's avatar
Jarosław Staniek committed
685

686 687 688 689 690 691
 ###################
####################
## Subdirectories ##
####################
###################

692
if(SHOULD_BUILD_APP_KRITA)
693
  add_subdirectory(krita)
694
endif()
695

696 697
# non-app directories are moved here because they can depend on SHOULD_BUILD_{appname} variables set above
add_subdirectory(libs)
698
add_subdirectory(plugins)
Laurent Montel's avatar
Laurent Montel committed
699

700
macro_display_feature_log()
701

702
calligra_product_deps_report("product_deps")
703
calligra_log_should_build()
704

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