aboutsummaryrefslogtreecommitdiff
path: root/cmake/MultiFind.cmake
blob: b40a4677ca101336d1162d3b8ec0df1d53900e2e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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()