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 44.1 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 "13.0.0")
set(GENERIC_CALLIGRA_LIB_SOVERSION "13")
28

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

31

32 33 34 35 36
 ########################
#########################
## Product definitions ##
#########################
########################
37 38 39

# There are currently 4 product sets predefined:
# "ACTIVE", "CREATIVE", "DESKTOP", "ALL" (default).
40
# One can define her/his own set, see cmake/productsets/README
41

42 43
# Finding out the products to build is done in 5 steps:
# 1. have the user define the products wanted, by choosing a productset
44 45
# 2. estimate all additional required products
# 3. estimate which of the products can be build by external deps
46 47
# 4. find which products have been temporarily disabled due to problems
# 5. estimate which of the products can be build by internal deps
48 49 50

include(CalligraProductSetMacros)

51 52
if(NOT DEFINED RELEASE_BUILD)
    # estimate mode by CMAKE_BUILD_TYPE content if not set on cmdline
53
    string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER)
54
    set(RELEASE_BUILD_TYPES "release" "relwithdebinfo" "minsizerel")
55
    list(FIND RELEASE_BUILD_TYPES "${CMAKE_BUILD_TYPE_TOLOWER}" INDEX)
56 57 58 59 60 61 62 63 64
    if (INDEX EQUAL -1)
        set(RELEASE_BUILD FALSE)
    else(INDEX EQUAL -1)
        set(RELEASE_BUILD TRUE)
    endif(INDEX EQUAL -1)
endif(NOT DEFINED RELEASE_BUILD)
message(STATUS "Release build: ${RELEASE_BUILD}")

if (RELEASE_BUILD)
65
    set(CALLIGRA_SHOULD_BUILD_STAGING FALSE)
66 67 68 69 70
else (RELEASE_BUILD)
    set(CALLIGRA_SHOULD_BUILD_STAGING TRUE)
endif (RELEASE_BUILD)


Boudewijn Rempt's avatar
Boudewijn Rempt committed
71
option(GHNS "support Get Hot New Stuff" OFF)
72 73 74 75
option(NEPOMUK "support NEPOMUK Tagging" ON)
# TODO: orthogonal setting, results in minimal features, yet needs to be defined
# option(TINY "compile a tiny Calligra" OFF)
option(QT3SUPPORT "Build the parts of Calligra that still depend on Qt3" ON)
76
option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binary. Should be used by packagers only." ON)
77 78 79 80 81 82 83 84 85 86 87 88

# TODO: remove option and migration code below before 3.0 release
option(CREATIVEONLY "compile only Karbon and Krita" OFF)

# temporary migration support
set(PRODUCTSET_DEFAULT "ALL")
if (CREATIVEONLY)
    set(WARN_ABOUT_CREATIVEONLY TRUE)
    set(PRODUCTSET_DEFAULT "CREATIVE")
endif (CREATIVEONLY)

if(NOT PRODUCTSET)
89
    set(PRODUCTSET ${PRODUCTSET_DEFAULT} CACHE STRING "Set of products to build" FORCE)
90 91 92 93 94 95 96
endif(NOT PRODUCTSET)

# TODO: also add headers/sdk for all the libs ("_DEVEL"?)
# TODO: note external deps for products, so they are only checked if needed
# There can be required or optional external deps, required will also result
# in automatic disabling of product building
# TODO: some products have multiple optional requirements, but need at least one.
97
# See CONVERTER, EXTRA_*
98 99

