CMakeLists.txt 22.5 KB
Newer Older
1
project(calligra)
Laurent Montel's avatar
Laurent Montel committed
2

3 4
cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR)
cmake_policy(SET CMP0002 OLD)
5
cmake_policy(SET CMP0017 NEW)
Laurent Montel's avatar
Laurent Montel committed
6

7 8 9 10 11 12
 ############
#############
## Options ##
#############
############

13 14 15 16 17
 ######################
#######################
## Constants defines ##
#######################
######################
Thomas Zander's avatar
Thomas Zander committed
18

Boudewijn Rempt's avatar
Boudewijn Rempt committed
19 20
# define the generic version of the Calligra libraries here
# this makes it easy to advance it when the next Calligra release comes
21 22
set(GENERIC_CALLIGRA_LIB_VERSION "11.0.0")
set(GENERIC_CALLIGRA_LIB_SOVERSION "11")
23

24
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
25

26 27 28 29 30
#
# 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)
#
31 32
#eg:
#option(BUILD_kexi "Build directory kexi" OFF) # kexi isn't buildable at the moment
33

34
option(GHNS "support Get Hot New Stuff" ON)
35
option(NEPOMUK "support NEPOMUK Tagging" ON)
36 37
option(TINY "compile a tiny Calligra" OFF)
option(CREATIVEONLY "compile only Karbon and Krita" OFF)
38
option(QT3SUPPORT "Build the parts of Calligra that still depend on Qt3" ON)
39 40

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

93 94 95 96 97 98 99 100 101 102
if(KDE4_BUILD_TESTS)
    # only with this definition will the FOO_TEST_EXPORT macro do something
    add_definitions(-DCOMPILING_TESTS)
endif(KDE4_BUILD_TESTS)

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

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

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

117 118 119 120 121 122 123 124 125 126
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))

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

131 132 133 134
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)
135
    set(GHNS FALSE)
136
endif (NOT LIBATTICA_FOUND)
137

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

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

144 145 146 147 148
 ###########################
############################
## Required dependencies  ##
############################
###########################
149

Laurent Montel's avatar
Laurent Montel committed
150 151
find_package(Perl REQUIRED)
find_package(ZLIB REQUIRED)
152
find_package(PNG REQUIRED)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
153 154 155 156
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)
157 158
find_package(Boost REQUIRED) # for pigment and stage
if (NOT Boost_FOUND)
159
    MESSAGE(FATAL_ERROR "Did not find Boost. Boost is required for the core libraries, stage, sheets and krita.")
160
endif (NOT Boost_FOUND)
161

162 163 164
if (APPLE)
   find_package(Carbon REQUIRED)
endif (APPLE)
165

166 167 168 169 170 171
 ###########################
############################
## Optional dependencies  ##
############################
###########################

172 173 174 175 176 177
##
## Test for sqlite
##
set(SQLITE_MIN_VERSION 3.6.16)
set(SQLITE_RECOMMENDED_VERSION 3.7.12)
set(SQLITE_LOAD_EXTENSION_REQUIRED ON)
178 179
macro_optional_find_package(CalligraSqlite 3.6.16)
macro_bool_to_01(SQLITE_FOUND HAVE_SQLITE)
180 181
macro_log_feature(SQLITE_FOUND "SQLite" "Embedded SQL database engine with enabled extensions loading"
                    "http://www.sqlite.org" FALSE "${SQLITE_MIN_VERSION}"
182 183
		    "Required by Calligra's default database handler for Kexi and Words.")

184 185 186
##
## Test for ICU
##
187 188
macro_optional_find_package(ICU)
macro_bool_to_01(ICU_FOUND HAVE_ICU)
189 190
macro_log_feature(ICU_FOUND "ICU" "International Components for Unicode (ICU) Library"
                    "http://icu-project.org" FALSE ""
191
		    "Required by Calligra's default database handler for Kexi and Words.")
192

193 194 195
##
## Check for OpenEXR 
##
196

197 198
macro_optional_find_package(OpenEXR)
macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR)
199

200 201 202
##
## Look for OpenGL
##
203
set(HAVE_OPENGL 0)
204 205
if (NOT WIN32)
macro_optional_find_package(OpenGL)
206 207 208 209 210 211 212 213 214 215 216 217 218 219

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")
220
endif (NOT WIN32)
221

