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

3
cmake_minimum_required(VERSION 2.6.2 FATAL_ERROR)
Laurent Montel's avatar
Laurent Montel committed
4

5 6 7 8 9 10
 ############
#############
## Options ##
#############
############

11 12 13 14 15
 ######################
#######################
## Constants defines ##
#######################
######################
Thomas Zander's avatar
Thomas Zander committed
16

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

22
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
23

24 25 26 27 28
#
# 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)
#
29 30
#eg:
#option(BUILD_kexi "Build directory kexi" OFF) # kexi isn't buildable at the moment
Casper Boemann's avatar
Casper Boemann committed
31 32
option(BUILD_koabstraction "Build directory koabstraction" ON) # koabstraction isn't buildable at the moment
option(BUILD_mobile "Build directory mobile" ON) # mobile depends on koabstraction it builds but does not run
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 50
    set(SHOULD_BUILD_KDGANTT FALSE)
    set(SHOULD_BUILD_KOUNAVAIL FALSE)
51
    set(SHOULD_BUILD_SCRIPTING FALSE)
52
    set(SHOULD_BUILD_MOBILE TRUE)
53
    set(SHOULD_BUILD_KOREPORT FALSE)
54
    set(SHOULD_BUILD_BRAINDUMP FALSE)
55
    set(SHOULD_BUILD_CALLIGRA FALSE)
56
    set(SHOULD_BUILD_CSTESTER FALSE)
57
    set(SHOULD_BUILD_KOABSTRACTION TRUE)
58
    set(SHOULD_BUILD_ACTIVE TRUE)
59 60
ELSEIF (CREATIVEONLY)
    set(SHOULD_BUILD_WORDS FALSE)
61
    set(SHOULD_BUILD_STAGE FALSE)
62
    set(SHOULD_BUILD_SHEETS FALSE)
63 64 65 66
    set(SHOULD_BUILD_KARBON TRUE)
    set(SHOULD_BUILD_KRITA TRUE)
    set(SHOULD_BUILD_KEXI FALSE)
    set(SHOULD_BUILD_FLOW FALSE)
67
    set(SHOULD_BUILD_PLAN FALSE)
68 69 70
    set(SHOULD_BUILD_KDGANTT FALSE)
    set(SHOULD_BUILD_KOUNAVAIL FALSE)
    set(SHOULD_BUILD_SCRIPTING TRUE)
71
    set(SHOULD_BUILD_MOBILE FALSE)
72 73 74 75 76
    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)
77
    set(SHOULD_BUILD_ACTIVE FALSE)
78
ELSE()
Dimitrios T. Tanis's avatar
Dimitrios T. Tanis committed
79 80
    set(SHOULD_BUILD_WORDS TRUE)
    set(SHOULD_BUILD_STAGE TRUE)
81
    set(SHOULD_BUILD_SHEETS TRUE)
Dimitrios T. Tanis's avatar
Dimitrios T. Tanis committed
82 83
    set(SHOULD_BUILD_KARBON TRUE)
    set(SHOULD_BUILD_KRITA TRUE)
84
    set(SHOULD_BUILD_KEXI TRUE)
Dimitrios T. Tanis's avatar
Dimitrios T. Tanis committed
85 86 87 88 89 90
    set(SHOULD_BUILD_FLOW TRUE)
    set(SHOULD_BUILD_PLAN TRUE)
    set(SHOULD_BUILD_KDGANTT TRUE)
    set(SHOULD_BUILD_KOUNAVAIL TRUE)
    set(SHOULD_BUILD_SCRIPTING TRUE)
    set(SHOULD_BUILD_MOBILE 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 96
    set(SHOULD_BUILD_CSTESTER TRUE)
    set(SHOULD_BUILD_KOABSTRACTION TRUE)
    set(SHOULD_BUILD_ACTIVE TRUE)
97
ENDIF()
98

99 100 101 102 103 104 105 106 107 108
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
109
set(KDE_MIN_VERSION "4.3.0")
110
find_package(KDE4 4.3.0 REQUIRED)
Cyrille Berger's avatar
Cyrille Berger committed
111

112 113 114 115 116
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)
117

118
include(KDE4Defaults)
119
include(MacroLibrary)
120 121 122
include (MacroAdditionalCleanFiles)
include (MacroAddFileDependencies)

123 124 125 126 127 128 129 130 131 132
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))

