diff options
Diffstat (limited to 'cmake/MultiFind.cmake')
-rw-r--r-- | cmake/MultiFind.cmake | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/cmake/MultiFind.cmake b/cmake/MultiFind.cmake new file mode 100644 index 00000000..b40a4677 --- /dev/null +++ b/cmake/MultiFind.cmake @@ -0,0 +1,45 @@ +include(CMakeParseArguments) + +function(find_packages result) + cmake_parse_arguments(ARGS "" "" "REQUIRED;OPTIONAL" ${ARGN}) + set(_res "") + set(_res_libs "") + foreach(pkg ${ARGS_REQUIRED}) + string(REPLACE ">=" ";" pkg_ ${pkg}) + list(GET pkg_ "0" pkg) + list(LENGTH pkg_ pkg_has_version) + if(pkg_has_version GREATER 1) + list(GET pkg_ "1" pkg_version) + else() + if(${pkg}_GLOBAL_VERSION) + set(pkg_version ${${pkg}_GLOBAL_VERSION}) + else() + unset(pkg_version) + endif() + endif() + find_package(${pkg} ${pkg_version} REQUIRED) + list(APPEND _res ${${pkg}_PKG_CONFIG_NAME}) + list(APPEND _res_libs ${${pkg}_LIBRARIES}) + endforeach(pkg) + foreach(pkg ${ARGS_OPTIONAL}) + string(REPLACE ">=" ";" pkg_ ${pkg}) + list(GET pkg_ "0" pkg) + list(LENGTH pkg_ pkg_has_version) + if(pkg_has_version GREATER 1) + list(GET pkg_ "1" pkg_version) + else() + if(${pkg}_GLOBAL_VERSION) + set(pkg_version ${${pkg}_GLOBAL_VERSION}) + else() + unset(pkg_version) + endif() + endif() + find_package(${pkg} ${pkg_version}) + if(${pkg}_FOUND) + list(APPEND _res ${${pkg}_PKG_CONFIG_NAME}) + list(APPEND _res_libs ${${pkg}_LIBRARIES}) + endif() + endforeach(pkg) + set(${result} "${_res}" PARENT_SCOPE) + set(${result}_LIBS "${_res_libs}" PARENT_SCOPE) +endfunction() |