[calligra] /: small rework of product sets: products, features and product sets

Friedrich W. H. Kossebau kossebau at kde.org
Mon Jun 16 00:20:33 BST 2014


Git commit 7fe5f269ddfde50770383fee43480fc33c65d3e6 by Friedrich W. H. Kossebau.
Committed on 15/06/2014 at 23:19.
Pushed by kossebau into branch 'master'.

small rework of product sets: products, features and product sets

* split the old idea of a "product" into "product", "feature" and "productset"
* make no real difference between user-defined productsets and predefined ones
* move the definition of the products into a separate file, for better overview and discoverability
* put the documentation directly into that separate file instead of hiding it away in some README in some subdirectory noones knows about
* generate a file product_deps.dot with the graph of the dependencies, showing also the build state (in DOT notation, see attached SVG file generated from that)
* more patterns for the ids of the products
* allow to have multiple productsets/products/features mentioned in the -DPRODUCTSET flag

CCMAIL: calligra-devel at kde.org

REVIEW: 118510
Thanks boud, jstaniek, ingwa for review

M  +75   -238  CMakeLists.txt
A  +692  -0    CalligraProducts.cmake
M  +3    -3    README.PACKAGERS
M  +2    -2    active/CMakeLists.txt
M  +228  -35   cmake/modules/CalligraProductSetMacros.cmake
M  +2    -93   cmake/productsets/README
D  +0    -23   cmake/productsets/active.cmake
D  +0    -59   cmake/productsets/all.cmake
M  +7    -18   cmake/productsets/creative.cmake
M  +23   -51   cmake/productsets/desktop.cmake
D  +0    -4    cmake/productsets/kexi+sheets.cmake
D  +0    -95   cmake/productsets/kexi.cmake
D  +0    -20   cmake/productsets/krita.cmake
M  +18   -36   cmake/productsets/osx.cmake
D  +0    -2    cmake/productsets/sheets.cmake
M  +6    -6    devtools/CMakeLists.txt
M  +14   -14   extras/CMakeLists.txt
M  +12   -12   extras/quickprint/CMakeLists.txt
M  +17   -17   extras/thumbnail/CMakeLists.txt
M  +2    -2    filters/flow/visio/import/CMakeLists.txt
M  +2    -2    filters/flow/wpg/import/CMakeLists.txt
M  +2    -2    filters/karbon/karbon1.x/CMakeLists.txt
M  +2    -2    filters/karbon/wmf/CMakeLists.txt
M  +2    -2    filters/karbon/wpg/CMakeLists.txt
M  +2    -2    filters/karbon/xfig/CMakeLists.txt
M  +2    -2    filters/sheets/excel/import/CMakeLists.txt
M  +2    -2    filters/sheets/xlsx/CMakeLists.txt
M  +2    -2    filters/stage/keynote/import/CMakeLists.txt
M  +2    -2    filters/stage/kpr2odf/CMakeLists.txt
M  +2    -2    filters/stage/powerpoint/CMakeLists.txt
M  +2    -2    filters/stage/pptx/CMakeLists.txt
M  +2    -2    filters/words/docx/import/CMakeLists.txt
M  +2    -2    filters/words/msword-odf/CMakeLists.txt
M  +2    -2    filters/words/rtf/import/CMakeLists.txt
M  +2    -2    filters/words/wordperfect/import/CMakeLists.txt
M  +2    -2    filters/words/works/import/CMakeLists.txt
M  +2    -2    kexi/plugins/CMakeLists.txt
M  +2    -2    krita/plugins/formats/ora/CMakeLists.txt
M  +6    -6    libs/CMakeLists.txt
M  +4    -4    libs/kotext/CMakeLists.txt
M  +2    -2    plan/plugins/CMakeLists.txt
M  +2    -2    plugins/textshape/CMakeLists.txt
M  +4    -4    sheets/CMakeLists.txt
M  +2    -2    sheets/plugins/CMakeLists.txt
M  +4    -4    stage/CMakeLists.txt
M  +4    -4    words/CMakeLists.txt
M  +8    -8    words/part/CMakeLists.txt
M  +2    -2    words/part/tests/CMakeLists.txt
M  +2    -2    words/plugins/CMakeLists.txt

http://commits.kde.org/calligra/7fe5f269ddfde50770383fee43480fc33c65d3e6

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 886e2c3..64f9ee3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -61,25 +61,6 @@ if(GIT_SHA1 AND GIT_BRANCH)
     set(CALLIGRA_GIT_BRANCH_STRING ${GIT_BRANCH})
 endif()
 
- ########################
-#########################
-## Product definitions ##
-#########################
-########################
-
-# There are currently 4 product sets predefined:
-# "ACTIVE", "CREATIVE", "DESKTOP", "ALL" (default).
-# One can define her/his own set, see cmake/productsets/README
-
-# Finding out the products to build is done in 5 steps:
-# 1. have the user define the products wanted, by choosing a productset
-# 2. estimate all additional required products
-# 3. estimate which of the products can be build by external deps
-# 4. find which products have been temporarily disabled due to problems
-# 5. estimate which of the products can be build by internal deps
-
-include(CalligraProductSetMacros)
-
 if(NOT DEFINED RELEASE_BUILD)
     # estimate mode by CMAKE_BUILD_TYPE content if not set on cmdline
     string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER)
@@ -93,12 +74,6 @@ if(NOT DEFINED RELEASE_BUILD)
 endif(NOT DEFINED RELEASE_BUILD)
 message(STATUS "Release build: ${RELEASE_BUILD}")
 
-if (RELEASE_BUILD)
-    set(CALLIGRA_SHOULD_BUILD_STAGING FALSE)
-else (RELEASE_BUILD)
-    set(CALLIGRA_SHOULD_BUILD_STAGING TRUE)
-endif (RELEASE_BUILD)
-
  ############
 #############
 ## Options ##
@@ -118,185 +93,46 @@ option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binar
 # TODO: remove option and migration code below before 3.0 release
 option(CREATIVEONLY "compile only Karbon and Krita" OFF)
 
-# temporary migration support
+ #######################
+########################
+## Productset setting ##
+########################
+#######################
+
+# For predefined productsets see the definitions in CalligraProducts.cmake and
+# in the files in the folder cmake/productsets.
+
+# Finding out the products & features to build is done in 5 steps:
+# 1. have the user define the products/features wanted, by giving a productset
+# 2. estimate all additional required products/features
+# 3. estimate which of the products/features can be build by external deps
+# 4. find which products/features have been temporarily disabled due to problems
+# 5. estimate which of the products/features can be build by internal deps
+
+# get the special macros
+include(CalligraProductSetMacros)
+
+# get the definitions of products, features and product sets
+include(CalligraProducts.cmake)
+
 set(PRODUCTSET_DEFAULT "ALL")
+# temporary migration support
 if (CREATIVEONLY)
     set(WARN_ABOUT_CREATIVEONLY TRUE)
     set(PRODUCTSET_DEFAULT "CREATIVE")
 endif (CREATIVEONLY)
 
 if(NOT PRODUCTSET)
-    set(PRODUCTSET ${PRODUCTSET_DEFAULT} CACHE STRING "Set of products to build" FORCE)
+    set(PRODUCTSET ${PRODUCTSET_DEFAULT} CACHE STRING "Set of products/features to build" FORCE)
 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.