222 223 224
##
## Test for kdepimlibs
##
225
macro_optional_find_package(KdepimLibs)
226
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)")
227

228

229 230 231 232
##
## Test for eigen2
##
macro_optional_find_package(Eigen2)
233
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")
234

235 236 237
##
## Test for QCA2
##
238
macro_optional_find_package(QCA2)
239
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)")
240

241 242 243
##
## Test for exiv2
##
244 245 246
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")
247

248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263
##
## 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 )


264 265 266 267
##
## Test for marble
##
macro_optional_find_package(Marble)
268
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")
269 270 271 272 273
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
274
endif(NOT MARBLE_FOUND)
275
if( MARBLE_FOUND )
276 277 278 279 280 281 282
    add_definitions( -DCAN_USE_MARBLE )
    ##
    ## Marble changed addMarbleWidget to setMarbleWidget in MarbleControlBox.h
    ## with commit ea177ca. This is for compatibility with older versions.
    ##
    find_file(MARBLECONTROLBOX_H MarbleControlBox.h ${MARBLE_INCLUDE_DIR})
    if( MARBLECONTROLBOX_H )
283 284
    file(READ ${MARBLECONTROLBOX_H} MARBLECONTROLBOX_H_CONTENT)
    string(REGEX MATCH "setMarbleWidget" SETMARBLEWIDGET ${MARBLECONTROLBOX_H_CONTENT})
285 286 287 288
        if( SETMARBLEWIDGET )
            add_definitions(-DHAVE_SETMARBLEWIDGET)
        endif( SETMARBLEWIDGET)
    endif( MARBLECONTROLBOX_H )
289 290
endif( MARBLE_FOUND )

291 292
##
## Test for lcms
293
##
294
macro_optional_find_package(LCMS2)
295
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")
296
if(LCMS2_FOUND)
297
    if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
298
        set(HAVE_LCMS24 TRUE)
299
    endif(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
300
    set(HAVE_REQUIRED_LCMS_VERSION TRUE)
301
    set(HAVE_LCMS2 TRUE)
302 303
endif(LCMS2_FOUND)

304 305 306 307 308
##
## Test for Nepomuk
##
if(NEPOMUK)
    macro_optional_find_package(Nepomuk)
309 310 311
    if(NOT NEPOMUK_FOUND)
        set(NEPOMUK FALSE)
    endif(NOT NEPOMUK_FOUND)
312
    add_definitions(-DDISABLE_NEPOMUK_LEGACY)
Srikanth Tiyyagura's avatar
Srikanth Tiyyagura committed
313
    macro_log_feature(NEPOMUK_FOUND "Nepomuk" "Handles metadata of resources" FALSE  "Required to handle metadata of resources")
314 315
endif(NEPOMUK)

Thomas Zander's avatar
Thomas Zander committed
316 317
#Set the build of TextShape changetraker

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

320
if(WIN32)
321 322 323 324 325 326 327 328 329 330 331 332 333 334
    # 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} )


335 336 337 338
else(WIN32)
    set (KDE4_ICON_DIR  ${CMAKE_INSTALL_PREFIX}/share/icons)
endif(WIN32)

Hanzes Matus's avatar
Hanzes Matus committed
339 340 341
##
## Test for Fontconfig
##
342 343 344 345 346
## 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
347 348 349 350

##
## Test for Freetype
##
351 352 353 354 355
## 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
356 357 358 359 360

if(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND) 
    set(FONTCONFIG_INCLUDE_DIR "")
    set(FREETYPE_INCLUDE_DIRS "")
else(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND)
361
    add_definitions( -DSHOULD_BUILD_FONT_CONVERSION )
Hanzes Matus's avatar
Hanzes Matus committed
362 363
endif(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND)
  
Cyrille Berger Skott's avatar
Cyrille Berger Skott committed
364 365 366
##
## Test for Qt Webkit
##
367 368 369 370
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 Skott's avatar
Cyrille Berger Skott committed
371

372 373 374
##
## QImageBlitz (for Kexi)
##
375 376
#macro_optional_find_package(QImageBlitz)
#macro_log_feature(QIMAGEBLITZ_FOUND "QImageBlitz" "Fast, smooth scaling of QImages" "sourceforge.net/projects/qimageblitz/" FALSE "" "Required for Kexi")
377

378 379 380 381 382 383 384 385
##
## Test for KDeclarative
##
macro_optional_find_package(KDeclarative)
if(NOT KDECLARATIVE_FOUND)
    set(SHOULD_BUILD_ACTIVE FALSE)
endif(NOT KDECLARATIVE_FOUND)

386 387 388
##
## Test endianess
##
David Faure's avatar
David Faure committed
389
include (TestBigEndian)
390 391
TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN)

