myx/MyxCMake/lib/macro/FindPackages.cmake

63 lines
2.4 KiB
CMake
Raw Normal View History

#[=======================================================================[.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`.
#]=======================================================================]
2022-10-04 03:08:31 +00:00
include_guard(GLOBAL)
macro(myx_find_packages)
2022-10-04 03:08:31 +00:00
set(options)
set(oneValueArgs)
set(multiValueArgs REQUIRED OPTIONAL PKG_REQUIRED PKG_OPTIONAL)
2022-10-04 03:08:31 +00:00
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
foreach(iter ${ARG_REQUIRED})
2022-10-04 03:08:31 +00:00
find_package(${iter} REQUIRED)
endforeach()
foreach(iter ${ARG_OPTIONAL})
find_package(${iter})
endforeach()
2022-10-04 03:08:31 +00:00
if(ARG_PKG_REQUIRED)
find_package(PkgConfig REQUIRED)
foreach(iter ${ARG_PKG_REQUIRED})
string(TOUPPER ${iter} iu)
pkg_check_modules(${iu} REQUIRED ${iter})
2022-10-04 03:08:31 +00:00
endforeach()
endif()
if(ARG_PKG_OPTIONAL)
find_package(PkgConfig REQUIRED)
foreach(iter ${ARG_PKG_OPTIONAL})
string(TOUPPER ${iter} iu)
pkg_check_modules(${iu} ${iter})
2023-07-30 07:10:29 +00:00
endforeach()
endif()
2022-10-24 17:03:42 +00:00
foreach(__iter IN LISTS oneValueArgs multiValueArgs)
unset(ARG_${__iter})
2022-10-04 03:08:31 +00:00
endforeach()
unset(ARG_UNPARSED_ARGUMENTS)
unset(multiValueArgs)
unset(oneValueArgs)
unset(options)
endmacro(myx_find_packages)