# 3rd-party libs
100 101
calligra_define_product(LIB_KDGANTT "libkdgantt")
calligra_define_product(LIB_KDCHART "libkdchart")
102
calligra_define_product(LIB_WRITERPERFECT "libwriterperfect")
103 104
# building tools
calligra_define_product(RNG2CPP "rng2cpp")
105
# Calligra-independent utility libs
106
calligra_define_product(LIB_KOVECTORIMAGE "libkovectorimage")
107 108 109
calligra_define_product(LIB_KOPROPERTY "libkoproperty")
calligra_define_product(LIB_KOREPORT "libkoreport" NEEDS LIB_KOPROPERTY)
calligra_define_product(LIB_CALLIGRADB "libcalligradb")
110
# calligra libs
111
calligra_define_product(CALLIGRA_LIBS "Calligra core libs"  NEEDS RNG2CPP)
112
calligra_define_product(LIB_KOPAGEAPP "Lib for paged documents"  NEEDS CALLIGRA_LIBS)
113
calligra_define_product(LIB_KOODF2 "libkoodf2"  NEEDS CALLIGRA_LIBS)
114
calligra_define_product(LIB_KOODFREADER "libkoodfreader"  NEEDS LIB_KOODF2 CALLIGRA_LIBS)
115
calligra_define_product(LIB_MSO "libmso"  NEEDS CALLIGRA_LIBS)
116
calligra_define_product(LIB_KOMSOOXML "libkomsooxml"  NEEDS LIB_KOODF2 CALLIGRA_LIBS)
117 118
calligra_define_product(SCRIPTING "Scripting feature") # TODO
calligra_define_product(RDF "RDF feature")
119 120
# plugins
calligra_define_product(PLUGIN_TEXTSHAPE ""  NEEDS CALLIGRA_LIBS)
121
# apps
122
calligra_define_product(WORDS_PART "Words engine" NEEDS CALLIGRA_LIBS PLUGIN_TEXTSHAPE)
123
calligra_define_product(WORDS_APP "Words executable (for Desktop)"  NEEDS WORDS_PART)
124
calligra_define_product(STAGE_PART "Stage engine"  NEEDS CALLIGRA_LIBS LIB_KOPAGEAPP)
125
calligra_define_product(STAGE_APP "Stage executable (for Desktop)"  NEEDS STAGE_PART)
126
calligra_define_product(SHEETS_PART "Sheets engine"  NEEDS CALLIGRA_LIBS)
127
calligra_define_product(SHEETS_APP "Sheets executable (for Desktop)"  NEEDS SHEETS_PART)
128 129
calligra_define_product(AUTHOR_APP "Full Author (for Desktop)"  NEEDS WORDS_PART)
calligra_define_product(KARBON_APP "Full Karbon (for Desktop)"  NEEDS CALLIGRA_LIBS)
130
calligra_define_product(KRITA_APP "Full Krita (for Desktop)"  NEEDS CALLIGRA_LIBS)
131 132 133 134
calligra_define_product(KEXI_APP "Full Kexi (for Desktop)"  NEEDS CALLIGRA_LIBS LIB_KOREPORT LIB_CALLIGRADB)
calligra_define_product(FLOW_APP "Full Flow (for Desktop)"  NEEDS CALLIGRA_LIBS LIB_KOPAGEAPP)
calligra_define_product(PLAN_APP "Full Plan (for Desktop)"  NEEDS CALLIGRA_LIBS LIB_KOREPORT LIB_KDCHART LIB_KDGANTT)
calligra_define_product(BRAINDUMP_APP "Full Braindump (for Desktop)"  NEEDS CALLIGRA_LIBS)
135
calligra_define_product(DOC "Calligra Documentations")
136
# extras
137 138 139
calligra_define_product(CONVERTER "Format converter for commandline"  NEEDS CALLIGRA_LIBS)
calligra_define_product(EXTRA_PROPERTIES "Plugin for the KDE file properties dialog"  NEEDS CALLIGRA_LIBS)
calligra_define_product(EXTRA_THUMBNAIL "Plugins for KDE filesystem thumbnailing"  NEEDS CALLIGRA_LIBS)
140 141
calligra_define_product(EXTRA_QUICKPRINT "Plugin for the filemanager adding a \"Print\" action")
calligra_define_product(EXTRA_FILEMANAGER_TEMPLATES "File templates for filemanager")
142
calligra_define_product(OKULARODPGENERATOR "Plugin for Okular adding support for ODP and MS PPT/PPTX" NEEDS STAGE_PART)
143
# more plugins
144 145 146 147 148 149
calligra_define_product(PLUGIN_COLORENGINES ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_MUSICSHAPE ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_SPACENAVIGATOR ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_ARTISTICTEXTSHAPE ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_DOCKERS ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_TEXTEDITING ""  NEEDS CALLIGRA_LIBS)
150
calligra_define_product(PLUGIN_KEXI_SPREADSHEETMIGRATION ""  NEEDS KEXI_APP SHEETS_PART)
151 152 153 154 155 156 157 158
calligra_define_product(PLUGIN_DEFAULTTOOLS ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_PATHSHAPES ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_VARIABLES ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_CHARTSHAPE "" NEEDS CALLIGRA_LIBS LIB_KDCHART)
calligra_define_product(PLUGIN_PICTURESHAPE ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_PLUGINSHAPE ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_FORMULASHAPE ""  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_VIDEOSHAPE "Plugin for handling videos in Calligra"  NEEDS CALLIGRA_LIBS)
159
calligra_define_product(PLUGIN_VECTORSHAPE "" NEEDS CALLIGRA_LIBS LIB_KOVECTORIMAGE)
160
calligra_define_product(PLUGIN_REPORTING ""  NEEDS LIB_KOREPORT LIB_KDCHART)
161
calligra_define_product(PLUGIN_SEMANTICITEMS "Semantic items plugins"  NEEDS RDF CALLIGRA_LIBS)
162
# staging plugins
163 164
calligra_define_product(PLUGIN_GOOGLEDOCS "" STAGING  NEEDS CALLIGRA_LIBS)
calligra_define_product(PLUGIN_THREEDSHAPE ""  STAGING  NEEDS CALLIGRA_LIBS)
165
calligra_define_product(PLUGIN_SHEETS_PIVOTTABLES ""  STAGING  NEEDS SHEETS_PART)
166
# Sheets filters
167 168 169
calligra_define_product(FILTER_XLSX_TO_ODS "XLSX to ODS filter" NEEDS LIB_KOMSOOXML SHEETS_PART)
calligra_define_product(FILTER_XLS_TO_SHEETS "Sheets XLS import filter" NEEDS LIB_MSO LIB_KOMSOOXML SHEETS_PART)
calligra_define_product(FILTER_SHEETS_TO_XLS "Sheets XLS export filter" NEEDS LIB_MSO LIB_KOMSOOXML SHEETS_PART)
170 171 172 173 174 175 176 177 178 179 180 181
calligra_define_product(FILTER_CSV_TO_SHEETS "Sheets CSV import filter" NEEDS SHEETS_PART)
calligra_define_product(FILTER_SHEETS_TO_CSV "Sheets CSV export filter" NEEDS SHEETS_PART)
calligra_define_product(FILTER_APPLIXSPREAD_TO_KSPREAD "Applix Spreadsheet to KSpread filter" NEEDS SHEETS_PART)
calligra_define_product(FILTER_DBASE_TO_KSPREAD "dBASE to KSpread filter"  NEEDS CALLIGRA_LIBS)
calligra_define_product(FILTER_GNUMERIC_TO_SHEETS "Sheets GNUMERIC import filter" NEEDS SHEETS_PART)
calligra_define_product(FILTER_SHEETS_TO_GNUMERIC "Sheets GNUMERIC import filter" NEEDS SHEETS_PART)
calligra_define_product(FILTER_OPENCALC_TO_SHEETS "Sheets OpenOffice.org Calc import filter" NEEDS SHEETS_PART)
calligra_define_product(FILTER_SHEETS_TO_OPENCALC "Sheets OpenOffice.org Calc export filter" NEEDS SHEETS_PART)
calligra_define_product(FILTER_QUATTROPRO_TO_SHEETS "Sheets Quattro Pro import filter" NEEDS SHEETS_PART)
calligra_define_product(FILTER_HTML_TO_ODS "HTML to ODS filter"  NEEDS CALLIGRA_LIBS)
calligra_define_product(FILTER_SHEETS_TO_HTML "Sheets HTML export filter"  NEEDS SHEETS_PART)
calligra_define_product(FILTER_KSPREAD_TO_LATEX "KSpread to LaTeX filter"  NEEDS CALLIGRA_LIBS)
182 183 184 185
calligra_define_product(FILTER_SHEETS_IMPORT "All Sheets import filter"  WANTS FILTER_XLSX_TO_ODS FILTER_XLS_TO_SHEETS FILTER_CSV_TO_SHEETS FILTER_APPLIXSPREAD_TO_KSPREAD FILTER_DBASE_TO_KSPREAD FILTER_GNUMERIC_TO_SHEETS FILTER_OPENCALC_TO_SHEETS FILTER_QUATTROPRO_TO_SHEETS FILTER_HTML_TO_ODS)
calligra_define_product(FILTER_SHEETS_EXPORT "All Sheets export filter"  WANTS FILTER_SHEETS_TO_XLS FILTER_SHEETS_TO_CSV FILTER_SHEETS_TO_GNUMERIC FILTER_SHEETS_TO_OPENCALC FILTER_SHEETS_TO_HTML FILTER_KSPREAD_TO_LATEX)
calligra_define_product(FILTER_SHEETS "All Sheets filter"  WANTS FILTER_SHEETS_IMPORT FILTER_SHEETS_EXPORT)
# Flow filters
186
calligra_define_product(FILTER_VISIO_TO_ODG "Visio to ODG filter"  NEEDS LIB_WRITERPERFECT CALLIGRA_LIBS)
187 188 189 190
calligra_define_product(FILTER_FLOW_IMPORT "All Flow import filter"  WANTS FILTER_VISIO_TO_ODG)
calligra_define_product(FILTER_FLOW_EXPORT "All Flow export filter"  WANTS )
calligra_define_product(FILTER_FLOW "All Flow filter"  WANTS FILTER_FLOW_IMPORT FILTER_FLOW_EXPORT)
# Stage filters
191 192
calligra_define_product(FILTER_KPR_TO_OPD "KPresenter to ODP filter"  NEEDS CALLIGRA_LIBS)
calligra_define_product(FILTER_PPT_TO_ODP "PPT to OPD filter" NEEDS LIB_MSO CALLIGRA_LIBS)
193
calligra_define_product(FILTER_PPTX_TO_ODP "PPTX to ODP filter" NEEDS LIB_KOMSOOXML LIB_KOODF2 CALLIGRA_LIBS)
194 195 196 197
calligra_define_product(FILTER_STAGE_IMPORT "All Stage import filter"  WANTS FILTER_KPR_TO_OPD FILTER_PPT_TO_ODP FILTER_PPTX_TO_ODP)
calligra_define_product(FILTER_STAGE_EXPORT "All Stage export filter"  WANTS )
calligra_define_product(FILTER_STAGE "All Stage filter"  WANTS FILTER_STAGE_IMPORT FILTER_STAGE_EXPORT)
# Words filters
198 199
calligra_define_product(FILTER_DOC_TO_ODT "DOC to ODT filter" NEEDS LIB_MSO LIB_KOMSOOXML CALLIGRA_LIBS)
calligra_define_product(FILTER_DOCX_TO_ODT "DOCX to ODT filter" NEEDS LIB_KOMSOOXML LIB_KOODF2 CALLIGRA_LIBS)
200 201 202
calligra_define_product(FILTER_WORDPERFECT_TO_ODT "Word Perfect to ODT filter"  NEEDS LIB_WRITERPERFECT CALLIGRA_LIBS)
calligra_define_product(FILTER_WORKS_TO_ODT "MS Works to ODT filter"  NEEDS LIB_WRITERPERFECT CALLIGRA_LIBS)
calligra_define_product(FILTER_APPLIXWORD_TO_ODT "Applixword to ODT filter"  NEEDS CALLIGRA_LIBS)
203
calligra_define_product(FILTER_ASCII_TO_WORDS "Words ASCII import filter"  NEEDS WORDS_PART LIB_KOODF2)
204
calligra_define_product(FILTER_ODT_TO_ASCII "ODT to ASCII filter"  NEEDS LIB_KOODFREADER CALLIGRA_LIBS)
205 206
calligra_define_product(FILTER_RTF_TO_ODT "RTF to ODT filter"  NEEDS CALLIGRA_LIBS)
calligra_define_product(FILTER_ODT_TO_MOBI "Mobi export filter"  NEEDS CALLIGRA_LIBS)
207 208
calligra_define_product(FILTER_ODT_TO_EPUB2 "ODT Epub2 export filter"  NEEDS LIB_KOVECTORIMAGE CALLIGRA_LIBS)
calligra_define_product(FILTER_ODT_TO_HTML "ODT HTML export filter"  NEEDS LIB_KOVECTORIMAGE CALLIGRA_LIBS)
209 210 211 212 213 214 215
calligra_define_product(FILTER_WORDS_IMPORT "All Words import filter"  WANTS FILTER_DOC_TO_ODT FILTER_DOCX_TO_ODT FILTER_WORDPERFECT_TO_ODT FILTER_WORKS_TO_ODT FILTER_ASCII_TO_WORDS FILTER_RTF_TO_ODT)
calligra_define_product(FILTER_WORDS_EXPORT "All Words export filter"  WANTS FILTER_ODT_TO_ASCII FILTER_ODT_TO_MOBI FILTER_ODT_TO_EPUB2 FILTER_ODT_TO_HTML)
calligra_define_product(FILTER_WORDS "All Words filter"  WANTS FILTER_WORDS_IMPORT FILTER_WORDS_EXPORT)
# Plan filters
calligra_define_product(FILTER_MPXJ_IMPORT "MS Project import filter"  NEEDS PLAN_APP)
calligra_define_product(FILTER_PLAN "All Plan filter" WANTS FILTER_MPXJ_IMPORT)
# Karbon filters
216 217 218 219
calligra_define_product(FILTER_EPS_TO_SVG_AI "EPS to SVG/AI filter"  NEEDS CALLIGRA_LIBS)
calligra_define_product(FILTER_XFIG_TO_ODG "XFig to ODG filter"  NEEDS CALLIGRA_LIBS)
calligra_define_product(FILTER_PDF_TO_SVG "PDF to SVG filter"  NEEDS CALLIGRA_LIBS)
calligra_define_product(FILTER_WPG_TO_SVG "WPG to SVG filter"  NEEDS CALLIGRA_LIBS)
220 221 222 223
calligra_define_product(FILTER_KARBON_TO_IMAGE "Karbon image export filter"  NEEDS KARBON_APP)
calligra_define_product(FILTER_KARBON_TO_SVG "Karbon SVG export filter"  NEEDS KARBON_APP)
calligra_define_product(FILTER_SVG_TO_KARBON "Karbon SVG import filter"  NEEDS KARBON_APP)
calligra_define_product(FILTER_KARBON_TO_WMF "Karbon WMF export filter"  NEEDS KARBON_APP)
224
calligra_define_product(FILTER_WMF_TO_SVG "WMF to SVG filter"  NEEDS LIB_KOVECTORIMAGE CALLIGRA_LIBS)
225
calligra_define_product(FILTER_KARBON1X_TO_KARBON "Karbon 1.x import filter"  NEEDS KARBON_APP)
226
calligra_define_product(FILTER_KARBON_IMPORT "All Karbon import filter"  WANTS FILTER_EPS_TO_SVG_AI FILTER_XFIG_TO_ODG FILTER_PDF_TO_SVG FILTER_WPG_TO_SVG FILTER_SVG_TO_KARBON FILTER_WMF_TO_SVG FILTER_KARBON1X_TO_KARBON)
227 228 229
calligra_define_product(FILTER_KARBON_EXPORT "All Karbon export filter"  WANTS FILTER_KARBON_TO_IMAGE FILTER_KARBON_TO_SVG FILTER_KARBON_TO_WMF)
calligra_define_product(FILTER_KARBON "All Karbon filter"  WANTS FILTER_KARBON_IMPORT FILTER_KARBON_EXPORT)
# meta apps
230
calligra_define_product(WORDS "Full Words (for Desktop)"  NEEDS WORDS_APP  WANTS FILTER_WORDS PLUGIN_SEMANTICITEMS)
231
calligra_define_product(STAGE "Full Stage (for Desktop)"  NEEDS STAGE_APP  WANTS FILTER_STAGE)
232 233
calligra_define_product(SHEETS "Full Sheets (for Desktop)"  NEEDS SHEETS_APP  WANTS FILTER_SHEETS PLUGIN_SHEETS_PIVOTTABLES)
calligra_define_product(AUTHOR "Full Author (for Desktop)"  NEEDS AUTHOR_APP  WANTS FILTER_WORDS PLUGIN_SEMANTICITEMS)
234
calligra_define_product(KARBON "Full Karbon (for Desktop)"  NEEDS KARBON_APP  WANTS FILTER_KARBON)
235
calligra_define_product(KRITA "Full Krita (for Desktop)"  NEEDS KRITA_APP)
236
calligra_define_product(KEXI "Full Kexi (for Desktop)"  NEEDS KEXI_APP  WANTS PLUGIN_KEXI_SPREADSHEETMIGRATION PLUGIN_REPORTING)
237 238 239 240 241
calligra_define_product(FLOW "Full Flow (for Desktop)"  NEEDS FLOW_APP  WANTS FILTER_FLOW)
calligra_define_product(PLAN "Full Plan (for Desktop)"  NEEDS PLAN_APP  WANTS FILTER_PLAN)
calligra_define_product(BRAINDUMP "Full Braindump (for Desktop)"  NEEDS BRAINDUMP_APP)
calligra_define_product(ACTIVE "Calligra Active"  NEEDS SHEETS_PART STAGE_PART WORDS_PART)
calligra_define_product(CALLIGRA ""  NEEDS CALLIGRA_LIBS)
242
# developer utils
243
calligra_define_product(DEVTOOLS "Tools for developers")
244
calligra_define_product(CSTESTER "" NEEDS SHEETS_PART STAGE_PART WORDS_PART)
245