392 393 394 395
##
## Generate a file for prefix information
##

Cyrille Berger's avatar
Cyrille Berger committed
396 397 398 399 400 401
 #############################
##############################
## Add the benchmark target ##
##############################
#############################

Boudewijn Rempt's avatar
Boudewijn Rempt committed
402
include(MacroCalligraAddBenchmark)
Cyrille Berger's avatar
Cyrille Berger committed
403

404 405 406 407 408 409
 ####################
#####################
## Define includes ##
#####################
####################

410 411 412
# WARNING: make sure that QT_INCLUDES is the first directory to be added to include_directory before
#          any other include directory

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

416 417 418
# koplugin is at the bottom of the stack
set(KOPLUGIN_INCLUDES ${CMAKE_SOURCE_DIR}/libs/koplugin)

419
# koodf is at the bottom of the stack
420 421
set(KOODF_INCLUDES ${CMAKE_SOURCE_DIR}/libs/odf
                   ${CMAKE_BINARY_DIR}/libs/odf
422
                   ${KDE4_INCLUDES})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
423

424 425
set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2)

426
# pigment depends on koplugin and lcms
427
set(PIGMENT_INCLUDES ${KOPLUGIN_INCLUDES}
428 429
                   ${CMAKE_SOURCE_DIR}/libs/pigment
                   ${CMAKE_SOURCE_DIR}/libs/pigment/compositeops
430
                   ${CMAKE_SOURCE_DIR}/libs/pigment/resources
431
                   ${QT_INCLUDES}
432
                   ${KDE4_INCLUDES})
433

434 435 436 437 438
# flake depends on koodf and pigment
set(FLAKE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/flake
                   ${KOODF_INCLUDES}
                   ${KOPLUGIN_INCLUDES}
                   ${PIGMENT_INCLUDES}
439
                   ${KUNDO2_INCLUDES}
440 441
                   ${CMAKE_SOURCE_DIR}/libs/flake/commands
                   ${CMAKE_SOURCE_DIR}/libs/flake/tools
442
                   ${CMAKE_SOURCE_DIR}/libs/flake/svg
443
                   ${CMAKE_BINARY_DIR}/libs/flake)
444 445 446 447 448 449 450

# 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
451
                   ${SOPRANO_INCLUDE_DIR}
452
                   ${FLAKE_INCLUDES}
453 454
                   ${KOODF_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/main)
455

456 457 458 459
# TextLayout depends on kotext
set(TEXTLAYOUT_INCLUDES ${KOTEXT_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/textlayout)

460
# komain depends on kotext & flake
461
set(KOMAIN_INCLUDES ${KDE4_INCLUDES}
462
                    ${TEXTLAYOUT_INCLUDES}
463
                    ${MARBLE_INCLUDE_DIR}
464 465
                    ${CMAKE_SOURCE_DIR}/libs/widgets
                    ${CMAKE_SOURCE_DIR}/libs/main
466
                    ${CMAKE_SOURCE_DIR}/libs/main/rdf
467
                    ${CMAKE_SOURCE_DIR}/libs/main/config)
468

469 470 471
if(SHOULD_BUILD_SCRIPTING)
  set(KOKROSS_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kokross ${CMAKE_BINARY_DIR}/libs/kokross)
endif(SHOULD_BUILD_SCRIPTING)
472

David Faure's avatar
David Faure committed
473
# kopageapp
474 475 476 477 478
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 )
479