133
if(NOT ${KDE_VERSION} VERSION_GREATER 4.4.0)
134
    set(GHNS FALSE)
135
endif(NOT ${KDE_VERSION} VERSION_GREATER 4.4.0)
136

137 138 139 140
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)
141
    set(GHNS FALSE)
142
endif (NOT LIBATTICA_FOUND)
143

144 145 146
if(NOT ${KDE_VERSION} VERSION_GREATER 4.6.4)
  set(NEPOMUK FALSE)
endif(NOT ${KDE_VERSION} VERSION_GREATER 4.6.4)
147

148 149
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")

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)
159 160
find_package(Boost REQUIRED) # for pigment and stage
if (NOT Boost_FOUND)
161
    MESSAGE(FATAL_ERROR "Did not find Boost. Boost is required for the core libraries, stage, sheets and krita.")
162
endif (NOT Boost_FOUND)
163

164 165 166
if (APPLE)
   find_package(Carbon REQUIRED)
endif (APPLE)
167

168 169
 ################################
#################################
170
## Check for OpenEXR           ##
171 172
#################################
################################
173

174

175 176
macro_optional_find_package(OpenEXR)
macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR)
177

178

179 180 181 182 183 184 185 186 187
 ###########################
############################
## Optional dependencies  ##
############################
###########################

##
## Look for OpenGL
##
188
set(HAVE_OPENGL 0)
189 190
if (NOT WIN32)
macro_optional_find_package(OpenGL)
191 192 193 194 195 196 197 198 199 200 201 202 203 204

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")
205
endif (NOT WIN32)
206

207 208 209
##
## Test for kdepimlibs
##
210
macro_optional_find_package(KdepimLibs)
211
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)")
212

213

214 215 216 217
##
## Test for eigen2
##
macro_optional_find_package(Eigen2)
218
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")
219

220 221 222
##
## Test for QCA2
##
223
macro_optional_find_package(QCA2)
224
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)")
225

226 227 228
##
## Test for exiv2
##
229 230 231
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")
232

233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
##
## 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 )


249 250 251 252
##
## Test for marble
##
macro_optional_find_package(Marble)
253
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")
254 255 256 257 258
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
259
endif(NOT MARBLE_FOUND)
260
if( MARBLE_FOUND )
261 262 263 264 265 266 267
    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 )
268 269
	file(READ ${MARBLECONTROLBOX_H} MARBLECONTROLBOX_H_CONTENT)
	string(REGEX MATCH "setMarbleWidget" SETMARBLEWIDGET ${MARBLECONTROLBOX_H_CONTENT})
270 271 272 273
        if( SETMARBLEWIDGET )
            add_definitions(-DHAVE_SETMARBLEWIDGET)
        endif( SETMARBLEWIDGET)
    endif( MARBLECONTROLBOX_H )
274 275 276 277
endif( MARBLE_FOUND )



278 279
##
## Test for lcms
280
##
281
macro_optional_find_package(LCMS2)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
282
macro_log_feature(LCMS2_FOUND "LittleCMS" "Color management engine" "http://www.littlecms.com" FALSE "2.0" "Will be used for color management and is necesary for Krita")
283 284
if(LCMS2_FOUND)
    set(HAVE_REQUIRED_LCMS_VERSION TRUE)
285
    set(HAVE_LCMS2 TRUE)
286 287 288
    set(HAVE_LCMS TRUE)
endif(LCMS2_FOUND)

289 290 291 292 293
##
## Test for Nepomuk
##
if(NEPOMUK)
    macro_optional_find_package(Nepomuk)
294 295 296
    if(NOT NEPOMUK_FOUND)
        set(NEPOMUK FALSE)
    endif(NOT NEPOMUK_FOUND)
297
    add_definitions(-DDISABLE_NEPOMUK_LEGACY)
Srikanth Tiyyagura's avatar
Srikanth Tiyyagura committed
298
    macro_log_feature(NEPOMUK_FOUND "Nepomuk" "Handles metadata of resources" FALSE  "Required to handle metadata of resources")
299 300
endif(NEPOMUK)

301

302
macro_log_feature(HAVE_REQUIRED_LCMS_VERSION "LittleCMS" "Color management engine" "http://www.littlecms.com" FALSE "1.18" "Required for color management and Krita")
303

Thomas Zander's avatar
Thomas Zander committed
304 305
#Set the build of TextShape changetraker

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

