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 25.9 KB
Newer Older
1
project(calligra)
Laurent Montel's avatar
Laurent Montel committed
2

3
cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR)
4

5
cmake_policy(SET CMP0002 OLD)
6 7 8 9 10

#cmake_policy CMP0017 was introduced in version 2.8.4
if(${CMAKE_VERSION} VERSION_GREATER 2.8.3)
    cmake_policy(SET CMP0017 NEW)
endif()
Laurent Montel's avatar
Laurent Montel committed
11

12 13 14 15 16 17
 ############
#############
## Options ##
#############
############

18 19 20 21 22
 ######################
#######################
## Constants defines ##
#######################
######################
Thomas Zander's avatar
Thomas Zander committed
23

Boudewijn Rempt's avatar
Boudewijn Rempt committed
24 25
# define the generic version of the Calligra libraries here
# this makes it easy to advance it when the next Calligra release comes
26 27
set(GENERIC_CALLIGRA_LIB_VERSION "12.0.0")
set(GENERIC_CALLIGRA_LIB_SOVERSION "12")
28

29
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
30

31 32 33 34 35
#
# WARNING: don't change the SHOULD_BUILD_app if an application
# doesn't build, but rather add the following line:
# option(BUILD_app "Build directory app" OFF)
#
36 37
#eg:
#option(BUILD_kexi "Build directory kexi" OFF) # kexi isn't buildable at the moment
38

39
option(GHNS "support Get Hot New Stuff" ON)
40
option(NEPOMUK "support NEPOMUK Tagging" ON)
41 42
option(TINY "compile a tiny Calligra" OFF)
option(CREATIVEONLY "compile only Karbon and Krita" OFF)
43
option(QT3SUPPORT "Build the parts of Calligra that still depend on Qt3" ON)
44
option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binary. Should be used by packagers only." OFF)
45 46

IF (TINY)
C. Boemann's avatar
C. Boemann committed
47
    set(SHOULD_BUILD_WORDS TRUE)
48
    set(SHOULD_BUILD_STAGE TRUE)
49
    set(SHOULD_BUILD_SHEETS TRUE)
50 51 52
    set(SHOULD_BUILD_KARBON FALSE)
    set(SHOULD_BUILD_KRITA FALSE)
    set(SHOULD_BUILD_KEXI FALSE)
53
    set(SHOULD_BUILD_FLOW FALSE)
54
    set(SHOULD_BUILD_PLAN FALSE)
55
    set(SHOULD_BUILD_KDGANTT FALSE)
56
    set(SHOULD_BUILD_SCRIPTING FALSE)
57
    set(SHOULD_BUILD_KOREPORT FALSE)
58
    set(SHOULD_BUILD_BRAINDUMP FALSE)
59
    set(SHOULD_BUILD_CALLIGRA FALSE)
60
    set(SHOULD_BUILD_CSTESTER FALSE)
61
    set(SHOULD_BUILD_KOABSTRACTION TRUE)
62
    set(SHOULD_BUILD_ACTIVE TRUE)
63 64
ELSEIF (CREATIVEONLY)
    set(SHOULD_BUILD_WORDS FALSE)
65
    set(SHOULD_BUILD_STAGE FALSE)
66
    set(SHOULD_BUILD_SHEETS FALSE)
67 68 69 70
    set(SHOULD_BUILD_KARBON TRUE)
    set(SHOULD_BUILD_KRITA TRUE)
    set(SHOULD_BUILD_KEXI FALSE)
    set(SHOULD_BUILD_FLOW FALSE)
71
    set(SHOULD_BUILD_PLAN FALSE)
72
    set(SHOULD_BUILD_KDGANTT FALSE)
73
    set(SHOULD_BUILD_SCRIPTING FALSE)
74 75 76 77 78
    set(SHOULD_BUILD_KOREPORT FALSE)
    set(SHOULD_BUILD_BRAINDUMP FALSE)
    set(SHOULD_BUILD_CALLIGRA FALSE)
    set(SHOULD_BUILD_CSTESTER FALSE)
    set(SHOULD_BUILD_KOABSTRACTION FALSE)
79
    set(SHOULD_BUILD_ACTIVE FALSE)
80
ELSE()
Dimitrios T. Tanis's avatar
Dimitrios T. Tanis committed
81 82
    set(SHOULD_BUILD_WORDS TRUE)
    set(SHOULD_BUILD_STAGE TRUE)
83
    set(SHOULD_BUILD_SHEETS TRUE)
Dimitrios T. Tanis's avatar
Dimitrios T. Tanis committed
84 85
    set(SHOULD_BUILD_KARBON TRUE)
    set(SHOULD_BUILD_KRITA TRUE)