246 247 248 249 250 251
# For new products see cmake/productsets/README, "How to add another product?"

#############################################
####      Choose products to build       ####
#############################################

252
calligra_set_productset(${PRODUCTSET})
253

254 255 256 257 258
 ########################
#########################
## Look for KDE and Qt ##
#########################
########################
259 260
set(KDE_MIN_VERSION "4.3.0")
find_package(KDE4 4.3.0 REQUIRED)
Cyrille Berger's avatar
Cyrille Berger committed
261

262
if (QT3SUPPORT)
263
    find_package(Qt4 4.6.0 REQUIRED QtCore QtGui QtXml QtScript QtSvg QtTest QtWebKit QtDBus QtOpenGL Qt3Support)
264
else (QT3SUPPORT)
265
    find_package(Qt4 4.6.0 REQUIRED QtCore QtGui QtXml QtScript QtSvg QtTest QtWebKit QtDBus QtOpenGL)
266
endif (QT3SUPPORT)
267

268 269
include (KDE4Defaults)
include (MacroLibrary)
270 271 272
include (MacroAdditionalCleanFiles)
include (MacroAddFileDependencies)

273 274
if ((${QTVERSION} VERSION_EQUAL 4.8.0) OR (${QTVERSION} VERSION_EQUAL 4.8.1))
    if (NOT IHAVEPATCHEDQT)