308
if(WIN32)
309 310 311 312 313 314 315 316 317 318 319 320 321 322
    # 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} )


323 324 325 326
else(WIN32)
    set (KDE4_ICON_DIR  ${CMAKE_INSTALL_PREFIX}/share/icons)
endif(WIN32)

Hanzes Matus's avatar
Hanzes Matus committed
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345
##
## Test for Fontconfig
##
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")

##
## Test for Freetype
##
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")

if(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND) 
    set(FONTCONFIG_INCLUDE_DIR "")
    set(FREETYPE_INCLUDE_DIRS "")
else(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND)
	add_definitions( -DSHOULD_BUILD_FONT_CONVERSION )
endif(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND)
  
Cyrille Berger's avatar
Cyrille Berger committed
346 347 348
##
## Test for Qt Webkit
##
349 350 351 352
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
353

354 355 356
##
## QImageBlitz (for Kexi)
##
357 358
#macro_optional_find_package(QImageBlitz)
#macro_log_feature(QIMAGEBLITZ_FOUND "QImageBlitz" "Fast, smooth scaling of QImages" "sourceforge.net/projects/qimageblitz/" FALSE "" "Required for Kexi")
359

360 361 362
##
## Test endianess
##
David Faure's avatar
David Faure committed
363
include (TestBigEndian)
364 365
TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN)

366 367 368 369
##
## Generate a file for prefix information
##

Cyrille Berger's avatar
Cyrille Berger committed
370 371 372 373 374 375
 #############################
##############################
## Add the benchmark target ##
##############################
#############################

Boudewijn Rempt's avatar
Boudewijn Rempt committed
376
include(MacroCalligraAddBenchmark)
Cyrille Berger's avatar
Cyrille Berger committed
377

378 379 380 381 382 383
 ####################
#####################
## Define includes ##
#####################
####################

384 385 386
# WARNING: make sure that QT_INCLUDES is the first directory to be added to include_directory before
#          any other include directory

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

390 391 392
# koplugin is at the bottom of the stack
set(KOPLUGIN_INCLUDES ${CMAKE_SOURCE_DIR}/libs/koplugin)

393
# koodf is at the bottom of the stack
394 395
set(KOODF_INCLUDES ${CMAKE_SOURCE_DIR}/libs/odf
                   ${CMAKE_BINARY_DIR}/libs/odf
396
                   ${KDE4_INCLUDES})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
397

398 399
set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2)

400
# pigment depends on koplugin and lcms
401
set(PIGMENT_INCLUDES ${KOPLUGIN_INCLUDES}
402 403
                   ${CMAKE_SOURCE_DIR}/libs/pigment
                   ${CMAKE_SOURCE_DIR}/libs/pigment/compositeops
404
                   ${CMAKE_SOURCE_DIR}/libs/pigment/resources
405
                   ${QT_INCLUDES}
406
                   ${KDE4_INCLUDES})
407

408 409 410 411 412
# flake depends on koodf and pigment
set(FLAKE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/flake
                   ${KOODF_INCLUDES}
                   ${KOPLUGIN_INCLUDES}
                   ${PIGMENT_INCLUDES}
413
                   ${KUNDO2_INCLUDES}
414 415
                   ${CMAKE_SOURCE_DIR}/libs/flake/commands
                   ${CMAKE_SOURCE_DIR}/libs/flake/tools
416
                   ${CMAKE_SOURCE_DIR}/libs/flake/svg
417
                   ${CMAKE_BINARY_DIR}/libs/flake)
418 419 420 421 422 423 424

# 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
425
                   ${SOPRANO_INCLUDE_DIR}
426
                   ${FLAKE_INCLUDES}
427 428
                   ${KOODF_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/main)
429

430 431 432 433
# TextLayout depends on kotext
set(TEXTLAYOUT_INCLUDES ${KOTEXT_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/textlayout)

434
# komain depends on kotext & flake
435
set(KOMAIN_INCLUDES ${KDE4_INCLUDES}
436
                    ${TEXTLAYOUT_INCLUDES}
437
                    ${MARBLE_INCLUDE_DIR}
438 439
                    ${CMAKE_SOURCE_DIR}/libs/widgets
                    ${CMAKE_SOURCE_DIR}/libs/main
440
                    ${CMAKE_SOURCE_DIR}/libs/main/rdf
441
                    ${CMAKE_SOURCE_DIR}/libs/main/config)
442

443 444 445
if(SHOULD_BUILD_SCRIPTING)
  set(KOKROSS_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kokross ${CMAKE_BINARY_DIR}/libs/kokross)
endif(SHOULD_BUILD_SCRIPTING)
446

David Faure's avatar
David Faure committed
447
# kopageapp
448 449 450 451 452
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 )
453