86
    set(SHOULD_BUILD_KEXI TRUE)
Dimitrios T. Tanis's avatar
Dimitrios T. Tanis committed
87 88 89 90
    set(SHOULD_BUILD_FLOW TRUE)
    set(SHOULD_BUILD_PLAN TRUE)
    set(SHOULD_BUILD_KDGANTT TRUE)
    set(SHOULD_BUILD_SCRIPTING TRUE)
91
    set(SHOULD_BUILD_KOREPORT TRUE)
Dimitrios T. Tanis's avatar
Dimitrios T. Tanis committed
92
    set(SHOULD_BUILD_BRAINDUMP TRUE)
93
    set(SHOULD_BUILD_CALLIGRA TRUE)
Dimitrios T. Tanis's avatar
Dimitrios T. Tanis committed
94 95
    set(SHOULD_BUILD_CSTESTER TRUE)
    set(SHOULD_BUILD_KOABSTRACTION TRUE)
96
    set(SHOULD_BUILD_ACTIVE FALSE)
97
ENDIF()
98

99 100 101 102 103
 ########################
#########################
## Look for KDE and Qt ##
#########################
########################
104 105
set(KDE_MIN_VERSION "4.3.0")
find_package(KDE4 4.3.0 REQUIRED)
Cyrille Berger's avatar
Cyrille Berger committed
106

107
if (QT3SUPPORT)
108
    find_package(Qt4 4.6.0 REQUIRED QtCore QtGui QtXml QtScript QtSvg QtTest QtWebKit QtDBus QtOpenGL Qt3Support)
109
else (QT3SUPPORT)
110
    find_package(Qt4 4.6.0 REQUIRED QtCore QtGui QtXml QtScript QtSvg QtTest QtWebKit QtDBus QtOpenGL)
111
endif (QT3SUPPORT)
112

113 114
include (KDE4Defaults)
include (MacroLibrary)
115 116 117
include (MacroAdditionalCleanFiles)
include (MacroAddFileDependencies)

118 119 120 121 122 123 124 125 126 127
set(SHOULD_BUILD_TEXTSHAPE TRUE)
if ((${QTVERSION} VERSION_EQUAL 4.8.0) OR (${QTVERSION} VERSION_EQUAL 4.8.1))
    if (NOT IHAVEPATCHEDQT)
        set(SHOULD_BUILD_WORDS FALSE)
        set(SHOULD_BUILD_STAGE FALSE)
        set(SHOULD_BUILD_TEXTSHAPE FALSE)
        MESSAGE(STATUS "WARNING: You are using a version of Qt that causes crashes. As a result Words and Stage will not be built. Please upgrade to 4.8.2. You can also patch Qt and when building Calligra set IHAVEPATCHEDQT. Patch against Qt can be found in qt48setx.patch")
    endif (NOT IHAVEPATCHEDQT)
endif ((${QTVERSION} VERSION_EQUAL 4.8.0) OR (${QTVERSION} VERSION_EQUAL 4.8.1))

128
if(NOT ${KDE_VERSION} VERSION_GREATER 4.4.0)
129
    set(GHNS FALSE)
130
endif(NOT ${KDE_VERSION} VERSION_GREATER 4.4.0)
131

132 133 134 135
macro_optional_find_package(LibAttica)
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.")

if (NOT LIBATTICA_FOUND)
136
    set(GHNS FALSE)
137
endif (NOT LIBATTICA_FOUND)
138

139 140 141
if(NOT ${KDE_VERSION} VERSION_GREATER 4.6.4)
  set(NEPOMUK FALSE)
endif(NOT ${KDE_VERSION} VERSION_GREATER 4.6.4)
142

143 144
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")

145 146 147 148 149
if(KDE4_BUILD_TESTS)
    # only with this definition will the FOO_TEST_EXPORT macro do something
    add_definitions(-DCOMPILING_TESTS)
endif(KDE4_BUILD_TESTS)

150 151 152 153 154
 ###########################
############################
## Required dependencies  ##
############################
###########################
155

Laurent Montel's avatar
Laurent Montel committed
156 157
find_package(Perl REQUIRED)
find_package(ZLIB REQUIRED)
158
find_package(PNG REQUIRED)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
159 160 161 162
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})
endif(APPLE)
163 164
find_package(Boost REQUIRED) # for pigment and stage
if (NOT Boost_FOUND)
165
    MESSAGE(FATAL_ERROR "Did not find Boost. Boost is required for the core libraries, stage, sheets and krita.")
166
endif (NOT Boost_FOUND)
167

168 169 170
if (APPLE)
   find_package(Carbon REQUIRED)
endif (APPLE)
171

