summaryrefslogtreecommitdiff
path: root/cmake/SimpleFindPackage.cmake
blob: 120b1a70d30ef6cf56d0373404444a017886a505 (plain)
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
macro(simple_find_package pkg)
  set(oneValueArgs PKGCFG_NAME)
  set(multiValueArgs PATH_SUFFIXES INCLUDE_NAMES LIB_NAMES)
  cmake_parse_arguments(arg "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  find_package(PkgConfig QUIET)
  pkg_check_modules(PC_${pkg} QUIET ${arg_PKGCFG_NAME})

  find_path(${pkg}_INCLUDE_DIR
    NAMES ${arg_INCLUDE_NAMES}
    HINTS ${PC_${pkg}_INCLUDE_DIRS}
    PATH_SUFFIXES ${arg_PATH_SUFFIXES})

  find_library(${pkg}_LIBRARY
    NAMES ${arg_LIB_NAMES}
    HINTS ${PC_${pkg}_LIBRARY_DIRS})

  mark_as_advanced(${pkg}_LIBRARY ${pkg}_INCLUDE_DIR)

  include(FindPackageHandleStandardArgs)
  find_package_handle_standard_args(${pkg} 
    FOUND_VAR ${pkg}_FOUND
    REQUIRED_VARS
      ${pkg}_LIBRARY
      ${pkg}_INCLUDE_DIR)

  if (${pkg}_FOUND)
    set(${pkg}_INCLUDE_DIRS ${${pkg}_INCLUDE_DIR})
    set(${pkg}_LIBRARIES ${${pkg}_LIBRARY})
  endif()

  if (${pkg}_FOUND AND NOT TARGET ${pkg}::${pkg})
    add_library(${pkg}::${pkg} UNKNOWN IMPORTED)
    set_target_properties(${pkg}::${pkg} PROPERTIES
      IMPORTED_LOCATION "${${pkg}_LIBRARY}"
      INTERFACE_INCLUDE_DIRECTORIES "${${pkg}_INCLUDE_DIR}")
  endif()
endmacro()