diff --git a/CMakeLists.txt b/CMakeLists.txt index 7109983..5065faa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,97 +1,95 @@ cmake_minimum_required(VERSION 3.5) set(KF5_VERSION "5.64.0") # handled by release scripts project(Sonnet VERSION ${KF5_VERSION}) include(FeatureSummary) find_package(ECM 5.64.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake ) include(KDEInstallDirs) include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) include(KDECMakeSettings) include(ECMQtDeclareLoggingCategory) set(REQUIRED_QT_VERSION 5.11.0) option(SONNET_USE_WIDGETS "Build components using Qt5Widgets" ON) if(SONNET_USE_WIDGETS) find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Widgets) endif() find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Core) include(GenerateExportHeader) include(ECMSetupVersion) include(ECMGenerateHeaders) include(ECMAddQch) include(ECMPoQmTools) ecm_setup_version(PROJECT VARIABLE_PREFIX SONNET VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/sonnet_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5SonnetConfigVersion.cmake" SOVERSION 5) option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF) add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)") if(SONNET_USE_WIDGETS) option(BUILD_DESIGNERPLUGIN "Build plugin for Qt Designer" ON) add_feature_info(DESIGNERPLUGIN ${BUILD_DESIGNERPLUGIN} "Build plugin for Qt Designer") endif() add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x050d00) if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") ecm_install_po_files_as_qm(po) endif() add_definitions(-DQT_NO_FOREACH) +add_subdirectory(data) add_subdirectory(src) if (BUILD_TESTING) add_subdirectory(autotests) endif() -if (NOT CMAKE_CROSSCOMPILING) - add_subdirectory(data) -endif() if(TARGET Qt5::Widgets) add_subdirectory(examples) endif() # create a Config.cmake and a ConfigVersion.cmake file and install them set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5Sonnet") if (BUILD_QCH) ecm_install_qch_export( TARGETS KF5SonnetCore_QCH KF5SonnetUi_QCH FILE KF5SonnetQchTargets.cmake DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5SonnetQchTargets.cmake\")") endif() include(CMakePackageConfigHelpers) configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/KF5SonnetConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KF5SonnetConfig.cmake" INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5SonnetConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/KF5SonnetConfigVersion.cmake" DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) install(EXPORT KF5SonnetTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5SonnetTargets.cmake NAMESPACE KF5:: ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/sonnet_version.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5} COMPONENT Devel ) # contains list of debug categories, for kdebugsettings install(FILES sonnet.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index 92cc5c5..bc7597b 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -1,22 +1,25 @@ -project(sonnetdata) - include(ECMMarkNonGuiExecutable) -add_executable(parsetrigrams parsetrigrams.cpp) -add_executable(gentrigrams gentrigrams.cpp) +if(NOT CMAKE_CROSSCOMPILING) + add_executable(parsetrigrams parsetrigrams.cpp) + add_executable(gentrigrams gentrigrams.cpp) -# Mark it as non-gui so we won't create an app bundle on Mac OS X -ecm_mark_nongui_executable(parsetrigrams) -ecm_mark_nongui_executable(gentrigrams) + # Mark it as non-gui so we won't create an app bundle on Mac OS X + ecm_mark_nongui_executable(parsetrigrams) + ecm_mark_nongui_executable(gentrigrams) -TARGET_LINK_LIBRARIES(parsetrigrams PUBLIC Qt5::Core) -TARGET_LINK_LIBRARIES(gentrigrams PUBLIC Qt5::Core KF5::SonnetCore) -INSTALL(TARGETS parsetrigrams ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) -INSTALL(TARGETS gentrigrams ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) + TARGET_LINK_LIBRARIES(parsetrigrams PUBLIC Qt5::Core) + TARGET_LINK_LIBRARIES(gentrigrams PUBLIC Qt5::Core KF5::SonnetCore) + INSTALL(TARGETS parsetrigrams ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) + INSTALL(TARGETS gentrigrams ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) -if(CMAKE_CROSSCOMPILING AND PARSETRIGRAMS_EXECUTABLE) - add_executable(KF5::parsetrigrams IMPORTED GLOBAL) - set_target_properties(KF5::parsetrigrams PROPERTIES IMPORTED_LOCATION ${PARSETRIGRAMS_EXECUTABLE}) -else() add_executable(KF5::parsetrigrams ALIAS parsetrigrams) +else() + if (NOT PARSETRIGRAMS_EXECUTABLE AND KF5_HOST_TOOLING) + find_program(PARSETRIGRAMS_EXECUTABLE parsetrigrams PATHS ${KF5_HOST_TOOLING}/${BIN_INSTALL_DIR} NO_DEFAULT_PATH) + endif() + if (PARSETRIGRAMS_EXECUTABLE) + add_executable(KF5::parsetrigrams IMPORTED GLOBAL) + set_target_properties(KF5::parsetrigrams PROPERTIES IMPORTED_LOCATION ${PARSETRIGRAMS_EXECUTABLE}) + endif() endif() diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index fab31c3..793d85f 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1,89 +1,88 @@ project(sonnetcore) set(sonnetcore_SRCS loader.cpp client.cpp spellerplugin.cpp speller.cpp settings.cpp backgroundchecker.cpp guesslanguage.cpp textbreaks.cpp tokenizer.cpp languagefilter.cpp ) -if (NOT CMAKE_CROSSCOMPILING) - # create trigrams file + add trigrams resource +# create trigrams file + add trigrams resource +if (TARGET KF5::parsetrigrams) add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/data/trigrams.map" - DEPENDS parsetrigrams - COMMAND $ "${CMAKE_SOURCE_DIR}/data/trigrams" > "${CMAKE_BINARY_DIR}/data/trigrams.map") + COMMAND KF5::parsetrigrams "${CMAKE_SOURCE_DIR}/data/trigrams" > "${CMAKE_BINARY_DIR}/data/trigrams.map") configure_file(${CMAKE_SOURCE_DIR}/data/trigrams.qrc.in ${CMAKE_BINARY_DIR}/data/trigrams.qrc @ONLY) qt5_add_resources(sonnetcore_SRCS "${CMAKE_BINARY_DIR}/data/trigrams.qrc") endif() ecm_qt_declare_logging_category(sonnetcore_SRCS HEADER core_debug.h IDENTIFIER SONNET_LOG_CORE CATEGORY_NAME sonnet.core) # Dear packagers, this is just used as an extra search paths for plugins. Don't get your panties in a twist. add_definitions(-DINSTALLATION_PLUGIN_PATH="${CMAKE_INSTALL_PREFIX}/${KDE_INSTALL_PLUGINDIR}") add_library(KF5SonnetCore ${sonnetcore_SRCS}) generate_export_header(KF5SonnetCore BASE_NAME SonnetCore EXPORT_FILE_NAME sonnetcore_export.h) add_library(KF5::SonnetCore ALIAS KF5SonnetCore) ecm_generate_headers(SonnetCore_CamelCase_HEADERS HEADER_NAMES BackgroundChecker Speller GuessLanguage PREFIX Sonnet REQUIRED_HEADERS SonnetCore_HEADERS ) target_link_libraries(KF5SonnetCore PUBLIC Qt5::Core) set_target_properties(KF5SonnetCore PROPERTIES VERSION ${SONNET_VERSION_STRING} SOVERSION ${SONNET_SOVERSION} EXPORT_NAME SonnetCore ) # CMAKE_CURRENT_BINARY_DIR: for camelcase headers and lowercase forwarders target_include_directories(KF5SonnetCore INTERFACE "$") target_include_directories(KF5SonnetCore PUBLIC "$") install(TARGETS KF5SonnetCore EXPORT KF5SonnetTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES ${SonnetCore_CamelCase_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/SonnetCore/Sonnet COMPONENT Devel) install(FILES ${SonnetCore_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/sonnetcore_export.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/SonnetCore/sonnet COMPONENT Devel) if (BUILD_QCH) ecm_add_qch( KF5SonnetCore_QCH NAME SonnetCore BASE_NAME KF5SonnetCore VERSION ${KF5_VERSION} ORG_DOMAIN org.kde SOURCES # using only public headers, to cover only public API ${SonnetCore_HEADERS} LINK_QCHS Qt5Core_QCH INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} BLANK_MACROS SONNETCORE_EXPORT SONNETCORE_DEPRECATED_EXPORT SONNETCORE_DEPRECATED TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} COMPONENT Devel ) endif() include(ECMGeneratePriFile) ecm_generate_pri_file(BASE_NAME SonnetCore LIB_NAME KF5SonnetCore DEPS "core" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/SonnetCore) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})