find_package(PkgConfig)
-include(SafeString)
-include(CheckHeader)
+function(check_dependency NAME LIB)
+ make_have_identifier(${NAME} HAVE)
+ configure_define(${HAVE})
-function(check_dependency_basic NAME LIB HEADER)
- set(FOUND 1)
- message("-- Checking for library '${LIB}' with header '${HEADER}' ...")
- find_library(LIB${LIB} NAMES ${LIB})
- if(NOT LIB${LIB})
- set(FOUND 0)
- endif()
- if(HEADER)
- safe_string(${HEADER} HEADER_CONST)
- check_header(${HEADER})
- if(NOT HAVE_${HEADER_CONST})
- set(FOUND 0)
- else()
- find_path(${HEADER_CONST}_ROOT ${HEADER})
- if(NOT ${HEADER_CONST}_ROOT)
- set(FOUND 0)
- endif()
- endif()
- endif()
- if(FOUND)
- message("-- Found library '${LIB${LIB}}'")
- message("-- Found include '${${HEADER_CONST}_ROOT}'")
- else()
- message("-- No library '${LIB}' found")
- endif()
- set(${NAME} ${FOUND} PARENT_SCOPE)
- set(${NAME}_LIBRARIES ${LIB${LIB}} PARENT_SCOPE)
- set(${NAME}_INCLUDEDIR ${${HEADER_CONST}_ROOT} PARENT_SCOPE)
-endfunction()
-
-function(check_dependency NAME LIB HEADER)
if(PKG_CONFIG_FOUND)
- pkg_check_modules(${NAME} lib${LIB}${ARGN})
+ pkg_check_modules(${NAME} lib${LIB}${ARGN} IMPORTED_TARGET)
if(NOT ${NAME}_FOUND)
- pkg_check_modules(${NAME} ${LIB}${ARGN})
+ pkg_check_modules(${NAME} ${LIB}${ARGN} IMPORTED_TARGET)
endif()
- if(NOT ${NAME}_FOUND)
- check_dependency_basic(${NAME} ${LIB} ${HEADER})
- else()
- set(${NAME} ${${NAME}_FOUND} PARENT_SCOPE)
- set(${NAME}_LIBRARIES ${${NAME}_LDFLAGS} PARENT_SCOPE)
- set(${NAME}_INCLUDEDIR ${${NAME}_INCLUDEDIR} PARENT_SCOPE)
+ if(${NAME}_FOUND)
+ set(${NAME} PkgConfig::${NAME} CACHE INTERNAL "${NAME} import target")
+ set(${HAVE} 1 CACHE INTERNAL "${HAVE}")
+ return()
+ endif()
+ endif()
- safe_string(${LIB} LIB_CONST)
- set(HAVE_${NAME} ${${NAME}_FOUND} PARENT_SCOPE)
- safe_string(${HEADER} HEADER_CONST)
- find_path(HAVE_${HEADER_CONST} ${HEADER} PATHS ${${NAME}_INCLUDEDIR})
- endif()
- else()
- check_dependency_basic(${NAME} ${LIB} ${HEADER})
+ message(STATUS "Checking for library '${LIB}' ...")
+ find_library(${NAME}_LIB NAMES ${LIB})
+ if(${NAME}_LIB)
+ mark_as_advanced(${NAME}_LIB)
+ message(STATUS " Found '${${NAME}_LIB}'")
+
+ set(${NAME}_INCLUDES "")
+ foreach(PATH IN_LIST CMAKE_PREFIX_PATHS)
+ if(${NAME}_LIB MATCHES "^${PATH}")
+ set(${NAME}_INCLUDES "${PATH}/include")
+ break()
+ endif()
+ endforeach()
+
+ add_library(Imported::${NAME} INTERFACE IMPORTED)
+ set_target_properties(Imported::${NAME} PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${${NAME}_INCLUDES}"
+ INTERFACE_LINK_LIBRARIES ${${NAME}_LIB})
+
+ set(${NAME} Imported::${NAME} CACHE INTERNAL "${NAME} import target")
+ set(${HAVE} 1 CACHE INTERNAL "${HAVE}")
+ return()
endif()
+
+ message(STATUS " Not found")
endfunction()