454 455 456
# 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
457 458
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
459 460 461 462 463
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)

464 465 466 467 468
 #############################################
##############################################
## Detect which applications can be compile ##
##############################################
#############################################
469

470 471 472 473 474 475
#
# 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
#

476

477
### Calligra Sheets: eigen2, boost
478
if(NOT EIGEN2_FOUND)
479
    set(SHOULD_BUILD_SHEETS FALSE)
480
endif(NOT EIGEN2_FOUND)
481

Boudewijn Rempt's avatar
Boudewijn Rempt committed
482
### Krita: pigment, eigen2, exiv2
483
if(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION)
484
   set(SHOULD_BUILD_KRITA FALSE)
485
endif(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION)
486

487 488
### 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
489
    set(SHOULD_BUILD_ACTIVE FALSE)
490
endif (NOT SHOULD_BUILD_SHEETS OR NOT SHOULD_BUILD_STAGE OR NOT SHOULD_BUILD_WORDS)
491 492


493
### Active: only build with Qt 4.7.0 or better 
494
if (NOT ${QTVERSION} VERSION_GREATER 4.7.0)
495
    set(SHOULD_BUILD_ACTIVE FALSE)
496 497
endif (NOT ${QTVERSION} VERSION_GREATER 4.7.0)

498 499 500 501
if (NOT QT_QTDECLARATIVE_FOUND)
    set(SHOULD_BUILD_ACTIVE FALSE)
endif (NOT QT_QTDECLARATIVE_FOUND)

502 503 504 505
if(${KDE_VERSION} VERSION_LESS 4.8.0)
    set(SHOULD_BUILD_ACTIVE FALSE)
endif(${KDE_VERSION} VERSION_LESS 4.8.0)

506 507 508
#if(NOT QIMAGEBLITZ_FOUND)
#    set (SHOULD_BUILD_KEXI FALSE)
#endif(NOT QIMAGEBLITZ_FOUND)
509

510 511 512 513
if (NOT QT3SUPPORT)
    set (SHOULD_BUILD_KEXI FALSE)
endif (NOT QT3SUPPORT)

514 515 516
### 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)
517
option(BUILD_koreport "Build directory libs/koreport" ON)
518 519
### HACK ###

Jarosław Staniek's avatar
Jarosław Staniek committed
520 521 522 523
if(BUILD_kexi AND SHOULD_BUILD_KEXI)
    ##
    ## Test for sqlite
    ##
524
    set(SQLITE_MIN_VERSION 3.6.16)
Jarosław Staniek's avatar
Jarosław Staniek committed
525
    set(SQLITE_RECOMMENDED_VERSION 3.7.10)
526
    set(SQLITE_LOAD_EXTENSION_REQUIRED ON)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
527
    find_package(CalligraSqlite 3.6.16)
528 529 530
    macro_log_feature(SQLITE_FOUND "SQLite" "Embedded SQL database engine with enabled extensions loading"
                      "http://www.sqlite.org" FALSE "${SQLITE_MIN_VERSION}"
                      "Required by Kexi for its default database driver.")
531
    if(NOT SQLITE_FOUND)
Jarosław Staniek's avatar
Jarosław Staniek committed
532
        set(SHOULD_BUILD_KEXI FALSE)
533
        message(STATUS "WARNING: Because of that, Kexi will not be built.")
534
    endif(NOT SQLITE_FOUND)
535 536 537 538 539 540 541 542 543 544 545 546

    ##
    ## Test for ICU
    ##
    find_package(ICU)
    macro_log_feature(ICU_FOUND "ICU" "International Components for Unicode (ICU) Library"
                      "http://icu-project.org" FALSE "" "Required by Kexi")

    if(NOT ICU_FOUND)
        set(SHOULD_BUILD_KEXI FALSE)
        message(STATUS "WARNING: Because of that, Kexi will not be built.")
    endif(NOT ICU_FOUND)
Jarosław Staniek's avatar
Jarosław Staniek committed
547 548
endif(BUILD_kexi AND SHOULD_BUILD_KEXI)

549 550 551 552 553 554
 ###################
