diff --git a/CMakeLists.txt b/CMakeLists.txt index 7fd1b3c1d4..325f104deb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,730 +1,645 @@ project(krita) message(STATUS "Using CMake version: ${CMAKE_VERSION}") cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) set(MIN_QT_VERSION 5.6.0) option(OVERRIDE_QT_VERSION "Use this to make it possible to build with Qt < 5.6.0. There will be bugs." OFF) if (OVERRIDE_QT_VERSION) set(MIN_QT_VERSION 5.4.0) endif() set(MIN_FRAMEWORKS_VERSION 5.7.0) if (POLICY CMP0002) cmake_policy(SET CMP0002 OLD) endif() if (POLICY CMP0017) cmake_policy(SET CMP0017 NEW) endif () if (POLICY CMP0022) cmake_policy(SET CMP0022 OLD) endif () if (POLICY CMP0026) cmake_policy(SET CMP0026 OLD) endif() if (POLICY CMP0042) cmake_policy(SET CMP0042 NEW) endif() if (POLICY CMP0046) cmake_policy(SET CMP0046 OLD) endif () if (POLICY CMP0059) cmake_policy(SET CMP0059 OLD) endif() if (POLICY CMP0063) cmake_policy(SET CMP0063 OLD) endif() if (POLICY CMP0054) cmake_policy(SET CMP0054 OLD) endif() if (POLICY CMP0064) cmake_policy(SET CMP0064 OLD) endif() if (APPLE) set(APPLE_SUPPRESS_X11_WARNING TRUE) set(KDE_SKIP_RPATH_SETTINGS TRUE) set(CMAKE_MACOSX_RPATH 1) set(BUILD_WITH_INSTALL_RPATH 1) add_definitions(-mmacosx-version-min=10.9 -Wno-deprecated-register) endif() ###################### ####################### ## Constants defines ## ####################### ###################### # define common versions of Krita applications, used to generate kritaversion.h # update these version for every release: set(KRITA_VERSION_STRING "3.0.92") set(KRITA_STABLE_VERSION_MAJOR 3) # 3 for 3.x, 4 for 4.x, etc. set(KRITA_STABLE_VERSION_MINOR 0) # 0 for 3.0, 1 for 3.1, etc. set(KRITA_VERSION_RELEASE 91) # 89 for Alpha, increase for next test releases, set 0 for first Stable, etc. #set(KRITA_ALPHA 1) # uncomment only for Alpha set(KRITA_BETA 1) # uncomment only for Beta #set(KRITA_RC 1) # uncomment only for RC set(KRITA_YEAR 2016) # update every year if(NOT DEFINED KRITA_ALPHA AND NOT DEFINED KRITA_BETA AND NOT DEFINED KRITA_RC) set(KRITA_STABLE 1) # do not edit endif() message(STATUS "Krita version: ${KRITA_VERSION_STRING}") # Define the generic version of the Krita libraries here # This makes it easy to advance it when the next Krita release comes. # 14 was the last GENERIC_KRITA_LIB_VERSION_MAJOR of the previous Krita series # (2.x) so we're starting with 15 in 3.x series. if(KRITA_STABLE_VERSION_MAJOR EQUAL 3) math(EXPR GENERIC_KRITA_LIB_VERSION_MAJOR "${KRITA_STABLE_VERSION_MINOR} + 15") else() # let's make sure we won't forget to update the "15" message(FATAL_ERROR "Reminder: please update offset == 15 used to compute GENERIC_KRITA_LIB_VERSION_MAJOR to something bigger") endif() set(GENERIC_KRITA_LIB_VERSION "${GENERIC_KRITA_LIB_VERSION_MAJOR}.0.0") set(GENERIC_KRITA_LIB_SOVERSION "${GENERIC_KRITA_LIB_VERSION_MAJOR}") LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules") LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/kde_macro") # fetch git revision for the current build set(KRITA_GIT_SHA1_STRING "") set(KRITA_GIT_BRANCH_STRING "") include(GetGitRevisionDescription) get_git_head_revision(GIT_REFSPEC GIT_SHA1) get_git_branch(GIT_BRANCH) if(GIT_SHA1 AND GIT_BRANCH) string(SUBSTRING ${GIT_SHA1} 0 7 GIT_SHA1) set(KRITA_GIT_SHA1_STRING ${GIT_SHA1}) set(KRITA_GIT_BRANCH_STRING ${GIT_BRANCH}) endif() 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) set(RELEASE_BUILD_TYPES "release" "relwithdebinfo" "minsizerel") list(FIND RELEASE_BUILD_TYPES "${CMAKE_BUILD_TYPE_TOLOWER}" INDEX) if (INDEX EQUAL -1) set(RELEASE_BUILD FALSE) else() set(RELEASE_BUILD TRUE) endif() endif() message(STATUS "Release build: ${RELEASE_BUILD}") ############ ############# ## Options ## ############# ############ include(FeatureSummary) option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binary. Should be used by packagers only or Krita developers. Only switch off when you're an artist optimizing a build for your very own machine." ON) add_feature_info("Packagers' Build" PACKAGERS_BUILD "Support several CPU arch in one binary. Recommended for packages. Switch this off to make a build for only your machine.") if (WIN32) option(USE_DRMINGW "Support the Dr. Mingw crash handler (only on windows)" ON) add_feature_info("Dr. Mingw" USE_DRMINGW "Enable the Dr. Mingw crash handler") endif () option(HIDE_SAFE_ASSERTS "Don't show message box for \"safe\" asserts, just ignore them automatically and dump a message to the terminal." ON) configure_file(config-hide-safe-asserts.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-hide-safe-asserts.h) add_feature_info("Safe Asserts" HIDE_SAFE_ASSERTS "Don't show message box for \"safe\" asserts, just ignore them automatically and dump a message to the terminal.") option(FOUNDATION_BUILD "A Foundation build is a binary release build that can package some extra things like color themes. Linux distributions that build and install Krita into a default system location should not define this option to true." OFF) add_feature_info("Foundation Build" FOUNDATION_BUILD "A Foundation build is a binary release build that can package some extra things like color themes. Linux distributions that build and install Krita into a default system location should not define this option to true.") ####################### ######################## ## Productset setting ## ######################## ####################### # For predefined productsets see the definitions in KritaProducts.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) include(MacroJPEG) include(GenerateTestExportHeader) - -# get the definitions of products, features and product sets -include(KritaProducts.cmake) - -set(PRODUCTSET_DEFAULT "ALL") -# temporary migration support -if (CREATIVEONLY) - set(WARN_ABOUT_CREATIVEONLY TRUE) - set(PRODUCTSET_DEFAULT "CREATIVE") -endif () - -if(NOT PRODUCTSET) - set(PRODUCTSET ${PRODUCTSET_DEFAULT} CACHE STRING "Set of products/features to build" FORCE) -endif() - -if (RELEASE_BUILD) - set(CALLIGRA_SHOULD_BUILD_STAGING FALSE) -else () - set(CALLIGRA_SHOULD_BUILD_STAGING TRUE) -endif () - -# finally choose products/features to build -calligra_set_productset(${PRODUCTSET}) - ######################## ######################### ## Look for KDE and Qt ## ######################### ######################## find_package(ECM 1.7.0 REQUIRED NOMODULE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) include(ECMOptionalAddSubdirectory) include(ECMAddAppIcon) include(ECMSetupVersion) include(ECMMarkNonGuiExecutable) include(ECMGenerateHeaders) include(GenerateExportHeader) include(ECMMarkAsTest) include(ECMInstallIcons) include(CMakePackageConfigHelpers) include(WriteBasicConfigVersionFile) include(CheckFunctionExists) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings) # do not reorder to be alphabetical: this is the order in which the frameworks # depend on each other. find_package(KF5 ${MIN_FRAMEWORKS_VERSION} REQUIRED COMPONENTS Archive Config WidgetsAddons Completion CoreAddons GuiAddons I18n ItemModels ItemViews WindowSystem ) # KConfig deprecated authorizeKAction. In order to be warning free, # compile with the updated function when the dependency is new enough. # Remove this (and the uses of the define) when the minimum KF5 # version is >= 5.24.0. if (${KF5Config_VERSION} VERSION_LESS "5.24.0" ) message("Old KConfig (< 5.24.0) found.") add_definitions(-DKCONFIG_BEFORE_5_24) endif() find_package(Qt5 ${MIN_QT_VERSION} REQUIRED COMPONENTS Core Gui Widgets Xml Network PrintSupport Svg Test Concurrent ) include (MacroAddFileDependencies) include (MacroBoolTo01) include (MacroEnsureOutOfSourceBuild) macro_ensure_out_of_source_build("Compiling Krita inside the source directory is not possible. Please refer to the build instruction https://community.kde.org/Krita#Build_Instructions") # Note: OPTIONAL_COMPONENTS does not seem to be reliable # (as of ECM 5.15.0, CMake 3.2) if (NOT WIN32 AND NOT APPLE) find_package(Qt5 ${MIN_QT_VERSION} REQUIRED X11Extras) find_package(Qt5DBus ${MIN_QT_VERSION} QUIET) set(HAVE_DBUS ${Qt5DBus_FOUND}) set_package_properties(Qt5DBus PROPERTIES DESCRIPTION "Qt DBUS integration" URL "http://www.qt.io/" TYPE OPTIONAL PURPOSE "Optionally used to provide a dbus api on Linux") find_package(KF5KIO ${MIN_FRAMEWORKS_VERSION} QUIET) macro_bool_to_01(KF5KIO_FOUND HAVE_KIO) set_package_properties(KF5KIO PROPERTIES DESCRIPTION "KDE's KIO Framework" URL "http://api.kde.org/frameworks-api/frameworks5-apidocs/kio/html/index.html" TYPE OPTIONAL PURPOSE "Optionally used for recent document handling") find_package(KF5Crash ${MIN_FRAMEWORKS_VERSION} QUIET) macro_bool_to_01(KF5Crash_FOUND HAVE_KCRASH) set_package_properties(KF5Crash PROPERTIES DESCRIPTION "KDE's Crash Handler" URL "http://api.kde.org/frameworks-api/frameworks5-apidocs/kcrash/html/index.html" TYPE OPTIONAL PURPOSE "Optionally used to provide crash reporting on Linux") find_package(X11 REQUIRED COMPONENTS Xinput) set(HAVE_X11 TRUE) add_definitions(-DHAVE_X11) find_package(XCB COMPONENTS XCB ATOM) set(HAVE_XCB ${XCB_FOUND}) else() set(HAVE_DBUS FALSE) set(HAVE_X11 FALSE) set(HAVE_XCB FALSE) endif() add_definitions( -DQT_USE_QSTRINGBUILDER -DQT_STRICT_ITERATORS -DQT_NO_SIGNALS_SLOTS_KEYWORDS -DQT_USE_FAST_OPERATOR_PLUS -DQT_USE_FAST_CONCATENATION -DQT_NO_URL_CAST_FROM_STRING -DQT_DISABLE_DEPRECATED_BEFORE=0 ) add_definitions(-DTRANSLATION_DOMAIN=\"krita\") # # The reason for this mode is that the Debug mode disable inlining # if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS_KRITADEVS "-O3 -g" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fext-numeric-literals") endif() if(UNIX) set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};m") endif() if(WIN32) if(MSVC) # C4522: 'class' : multiple assignment operators specified set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4522") endif() endif() # enable exceptions globally kde_enable_exceptions() # only with this definition will all the FOO_TEST_EXPORT macro do something # TODO: check if this can be moved to only those places which make use of it, # to reduce global compiler definitions that would trigger a recompile of # everything on a change (like adding/removing tests to/from the build) if(BUILD_TESTING) add_definitions(-DCOMPILING_TESTS) endif() set(KRITA_DEFAULT_TEST_DATA_DIR ${CMAKE_SOURCE_DIR}/sdk/tests/data/) macro(macro_add_unittest_definitions) add_definitions(-DFILES_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data/") add_definitions(-DFILES_OUTPUT_DIR="${CMAKE_CURRENT_BINARY_DIR}") add_definitions(-DFILES_DEFAULT_DATA_DIR="${KRITA_DEFAULT_TEST_DATA_DIR}") endmacro() # overcome some platform incompatibilities if(WIN32) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/winquirks) add_definitions(-D_USE_MATH_DEFINES) add_definitions(-DNOMINMAX) set(WIN32_PLATFORM_NET_LIBS ws2_32.lib netapi32.lib) endif() # set custom krita plugin installdir set(KRITA_PLUGIN_INSTALL_DIR ${LIB_INSTALL_DIR}/kritaplugins) ########################### ############################ ## Required dependencies ## ############################ ########################### find_package(PNG REQUIRED) if (APPLE) # this is not added correctly on OSX -- see http://forum.kde.org/viewtopic.php?f=139&t=101867&p=221242#p221242 include_directories(SYSTEM ${PNG_INCLUDE_DIR}) endif() add_definitions(-DBOOST_ALL_NO_LIB) find_package(Boost REQUIRED COMPONENTS system) # for pigment and stage include_directories(${Boost_INCLUDE_DIRS}) ## ## Test for GNU Scientific Library ## find_package(GSL) set_package_properties(GSL PROPERTIES URL "http://www.gnu.org/software/gsl" TYPE RECOMMENDED PURPOSE "Required by Krita's Transform tool.") macro_bool_to_01(GSL_FOUND HAVE_GSL) configure_file(config-gsl.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-gsl.h ) ########################### ############################ ## Optional dependencies ## ############################ ########################### ## ## Check for OpenEXR ## find_package(ZLIB) set_package_properties(ZLIB PROPERTIES DESCRIPTION "Compression library" URL "http://www.zlib.net/" TYPE OPTIONAL PURPOSE "Optionally used by the G'Mic and the PSD plugins") macro_bool_to_01(ZLIB_FOUND HAVE_ZLIB) find_package(OpenEXR) set_package_properties(OpenEXR PROPERTIES DESCRIPTION "High dynamic-range (HDR) image file format" URL "http://www.openexr.com" TYPE OPTIONAL PURPOSE "Required by the Krita OpenEXR filter") macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR) set(LINK_OPENEXR_LIB) if(OPENEXR_FOUND) include_directories(SYSTEM ${OPENEXR_INCLUDE_DIR}) set(LINK_OPENEXR_LIB ${OPENEXR_LIBRARIES}) add_definitions(${OPENEXR_DEFINITIONS}) endif() find_package(TIFF) set_package_properties(TIFF PROPERTIES DESCRIPTION "TIFF Library and Utilities" URL "http://www.remotesensing.org/libtiff" TYPE OPTIONAL PURPOSE "Required by the Krita TIFF filter") find_package(JPEG) set_package_properties(JPEG PROPERTIES DESCRIPTION "Free library for JPEG image compression. Note: libjpeg8 is NOT supported." URL "http://www.libjpeg-turbo.org" TYPE OPTIONAL PURPOSE "Required by the Krita JPEG filter") set(LIBRAW_MIN_VERSION "0.16") find_package(LibRaw ${LIBRAW_MIN_VERSION}) set_package_properties(LibRaw PROPERTIES DESCRIPTION "Library to decode RAW images" URL "http://www.libraw.org" TYPE OPTIONAL PURPOSE "Required to build the raw import plugin") find_package(FFTW3) set_package_properties(FFTW3 PROPERTIES DESCRIPTION "A fast, free C FFT library" URL "http://www.fftw.org/" TYPE OPTIONAL PURPOSE "Required by the Krita for fast convolution operators and some G'Mic features") macro_bool_to_01(FFTW3_FOUND HAVE_FFTW3) find_package(OCIO) set_package_properties(OCIO PROPERTIES DESCRIPTION "The OpenColorIO Library" URL "http://www.opencolorio.org" TYPE OPTIONAL PURPOSE "Required by the Krita LUT docker") macro_bool_to_01(OCIO_FOUND HAVE_OCIO) ## ## Look for OpenGL ## # TODO: see if there is a better check for QtGui being built with opengl support (and thus the QOpenGL* classes) if(Qt5Gui_OPENGL_IMPLEMENTATION) message(STATUS "Found QtGui OpenGL support") else() message(FATAL_ERROR "Did NOT find QtGui OpenGL support. Check your Qt configuration. You cannot build Krita without Qt OpenGL support.") endif() ## ## Test for eigen3 ## find_package(Eigen3 REQUIRED "3.0") set_package_properties(Eigen3 PROPERTIES DESCRIPTION "C++ template library for linear algebra" URL "http://eigen.tuxfamily.org" TYPE REQUIRED) ## ## Test for exiv2 ## set(EXIV2_MIN_VERSION "0.16") find_package(Exiv2 REQUIRED) set_package_properties(Exiv2 PROPERTIES DESCRIPTION "Image metadata library and tools" URL "http://www.exiv2.org" PURPOSE "Required by Krita") ## ## Test for lcms ## find_package(LCMS2 REQUIRED "2.4") set_package_properties(LCMS2 PROPERTIES DESCRIPTION "LittleCMS Color management engine" URL "http://www.littlecms.com" TYPE REQUIRED PURPOSE "Will be used for color management and is necessary for Krita") if(LCMS2_FOUND) if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 ) set(HAVE_LCMS24 TRUE) endif() set(HAVE_REQUIRED_LCMS_VERSION TRUE) set(HAVE_LCMS2 TRUE) endif() ## ## Test for Vc ## set(OLD_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ) set(HAVE_VC FALSE) if( NOT MSVC) find_package(Vc 1.1.0) set_package_properties(Vc PROPERTIES DESCRIPTION "Portable, zero-overhead SIMD library for C++" URL "https://github.com/VcDevel/Vc" TYPE OPTIONAL PURPOSE "Required by the Krita for vectorization") macro_bool_to_01(Vc_FOUND HAVE_VC) macro_bool_to_01(PACKAGERS_BUILD DO_PACKAGERS_BUILD) endif() configure_file(config-vc.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-vc.h ) if(HAVE_VC) message(STATUS "Vc found!") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/vc") include (VcMacros) if(Vc_COMPILER_IS_CLANG) set(ADDITIONAL_VC_FLAGS "-Wabi -ffp-contract=fast -fPIC") elseif (NOT MSVC) set(ADDITIONAL_VC_FLAGS "-Wabi -fabi-version=0 -ffp-contract=fast -fPIC") endif() #Handle Vc master if(Vc_COMPILER_IS_GCC OR Vc_COMPILER_IS_CLANG) AddCompilerFlag("-std=c++11" _ok) if(NOT _ok) AddCompilerFlag("-std=c++0x" _ok) endif() endif() macro(ko_compile_for_all_implementations_no_scalar _objs _src) if(PACKAGERS_BUILD) vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} ONLY SSE2 SSSE3 SSE4_1 AVX AVX2+FMA+BMI2) else() set(${_objs} ${_src}) endif() endmacro() macro(ko_compile_for_all_implementations _objs _src) if(PACKAGERS_BUILD) vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} ONLY Scalar SSE2 SSSE3 SSE4_1 AVX AVX2+FMA+BMI2) else() set(${_objs} ${_src}) endif() endmacro() if (NOT PACKAGERS_BUILD) # Optimize everything for the current architecture set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_DEFINITIONS}") endif () endif() set(CMAKE_MODULE_PATH ${OLD_CMAKE_MODULE_PATH} ) -## -## Test for Xinput -## -if(NOT WIN32 AND NOT APPLE) - set(REQUIRED_Xinput_FOUND ${X11_Xinput_FOUND}) -else() - set(REQUIRED_Xinput_FOUND TRUE) -endif() - add_definitions(${QT_DEFINITIONS} ${QT_QTDBUS_DEFINITIONS}) if(WIN32) set(LIB_INSTALL_DIR ${LIB_INSTALL_DIR} RUNTIME DESTINATION ${BIN_INSTALL_DIR} LIBRARY ${INSTALL_TARGETS_DEFAULT_ARGS} ARCHIVE ${INSTALL_TARGETS_DEFAULT_ARGS} ) endif() ## ## Test endianess ## include (TestBigEndian) test_big_endian(CMAKE_WORDS_BIGENDIAN) ## ## Test for qt-poppler ## find_package(Poppler) set_package_properties(Poppler PROPERTIES DESCRIPTION "A PDF rendering library" URL "http://poppler.freedesktop.org" TYPE OPTIONAL PURPOSE "Required by the Krita PDF filter.") ## ## Test for pthreads (for G'Mic) ## find_package(Threads) set_package_properties(Threads PROPERTIES DESCRIPTION "PThreads - A low-level threading library" TYPE OPTIONAL PURPOSE "Optionally used by the G'Mic plugin") ## ## Test for OpenMP (for G'Mic) ## find_package(OpenMP) set_package_properties(OpenMP PROPERTIES DESCRIPTION "A low-level parallel execution library" URL "http://openmp.org/wp/" TYPE OPTIONAL PURPOSE "Optionally used by the G'Mic plugin") ## ## Test for Curl (for G'Mic) ## find_package(CURL) set_package_properties(CURL PROPERTIES DESCRIPTION "A tool to fetch remote data" URL "http://curl.haxx.se/" TYPE OPTIONAL PURPOSE "Optionally used by the G'Mic plugin") ############################ ############################# ## Add Krita helper macros ## ############################# ############################ include(MacroKritaAddBenchmark) #################### ##################### ## Define includes ## ##################### #################### # for config.h and includes (if any?) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/interfaces ) include_directories( ${CMAKE_SOURCE_DIR}/libs/version ${CMAKE_BINARY_DIR}/libs/version ) - ################################################### -#################################################### -## Detect which products/features can be compiled ## -#################################################### -################################################### - -calligra_drop_product_on_bad_condition( APP_KRITA - EIGEN3_FOUND "Eigen devel not found" - EXIV2_FOUND "libexiv2 devel not found" - HAVE_REQUIRED_LCMS_VERSION "lcms devel not found" - Boost_SYSTEM_FOUND "boost-system devel not found" - REQUIRED_Xinput_FOUND "Xinput devel not found " -) - -############################################# -#### Backward compatibility BUILD_x=off #### -############################################# - -# workaround: disable directly all products which might be activated by internal -# dependencies, but belong to scope of old flag -calligra_drop_products_on_old_flag(krita APP_KRITA) - -############################################# -#### Temporarily broken products #### -############################################# - -# 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(APP_KEXI "isn't buildable at the moment") - -############################################# -#### Calculate buildable products #### -############################################# - -calligra_drop_unbuildable_products() - - ################### -#################### -## Subdirectories ## -#################### -################### - -if(SHOULD_BUILD_APP_KRITA) - add_subdirectory(krita) -endif() +feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) -# non-app directories are moved here because they can depend on SHOULD_BUILD_{appname} variables set above add_subdirectory(libs) add_subdirectory(plugins) - -add_subdirectory( benchmarks ) - -feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) - -calligra_product_deps_report("product_deps") -calligra_log_should_build() +add_subdirectory(benchmarks) +add_subdirectory(krita) configure_file(KoConfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h ) configure_file(config_convolution.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config_convolution.h) configure_file(config-ocio.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-ocio.h ) check_function_exists(powf HAVE_POWF) configure_file(config-powf.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-powf.h) diff --git a/KritaProducts.cmake b/KritaProducts.cmake deleted file mode 100644 index a23f97ce25..0000000000 --- a/KritaProducts.cmake +++ /dev/null @@ -1,250 +0,0 @@ -### DEFINITION OF PRODUCTS, FEATURES AND PRODUCTSETS -#################################################### - -# When building Krita 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 and features which should be build -# together. The products and features can be either essential or optional to the -# set. If essential (REQUIRES), the whole productset will not be build if a -# product or feature is missing another internal or external dependency. If -# optional (OPTIONAL), the rest of the set will still be build in that case. -# The products and features to include in a set can be listed directly or -# indirectly: they can be named explicitely, but also by including other -# productsets in a set, whose products and features will then be part of the -# first set as well. -# Products, features and productsets can be listed as dependencies in multiple -# product sets. As with dependencies for products or features, 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_* - -# building tools - -# Calligra-independent utility libs -calligra_define_product(LIB_KOVECTORIMAGE "libkovectorimage") - -# calligra libs -calligra_define_product(LIB_CALLIGRA "Calligra core libs" REQUIRES ) - -# features - -# plugins -calligra_define_product(PLUGIN_TEXTSHAPE "Text shape plugin" REQUIRES LIB_CALLIGRA) - -# parts - -# apps -calligra_define_product(APP_KRITA "Krita app (for Desktop)" REQUIRES LIB_CALLIGRA) - -# extras - -# more plugins -calligra_define_product(PLUGIN_COLORENGINES "Colorengine plugins" 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_DEFAULTTOOLS "Default Flake tools plugin" REQUIRES LIB_CALLIGRA) -calligra_define_product(PLUGIN_PATHSHAPES "Path shape plugins" REQUIRES LIB_CALLIGRA) -calligra_define_product(PLUGIN_VECTORSHAPE "Vectorgraphic shape plugin" REQUIRES LIB_CALLIGRA LIB_KOVECTORIMAGE) - -# staging plugins - -############################################# -#### Product set definitions #### -############################################# - -# For defining new productsets see end of this file, -# "How to add another productset?" - -calligra_define_productset(KRITA "Full Krita" - REQUIRES - APP_KRITA - OPTIONAL - # plugins - PLUGIN_ARTISTICTEXTSHAPE - PLUGIN_COLORENGINES - PLUGIN_DEFAULTTOOLS - PLUGIN_DOCKERS - PLUGIN_PATHSHAPES - PLUGIN_TEXTSHAPE - PLUGIN_VECTORSHAPE -) - -# 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 () -# -# 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 () -# -# 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 () -# -# 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 () -# -# 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? -# ============================== -# -# There are two possible places to put a productset definition. The first is to -# add it to this file, which should be done for more generic sets that are -# useful for many people. The second is 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". -# -# 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. -# -# Example for a file-based productset definition: -# 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/cmake/modules/CalligraProductSetMacros.cmake b/cmake/modules/CalligraProductSetMacros.cmake deleted file mode 100644 index 0925a26519..0000000000 --- a/cmake/modules/CalligraProductSetMacros.cmake +++ /dev/null @@ -1,503 +0,0 @@ -# Copyright (c) 2013-2014 Friedrich W. H. Kossebau -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -# Global variables -# CALLIGRA_SHOULD_BUILD_PRODUCTS - list of requested products by the user -# CALLIGRA_NEEDED_PRODUCTS - list of internal needed products -# CALLIGRA_WANTED_PRODUCTS - list of internal wanted products -# CALLIGRA_STAGING_PRODUCTS - list of products only in staging mode -# temporary during qt5 port, remove after: -# CALLIGRA_UNPORTED_PRODUCTS - list of products not yet ported -# SHOULD_BUILD_${product_id} - boolean if product should be build - - -macro(calligra_disable_product _product_id _reason) - if (NOT DEFINED SHOULD_BUILD_${_product_id}) - message(FATAL_ERROR "Unknown product: ${_product_id}") - endif (NOT DEFINED SHOULD_BUILD_${_product_id}) - - set(SHOULD_BUILD_${_product_id} FALSE) - if (DEFINED BUILD_${_product_id}_DISABLE_REASON) - set(BUILD_${_product_id}_DISABLE_REASON "${BUILD_${_product_id}_DISABLE_REASON} / ") - endif (DEFINED BUILD_${_product_id}_DISABLE_REASON) - set(BUILD_${_product_id}_DISABLE_REASON "${BUILD_${_product_id}_DISABLE_REASON}${_reason}") -endmacro() - -# Usage: -# calligra_drop_product_on_bad_condition( -# NAME_OF_BOOL_VAR1 REASON_TEXT_FOR_DROPPING_ON_FALSE1 -# NAME_OF_BOOL_VAR2 REASON_TEXT_FOR_DROPPING_ON_FALSE2 -# ... -# ) -macro(calligra_drop_product_on_bad_condition _product_id) - if (NOT DEFINED SHOULD_BUILD_${_product_id}) - message(FATAL_ERROR "Unknown product: ${_product_id}") - endif (NOT DEFINED SHOULD_BUILD_${_product_id}) - - set(_current_flag) - foreach(_arg ${ARGN}) - if(DEFINED _current_flag) - if(NOT ${_current_flag}) - calligra_disable_product(${_product_id} ${_arg}) - endif() - set(_current_flag) - else() - set(_current_flag ${_arg}) - endif() - endforeach(_arg) - if(DEFINED _current_flag) - message(FATAL_ERROR "Bad number of arguments for calligra_drop_product_on_bad_condition(${_product_id} ...)") - endif() -endmacro() - -macro(calligra_set_shouldbuild_dependentproduct _product_id _dep_product_id) - # if not already enabled, enable - if (NOT SHOULD_BUILD_${_dep_product_id}) - list(APPEND CALLIGRA_NEEDED_PRODUCTS ${_dep_product_id}) - set(SHOULD_BUILD_${_dep_product_id} TRUE) - if (DEFINED CALLIGRA_PRODUCT_${_dep_product_id}_needed_dependencies OR - DEFINED CALLIGRA_PRODUCT_${_dep_product_id}_wanted_dependencies) - calligra_set_shouldbuild_productdependencies(${_dep_product_id} - "${CALLIGRA_PRODUCT_${_dep_product_id}_needed_dependencies}" - "${CALLIGRA_PRODUCT_${_dep_product_id}_wanted_dependencies}") - endif (DEFINED CALLIGRA_PRODUCT_${_dep_product_id}_needed_dependencies OR - DEFINED CALLIGRA_PRODUCT_${_dep_product_id}_wanted_dependencies) - endif (NOT SHOULD_BUILD_${_dep_product_id}) -endmacro() - - -macro(calligra_set_shouldbuild_productdependencies _product_id _productset_id_needed_dependencies _productset_id_wanted_dependencies) - # activate all needed products and note the dependency - foreach(_dep_product_id ${_productset_id_needed_dependencies}) - list(APPEND CALLIGRA_PRODUCT_${_dep_product_id}_dependents ${_product_id}) - calligra_set_shouldbuild_dependentproduct(${_product_id} ${_dep_product_id}) - endforeach(_dep_product_id) - - # activate all wanted products - foreach(_dep_product_id ${_productset_id_wanted_dependencies}) - calligra_set_shouldbuild_dependentproduct(${_product_id} ${_dep_product_id}) - endforeach(_dep_product_id) -endmacro() - - -macro(calligra_drop_unbuildable_products) - # temporary during qt5 port, remove after - if(NOT BUILD_UNPORTED) - foreach(_product_id ${CALLIGRA_UNPORTED_PRODUCTS}) - calligra_disable_product(${_product_id} "Not yet ported to Qt5/KF5") - endforeach(_product_id) - endif(NOT BUILD_UNPORTED) - - # first drop all staging products if not enabled - if(NOT CALLIGRA_SHOULD_BUILD_STAGING) - foreach(_product_id ${CALLIGRA_STAGING_PRODUCTS}) - calligra_disable_product(${_product_id} "Not ready for release") - endforeach(_product_id) - endif(NOT CALLIGRA_SHOULD_BUILD_STAGING) - - # can assume calligra_all_products has products in down-up order - # 1. check all wanted products and see if they will be built, - # if not then drop their required products - # TODO! - # 2. check all products if they can be built, if not disable build of depending - foreach(_product_id ${CALLIGRA_ALL_PRODUCTS}) - if(NOT SHOULD_BUILD_${_product_id}) - if(DEFINED CALLIGRA_PRODUCT_${_product_id}_dependents) - foreach(_dependent_product_id ${CALLIGRA_PRODUCT_${_product_id}_dependents}) - calligra_disable_product(${_dependent_product_id} "Required internal dependency missing: ${_product_id}") - endforeach(_dependent_product_id ${CALLIGRA_PRODUCT_${_dep_product_id}_dependents}) - endif(DEFINED CALLIGRA_PRODUCT_${_product_id}_dependents) - endif(NOT SHOULD_BUILD_${_product_id}) - endforeach(_product_id) -endmacro() - -# backward compatibility: BUILD_app as option or passed as cmake parameter can overwrite product set -# and disable a product if set to FALSE (TRUE was ignored) -macro(calligra_drop_products_on_old_flag _build_id) - string(TOLOWER "${_build_id}" lowercase_build_id) - if (DEFINED BUILD_${lowercase_build_id} AND NOT BUILD_${lowercase_build_id}) - foreach(_product_id ${ARGN}) - if (NOT DEFINED SHOULD_BUILD_${_product_id}) - message(FATAL_ERROR "Unknown product: ${_product_id}") - endif (NOT DEFINED SHOULD_BUILD_${_product_id}) - calligra_disable_product(${_product_id} "Disabled by cmake parameter") - endforeach(_product_id) - endif (DEFINED BUILD_${lowercase_build_id} AND NOT BUILD_${lowercase_build_id}) -endmacro() - -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_list}\"") - message(STATUS "-------------------------------------------------------------------" ) - - # backward compatibility: BUILD_app as option or passed as cmake parameter can overwrite product set - # and disable a product if set to FALSE (TRUE was ignored) - foreach(_product_id ${CALLIGRA_ALL_PRODUCTS}) - string(TOLOWER "${_product_id}" lowercase_product_id) - if (DEFINED BUILD_${lowercase_product_id}) - if(NOT BUILD_${lowercase_product_id}) - list(FIND CALLIGRA_SHOULD_BUILD_PRODUCTS ${_product_id} _index) - # remove from product set, if part - if(NOT _index EQUAL -1) - list(REMOVE_AT CALLIGRA_SHOULD_BUILD_PRODUCTS ${_index}) - endif(NOT _index EQUAL -1) - endif(NOT BUILD_${lowercase_product_id}) - endif (DEFINED BUILD_${lowercase_product_id}) - endforeach(_product_id ${CALLIGRA_ALL_PRODUCTS}) - - # mark all products of the set as SHOULD_BUILD - foreach(_product_id ${CALLIGRA_SHOULD_BUILD_PRODUCTS}) - # check that this product is actually existing - if (NOT DEFINED SHOULD_BUILD_${_product_id}) - message(FATAL_ERROR "Unknown product: ${_product_id}") - endif (NOT DEFINED SHOULD_BUILD_${_product_id}) - - # mark product as should build, also all dependencies - set(SHOULD_BUILD_${_product_id} TRUE) - if (DEFINED CALLIGRA_PRODUCT_${_product_id}_needed_dependencies OR - DEFINED CALLIGRA_PRODUCT_${_product_id}_wanted_dependencies) - calligra_set_shouldbuild_productdependencies(${_product_id} - "${CALLIGRA_PRODUCT_${_product_id}_needed_dependencies}" - "${CALLIGRA_PRODUCT_${_product_id}_wanted_dependencies}") - endif (DEFINED CALLIGRA_PRODUCT_${_product_id}_needed_dependencies OR - DEFINED CALLIGRA_PRODUCT_${_product_id}_wanted_dependencies) - endforeach(_product_id) -endmacro() - - -# Usage: -# calligra_define_product( -# [NAME] -# [STAGING] -# [REQUIRES ...] -# ) -macro(calligra_define_product _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 "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}) - elseif(${_arg} STREQUAL "UNPORTED") - # temporary during qt5 port, remove after - list(APPEND CALLIGRA_UNPORTED_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( -# [NAME] -# [STAGING] -# [REQUIRES ...] -# ) -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 "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}) - elseif(${_arg} STREQUAL "UNPORTED") - # temporary during qt5 port, remove after - list(APPEND CALLIGRA_UNPORTED_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_feature) - - -# Usage: -# calligra_define_productset( -# [NAME] -# [REQUIRES ... ...] -# [OPTIONAL ... ...] -# ) -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 "optional") - # 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 _wanted_dep_product_ids "${_arg}") - endif(${_current_arg_type} STREQUAL "name") - endif(${_arg} STREQUAL "NAME") - endforeach(_arg) - - # 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_productset) - - -macro(calligra_log_should_build) - # find what products will be built and which not - set(_built_product_ids "") - set(_not_built_product_ids "") - set(_built_dependency_product_ids "") - set(_not_built_dependency_product_ids "") - - foreach(_product_id ${CALLIGRA_ALL_PRODUCTS}) - list(FIND CALLIGRA_SHOULD_BUILD_PRODUCTS ${_product_id} _index) - if(NOT _index EQUAL -1) - if(SHOULD_BUILD_${_product_id}) - list(APPEND _built_product_ids ${_product_id}) - else(SHOULD_BUILD_${_product_id}) - list(APPEND _not_built_product_ids ${_product_id}) - endif(SHOULD_BUILD_${_product_id}) - else(NOT _index EQUAL -1) - if(SHOULD_BUILD_${_product_id}) - list(APPEND _built_dependency_product_ids ${_product_id}) - else(SHOULD_BUILD_${_product_id}) - list(FIND CALLIGRA_NEEDED_PRODUCTS ${_product_id} _index2) - if(NOT _index2 EQUAL -1) - list(APPEND _not_built_dependency_product_ids ${_product_id}) - endif(NOT _index2 EQUAL -1) - endif(SHOULD_BUILD_${_product_id}) - endif(NOT _index EQUAL -1) - endforeach(_product_id) - - if(NOT _built_dependency_product_ids STREQUAL "") - 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}]]") - else (DEFINED CALLIGRA_PRODUCT_${_product_id}_dependents) - set(dependents "") - endif (DEFINED CALLIGRA_PRODUCT_${_product_id}_dependents) - - message(STATUS "${_product_id}: ${CALLIGRA_PRODUCT_${_product_id}_name}${dependents}" ) - endforeach(_product_id) - message(STATUS "") - endif(NOT _built_dependency_product_ids STREQUAL "") - if(NOT _not_built_dependency_product_ids STREQUAL "") - 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}]]") - else (DEFINED CALLIGRA_PRODUCT_${_product_id}_dependents) - set(dependents "") - endif (DEFINED CALLIGRA_PRODUCT_${_product_id}_dependents) - - message(STATUS "${_product_id}: ${CALLIGRA_PRODUCT_${_product_id}_name}${dependents} | ${BUILD_${_product_id}_DISABLE_REASON}" ) - endforeach(_product_id) - message(STATUS "") - endif(NOT _not_built_dependency_product_ids STREQUAL "") - 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 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() -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/libs/CMakeLists.txt b/libs/CMakeLists.txt index 8e8b1fbfe1..542bcc8f7c 100644 --- a/libs/CMakeLists.txt +++ b/libs/CMakeLists.txt @@ -1,20 +1,17 @@ add_subdirectory( version ) add_subdirectory( global ) add_subdirectory( koplugin ) add_subdirectory( widgetutils ) add_subdirectory( widgets ) add_subdirectory( store ) add_subdirectory( odf ) add_subdirectory( flake ) add_subdirectory( basicflakes ) add_subdirectory( pigment ) add_subdirectory( kundo2 ) add_subdirectory( brush ) add_subdirectory( psd ) add_subdirectory( color ) add_subdirectory( image ) add_subdirectory( ui ) - -if (SHOULD_BUILD_LIB_KOVECTORIMAGE) - add_subdirectory( vectorimage ) -endif () +add_subdirectory( vectorimage ) diff --git a/plugins/flake/CMakeLists.txt b/plugins/flake/CMakeLists.txt index 0aa9280d31..ac791d0a98 100644 --- a/plugins/flake/CMakeLists.txt +++ b/plugins/flake/CMakeLists.txt @@ -1,15 +1,4 @@ -if (SHOULD_BUILD_PLUGIN_ARTISTICTEXTSHAPE) - add_subdirectory( artistictextshape ) -endif () - -if (SHOULD_BUILD_PLUGIN_PATHSHAPES) - add_subdirectory( pathshapes ) -endif () - -if (SHOULD_BUILD_PLUGIN_TEXTSHAPE) - add_subdirectory( textshape ) -endif() - -if (SHOULD_BUILD_PLUGIN_VECTORSHAPE) - add_subdirectory( vectorshape ) -endif () +add_subdirectory( artistictextshape ) +add_subdirectory( pathshapes ) +add_subdirectory( textshape ) +add_subdirectory( vectorshape ) diff --git a/plugins/impex/ora/CMakeLists.txt b/plugins/impex/ora/CMakeLists.txt index 360d6e3052..8965f9b401 100644 --- a/plugins/impex/ora/CMakeLists.txt +++ b/plugins/impex/ora/CMakeLists.txt @@ -1,32 +1,29 @@ set(libkritaconverter_LIB_SRCS ora_converter.cc ) set(kritaoraimport_SOURCES ora_import.cc ${libkritaconverter_LIB_SRCS} ) add_library(kritaoraimport MODULE ${kritaoraimport_SOURCES}) target_link_libraries(kritaoraimport kritaui ) install(TARGETS kritaoraimport DESTINATION ${KRITA_PLUGIN_INSTALL_DIR}) set(kritaoraexport_SOURCES ora_export.cc ${libkritaconverter_LIB_SRCS} ) add_library(kritaoraexport MODULE ${kritaoraexport_SOURCES}) target_link_libraries(kritaoraexport kritaui ) install(TARGETS kritaoraexport DESTINATION ${KRITA_PLUGIN_INSTALL_DIR}) install( PROGRAMS krita_ora.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) -if(SHOULD_BUILD_FILEMANAGER_THUMBNAIL) - install( FILES krita_ora_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR}) -endif() - +install( FILES krita_ora_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})