172 173 174 175 176 177
 ###########################
############################
## Optional dependencies  ##
############################
###########################

178 179 180 181
##
## Test for sqlite
##
set(SQLITE_MIN_VERSION 3.6.16)
182
set(SQLITE_RECOMMENDED_VERSION 3.7.15)
183
set(SQLITE_LOAD_EXTENSION_REQUIRED ON)
184 185
macro_optional_find_package(CalligraSqlite 3.6.16)
macro_bool_to_01(SQLITE_FOUND HAVE_SQLITE)
186 187
macro_log_feature(SQLITE_FOUND "SQLite" "Embedded SQL database engine with enabled extensions loading"
                    "http://www.sqlite.org" FALSE "${SQLITE_MIN_VERSION}"
188
		    "Required by Calligra's default database handler for Kexi and bibliography in Words.")
189

190 191 192
##
## Test for ICU
##
193 194
macro_optional_find_package(ICU)
macro_bool_to_01(ICU_FOUND HAVE_ICU)
195 196
macro_log_feature(ICU_FOUND "ICU" "International Components for Unicode (ICU) Library"
                    "http://icu-project.org" FALSE ""
197
		    "Required by Calligra's default database handler for Kexi and Words.")
198

199
##
200
## Check for OpenEXR 
201
##
202

203 204
macro_optional_find_package(OpenEXR)
macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR)
205

206 207 208
##
## Look for OpenGL
##
209
set(HAVE_OPENGL 0)
210
macro_optional_find_package(OpenGL)
211 212 213 214 215 216 217 218 219 220 221 222 223 224

if(OPENGL_FOUND)
    message(STATUS "Found OpenGL: ${OPENGL_LIBRARIES}")
    if(QT_QTOPENGL_FOUND)
        message(STATUS "Found Qt OpenGL support")
        set(HAVE_OPENGL 1)
    else(QT_QTOPENGL_FOUND)
        message(STATUS "Did NOT find Qt OpenGL support. Check your Qt configuration")
    endif(QT_QTOPENGL_FOUND)
else(OPENGL_FOUND)
    message(STATUS "Did NOT find OpenGL libraries")
endif(OPENGL_FOUND)

macro_log_feature(HAVE_OPENGL "OpenGL" "OpenGL support" "" FALSE "" "Required by parts of Krita and optionally by flake")
225

226 227 228
##
## Test for kdepimlibs
##
229
macro_optional_find_package(KdepimLibs)
230
macro_log_feature(KDEPIMLIBS_FOUND "KDE PIMLibs" "KDE Personal Information Management Libraries" "http://www.kde.org/" FALSE "" "Required by Plan and the KDE address book integration (available as a module in KDE)")
231

232

233 234 235 236
##
## Test for eigen2
##
macro_optional_find_package(Eigen2)
237
macro_log_feature(EIGEN2_FOUND "Eigen" "C++ template library for linear algebra" "http://eigen.tuxfamily.org" FALSE "2.0" "Required by Calligra Sheets and Krita")
238

239 240 241
##
## Test for QCA2
##
242
macro_optional_find_package(QCA2)
243
macro_log_feature(QCA2_FOUND "QCA" "Qt Cryptographic Architecture" "http://delta.affinix.com/qca" FALSE "2.0" "Required for encrypted OpenDocument files and encrypted xls files support (available as a module in kdesupport)")
244

245 246 247
##
## Test for exiv2
##
248 249 250
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")
251

252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267
##
## Test for soprano
##
macro_optional_find_package(Soprano)
macro_log_feature(Soprano_FOUND "Soprano" "KDE4 RDF handling library" "http://soprano.sourceforge.net/" FALSE "" "Required to handle RDF metadata in ODF")
if(NOT Soprano_FOUND)
    set(SHOULD_BUILD_RDF FALSE)
    set(SOPRANO_INCLUDE_DIR "")
else(NOT Soprano_FOUND)
    set(SHOULD_BUILD_RDF TRUE)
endif(NOT Soprano_FOUND)
if( Soprano_FOUND )
   add_definitions( -DSHOULD_BUILD_RDF )
endif( Soprano_FOUND )


268 269 270 271
##
## Test for marble
##
macro_optional_find_package(Marble)
272
macro_log_feature(MARBLE_FOUND "Marble" "KDE4 World Globe Widget library" "http://techbase.kde.org/Projects/Marble/" FALSE "" "Required by RDF, Kexi Forms and Reports to show locations on a map")
273 274 275 276 277
if(NOT MARBLE_FOUND)
    set(CAN_USE_MARBLE FALSE)
    set(MARBLE_INCLUDE_DIR "")
else(NOT MARBLE_FOUND)
    set(CAN_USE_MARBLE TRUE)