275 276
        set(SHOULD_BUILD_WORDS_PART FALSE)
        set(SHOULD_BUILD_STAGE_PART FALSE)
277 278
        set(SHOULD_BUILD_PLUGIN_TEXTSHAPE FALSE)
        set(SHOULD_BUILD_PLUGIN_TEXTEDITING FALSE)
279 280 281 282
        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))

Boudewijn Rempt's avatar
Boudewijn Rempt committed
283 284 285 286
if (GHNS)
    if(NOT ${KDE_VERSION} VERSION_GREATER 4.4.0)
        set(GHNS FALSE)
    endif(NOT ${KDE_VERSION} VERSION_GREATER 4.4.0)
287

Boudewijn Rempt's avatar
Boudewijn Rempt committed
288 289
    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.")
290

Boudewijn Rempt's avatar
Boudewijn Rempt committed
291 292 293 294 295 296
    if (NOT LIBATTICA_FOUND)
        set(GHNS FALSE)
    else (NOT LIBATTICA_FOUND)
        MESSAGE(STATUS "WARNING: You are compiling with Get Hot New Stuff enabled. Do not do that when building distribution packages. GHNS is unusable these days until someone starts maintaining it again.")
    endif (NOT LIBATTICA_FOUND)
endif (GHNS)
297

298 299 300
if(NOT ${KDE_VERSION} VERSION_GREATER 4.6.4)
  set(NEPOMUK FALSE)
endif(NOT ${KDE_VERSION} VERSION_GREATER 4.6.4)
301

302 303
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")

304 305 306 307 308
if(KDE4_BUILD_TESTS)
    # only with this definition will the FOO_TEST_EXPORT macro do something
    add_definitions(-DCOMPILING_TESTS)
endif(KDE4_BUILD_TESTS)

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

add_definitions(
    -DQT_USE_FAST_CONCATENATION
    -DQT_USE_FAST_OPERATOR_PLUS
)

322 323 324 325 326 327 328 329
# would need more code changes before 4.8.0, e.g. with qPrintable()
if(NOT ${QTVERSION} VERSION_LESS 4.8.0)
    # enable QStringBuilder enhancement
    add_definitions(
        -DQT_USE_FAST_CONCATENATION
        -DQT_USE_FAST_OPERATOR_PLUS
    )
endif(NOT ${QTVERSION} VERSION_LESS 4.8.0)
330 331


332 333 334 335 336
 ###########################
############################
## Required dependencies  ##
############################
###########################
337

Laurent Montel's avatar
Laurent Montel committed
338 339
find_package(Perl REQUIRED)
find_package(ZLIB REQUIRED)
340
find_package(PNG REQUIRED)
Boudewijn Rempt's avatar
Boudewijn Rempt committed
341 342 343 344
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)
345 346
find_package(Boost REQUIRED) # for pigment and stage
if (NOT Boost_FOUND)
347
    MESSAGE(FATAL_ERROR "Did not find Boost. Boost is required for the core libraries, stage, sheets and krita.")
348
endif (NOT Boost_FOUND)
349

350 351 352
if (APPLE)
   find_package(Carbon REQUIRED)
endif (APPLE)
353

354 355 356 357 358 359
 ###########################
############################
## Optional dependencies  ##
############################
###########################

360 361 362 363
##
## Test for sqlite
##
set(SQLITE_MIN_VERSION 3.6.16)
364
set(SQLITE_RECOMMENDED_VERSION 3.7.15)
365
set(SQLITE_LOAD_EXTENSION_REQUIRED ON)
366 367
macro_optional_find_package(CalligraSqlite 3.6.16)
macro_bool_to_01(SQLITE_FOUND HAVE_SQLITE)
368
macro_log_feature(SQLITE_FOUND "SQLite" "Embedded SQL database engine with enabled extensions loading"
369 370
                  "http://www.sqlite.org" FALSE "${SQLITE_MIN_VERSION}"
                  "Required by Calligra's default database handler for Kexi and bibliography in Words.")
