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 23 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
set(APPLE_SUPPRESS_X11_WARNING TRUE)

40 41 42 43 44 45 46 47 48 49 50 51 52 53
# 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()

54 55 56 57 58
 ######################
#######################
## Constants defines ##
#######################
######################
Thomas Zander's avatar
Thomas Zander committed
59

Jigar Raisinghani's avatar
Jigar Raisinghani committed
60 61
# define common versions of Calligra applications, used to generate calligraversion.h
# update these version for every release:
62 63 64 65 66
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
67
#set(CALLIGRA_BETA 1) # uncomment only for Beta
Jigar Raisinghani's avatar
Jigar Raisinghani committed
68
#set(CALLIGRA_RC 1) # uncomment only for RC
Friedrich W. H. Kossebau's avatar
Friedrich W. H. Kossebau committed
69
set(CALLIGRA_YEAR 2015) # update every year
Jigar Raisinghani's avatar
Jigar Raisinghani committed
70 71 72 73 74

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

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

77 78 79 80 81 82
# 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
83
else()
84 85
    # 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
86 87 88
endif()
set(GENERIC_CALLIGRA_LIB_VERSION "${GENERIC_CALLIGRA_LIB_VERSION_MAJOR}.0.0")
set(GENERIC_CALLIGRA_LIB_SOVERSION "${GENERIC_CALLIGRA_LIB_VERSION_MAJOR}")
89

90 91
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                      "${CMAKE_SOURCE_DIR}/cmake/modules")
92
LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/kde_macro")
93 94

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

Jigar Raisinghani's avatar
Jigar Raisinghani committed
96 97 98
# fetch git revision for the current build

set(CALLIGRA_GIT_SHA1_STRING "")
99
set(CALLIGRA_GIT_BRANCH_STRING "")
Jigar Raisinghani's avatar
Jigar Raisinghani committed
100 101 102

include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
103
get_git_branch(GIT_BRANCH)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
104

105
if(GIT_SHA1 AND GIT_BRANCH)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
106 107
    string(SUBSTRING ${GIT_SHA1} 0 7 GIT_SHA1)
    set(CALLIGRA_GIT_SHA1_STRING ${GIT_SHA1})
108 109
    set(CALLIGRA_GIT_BRANCH_STRING ${GIT_BRANCH})
endif()
110

111 112
if(NOT DEFINED RELEASE_BUILD)
    # estimate mode by CMAKE_BUILD_TYPE content if not set on cmdline
113
    string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER)
114
    set(RELEASE_BUILD_TYPES "release" "relwithdebinfo" "minsizerel")
115
    list(FIND RELEASE_BUILD_TYPES "${CMAKE_BUILD_TYPE_TOLOWER}" INDEX)
116 117
    if (INDEX EQUAL -1)
        set(RELEASE_BUILD FALSE)
118
    else()
119
        set(RELEASE_BUILD TRUE)
120 121
    endif()
endif()
122 123
message(STATUS "Release build: ${RELEASE_BUILD}")

Jigar Raisinghani's avatar
Jigar Raisinghani committed
124 125 126 127 128
 ############
#############
## Options ##
#############
############
129

130 131 132 133 134
if (APPLE)
    set(USEOPENGL OFF)
else()
    option(USEOPENGL "Allow the use of OpenGL for Krita" ON)
endif()
135
option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binary. Should be used by packagers only." OFF)
136

137 138 139 140 141 142
 #######################
########################
## Productset setting ##
########################
#######################

143
# For predefined productsets see the definitions in KritaProducts.cmake and
144 145 146 147 148 149 150 151 152 153
# 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
154
include(CalligraProductSetMacros)
155
include(MacroJPEG)
156 157

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

160
set(PRODUCTSET_DEFAULT "ALL")
161 162 163 164 165
# temporary migration support
if (CREATIVEONLY)
    set(WARN_ABOUT_CREATIVEONLY TRUE)
    set(PRODUCTSET_DEFAULT "CREATIVE")
endif ()
166 167

if(NOT PRODUCTSET)
168
    set(PRODUCTSET ${PRODUCTSET_DEFAULT} CACHE STRING "Set of products/features to build" FORCE)
169
endif()
170

171 172
if (RELEASE_BUILD)
    set(CALLIGRA_SHOULD_BUILD_STAGING FALSE)
173
else ()
174
    set(CALLIGRA_SHOULD_BUILD_STAGING TRUE)
175
endif ()
176

177
# finally choose products/features to build
178
calligra_set_productset(${PRODUCTSET})
179

180 181 182 183 184
 ########################
#########################
## Look for KDE and Qt ##
#########################
########################
Cyrille Berger's avatar
Cyrille Berger committed
185