480 481 482
# koproperty
SET(KOPROPERTY_TARGETNAME koproperty)                           # TODO remove when we move to independent place
SET(KOPROPERTY_LIBS ${KOPROPERTY_TARGETNAME})                   # TODO remove when we move to independent place
Boudewijn Rempt's avatar
Boudewijn Rempt committed
483 484
SET(KOPROPERTY_LIB_VERSION ${GENERIC_CALLIGRA_LIB_VERSION})      # TODO remove when we move to independent place
SET(KOPROPERTY_LIB_SOVERSION ${GENERIC_CALLIGRA_LIB_SOVERSION})  # TODO remove when we move to independent place
485 486 487 488 489
SET(KOPROPERTY_USE_KOLIBS TRUE)                                 # TODO remove when we move to independent place
set(KOPROPERTY_INCLUDES ${KOODF_INCLUDES}
                        ${CMAKE_SOURCE_DIR}/libs
                        ${CMAKE_SOURCE_DIR}/libs/widgets)

490 491
# calligradb
SET(CALLIGRADB_LIBS calligradb)                    # TODO remove when Predicate lib arrives
492 493
set(CALLIGRADB_INCLUDES ${CMAKE_SOURCE_DIR}/libs   # TODO remove when Predicate lib arrives
                        ${CMAKE_BINARY_DIR}/libs/db)
494

495 496 497 498 499
 #############################################
##############################################
## Detect which applications can be compile ##
##############################################
#############################################
500

501 502 503 504 505 506
#
# WARNING: when adding a dependency if there is allready a line
# containing SHOULD_BUILD_app, don't add a new one, just add
# the test to the if construct
#

507

508
### Calligra Sheets: eigen2, boost
509
if(NOT EIGEN2_FOUND)
510
    set(SHOULD_BUILD_SHEETS FALSE)
511
endif(NOT EIGEN2_FOUND)
512

Boudewijn Rempt's avatar
Boudewijn Rempt committed
513
### Krita: pigment, eigen2, exiv2
514
if(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION)
515
   set(SHOULD_BUILD_KRITA FALSE)
516
endif(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION)
517

518 519
### 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
520
    set(SHOULD_BUILD_ACTIVE FALSE)
521
endif (NOT SHOULD_BUILD_SHEETS OR NOT SHOULD_BUILD_STAGE OR NOT SHOULD_BUILD_WORDS)
522 523


524
### Active: only build with Qt 4.7.0 or better 
525
if (NOT ${QTVERSION} VERSION_GREATER 4.7.0)
526
    set(SHOULD_BUILD_ACTIVE FALSE)
527 528
endif (NOT ${QTVERSION} VERSION_GREATER 4.7.0)

529 530 531 532
if (NOT QT_QTDECLARATIVE_FOUND)
    set(SHOULD_BUILD_ACTIVE FALSE)
endif (NOT QT_QTDECLARATIVE_FOUND)

533 534 535 536
if(${KDE_VERSION} VERSION_LESS 4.8.0)
    set(SHOULD_BUILD_ACTIVE FALSE)
endif(${KDE_VERSION} VERSION_LESS 4.8.0)

537 538 539
#if(NOT QIMAGEBLITZ_FOUND)
#    set (SHOULD_BUILD_KEXI FALSE)
#endif(NOT QIMAGEBLITZ_FOUND)
540

541 542 543 544
if (NOT QT3SUPPORT)
    set (SHOULD_BUILD_KEXI FALSE)
endif (NOT QT3SUPPORT)

545 546 547
### 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)
548
option(BUILD_koreport "Build directory libs/koreport" ON)
549 550
### HACK ###

Jarosław Staniek's avatar
Jarosław Staniek committed
551
if(BUILD_kexi AND SHOULD_BUILD_KEXI)
552
###
Jarosław Staniek's avatar
Jarosław Staniek committed
553 554
endif(BUILD_kexi AND SHOULD_BUILD_KEXI)

555 556 557 558 559 560
 ###################
####################
## Subdirectories ##
####################
###################

C. Boemann's avatar
C. Boemann committed
561
if(SHOULD_BUILD_WORDS)
562
   macro_optional_add_subdirectory(words)
C. Boemann's avatar
C. Boemann committed
563
endif(SHOULD_BUILD_WORDS)
564