371

372 373 374
##
## Test for ICU
##
375 376
macro_optional_find_package(ICU)
macro_bool_to_01(ICU_FOUND HAVE_ICU)
377
macro_log_feature(ICU_FOUND "ICU" "International Components for Unicode (ICU) Library"
378 379
                  "http://icu-project.org" FALSE ""
                  "Required by Calligra's default database handler for Kexi and Words.")
380

381
##
382
## Check for OpenEXR 
383
##
384

385 386
macro_optional_find_package(OpenEXR)
macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR)
387

388 389 390
##
## Look for OpenGL
##
391
set(HAVE_OPENGL 0)
392 393 394 395 396 397 398 399 400 401 402 403 404
macro_optional_find_package(OpenGL)

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)
405 406

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

408 409 410
##
## Test for kdepimlibs
##
411
macro_optional_find_package(KdepimLibs 4.6.0)
412
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)")
413

414 415 416 417
##
## Test for eigen2
##
macro_optional_find_package(Eigen2)
418
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")
419

420 421 422
##
## Test for QCA2
##
423
macro_optional_find_package(QCA2)
424
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)")
425

426 427 428
##
## Test for exiv2
##
429 430 431
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")
432

433 434 435 436 437 438 439
##
## 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(SOPRANO_INCLUDE_DIR "")
440
endif(NOT Soprano_FOUND)
441 442


443 444 445 446
##
## Test for marble
##
macro_optional_find_package(Marble)
447
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")
448 449 450 451 452
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
453
endif(NOT MARBLE_FOUND)
454
if( MARBLE_FOUND )
455 456 457 458 459
    add_definitions( -DCAN_USE_MARBLE )
    ##
    ## Marble changed addMarbleWidget to setMarbleWidget in MarbleControlBox.h
    ## with commit ea177ca. This is for compatibility with older versions.
    ##
460
    find_file(MARBLECONTROLBOX_H MarbleControlBox.h ${MARBLE_INCLUDE_DIR} PATH_SUFFIXES marble)
461
    if( MARBLECONTROLBOX_H )
462 463
    file(READ ${MARBLECONTROLBOX_H} MARBLECONTROLBOX_H_CONTENT)
    string(REGEX MATCH "setMarbleWidget" SETMARBLEWIDGET ${MARBLECONTROLBOX_H_CONTENT})
464 465 466
        if( SETMARBLEWIDGET )
            add_definitions(-DHAVE_SETMARBLEWIDGET)
        endif( SETMARBLEWIDGET)
467 468
    else( MARBLECONTROLBOX_H )
        message( WARNING "MarbleControlBox.h not found, could not properly set the SETMARBLEWIDGET define." )
469
    endif( MARBLECONTROLBOX_H )
470 471
endif( MARBLE_FOUND )

472 473
##
## Test for lcms
474
##
475
macro_optional_find_package(LCMS2)
476
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")
477
if(LCMS2_FOUND)
478
    if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
479
        set(HAVE_LCMS24 TRUE)
480
    endif(NOT ${LCMS2_VERSION} VERSION_LESS 2040 )
481
    set(HAVE_REQUIRED_LCMS_VERSION TRUE)
482
    set(HAVE_LCMS2 TRUE)
483 484
endif(LCMS2_FOUND)

485 486 487 488 489 490
##
## Test for Vc
##

set(OLD_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} )
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
491
macro_optional_find_package(Vc 0.6.70)
492 493
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)
494 495
macro_bool_to_01(PACKAGERS_BUILD DO_PACKAGERS_BUILD)

496 497 498 499 500 501
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}")
502 503
    include (VcMacros)

504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546
    #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")

        if(Vc_COMPILER_IS_GCC)
            AddCompilerFlag("-std=c++11" _ok)
            if(NOT _ok)
                AddCompilerFlag("-std=c++0x" _ok)
            endif()
        endif(Vc_COMPILER_IS_GCC)

        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX AVX2)
        else(PACKAGERS_BUILD)
            set(${_objs} ${_src})
        endif(PACKAGERS_BUILD)
        endmacro()

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX AVX2)
        else(PACKAGERS_BUILD)
            set(${_objs} ${_src})
        endif(PACKAGERS_BUILD)
        endmacro()
    else()
        macro(ko_compile_for_all_implementations_no_scalar _objs _src)
        if(PACKAGERS_BUILD)
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS -fPIC ONLY SSE2 SSSE3 SSE4_1 AVX)
        else(PACKAGERS_BUILD)
            set(${_objs} ${_src})
        endif(PACKAGERS_BUILD)
        endmacro()

        macro(ko_compile_for_all_implementations _objs _src)
        if(PACKAGERS_BUILD)
            vc_compile_for_all_implementations(${_objs} ${_src} FLAGS -fPIC ONLY Scalar SSE2 SSSE3 SSE4_1 AVX)
        else(PACKAGERS_BUILD)
            set(${_objs} ${_src})
        endif(PACKAGERS_BUILD)
        endmacro()
    endif()
547

548 549 550 551
    if (NOT PACKAGERS_BUILD)
      # Optimize the whole Calligra for current architecture
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_DEFINITIONS}")
    endif (NOT PACKAGERS_BUILD)
552 553 554
endif(HAVE_VC)
set(CMAKE_MODULE_PATH ${OLD_CMAKE_MODULE_PATH} )

555 556 557 558 559 560 561 562 563
##
## Test for Xinput
##
if(NOT WIN32)
  set(REQUIRED_Xinput_FOUND ${X11_Xinput_FOUND})
else(NOT WIN32)
  set(REQUIRED_Xinput_FOUND TRUE)
endif(NOT WIN32)

564 565 566 567 568
##
## Test for Nepomuk
##
if(NEPOMUK)
    macro_optional_find_package(Nepomuk)
569 570 571
    if(NOT NEPOMUK_FOUND)
        set(NEPOMUK FALSE)
    endif(NOT NEPOMUK_FOUND)
572
    add_definitions(-DDISABLE_NEPOMUK_LEGACY)
Srikanth Tiyyagura's avatar
Srikanth Tiyyagura committed
573
    macro_log_feature(NEPOMUK_FOUND "Nepomuk" "Handles metadata of resources" FALSE  "Required to handle metadata of resources")
574 575
endif(NEPOMUK)

576 577 578
##
## Test for KActivities
##
579
macro_optional_find_package(KActivities 6.1.0)
580 581 582 583 584
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
585 586
#Set the build of TextShape changetraker

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