Yue Liu's avatar
Yue Liu committed
186
find_package(ECM 1.7.0 REQUIRED NOMODULE)
187
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
188
include(ECMOptionalAddSubdirectory)
Yue Liu's avatar
Yue Liu committed
189
include(ECMAddAppIcon)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
190 191 192 193 194
include(ECMSetupVersion)
include(ECMMarkNonGuiExecutable)
include(ECMGenerateHeaders)
include(GenerateExportHeader)
include(ECMMarkAsTest)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
195
include(ECMInstallIcons)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
196 197 198

include(CMakePackageConfigHelpers)
include(WriteBasicConfigVersionFile)
Yue Liu's avatar
Yue Liu committed
199
include(CheckFunctionExists)
200 201 202 203 204

include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings)
include(FeatureSummary)
205
include(KDE4Macros)
206

207 208
# do not reorder to be alphabetical: this is the order in which the frameworks
# depend on each other.
209 210 211 212
find_package(KF5 ${MIN_FRAMEWORKS_VERSION} REQUIRED COMPONENTS
        Archive
        Config
        WidgetsAddons
213
        Completion
214
        CoreAddons
215 216 217
        GuiAddons
        I18n
        ItemModels
218
        ItemViews
219
        WindowSystem
220
)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
221

222 223 224 225 226 227 228
find_package(Qt5 ${MIN_QT_VERSION}
        REQUIRED COMPONENTS
        Core
        Gui
        Widgets
        Xml
        Network
229
        PrintSupport
230 231
        Svg
        Test
232 233
        Concurrent
)
234

235

236 237
# Note: OPTIONAL_COMPONENTS does not seem to be reliable
# (as of ECM 5.15.0, CMake 3.2)
238
find_package(Qt5Quick ${MIN_QT_VERSION})
239
find_package(Qt5DBus ${MIN_QT_VERSION})
240

241
set(HAVE_DBUS ${Qt5DBus_FOUND})
242 243
set(QT_QTTEST_LIBRARY Qt5::Test)

Jigar Raisinghani's avatar
Jigar Raisinghani committed
244
if (USEOPENGL)
245
    if (NOT WIN32 AND NOT APPLE)
246 247
        find_package(Qt5 ${MIN_QT_VERSION} REQUIRED X11Extras)
    endif()
248
endif ()
Jigar Raisinghani's avatar
Jigar Raisinghani committed
249

250
include (MacroLibrary)
251 252
include (MacroAdditionalCleanFiles)
include (MacroAddFileDependencies)
253

254 255
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
256
find_package(KF5KIO ${MIN_FRAMEWORKS_VERSION})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
257
macro_bool_to_01(KF5KIO_FOUND HAVE_KIO)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
258 259
find_package(KF5Crash ${MIN_FRAMEWORKS_VERSION}) 
macro_bool_to_01(KF5Crash_FOUND HAVE_KCRASH)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
260

261 262
find_package(X11)
if(X11_FOUND)
263
    find_package(Qt5 ${MIN_QT_VERSION} REQUIRED NO_MODULE COMPONENTS
264 265 266 267 268 269 270 271
                 X11Extras
    )
    set(HAVE_X11 TRUE)
    add_definitions(-DHAVE_X11)
else()
    set(HAVE_X11 FALSE)
endif()

Boudewijn Rempt's avatar
Boudewijn Rempt committed
272 273 274 275 276 277 278
# 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
279
  -DQT_NO_URL_CAST_FROM_STRING
280
  -DQT_DISABLE_DEPRECATED_BEFORE=0
Boudewijn Rempt's avatar
Boudewijn Rempt committed
281 282
)

283

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

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

300 301
# set custom krita plugin installdir
set(CALLIGRA_PLUGIN_INSTALL_DIR ${LIB_INSTALL_DIR}/krita)
302

303 304 305 306 307
 ###########################
############################
## Required dependencies  ##
############################
###########################
308 309

find_package(PNG REQUIRED)
310

Boudewijn Rempt's avatar
Boudewijn Rempt committed
311 312 313
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})
314
endif()
Dmitry Kazakov's avatar
Dmitry Kazakov committed
315 316

add_definitions(-DBOOST_ALL_NO_LIB)
317
find_package(Boost REQUIRED COMPONENTS system) # for pigment and stage
318

319 320
if (APPLE)
    SET(CMAKE_CXX_FLAGS "-stdlib=libstdc++ -std=c++11")
321
#    find_package(Carbon REQUIRED)
322
endif ()
323

324 325 326 327 328 329 330
 ###########################
############################
## Optional dependencies  ##
############################
###########################

##
Jigar Raisinghani's avatar
Jigar Raisinghani committed
331
## Check for OpenEXR
332
##
333 334 335 336
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)

