cmake_minimum_required(VERSION 3.14) project(KzSettings VERSION 1.0.0 LANGUAGES CXX) option(WITH_PYTHON "Create python binding" ON) option(WITH_QT "Create Qt6 library and QML Module" ON) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) include(GNUInstallDirs) find_package (Threads REQUIRED) add_library(KzSettings SHARED src/kzsettings.h src/kzsettings.cpp src/changewatcher.h src/changewatcher.cpp cmake/Config.cmake.in cmake/CPack.cmake ) set_target_properties(KzSettings PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION 1) set_target_properties(KzSettings PROPERTIES PUBLIC_HEADER "src/kzsettings.h") target_link_libraries(KzSettings PRIVATE Threads::Threads) add_executable(kzsettings cmd/kzsettings.cpp) target_include_directories(kzsettings PRIVATE src) target_link_libraries(kzsettings KzSettings) install(TARGETS KzSettings EXPORT "KzSettingsTargets" LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_PREFIX}/include/KaZoe/Settings" ) install(TARGETS kzsettings LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) if(WITH_PYTHON) message(STATUS "Build with python binding") find_package(Python3 COMPONENTS Interpreter Development REQUIRED) set(PYTHON_MODULE_EXTENSION ".so" CACHE INTERNAL "Cross python lib extension") find_package(pybind11 REQUIRED) include_directories(${Python3_INCLUDE_DIRS}) pybind11_add_module(PyKzSettings python/bindings.cpp) set_target_properties(PyKzSettings PROPERTIES OUTPUT_NAME "KzSettings") target_link_libraries(PyKzSettings PUBLIC KzSettings ${PYTHON_LIBRARY}) if(NOT PYTHONPATH) set(PYTHONPATH ${Python3_SITEARCH}) endif(NOT PYTHONPATH) install(TARGETS PyKzSettings LIBRARY DESTINATION ${PYTHONPATH}) endif(WITH_PYTHON) include(CMakePackageConfigHelpers) if(WITH_QT) if(NOT DEFINED QML_MODULE_INSTALL_PATH) if(DEFINED OE_QMAKE_PATH_QML) set(QML_MODULE_INSTALL_PATH ${OE_QMAKE_PATH_QML} ) else() set(QML_MODULE_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/qml ) endif() endif() message(STATUS "Build with Qt module in ${QML_MODULE_INSTALL_PATH}") find_package(Qt6 COMPONENTS Core Qml REQUIRED) add_library(KzQSettings SHARED qt/kzqsettings.h qt/kzqsettings.cpp qt/kzqproperty.h qt/kzqproperty.cpp qt/cmake/Config.cmake.in ) target_link_libraries(KzQSettings PUBLIC Qt6::Core KzSettings) set_target_properties(KzQSettings PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION 1) set(KzQSettingsPublicHeader qt/kzqsettings.h qt/kzqproperty.h) set_target_properties(KzQSettings PROPERTIES PUBLIC_HEADER "${KzQSettingsPublicHeader}") install(TARGETS KzQSettings EXPORT "KzQSettingsTargets" LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_PREFIX}/include/KaZoe/" ) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/generated/KzQSettingsConfigVersion.cmake" COMPATIBILITY SameMajorVersion ) configure_package_config_file( "qt/cmake/Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/generated/KzQSettingsConfig.cmake" INSTALL_DESTINATION "lib/cmake/KzQSettings" ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/generated/KzQSettingsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/generated/KzQSettingsConfigVersion.cmake" DESTINATION "lib/cmake/KzQSettings" ) install( EXPORT "KzQSettingsTargets" DESTINATION "lib/cmake/KzQSettings" ) set(PLUGIN_SOURCES qt/kzqsettings_plugin.h qt/kzqsettings_plugin.cpp qt/qml/qmldir ) add_library(KzQSettingsPlugin SHARED ${PLUGIN_SOURCES}) target_link_libraries(KzQSettingsPlugin PRIVATE Qt6::Qml KzQSettings) install(TARGETS KzQSettingsPlugin DESTINATION ${QML_MODULE_INSTALL_PATH}/org/kazoe/settings) install(FILES qt/qml/qmldir DESTINATION ${QML_MODULE_INSTALL_PATH}/org/kazoe/settings) endif(WITH_QT) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/generated/KzSettingsConfigVersion.cmake" COMPATIBILITY SameMajorVersion ) configure_package_config_file( "cmake/Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/generated/KzSettingsConfig.cmake" INSTALL_DESTINATION "lib/cmake/KzSettings" ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/generated/KzSettingsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/generated/KzSettingsConfigVersion.cmake" DESTINATION "lib/cmake/KzSettings" ) install( EXPORT "KzSettingsTargets" DESTINATION "lib/cmake/KzSettings" ) include(cmake/CPack.cmake)