589
if(WIN32)
590 591 592 593 594 595 596 597 598 599 600 601 602 603
    # 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} )


604 605 606 607
else(WIN32)
    set (KDE4_ICON_DIR  ${CMAKE_INSTALL_PREFIX}/share/icons)
endif(WIN32)

Hanzes Matus's avatar
Hanzes Matus committed
608 609 610
##
## Test for Fontconfig
##
611 612 613 614 615
## 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
616 617 618 619

##
## Test for Freetype
##
620 621 622 623 624
## 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
625

626
if(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND)
Hanzes Matus's avatar
Hanzes Matus committed
627 628 629
    set(FONTCONFIG_INCLUDE_DIR "")
    set(FREETYPE_INCLUDE_DIRS "")
else(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND)
630
    add_definitions( -DSHOULD_BUILD_FONT_CONVERSION )
Hanzes Matus's avatar
Hanzes Matus committed
631
endif(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND)
632

Cyrille Berger's avatar
Cyrille Berger committed
633 634 635
##
## Test for Qt Webkit
##
636 637 638 639
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
640

641 642 643 644 645
##
## Test for KDeclarative
##
macro_optional_find_package(KDeclarative)

646 647 648
##
## Test endianess
##
David Faure's avatar
David Faure committed
649
include (TestBigEndian)
650 651
TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN)

652 653 654 655 656 657
##
## 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.")

658 659 660 661 662
##
## Test for Okular
##
macro_optional_find_package(Okular)
macro_log_feature(OKULAR_FOUND "Okular" "Okular ODP Plugin" "http://okular.kde.org/" FALSE "" "Required to build the Okular OpenDocument Presenter plugin")
663

664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706
##
## Test for WordPerfect Document Lib
##
macro_optional_find_package(WPD)
macro_log_feature(WPD_FOUND "WPD" "WordPerfect Document Library" "http://libwpd.sourceforge.net/" FALSE "" "Required by the Words WPD import filter")

##
## Test for WordPerfect Graphics Lib
##
macro_optional_find_package(WPG)
macro_log_feature(LIBWPG_FOUND "WPG" "WordPerfect Graphics Library" "http://libwpg.sourceforge.net/" FALSE "" "Required by the Karbon WPG import filter")

##
## Test for Microsoft Works Document Library
##
macro_optional_find_package(LibWPS)
macro_log_feature(LIBWPS_FOUND "LibWPS" "Microsoft Works Document Library" "http://libwps.sourceforge.net/" FALSE "" "Required by the Words WPS import filter")

##
## Test for libvisio
##
macro_optional_find_package(LibVisio)
macro_log_feature(LIBVISIO_FOUND "LibVisio" "Visio Import Filter Library" "http://www.freedesktop.org/wiki/Software/libvisio" FALSE "" "Required by the Flow visio import filter")

##
## Test for qt-poppler
##
macro_optional_find_package(Poppler)
macro_log_feature( POPPLER_FOUND "poppler-qt4" "The Poppler Qt4 interface library" "http://poppler.freedesktop.org" FALSE "" "Required by the Krita PDF filter, Karbon PDF import filter and CSTester PDF feature")

## The Karbon pdf-importer needs the not-officially-supported XPDF Headers
## Installing these is off by default in poppler sources, so lets make
## sure they're really there before trying to build the pdf import
if(POPPLER_FOUND)
    find_path(POPPLER_XPDF_HEADERS poppler-config.h
    HINTS ${POPPLER_INCLUDE_DIR} )
    if(POPPLER_XPDF_HEADERS)
        set(POPPLER_XPDF_HEADERS_FOUND TRUE)
    endif(POPPLER_XPDF_HEADERS)
    macro_log_feature( POPPLER_XPDF_HEADERS_FOUND "poppler-qt4-xpdf-headers" "XPDF headers in the Poppler Qt4 interface library" "http://poppler.freedesktop.org" FALSE "" "Required by the Karbon PDF import filter")
endif(POPPLER_FOUND)


707 708 709 710
##
## Generate a file for prefix information
##

711 712 713 714 715
 ###############################
################################
## Add Calligra helper macros ##
################################
###############################
Cyrille Berger's avatar
Cyrille Berger committed
716

Boudewijn Rempt's avatar
Boudewijn Rempt committed
717
include(MacroCalligraAddBenchmark)
718
include(MacroCalligraBuildTest)
Cyrille Berger's avatar
Cyrille Berger committed
719

720 721 722 723 724 725
 ####################
#####################
## Define includes ##
#####################
####################

726 727 728
# WARNING: make sure that QT_INCLUDES is the first directory to be added to include_directory before
#          any other include directory

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

732 733 734
# koplugin is at the bottom of the stack
set(KOPLUGIN_INCLUDES ${CMAKE_SOURCE_DIR}/libs/koplugin)

735 736
set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2)

737
# koodf is at the bottom of the stack
738 739
set(KOODF_INCLUDES ${CMAKE_SOURCE_DIR}/libs/odf
                   ${CMAKE_BINARY_DIR}/libs/odf
740
                   ${KDE4_INCLUDES})
Boudewijn Rempt's avatar
Boudewijn Rempt committed
741

742

743
# pigment depends on koplugin and lcms
744
set(PIGMENT_INCLUDES ${KOPLUGIN_INCLUDES}
745 746
                   ${CMAKE_SOURCE_DIR}/libs/pigment
                   ${CMAKE_SOURCE_DIR}/libs/pigment/compositeops
747
                   ${CMAKE_SOURCE_DIR}/libs/pigment/resources
748
                   ${QT_INCLUDES}
749
                   ${KDE4_INCLUDES})
750

751 752 753 754 755
# flake depends on koodf and pigment
set(FLAKE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/flake
                   ${KOODF_INCLUDES}
                   ${KOPLUGIN_INCLUDES}
                   ${PIGMENT_INCLUDES}
756
                   ${KUNDO2_INCLUDES}
757
                   ${CMAKE_SOURCE_DIR}/libs/widgetutils
758 759
                   ${CMAKE_SOURCE_DIR}/libs/flake/commands
                   ${CMAKE_SOURCE_DIR}/libs/flake/tools
760
                   ${CMAKE_SOURCE_DIR}/libs/flake/svg
761
                   ${CMAKE_BINARY_DIR}/libs/flake)
762

763 764 765 766 767 768 769
# 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)
                   
770 771 772 773 774 775
# 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
776
                   ${SOPRANO_INCLUDE_DIR}
777
                   ${FLAKE_INCLUDES}
778 779
                   ${KOODF_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/main)
780