337

338
macro_optional_find_package(OpenEXR)
339
macro_log_feature(OPENEXR_FOUND "OpenEXR" "High dynamic-range (HDR) image file format" "http://www.openexr.com" FALSE "" "Required by the Krita OpenEXR filter")
340
macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR)
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358
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
359
macro_log_feature(LIBRAW_FOUND "LibRaw" "Library to decode RAW images" "http://www.libraw.org" FALSE "" "Required to build the raw import plugin")
360 361 362 363

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)
364

365 366 367
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)
368 369 370
##
## Look for OpenGL
##
371
set(HAVE_OPENGL 0)
Jigar Raisinghani's avatar
Jigar Raisinghani committed
372
if (USEOPENGL)
373 374 375 376 377
    # 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)
        include_directories(${OPENGL_INCLUDE_DIR})
378
    else()
379
        message(STATUS "Did NOT find QtGui OpenGL support. Check your Qt configuration")
380 381
    endif()
endif()
382

383 384 385 386
##
## Test for GNU Scientific Library
##
macro_optional_find_package(GSL)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
387
macro_log_feature(GSL_FOUND "GSL" "GNU Scientific Library" "http://www.gnu.org/software/gsl" FALSE "1.7" "Required by Krita's Transform tool.")
388 389
macro_bool_to_01(GSL_FOUND HAVE_GSL)
configure_file(config-gsl.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-gsl.h )
390

391
##
Maximiliano Curia's avatar
Maximiliano Curia committed
392
## Test for eigen3
393
##
Maximiliano Curia's avatar
Maximiliano Curia committed
394
macro_optional_find_package(Eigen3)
395
macro_log_feature(EIGEN3_FOUND "Eigen" "C++ template library for linear algebra" "http://eigen.tuxfamily.org" FALSE "3.0" "Required by Krita")
396

397 398 399
##
## Test for exiv2
##
400 401 402
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")
403

404 405
##
## Test for lcms
406
##
407
macro_optional_find_package(LCMS2)
408
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")
409
if(LCMS2_FOUND)
410
    if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
411
        set(HAVE_LCMS24 TRUE)
412
    endif()
413
    set(HAVE_REQUIRED_LCMS_VERSION TRUE)
414
    set(HAVE_LCMS2 TRUE)
415
endif()
416

417 418 419 420 421
##
## Test for Vc
##
set(OLD_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} )
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
422
macro_optional_find_package(Vc 0.6.70)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
423
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")
424
macro_bool_to_01(Vc_FOUND HAVE_VC)
425 426
macro_bool_to_01(PACKAGERS_BUILD DO_PACKAGERS_BUILD)

427 428 429 430
configure_file(config-vc.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-vc.h )

if(HAVE_VC)
    message(STATUS "Vc found!")
431 432
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                        "${CMAKE_SOURCE_DIR}/cmake/vc")
433

434 435
    include (VcMacros)

Stefano Bonicatti's avatar
Stefano Bonicatti committed
436 437 438 439 440
    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()
441

442 443 444 445
    #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")

446
        if(Vc_COMPILER_IS_GCC OR Vc_COMPILER_IS_CLANG)
447 448 449 450
            AddCompilerFlag("-std=c++11" _ok)
            if(NOT _ok)
                AddCompilerFlag("-std=c++0x" _ok)
            endif()
451
        endif()
452 453 454

        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
455
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX AVX2)
456
        else()
457
            set(${_objs} ${_src})
458
        endif()
459 460 461 462
        endmacro()

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
463
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX AVX2)
464
        else()
465
            set(${_objs} ${_src})
466
        endif()
467 468 469 470
        endmacro()
    else()
        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
471
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX)
472
        else()
473
            set(${_objs} ${_src})
474
        endif()
475 476 477 478
        endmacro()

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
479
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX)
480
        else()
481
            set(${_objs} ${_src})
482
        endif()
483 484
        endmacro()
    endif()
485

486
    if (NOT PACKAGERS_BUILD)
487 488
        # Optimize everything for the current architecture
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_DEFINITIONS}")
489 490
    endif ()
endif()
491 492
set(CMAKE_MODULE_PATH ${OLD_CMAKE_MODULE_PATH} )

493 494 495
##
## Test for Xinput
##
496
if(NOT WIN32 AND NOT APPLE)
497
  set(REQUIRED_Xinput_FOUND ${X11_Xinput_FOUND})
498
else()
499
  set(REQUIRED_Xinput_FOUND TRUE)
500
endif()
501

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

504
if(WIN32)
505 506 507 508
    set(LIB_INSTALL_DIR ${LIB_INSTALL_DIR}
                        RUNTIME DESTINATION ${BIN_INSTALL_DIR}
                        LIBRARY ${INSTALL_TARGETS_DEFAULT_ARGS}
                        ARCHIVE ${INSTALL_TARGETS_DEFAULT_ARGS} )