-# See CONVERTER, EXTRA_*
-
-# 3rd-party libs
-calligra_define_product(LIB_KDGANTT "libkdgantt")
-calligra_define_product(LIB_KDCHART "libkdchart")
-# building tools
-calligra_define_product(RNG2CPP "rng2cpp")
-# Calligra-independent utility libs
-calligra_define_product(LIB_KOVECTORIMAGE "libkovectorimage")
-calligra_define_product(LIB_KOPROPERTY "libkoproperty")
-calligra_define_product(LIB_KOREPORT "libkoreport" NEEDS LIB_KOPROPERTY)
-calligra_define_product(LIB_CALLIGRADB "libcalligradb")
-# calligra libs
-calligra_define_product(CALLIGRA_LIBS "Calligra core libs"  NEEDS RNG2CPP)
-calligra_define_product(LIB_KOPAGEAPP "Lib for paged documents"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(LIB_KOODF2 "libkoodf2"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(LIB_KOODFREADER "libkoodfreader"  NEEDS LIB_KOODF2 CALLIGRA_LIBS)
-calligra_define_product(LIB_MSO "libmso"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(LIB_KOMSOOXML "libkomsooxml"  NEEDS LIB_KOODF2 CALLIGRA_LIBS)
-calligra_define_product(SCRIPTING "Scripting feature") # TODO
-calligra_define_product(RDF "RDF feature")
-# plugins
-calligra_define_product(PLUGIN_TEXTSHAPE "Text shape plugin"  NEEDS CALLIGRA_LIBS)
-# apps
-calligra_define_product(WORDS_PART "Words engine" NEEDS CALLIGRA_LIBS PLUGIN_TEXTSHAPE)
-calligra_define_product(WORDS_APP "Words executable (for Desktop)"  NEEDS WORDS_PART)
-calligra_define_product(STAGE_PART "Stage engine"  NEEDS CALLIGRA_LIBS LIB_KOPAGEAPP)
-calligra_define_product(STAGE_APP "Stage executable (for Desktop)"  NEEDS STAGE_PART)
-calligra_define_product(SHEETS_PART "Sheets engine"  NEEDS CALLIGRA_LIBS SCRIPTING)
-calligra_define_product(SHEETS_APP "Sheets executable (for Desktop)"  NEEDS SHEETS_PART)
-calligra_define_product(AUTHOR_APP "Full Author (for Desktop)"  NEEDS WORDS_PART)
-calligra_define_product(KARBON_APP "Full Karbon (for Desktop)"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(KRITA_APP "Full Krita (for Desktop)"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(KEXI_APP "Full Kexi (for Desktop)"  NEEDS CALLIGRA_LIBS LIB_KOREPORT LIB_CALLIGRADB SCRIPTING)
-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 SCRIPTING)
-calligra_define_product(BRAINDUMP_APP "Full Braindump (for Desktop)"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(DOC "Calligra Documentations")
-# extras
-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)
-calligra_define_product(EXTRA_QUICKPRINT "Plugin for the filemanager adding a \"Print\" action")
-calligra_define_product(EXTRA_FILEMANAGER_TEMPLATES "File templates for filemanager")
-calligra_define_product(OKULARODPGENERATOR "Plugin for Okular adding support for ODP" NEEDS STAGE_PART)
-calligra_define_product(OKULAR_GENERATOR_ODT "Plugin for Okular adding support for ODT" NEEDS WORDS_PART)
-# more plugins
-calligra_define_product(PLUGIN_COLORENGINES "Colorengine plugins"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_MUSICSHAPE "Music shape plugin"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_SPACENAVIGATOR "SpaceNavigator input plugin"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_ARTISTICTEXTSHAPE "Artistic shape plugin"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_DOCKERS "Default dockers plugin"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_TEXTEDITING "Textediting plugins"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_KEXI_SPREADSHEETMIGRATION "Import from ODS plugin for Kexi"  NEEDS KEXI_APP SHEETS_PART)
-calligra_define_product(PLUGIN_DEFAULTTOOLS "Default Flake tools plugin"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_PATHSHAPES "Path shape plugins"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_VARIABLES "Text variables plugin"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_CHARTSHAPE "Chart shape plugin" NEEDS CALLIGRA_LIBS LIB_KDCHART)
-calligra_define_product(PLUGIN_PICTURESHAPE "Picture shape plugin"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_PLUGINSHAPE "Plugin shape plugin"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_FORMULASHAPE "Formula shape plugin"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_VIDEOSHAPE "Plugin for handling videos in Calligra"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_VECTORSHAPE "Vectorgraphic shape plugin" NEEDS CALLIGRA_LIBS LIB_KOVECTORIMAGE)
-calligra_define_product(PLUGIN_REPORTING "Renderer plugins for libkoreport"  NEEDS LIB_KOREPORT LIB_KDCHART)
-calligra_define_product(PLUGIN_SEMANTICITEMS "Semantic items plugins"  NEEDS RDF CALLIGRA_LIBS)
-# staging plugins
-calligra_define_product(PLUGIN_GOOGLEDOCS "Plugin for integration with Google Docs" STAGING  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_THREEDSHAPE "3D shape plugin"  STAGING  NEEDS CALLIGRA_LIBS)
-calligra_define_product(PLUGIN_SHEETS_PIVOTTABLES "Plugin for Sheets adding pivot tables"  STAGING  NEEDS SHEETS_PART)
-# Sheets filters
-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)
-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)
-calligra_define_product(FILTER_SHEETS_IMPORT "All Sheets import filters"  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 filters"  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 filters"  WANTS FILTER_SHEETS_IMPORT FILTER_SHEETS_EXPORT)
-# Flow filters
-calligra_define_product(FILTER_VISIO_TO_ODG "Visio to ODG filter"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(FILTER_WPG_TO_ODG "WPG to ODG filter"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(FILTER_FLOW_IMPORT "All Flow import filters"  WANTS FILTER_VISIO_TO_ODG FILTER_WPG_TO_ODG)
-calligra_define_product(FILTER_FLOW_EXPORT "All Flow export filters"  WANTS )
-calligra_define_product(FILTER_FLOW "All Flow filters"  WANTS FILTER_FLOW_IMPORT FILTER_FLOW_EXPORT)
-# Stage filters
-calligra_define_product(FILTER_KEY_TO_ODP "Apple Keynote to ODP filter"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(FILTER_KPR_TO_ODP "KPresenter to ODP filter"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(FILTER_PPT_TO_ODP "PPT to OPD filter" NEEDS LIB_MSO CALLIGRA_LIBS)
-calligra_define_product(FILTER_PPTX_TO_ODP "PPTX to ODP filter" NEEDS LIB_KOMSOOXML LIB_KOODF2 CALLIGRA_LIBS)
-calligra_define_product(FILTER_STAGE_IMPORT "All Stage import filters"  WANTS FILTER_KEY_TO_ODP FILTER_KPR_TO_ODP FILTER_PPT_TO_ODP FILTER_PPTX_TO_ODP)
-calligra_define_product(FILTER_STAGE_EXPORT "All Stage export filters"  WANTS )
-calligra_define_product(FILTER_STAGE "All Stage filters"  WANTS FILTER_STAGE_IMPORT FILTER_STAGE_EXPORT)
-# Words filters
-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)
-calligra_define_product(FILTER_ODT_TO_DOCX "ODT to DOCX filter" NEEDS LIB_KOODFREADER LIB_KOODF2 CALLIGRA_LIBS)
-calligra_define_product(FILTER_WORDPERFECT_TO_ODT "Word Perfect to ODT filter"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(FILTER_WORKS_TO_ODT "MS Works to ODT filter"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(FILTER_APPLIXWORD_TO_ODT "Applixword to ODT filter"  NEEDS CALLIGRA_LIBS)
-calligra_define_product(FILTER_ASCII_TO_WORDS "Words ASCII import filter"  NEEDS WORDS_PART LIB_KOODF2)
-calligra_define_product(FILTER_ODT_TO_ASCII "ODT to ASCII filter"  NEEDS LIB_KOODFREADER CALLIGRA_LIBS)
-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)
-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)
-calligra_define_product(FILTER_WORDS_IMPORT "All Words import filters"  WANTS FILTER_DOC_TO_ODT FILTER_DOCX_TO_ODT FILTER_WORDPERFECT_TO_ODT FILTER_WORKS_TO_ODT FILTER_APPLIXWORD_TO_ODT FILTER_ASCII_TO_WORDS FILTER_RTF_TO_ODT)
-calligra_define_product(FILTER_WORDS_EXPORT "All Words export filters"  WANTS FILTER_ODT_TO_ASCII FILTER_ODT_TO_MOBI FILTER_ODT_TO_EPUB2 FILTER_ODT_TO_HTML FILTER_ODT_TO_DOCX)
-calligra_define_product(FILTER_WORDS "All Words filters"  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 filters" WANTS FILTER_MPXJ_IMPORT)
-# Karbon filters
-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)
-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)
-calligra_define_product(FILTER_WMF_TO_SVG "WMF to SVG filter"  NEEDS LIB_KOVECTORIMAGE CALLIGRA_LIBS)
-calligra_define_product(FILTER_KARBON1X_TO_KARBON "Karbon 1.x import filter"  NEEDS KARBON_APP)
-calligra_define_product(FILTER_KARBON_IMPORT "All Karbon import filters"  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)
-calligra_define_product(FILTER_KARBON_EXPORT "All Karbon export filters"  WANTS FILTER_KARBON_TO_IMAGE FILTER_KARBON_TO_SVG FILTER_KARBON_TO_WMF)
-calligra_define_product(FILTER_KARBON "All Karbon filters"  WANTS FILTER_KARBON_IMPORT FILTER_KARBON_EXPORT)
-# meta apps
-calligra_define_product(WORDS "Full Words (for Desktop)"  NEEDS WORDS_APP  WANTS FILTER_WORDS PLUGIN_SEMANTICITEMS)
-calligra_define_product(STAGE "Full Stage (for Desktop)"  NEEDS STAGE_APP  WANTS FILTER_STAGE)
-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)
-calligra_define_product(KARBON "Full Karbon (for Desktop)"  NEEDS KARBON_APP  WANTS FILTER_KARBON)
-calligra_define_product(KRITA "Full Krita (for Desktop)"  NEEDS KRITA_APP)
-calligra_define_product(KEXI "Full Kexi (for Desktop)"  NEEDS KEXI_APP  WANTS PLUGIN_KEXI_SPREADSHEETMIGRATION PLUGIN_REPORTING)
-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 "General Calligra program starter"  NEEDS CALLIGRA_LIBS)
-# more extras
-calligra_define_product(OKULARGENERATOR_PPT "Plugin for Okular extended with support for PPT" NEEDS OKULARODPGENERATOR FILTER_PPT_TO_ODP)
-calligra_define_product(OKULARGENERATOR_PPTX "Plugin for Okular extended with support for PPTX" NEEDS OKULARODPGENERATOR FILTER_PPTX_TO_ODP)
-calligra_define_product(OKULAR_GENERATOR_DOC "Plugin for Okular extended with support for DOC" NEEDS OKULAR_GENERATOR_ODT FILTER_DOC_TO_ODT)
-calligra_define_product(OKULAR_GENERATOR_DOCX "Plugin for Okular extended with support for DOCX" NEEDS OKULAR_GENERATOR_ODT FILTER_DOCX_TO_ODT)
-# developer utils
-calligra_define_product(DEVTOOLS "Tools for developers")
-calligra_define_product(CSTESTER "cstester " NEEDS SHEETS_PART STAGE_PART WORDS_PART)
-
-# For new products see cmake/productsets/README, "How to add another product?"
-
-#############################################
-####      Choose products to build       ####
-#############################################
+if (RELEASE_BUILD)
+    set(CALLIGRA_SHOULD_BUILD_STAGING FALSE)
+else (RELEASE_BUILD)
+    set(CALLIGRA_SHOULD_BUILD_STAGING TRUE)
+endif (RELEASE_BUILD)
 
+# finally choose products/features to build
 calligra_set_productset(${PRODUCTSET})
 
  ########################
@@ -325,8 +161,8 @@ include (MacroAddFileDependencies)
 
 if ((${QTVERSION} VERSION_EQUAL 4.8.0) OR (${QTVERSION} VERSION_EQUAL 4.8.1))
     if (NOT IHAVEPATCHEDQT)
-        set(SHOULD_BUILD_WORDS_PART FALSE)
-        set(SHOULD_BUILD_STAGE_PART FALSE)
+        set(SHOULD_BUILD_PART_WORDS FALSE)
+        set(SHOULD_BUILD_PART_STAGE FALSE)
         set(SHOULD_BUILD_PLUGIN_TEXTSHAPE FALSE)
         set(SHOULD_BUILD_PLUGIN_TEXTEDITING 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")
@@ -886,9 +722,9 @@ set(KORDF_INCLUDES ${KOMAIN_INCLUDES}
 )
 set(KORDF_LIBS kordf)
 
-if(SHOULD_BUILD_SCRIPTING)
+if(SHOULD_BUILD_FEATURE_SCRIPTING)
   set(KOKROSS_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kokross ${CMAKE_BINARY_DIR}/libs/kokross)
-endif(SHOULD_BUILD_SCRIPTING)
+endif(SHOULD_BUILD_FEATURE_SCRIPTING)
 
 # kopageapp
 set(KOPAGEAPP_INCLUDES ${TEXTLAYOUT_INCLUDES}
@@ -945,11 +781,11 @@ set(KOODFREADER_INCLUDES
     ${CMAKE_SOURCE_DIR}/filters/libodfreader
 )
 
- #########################################
-##########################################
-## Detect which products can be compile ##
-##########################################
-#########################################
+ ###################################################
+####################################################
+## Detect which products/features can be compiled ##
+####################################################
+###################################################
 
 #
 # WARNING: when adding a dependency for product x if there is already a line
@@ -962,27 +798,27 @@ if(NOT SHARED_MIME_INFO_FOUND)
 endif(NOT SHARED_MIME_INFO_FOUND)
 
 if(NOT Soprano_FOUND)
-    calligra_disable_product(RDF "Soprano not found")
+    calligra_disable_product(FEATURE_RDF "Soprano not found")
 endif(NOT Soprano_FOUND)
 
 if(NOT EIGEN2_FOUND)
-    calligra_disable_product(SHEETS_PART "Eigen devel not found")
+    calligra_disable_product(PART_SHEETS "Eigen devel not found")
 endif(NOT EIGEN2_FOUND)
 
 if(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION OR NOT SHARED_MIME_INFO_FOUND)
-    calligra_disable_product(KRITA_APP "SharedMimeInfo|libeigen2|libexiv2|lcms devel not found ")
+    calligra_disable_product(APP_KRITA "SharedMimeInfo|libeigen2|libexiv2|lcms devel not found ")
 endif(NOT EIGEN2_FOUND OR NOT EXIV2_FOUND OR NOT HAVE_REQUIRED_LCMS_VERSION OR NOT SHARED_MIME_INFO_FOUND)
 
 if(NOT APPLE AND NOT REQUIRED_Xinput_FOUND)
-    calligra_disable_product(KRITA_APP "Xinput devel not found ")
+    calligra_disable_product(APP_KRITA "Xinput devel not found ")
 endif(NOT APPLE AND NOT REQUIRED_Xinput_FOUND)
 
 if (NOT ${QTVERSION} VERSION_GREATER 4.7.0)
-    calligra_disable_product(ACTIVE "Qt version <= 4.7.0")
+    calligra_disable_product(APP_ACTIVE "Qt version <= 4.7.0")
 endif (NOT ${QTVERSION} VERSION_GREATER 4.7.0)
 
 if (NOT QT_QTDECLARATIVE_FOUND OR NOT KDECLARATIVE_FOUND)
-    calligra_disable_product(ACTIVE "QtDeclarative|KDeclarative not found")
+    calligra_disable_product(APP_ACTIVE "QtDeclarative|KDeclarative not found")
 endif(NOT QT_QTDECLARATIVE_FOUND OR NOT KDECLARATIVE_FOUND)
 
 # TODO: remove when Predicate lib arrives
@@ -991,11 +827,11 @@ if (NOT HAVE_ICU OR NOT HAVE_SQLITE)
 endif (NOT HAVE_ICU OR NOT HAVE_SQLITE)
 
 if (NOT QT3SUPPORT)
-    calligra_disable_product(KEXI_APP "Qt3Support not found")
+    calligra_disable_product(APP_KEXI "Qt3Support not found")
 endif (NOT QT3SUPPORT)
 
 if(NOT OKULAR_FOUND)
-    calligra_disable_product(OKULARODPGENERATOR "Okular devel not found")
+    calligra_disable_product(OKULAR_GENERATOR_ODP "Okular devel not found")
 endif(NOT OKULAR_FOUND)
 
 if(NOT OKULAR_FOUND)
@@ -1047,7 +883,7 @@ if(NOT SHARED_MIME_INFO_FOUND)
 endif(NOT SHARED_MIME_INFO_FOUND)
 
 if(WIN32)
-    calligra_disable_product(BRAINDUMP_APP "unmaintained on Windows")
+    calligra_disable_product(APP_BRAINDUMP "unmaintained on Windows")
 endif()
 
 #############################################
@@ -1056,15 +892,15 @@ endif()
 
 # 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)
+calligra_drop_products_on_old_flag(braindump APP_BRAINDUMP)
+calligra_drop_products_on_old_flag(flow APP_FLOW)
+calligra_drop_products_on_old_flag(karbon APP_KARBON)
+calligra_drop_products_on_old_flag(kexi APP_KEXI)
+calligra_drop_products_on_old_flag(krita APP_KRITA)
+calligra_drop_products_on_old_flag(plan  APP_PLAN)
+calligra_drop_products_on_old_flag(sheets PART_SHEETS APP_SHEETS)
+calligra_drop_products_on_old_flag(stage  PART_STAGE APP_STAGE)
+calligra_drop_products_on_old_flag(words  PART_WORDS APP_WORDS)
 
 #############################################
 ####      Temporarily broken products    ####
@@ -1073,7 +909,7 @@ calligra_drop_products_on_old_flag(words  WORDS_PART WORDS_APP)
 # If a product does not build due to some temporary brokeness disable it here,
 # 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")
+# calligra_disable_product(APP_KEXI "isn't buildable at the moment")
 
 #############################################
 ####     Calculate buildable products    ####
@@ -1086,9 +922,9 @@ calligra_drop_unbuildable_products()
 ####     Setup product-depending vars    ####
 #############################################
 
-if(SHOULD_BUILD_RDF)
+if(SHOULD_BUILD_FEATURE_RDF)
    add_definitions( -DSHOULD_BUILD_RDF )
-endif(SHOULD_BUILD_RDF)
+endif(SHOULD_BUILD_FEATURE_RDF)
 
 
  ###################
@@ -1099,37 +935,37 @@ endif(SHOULD_BUILD_RDF)
 
 add_subdirectory(words)
 
-if (SHOULD_BUILD_FLOW_APP)
+if (SHOULD_BUILD_APP_FLOW)
     add_subdirectory(flow)
-endif (SHOULD_BUILD_FLOW_APP)
+endif (SHOULD_BUILD_APP_FLOW)
 
 add_subdirectory(stage)
 
-if(SHOULD_BUILD_KEXI_APP)
+if(SHOULD_BUILD_APP_KEXI)
     add_subdirectory(kexi)
-endif(SHOULD_BUILD_KEXI_APP)
+endif(SHOULD_BUILD_APP_KEXI)
 
-if(SHOULD_BUILD_PLAN_APP)
+if(SHOULD_BUILD_APP_PLAN)
     add_subdirectory(plan)
-endif(SHOULD_BUILD_PLAN_APP)
+endif(SHOULD_BUILD_APP_PLAN)
 
 add_subdirectory(sheets)
 
-if(SHOULD_BUILD_KRITA_APP)
+if(SHOULD_BUILD_APP_KRITA)
   add_subdirectory(krita)
-endif(SHOULD_BUILD_KRITA_APP)
+endif(SHOULD_BUILD_APP_KRITA)
 
-if(SHOULD_BUILD_KARBON_APP)
+if(SHOULD_BUILD_APP_KARBON)
   add_subdirectory(karbon)
-endif(SHOULD_BUILD_KARBON_APP)
+endif(SHOULD_BUILD_APP_KARBON)
 
-if(SHOULD_BUILD_BRAINDUMP_APP)
+if(SHOULD_BUILD_APP_BRAINDUMP)
   add_subdirectory(braindump)
-endif(SHOULD_BUILD_BRAINDUMP_APP)
+endif(SHOULD_BUILD_APP_BRAINDUMP)
 
-if(SHOULD_BUILD_ACTIVE)
+if(SHOULD_BUILD_APP_ACTIVE)
   add_subdirectory(active)
-endif(SHOULD_BUILD_ACTIVE)
+endif(SHOULD_BUILD_APP_ACTIVE)
 
 if(SHOULD_BUILD_DOC)
     add_subdirectory(doc)
@@ -1150,6 +986,7 @@ add_subdirectory(data)
 
 macro_display_feature_log()
 
+calligra_product_deps_report("product_deps")
 calligra_log_should_build()
 
 add_custom_target(apidox doc/api/gendocs.pl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
diff --git a/CalligraProducts.cmake b/CalligraProducts.cmake
new file mode 100644
index 0000000..24920a4
--- /dev/null
+++ b/CalligraProducts.cmake
@@ -0,0 +1,692 @@
+### DEFINITION OF PRODUCTS, FEATURES AND PRODUCTSETS
+####################################################
+
+# When building Calligra a lot of different things are created and installed. To
+# describe them and their internal dependencies the concepts of "product",
+# "feature" and "product set" are used.
+
+# A "product" is the smallest functional unit which can be created in the build
+# and which is useful on its own when installed. Examples are e.g. libraries,
+# plugins or executables. Products have external and internal required
+# dependencies at build-time. Internal dependencies are noted in terms of other
+# products or features (see below) and could be e.g. other libraries to link
+# against or build tools needed to generate source files.
+# A product gets defined by setting an identifier, a descriptive fullname and
+# the needed internal build-time requirements. Any other product or feature
+# listed as requirement must have been defined before.
+
+# A "feature" is not a standalone product, but adds abilities to one or multiple
+# given products. One examples is e.g. scriptability. Features have external and
+# internal required dependencies at build-time. Internal dependencies are noted
+# in terms of other products or features and could be e.g. other libraries to
+# link against or build tools needed to generate source files.
+# A feature gets defined by setting an identifier, a descriptive fullname and
+# the needed internal build-time requirements. Any other product or feature
+# listed as requirement must have been defined before.
+
+# A "productset" is a selection of products which should be build together. The
+# products can be either essential or optional to the set. If essential
+# (NEEDED), the whole productset will not be build if a product is missing
+# another internal or external dependency. If optional (WANTED), the rest of the
+# set will still be build in that case.
+# The products to include in a set can be listed directly or indirectly: they
+# can be named themselves, or another productset can be included in a set, whose
+# products will then be part of the first set as well.
+# Products and productsets can be listed as dependencies in multiple product
+# sets. As with dependencies for products, they must have been defined before.
+
+# Products, features and product sets are in the same namespace, so a given
+# identifier can be only used either for a product or for a feature or for a
+# product set.
+
+# The ids of products and features (but not sets) are used to generate cmake
+# variables SHOULD_BUILD_${ID}, which then are used to control what is build and
+# how.
+
+
+#############################################
+####      Product definitions            ####
+#############################################
+
+# For defining new products see end of this file, "How to add another product?"
+
+# IDEA: also add headers/sdk for all the libs ("_DEVEL"?)
+# IDEA: 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.
+# See APP_CONVERTER, FILEMANAGER_*
+
+# 3rd-party libs
+calligra_define_product(LIB_KDGANTT "libkdgantt")
+calligra_define_product(LIB_KDCHART "libkdchart")
+
+# building tools
+calligra_define_product(BUILDTOOL_RNG2CPP "rng2cpp")
+
+# Calligra-independent utility libs
+calligra_define_product(LIB_KOVECTORIMAGE "libkovectorimage")
+calligra_define_product(LIB_KOPROPERTY "libkoproperty")
+calligra_define_product(LIB_KOREPORT "libkoreport"  REQUIRES LIB_KOPROPERTY)
+calligra_define_product(LIB_CALLIGRADB "libcalligradb")
+
+# calligra libs
+calligra_define_product(LIB_CALLIGRA "Calligra core libs"  REQUIRES BUILDTOOL_RNG2CPP)
+calligra_define_product(LIB_KOPAGEAPP "Lib for paged documents"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(LIB_KOODF2 "libkoodf2"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(LIB_KOODFREADER "libkoodfreader"  REQUIRES LIB_KOODF2 LIB_CALLIGRA)
+calligra_define_product(LIB_MSO "libmso"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(LIB_KOMSOOXML "libkomsooxml"  REQUIRES LIB_KOODF2 LIB_CALLIGRA)
+
+# features
+calligra_define_feature(FEATURE_SCRIPTING "Scripting feature") # TODO
+calligra_define_feature(FEATURE_RDF "RDF feature")
+
+# plugins
+calligra_define_product(PLUGIN_TEXTSHAPE "Text shape plugin"  REQUIRES LIB_CALLIGRA)
+
+# parts
+calligra_define_product(PART_WORDS "Words engine"  REQUIRES LIB_CALLIGRA PLUGIN_TEXTSHAPE)
+calligra_define_product(PART_STAGE "Stage engine"  REQUIRES LIB_CALLIGRA LIB_KOPAGEAPP)
+calligra_define_product(PART_SHEETS "Sheets engine"  REQUIRES LIB_CALLIGRA)
+
+# apps
+calligra_define_product(APP_WORDS "Words app (for Desktop)"  REQUIRES PART_WORDS)
+calligra_define_product(APP_STAGE "Stage app (for Desktop)"  REQUIRES PART_STAGE)
+calligra_define_product(APP_SHEETS "Sheets app (for Desktop)"  REQUIRES PART_SHEETS)
+calligra_define_product(APP_AUTHOR "Author app (for Desktop)"  REQUIRES PART_WORDS)
+calligra_define_product(APP_KARBON "Karbon app (for Desktop)"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(APP_KRITA "Krita app (for Desktop)"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(APP_KEXI "Kexi app (for Desktop)"  REQUIRES LIB_CALLIGRA LIB_KOREPORT LIB_CALLIGRADB)
+calligra_define_product(APP_FLOW "Flow app (for Desktop)"  REQUIRES LIB_CALLIGRA LIB_KOPAGEAPP)
+calligra_define_product(APP_PLAN "Plan app (for Desktop)"  REQUIRES LIB_CALLIGRA LIB_KOREPORT LIB_KDCHART LIB_KDGANTT)
+calligra_define_product(APP_BRAINDUMP "Braindump app (for Desktop)"  REQUIRES LIB_CALLIGRA)
+# TODO: this needs to be split up by app products
+calligra_define_product(DOC "Calligra Documentations")
+
+# extras
+calligra_define_product(APP_CONVERTER "Format converter for commandline"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILEMANAGER_PROPERTIES "Plugin for the KDE file properties dialog"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILEMANAGER_THUMBNAIL "Plugins for KDE filesystem thumbnailing"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILEMANAGER_QUICKPRINT "Plugin for the filemanager adding a \"Print\" action")
+calligra_define_product(FILEMANAGER_TEMPLATES "File templates for filemanager")
+calligra_define_product(OKULAR_GENERATOR_ODP "Plugin for Okular adding support for ODP"  REQUIRES PART_STAGE)
+calligra_define_product(OKULAR_GENERATOR_ODT "Plugin for Okular adding support for ODT" REQUIRES PART_WORDS)
+
+# more plugins
+calligra_define_product(PLUGIN_COLORENGINES "Colorengine plugins"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_MUSICSHAPE "Music shape plugin"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_SPACENAVIGATOR "SpaceNavigator input plugin"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_ARTISTICTEXTSHAPE "Artistic shape plugin"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_DOCKERS "Default dockers plugin"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_TEXTEDITING "Textediting plugins"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_KEXI_SPREADSHEETMIGRATION "Import from ODS plugin for Kexi"  REQUIRES APP_KEXI PART_SHEETS)
+calligra_define_product(PLUGIN_DEFAULTTOOLS "Default Flake tools plugin"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_PATHSHAPES "Path shape plugins"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_VARIABLES "Text variables plugin"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_CHARTSHAPE "Chart shape plugin"  REQUIRES LIB_CALLIGRA LIB_KDCHART)
+calligra_define_product(PLUGIN_PICTURESHAPE "Picture shape plugin"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_PLUGINSHAPE "Plugin shape plugin"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_FORMULASHAPE "Formula shape plugin"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_VIDEOSHAPE "Plugin for handling videos in Calligra"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_VECTORSHAPE "Vectorgraphic shape plugin"  REQUIRES LIB_CALLIGRA LIB_KOVECTORIMAGE)
+calligra_define_product(PLUGIN_REPORTING "Renderer plugins for libkoreport"  REQUIRES LIB_KOREPORT LIB_KDCHART)
+calligra_define_product(PLUGIN_SEMANTICITEMS "Semantic items plugins"  REQUIRES FEATURE_RDF LIB_CALLIGRA)
+
+# staging plugins
+calligra_define_product(PLUGIN_GOOGLEDOCS "Plugin for integration with Google Docs" STAGING  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_THREEDSHAPE "3D shape plugin"  STAGING  REQUIRES LIB_CALLIGRA)
+calligra_define_product(PLUGIN_SHEETS_PIVOTTABLES "Plugin for Sheets adding pivot tables"  STAGING  REQUIRES PART_SHEETS)
+
+# Sheets filters
+calligra_define_product(FILTER_XLSX_TO_ODS "XLSX to ODS filter"  REQUIRES LIB_KOMSOOXML PART_SHEETS)
+calligra_define_product(FILTER_XLS_TO_SHEETS "Sheets XLS import filter"  REQUIRES LIB_MSO LIB_KOMSOOXML PART_SHEETS)
+calligra_define_product(FILTER_SHEETS_TO_XLS "Sheets XLS export filter"  REQUIRES LIB_MSO LIB_KOMSOOXML PART_SHEETS)
+calligra_define_product(FILTER_CSV_TO_SHEETS "Sheets CSV import filter"  REQUIRES PART_SHEETS)
+calligra_define_product(FILTER_SHEETS_TO_CSV "Sheets CSV export filter"  REQUIRES PART_SHEETS)
+calligra_define_product(FILTER_APPLIXSPREAD_TO_KSPREAD "Applix Spreadsheet to KSpread filter"  REQUIRES PART_SHEETS)
+calligra_define_product(FILTER_DBASE_TO_KSPREAD "dBASE to KSpread filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_GNUMERIC_TO_SHEETS "Sheets GNUMERIC import filter"  REQUIRES PART_SHEETS)
+calligra_define_product(FILTER_SHEETS_TO_GNUMERIC "Sheets GNUMERIC import filter"  REQUIRES PART_SHEETS)
+calligra_define_product(FILTER_OPENCALC_TO_SHEETS "Sheets OpenOffice.org Calc import filter"  REQUIRES PART_SHEETS)
+calligra_define_product(FILTER_SHEETS_TO_OPENCALC "Sheets OpenOffice.org Calc export filter"  REQUIRES PART_SHEETS)
+calligra_define_product(FILTER_QUATTROPRO_TO_SHEETS "Sheets Quattro Pro import filter"  REQUIRES PART_SHEETS)
+calligra_define_product(FILTER_HTML_TO_ODS "HTML to ODS filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_SHEETS_TO_HTML "Sheets HTML export filter"  REQUIRES PART_SHEETS)
+calligra_define_product(FILTER_KSPREAD_TO_LATEX "KSpread to LaTeX filter"  REQUIRES LIB_CALLIGRA)
+
+# Flow filters
+calligra_define_product(FILTER_VISIO_TO_ODG "Visio to ODG filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_WPG_TO_ODG "WPG to ODG filter"  REQUIRES LIB_CALLIGRA)
+
+# Stage filters
+calligra_define_product(FILTER_KEY_TO_ODP "Apple Keynote to ODP filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_KPR_TO_ODP "KPresenter to ODP filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_PPT_TO_ODP "PPT to OPD filter"  REQUIRES LIB_MSO LIB_CALLIGRA)
+calligra_define_product(FILTER_PPTX_TO_ODP "PPTX to ODP filter"  REQUIRES LIB_KOMSOOXML LIB_KOODF2 LIB_CALLIGRA)
+
+# Words filters
+calligra_define_product(FILTER_DOC_TO_ODT "DOC to ODT filter"  REQUIRES LIB_MSO LIB_KOMSOOXML LIB_CALLIGRA)
+calligra_define_product(FILTER_DOCX_TO_ODT "DOCX to ODT filter"  REQUIRES LIB_KOMSOOXML LIB_KOODF2 LIB_CALLIGRA)
+calligra_define_product(FILTER_ODT_TO_DOCX "ODT to DOCX filter"  REQUIRES LIB_KOODFREADER LIB_KOODF2 LIB_CALLIGRA)
+calligra_define_product(FILTER_WORDPERFECT_TO_ODT "Word Perfect to ODT filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_WORKS_TO_ODT "MS Works to ODT filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_APPLIXWORD_TO_ODT "Applixword to ODT filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_ASCII_TO_WORDS "Words ASCII import filter"  REQUIRES PART_WORDS LIB_KOODF2)
+calligra_define_product(FILTER_ODT_TO_ASCII "ODT to ASCII filter"  REQUIRES LIB_KOODFREADER LIB_CALLIGRA)
+calligra_define_product(FILTER_RTF_TO_ODT "RTF to ODT filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_ODT_TO_MOBI "Mobi export filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_ODT_TO_EPUB2 "ODT Epub2 export filter"  REQUIRES LIB_KOVECTORIMAGE LIB_CALLIGRA)
+calligra_define_product(FILTER_ODT_TO_HTML "ODT HTML export filter"  REQUIRES LIB_KOVECTORIMAGE LIB_CALLIGRA)
+
+# Plan filters
+calligra_define_product(FILTER_MPXJ_IMPORT "MS Project import filter"  REQUIRES APP_PLAN)
+
+# Karbon filters
+calligra_define_product(FILTER_EPS_TO_SVG_AI "EPS to SVG/AI filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_XFIG_TO_ODG "XFig to ODG filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_PDF_TO_SVG "PDF to SVG filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_WPG_TO_SVG "WPG to SVG filter"  REQUIRES LIB_CALLIGRA)
+calligra_define_product(FILTER_KARBON_TO_IMAGE "Karbon image export filter"  REQUIRES APP_KARBON)
+calligra_define_product(FILTER_KARBON_TO_SVG "Karbon SVG export filter"  REQUIRES APP_KARBON)
+calligra_define_product(FILTER_SVG_TO_KARBON "Karbon SVG import filter"  REQUIRES APP_KARBON)
+calligra_define_product(FILTER_KARBON_TO_WMF "Karbon WMF export filter"  REQUIRES APP_KARBON)
+calligra_define_product(FILTER_WMF_TO_SVG "WMF to SVG filter"  REQUIRES LIB_KOVECTORIMAGE LIB_CALLIGRA)
+calligra_define_product(FILTER_KARBON1X_TO_KARBON "Karbon 1.x import filter"  REQUIRES APP_KARBON)
+
+# meta apps
+calligra_define_product(APP_ACTIVE "Calligra Active app"  REQUIRES PART_SHEETS PART_STAGE PART_WORDS)
+calligra_define_product(APP_CALLIGRA "General Calligra app starter"  REQUIRES LIB_CALLIGRA)
+
+# more extras
+calligra_define_product(OKULAR_GENERATOR_PPT "Plugin for Okular extended with support for PPT"  REQUIRES OKULAR_GENERATOR_ODP FILTER_PPT_TO_ODP)
+calligra_define_product(OKULAR_GENERATOR_PPTX "Plugin for Okular extended with support for PPTX"  REQUIRES OKULAR_GENERATOR_ODP FILTER_PPTX_TO_ODP)
+calligra_define_product(OKULAR_GENERATOR_DOC "Plugin for Okular extended with support for DOC" REQUIRES OKULAR_GENERATOR_ODT FILTER_DOC_TO_ODT)
+calligra_define_product(OKULAR_GENERATOR_DOCX "Plugin for Okular extended with support for DOCX" REQUIRES OKULAR_GENERATOR_ODT FILTER_DOCX_TO_ODT)
+
+# developer utils
+calligra_define_product(APP_DEVTOOLS "Tools for developers")
+calligra_define_product(APP_CSTESTER "cstester"  REQUIRES PART_SHEETS PART_STAGE PART_WORDS)
+
+
+#############################################
+####      Product set definitions        ####
+#############################################
+
+# For defining new productsets see end of this file,
+# "How to add another productset?"
+
+# filter sets
+calligra_define_productset(FILTERS_SHEETS_IMPORT "All Sheets import filters"
+    OPTIONAL
+        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_productset(FILTERS_SHEETS_EXPORT "All Sheets export filters"
+    OPTIONAL
+        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_productset(FILTERS_SHEETS "All Sheets filters"
+    OPTIONAL
+        FILTERS_SHEETS_IMPORT
+        FILTERS_SHEETS_EXPORT
+)
+calligra_define_productset(FILTERS_FLOW_IMPORT "All Flow import filters"
+    OPTIONAL
+        FILTER_VISIO_TO_ODG
+        FILTER_WPG_TO_ODG
+)
+#calligra_define_productset(FILTERS_FLOW_EXPORT "All Flow export filters"  OPTIONAL ) noone currently
+calligra_define_productset(FILTERS_FLOW "All Flow filters"
+    OPTIONAL
+        FILTERS_FLOW_IMPORT
+#        FILTERS_FLOW_EXPORT
+)
+calligra_define_productset(FILTERS_STAGE_IMPORT "All Stage import filters"
+    OPTIONAL
+        FILTER_KEY_TO_ODP
+        FILTER_KPR_TO_ODP
+        FILTER_PPT_TO_ODP
+        FILTER_PPTX_TO_ODP
+)
+#calligra_define_productset(FILTERS_STAGE_EXPORT "All Stage export filters"  OPTIONAL ) noone currently
+calligra_define_productset(FILTERS_STAGE "All Stage filters"
+    OPTIONAL
+        FILTERS_STAGE_IMPORT
+#         FILTERS_STAGE_EXPORT
+)
+calligra_define_productset(FILTERS_WORDS_IMPORT "All Words import filters"
+    OPTIONAL
+        FILTER_DOC_TO_ODT
+        FILTER_DOCX_TO_ODT
+        FILTER_WORDPERFECT_TO_ODT
+        FILTER_WORKS_TO_ODT
+        FILTER_APPLIXWORD_TO_ODT
+        FILTER_ASCII_TO_WORDS
+        FILTER_RTF_TO_ODT
+)
+calligra_define_productset(FILTERS_WORDS_EXPORT "All Words export filters"
+    OPTIONAL
+        FILTER_ODT_TO_ASCII
+        FILTER_ODT_TO_MOBI
+        FILTER_ODT_TO_EPUB2
+        FILTER_ODT_TO_HTML
+        FILTER_ODT_TO_DOCX
+)
+calligra_define_productset(FILTERS_WORDS "All Words filters"
+    OPTIONAL
+        FILTERS_WORDS_IMPORT
+        FILTERS_WORDS_EXPORT
+)
+calligra_define_productset(FILTERS_PLAN "All Plan filters"
+    OPTIONAL
+        FILTER_MPXJ_IMPORT
+)
+calligra_define_productset(FILTERS_KARBON_IMPORT "All Karbon import filters"
+    OPTIONAL
+        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
+)
+calligra_define_productset(FILTERS_KARBON_EXPORT "All Karbon export filters"
+    OPTIONAL
+        FILTER_KARBON_TO_IMAGE
+        FILTER_KARBON_TO_SVG
+        FILTER_KARBON_TO_WMF
+)
+calligra_define_productset(FILTERS_KARBON "All Karbon filters"
+    OPTIONAL
+        FILTERS_KARBON_IMPORT
+        FILTERS_KARBON_EXPORT
+)
+
+# filemanager
+calligra_define_productset(FILEMANAGER "Extensions for the filemanager"
+    OPTIONAL
+        FILEMANAGER_PROPERTIES
+        FILEMANAGER_QUICKPRINT
+        FILEMANAGER_TEMPLATES
+        FILEMANAGER_THUMBNAIL
+)
+
+# apps
+calligra_define_productset(ACTIVE "Full Calligra Active"
+    REQUIRES
+        APP_ACTIVE
+    OPTIONAL
+        # extras
+        FILEMANAGER_PROPERTIES
+        FILEMANAGER_THUMBNAIL
+        # plugins
+        PLUGIN_DEFAULTTOOLS
+        PLUGIN_ARTISTICTEXTSHAPE
+        PLUGIN_PATHSHAPES
+        PLUGIN_VARIABLES
+        PLUGIN_CHARTSHAPE
+        PLUGIN_PICTURESHAPE
+        PLUGIN_TEXTSHAPE
+        PLUGIN_PLUGINSHAPE
+        PLUGIN_FORMULASHAPE
+        PLUGIN_VECTORSHAPE
+        PLUGIN_VIDEOSHAPE
+        # filters
+        FILTERS_SHEETS_IMPORT
+        FILTERS_STAGE_IMPORT
+        FILTERS_WORDS_IMPORT
+)
+calligra_define_productset(AUTHOR "Full Author (for Desktop)"
+    REQUIRES
+        APP_AUTHOR
+    OPTIONAL
+        # extras
+        FILEMANAGER
+        # plugins
+        PLUGIN_DEFAULTTOOLS
+        PLUGIN_ARTISTICTEXTSHAPE
+        PLUGIN_DOCKERS
+        PLUGIN_PATHSHAPES
+        PLUGIN_VARIABLES
+        PLUGIN_CHARTSHAPE
+        PLUGIN_PICTURESHAPE
+        PLUGIN_TEXTSHAPE
+        PLUGIN_PLUGINSHAPE
+        PLUGIN_FORMULASHAPE
+        PLUGIN_VECTORSHAPE
+        PLUGIN_VIDEOSHAPE
+        PLUGIN_SEMANTICITEMS
+        # filters
+        FILTERS_WORDS
+)
+calligra_define_productset(BRAINDUMP "Full Braindump (for Desktop)"
+    REQUIRES
+        APP_BRAINDUMP
+    OPTIONAL
+        # plugins
+        PLUGIN_MUSICSHAPE
+        PLUGIN_ARTISTICTEXTSHAPE
+        PLUGIN_DOCKERS
+        PLUGIN_TEXTEDITING
+        PLUGIN_DEFAULTTOOLS
+        PLUGIN_PATHSHAPES
+        PLUGIN_VARIABLES
+        PLUGIN_CHARTSHAPE
+        PLUGIN_PICTURESHAPE
+        PLUGIN_PLUGINSHAPE
+        PLUGIN_FORMULASHAPE
+        PLUGIN_VIDEOSHAPE
+        PLUGIN_VECTORSHAPE
+)
+calligra_define_productset(FLOW "Full Flow (for Desktop)"
+    REQUIRES
+        APP_FLOW
+    OPTIONAL
+        # extras
+        FILEMANAGER
+        # plugins
+        PLUGIN_DEFAULTTOOLS
+        PLUGIN_ARTISTICTEXTSHAPE
+        PLUGIN_DOCKERS
+        PLUGIN_PATHSHAPES
+        PLUGIN_VARIABLES
+        PLUGIN_CHARTSHAPE
+        PLUGIN_PICTURESHAPE
+        PLUGIN_TEXTSHAPE
+        PLUGIN_PLUGINSHAPE
+        PLUGIN_FORMULASHAPE
+        PLUGIN_VECTORSHAPE
+        PLUGIN_VIDEOSHAPE
+        # filters
+        FILTERS_FLOW
+)
+calligra_define_productset(KARBON "Full Karbon (for Desktop)"
+    REQUIRES
+        APP_KARBON
+    OPTIONAL
+        # extras
+        FILEMANAGER
+        # plugins
+        PLUGIN_DEFAULTTOOLS
+        PLUGIN_ARTISTICTEXTSHAPE
+        PLUGIN_DOCKERS
+        PLUGIN_PATHSHAPES
+        PLUGIN_VARIABLES
+        PLUGIN_CHARTSHAPE
+        PLUGIN_PICTURESHAPE
+        PLUGIN_TEXTSHAPE
+        PLUGIN_PLUGINSHAPE
+        PLUGIN_FORMULASHAPE
+        PLUGIN_VECTORSHAPE
+        PLUGIN_VIDEOSHAPE
+        # filters
+        FILTERS_KARBON
+)
+calligra_define_productset(KEXI "Full Kexi (for Desktop)"
+    REQUIRES
+        APP_KEXI
+    OPTIONAL
+        FEATURE_SCRIPTING
+        PLUGIN_KEXI_SPREADSHEETMIGRATION
+        PLUGIN_REPORTING
+)
+calligra_define_productset(KRITA "Full Krita"
+    REQUIRES
+        APP_KRITA
+    OPTIONAL
+        # extras
+        FILEMANAGER_PROPERTIES
+        FILEMANAGER_THUMBNAIL
+        FILEMANAGER_QUICKPRINT
+        # plugins
+        PLUGIN_COLORENGINES
+        PLUGIN_SPACENAVIGATOR
+        PLUGIN_ARTISTICTEXTSHAPE
+        PLUGIN_DOCKERS
+        PLUGIN_TEXTEDITING
+        PLUGIN_DEFAULTTOOLS
+        PLUGIN_PATHSHAPES
+        PLUGIN_PICTURESHAPE
+        PLUGIN_TEXTSHAPE
+)
+calligra_define_productset(PLAN "Full Plan (for Desktop)"
+    REQUIRES
+        APP_PLAN
+    OPTIONAL
+        FEATURE_SCRIPTING
+        FILTERS_PLAN
+)
+calligra_define_productset(SHEETS "Full Sheets (for Desktop)"
+    REQUIRES
+        APP_SHEETS
+    OPTIONAL
+        # extras
+        FILEMANAGER
+        # feature
+        FEATURE_SCRIPTING
+        # plugins
+        PLUGIN_DEFAULTTOOLS
+        PLUGIN_ARTISTICTEXTSHAPE
+        PLUGIN_DOCKERS
+        PLUGIN_PATHSHAPES
+        PLUGIN_VARIABLES
+        PLUGIN_CHARTSHAPE
+        PLUGIN_PICTURESHAPE
+        PLUGIN_TEXTSHAPE
+        PLUGIN_PLUGINSHAPE
+        PLUGIN_FORMULASHAPE
+        PLUGIN_VECTORSHAPE
+        PLUGIN_VIDEOSHAPE
+        PLUGIN_SHEETS_PIVOTTABLES
+        # filters
+        FILTERS_SHEETS
+)
+calligra_define_productset(STAGE "Full Stage (for Desktop)"
+    REQUIRES
+        APP_STAGE
+    OPTIONAL
+        # extras
+        FILEMANAGER
+        # plugins
+        PLUGIN_DEFAULTTOOLS
+        PLUGIN_ARTISTICTEXTSHAPE
+        PLUGIN_DOCKERS
+        PLUGIN_PATHSHAPES
+        PLUGIN_VARIABLES
+        PLUGIN_CHARTSHAPE
+        PLUGIN_PICTURESHAPE
+        PLUGIN_TEXTSHAPE
+        PLUGIN_PLUGINSHAPE
+        PLUGIN_FORMULASHAPE
+        PLUGIN_VECTORSHAPE
+        PLUGIN_VIDEOSHAPE
+        # filters
+        FILTERS_STAGE
+)
+calligra_define_productset(WORDS "Full Words (for Desktop)"
+    REQUIRES
+        APP_WORDS
+    OPTIONAL
+        # extras
+        FILEMANAGER
+        # plugins
+        PLUGIN_DEFAULTTOOLS
+        PLUGIN_ARTISTICTEXTSHAPE
+        PLUGIN_DOCKERS
+        PLUGIN_PATHSHAPES
+        PLUGIN_VARIABLES
+        PLUGIN_CHARTSHAPE
+        PLUGIN_PICTURESHAPE
+        PLUGIN_TEXTSHAPE
+        PLUGIN_PLUGINSHAPE
+        PLUGIN_FORMULASHAPE
+        PLUGIN_VECTORSHAPE
+        PLUGIN_VIDEOSHAPE
+        PLUGIN_SEMANTICITEMS
+        # filters
+        FILTERS_WORDS
+)
+
+# okular support
+calligra_define_productset(OKULAR "Okular generators"
+    OPTIONAL
+        OKULAR_GENERATOR_ODP
+        OKULAR_GENERATOR_PPT
+        OKULAR_GENERATOR_PPTX
+        OKULAR_GENERATOR_ODT
+        OKULAR_GENERATOR_DOC
+        OKULAR_GENERATOR_DOCX
+)
+
+
+# How to add another product?
+# ===========================
+#
+# 1. Define the product by a call of calligra_define_product,
+#    e.g.
+#
+#    calligra_define_product(MYPRODUCT "title of product")
+#
+#    For the product id use a proper prefix (LIB_, PLUGIN_, FILTER_, APP_, PART_,
+#     ...), whatever is appropriate.
+#
+# 2. Extend that call with a REQUIRES argument section, if the product has
+#    hard internal build-time dependencies on other products or features.
+#    Products/features that are listed as dependencies have to be defined before
+#    (see also the API doc in cmake/modules/CalligraProductSetMacros.cmake)
+#    E.g.
+#
+#    calligra_define_product(MYPRODUCT "title of product"  REQUIRES P1 P2)
+#
+# 3. Add a rule when to not build the product, in the section "Detect which
+#    products/features can be compiled" of the toplevel CMakeLists.txt. Each
+#    product should have their own boolean expression when to set the build flag
+#    to FALSE, e.g.
+#
+#    if (PLATFORMX OR NOT EXTERNAL_DEP_X_FOUND)
+#      set(SHOULD_BUILD_MYPRODUCT FALSE)
+#    endif (PLATFORMX OR NOT EXTERNAL_DEP_X_FOUND)
+#
+# 4. Wrap everything belonging to the product with the build flag of the product.
+#    Ideally this is done around subdirectory inclusions, results in easier code.
+#    e.g.
+#
+#    if (SHOULD_BUILD_MYPRODUCT)
+#      add_subdirectory(myproduct)
+#    endif (SHOULD_BUILD_MYPRODUCT)
+#
+# 5. Tag the product as STAGING, if it is not yet ready for release, but already
+#    integrated in the master branch, e.g.
+#
+#    calligra_define_product(MYPRODUCT "title of product" STAGING REQUIRES P1)
+#
+# 6. Add the product to all products, features and product sets which have this
+#    product as REQUIRED or OPTIONAL dependency.
+#
+#
+# How to add another feature?
+# ===========================
+#
+# 1. Define the feature by a call of calligra_define_feature,
+#    e.g.
+#
+#    calligra_define_feature(MYFEATURE "title of feature")
+#
+#    For the feature id use a proper prefix (FEATURE_, ...), whatever is
+#    appropriate.
+#
+# 2. Extend that call with a REQUIRES argument section, if the feature has
+#    hard internal build-time dependencies on other products or features.
+#    Products or features that are listed as dependencies have to be defined
+#    before
+#    (see also the API doc in cmake/modules/CalligraProductSetMacros.cmake)
+#    E.g.
+#
+#    calligra_define_feature(MYFEATURE "title of feature"  REQUIRES P1 F1)
+#
+# 3. Add a rule when to not build the feature, in the section "Detect which
+#    products/features can be compiled" of the toplevel CMakeLists.txt. Each
+#    feature should have their own boolean expression when to set the build flag
+#    to FALSE, e.g.
+#
+#    if (PLATFORMX OR NOT EXTERNAL_DEP_X_FOUND)
+#      set(SHOULD_BUILD_MYFEATURE FALSE)
+#    endif (PLATFORMX OR NOT EXTERNAL_DEP_X_FOUND)
+#
+# 4. Wrap everything belonging to the feature with the build flag of the feature.
+#    Ideally this is done around subdirectory inclusions, results in easier code.
+#    e.g.
+#
+#    if (SHOULD_BUILD_MYFEATURE)
+#      add_subdirectory(myproduct)
+#    endif (SHOULD_BUILD_MYFEATURE)
+#
+# 5. Tag the feature as STAGING, if it is not yet ready for release, but already
+#    integrated in the master branch, e.g.
+#
+#    calligra_define_product(MYFEATURE "title of feature" STAGING REQUIRES P1 F1)
+#
+# 6. Add the feature to all products, features and product sets which have this
+#    product as REQUIRED or OPTIONAL dependency.
+#
+#
+# How to add another productset?
+# ==============================
+#
+# 1. Define the productset by a call of calligra_define_productset,
+#    e.g.
+#
+#    calligra_define_productset(MYPRODUCTSET "title of productset")
+#
+# 2. Extend that call with REQUIRES or OPTIONAL argument sections, if the productset
+#    has hard or soft internal dependencies on other products, features or
+#    productsets.
+#    Products, features or productsets that are listed as dependencies have to
+#    be defined before
+#    (see also the API doc in cmake/modules/CalligraProductSetMacros.cmake)
+#    E.g.
+#
+#    calligra_define_productset(MYPRODUCT "title of product"
+#                               REQUIRES P1 P2 F1 PS1
+#                               OPTIONAL P3 F2 PS2)
+#
+# 3. Add the productset to all product sets which have this product set as
+#     REQUIRED or OPTIONAL dependency.
+#
+# The definition could be added to this file, which should be done for more
+# generic sets. Or it can be put into a file of its own, in the directory
+# cmake/productsets, which should be done for more special ones or for those
+# which should not be added to the repository.
+# The file must be named with the name of the productset in lowercase and have
+# the extension ".cmake".
+#
+# Example:
+# You want a productset "MYWORDS". For that you add a file named
+# "mywords.cmake" into the directory cmake/productsets, with the content:
+# --- 8< ---
+# calligra_define_productset(MYWORDS "My Words"
+#     REQUIRES
+#         APP_WORDS
+#         PLUGIN_DEFAULTTOOLS
+#         PLUGIN_DOCKERS
+#         PLUGIN_PATHSHAPES
+#         PLUGIN_VARIABLES
+#         PLUGIN_TEXTSHAPE
+#         PLUGIN_PLUGINSHAPE
+#         PLUGIN_FORMULASHAPE
+# )
+# --- 8< ---
diff --git a/README.PACKAGERS b/README.PACKAGERS
index 4ebc026..375ad92 100644
--- a/README.PACKAGERS
+++ b/README.PACKAGERS
@@ -365,14 +365,14 @@ calligra_disable_product(FILTER_MPXJ_IMPORT "missing runtime deps")
 
 9.1. Runtime dependency of the Okular ODP plugin
 ------------------------------------------------
-OKULARODPGENERATOR, the plugin for Okular, in extras/okularodpgenerator, has a
-runtime dependency on the Stage engine, STAGE_PART.
+OKULAR_GENERATOR_ODP, the plugin for Okular, in extras/okularodpgenerator, has a
+runtime dependency on the Stage engine, PART_STAGE.
 
 9.2. Support for PPT, PPTX and more runtime dependency
 ------------------------------------------------------
 The Okular ODP plugin also supports the formats PPT and PPTX, if the respective
 filters FILTER_PPT_TO_ODP and FILTER_PPTX_TO_ODP are built, by the products
-OKULARGENERATOR_PPT and OKULARGENERATOR_PPTX.
+OKULAR_GENERATOR_PPT and OKULAR_GENERATOR_PPTX.
 
 In that case the files
 * libokularGenerator_{powerpoint,pptx}_calligra.desktop
diff --git a/active/CMakeLists.txt b/active/CMakeLists.txt
index 4361fb6..d6faa0a 100644
--- a/active/CMakeLists.txt
+++ b/active/CMakeLists.txt
@@ -62,9 +62,9 @@ target_link_libraries(calligraactive
     calligrastageprivate
 )
 
-if( SHOULD_BUILD_RDF )
+if( SHOULD_BUILD_FEATURE_RDF )
     target_link_libraries(calligraactive kordf)
-endif( SHOULD_BUILD_RDF )
+endif( SHOULD_BUILD_FEATURE_RDF )
 
 
 install(TARGETS calligraactive RUNTIME DESTINATION bin)
diff --git a/cmake/modules/CalligraProductSetMacros.cmake b/cmake/modules/CalligraProductSetMacros.cmake
index 697c046..bdca16c 100644
--- a/cmake/modules/CalligraProductSetMacros.cmake
+++ b/cmake/modules/CalligraProductSetMacros.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2013 Friedrich W. H. Kossebau <kossebau at kde.org>
+# Copyright (c) 2013-2014 Friedrich W. H. Kossebau <kossebau at kde.org>
 #
 # Redistribution and use is allowed according to the terms of the BSD license.
 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
@@ -86,25 +86,46 @@ macro(calligra_drop_products_on_old_flag _build_id)
   endif (DEFINED BUILD_${lowercase_build_id} AND NOT BUILD_${lowercase_build_id})
 endmacro()
 
-macro(calligra_set_productset _productset_id)
-  # be gracefull and compare the productset id case insensitive, by lowercasing
-  # also expects the productset definition filename in all lowercase
-  string(TOLOWER "${_productset_id}" lowercase_productset_id)
-  set(productset_filename "${CMAKE_SOURCE_DIR}/cmake/productsets/${lowercase_productset_id}.cmake")
-
-  if (NOT EXISTS "${productset_filename}")
-     message(FATAL_ERROR "Unknown product set: ${_productset_id}")
-  endif (NOT EXISTS "${productset_filename}")
-
-  # include the productset definition
-  include(${productset_filename})
-  if (NOT DEFINED CALLIGRA_SHOULD_BUILD_PRODUCTS)
-    message(FATAL_ERROR "Product set file \"${productset_filename}\" did not define the var CALLIGRA_SHOULD_BUILD_PRODUCTS.")
-  endif (NOT DEFINED CALLIGRA_SHOULD_BUILD_PRODUCTS)
+macro(calligra_set_productset _productset_string)
+  set(CALLIGRA_SHOULD_BUILD_PRODUCTS "")
+  # turn into list, _productset_string is not yet one
+  set(_productset_ids ${_productset_string})
+  separate_arguments(_productset_ids)
+  set(_productset_list "")
+  # _product_id could be a product, feature or product set (predefined or from file)
+  foreach(_product_id ${_productset_ids})
+    # be gracefull and compare the productset id case insensitive
+    string(TOUPPER "${_product_id}" _uppercase_product_id)
+
+    if(_uppercase_product_id STREQUAL "ALL")
+      list( APPEND CALLIGRA_SHOULD_BUILD_PRODUCTS ${CALLIGRA_ALL_PRODUCTS})
+    elseif(DEFINED SHOULD_BUILD_${_uppercase_product_id})
+      list( APPEND CALLIGRA_SHOULD_BUILD_PRODUCTS ${_uppercase_product_id})
+    else()
+      # also expects a productset definition filename in all lowercase
+      string(TOLOWER "${_product_id}" _lowercase_productset_id)
+      set(_productset_filename "${CMAKE_SOURCE_DIR}/cmake/productsets/${_lowercase_productset_id}.cmake")
+
+      if (NOT EXISTS "${_productset_filename}")
+        message(FATAL_ERROR "Unknown product, feature or product set: ${_product_id}")
+      endif (NOT EXISTS "${_productset_filename}")
+
+      # include the productset definition
+      include(${_productset_filename})
+      if(NOT CALLIGRA_PRODUCTSET_${_uppercase_product_id})
+        message(FATAL_ERROR "Product set file \"${_productset_filename}\" did not define a productset named \"${_uppercase_product_id}\".")
+      endif()
+
+      list( APPEND CALLIGRA_SHOULD_BUILD_PRODUCTS ${_uppercase_product_id})
+    endif()
+    list( APPEND _productset_list ${_uppercase_product_id})
+  endforeach(_product_id)
+
+  string(REPLACE ";" " " _productset_list "${_productset_list}")
   set(CALLIGRA_NEEDED_PRODUCTS "")
 
   message(STATUS "-------------------------------------------------------------------" )
-  message(STATUS "Configured with product set \"${_productset_id}\"")
+  message(STATUS "Configured with product set \"${_productset_list}\"")
   message(STATUS "-------------------------------------------------------------------" )
 
   # backward compatibility: BUILD_app as option or passed as cmake parameter can overwrite product set
@@ -146,24 +167,73 @@ endmacro()
 #   calligra_define_product(<product_id>
 #         [NAME] <product_name>
 #         [STAGING]
-#         [NEEDS <product_id1> [<product_id2> ...]]
-#         [WANTS <product_id1> [<product_id2> ...]]
+#         [REQUIRES <product_id1> <feature_id1> ...]
 #       )
 macro(calligra_define_product _product_id)
   # default product name to id, empty deps
   set(_product_name "${_product_id}")
   set(_needed_dep_product_ids)
-  set(_wanted_dep_product_ids)
 
-  # parse arguments: three states, "name", "needs" or "wants"
+  if(DEFINED SHOULD_BUILD_${_product_id})
+    message(FATAL_ERROR "Product \"${_product_id}\" already defined, as \"${CALLIGRA_PRODUCT_${_product_id}_name}\".")
+  endif(DEFINED SHOULD_BUILD_${_product_id})
+
+  # parse arguments: two states, "name" or "requires"
+  set(_current_arg_type "name")
+  foreach(_arg ${ARGN})
+    if(${_arg} STREQUAL "NAME")
+      set(_current_arg_type "name")
+    elseif(${_arg} STREQUAL "REQUIRES")
+      set(_current_arg_type "requires")
+    else(${_arg} STREQUAL "NAME")
+      if(${_current_arg_type} STREQUAL "name")
+        if(${_arg} STREQUAL "STAGING")
+          list(APPEND CALLIGRA_STAGING_PRODUCTS ${_product_id})
+        else(${_arg} STREQUAL "STAGING")
+          set(_product_name "${_arg}")
+        endif(${_arg} STREQUAL "STAGING")
+      elseif(${_current_arg_type} STREQUAL "requires")
+        # check that the dependency is actually existing
+        if(NOT DEFINED SHOULD_BUILD_${_arg})
+          message(FATAL_ERROR "Unknown product/feature listed as dependency for \"${_product_id}\": \"${_arg}\"")
+        elseif(CALLIGRA_PRODUCTSET_${_arg})
+          message(FATAL_ERROR "Productset cannot be a dependency for \"${_product_id}\": \"${_arg}\"")
+        endif()
+        list(APPEND _needed_dep_product_ids "${_arg}")
+      endif(${_current_arg_type} STREQUAL "name")
+    endif(${_arg} STREQUAL "NAME")
+  endforeach(_arg)
+
+  # set product vars
+  set(SHOULD_BUILD_${_product_id} FALSE)
+  set(CALLIGRA_PRODUCT_${_product_id}_name "${_product_name}")
+  set(CALLIGRA_PRODUCT_${_product_id}_needed_dependencies ${_needed_dep_product_ids})
+  list(APPEND CALLIGRA_ALL_PRODUCTS ${_product_id})
+endmacro(calligra_define_product)
+
+
+# Usage:
+#   calligra_define_feature(<feature_id>
+#         [NAME] <feature_name>
+#         [STAGING]
+#         [REQUIRES <product_id1> <feature_id1> ...]
+#       )
+macro(calligra_define_feature _product_id)
+  # default product name to id, empty deps
+  set(_product_name "${_product_id}")
+  set(_needed_dep_product_ids)
+
+  if(DEFINED SHOULD_BUILD_${_product_id})
+    message(FATAL_ERROR "Feature \"${_product_id}\" already defined, as \"${CALLIGRA_PRODUCT_${_product_id}_name}\".")
+  endif(DEFINED SHOULD_BUILD_${_product_id})
+
+  # parse arguments: two states, "name" or "requires"
   set(_current_arg_type "name")
   foreach(_arg ${ARGN})
     if(${_arg} STREQUAL "NAME")
       set(_current_arg_type "name")
-    elseif(${_arg} STREQUAL "NEEDS")
-      set(_current_arg_type "needs")
-    elseif(${_arg} STREQUAL "WANTS")
-      set(_current_arg_type "wants")
+    elseif(${_arg} STREQUAL "REQUIRES")
+      set(_current_arg_type "requires")
     else(${_arg} STREQUAL "NAME")
       if(${_current_arg_type} STREQUAL "name")
         if(${_arg} STREQUAL "STAGING")
@@ -171,29 +241,78 @@ macro(calligra_define_product _product_id)
         else(${_arg} STREQUAL "STAGING")
           set(_product_name "${_arg}")
         endif(${_arg} STREQUAL "STAGING")
-      elseif(${_current_arg_type} STREQUAL "needs")
+      elseif(${_current_arg_type} STREQUAL "requires")
         # check that the dependency is actually existing
         if(NOT DEFINED SHOULD_BUILD_${_arg})
-          message(FATAL_ERROR "Unknown product listed as dependency for ${_product_id}: ${_arg}")
+          message(FATAL_ERROR "Unknown product/feature listed as dependency for \"${_product_id}\": \"${_arg}\"")
+        elseif(CALLIGRA_PRODUCTSET_${_arg})
+          message(FATAL_ERROR "Productset cannot be a dependency for \"${_product_id}\": \"${_arg}\"")
+        endif()
+        list(APPEND _needed_dep_product_ids "${_arg}")
+      endif(${_current_arg_type} STREQUAL "name")
+    endif(${_arg} STREQUAL "NAME")
+  endforeach(_arg)
+
+  # set product vars
+  set(SHOULD_BUILD_${_product_id} FALSE)
+  set(CALLIGRA_PRODUCT_${_product_id}_name "${_product_name}")
+  set(CALLIGRA_PRODUCT_${_product_id}_needed_dependencies ${_needed_dep_product_ids})
+  list(APPEND CALLIGRA_ALL_PRODUCTS ${_product_id})
+endmacro(calligra_define_feature)
+
+
+# Usage:
+#   calligra_define_productset(<productset_id>
+#         [NAME] <productset_name>
+#         [REQUIRES <product_id1> ... <productset_id1> ...]
+#         [OPTIONAL <product_id2> ... <productset_id2> ...]
+#       )
+macro(calligra_define_productset _product_id)
+  # default product name to id, empty deps
+  set(_product_name "${_product_id}")
+  set(_needed_dep_product_ids)
+  set(_wanted_dep_product_ids)
+
+  if(DEFINED SHOULD_BUILD_${_product_id})
+    message(FATAL_ERROR "Productset \"${_product_id}\" already defined, as \"${CALLIGRA_PRODUCT_${_product_id}_name}\".")
+  endif(DEFINED SHOULD_BUILD_${_product_id})
+
+  # parse arguments: three states, "name", "requires" or "optional"
+  set(_current_arg_type "name")
+  foreach(_arg ${ARGN})
+    if(${_arg} STREQUAL "NAME")
+      set(_current_arg_type "name")
+    elseif(${_arg} STREQUAL "REQUIRES")
+      set(_current_arg_type "requires")
+    elseif(${_arg} STREQUAL "OPTIONAL")
+      set(_current_arg_type "optional")
+    else(${_arg} STREQUAL "NAME")
+      if(${_current_arg_type} STREQUAL "name")
+        set(_product_name "${_arg}")
+      elseif(${_current_arg_type} STREQUAL "requires")
+        # check that the dependency is actually existing
+        if(NOT DEFINED SHOULD_BUILD_${_arg})
+          message(FATAL_ERROR "Unknown product(set)/feature listed as dependency for \"${_product_id}\": \"${_arg}\"")
         endif(NOT DEFINED SHOULD_BUILD_${_arg})
         list(APPEND _needed_dep_product_ids "${_arg}")
-      elseif(${_current_arg_type} STREQUAL "wants")
+      elseif(${_current_arg_type} STREQUAL "optional")
         # check that the dependency is actually existing
         if(NOT DEFINED SHOULD_BUILD_${_arg})
-          message(FATAL_ERROR "Unknown product listed as dependency for ${_product_id}: ${_arg}")
+          message(FATAL_ERROR "Unknown product(set)/feature listed as dependency for \"${_product_id}\": \"${_arg}\"")
         endif(NOT DEFINED SHOULD_BUILD_${_arg})
         list(APPEND _wanted_dep_product_ids "${_arg}")
       endif(${_current_arg_type} STREQUAL "name")
     endif(${_arg} STREQUAL "NAME")
   endforeach(_arg)
 
-  # set product vars
+  # set product(set) vars
   set(SHOULD_BUILD_${_product_id} FALSE)
   set(CALLIGRA_PRODUCT_${_product_id}_name "${_product_name}")
+  set(CALLIGRA_PRODUCTSET_${_product_id} TRUE)
   set(CALLIGRA_PRODUCT_${_product_id}_needed_dependencies ${_needed_dep_product_ids})
   set(CALLIGRA_PRODUCT_${_product_id}_wanted_dependencies ${_wanted_dep_product_ids})
   list(APPEND CALLIGRA_ALL_PRODUCTS ${_product_id})
-endmacro(calligra_define_product)
+endmacro(calligra_define_productset)
 
 
 macro(calligra_log_should_build)
@@ -224,7 +343,7 @@ macro(calligra_log_should_build)
   endforeach(_product_id)
 
   if(NOT _built_dependency_product_ids STREQUAL "")
-    message(STATUS "---------- The following required products will be built ----------")
+    message(STATUS "------ The following required product(set)s/features will be built -------")
     foreach(_product_id ${_built_dependency_product_ids})
       if (DEFINED CALLIGRA_PRODUCT_${_product_id}_dependents)
         set(dependents "   [[needed by: ${CALLIGRA_PRODUCT_${_product_id}_dependents}]]")
@@ -237,7 +356,7 @@ macro(calligra_log_should_build)
     message(STATUS "")
   endif(NOT _built_dependency_product_ids STREQUAL "")
   if(NOT _not_built_dependency_product_ids STREQUAL "")
-    message(STATUS "-------- The following required products can NOT be built ---------")
+    message(STATUS "---- The following required product(set)s/features can NOT be built ------")
     foreach(_product_id ${_not_built_dependency_product_ids})
       if (DEFINED CALLIGRA_PRODUCT_${_product_id}_dependents)
         set(dependents "   [[needed by: ${CALLIGRA_PRODUCT_${_product_id}_dependents}]]")
@@ -249,15 +368,89 @@ macro(calligra_log_should_build)
     endforeach(_product_id)
     message(STATUS "")
   endif(NOT _not_built_dependency_product_ids STREQUAL "")
-  message(STATUS "-------------- The following products will be built ---------------")
+  message(STATUS "------ The following product(set)s/features will be built ---------")
   foreach(_product_id ${_built_product_ids})
       message(STATUS "${_product_id}:  ${CALLIGRA_PRODUCT_${_product_id}_name}" )
   endforeach(_product_id)
   if(NOT _not_built_product_ids STREQUAL "")
-    message(STATUS "\n-------------- The following products can NOT be built ------------")
+    message(STATUS "\n------ The following product(set)s/features can NOT be built ------")
     foreach(_product_id ${_not_built_product_ids})
         message(STATUS "${_product_id}:  ${CALLIGRA_PRODUCT_${_product_id}_name}  |  ${BUILD_${_product_id}_DISABLE_REASON}" )
     endforeach(_product_id)
   endif(NOT _not_built_product_ids STREQUAL "")
   message(STATUS "-------------------------------------------------------------------" )
 endmacro(calligra_log_should_build)
+
+
+macro(calligra_product_deps_report_stylebybuild _output _product_id)
+  if(SHOULD_BUILD_${_product_id})
+    set(${_output} "filled")
+  else()
+    set(${_output} "solid")
+  endif()
+endmacro(calligra_product_deps_report_stylebybuild)
+
+# Usage:
+#   calligra_product_deps_report(<filename_without_extension>)
+macro(calligra_product_deps_report _filename)
+  set(_dot "${_dot}# This is a graphviz file. It shows the internal product dependencies of Calligra.\n")
+  set(_dot "${_dot}# dot -Tsvg ${_filename}.dot > ${_filename}.svg\n")
+  set(_dot "${_dot}# dot -Tpng ${_filename}.dot > ${_filename}.png\n")
+  set(_dot "${_dot}digraph calligra {\n")
+  set(_dot "${_dot}node [colorscheme=set312]\;\n") # pastel19, set312 or accent8
+  set(_dot "${_dot}rankdir=LR\;\n")
+
+  foreach(_product_id ${CALLIGRA_ALL_PRODUCTS})
+    set(_color 11)
+    set(_shape "box")
+    set(_style "")
+
+    if(CALLIGRA_PRODUCTSET_${_product_id})
+      set(_color 1)
+      set(_shape "folder")
+    elseif(_product_id MATCHES "^LIB_")
+      set(_color 2)
+      set(_shape "box")
+    elseif(_product_id MATCHES "^FILTER_")
+      set(_color 3)
+      set(_shape "component")
+    elseif(_product_id MATCHES "^PLUGIN_")
+      set(_color 4)
+      set(_shape "component")
+    elseif(_product_id MATCHES "^PART_")
+      set(_color 5)
+      set(_shape "component")
+    elseif(_product_id MATCHES "^APP_")
+      set(_color 6)
+      set(_shape "box")
+      set(_style "rounded,")
+    elseif(_product_id MATCHES "^BUILDUTIL_")
+      set(_color 7)
+      set(_shape "diamond")
+      set(_style "rounded,")
+    elseif(_product_id MATCHES "^FEATURE_")
+      set(_color 8)
+    elseif(_product_id MATCHES "^OKULAR_")
+      set(_color 9)
+      set(_shape "component")
+    elseif(_product_id MATCHES "^FILEMANAGER_")
+      set(_color 10)
+      set(_shape "box")
+    endif()
+
+    calligra_product_deps_report_stylebybuild(_stylebybuild ${_product_id})
+
+    set(_dot "${_dot}\"${_product_id}\" [fillcolor=${_color}, shape=${_shape}, style=\"${_style}${_stylebybuild}\"];\n")
+
+    foreach(_dependent_product_id ${CALLIGRA_PRODUCT_${_product_id}_needed_dependencies})
+      set(_edges "${_edges}\"${_product_id}\" -> \"${_dependent_product_id}\"\;\n")
+    endforeach(_dependent_product_id)
+    foreach(_dependent_product_id ${CALLIGRA_PRODUCT_${_product_id}_wanted_dependencies})
+      set(_edges "${_edges}\"${_product_id}\" -> \"${_dependent_product_id}\" [style=dashed]\;\n")
+    endforeach(_dependent_product_id)
+  endforeach(_product_id)
+
+  set(_dot "${_dot}${_edges}}")
+  set(_dot "${_dot}}\n")
+  file(WRITE ${CMAKE_BINARY_DIR}/${_filename}.dot ${_dot})
+endmacro(calligra_product_deps_report)
diff --git a/cmake/productsets/README b/cmake/productsets/README
index 5460955..ad1ba5c 100644
--- a/cmake/productsets/README
+++ b/cmake/productsets/README
@@ -1,94 +1,3 @@
-This directory stores the productsets.
+This directory stores additional productsets.
 
-When building Calligra a lot of different things are created and installed.
-All these things are grouped into so-called products. Each product is defined in
-the toplevel CMakeList.txt by a call of calligra_define_product, with the id of
-the product as first parameter.
-These product ids are used to generate cmake variables SHOULD_BUILD_${PRODUCT_ID}
-which then are used to control if the things belonging to the product are build,
-usually with
-if(SHOULD_BUILD_SOME_PRODUCT_ID)
-    [...]
-endif(SHOULD_BUILD_SOME_PRODUCT_ID)
-.
-Dependencies of products on other products are also defined. Using this information
-it is also ensured that if an internal dependency cannot be built due to missing
-external dependencies, all depending products will also not built.
-
-There can be also meta-products, which simply require a certain set of other
-products but are never used directly to control what is build (e.g. WORDS).
-
-At time of writing there are 4 predefined product sets, which you can all see in
-this directory: ALL (default), DESKTOP, ACTIVE, CREATIVE.
-
-You can add your own productset by adding a file in this directory and selecting
-that productset when calling cmake
-
-
-How to add my own product set?
-==============================
-
-The file must be named with the name of the productset in lowercase and have
-the extension ".cmake". The content should be a cmake command that sets the
-variable "CALLIGRA_SHOULD_BUILD_PRODUCTS" to the list of products the productset
-should consist of.
-
-For the possible products have a look at the list of product definitions in the
-toplevel "CMakeLists.txt" file.
-
-
-Example:
-
-You want a productset "PUREWORDS". For that you add a file name "purewords.cmake"
-into this directory, with the content:
---- 8< ---
-set( CALLIGRA_SHOULD_BUILD_PRODUCTS
-    WORDS
-)
---- 8< ---
-
-When calling cmake you use the string "PUREWORDS" as value for the parameter
-"PRODUCTSET, like this:
-    cmake -DPRODUCTSET=PUREWORDS [other parameters]
-
-
-How to add another product?
-===========================
-
-1. Define the product by a call of calligra_define_product,
-   e.g.
-
-   calligra_define_product(MYPRODUCT "title of product")
-
-   For the product id use a proper prefix (LIB_, PLUGIN_, FILTER_, ...) or
-   postfix (_APP, _PART, ...), whatever is appropriate.
-
-2. Extend that call with NEEDS or WANTS argument sections, if the product has
-   hard or soft internal dependencies on other products
-   Products that are listed as dependencies have to be defined before
-   (see also the API doc in cmake/modules/CalligraProductSetMacros.cmake)
-   E.g.
-
-   calligra_define_product(MYPRODUCT "title of product"  NEEDS P1 P2  WANTS P3)
-
-3. Add a rule when to not build the product, in the section "Detect which
-   products can be compile" of the toplevel CMakeLists.txt. Each product should
-   have their own boolean expression when to set the build flag to FALSE,
-   e.g.
-
-   if (PLATFORMX OR NOT EXTERNAL_DEP_X_FOUND)
-     set(SHOULD_BUILD_MYPRODUCT FALSE)
-   endif (PLATFORMX OR NOT EXTERNAL_DEP_X_FOUND)
-
-4. Wrap everything belonging to the product with the build flag of the product.
-   Ideally this is done around subdirectory inclusions, results in easier code.
-   e.g.
-
-   if (SHOULD_BUILD_MYPRODUCT)
-     add_subdirectory(myproduct)
-   endif (SHOULD_BUILD_MYPRODUCT)
-
-5. Tag the product as STAGING, if it is not yet ready for release, but already
-   integrated in the master branch, e.g.
-
-   calligra_define_product(MYPRODUCT "title of product" STAGING NEEDS P1)
+Please read the explanation in the toplevel file "CalligraProducts.cmake".
diff --git a/cmake/productsets/active.cmake b/cmake/productsets/active.cmake
deleted file mode 100644
index 089a085..0000000
--- a/cmake/productsets/active.cmake
+++ /dev/null
@@ -1,23 +0,0 @@
-#defines the set of products commonly wanted for Calligra Active
-
-set( CALLIGRA_SHOULD_BUILD_PRODUCTS
-    ACTIVE
-# extras
-    EXTRA_PROPERTIES
-    EXTRA_THUMBNAIL
-# plugins
-    PLUGIN_DEFAULTTOOLS
-    PLUGIN_PATHSHAPES
-    PLUGIN_VARIABLES
-    PLUGIN_CHARTSHAPE
-    PLUGIN_PICTURESHAPE
-    PLUGIN_TEXTSHAPE
-    PLUGIN_PLUGINSHAPE
-    PLUGIN_FORMULASHAPE
-    PLUGIN_VECTORSHAPE
-    PLUGIN_VIDEOSHAPE
-# filters
-    FILTER_SHEETS_IMPORT
-    FILTER_STAGE_IMPORT
-    FILTER_WORDS_IMPORT
-)
diff --git a/cmake/productsets/all.cmake b/cmake/productsets/all.cmake
deleted file mode 100644
index 4619358..0000000
--- a/cmake/productsets/all.cmake
+++ /dev/null
@@ -1,59 +0,0 @@
-#defines the set of products commonly wanted if everything should be build
-
-set( CALLIGRA_SHOULD_BUILD_PRODUCTS
-# desktop apps
-    AUTHOR
-    BRAINDUMP
-    FLOW
-    KARBON
-    KEXI
-    KRITA
-    PLAN
-    SHEETS
-    STAGE
-    WORDS
-# PA apps
-    ACTIVE
-# plugins
-    PLUGIN_COLORENGINES
-    PLUGIN_MUSICSHAPE
-    PLUGIN_SPACENAVIGATOR
-    PLUGIN_ARTISTICTEXTSHAPE
-    PLUGIN_DOCKERS
-    PLUGIN_TEXTEDITING
-    PLUGIN_KEXI_SPREADSHEETMIGRATION
-    PLUGIN_DEFAULTTOOLS
-    PLUGIN_PATHSHAPES
-    PLUGIN_VARIABLES
-    PLUGIN_CHARTSHAPE
-    PLUGIN_PICTURESHAPE
-    PLUGIN_TEXTSHAPE
-    PLUGIN_PLUGINSHAPE
-    PLUGIN_FORMULASHAPE
-    PLUGIN_VIDEOSHAPE
-    PLUGIN_VECTORSHAPE
-    PLUGIN_REPORTING
-    PLUGIN_GOOGLEDOCS
-    PLUGIN_THREEDSHAPE
-    PLUGIN_SHEETS_PIVOTTABLES
-# feature
-    SCRIPTING
-    RDF
-# extras
-    CALLIGRA
-    CONVERTER
-    DOC
-    EXTRA_PROPERTIES
-    EXTRA_THUMBNAIL
-    EXTRA_QUICKPRINT
-    EXTRA_FILEMANAGER_TEMPLATES
-    OKULARODPGENERATOR
-    OKULARGENERATOR_PPT
-    OKULARGENERATOR_PPTX
-    OKULAR_GENERATOR_ODT
-    OKULAR_GENERATOR_DOC
-    OKULAR_GENERATOR_DOCX
-# developer utils
-    CSTESTER
-    DEVTOOLS
-)
diff --git a/cmake/productsets/creative.cmake b/cmake/productsets/creative.cmake
index 2b8fc45..9423a53 100644
--- a/cmake/productsets/creative.cmake
+++ b/cmake/productsets/creative.cmake
@@ -1,21 +1,10 @@
 #defines the set of products commonly wanted by Creationists ;)
 
-set( CALLIGRA_SHOULD_BUILD_PRODUCTS
-    KARBON
-    KRITA
-    CONVERTER
-# extras
-    EXTRA_PROPERTIES
-    EXTRA_THUMBNAIL
-    EXTRA_QUICKPRINT
-# plugins
-    PLUGIN_COLORENGINES
-    PLUGIN_SPACENAVIGATOR
-    PLUGIN_ARTISTICTEXTSHAPE
-    PLUGIN_DOCKERS
-    PLUGIN_TEXTEDITING
-    PLUGIN_DEFAULTTOOLS
-    PLUGIN_PATHSHAPES
-    PLUGIN_PICTURESHAPE
-    PLUGIN_TEXTSHAPE
+calligra_define_productset(CREATIVE "Creative suite"
+    OPTIONAL
+        # apps
+        KARBON
+        KRITA
+        # extras
+        APP_CONVERTER
 )
diff --git a/cmake/productsets/desktop.cmake b/cmake/productsets/desktop.cmake
index 83db3a1..55e4674 100644
--- a/cmake/productsets/desktop.cmake
+++ b/cmake/productsets/desktop.cmake
@@ -1,54 +1,26 @@
 #defines the set of products commonly wanted for classic Desktop environment
 
-set( CALLIGRA_SHOULD_BUILD_PRODUCTS
-# apps
-    AUTHOR
-    BRAINDUMP
-    FLOW
-    KARBON
-    KEXI
-    KRITA
-    PLAN
-    SHEETS
-    STAGE
-    WORDS
-# plugins
-    PLUGIN_COLORENGINES
-    PLUGIN_MUSICSHAPE
-    PLUGIN_SPACENAVIGATOR
-    PLUGIN_ARTISTICTEXTSHAPE
-    PLUGIN_DOCKERS
-    PLUGIN_TEXTEDITING
-    PLUGIN_KEXI_SPREADSHEETMIGRATION
-    PLUGIN_DEFAULTTOOLS
-    PLUGIN_PATHSHAPES
-    PLUGIN_VARIABLES
-    PLUGIN_CHARTSHAPE
-    PLUGIN_PICTURESHAPE
-    PLUGIN_TEXTSHAPE
-    PLUGIN_PLUGINSHAPE
-    PLUGIN_FORMULASHAPE
-    PLUGIN_VIDEOSHAPE
-    PLUGIN_VECTORSHAPE
-    PLUGIN_REPORTING
-    PLUGIN_GOOGLEDOCS
-    PLUGIN_THREEDSHAPE
-    PLUGIN_SHEETS_PIVOTTABLES
-# feature
-    SCRIPTING
-    RDF
-# extras
-    CALLIGRA
-    CONVERTER
-    DOC
-    EXTRA_PROPERTIES
-    EXTRA_THUMBNAIL
-    EXTRA_QUICKPRINT
-    EXTRA_FILEMANAGER_TEMPLATES
-    OKULARODPGENERATOR
-    OKULARGENERATOR_PPT
-    OKULARGENERATOR_PPTX
-    OKULAR_GENERATOR_ODT
-    OKULAR_GENERATOR_DOC
-    OKULAR_GENERATOR_DOCX
+calligra_define_productset(DESKTOP "Calligra for Desktop"
+    OPTIONAL
+        # apps
+        AUTHOR
+        BRAINDUMP
+        FLOW
+        KARBON
+        KEXI
+        KRITA
+        PLAN
+        SHEETS
+        STAGE
+        WORDS
+        # features
+        FEATURE_SCRIPTING
+        FEATURE_RDF
+        # extras
+        APP_CALLIGRA
+        APP_CONVERTER
+        FILEMANAGER
+        OKULAR
+        # docs
+        DOC
 )
diff --git a/cmake/productsets/kexi+sheets.cmake b/cmake/productsets/kexi+sheets.cmake
deleted file mode 100644
index 3fe2f48..0000000
--- a/cmake/productsets/kexi+sheets.cmake
+++ /dev/null
@@ -1,4 +0,0 @@
-set( CALLIGRA_SHOULD_BUILD_PRODUCTS
-    KEXI
-    SHEETS
-)
diff --git a/cmake/productsets/kexi.cmake b/cmake/productsets/kexi.cmake
deleted file mode 100644
index 7dd2345..0000000
--- a/cmake/productsets/kexi.cmake
+++ /dev/null
@@ -1,95 +0,0 @@
-# Kexi for Desktop environment
-
-set( CALLIGRA_SHOULD_BUILD_PRODUCTS
-# apps
-#    AUTHOR
-#    BRAINDUMP
-#    FLOW
-#    KARBON
-    KEXI
-     KEXI_APP
-#    KRITA
-#    PLAN
-#    SHEETS
-#     SHEETS_PART
-#    STAGE
-#    WORDS
-# plugins
-#    PLUGIN_COLORENGINES
-#    PLUGIN_MUSICSHAPE
-#    PLUGIN_SPACENAVIGATOR
-#    PLUGIN_ARTISTICTEXTSHAPE
-#    PLUGIN_DOCKERS
-#    PLUGIN_TEXTEDITING
-#    PLUGIN_KEXI_SPREADSHEETMIGRATION
-#    PLUGIN_DEFAULTTOOLS
-#    PLUGIN_PATHSHAPES
-#    PLUGIN_VARIABLES
-#    PLUGIN_CHARTSHAPE
-#    PLUGIN_PICTURESHAPE
-#    PLUGIN_TEXTSHAPE
-#    PLUGIN_PLUGINSHAPE
-#    PLUGIN_FORMULASHAPE
-#    PLUGIN_VIDEOSHAPE
-#    PLUGIN_VECTORSHAPE
-    PLUGIN_REPORTING
-#    PLUGIN_STAGING
-# filters
-#    FILTER_XLSX_TO_ODS
-#    FILTER_XLS_TO_SHEETS
-#    FILTER_SHEETS_TO_XLS
-#    FILTER_CSV_TO_SHEETS
-#    FILTER_SHEETS_TO_CSV
-#    FILTER_APPLIXSPREAD_TO_KSPREAD
-#    FILTER_DBASE_TO_KSPREAD
-#    FILTER_GNUMERIC_TO_SHEETS
-#    FILTER_SHEETS_TO_GNUMERIC
-#    FILTER_OPENCALC_TO_SHEETS
-#    FILTER_SHEETS_TO_OPENCALC
-#    FILTER_QUATTROPRO_TO_SHEETS
-#    FILTER_HTML_TO_ODS
-#    FILTER_SHEETS_TO_HTML
-#    FILTER_KSPREAD_TO_LATEX
-#    FILTER_VISIO_TO_ODG
-#    FILTER_KPR_TO_OPD
-#    FILTER_PPT_TO_ODP
-#    FILTER_PPTX_TO_ODP
-#    FILTER_DOC_TO_ODT
-#    FILTER_DOCX_TO_ODT
-#    FILTER_WORDPERFECT_TO_ODT
-#    FILTER_WORKS_TO_ODT
-#    FILTER_APPLIXWORD_TO_ODT
-#    FILTER_ASCII_TO_WORDS
-#    FILTER_ODT_TO_ASCII
-#    FILTER_RTF_TO_ODT
-#    FILTER_ODT_TO_MOBI
-#    FILTER_ODT_TO_EPUB2
-#    FILTER_ODT_TO_HTML
-#    FILTER_MPXJ_IMPORT
-#    FILTER_EPS_TO_SVG_AI
-#    FILTER_XFIG_TO_ODG
-#    FILTER_PDF_TO_SVG
-#    FILTER_WPG_TO_SVG
-#    FILTER_KARBON_TO_IMAGE
-#    FILTER_KARBON_TO_SVG
-#    FILTER_SVG_TO_KARBON
-#    FILTER_KARBON_TO_WMF
-#    FILTER_WMF_TO_SVG
-#    FILTER_KARBON1X_TO_KARBON
-# feature
-    SCRIPTING
-# extras
-#    CALLIGRA
-#    CONVERTER
-#    DOC
-#    EXTRA_PROPERTIES
-#    EXTRA_THUMBNAIL
-#    EXTRA_QUICKPRINT
-#    OKULARODPGENERATOR
-# libs
-    LIB_KDCHART
-    LIB_KOPROPERTY
-    LIB_KOREPORT
-    LIB_CALLIGRADB
-    CALLIGRA_LIBS
-)
diff --git a/cmake/productsets/krita.cmake b/cmake/productsets/krita.cmake
deleted file mode 100644
index 2c814d3..0000000
--- a/cmake/productsets/krita.cmake
+++ /dev/null
@@ -1,20 +0,0 @@
-# Krita-only set of tools
-
-set( CALLIGRA_SHOULD_BUILD_PRODUCTS
-    KRITA
-    CONVERTER
-# extras
-    EXTRA_PROPERTIES
-    EXTRA_THUMBNAIL
-    EXTRA_QUICKPRINT
-# plugins
-    PLUGIN_COLORENGINES
-    PLUGIN_SPACENAVIGATOR
-    PLUGIN_ARTISTICTEXTSHAPE
-    PLUGIN_DOCKERS
-    PLUGIN_TEXTEDITING
-    PLUGIN_DEFAULTTOOLS
-    PLUGIN_PATHSHAPES
-    PLUGIN_PICTURESHAPE
-    PLUGIN_TEXTSHAPE
-)
diff --git a/cmake/productsets/osx.cmake b/cmake/productsets/osx.cmake
index 8e32b13..de48eb8 100644
--- a/cmake/productsets/osx.cmake
+++ b/cmake/productsets/osx.cmake
@@ -1,38 +1,20 @@
-#defines the set of products commonly wanted for classic Desktop environment
+#defines the set of products commonly wanted for classic Desktop environment with OS X
+# TODO: platform specific things should be handled in toplevel CMakeLists.txt
 
-set( CALLIGRA_SHOULD_BUILD_PRODUCTS
-# apps
-    AUTHOR
-    FLOW
-#    KEXI
-    KRITA
-    SHEETS
-    STAGE
-    WORDS
-    BRAINDUMP
-    KARBON
-# plugins
-    PLUGIN_COLORENGINES
-    PLUGIN_MUSICSHAPE
-    PLUGIN_ARTISTICTEXTSHAPE
-    PLUGIN_DOCKERS
-    PLUGIN_TEXTEDITING
-#    PLUGIN_KEXI_SPREADSHEETMIGRATION
-    PLUGIN_DEFAULTTOOLS
-    PLUGIN_PATHSHAPES
-    PLUGIN_VARIABLES
-    PLUGIN_CHARTSHAPE
-    PLUGIN_PICTURESHAPE
-    PLUGIN_TEXTSHAPE
-    PLUGIN_PLUGINSHAPE
-    PLUGIN_FORMULASHAPE
-    PLUGIN_VECTORSHAPE
-#    PLUGIN_REPORTING
-# extras
-    CALLIGRA
-    CONVERTER
-    EXTRA_PROPERTIES
-    EXTRA_THUMBNAIL
-    EXTRA_QUICKPRINT
-    EXTRA_FILEMANAGER_TEMPLATES
+calligra_define_productset(DESKTOP "Calligra for Desktop"
+    OPTIONAL
+        # apps
+        AUTHOR
+        FLOW
+        #    KEXI
+        KRITA
+        SHEETS
+        STAGE
+        WORDS
+        BRAINDUMP
+        KARBON
+        # extras
+        APP_CALLIGRA
+        APP_CONVERTER
+        FILEMANAGER
 )
diff --git a/cmake/productsets/sheets.cmake b/cmake/productsets/sheets.cmake
deleted file mode 100644
index 5de2103..0000000
--- a/cmake/productsets/sheets.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-set( CALLIGRA_SHOULD_BUILD_PRODUCTS  SHEETS)
- 
diff --git a/devtools/CMakeLists.txt b/devtools/CMakeLists.txt
index bfa5599..feb2cba 100644
--- a/devtools/CMakeLists.txt
+++ b/devtools/CMakeLists.txt
@@ -1,12 +1,12 @@
-if(SHOULD_BUILD_CSTESTER)
+if(SHOULD_BUILD_APP_CSTESTER)
     add_subdirectory( cstester )
-endif(SHOULD_BUILD_CSTESTER)
+endif(SHOULD_BUILD_APP_CSTESTER)
 
-if (SHOULD_BUILD_DEVTOOLS)
+if (SHOULD_BUILD_APP_DEVTOOLS)
     add_subdirectory(slidecompare)
     add_subdirectory(scripts)
-endif (SHOULD_BUILD_DEVTOOLS)
+endif (SHOULD_BUILD_APP_DEVTOOLS)
 
-if (SHOULD_BUILD_RNG2CPP)
+if (SHOULD_BUILD_BUILDTOOL_RNG2CPP)
     add_subdirectory(rng2cpp)
-endif (SHOULD_BUILD_RNG2CPP)
+endif (SHOULD_BUILD_BUILDTOOL_RNG2CPP)
diff --git a/extras/CMakeLists.txt b/extras/CMakeLists.txt
index a534b0e..6b00109 100644
--- a/extras/CMakeLists.txt
+++ b/extras/CMakeLists.txt
@@ -1,30 +1,30 @@
-if(SHOULD_BUILD_CALLIGRA)
+if(SHOULD_BUILD_APP_CALLIGRA)
   add_subdirectory( calligra )
-endif(SHOULD_BUILD_CALLIGRA)
+endif(SHOULD_BUILD_APP_CALLIGRA)
 
-if (SHOULD_BUILD_CONVERTER)
+if (SHOULD_BUILD_APP_CONVERTER)
     add_subdirectory( converter )
-endif(SHOULD_BUILD_CONVERTER)
+endif(SHOULD_BUILD_APP_CONVERTER)
 
-if (SHOULD_BUILD_EXTRA_PROPERTIES)
+if (SHOULD_BUILD_FILEMANAGER_PROPERTIES)
     add_subdirectory( properties )
-endif(SHOULD_BUILD_EXTRA_PROPERTIES)
+endif(SHOULD_BUILD_FILEMANAGER_PROPERTIES)
 
-if (SHOULD_BUILD_EXTRA_THUMBNAIL)
+if (SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     add_subdirectory( thumbnail )
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
 
-if (SHOULD_BUILD_EXTRA_QUICKPRINT)
+if (SHOULD_BUILD_FILEMANAGER_QUICKPRINT)
     add_subdirectory( quickprint )
-endif(SHOULD_BUILD_EXTRA_QUICKPRINT)
+endif(SHOULD_BUILD_FILEMANAGER_QUICKPRINT)
 
-if(SHOULD_BUILD_EXTRA_FILEMANAGER_TEMPLATES)
+if(SHOULD_BUILD_FILEMANAGER_TEMPLATES)
     add_subdirectory( filemanagertemplates )
-endif(SHOULD_BUILD_EXTRA_FILEMANAGER_TEMPLATES)
+endif(SHOULD_BUILD_FILEMANAGER_TEMPLATES)
 
-if(SHOULD_BUILD_OKULARODPGENERATOR)
+if(SHOULD_BUILD_OKULAR_GENERATOR_ODP)
     add_subdirectory( okularodpgenerator )
-endif(SHOULD_BUILD_OKULARODPGENERATOR)
+endif(SHOULD_BUILD_OKULAR_GENERATOR_ODP)
 
 if(SHOULD_BUILD_OKULAR_GENERATOR_ODT)
     add_subdirectory( okularodtgenerator )
diff --git a/extras/quickprint/CMakeLists.txt b/extras/quickprint/CMakeLists.txt
index 9ad61d2..659b8ed 100644
--- a/extras/quickprint/CMakeLists.txt
+++ b/extras/quickprint/CMakeLists.txt
@@ -2,28 +2,28 @@
 set( QUICK_PRINT_SERVICES
 )
 
-if( SHOULD_BUILD_FLOW )
+if( SHOULD_BUILD_APP_FLOW )
     set( QUICK_PRINT_SERVICES ${QUICK_PRINT_SERVICES} flow_print.desktop )
-endif( SHOULD_BUILD_FLOW )
+endif( SHOULD_BUILD_APP_FLOW )
 
-if( SHOULD_BUILD_KARBON )
+if( SHOULD_BUILD_APP_KARBON )
     set( QUICK_PRINT_SERVICES ${QUICK_PRINT_SERVICES} karbon_print.desktop )
-endif( SHOULD_BUILD_KARBON )
+endif( SHOULD_BUILD_APP_KARBON )
 
-if( SHOULD_BUILD_KRITA )
+if( SHOULD_BUILD_APP_KRITA )
     set( QUICK_PRINT_SERVICES ${QUICK_PRINT_SERVICES} krita_print.desktop )
-endif( SHOULD_BUILD_KRITA )
+endif( SHOULD_BUILD_APP_KRITA )
 
-if( SHOULD_BUILD_SHEETS_APP )
+if( SHOULD_BUILD_APP_SHEETS )
     set( QUICK_PRINT_SERVICES ${QUICK_PRINT_SERVICES} sheets_print.desktop )
-endif( SHOULD_BUILD_SHEETS_APP )
+endif( SHOULD_BUILD_APP_SHEETS )
 
-if( SHOULD_BUILD_STAGE_APP )
+if( SHOULD_BUILD_APP_STAGE )
     set( QUICK_PRINT_SERVICES ${QUICK_PRINT_SERVICES} stage_print.desktop )
-endif( SHOULD_BUILD_STAGE_APP )
+endif( SHOULD_BUILD_APP_STAGE )
 
-if( SHOULD_BUILD_WORDS_APP )
+if( SHOULD_BUILD_APP_WORDS )
     set( QUICK_PRINT_SERVICES ${QUICK_PRINT_SERVICES} words_print.desktop )
-endif( SHOULD_BUILD_WORDS_APP )
+endif( SHOULD_BUILD_APP_WORDS )
 
 install( FILES ${QUICK_PRINT_SERVICES} DESTINATION ${SERVICES_INSTALL_DIR}/ServiceMenus)
diff --git a/extras/thumbnail/CMakeLists.txt b/extras/thumbnail/CMakeLists.txt
index 92156b3..d0dd623 100644
--- a/extras/thumbnail/CMakeLists.txt
+++ b/extras/thumbnail/CMakeLists.txt
@@ -8,37 +8,37 @@ kde4_add_plugin(calligrathumbnail ${calligrathumbnail_SRCS})
 target_link_libraries(calligrathumbnail komain)
 install(TARGETS calligrathumbnail  DESTINATION ${PLUGIN_INSTALL_DIR})
 
-if( SHOULD_BUILD_KRITA OR SHOULD_BUILD_FLOW OR SHOULD_BUILD_KARBON )
+if( SHOULD_BUILD_APP_KRITA OR SHOULD_BUILD_APP_FLOW OR SHOULD_BUILD_APP_KARBON )
     set(calligraimagethumbnail_SRCS calligracreator.cpp)
     kde4_add_plugin(calligraimagethumbnail ${calligraimagethumbnail_SRCS})
     macro_add_compile_flags(calligraimagethumbnail "-DNO_ICON_BLENDING")
     target_link_libraries(calligraimagethumbnail komain)
     install(TARGETS calligraimagethumbnail  DESTINATION ${PLUGIN_INSTALL_DIR})
-endif( SHOULD_BUILD_KRITA OR SHOULD_BUILD_FLOW OR SHOULD_BUILD_KARBON )
+endif( SHOULD_BUILD_APP_KRITA OR SHOULD_BUILD_APP_FLOW OR SHOULD_BUILD_APP_KARBON )
 
 # thumbnailing for the native opendocument formats
 set( THUMBNAIL_SERVICES
 )
 
 # both flow and karbon load odg natively, so if any is build add support for odg
-if( SHOULD_BUILD_FLOW OR SHOULD_BUILD_KARBON )
-    set( THUMBNAIL_SERVICES ${THUMBNAIL_SERVICES} calligra_odg_thumbnail.desktop )
-endif( SHOULD_BUILD_FLOW OR SHOULD_BUILD_KARBON )
+if( SHOULD_BUILD_APP_FLOW OR SHOULD_BUILD_APP_KARBON )
+    list( APPEND THUMBNAIL_SERVICES calligra_odg_thumbnail.desktop )
+endif( SHOULD_BUILD_APP_FLOW OR SHOULD_BUILD_APP_KARBON )
 
-if( SHOULD_BUILD_KRITA )
-    set( THUMBNAIL_SERVICES ${THUMBNAIL_SERVICES} krita_kra_thumbnail.desktop )
-endif( SHOULD_BUILD_KRITA )
+if( SHOULD_BUILD_APP_KRITA )
+    list( APPEND THUMBNAIL_SERVICES krita_kra_thumbnail.desktop )
+endif( SHOULD_BUILD_APP_KRITA )
 
-if( SHOULD_BUILD_SHEETS_PART )
-    set( THUMBNAIL_SERVICES ${THUMBNAIL_SERVICES} sheets_ods_thumbnail.desktop )
-endif( SHOULD_BUILD_SHEETS_PART )
+if( SHOULD_BUILD_PART_SHEETS )
+    list( APPEND THUMBNAIL_SERVICES sheets_ods_thumbnail.desktop )
+endif( SHOULD_BUILD_PART_SHEETS )
 
-if( SHOULD_BUILD_STAGE_PART )
-    set( THUMBNAIL_SERVICES ${THUMBNAIL_SERVICES} stage_odp_thumbnail.desktop )
-endif( SHOULD_BUILD_STAGE_PART )
+if( SHOULD_BUILD_PART_STAGE )
+    list( APPEND THUMBNAIL_SERVICES stage_odp_thumbnail.desktop )
+endif( SHOULD_BUILD_PART_STAGE )
 
-if( SHOULD_BUILD_WORDS_PART )
-    set( THUMBNAIL_SERVICES ${THUMBNAIL_SERVICES} words_odt_thumbnail.desktop )
-endif( SHOULD_BUILD_WORDS_PART )
+if( SHOULD_BUILD_PART_WORDS )
+    list( APPEND THUMBNAIL_SERVICES words_odt_thumbnail.desktop )
+endif( SHOULD_BUILD_PART_WORDS )
 
 install( FILES ${THUMBNAIL_SERVICES} DESTINATION ${SERVICES_INSTALL_DIR})
diff --git a/filters/flow/visio/import/CMakeLists.txt b/filters/flow/visio/import/CMakeLists.txt
index 7f040f0..dde9ec2 100644
--- a/filters/flow/visio/import/CMakeLists.txt
+++ b/filters/flow/visio/import/CMakeLists.txt
@@ -20,6 +20,6 @@ target_link_libraries(calligra_filter_vsdx2odg komain ${LIBODFGEN_LIBRARIES} ${L
 install(TARGETS calligra_filter_vsdx2odg DESTINATION ${PLUGIN_INSTALL_DIR})
 install(FILES calligra_filter_vsdx2odg.desktop DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install(FILES flow_vsdx_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
diff --git a/filters/flow/wpg/import/CMakeLists.txt b/filters/flow/wpg/import/CMakeLists.txt
index caee3b4..34eab50 100644
--- a/filters/flow/wpg/import/CMakeLists.txt
+++ b/filters/flow/wpg/import/CMakeLists.txt
@@ -20,6 +20,6 @@ target_link_libraries(calligra_filter_wpg2odg komain ${LIBODFGEN_LIBRARIES} ${LI
 install(TARGETS calligra_filter_wpg2odg DESTINATION ${PLUGIN_INSTALL_DIR})
 install(FILES calligra_filter_wpg2odg.desktop DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install(FILES flow_wpg_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
diff --git a/filters/karbon/karbon1.x/CMakeLists.txt b/filters/karbon/karbon1.x/CMakeLists.txt
index 87bdb73..482cc65 100644
--- a/filters/karbon/karbon1.x/CMakeLists.txt
+++ b/filters/karbon/karbon1.x/CMakeLists.txt
@@ -19,6 +19,6 @@ install(TARGETS calligra_filter_karbon1x2karbon DESTINATION ${PLUGIN_INSTALL_DIR
 
 install( FILES calligra_filter_karbon1x2karbon.desktop DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES karbon_karbon1x_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
diff --git a/filters/karbon/wmf/CMakeLists.txt b/filters/karbon/wmf/CMakeLists.txt
index c25ed2c..13532ed 100644
--- a/filters/karbon/wmf/CMakeLists.txt
+++ b/filters/karbon/wmf/CMakeLists.txt
@@ -19,9 +19,9 @@ install(TARGETS calligra_filter_wmf2svg
 install(FILES  calligra_filter_wmf2svg.desktop
         DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install(FILES  karbon_wmf_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
 
 endif(SHOULD_BUILD_FILTER_WMF_TO_SVG)
 
diff --git a/filters/karbon/wpg/CMakeLists.txt b/filters/karbon/wpg/CMakeLists.txt
index ffa7742..5f0c060 100644
--- a/filters/karbon/wpg/CMakeLists.txt
+++ b/filters/karbon/wpg/CMakeLists.txt
@@ -10,6 +10,6 @@ target_link_libraries(calligra_filter_wpg2svg komain ${LIBWPG_LIBRARIES} ${LIBRE
 install(TARGETS calligra_filter_wpg2svg DESTINATION ${PLUGIN_INSTALL_DIR})
 install(FILES calligra_filter_wpg2svg.desktop DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install(FILES karbon_wpg_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
diff --git a/filters/karbon/xfig/CMakeLists.txt b/filters/karbon/xfig/CMakeLists.txt
index 1e0e2c6..26038f8 100644
--- a/filters/karbon/xfig/CMakeLists.txt
+++ b/filters/karbon/xfig/CMakeLists.txt
@@ -16,6 +16,6 @@ install(TARGETS calligra_filter_xfig2odg  DESTINATION ${PLUGIN_INSTALL_DIR} )
 
 install( FILES  calligra_filter_xfig2odg.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES  karbon_xfig_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
diff --git a/filters/sheets/excel/import/CMakeLists.txt b/filters/sheets/excel/import/CMakeLists.txt
index 07aa186..c9b1efd 100644
--- a/filters/sheets/excel/import/CMakeLists.txt
+++ b/filters/sheets/excel/import/CMakeLists.txt
@@ -62,7 +62,7 @@ install(TARGETS calligra_filter_xls2ods DESTINATION ${PLUGIN_INSTALL_DIR})
 
 install( FILES  calligra_filter_xls2ods.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES sheets_excel_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
 
diff --git a/filters/sheets/xlsx/CMakeLists.txt b/filters/sheets/xlsx/CMakeLists.txt
index 80d51aa..e819631 100644
--- a/filters/sheets/xlsx/CMakeLists.txt
+++ b/filters/sheets/xlsx/CMakeLists.txt
@@ -40,9 +40,9 @@ install( FILES
   DESTINATION ${SERVICES_INSTALL_DIR}
 )
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES sheets_xlsx_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
 
 ########## unit tests ###################
 
diff --git a/filters/stage/keynote/import/CMakeLists.txt b/filters/stage/keynote/import/CMakeLists.txt
index f8d5781..a1e0b4d 100644
--- a/filters/stage/keynote/import/CMakeLists.txt
+++ b/filters/stage/keynote/import/CMakeLists.txt
@@ -20,9 +20,9 @@ target_link_libraries(calligra_filter_key2odp komain ${LIBREVENGE_LIBRARIES} ${L
 install(TARGETS calligra_filter_key2odp DESTINATION ${PLUGIN_INSTALL_DIR})
 install(FILES calligra_filter_key2odp.desktop DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install(FILES stage_key_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
 
 if (SHARED_MIME_INFO_FOUND)
     install(FILES x-iwork-keynote-sffkey.xml DESTINATION ${XDG_MIME_INSTALL_DIR})
diff --git a/filters/stage/kpr2odf/CMakeLists.txt b/filters/stage/kpr2odf/CMakeLists.txt
index 31c69b0..8809b261 100644
--- a/filters/stage/kpr2odf/CMakeLists.txt
+++ b/filters/stage/kpr2odf/CMakeLists.txt
@@ -12,6 +12,6 @@ target_link_libraries(calligra_filter_kpr2odp komain)
 install(TARGETS calligra_filter_kpr2odp DESTINATION ${PLUGIN_INSTALL_DIR})
 install( FILES  calligra_filter_kpr2odp.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES  stage_kpr_thumbnail.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
diff --git a/filters/stage/powerpoint/CMakeLists.txt b/filters/stage/powerpoint/CMakeLists.txt
index 60e1ccc..90b55c7 100644
--- a/filters/stage/powerpoint/CMakeLists.txt
+++ b/filters/stage/powerpoint/CMakeLists.txt
@@ -25,9 +25,9 @@ target_link_libraries(calligra_filter_ppt2odp ppttoodplib komain)
 install(TARGETS calligra_filter_ppt2odp  DESTINATION ${PLUGIN_INSTALL_DIR})
 install( FILES  calligra_filter_ppt2odp.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES  stage_powerpoint_thumbnail.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
 
 if(SHOULD_BUILD_OKULARGENERATOR_PPT)
     install( FILES libokularGenerator_powerpoint_calligra.desktop okularPowerpoint_calligra.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
diff --git a/filters/stage/pptx/CMakeLists.txt b/filters/stage/pptx/CMakeLists.txt
index 31aef35..b46e5e3 100644
--- a/filters/stage/pptx/CMakeLists.txt
+++ b/filters/stage/pptx/CMakeLists.txt
@@ -39,9 +39,9 @@ install( FILES
   DESTINATION ${SERVICES_INSTALL_DIR}
 )
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES stage_pptx_thumbnail.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
 
 if(SHOULD_BUILD_OKULARGENERATOR_PPTX)
     install( FILES libokularGenerator_pptx_calligra.desktop okularPptx_calligra.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
diff --git a/filters/words/docx/import/CMakeLists.txt b/filters/words/docx/import/CMakeLists.txt
index d9f0cec..375e974 100644
--- a/filters/words/docx/import/CMakeLists.txt
+++ b/filters/words/docx/import/CMakeLists.txt
@@ -69,9 +69,9 @@ install( FILES
   DESTINATION ${SERVICES_INSTALL_DIR}
 )
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES words_docx_thumbnail.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
 
 if(SHOULD_BUILD_OKULAR_GENERATOR_DOCX)
     install( FILES libokularGenerator_docx_calligra.desktop okularDocx_calligra.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
diff --git a/filters/words/msword-odf/CMakeLists.txt b/filters/words/msword-odf/CMakeLists.txt
index 8bd3806..717aabd 100644
--- a/filters/words/msword-odf/CMakeLists.txt
+++ b/filters/words/msword-odf/CMakeLists.txt
@@ -31,9 +31,9 @@ install(TARGETS calligra_filter_doc2odt  DESTINATION ${PLUGIN_INSTALL_DIR})
 
 install( FILES  calligra_filter_doc2odt.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES  words_msword_thumbnail.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
 
 if(SHOULD_BUILD_OKULAR_GENERATOR_DOC)
     install( FILES libokularGenerator_doc_calligra.desktop okularDoc_calligra.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
diff --git a/filters/words/rtf/import/CMakeLists.txt b/filters/words/rtf/import/CMakeLists.txt
index df6f50d..62f5d20 100644
--- a/filters/words/rtf/import/CMakeLists.txt
+++ b/filters/words/rtf/import/CMakeLists.txt
@@ -11,6 +11,6 @@ target_link_libraries(calligra_filter_rtf2odt RtfReader komain)
 install(TARGETS calligra_filter_rtf2odt  DESTINATION ${PLUGIN_INSTALL_DIR})
 install( FILES  calligra_filter_rtf2odt.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES  words_rtf_thumbnail.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
diff --git a/filters/words/wordperfect/import/CMakeLists.txt b/filters/words/wordperfect/import/CMakeLists.txt
index 6e8446f..4fa8a0a 100644
--- a/filters/words/wordperfect/import/CMakeLists.txt
+++ b/filters/words/wordperfect/import/CMakeLists.txt
@@ -23,6 +23,6 @@ install(TARGETS calligra_filter_wpd2odt DESTINATION ${PLUGIN_INSTALL_DIR})
 
 install( FILES calligra_filter_wpd2odt.desktop DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES words_wpd_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
diff --git a/filters/words/works/import/CMakeLists.txt b/filters/words/works/import/CMakeLists.txt
index 93d40fb..3ac307f 100644
--- a/filters/words/works/import/CMakeLists.txt
+++ b/filters/words/works/import/CMakeLists.txt
@@ -20,6 +20,6 @@ target_link_libraries(calligra_filter_wps2odt komain ${LIBODFGEN_LIBRARIES} ${LI
 install(TARGETS calligra_filter_wps2odt DESTINATION ${PLUGIN_INSTALL_DIR})
 install(FILES calligra_filter_wps2odt.desktop DESTINATION ${SERVICES_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install(FILES words_wps_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
diff --git a/kexi/plugins/CMakeLists.txt b/kexi/plugins/CMakeLists.txt
index bf389f2..d73d110 100644
--- a/kexi/plugins/CMakeLists.txt
+++ b/kexi/plugins/CMakeLists.txt
@@ -13,9 +13,9 @@ else (KEXI_MOBILE)
   add_subdirectory( migration )
   add_subdirectory( importexport )
 
-  if(SHOULD_BUILD_SCRIPTING AND KEXI_SCRIPTS_SUPPORT)
+  if(SHOULD_BUILD_FEATURE_SCRIPTING AND KEXI_SCRIPTS_SUPPORT)
      add_subdirectory(scripting)
-  endif(SHOULD_BUILD_SCRIPTING AND KEXI_SCRIPTS_SUPPORT)
+  endif(SHOULD_BUILD_FEATURE_SCRIPTING AND KEXI_SCRIPTS_SUPPORT)
   add_subdirectory( shapes )
 endif (KEXI_MOBILE)
 
diff --git a/krita/plugins/formats/ora/CMakeLists.txt b/krita/plugins/formats/ora/CMakeLists.txt
index cd1a605..0ea7784 100644
--- a/krita/plugins/formats/ora/CMakeLists.txt
+++ b/krita/plugins/formats/ora/CMakeLists.txt
@@ -36,9 +36,9 @@ install(TARGETS kritaoraexport  DESTINATION ${PLUGIN_INSTALL_DIR})
 install( FILES  krita_ora_import.desktop krita_ora_export.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
 install( PROGRAMS  krita_ora.desktop  DESTINATION ${XDG_APPS_INSTALL_DIR})
 
-if(SHOULD_BUILD_EXTRA_THUMBNAIL)
+if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
     install( FILES  krita_ora_thumbnail.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
-endif(SHOULD_BUILD_EXTRA_THUMBNAIL)
+endif(SHOULD_BUILD_FILEMANAGER_THUMBNAIL)
 
 
 install(FILES krita_ora.xml DESTINATION ${XDG_MIME_INSTALL_DIR})
diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt
index d482a4b..f4f232a 100644
--- a/libs/CMakeLists.txt
+++ b/libs/CMakeLists.txt
@@ -1,4 +1,4 @@
-if (SHOULD_BUILD_CALLIGRA_LIBS)
+if (SHOULD_BUILD_LIB_CALLIGRA)
     add_subdirectory( koplugin )
     add_subdirectory( widgetutils )
     add_subdirectory( widgets )
@@ -10,11 +10,11 @@ if (SHOULD_BUILD_CALLIGRA_LIBS)
     add_subdirectory( pigment )
     add_subdirectory( main )
     add_subdirectory( kundo2 )
-endif (SHOULD_BUILD_CALLIGRA_LIBS)
+endif (SHOULD_BUILD_LIB_CALLIGRA)
 
-if (SHOULD_BUILD_SCRIPTING)
+if (SHOULD_BUILD_FEATURE_SCRIPTING)
     add_subdirectory( kokross )
-endif (SHOULD_BUILD_SCRIPTING)
+endif (SHOULD_BUILD_FEATURE_SCRIPTING)
 
 if (SHOULD_BUILD_LIB_KOVECTORIMAGE)
     add_subdirectory( vectorimage )
@@ -37,6 +37,6 @@ if (SHOULD_BUILD_LIB_KOREPORT)
     add_subdirectory( koreport )
 endif (SHOULD_BUILD_LIB_KOREPORT)
 
-if (SHOULD_BUILD_RDF)
+if (SHOULD_BUILD_FEATURE_RDF)
     add_subdirectory( rdf )
-endif (SHOULD_BUILD_RDF)
+endif (SHOULD_BUILD_FEATURE_RDF)
diff --git a/libs/kotext/CMakeLists.txt b/libs/kotext/CMakeLists.txt
index 9f9e506..44fa937 100644
--- a/libs/kotext/CMakeLists.txt
+++ b/libs/kotext/CMakeLists.txt
@@ -119,18 +119,18 @@ set(kotext_LIB_SRCS
     KoTextCommandBase.cpp
 )
 
-if( SHOULD_BUILD_RDF )
+if( SHOULD_BUILD_FEATURE_RDF )
     set(kotext_LIB_SRCS ${kotext_LIB_SRCS}
         KoTextRdfCore.cpp
     )
-endif( SHOULD_BUILD_RDF )
+endif( SHOULD_BUILD_FEATURE_RDF )
 
 kde4_add_library(kotext SHARED ${kotext_LIB_SRCS})
 
 target_link_libraries(kotext flake)
-if( SHOULD_BUILD_RDF )
+if( SHOULD_BUILD_FEATURE_RDF )
     target_link_libraries(kotext ${SOPRANO_LIBRARIES})
-endif( SHOULD_BUILD_RDF )
+endif( SHOULD_BUILD_FEATURE_RDF )
 target_link_libraries(kotext LINK_INTERFACE_LIBRARIES flake)
 
 if( FONTCONFIG_FOUND )
diff --git a/plan/plugins/CMakeLists.txt b/plan/plugins/CMakeLists.txt
index e06e339..f2ecc34 100644
--- a/plan/plugins/CMakeLists.txt
+++ b/plan/plugins/CMakeLists.txt
@@ -1,6 +1,6 @@
-if(SHOULD_BUILD_SCRIPTING)
+if(SHOULD_BUILD_FEATURE_SCRIPTING)
   add_subdirectory(scripting)
-endif(SHOULD_BUILD_SCRIPTING)
+endif(SHOULD_BUILD_FEATURE_SCRIPTING)
 
 add_subdirectory(schedulers)
 
diff --git a/plugins/textshape/CMakeLists.txt b/plugins/textshape/CMakeLists.txt
index f8d75f5..f7fcdb4 100644
--- a/plugins/textshape/CMakeLists.txt
+++ b/plugins/textshape/CMakeLists.txt
@@ -171,9 +171,9 @@ kde4_add_ui_files(textshape_SRCS
 kde4_add_plugin(calligra_shape_text ${textshape_SRCS})
 
 target_link_libraries(calligra_shape_text kotext kotextlayout komain ${EXTRA_LIBS})
-if( SHOULD_BUILD_RDF )
+if( SHOULD_BUILD_FEATURE_RDF )
     target_link_libraries(calligra_shape_text ${SOPRANO_LIBRARIES})
-endif( SHOULD_BUILD_RDF )
+endif( SHOULD_BUILD_FEATURE_RDF )
 
 
 install(TARGETS calligra_shape_text DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/sheets/CMakeLists.txt b/sheets/CMakeLists.txt
index a45829d..59fc2ec 100644
--- a/sheets/CMakeLists.txt
+++ b/sheets/CMakeLists.txt
@@ -7,7 +7,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/interfaces
                     ${Boost_INCLUDE_DIR}
                     ${EIGEN2_INCLUDE_DIR} )
 
-if (SHOULD_BUILD_SHEETS_PART)
+if (SHOULD_BUILD_PART_SHEETS)
 
 add_subdirectory( data )
 add_subdirectory( shape )
@@ -401,11 +401,11 @@ install( FILES
 
 DESTINATION ${INCLUDE_INSTALL_DIR}/sheets/commands COMPONENT Devel)
 
-endif (SHOULD_BUILD_SHEETS_PART)
+endif (SHOULD_BUILD_PART_SHEETS)
 
 ########### APP ###############
 
-if (SHOULD_BUILD_SHEETS_APP)
+if (SHOULD_BUILD_APP_SHEETS)
 
 SET (calligrasheets_KDEINIT_SRCS part/Main.cpp )
 
@@ -429,4 +429,4 @@ install(TARGETS calligrasheets  ${INSTALL_TARGETS_DEFAULT_ARGS})
 install( PROGRAMS  sheets.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
 install( FILES sheets.appdata.xml DESTINATION ${SHARE_INSTALL_PREFIX}/appdata/)
 
-endif (SHOULD_BUILD_SHEETS_APP)
+endif (SHOULD_BUILD_APP_SHEETS)
diff --git a/sheets/plugins/CMakeLists.txt b/sheets/plugins/CMakeLists.txt
index 6a45389..46a709b 100644
--- a/sheets/plugins/CMakeLists.txt
+++ b/sheets/plugins/CMakeLists.txt
@@ -1,5 +1,5 @@
 add_subdirectory( calendar )
 add_subdirectory( solver )
-if (SHOULD_BUILD_SCRIPTING)
+if (SHOULD_BUILD_FEATURE_SCRIPTING)
   add_subdirectory( scripting )
-endif (SHOULD_BUILD_SCRIPTING)
+endif (SHOULD_BUILD_FEATURE_SCRIPTING)
diff --git a/stage/CMakeLists.txt b/stage/CMakeLists.txt
index eaf8ecf..4336790 100644
--- a/stage/CMakeLists.txt
+++ b/stage/CMakeLists.txt
@@ -5,15 +5,15 @@ include_directories(
     ${KOMAIN_INCLUDES}
 )
 
-if (SHOULD_BUILD_STAGE_PART)
+if (SHOULD_BUILD_PART_STAGE)
     add_subdirectory( part )
     add_subdirectory( pics )
     add_subdirectory( templates )
     add_subdirectory( plugins )
     add_subdirectory( data )
     add_subdirectory( styles )
-endif (SHOULD_BUILD_STAGE_PART)
+endif (SHOULD_BUILD_PART_STAGE)
 
-if (SHOULD_BUILD_STAGE_APP)
+if (SHOULD_BUILD_APP_STAGE)
     add_subdirectory( app )
-endif (SHOULD_BUILD_STAGE_APP)
+endif (SHOULD_BUILD_APP_STAGE)
diff --git a/words/CMakeLists.txt b/words/CMakeLists.txt
index 033db4d..a9b2b65 100644
--- a/words/CMakeLists.txt
+++ b/words/CMakeLists.txt
@@ -8,14 +8,14 @@ if(KDE4_BUILD_TESTS)
     add_definitions(-DCOMPILING_TESTS)
 endif(KDE4_BUILD_TESTS)
 
-if (SHOULD_BUILD_WORDS_PART)
+if (SHOULD_BUILD_PART_WORDS)
     add_subdirectory( templates )
     add_subdirectory( pics )
     add_subdirectory( part )
     add_subdirectory( plugins )
     add_subdirectory( styles )
-endif (SHOULD_BUILD_WORDS_PART)
+endif (SHOULD_BUILD_PART_WORDS)
 
-if (SHOULD_BUILD_WORDS_APP)
+if (SHOULD_BUILD_APP_WORDS)
     add_subdirectory( app )
-endif (SHOULD_BUILD_WORDS_APP)
+endif (SHOULD_BUILD_APP_WORDS)
diff --git a/words/part/CMakeLists.txt b/words/part/CMakeLists.txt
index 2bf1b0b..41f675b 100644
--- a/words/part/CMakeLists.txt
+++ b/words/part/CMakeLists.txt
@@ -80,13 +80,13 @@ set(wordsprivate_LIB_SRCS
     author/CoverImage.cpp
     author/CoverSelectionDialog.cpp
 )
-if( SHOULD_BUILD_RDF )
+if( SHOULD_BUILD_FEATURE_RDF )
     set(wordsprivate_LIB_SRCS ${wordsprivate_LIB_SRCS}
         dockers/KWRdfDocker.cpp
         dockers/KWRdfDockerFactory.cpp
         dockers/KWRdfDockerTree.cpp
     )
-endif( SHOULD_BUILD_RDF )
+endif( SHOULD_BUILD_FEATURE_RDF )
 
 kde4_add_ui_files(wordsprivate_LIB_SRCS
     dialogs/KWFrameConnectSelector.ui
@@ -103,19 +103,19 @@ kde4_add_ui_files(wordsprivate_LIB_SRCS
     pagetool/SimpleHeaderFooterWidget.ui
     author/CoverSelectionDialog.ui
 )
-if( SHOULD_BUILD_RDF )
+if( SHOULD_BUILD_FEATURE_RDF )
     kde4_add_ui_files(wordsprivate_LIB_SRCS
         dockers/KWRdfDocker.ui
     )
-endif( SHOULD_BUILD_RDF )
+endif( SHOULD_BUILD_FEATURE_RDF )
 
 
 kde4_add_library(wordsprivate SHARED ${wordsprivate_LIB_SRCS})
 
 target_link_libraries(wordsprivate komain kotextlayout)
-if( SHOULD_BUILD_RDF )
+if( SHOULD_BUILD_FEATURE_RDF )
     target_link_libraries(wordsprivate kordf)
-endif( SHOULD_BUILD_RDF )
+endif( SHOULD_BUILD_FEATURE_RDF )
 target_link_libraries(wordsprivate LINK_INTERFACE_LIBRARIES komain)
 
 set_target_properties(wordsprivate
@@ -169,7 +169,7 @@ DESTINATION ${INCLUDE_INSTALL_DIR}/words/part/frames COMPONENT Devel)
 
 ###What follows is calligraauthor section###
 
-if (SHOULD_BUILD_AUTHOR)
+if (SHOULD_BUILD_APP_AUTHOR)
 
 ########### AuthorPart Library ###############
 
@@ -210,4 +210,4 @@ install( FILES author/authorpart.desktop  DESTINATION ${SERVICES_INSTALL_DIR})
 install( PROGRAMS author/author.desktop  DESTINATION ${XDG_APPS_INSTALL_DIR})
 install( FILES author/authorrc DESTINATION ${CONFIG_INSTALL_DIR} )
 
-endif (SHOULD_BUILD_AUTHOR)
+endif (SHOULD_BUILD_APP_AUTHOR)
diff --git a/words/part/tests/CMakeLists.txt b/words/part/tests/CMakeLists.txt
index 6fd9b0c..1d66fb2 100644
--- a/words/part/tests/CMakeLists.txt
+++ b/words/part/tests/CMakeLists.txt
@@ -54,10 +54,10 @@ target_link_libraries(TestClipToPage wordsprivate ${QT_QTTEST_LIBRARY})
 
 ########### next target ###############
 
-if( SHOULD_BUILD_RDF )
+if( SHOULD_BUILD_FEATURE_RDF )
 #  set(TestRdf_SRCS TestRdf.cpp )
 #  kde4_add_unit_test(TestRdf TESTNAME words-part-TestRdf ${TestRdf_SRCS})
 #  target_link_libraries(TestRdf wordsprivate ${QT_QTTEST_LIBRARY})
-endif( SHOULD_BUILD_RDF )
+endif( SHOULD_BUILD_FEATURE_RDF )
 
 
diff --git a/words/plugins/CMakeLists.txt b/words/plugins/CMakeLists.txt
index 229cff8..0a9da33 100644
--- a/words/plugins/CMakeLists.txt
+++ b/words/plugins/CMakeLists.txt
@@ -1,4 +1,4 @@
-if (SHOULD_BUILD_SCRIPTING)
+if (SHOULD_BUILD_FEATURE_SCRIPTING)
     #TODO port to textlayout-rework
     #add_subdirectory(scripting)
-endif (SHOULD_BUILD_SCRIPTING)
+endif (SHOULD_BUILD_FEATURE_SCRIPTING)



More information about the calligra-devel mailing list