781 782 783 784
# TextLayout depends on kotext
set(TEXTLAYOUT_INCLUDES ${KOTEXT_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/textlayout)

C. Boemann's avatar
C. Boemann committed
785 786 787 788 789
# BasicFlakes depends on flake, widgets
set(BASICFLAKES_INCLUDES ${KOWIDGETS_INCLUDES} ${FLAKE_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/basicflakes
                   ${CMAKE_SOURCE_DIR}/libs/basicflakes/tools)

790
# komain depends on kotext & flake
791
set(KOMAIN_INCLUDES ${KDE4_INCLUDES}
792
                    ${TEXTLAYOUT_INCLUDES}
793
                    ${CMAKE_SOURCE_DIR}/libs/widgets
794
                    ${CMAKE_SOURCE_DIR}/libs/widgetutils
795
                    ${CMAKE_SOURCE_DIR}/libs/main
796
                    ${CMAKE_SOURCE_DIR}/libs/main/config)
797

798 799 800
set(KORDF_INCLUDES ${KOMAIN_INCLUDES}
                   ${CMAKE_SOURCE_DIR}/libs/rdf
)
801
set(KORDF_LIBS kordf)
802

803 804 805
if(SHOULD_BUILD_SCRIPTING)
  set(KOKROSS_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kokross ${CMAKE_BINARY_DIR}/libs/kokross)
endif(SHOULD_BUILD_SCRIPTING)
806

David Faure's avatar
David Faure committed
807
# kopageapp
808 809 810 811 812
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 )
813

814 815 816 817
# koproperty
set(KOPROPERTY_INCLUDES ${KOODF_INCLUDES}
                        ${CMAKE_SOURCE_DIR}/libs
                        ${CMAKE_SOURCE_DIR}/libs/widgets)
818
set(KOPROPERTY_LIBS koproperty)
819

820 821 822 823 824 825 826 827 828
# koreport
set(KOREPORT_INCLUDES
    ${CMAKE_SOURCE_DIR}/libs/
    ${CMAKE_SOURCE_DIR}/libs/koreport
    ${CMAKE_SOURCE_DIR}/libs/koreport/common
    ${CMAKE_SOURCE_DIR}/libs/koreport/renderer
    ${CMAKE_SOURCE_DIR}/libs/koreport/wrtembed)
set(KOREPORT_LIBS koreport)

829
# calligradb
830 831 832
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)
833

834 835 836
#############################################
####          3rd party libraries        ####
#############################################
837

838 839 840
set(KDGANTT_INCLUDES
    ${CMAKE_SOURCE_DIR}/3rdparty/kdgantt
)
841

842 843 844
set(KDCHART_INCLUDES
    ${CMAKE_SOURCE_DIR}/3rdparty/kdchart/include
)
845 846
set(KDCHART_LIBS calligrakdchart)

847

848 849 850 851
set(WRITERPERFECT_INCLUDES
    ${CMAKE_SOURCE_DIR}/filters/writerperfect
)

852 853 854 855 856 857 858 859 860
#############################################
####           filter libraries          ####
#############################################

# libodf2
set(KOODF2_INCLUDES
    ${CMAKE_SOURCE_DIR}/filters/libodf2
)

861 862 863 864 865
# libodfreader
set(KOODFREADER_INCLUDES
    ${CMAKE_SOURCE_DIR}/filters/libodfreader
)

866 867 868 869 870
 #########################################
##########################################
## Detect which products can be compile ##
##########################################
#########################################
871

872
#
873 874 875
# WARNING: when adding a dependency for product x if there is already a line
# containing calligra_disable_product(product_x, don't add a new one, just add
# the test to the if construct and the reasoning
876 877
#

878
if(NOT SHARED_MIME_INFO_FOUND)
879
    calligra_disable_product(LIB_KOMSOOXML "SharedMimeInfo not found (needed to install mimetypes)")
880
endif(NOT SHARED_MIME_INFO_FOUND)
881

882 883 884 885
if(NOT Soprano_FOUND)
    calligra_disable_product(RDF "Soprano not found")
endif(NOT Soprano_FOUND)

886
if(NOT EIGEN2_FOUND)
887
    calligra_disable_product(SHEETS_PART "Eigen devel not found")
888
endif(NOT EIGEN2_FOUND)
889

890 891 892
if(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION OR NOT SHARED_MIME_INFO_FOUND OR NOT REQUIRED_Xinput_FOUND)
    calligra_disable_product(KRITA_APP "SharedMimeInfo|libeigen2|libexiv2|lcms|Xinput devel not found ")
endif(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION OR NOT SHARED_MIME_INFO_FOUND OR NOT REQUIRED_Xinput_FOUND)
893

894
if (NOT ${QTVERSION} VERSION_GREATER 4.7.0)
895
    calligra_disable_product(ACTIVE "Qt version <= 4.7.0")
896 897
endif (NOT ${QTVERSION} VERSION_GREATER 4.7.0)

898
if (NOT QT_QTDECLARATIVE_FOUND OR NOT KDECLARATIVE_FOUND)
899
    calligra_disable_product(ACTIVE "QtDeclarative|KDeclarative not found")
900
endif(NOT QT_QTDECLARATIVE_FOUND OR NOT KDECLARATIVE_FOUND)
901

902
# TODO: remove when Predicate lib arrives
903
if (NOT HAVE_ICU OR NOT HAVE_SQLITE)
904
    calligra_disable_product(LIB_CALLIGRADB "ICU|sqlite devel not found")
905
endif (NOT HAVE_ICU OR NOT HAVE_SQLITE)
906

907
if (NOT QT3SUPPORT)
908
    calligra_disable_product(KEXI_APP "Qt3Support not found")
909 910
endif (NOT QT3SUPPORT)

911
if(NOT OKULAR_FOUND)
912
    calligra_disable_product(OKULARODPGENERATOR "Okular devel not found")
913
endif(NOT OKULAR_FOUND)
914

915
if (NOT WPD_FOUND OR NOT LIBWPG_FOUND OR NOT LIBVISIO_FOUND)
916
    calligra_disable_product(FILTER_VISIO_TO_ODG "libwpd|libwpg|libvisio devel not found")
917 918 919
endif (NOT WPD_FOUND OR NOT LIBWPG_FOUND OR NOT LIBVISIO_FOUND)

if(NOT WPD_FOUND OR NOT LIBWPG_FOUND)
920
    calligra_disable_product(FILTER_WORDPERFECT_TO_ODT "libwpd|libwpg devel not found")
921 922 923
endif(NOT WPD_FOUND OR NOT LIBWPG_FOUND)

if(NOT WPD_FOUND OR NOT LIBWPS_FOUND)
924
    calligra_disable_product(FILTER_WORKS_TO_ODT "libwpd|libwps devel not found")
925 926 927
endif(NOT WPD_FOUND OR NOT LIBWPS_FOUND)

