diff --git a/MyxCMake/MyxCMakeConfig.cmake b/MyxCMake/MyxCMakeConfig.cmake index 464d514..63819db 100644 --- a/MyxCMake/MyxCMakeConfig.cmake +++ b/MyxCMake/MyxCMakeConfig.cmake @@ -55,6 +55,7 @@ include(${MYX_CMAKE_LIB_DIR}/Toolchains.cmake) unset(MYX_CMAKE_TOOLCHAINS_DIR) include(${MYX_CMAKE_LIB_DIR}/AddExecutable.cmake) +include(${MYX_CMAKE_LIB_DIR}/AddSaprBlock.cmake) include(${MYX_CMAKE_LIB_DIR}/AddInterfaceLibrary.cmake) include(${MYX_CMAKE_LIB_DIR}/AddObjectLibrary.cmake) include(${MYX_CMAKE_LIB_DIR}/TargetSetup.cmake) diff --git a/MyxCMake/MyxCMakeConfigVersion.cmake b/MyxCMake/MyxCMakeConfigVersion.cmake index 10fe1ff..d8ec21a 100644 --- a/MyxCMake/MyxCMakeConfigVersion.cmake +++ b/MyxCMake/MyxCMakeConfigVersion.cmake @@ -1,4 +1,4 @@ -set(MYX_CMAKE_PACKAGE_VERSION "2.1.98") +set(MYX_CMAKE_PACKAGE_VERSION "2.1.99") if(MYX_CMAKE_PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() diff --git a/MyxCMake/lib/AddObjectLibrary.cmake b/MyxCMake/lib/AddObjectLibrary.cmake index 9eab649..2fc2443 100644 --- a/MyxCMake/lib/AddObjectLibrary.cmake +++ b/MyxCMake/lib/AddObjectLibrary.cmake @@ -41,11 +41,7 @@ function(myx_add_object_library TARGET_NAME) endif() # Вызов стандартной функции `add_library()` - if(DEFINED ENV{SAPR_PREFIX}) - add_library(${TARGET_NAME} SHARED ${ARG_UNPARSED_ARGUMENTS}) - else() - add_library(${TARGET_NAME} OBJECT ${ARG_UNPARSED_ARGUMENTS}) - endif() + add_library(${TARGET_NAME} OBJECT ${ARG_UNPARSED_ARGUMENTS}) string(TOUPPER ${TARGET_NAME} __project_name_upper) # Опция для разрешения сборки динамической библиотеки @@ -64,22 +60,6 @@ function(myx_add_object_library TARGET_NAME) $ ) - if(ENABLE_SAPR_BLOCK_MODE) - target_compile_definitions(${TARGET_NAME} PUBLIC BLOCK_TARGET_MARK) - if(DEFINED ENV{SAPR_PREFIX}) - if(NOT WIN32) - set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,$ORIGIN") - endif() - return() - else() - find_package(Python COMPONENTS Interpreter Development) - find_package(pybind11 CONFIG) - target_include_directories(${TARGET_NAME} - PUBLIC $) - target_link_libraries(${TARGET_NAME} PRIVATE pybind11::headers pybind11::pybind11) - endif() - endif() - # Сборка позиционно-независимых объектных файлов нужна # для создания динамической библиотеки set_target_properties(${TARGET_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) diff --git a/MyxCMake/lib/AddSaprBlock.cmake b/MyxCMake/lib/AddSaprBlock.cmake new file mode 100644 index 0000000..99c7dfe --- /dev/null +++ b/MyxCMake/lib/AddSaprBlock.cmake @@ -0,0 +1,62 @@ +#[=======================================================================[.rst: +myx_add_sapr_block +------------------ + +Вспомогательная функция для создания блока САПР:: + + myx_add_sapr_block(TARGET_NAME) + +Обязательные параметры: `TARGET_NAME` - имя библиотеки. +Все остальные параметры передаются в стандартную функцию `add_library()` + +#]=======================================================================] + +include_guard(GLOBAL) + +include(CMakePackageConfigHelpers) +include(GenerateExportHeader) + +if(${CMAKE_VERSION} VERSION_LESS "3.17.0") + set(MYX_CMAKE_LIB_DIR_BACKPORT "${CMAKE_CURRENT_LIST_DIR}") +endif() + +function(myx_add_sapr_block TARGET_NAME) + if(${CMAKE_VERSION} VERSION_LESS "3.17.0") + set(CMAKE_CURRENT_FUNCTION_LIST_DIR ${MYX_CMAKE_LIB_DIR_BACKPORT}) + endif() + + # Вызов стандартной функции `add_library()` + if(DEFINED ENV{SAPR_PREFIX}) + add_library(${TARGET_NAME} SHARED ${ARG_UNPARSED_ARGUMENTS}) + else() + add_library(${TARGET_NAME} STATIC ${ARG_UNPARSED_ARGUMENTS}) + endif() + + # Стандартные пути к заголовочным файлам + target_include_directories(${TARGET_NAME} + PUBLIC + $ + PRIVATE + $ + $ + ) + + # Сборка позиционно-независимых объектных файлов нужна + # для создания динамической библиотеки + set_target_properties(${TARGET_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) + + target_compile_definitions(${TARGET_NAME} PUBLIC BLOCK_TARGET_MARK) + if(DEFINED ENV{SAPR_PREFIX}) + if(NOT WIN32) + set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,$ORIGIN") + endif() + else() + find_package(Python3 REQUIRED COMPONENTS Interpreter Development) + target_include_directories(${TARGET_NAME} ${Python3_INCLUDE_DIRS}) + find_package(pybind11 REQUIRED) + target_include_directories("${pybind11_INCLUDE_DIR}") + target_include_directories(${TARGET_NAME} + PUBLIC $) + target_link_libraries(${TARGET_NAME} PRIVATE pybind11::headers pybind11::pybind11) + endif() +endfunction() diff --git a/MyxCMake/lib/Qt5TargetSetup.cmake b/MyxCMake/lib/Qt5TargetSetup.cmake index efb3f36..a507e5c 100644 --- a/MyxCMake/lib/Qt5TargetSetup.cmake +++ b/MyxCMake/lib/Qt5TargetSetup.cmake @@ -7,28 +7,33 @@ function(myx_qt5_target_setup TARGET_NAME) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - get_target_property(target_type ${TARGET_NAME} TYPE) + get_target_property(__target_type ${TARGET_NAME} TYPE) foreach(iter ${ARG_COMPONENTS}) - if(target_type STREQUAL "INTERFACE_LIBRARY") + if(__target_type STREQUAL "INTERFACE_LIBRARY") target_include_directories(${TARGET_NAME} INTERFACE ${Qt5${iter}_INCLUDE_DIRS}) else() target_include_directories(${TARGET_NAME} PRIVATE ${Qt5${iter}_INCLUDE_DIRS}) endif() - if(target_type STREQUAL "EXECUTABLE" AND NOT iter STREQUAL "LinguistTools") - target_link_libraries(${TARGET_NAME} PRIVATE "Qt5::${iter}") - endif() + if(NOT iter STREQUAL "LinguistTools") + if(__target_type STREQUAL "EXECUTABLE") + target_link_libraries(${TARGET_NAME} PRIVATE "Qt5::${iter}") + endif() + if((__target_type STREQUAL "SHARED_LIBRARY") OR (__target_type STREQUAL "OBJECT_LIBRARY")) + target_link_libraries(${TARGET_NAME} PUBLIC "Qt5::${iter}") + endif() + endif() endforeach() foreach(iter ${ARG_PRIVATE}) - if(target_type STREQUAL "INTERFACE_LIBRARY") + if(__target_type STREQUAL "INTERFACE_LIBRARY") target_include_directories(${TARGET_NAME} INTERFACE ${Qt5${iter}_PRIVATE_INCLUDE_DIRS}) else() target_include_directories(${TARGET_NAME} PRIVATE ${Qt5${iter}_PRIVATE_INCLUDE_DIRS}) endif() endforeach() - if(target_type STREQUAL "EXECUTABLE") + if(__target_type STREQUAL "EXECUTABLE") target_compile_options(${TARGET_NAME} PRIVATE ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}) endif() @@ -58,7 +63,7 @@ function(myx_qt5_target_setup TARGET_NAME) endif() # Перечень файлов, подлежащих переводу - if(target_type STREQUAL "INTERFACE_LIBRARY") + if(__target_type STREQUAL "INTERFACE_LIBRARY") get_target_property(tr ${TARGET_NAME} INTERFACE_TR_FILES) else() get_target_property(tr ${TARGET_NAME} TR_FILES) @@ -87,7 +92,7 @@ function(myx_qt5_target_setup TARGET_NAME) target_sources(${TARGET_NAME} PRIVATE ${qrc_l10n}) endif() unset(tr) - if(target_type STREQUAL "INTERFACE_LIBRARY") + if(__target_type STREQUAL "INTERFACE_LIBRARY") target_sources(${TARGET_NAME} INTERFACE ${ARG_PUBLIC_MOC} ${ARG_PRIVATE_MOC} ${moc_cpp} ${ui_h} ${qrc_cpp}) else() target_sources(${TARGET_NAME} PRIVATE ${ARG_PUBLIC_MOC} ${ARG_PRIVATE_MOC} ${moc_cpp} ${ui_h} ${qrc_cpp}) diff --git a/README.md b/README.md index 824474e..3998f67 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## Установка В корневом каталоге проекта создать каталог `cmake` и распаковать в него -[архив](../../../releases/download/2.1.98/myx-cmake-local-2.1.98.tar.xz ). +[архив](../../../releases/download/2.1.99/myx-cmake-local-2.1.99.tar.xz ). ## Использование diff --git a/VERSION b/VERSION index b1536eb..7607b4e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.1.98 +2.1.99 diff --git a/debian/CMakeLists.txt b/debian/CMakeLists.txt index 1ced0c1..16afdd0 100644 --- a/debian/CMakeLists.txt +++ b/debian/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.6 FATAL_ERROR) -project(myx-cmake VERSION 2.1.98 LANGUAGES) +project(myx-cmake VERSION 2.1.99 LANGUAGES) include(GNUInstallDirs) file(WRITE ${CMAKE_SOURCE_DIR}/MyxCMake/MyxCMakeConfigVersion.cmake diff --git a/debian/changelog b/debian/changelog index 4668865..4da6f12 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -myx-cmake (2.1.98) unstable; urgency=medium +myx-cmake (2.1.99) unstable; urgency=medium * New version. diff --git a/myx_setup.cmake b/myx_setup.cmake index f030d13..19b78e5 100644 --- a/myx_setup.cmake +++ b/myx_setup.cmake @@ -20,11 +20,11 @@ if(ENV{MYX_CMAKE_DIR}) set(MYX_CMAKE_DIR $ENV{MYX_CMAKE_DIR}) endif() if(MYX_CMAKE_DIR) - find_package(MyxCMake 2.1.98 REQUIRED CONFIG PATHS ${MYX_CMAKE_DIR} NO_DEFAULT_PATH) + find_package(MyxCMake 2.1.99 REQUIRED CONFIG PATHS ${MYX_CMAKE_DIR} NO_DEFAULT_PATH) myx_message_notice("=== MyxCMake directory: ${MyxCMake_CONFIG} ===") else() if(MYX_CMAKE_USE_SYSTEM) - find_package(MyxCMake 2.1.98 REQUIRED) + find_package(MyxCMake 2.1.99 REQUIRED) myx_message_notice("=== MyxCMake directory: ${MyxCMake_CONFIG} ===") else() include(${PROJECT_SOURCE_DIR}/cmake/myx/MyxCMakeConfig.cmake)