565 566 567
if (SHOULD_BUILD_FLOW)
    macro_optional_add_subdirectory(flow)
endif (SHOULD_BUILD_FLOW)
568

569
if (SHOULD_BUILD_PLAN)
570
    macro_optional_add_subdirectory(kdgantt)
571
endif (SHOULD_BUILD_PLAN)
572

573
if(SHOULD_BUILD_STAGE)
574
  macro_optional_add_subdirectory(stage)
575
endif(SHOULD_BUILD_STAGE)
576 577 578 579 580

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

581 582 583
if(SHOULD_BUILD_PLAN)
    macro_optional_add_subdirectory(plan)
endif(SHOULD_BUILD_PLAN)
584

585 586 587
if(SHOULD_BUILD_SHEETS)
    macro_optional_add_subdirectory(sheets)
endif(SHOULD_BUILD_SHEETS)
588 589 590 591 592 593 594 595 596

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)

597 598 599 600
if(SHOULD_BUILD_BRAINDUMP)
  macro_optional_add_subdirectory(braindump)
endif(SHOULD_BUILD_BRAINDUMP)

601
if(SHOULD_BUILD_ACTIVE)
602
  macro_optional_add_subdirectory(active)
603 604
endif(SHOULD_BUILD_ACTIVE)

605

606
if(   NOT SHOULD_BUILD_SHEETS OR NOT BUILD_sheets
607 608 609
   OR NOT SHOULD_BUILD_WORDS OR NOT BUILD_words
   OR NOT SHOULD_BUILD_STAGE OR NOT BUILD_stage
  )
610
    set(SHOULD_BUILD_KOABSTRACTION FALSE)
611
endif(   NOT SHOULD_BUILD_SHEETS OR NOT BUILD_sheets
612 613 614
      OR NOT SHOULD_BUILD_WORDS OR NOT BUILD_words
      OR NOT SHOULD_BUILD_STAGE OR NOT BUILD_stage
     )
615

616
if(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS)
617
    # build cstester
618
else(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS)
619
    set(SHOULD_BUILD_CSTESTER FALSE)
620
endif(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS)
621

622 623
macro_optional_add_subdirectory(doc)

624 625 626 627
# non-app directories are moved here because they can depend on SHOULD_BUILD_{appname} variables set above
add_subdirectory(libs)
add_subdirectory(interfaces)
add_subdirectory(cmake)
Laurent Montel's avatar
Laurent Montel committed
628
add_subdirectory(pics)
629
add_subdirectory(plugins)
Laurent Montel's avatar
Laurent Montel committed
630 631
add_subdirectory(servicetypes)
add_subdirectory(templates)
632 633
add_subdirectory(tools)
add_subdirectory(filters)
Laurent Montel's avatar
Laurent Montel committed
634

635
macro_display_feature_log()
636

637 638 639 640 641 642
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
643
message(STATUS "---------------- The following applications will be built ----------------" )
644

C. Boemann's avatar
C. Boemann committed
645
macro_display_application_enabled(words ${SHOULD_BUILD_WORDS})
646
macro_display_application_enabled(sheets ${SHOULD_BUILD_SHEETS})
647
macro_display_application_enabled(stage ${SHOULD_BUILD_STAGE})
648
macro_display_application_enabled(flow ${SHOULD_BUILD_FLOW})
649
macro_display_application_enabled(kexi ${SHOULD_BUILD_KEXI})
650
macro_display_application_enabled(plan ${SHOULD_BUILD_PLAN})
651 652
macro_display_application_enabled(krita ${SHOULD_BUILD_KRITA})
macro_display_application_enabled(karbon ${SHOULD_BUILD_KARBON})
653
macro_display_application_enabled(braindump ${SHOULD_BUILD_BRAINDUMP})
654
macro_display_application_enabled(calligra ${SHOULD_BUILD_CALLIGRA})
655
macro_display_application_enabled(cstester ${SHOULD_BUILD_CSTESTER})
656
macro_display_application_enabled(active ${SHOULD_BUILD_ACTIVE})
657 658 659

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

660
add_custom_target(apidox doc/api/gendocs.pl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
661 662 663

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)