src/platform/cmake/FindFeature.cmake (view raw)
1include(FindPkgConfig)
2function(find_feature FEATURE_NAME FEATURE_REQUIRES)
3 if (NOT ${FEATURE_NAME})
4 return()
5 endif()
6 if (DISABLE_DEPS)
7 set(${FEATURE_NAME} OFF PARENT_SCOPE)
8 return()
9 endif()
10 foreach(NAMES ${FEATURE_REQUIRES})
11 string(REPLACE "|" ";" NAMELIST "${NAMES}")
12 set(FOUND OFF)
13 foreach(REQUIRE ${NAMELIST})
14 if(NOT ${REQUIRE}_FOUND)
15 find_package(${REQUIRE} QUIET)
16 if(NOT ${REQUIRE}_FOUND)
17 pkg_search_module(${REQUIRE} ${REQUIRE})
18 endif()
19 endif()
20 if(${REQUIRE}_FOUND)
21 string(TOUPPER ${REQUIRE} UREQUIRE)
22 set(${UREQUIRE}_CFLAGS_OTHER ${${REQUIRE}_CFLAGS_OTHER} PARENT_SCOPE)
23 set(${UREQUIRE}_FOUND ${${REQUIRE}_FOUND} PARENT_SCOPE)
24 set(${UREQUIRE}_INCLUDE_DIRS ${${REQUIRE}_INCLUDE_DIRS} PARENT_SCOPE)
25 set(${UREQUIRE}_VERSION_STRING ${${REQUIRE}_VERSION_STRING} PARENT_SCOPE)
26 if (APPLE)
27 set(IS_FRAMEWORK OFF)
28 set(LIBS)
29 foreach(LIB IN LISTS ${REQUIRE}_LIBRARIES)
30 if(LIB STREQUAL "-framework")
31 set(IS_FRAMEWORK ON)
32 elseif(IS_FRAMEWORK)
33 list(APPEND LIBS "-framework ${LIB}")
34 set(IS_FRAMEWORK OFF)
35 else()
36 list(APPEND LIBS ${LIB})
37 endif()
38 endforeach()
39 set(${UREQUIRE}_LIBRARIES ${LIBS} PARENT_SCOPE)
40 else()
41 set(${UREQUIRE}_LIBRARIES ${${REQUIRE}_LIBRARIES} PARENT_SCOPE)
42 endif()
43 set(${UREQUIRE}_LIBRARY_DIRS ${${REQUIRE}_LIBRARY_DIRS} PARENT_SCOPE)
44 set(${UREQUIRE}_LDFLAGS_OTHER ${${REQUIRE}_LDFLAGS_OTHER} PARENT_SCOPE)
45 set(FOUND ON)
46 break()
47 endif()
48 endforeach()
49
50 if (NOT FOUND)
51 message(WARNING "Requested module ${NAMES} missing for feature ${FEATURE_NAME}. Feature disabled.")
52 set(${FEATURE_NAME} OFF PARENT_SCOPE)
53 return()
54 endif()
55 endforeach()
56endfunction()