qm_import(Preprocess) set(QWINDOWKIT_PROJECT_DESCRIPTION "Cross-platform window customization framework") set(QWINDOWKIT_PROJECT_COPYRIGHT "Copyright 2023 Stdware Collections") set(QWINDOWKIT_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/../include) set(QWINDOWKIT_BUILD_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/../etc/include) set(QWINDOWKIT_ENABLED_TARGETS) set(QWINDOWKIT_ENABLED_SUBDIRECTORIES) # ---------------------------------- # Configurations # ---------------------------------- set(QMSETUP_DEFINITION_SCOPE DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) set(QMSETUP_DEFINITION_NUMERICAL on) qm_add_definition(QWINDOWKIT_ENABLE_QT_WINDOW_CONTEXT CONDITION QWINDOWKIT_ENABLE_QT_WINDOW_CONTEXT ) qm_add_definition(QWINDOWKIT_ENABLE_STYLE_AGENT CONDITION QWINDOWKIT_ENABLE_STYLE_AGENT ) qm_add_definition(QWINDOWKIT_ENABLE_WINDOWS_SYSTEM_BORDER CONDITION QWINDOWKIT_ENABLE_WINDOWS_SYSTEM_BORDER ) qm_generate_config(${QWINDOWKIT_BUILD_INCLUDE_DIR}/QWKCore/qwkconfig.h) if(QWINDOWKIT_INSTALL) install(FILES ${QWINDOWKIT_BUILD_INCLUDE_DIR}/QWKCore/qwkconfig.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${QWINDOWKIT_INSTALL_NAME}/QWKCore ) endif() # ---------------------------------- # CMake API # ---------------------------------- macro(qwk_add_library _target) set(options AUTOGEN NO_SYNC_INCLUDE NO_WIN_RC) set(oneValueArgs SYNC_INCLUDE_PREFIX PREFIX) set(multiValueArgs SYNC_INCLUDE_OPTIONS) cmake_parse_arguments(FUNC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(FUNC_AUTOGEN) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) endif() if(QWINDOWKIT_BUILD_STATIC) set(_type STATIC) else() set(_type SHARED) endif() add_library(${_target} ${_type}) if(WIN32 AND NOT FUNC_NO_WIN_RC AND(${_type} STREQUAL "SHARED")) qm_add_win_rc(${_target} NAME ${QWINDOWKIT_INSTALL_NAME} DESCRIPTION ${QWINDOWKIT_PROJECT_DESCRIPTION} COPYRIGHT ${QWINDOWKIT_PROJECT_COPYRIGHT} ) endif() if(FUNC_PREFIX) set(_prefix_option PREFIX ${FUNC_PREFIX}) else() set(_prefix_option) endif() # Set global definitions qm_export_defines(${_target} ${_prefix_option}) # Configure target qm_configure_target(${_target} ${FUNC_UNPARSED_ARGUMENTS}) # Add include directories target_include_directories(${_target} PRIVATE ${QWINDOWKIT_BUILD_INCLUDE_DIR}) target_include_directories(${_target} PRIVATE .) # Library name if(${_target} MATCHES "^QWK(.+)") set(_name ${CMAKE_MATCH_1}) set_target_properties(${_target} PROPERTIES EXPORT_NAME ${_name}) else() set(_name ${_target}) endif() add_library(${QWINDOWKIT_INSTALL_NAME}::${_name} ALIAS ${_target}) if(FUNC_SYNC_INCLUDE_PREFIX) set(_inc_name ${FUNC_SYNC_INCLUDE_PREFIX}) else() set(_inc_name ${_target}) endif() set(_install_options) if(QWINDOWKIT_INSTALL) install(TARGETS ${_target} EXPORT ${QWINDOWKIT_INSTALL_NAME}Targets RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" OPTIONAL ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" OPTIONAL ) target_include_directories(${_target} PUBLIC "$" ) set(_install_options INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${QWINDOWKIT_INSTALL_NAME}/${_inc_name}" ) endif() if(NOT FUNC_NO_SYNC_INCLUDE) # Generate a standard include directory in build directory qm_sync_include(. "${QWINDOWKIT_GENERATED_INCLUDE_DIR}/${_inc_name}" ${_install_options} ${FUNC_SYNC_INCLUDE_OPTIONS} FORCE ) target_include_directories(${_target} PUBLIC "$" ) endif() endmacro() # ---------------------------------- # Main Project # ---------------------------------- add_subdirectory(core) if(QWINDOWKIT_BUILD_WIDGETS) add_subdirectory(widgets) endif() if(QWINDOWKIT_BUILD_QUICK) add_subdirectory(quick) endif() # ---------------------------------- # Install # ---------------------------------- if(QWINDOWKIT_INSTALL) # Add install target set(_install_dir ${CMAKE_INSTALL_LIBDIR}/cmake/${QWINDOWKIT_INSTALL_NAME}) # Add version file write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/${QWINDOWKIT_INSTALL_NAME}ConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion ) # Add configuration file configure_package_config_file( ${CMAKE_CURRENT_LIST_DIR}/${QWINDOWKIT_INSTALL_NAME}Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/${QWINDOWKIT_INSTALL_NAME}Config.cmake" INSTALL_DESTINATION ${_install_dir} NO_CHECK_REQUIRED_COMPONENTS_MACRO ) # Install cmake files install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${QWINDOWKIT_INSTALL_NAME}Config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${QWINDOWKIT_INSTALL_NAME}ConfigVersion.cmake" DESTINATION ${_install_dir} ) # Install cmake targets files install(EXPORT ${QWINDOWKIT_INSTALL_NAME}Targets FILE "${QWINDOWKIT_INSTALL_NAME}Targets.cmake" NAMESPACE ${QWINDOWKIT_INSTALL_NAME}:: DESTINATION ${_install_dir} ) # Install shared files include("../share/install.cmake") endif()