if (NOT WPD_FOUND OR NOT LIBWPG_FOUND)
928
    calligra_disable_product(LIB_WRITERPERFECT "libwpd|libwpg devel not found")
929 930 931
endif (NOT WPD_FOUND OR NOT LIBWPG_FOUND)

if (NOT WPD_FOUND OR NOT LIBWPG_FOUND)
932
    calligra_disable_product(FILTER_WPG_TO_SVG "libwpd|libwpg devel not found")
933 934 935
endif (NOT WPD_FOUND OR NOT LIBWPG_FOUND)

if (WIN32 OR NOT POPPLER_XPDF_HEADERS_FOUND)
936
    calligra_disable_product(FILTER_PDF_TO_SVG "poppler xpdf headers not found or on win")
937 938 939
endif (WIN32 OR NOT POPPLER_XPDF_HEADERS_FOUND)

if(WIN32 OR QT_MAC_USE_COCOA)
940
    calligra_disable_product(FILTER_HTML_TO_ODS "not supported on platform")
941 942 943
endif(WIN32 OR QT_MAC_USE_COCOA)

if(WIN32 OR QT_MAC_USE_COCOA)
944
    calligra_disable_product(FILTER_SHEETS_TO_HTML "not supported on platform")
945 946 947
endif(WIN32 OR QT_MAC_USE_COCOA)

if(WIN32 OR QT_MAC_USE_COCOA)
948
    calligra_disable_product(FILTER_KSPREAD_TO_LATEX "not supported on platform")
949 950
endif(WIN32 OR QT_MAC_USE_COCOA)

951 952 953 954
if(NOT SHARED_MIME_INFO_FOUND)
    calligra_disable_product(FILTER_MPXJ_IMPORT "SharedMimeInfo not found (needed to install mimetypes)")
endif(NOT SHARED_MIME_INFO_FOUND)

955
if(WIN32)
956
    calligra_disable_product(BRAINDUMP_APP "unmaintained on Windows")
957 958
endif()

959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974
#############################################
####  Backward compatibility BUILD_x=off ####
#############################################

# workaround: disable directly all products which might be activated by internal
# dependencies, but belong to scope of old flag
calligra_drop_products_on_old_flag(braindump BRAINDUMP_APP)
calligra_drop_products_on_old_flag(flow FLOW_APP)
calligra_drop_products_on_old_flag(karbon KARBON_APP)
calligra_drop_products_on_old_flag(kexi KEXI_APP)
calligra_drop_products_on_old_flag(krita KRITA_APP)
calligra_drop_products_on_old_flag(plan  PLAN_APP)
calligra_drop_products_on_old_flag(sheets SHEETS_PART SHEETS_APP)
calligra_drop_products_on_old_flag(stage  STAGE_PART STAGE_APP)
calligra_drop_products_on_old_flag(words  WORDS_PART WORDS_APP)

975 976 977 978 979
#############################################
####      Temporarily broken products    ####
#############################################

# If a product does not build due to some temporary brokeness disable it here,
980 981 982
# by calling calligra_disable_product with the product id and the reason,
# e.g.:
# calligra_disable_product(KEXI_APP "isn't buildable at the moment")
983 984 985 986 987

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

988
calligra_drop_unbuildable_products()
Jarosław Staniek's avatar
Jarosław Staniek committed
989

990

991 992 993 994 995 996 997 998 999
#############################################
####     Setup product-depending vars    ####
#############################################

if(SHOULD_BUILD_RDF)
   add_definitions( -DSHOULD_BUILD_RDF )
endif(SHOULD_BUILD_RDF)


1000 1001 1002 1003 1004 1005
 ###################
####################
## Subdirectories ##
####################
###################

1006
add_subdirectory(words)
1007

1008
if (SHOULD_BUILD_FLOW_APP)
1009
    add_subdirectory(flow)
1010
endif (SHOULD_BUILD_FLOW_APP)
1011

1012
add_subdirectory(stage)
1013

1014
if(SHOULD_BUILD_KEXI_APP)
1015
    add_subdirectory(kexi)
1016
endif(SHOULD_BUILD_KEXI_APP)
1017

1018
if(SHOULD_BUILD_PLAN_APP)
1019
    add_subdirectory(plan)
1020
endif(SHOULD_BUILD_PLAN_APP)
1021

1022
add_subdirectory(sheets)
1023

1024
if(SHOULD_BUILD_KRITA_APP)
1025
  add_subdirectory(krita)
1026
endif(SHOULD_BUILD_KRITA_APP)
1027

1028
if(SHOULD_BUILD_KARBON_APP)
1029
  add_subdirectory(karbon)
1030
endif(SHOULD_BUILD_KARBON_APP)
1031

1032
if(SHOULD_BUILD_BRAINDUMP_APP)
1033
  add_subdirectory(braindump)
1034
endif(SHOULD_BUILD_BRAINDUMP_APP)
1035

1036
if(SHOULD_BUILD_ACTIVE)
1037
  add_subdirectory(active)
1038 1039
endif(SHOULD_BUILD_ACTIVE)

1040
if(SHOULD_BUILD_DOC)
1041
    add_subdirectory(doc)
1042
endif(SHOULD_BUILD_DOC)
1043

1044 1045
# non-app directories are moved here because they can depend on SHOULD_BUILD_{appname} variables set above
add_subdirectory(libs)
1046
add_subdirectory(3rdparty)
1047 1048
add_subdirectory(interfaces)
add_subdirectory(cmake)
Laurent Montel's avatar
Laurent Montel committed
1049
add_subdirectory(pics)
1050
add_subdirectory(plugins)
Laurent Montel's avatar
Laurent Montel committed
1051
add_subdirectory(servicetypes)
1052 1053
add_subdirectory(devtools)
add_subdirectory(extras)
1054
add_subdirectory(filters)
1055
add_subdirectory(data)
Laurent Montel's avatar
Laurent Montel committed
1056

1057
macro_display_feature_log()
1058

1059
calligra_log_should_build()
1060

1061
add_custom_target(apidox doc/api/gendocs.pl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
1062 1063

configure_file(KoConfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h )
1064
install( FILES  ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h DESTINATION ${INCLUDE_INSTALL_DIR}/calligra COMPONENT Devel)
1065 1066 1067 1068 1069 1070

## temporary warning
if (WARN_ABOUT_CREATIVEONLY)
    message(STATUS "WARNING:\n   You are using a deprecated build flag,\n   switch from \"-DCREATIVEONLY=ON\" to \"-DPRODUCTSET=CREATIVE\"\n   and remove the line \"CREATIVEONLY:BOOL=ON\" from CMakeCache.txt")
    message(STATUS "--------------------------------------------------------------------------" )
endif (WARN_ABOUT_CREATIVEONLY)