Christoph Feck's avatar
Christoph Feck committed
278
endif(NOT MARBLE_FOUND)
279
if( MARBLE_FOUND )
280 281 282 283 284
    add_definitions( -DCAN_USE_MARBLE )
    ##
    ## Marble changed addMarbleWidget to setMarbleWidget in MarbleControlBox.h
    ## with commit ea177ca. This is for compatibility with older versions.
    ##
285
    find_file(MARBLECONTROLBOX_H MarbleControlBox.h ${MARBLE_INCLUDE_DIR} PATH_SUFFIXES marble)
286
    if( MARBLECONTROLBOX_H )
287 288
    file(READ ${MARBLECONTROLBOX_H} MARBLECONTROLBOX_H_CONTENT)
    string(REGEX MATCH "setMarbleWidget" SETMARBLEWIDGET ${MARBLECONTROLBOX_H_CONTENT})
289 290 291
        if( SETMARBLEWIDGET )
            add_definitions(-DHAVE_SETMARBLEWIDGET)
        endif( SETMARBLEWIDGET)
292 293
    else( MARBLECONTROLBOX_H )
        message( WARNING "MarbleControlBox.h not found, could not properly set the SETMARBLEWIDGET define." )
294
    endif( MARBLECONTROLBOX_H )
295 296
endif( MARBLE_FOUND )

297 298
##
## Test for lcms
299
##
300
macro_optional_find_package(LCMS2)
301
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")
302
if(LCMS2_FOUND)
303
    if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
304
        set(HAVE_LCMS24 TRUE)
305
    endif(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
306
    set(HAVE_REQUIRED_LCMS_VERSION TRUE)
307
    set(HAVE_LCMS2 TRUE)
308 309
endif(LCMS2_FOUND)

310 311 312 313 314 315
##
## Test for Vc
##

set(OLD_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} )
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
316
macro_optional_find_package(Vc 0.6.70)
317 318
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)
319 320
macro_bool_to_01(PACKAGERS_BUILD DO_PACKAGERS_BUILD)

321 322 323 324 325 326
configure_file(config-vc.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-vc.h )

if(HAVE_VC)
    message(STATUS "Vc found!")

    SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${Vc_CMAKE_MODULES_DIR}")
327 328
    include (VcMacros)

329
    macro(ko_compile_for_all_implementations_no_scalar _objs _src)
330
      if(PACKAGERS_BUILD)
331
        vc_compile_for_all_implementations(${_objs} ${_src} FLAGS -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX)
332 333 334 335
      else(PACKAGERS_BUILD)
        set(${_objs} ${_src})
      endif(PACKAGERS_BUILD)
    endmacro()
336

337
    macro(ko_compile_for_all_implementations _objs _src)
338
      if(PACKAGERS_BUILD)
339
        vc_compile_for_all_implementations(${_objs} ${_src} FLAGS -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX)
340 341 342 343 344
      else(PACKAGERS_BUILD)
        set(${_objs} ${_src})
      endif(PACKAGERS_BUILD)
    endmacro()

345 346 347 348
    if (NOT PACKAGERS_BUILD)
      # Optimize the whole Calligra for current architecture
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_DEFINITIONS}")
    endif (NOT PACKAGERS_BUILD)
349 350 351
endif(HAVE_VC)
set(CMAKE_MODULE_PATH ${OLD_CMAKE_MODULE_PATH} )

352 353 354 355 356
##
## Test for Nepomuk
##
if(NEPOMUK)
    macro_optional_find_package(Nepomuk)
357 358 359
    if(NOT NEPOMUK_FOUND)
        set(NEPOMUK FALSE)
    endif(NOT NEPOMUK_FOUND)
360
    add_definitions(-DDISABLE_NEPOMUK_LEGACY)
Srikanth Tiyyagura's avatar
Srikanth Tiyyagura committed
361
    macro_log_feature(NEPOMUK_FOUND "Nepomuk" "Handles metadata of resources" FALSE  "Required to handle metadata of resources")
362 363
endif(NEPOMUK)

364 365 366
##
## Test for KActivities
##
367
macro_optional_find_package(KActivities 6.1.0)
368 369 370 371 372
macro_log_feature(KActivities_FOUND "KActivities" "Activities interface library" "https://projects.kde.org/projects/kde/kdelibs/kactivities" FALSE "" "Required for Activities integration.")
if(KActivities_FOUND)
    set(HAVE_KACTIVITIES TRUE)
endif(KActivities_FOUND)

Thomas Zander's avatar
Thomas Zander committed
373 374
#Set the build of TextShape changetraker

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