####################
## Subdirectories ##
####################
###################

C. Boemann's avatar
C. Boemann committed
555
if(SHOULD_BUILD_WORDS)
556
   macro_optional_add_subdirectory(words)
C. Boemann's avatar
C. Boemann committed
557
endif(SHOULD_BUILD_WORDS)
558

559 560 561
if (SHOULD_BUILD_FLOW)
    macro_optional_add_subdirectory(flow)
endif (SHOULD_BUILD_FLOW)
562 563 564

if (SHOULD_BUILD_KOUNAVAIL)
    macro_optional_add_subdirectory(kounavail)
565
endif (SHOULD_BUILD_KOUNAVAIL)
566

567
if (SHOULD_BUILD_PLAN)
568
    macro_optional_add_subdirectory(kdgantt)
569
endif (SHOULD_BUILD_PLAN)
570

571
if(SHOULD_BUILD_STAGE)
572
  macro_optional_add_subdirectory(stage)
573
endif(SHOULD_BUILD_STAGE)
574 575 576 577 578

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

579 580 581
if(SHOULD_BUILD_PLAN)
    macro_optional_add_subdirectory(plan)
endif(SHOULD_BUILD_PLAN)
582

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

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)

595 596 597 598
if(SHOULD_BUILD_BRAINDUMP)
  macro_optional_add_subdirectory(braindump)
endif(SHOULD_BUILD_BRAINDUMP)

599
if(SHOULD_BUILD_ACTIVE)
600
  macro_optional_add_subdirectory(active)
601 602
endif(SHOULD_BUILD_ACTIVE)

603

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

614
if(SHOULD_BUILD_KOABSTRACTION)
615 616 617 618 619 620 621
    # koabstraction depends on kotext & flake
    set(KOABSTRACTION_INCLUDES ${KDE4_INCLUDES}
                        ${KOTEXT_INCLUDES}
                        ${FLAKE_INCLUDES}
                        ${KOPAGEAPP_INCLUDES}
                        ${KOMAIN_INCLUDES}
                        ${CMAKE_SOURCE_DIR}/tools/koabstraction)
622
else(SHOULD_BUILD_KOABSTRACTION)
623
    set(SHOULD_BUILD_MOBILE FALSE)
624
endif(SHOULD_BUILD_KOABSTRACTION)
625

626
if(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS)
627
    # build cstester
628
else(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS)
629
    set(SHOULD_BUILD_CSTESTER FALSE)
630
endif(SHOULD_BUILD_SHEETS AND SHOULD_BUILD_WORDS)
631

632 633
macro_optional_add_subdirectory(doc)

634 635 636 637
# 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
638
add_subdirectory(pics)
639
add_subdirectory(plugins)
Laurent Montel's avatar
Laurent Montel committed
640 641
add_subdirectory(servicetypes)
add_subdirectory(templates)
642 643
add_subdirectory(tools)
add_subdirectory(filters)
Laurent Montel's avatar
Laurent Montel committed
644

645
macro_display_feature_log()
646

647 648 649 650 651 652
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
653
message(STATUS "---------------- The following applications will be built ----------------" )
654

C. Boemann's avatar
C. Boemann committed
655
macro_display_application_enabled(words ${SHOULD_BUILD_WORDS})
656
macro_display_application_enabled(sheets ${SHOULD_BUILD_SHEETS})
657
macro_display_application_enabled(stage ${SHOULD_BUILD_STAGE})
658
macro_display_application_enabled(flow ${SHOULD_BUILD_FLOW})
659
macro_display_application_enabled(kexi ${SHOULD_BUILD_KEXI})
660
macro_display_application_enabled(plan ${SHOULD_BUILD_PLAN})
661 662
macro_display_application_enabled(krita ${SHOULD_BUILD_KRITA})
macro_display_application_enabled(karbon ${SHOULD_BUILD_KARBON})
663
macro_display_application_enabled(braindump ${SHOULD_BUILD_BRAINDUMP})
664
macro_display_application_enabled(mobile ${SHOULD_BUILD_MOBILE})
665
macro_display_application_enabled(calligra ${SHOULD_BUILD_CALLIGRA})
666
macro_display_application_enabled(cstester ${SHOULD_BUILD_CSTESTER})
667
macro_display_application_enabled(active ${SHOULD_BUILD_ACTIVE})
668 669 670

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

671
add_custom_target(apidox doc/api/gendocs.pl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
672 673 674

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)