509
endif()
510

511 512 513
##
## Test endianess
##
David Faure's avatar
David Faure committed
514
include (TestBigEndian)
515
test_big_endian(CMAKE_WORDS_BIGENDIAN)
516

517 518 519 520
##
## Test SharedMimeInfo
##
macro_optional_find_package(SharedMimeInfo)
521
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).")
522 523 524 525 526

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

529 530 531 532 533 534 535 536 537 538
##
## 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)
539
macro_log_feature(OPENMP_FOUND "OpenMP" "A low-level parallel execution library" "http://openmp.org/wp/" FALSE "" "Optionally used by the G'Mic plugin")
540

541
##
542
## Test for Curl (for G'Mic)
543
##
544
macro_optional_find_package(CURL)
545
macro_log_feature(CURL_FOUND "CURL" "A tool to fetch remote data" "http://curl.haxx.se/" FALSE "" "Optionally used by the G'Mic plugin")
546

547 548 549 550 551
 ###############################
################################
## Add Calligra helper macros ##
################################
###############################
Cyrille Berger's avatar
Cyrille Berger committed
552

Boudewijn Rempt's avatar
Boudewijn Rempt committed
553
include(MacroCalligraAddBenchmark)
554
include(MacroCalligraAddTest)
Cyrille Berger's avatar
Cyrille Berger committed
555

556 557 558 559 560 561
 ####################
#####################
## Define includes ##
#####################
####################

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

565

566 567 568 569
# For kis_debug.h and kis_assert.h
set(KRITAGLOBAL_INCLUDES ${CMAKE_SOURCE_DIR}/krita/libglobal)


570 571
set(KOVERSION_INCLUDES ${CMAKE_SOURCE_DIR}/libs/version
                       ${CMAKE_BINARY_DIR}/libs/version
572 573 574 575
)

include_directories(${KOVERSION_INCLUDES})

576 577 578
# koplugin is at the bottom of the stack
set(KOPLUGIN_INCLUDES ${CMAKE_SOURCE_DIR}/libs/koplugin)

579
set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2
580 581 582 583 584
                    ${CMAKE_BINARY_DIR}/libs/kundo2
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils/config
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils/xmlgui
)
585

586
# koodf is at the bottom of the stack
587
set(KOODF_INCLUDES ${CMAKE_SOURCE_DIR}/libs/odf
588
                   ${CMAKE_SOURCE_DIR}/libs/store
589
                   ${CMAKE_BINARY_DIR}/libs/odf
590
                   ${CMAKE_BINARY_DIR}/libs/store
591
                   ${KOVERSION_INCLUDES}
592
                   )
Boudewijn Rempt's avatar
Boudewijn Rempt committed
593

594
# pigment depends on koplugin and lcms
595
set(PIGMENT_INCLUDES ${KOPLUGIN_INCLUDES}
596
                   ${KOVERSION_INCLUDES}
597
                   ${CMAKE_SOURCE_DIR}/libs/pigment
598
                   ${CMAKE_BINARY_DIR}/libs/pigment
599
                   ${CMAKE_SOURCE_DIR}/libs/pigment/compositeops
600
                   ${CMAKE_SOURCE_DIR}/libs/pigment/resources
601
                   ${Boost_INCLUDE_DIRS}
602

603
                   )
604

605 606 607 608
# flake depends on koodf and pigment
set(FLAKE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/flake
                   ${KOODF_INCLUDES}
                   ${PIGMENT_INCLUDES}
609
                   ${KUNDO2_INCLUDES}
610 611
                   ${CMAKE_SOURCE_DIR}/libs/flake/commands
                   ${CMAKE_SOURCE_DIR}/libs/flake/tools
612
                   ${CMAKE_SOURCE_DIR}/libs/flake/svg
613
                   ${CMAKE_BINARY_DIR}/libs/flake)
614

615
# vectorimage
Jigar Raisinghani's avatar
Jigar Raisinghani committed
616
set(VECTORIMAGE_INCLUDES
617 618 619 620
                   ${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
621

622 623 624 625 626 627 628
# 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}
629
                   ${KOODF_INCLUDES})
630

631 632
# TextLayout depends on kotext
set(TEXTLAYOUT_INCLUDES ${KOTEXT_INCLUDES}
633 634
                   ${CMAKE_SOURCE_DIR}/libs/textlayout
                   ${CMAKE_BINARY_DIR}/libs/textlayout)
635

636
# Widgets depends on kritatext and flake
637
set(KOWIDGETS_INCLUDES ${KOTEXT_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 )