377
if(WIN32)
378 379 380 381 382 383 384 385 386 387 388 389 390 391
    # detect oxygen icon dir at configure time based on KDEDIRS - there may be different package installation locations
    execute_process(COMMAND "${KDE4_KDECONFIG_EXECUTABLE}" --path icon OUTPUT_VARIABLE _dir ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
    file(TO_CMAKE_PATH "${_dir}" __dir)
    find_path(KDE4_ICON_DIR oxygen PATHS
        ${__dir}
    )
    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} )


392 393 394 395
else(WIN32)
    set (KDE4_ICON_DIR  ${CMAKE_INSTALL_PREFIX}/share/icons)
endif(WIN32)

Hanzes Matus's avatar
Hanzes Matus committed
396 397 398
##
## Test for Fontconfig
##
399 400 401 402 403
## Only test if on non-Windows system
if(!WIN32)
    macro_optional_find_package(Fontconfig)
    macro_log_feature(FONTCONFIG_FOUND "Fontconfig" "Library for configuring and customizing font access" "http://fontconfig.org" FALSE "" "Required to handle exact font size")
endif(!WIN32)
Hanzes Matus's avatar
Hanzes Matus committed
404 405 406 407

##
## Test for Freetype
##
408 409 410 411 412
## Only test if on non-Windows system
if(!WIN32)
    macro_optional_find_package(Freetype)
    macro_log_feature(FREETYPE_FOUND "Freetype" "A Free, High-Quality, and Portable Font Engine" "http://www.freetype.org/" FALSE "" "Required to handle exact font size")
endif(!WIN32)
Hanzes Matus's avatar
Hanzes Matus committed
413

414
if(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND)
Hanzes Matus's avatar
Hanzes Matus committed
415 416 417
    set(FONTCONFIG_INCLUDE_DIR "")
    set(FREETYPE_INCLUDE_DIRS "")
else(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND)
418
    add_definitions( -DSHOULD_BUILD_FONT_CONVERSION )
Hanzes Matus's avatar
Hanzes Matus committed
419
endif(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND)
420

Cyrille Berger's avatar
Cyrille Berger committed
421 422 423
##
## Test for Qt Webkit
##
424 425 426 427
macro_log_feature(QT_QTWEBKIT_FOUND "Qt Webkit" "Qt binding for Webkit, the HTML engine." "http://qt.nokia.com" FALSE "" "Required for the web shape, web Kexi widget and web report element")
if(QT_QTWEBKIT_FOUND)
    add_definitions( -DCAN_USE_QTWEBKIT )
endif(QT_QTWEBKIT_FOUND)
Cyrille Berger's avatar
Cyrille Berger committed
428

429 430 431
##
## QImageBlitz (for Kexi)
##
432 433
#macro_optional_find_package(QImageBlitz)
#macro_log_feature(QIMAGEBLITZ_FOUND "QImageBlitz" "Fast, smooth scaling of QImages" "sourceforge.net/projects/qimageblitz/" FALSE "" "Required for Kexi")
434

435 436 437 438 439 440 441 442
##
## Test for KDeclarative
##
macro_optional_find_package(KDeclarative)
if(NOT KDECLARATIVE_FOUND)
    set(SHOULD_BUILD_ACTIVE FALSE)
endif(NOT KDECLARATIVE_FOUND)

443 444 445
##
## Test endianess
##
David Faure's avatar
David Faure committed
446
include (TestBigEndian)
447 448
TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN)

449 450 451 452 453 454 455
##
## Test SharedMimeInfo
##
macro_optional_find_package(SharedMimeInfo)
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), SVM or all of MSOOXML.")


456 457 458 459
##
## Generate a file for prefix information
##

460 461 462 463 464
 ###############################
################################
## Add Calligra helper macros ##
################################
###############################
Cyrille Berger's avatar
Cyrille Berger committed
465

Boudewijn Rempt's avatar
Boudewijn Rempt committed
466
include(MacroCalligraAddBenchmark)
467
include(MacroCalligraBuildTest)
Cyrille Berger's avatar
Cyrille Berger committed
468

469 470 471 472 473 474
 ####################
#####################
## Define includes ##
#####################
####################

475 476 477
# WARNING: make sure that QT_INCLUDES is the first directory to be added to include_directory before
#          any other include directory

478
# for config.h and <toplevel/foo.h> includes (if any?)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
479
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/interfaces )
480

481 482 483
# koplugin is at the bottom of the stack
set(KOPLUGIN_INCLUDES ${CMAKE_SOURCE_DIR}/libs/koplugin)

484
# koodf is at the bottom of the stack
485 486
set(KOODF_INCLUDES ${CMAKE_SOURCE_DIR}/libs/odf
                   ${CMAKE_BINARY_DIR}/libs/odf
487
                   ${KDE4_INCLUDES})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
