diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,15 +46,16 @@ # get the special macros include(CalligraProductSetMacros) -# get the definitions of products, features and product sets -include(KexiProducts.cmake) +set(PRODUCTSET_DEFAULT "DESKTOP") -set(PRODUCTSET_DEFAULT "ALL") - -if(NOT PRODUCTSET) +if(NOT PRODUCTSET OR PRODUCTSET STREQUAL "ALL") + # Force the default set also when it is "ALL" because we can't build both desktop and mobile set(PRODUCTSET ${PRODUCTSET_DEFAULT} CACHE STRING "Set of products/features to build" FORCE) endif() +# get the definitions of products, features and product sets +include(KexiProducts.cmake) + if (RELEASE_BUILD) set(KEXI_SHOULD_BUILD_STAGING FALSE) else () @@ -71,23 +72,30 @@ ########################## set(REQUIRED_KF5_VERSION 5.16.0) -find_package(KF5 ${REQUIRED_KF5_VERSION} REQUIRED COMPONENTS - Archive - Codecs - Completion - Config - ConfigWidgets - CoreAddons - GuiAddons - I18n - IconThemes - ItemViews - KIO - TextEditor - TextWidgets - WidgetsAddons - XmlGui +set(REQUIRED_KF5_COMPONENTS + Archive + Codecs + Config + ConfigWidgets + CoreAddons + GuiAddons + I18n + IconThemes + ItemViews + WidgetsAddons + TextWidgets + XmlGui ) +if(SHOULD_BUILD_KEXI_DESKTOP_APP) + list(APPEND REQUIRED_KF5_COMPONENTS + Completion + KIO + TextEditor + TextWidgets + ) +endif() +find_package(KF5 ${REQUIRED_KF5_VERSION} REQUIRED COMPONENTS ${REQUIRED_KF5_COMPONENTS}) + find_package(KF5 ${REQUIRED_KF5_VERSION} QUIET OPTIONAL_COMPONENTS Crash) macro_bool_to_01(KF5Crash_FOUND HAVE_KCRASH) macro_log_feature(${KF5Crash_FOUND} "KCrash" "KDE's Crash Handler" @@ -161,13 +169,20 @@ ## ## Test for KPropertyWidgets ## -find_package(KPropertyWidgets ${KEXI_LIBS_MIN_VERSION} REQUIRED COMPONENTS KF) -macro_log_feature(KPropertyWidgets_FOUND "KPropertyWidgets" "A property editing framework with editor widget" - "http://community.kde.org/KProperty" FALSE "" "Required by Kexi") - +if(SHOULD_BUILD_KEXI_DESKTOP_APP) + find_package(KPropertyWidgets ${KEXI_LIBS_MIN_VERSION} REQUIRED COMPONENTS KF) + macro_log_feature(KPropertyWidgets_FOUND "KPropertyWidgets" "A property editing framework with editor widget" + "http://community.kde.org/KProperty" FALSE "" "Required by Kexi Desktop") +else() # only KPropertyCore + find_package(KPropertyCore ${KEXI_LIBS_MIN_VERSION} REQUIRED COMPONENTS KF) + macro_log_feature(KPropertyCore_FOUND "KPropertyCore" "A property editing framework with editor widget" + "http://community.kde.org/KProperty" FALSE "" "Required by Kexi Mobile") +endif() include(CheckIfQtGuiCanBeExecuted) -include(CheckGlobalBreezeIcons) +if(SHOULD_BUILD_KEXI_DESKTOP_APP) +include(CheckGlobalBreezeIcons) +endif() ########################### ############################ ## Optional dependencies ## diff --git a/KexiProducts.cmake b/KexiProducts.cmake --- a/KexiProducts.cmake +++ b/KexiProducts.cmake @@ -62,26 +62,22 @@ # features calligra_define_feature(FEATURE_SCRIPTING "Scripting feature" UNPORTED) # TODO -# apps -calligra_define_product(APP_KEXI "Kexi app (for Desktop)" REQUIRES) +# products +calligra_define_product(KEXI_CORE_APP "Kexi core app" REQUIRES) +calligra_define_product(KEXI_DESKTOP_APP "Kexi for desktop" REQUIRES KEXI_CORE_APP) +calligra_define_product(KEXI_MOBILE_APP "Kexi for mobile" REQUIRES KEXI_CORE_APP) # more plugins -calligra_define_product(PLUGIN_KEXI_SPREADSHEETMIGRATION "Import from ODS plugin for Kexi" UNPORTED REQUIRES APP_KEXI) +calligra_define_product(PLUGIN_KEXI_SPREADSHEETMIGRATION "Import from ODS plugin for Kexi" UNPORTED REQUIRES KEXI_CORE_APP) ############################################# #### Product set definitions #### ############################################# # For defining new productsets see end of this file, # "How to add another productset?" -calligra_define_productset(KEXI "Full Kexi (for Desktop)" - REQUIRES - APP_KEXI - OPTIONAL - FEATURE_SCRIPTING - PLUGIN_KEXI_SPREADSHEETMIGRATION -) +# (products sets are defined in cmake/productsets/*.cmake files) # How to add another product? # =========================== diff --git a/cmake/productsets/desktop.cmake b/cmake/productsets/desktop.cmake --- a/cmake/productsets/desktop.cmake +++ b/cmake/productsets/desktop.cmake @@ -1,9 +1,9 @@ #defines the set of products commonly wanted for classic Desktop environment -calligra_define_productset(DESKTOP "Kexi for Desktop" +calligra_define_productset(DESKTOP "Desktop products" + REQUIRES + KEXI_DESKTOP_APP OPTIONAL - # apps - KEXI - # features FEATURE_SCRIPTING + PLUGIN_KEXI_SPREADSHEETMIGRATION ) diff --git a/cmake/productsets/mobile.cmake b/cmake/productsets/mobile.cmake new file mode 100644 --- /dev/null +++ b/cmake/productsets/mobile.cmake @@ -0,0 +1,6 @@ +#defines the set of products commonly wanted for Mobile environment + +calligra_define_productset(MOBILE "Mobile products" + REQUIRES + KEXI_MOBILE_APP +) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,5 @@ set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) -option(KEXI_MOBILE "Compile a mobile version of Kexi" OFF) - check_function_exists("uname" HAVE_UNAME) option(KEXI_SHOW_UNFINISHED "Show unfinished features in Kexi. Thus is useful for testing but may confuse end-user." OFF) @@ -43,6 +41,8 @@ #no default: add_definitions(-DKDE_DEFAULT_DEBUG_AREA=44010) +macro_bool_to_01(SHOULD_BUILD_KEXI_DESKTOP_APP KEXI_DESKTOP) +macro_bool_to_01(SHOULD_BUILD_KEXI_MOBILE_APP KEXI_MOBILE) configure_file(config-kexi.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kexi.h ) configure_file(KexiVersion.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/KexiVersion.h) @@ -54,43 +54,45 @@ add_subdirectory( kexiutils ) add_subdirectory( core ) -add_subdirectory( widget ) + +if(SHOULD_BUILD_KEXI_DESKTOP_APP) + add_subdirectory( widget ) + add_subdirectory( main ) + add_subdirectory( formeditor ) + add_subdirectory( migration ) +endif() + add_subdirectory( data ) add_subdirectory( plugins ) + if (BUILD_TESTING) #TODO KEXI3 add_subdirectory( tests ) endif() -if(KEXI_MOBILE) - -else() - add_subdirectory( main ) - add_subdirectory( formeditor ) - add_subdirectory( migration ) -endif() - ########### next target ############### -if(KEXI_MOBILE) - add_subdirectory( mobile ) -else() - set(kexi_SRCS - main.cpp - Messages.sh - - # non-source: - ${CMAKE_SOURCE_DIR}/kundo2_aware_xgettext.sh - Mainpage.dox - Messages.sh - ) - kexi_add_app_icons(kexi_SRCS) - kexi_add_app_metadata_files(kexi_SRCS) - kexi_add_executable(kexi ${kexi_SRCS}) - target_link_libraries(kexi - PRIVATE - keximain - ) - install(TARGETS kexi ${INSTALL_TARGETS_DEFAULT_ARGS}) +if(SHOULD_BUILD_KEXI_DESKTOP_APP) + set(kexi_SRCS + main.cpp + Messages.sh + + # non-source: + ${CMAKE_SOURCE_DIR}/kundo2_aware_xgettext.sh + Mainpage.dox + Messages.sh + ) + kexi_add_app_icons(kexi_SRCS) + kexi_add_app_metadata_files(kexi_SRCS) + kexi_add_executable(kexi ${kexi_SRCS}) + target_link_libraries(kexi + PRIVATE + keximain + ) + install(TARGETS kexi ${INSTALL_TARGETS_DEFAULT_ARGS}) + + add_subdirectory( pics ) endif() -add_subdirectory( pics ) +if(SHOULD_BUILD_KEXI_MOBILE_APP) +# add_subdirectory( mobile ) +endif() diff --git a/src/config-kexi.h.cmake b/src/config-kexi.h.cmake --- a/src/config-kexi.h.cmake +++ b/src/config-kexi.h.cmake @@ -28,8 +28,12 @@ #include +//! @def KEXI_DESKTOP +//! @brief If defined, a desktop version of Kexi is compiled +#cmakedefine KEXI_DESKTOP + //! @def KEXI_MOBILE -//! @brief If defined, a mobile version of Kexi if compiled +//! @brief If defined, a mobile version of Kexi is compiled #cmakedefine KEXI_MOBILE /* define if you have libreadline available */ diff --git a/src/kexiutils/CMakeLists.txt b/src/kexiutils/CMakeLists.txt --- a/src/kexiutils/CMakeLists.txt +++ b/src/kexiutils/CMakeLists.txt @@ -29,9 +29,7 @@ completer/KexiCompleter.cpp ) -if (KEXI_MOBILE) - -else () +if(SHOULD_BUILD_KEXI_MOBILE_APP) if (KEXI_DEBUG_GUI) list(APPEND kexiutils_LIB_SRCS debuggui.cpp @@ -57,15 +55,20 @@ target_link_libraries(kexiutils PUBLIC - KF5::KIOWidgets #for KRun... KF5::IconThemes KF5::WidgetsAddons KF5::ConfigWidgets # KStandardAction KColorScheme KF5::I18n KF5::ItemViews # KCategorizedView KCategoryDrawer KDb ) +if(SHOULD_BUILD_KEXI_DESKTOP_APP) + target_link_libraries(kexiutils + PUBLIC + KF5::KIOWidgets #for KRun... + ) #target_link_libraries(kexiutils LINK_INTERFACE_LIBRARIES KF5::KIOWidgets) +endif() if(BUILD_TESTING) target_link_libraries(kexiutils diff --git a/src/kexiutils/utils.cpp b/src/kexiutils/utils.cpp --- a/src/kexiutils/utils.cpp +++ b/src/kexiutils/utils.cpp @@ -60,8 +60,10 @@ #include #include +#ifndef KEXI_MOBILE #include #include +#endif #include #include #include @@ -719,6 +721,7 @@ tristate KexiUtils::openHyperLink(const QUrl &url, QWidget *parent, const OpenHyperlinkOptions &options) { +#ifndef KEXI_MOBILE if (url.isLocalFile()) { QFileInfo fileInfo(url.toLocalFile()); if (!fileInfo.exists()) { @@ -771,6 +774,7 @@ return QDesktopServices::openUrl(url); default:; } +#endif return false; } diff --git a/src/mobile/CMakeLists.txt b/src/mobile/CMakeLists.txt --- a/src/mobile/CMakeLists.txt +++ b/src/mobile/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8.0) -find_package(Qt4 REQUIRED) +find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS Core Gui) include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src/core @@ -14,14 +14,11 @@ KexiMobileToolbar.cpp ) -qt4_automoc(${KexiMobile_SRCS}) - kexi_add_executable(keximobile ${KexiMobile_SRCS}) -target_link_libraries(keximobile Qt5::Core Qt5::Gui +target_link_libraries(keximobile kexiextendedwidgets kexicore - kdeui ) install(TARGETS keximobile ${INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt --- a/src/plugins/CMakeLists.txt +++ b/src/plugins/CMakeLists.txt @@ -1,8 +1,6 @@ add_definitions(-DKDE_DEFAULT_DEBUG_AREA=44021) -if (KEXI_MOBILE) - -else () +if(SHOULD_BUILD_KEXI_DESKTOP_APP) add_subdirectory( tables ) add_subdirectory( queries ) add_subdirectory( forms ) diff --git a/src/plugins/reports/CMakeLists.txt b/src/plugins/reports/CMakeLists.txt --- a/src/plugins/reports/CMakeLists.txt +++ b/src/plugins/reports/CMakeLists.txt @@ -14,9 +14,7 @@ krscriptfunctions.cpp ) -if (KEXI_MOBILE) - -else () +if(SHOULD_BUILD_KEXI_DESKTOP_APP) #TODO KEXI3 # list(APPEND kexi_reportplugin_SRCS # keximigratereportdata.cpp @@ -36,14 +34,12 @@ KReport ) -if (KEXI_MOBILE) - -else () +if(SHOULD_BUILD_KEXI_DESKTOP_APP) target_link_libraries(kexi_reportplugin PRIVATE keximain #TODO KEXI3 keximigrate ) -endif () +endif() install(TARGETS kexi_reportplugin DESTINATION ${KEXI_PLUGIN_INSTALL_DIR}) diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -1,7 +1,5 @@ if(BUILD_TESTING) - If (KEXI_MOBILE) - - else() + if(SHOULD_BUILD_KEXI_DESKTOP_APP) add_subdirectory( newapi ) add_subdirectory( migration ) endif() diff --git a/src/widget/CMakeLists.txt b/src/widget/CMakeLists.txt --- a/src/widget/CMakeLists.txt +++ b/src/widget/CMakeLists.txt @@ -3,10 +3,8 @@ add_subdirectory( undo ) add_subdirectory( utils ) -if(KEXI_MOBILE) - -else() - add_subdirectory( tableview ) +if(SHOULD_BUILD_KEXI_DESKTOP_APP) + add_subdirectory( tableview ) endif() add_definitions(-DKDE_DEFAULT_DEBUG_AREA=44023) @@ -51,9 +49,7 @@ KexiListView.cpp ) -if (KEXI_MOBILE) - -else () +if(SHOULD_BUILD_KEXI_DESKTOP_APP) list(APPEND kexiextendedwidgets_LIB_SRCS #navigator/KexiProjectListView.cpp #navigator/KexiProjectListViewItem.cpp diff --git a/src/widget/utils/CMakeLists.txt b/src/widget/utils/CMakeLists.txt --- a/src/widget/utils/CMakeLists.txt +++ b/src/widget/utils/CMakeLists.txt @@ -11,12 +11,11 @@ KexiDockableWidget.cpp ) -if (KEXI_MOBILE) -else () +if(SHOULD_BUILD_KEXI_DESKTOP_APP) list(APPEND kexiguiutils_LIB_SRCS kexirecordnavigator.cpp ) -endif () +endif() kexi_add_library(kexiguiutils SHARED ${kexiguiutils_LIB_SRCS})