From 7bb6c2d39cf6c81b9051c76432793e6c4e8facad Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Sun, 30 Jul 2023 13:33:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D0=BD=D0=B0=20myx=5Ffi?= =?UTF-8?q?nd=5Frequired=5Fpackages=20=D0=BD=D0=B0=20myx=5Ffind=5Fpackages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MyxCMake/lib/macro/FindPackages.cmake | 60 +++++++++++++++++---------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/MyxCMake/lib/macro/FindPackages.cmake b/MyxCMake/lib/macro/FindPackages.cmake index eecd465..b18d17b 100644 --- a/MyxCMake/lib/macro/FindPackages.cmake +++ b/MyxCMake/lib/macro/FindPackages.cmake @@ -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) -macro(myx_find_required_packages) +macro(myx_find_packages) set(options) 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}) - foreach(iter ${ARG_PACKAGES}) + foreach(iter ${ARG_REQUIRED}) find_package(${iter} REQUIRED) endforeach() - if(ARG_Boost) - find_package(Boost COMPONENTS ${ARG_Boost} REQUIRED) - endif() + foreach(iter ${ARG_OPTIONAL}) + find_package(${iter}) + endforeach() - if(ARG_Qt5) - find_package(Qt5 COMPONENTS ${ARG_Qt5} REQUIRED) - endif() - - if(ARG_Qt5Private) - foreach(iter ${ARG_Qt5Private}) - find_package("Qt5${iter}" COMPONENTS Private REQUIRED) + if(ARG_PKG_REQUIRED) + find_package(PkgConfig REQUIRED) + foreach(iter ${ARG_PKG_REQUIRED}) + string(TOUPPER ${iter} iu) + pkg_check_modules(${iu} REQUIRED ${iter}) endforeach() endif() - if(ARG_Qt6) - find_package(Qt6 COMPONENTS ${ARG_Qt6} REQUIRED) - endif() - - if(ARG_Qt6Private) - foreach(iter ${ARG_Qt6Private}) - find_package("Qt6${iter}" COMPONENTS Private REQUIRED) + if(ARG_PKG_OPTIONAL) + find_package(PkgConfig REQUIRED) + foreach(iter ${ARG_PKG_OPTIONAL}) + string(TOUPPER ${iter} iu) + pkg_check_modules(${iu} ${iter}) endforeach() endif() @@ -41,4 +59,4 @@ macro(myx_find_required_packages) unset(multiValueArgs) unset(oneValueArgs) unset(options) -endmacro(myx_find_required_packages) +endmacro(myx_find_packages)