488

489 490
set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2)

491
# pigment depends on koplugin and lcms
492
set(PIGMENT_INCLUDES ${KOPLUGIN_INCLUDES}
493 494
                   ${CMAKE_SOURCE_DIR}/libs/pigment
                   ${CMAKE_SOURCE_DIR}/libs/pigment/compositeops
495
                   ${CMAKE_SOURCE_DIR}/libs/pigment/resources
496
                   ${QT_INCLUDES}
497
                   ${KDE4_INCLUDES})
498

499 500 501 502 503
# flake depends on koodf and pigment
set(FLAKE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/flake
                   ${KOODF_INCLUDES}
                   ${KOPLUGIN_INCLUDES}
                   ${PIGMENT_INCLUDES}
504
                   ${KUNDO2_INCLUDES}
505
                   ${CMAKE_SOURCE_DIR}/libs/widgetutils
506 507
                   ${CMAKE_SOURCE_DIR}/libs/flake/commands
                   ${CMAKE_SOURCE_DIR}/libs/flake/tools
508
                   ${CMAKE_SOURCE_DIR}/libs/flake/svg
509
                   ${CMAKE_BINARY_DIR}/libs/flake)
510

511 512 513 514 515 516 517
# vectorimage
set(VECTORIMAGE_INCLUDES 
                   ${CMAKE_SOURCE_DIR}/libs/vectorimage
                   ${CMAKE_SOURCE_DIR}/libs/vectorimage/libemf
                   ${CMAKE_SOURCE_DIR}/libs/vectorimage/libsvm
                   ${CMAKE_SOURCE_DIR}/libs/vectorimage/libwmf)
                   
518 519 520 521 522 523
# 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
524
                   ${SOPRANO_INCLUDE_DIR}
525
                   ${FLAKE_INCLUDES}
526 527
                   ${KOODF_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/main)
528

