Замена myx_find_required_packages на myx_find_packages

This commit is contained in:
Andrei Astafev 2023-07-30 13:33:09 +03:00
parent fe65d429f1
commit 7bb6c2d39c

View File

@ -1,36 +1,54 @@
#[=======================================================================[.rst:
myx_find_packages
-----------------
Вспомогательная функция для поиска зависимостей::
myx_find_packages()
Упрощённый способ поиска необходимых и опциональных зависимостей.
Для поиска зависимостей с учётом особенных требований (например, номер версии)
следует использовать функции `find_package` и `pkg_check_modules`.
Параметр `REQUIRED` содержит перечисление необходимых зависимостей
для поиска с помощью функции `find_package`.
Параметр `OPTIONAL` содержит перечисление опциональных зависимостей
для поиска с помощью функции `find_package`.
Параметр `PKG_REQUIRED` содержит перечисление необходимых зависимостей
для поиска с помощью функции `pkg_check_modules`.
Параметр `PKG_OPTIONAL` содержит перечисление опциональных зависимостей
для поиска с помощью функции `pkg_check_modules`.
#]=======================================================================]
include_guard(GLOBAL) include_guard(GLOBAL)
macro(myx_find_required_packages) macro(myx_find_packages)
set(options) set(options)
set(oneValueArgs) set(oneValueArgs)
set(multiValueArgs PACKAGES Boost Qt5 Qt5Private Qt6 Qt6Private) set(multiValueArgs REQUIRED OPTIONAL PKG_REQUIRED PKG_OPTIONAL)
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
foreach(iter ${ARG_PACKAGES}) foreach(iter ${ARG_REQUIRED})
find_package(${iter} REQUIRED) find_package(${iter} REQUIRED)
endforeach() endforeach()
if(ARG_Boost) foreach(iter ${ARG_OPTIONAL})
find_package(Boost COMPONENTS ${ARG_Boost} REQUIRED) find_package(${iter})
endif() endforeach()
if(ARG_Qt5) if(ARG_PKG_REQUIRED)
find_package(Qt5 COMPONENTS ${ARG_Qt5} REQUIRED) find_package(PkgConfig REQUIRED)
endif() foreach(iter ${ARG_PKG_REQUIRED})
string(TOUPPER ${iter} iu)
if(ARG_Qt5Private) pkg_check_modules(${iu} REQUIRED ${iter})
foreach(iter ${ARG_Qt5Private})
find_package("Qt5${iter}" COMPONENTS Private REQUIRED)
endforeach() endforeach()
endif() endif()
if(ARG_Qt6) if(ARG_PKG_OPTIONAL)
find_package(Qt6 COMPONENTS ${ARG_Qt6} REQUIRED) find_package(PkgConfig REQUIRED)
endif() foreach(iter ${ARG_PKG_OPTIONAL})
string(TOUPPER ${iter} iu)
if(ARG_Qt6Private) pkg_check_modules(${iu} ${iter})
foreach(iter ${ARG_Qt6Private})
find_package("Qt6${iter}" COMPONENTS Private REQUIRED)
endforeach() endforeach()
endif() endif()
@ -41,4 +59,4 @@ macro(myx_find_required_packages)
unset(multiValueArgs) unset(multiValueArgs)
unset(oneValueArgs) unset(oneValueArgs)
unset(options) unset(options)
endmacro(myx_find_required_packages) endmacro(myx_find_packages)