529 530 531 532
# TextLayout depends on kotext
set(TEXTLAYOUT_INCLUDES ${KOTEXT_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/textlayout)

C. Boemann's avatar
C. Boemann committed
533 534 535 536 537
# BasicFlakes depends on flake, widgets
set(BASICFLAKES_INCLUDES ${KOWIDGETS_INCLUDES} ${FLAKE_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/basicflakes
                   ${CMAKE_SOURCE_DIR}/libs/basicflakes/tools)

538
# komain depends on kotext & flake
539
set(KOMAIN_INCLUDES ${KDE4_INCLUDES}
540
                    ${TEXTLAYOUT_INCLUDES}
541
                    ${MARBLE_INCLUDE_DIR}
542
                    ${CMAKE_SOURCE_DIR}/libs/widgets
543
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils
544
                    ${CMAKE_SOURCE_DIR}/libs/main
545
                    ${CMAKE_SOURCE_DIR}/libs/main/config)
546

547 548 549 550
set(KORDF_INCLUDES ${KOMAIN_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/rdf
)

551 552 553
if(SHOULD_BUILD_SCRIPTING)
  set(KOKROSS_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kokross ${CMAKE_BINARY_DIR}/libs/kokross)
endif(SHOULD_BUILD_SCRIPTING)
554

David Faure's avatar
David Faure committed
555
# kopageapp
556 557 558 559 560
set(KOPAGEAPP_INCLUDES ${TEXTLAYOUT_INCLUDES}
                    ${PIGMENT_INCLUDES}
                    ${KOMAIN_INCLUDES}
                    ${CMAKE_SOURCE_DIR}/libs/widgets
                    ${CMAKE_SOURCE_DIR}/libs/kopageapp ${CMAKE_SOURCE_DIR}/libs/kopageapp/commands ${CMAKE_BINARY_DIR}/libs/kopageapp )
561

562 563 564 565
# koproperty
set(KOPROPERTY_INCLUDES ${KOODF_INCLUDES}
                        ${CMAKE_SOURCE_DIR}/libs
                        ${CMAKE_SOURCE_DIR}/libs/widgets)
566
set(KOPROPERTY_LIBS koproperty)
567

568
# calligradb
569 570 571 572 573 574 575 576 577 578
# TODO: remove when Predicate lib arrives
if (NOT TINY AND NOT CREATIVEONLY AND HAVE_ICU AND HAVE_SQLITE) # These are hard deps for calligradb
   set(SHOULD_BUILD_CALLIGRADB TRUE)
   set(CALLIGRADB_LIBS calligradb)                    # TODO remove when Predicate lib arrives
   set(CALLIGRADB_INCLUDES ${CMAKE_SOURCE_DIR}/libs   # TODO remove when Predicate lib arrives
                           ${CMAKE_BINARY_DIR}/libs/db)
else (NOT TINY AND NOT CREATIVEONLY AND HAVE_ICU AND HAVE_SQLITE)
   set(SHOULD_BUILD_CALLIGRADB FALSE)
   set(SHOULD_BUILD_KEXI FALSE)
endif (NOT TINY AND NOT CREATIVEONLY AND HAVE_ICU AND HAVE_SQLITE)
579

580 581 582
#############################################
####          3rd party libraries        ####
#############################################
583

584 585 586
set(KDGANTT_INCLUDES
    ${CMAKE_SOURCE_DIR}/3rdparty/kdgantt
)
587

588 589 590
set(KDCHART_INCLUDES
    ${CMAKE_SOURCE_DIR}/3rdparty/kdchart/include
)
591

592 593 594 595 596
 #############################################
##############################################
## Detect which applications can be compile ##
##############################################
#############################################
597

598
#
Yuri Chornoivan's avatar
Yuri Chornoivan committed
599
# WARNING: when adding a dependency if there is already a line
600 601 602 603
# containing SHOULD_BUILD_app, don't add a new one, just add
# the test to the if construct
#

604

605
### Calligra Sheets: eigen2, boost
606
if(NOT EIGEN2_FOUND)
607
    set(SHOULD_BUILD_SHEETS FALSE)
608
endif(NOT EIGEN2_FOUND)
609

610 611
### Krita: pigment, eigen2, exiv2, sharedmimeinfo
if(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION OR NOT SHARED_MIME_INFO_FOUND)
612
   set(SHOULD_BUILD_KRITA FALSE)
613
endif(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION OR NOT SHARED_MIME_INFO_FOUND)
614

615 616
### Active needs sheets, stage and words
if (NOT SHOULD_BUILD_SHEETS OR NOT SHOULD_BUILD_STAGE OR NOT SHOULD_BUILD_WORDS)
David Faure's avatar
David Faure committed
617
    set(SHOULD_BUILD_ACTIVE FALSE)
618
endif (NOT SHOULD_BUILD_SHEETS OR NOT SHOULD_BUILD_STAGE OR NOT SHOULD_BUILD_WORDS)
619 620


621
### Active: only build with Qt 4.7.0 or better
622
if (NOT ${QTVERSION} VERSION_GREATER 4.7.0)
623
    set(SHOULD_BUILD_ACTIVE FALSE)
624 625
endif (NOT ${QTVERSION} VERSION_GREATER 4.7.0)

626 627 628 629
if (NOT QT_QTDECLARATIVE_FOUND)
    set(SHOULD_BUILD_ACTIVE FALSE)
endif (NOT QT_QTDECLARATIVE_FOUND)

630 631 632 633
if(${KDE_VERSION} VERSION_LESS 4.8.0)
    set(SHOULD_BUILD_ACTIVE FALSE)
endif(${KDE_VERSION} VERSION_LESS 4.8.0)

634 635 636
#if(NOT QIMAGEBLITZ_FOUND)
#    set (SHOULD_BUILD_KEXI FALSE)
#endif(NOT QIMAGEBLITZ_FOUND)
637

638 639 640 641
if (NOT QT3SUPPORT)
    set (SHOULD_BUILD_KEXI FALSE)
endif (NOT QT3SUPPORT)

642 643 644
### HACK ###
# Those BUILD_ are illegally used below before they are defined, which cause problem on a first build
option(BUILD_kexi   "Build directory kexi" ON)
645
option(BUILD_koreport "Build directory libs/koreport" ON)
646 647
### HACK ###

Jarosław Staniek's avatar
Jarosław Staniek committed
648
if(BUILD_kexi AND SHOULD_BUILD_KEXI)
649
###
Jarosław Staniek's avatar
Jarosław Staniek committed
650 651
endif(BUILD_kexi AND SHOULD_BUILD_KEXI)

652 653 654 655 656 657
 ###################
####################
## Subdirectories ##
####################
###################

C. Boemann's avatar
C. Boemann committed
658
if(SHOULD_BUILD_WORDS)
659
   macro_optional_add_subdirectory(words)
C. Boemann's avatar
C. Boemann committed
660
endif(SHOULD_BUILD_WORDS)
661

662 663 664
if (SHOULD_BUILD_FLOW)
    macro_optional_add_subdirectory(flow)
endif (SHOULD_BUILD_FLOW)
665

666
if(SHOULD_BUILD_STAGE)
667
  macro_optional_add_subdirectory(stage)
668
endif(SHOULD_BUILD_STAGE)
669 670 671 672 673

if(SHOULD_BUILD_KEXI)
    macro_optional_add_subdirectory(kexi)
endif(SHOULD_BUILD_KEXI)

674 675 676
if(SHOULD_BUILD_PLAN)
    macro_optional_add_subdirectory(plan)
endif(SHOULD_BUILD_PLAN)
677

678 679 680
if(SHOULD_BUILD_SHEETS)
    macro_optional_add_subdirectory(sheets)
endif(SHOULD_BUILD_SHEETS)
681 682 683 684 685 686 687 688 689

if(SHOULD_BUILD_KRITA)
  macro_optional_add_subdirectory(krita)
endif(SHOULD_BUILD_KRITA)

if(SHOULD_BUILD_KARBON)
  macro_optional_add_subdirectory(karbon)
endif(SHOULD_BUILD_KARBON)

690 691 692 693
if(SHOULD_BUILD_BRAINDUMP)
  macro_optional_add_subdirectory(braindump)
endif(SHOULD_BUILD_BRAINDUMP)

694
if(SHOULD_BUILD_ACTIVE)
695
  macro_optional_add_subdirectory(active)
696 697
endif(SHOULD_BUILD_ACTIVE)

698

699
if(   NOT SHOULD_BUILD_SHEETS OR NOT BUILD_sheets
700 701 702
   OR NOT SHOULD_BUILD_WORDS OR NOT BUILD_words
   OR NOT SHOULD_BUILD_STAGE OR NOT BUILD_stage
  )
703
    set(SHOULD_BUILD_KOABSTRACTION FALSE)
704
endif(   NOT SHOULD_BUILD_SHEETS OR NOT BUILD_sheets
705 706 707
      OR NOT SHOULD_BUILD_WORDS OR NOT BUILD_words
      OR NOT SHOULD_BUILD_STAGE OR NOT BUILD_stage
     )
708

709
if(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS)
710
    # build cstester
711
else(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS)
712
    set(SHOULD_BUILD_CSTESTER FALSE)
713
endif(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS)
714

715 716
macro_optional_add_subdirectory(doc)

717 718
# non-app directories are moved here because they can depend on SHOULD_BUILD_{appname} variables set above
add_subdirectory(libs)
719
add_subdirectory(3rdparty)
720 721
add_subdirectory(interfaces)
add_subdirectory(cmake)
Laurent Montel's avatar
Laurent Montel committed
722
add_subdirectory(pics)
723
add_subdirectory(plugins)
Laurent Montel's avatar
Laurent Montel committed
724 725
add_subdirectory(servicetypes)
add_subdirectory(templates)
726 727
add_subdirectory(devtools)
add_subdirectory(extras)
728
add_subdirectory(filters)
729
add_subdirectory(data)
Laurent Montel's avatar
Laurent Montel committed
730

731
macro_display_feature_log()
732

733 734 735 736 737 738
macro(macro_display_application_enabled _appName _shouldBuild)
if( BUILD_${_appName} AND ${_shouldBuild} MATCHES "[Tt][Rr][Uu][Ee]" )
  message(STATUS ${_appName} )
endif( BUILD_${_appName} AND ${_shouldBuild} MATCHES "[Tt][Rr][Uu][Ee]" )
endmacro(macro_display_application_enabled)

David Faure's avatar
David Faure committed
739
message(STATUS "---------------- The following applications will be built ----------------" )
740

C. Boemann's avatar
C. Boemann committed
741
macro_display_application_enabled(words ${SHOULD_BUILD_WORDS})
742
macro_display_application_enabled(sheets ${SHOULD_BUILD_SHEETS})
743
macro_display_application_enabled(stage ${SHOULD_BUILD_STAGE})
744
macro_display_application_enabled(flow ${SHOULD_BUILD_FLOW})
745
macro_display_application_enabled(kexi ${SHOULD_BUILD_KEXI})
746
macro_display_application_enabled(plan ${SHOULD_BUILD_PLAN})
747 748
macro_display_application_enabled(krita ${SHOULD_BUILD_KRITA})
macro_display_application_enabled(karbon ${SHOULD_BUILD_KARBON})
749
macro_display_application_enabled(braindump ${SHOULD_BUILD_BRAINDUMP})
750
macro_display_application_enabled(calligra ${SHOULD_BUILD_CALLIGRA})
751
macro_display_application_enabled(cstester ${SHOULD_BUILD_CSTESTER})
752
macro_display_application_enabled(active ${SHOULD_BUILD_ACTIVE})
753 754 755

message(STATUS "--------------------------------------------------------------------------" )

756
add_custom_target(apidox doc/api/gendocs.pl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
757 758 759

configure_file(KoConfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h )
install( FILES  ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel)