b4251a0102a0a9c4c2e4236347f4c8d15a8ba461
[novacoin.git] / src / additional / cmake / ExternalLibraryHelper.cmake
1 include(FindPackageMessage)
2
3 # Find a library component, set the variables and create an imported target.
4 # Variable names are compliant with cmake standards.
5 function(find_component LIB COMPONENT)
6         cmake_parse_arguments(ARG
7                 ""
8                 ""
9                 "HINTS;INCLUDE_DIRS;INTERFACE_LINK_LIBRARIES;NAMES;PATHS;PATH_SUFFIXES"
10                 ${ARGN}
11         )
12
13         # If the component is not requested, skip the search.
14         if(${LIB}_FIND_COMPONENTS AND NOT ${COMPONENT} IN_LIST ${LIB}_FIND_COMPONENTS)
15                 return()
16         endif()
17
18         find_library(${LIB}_${COMPONENT}_LIBRARY
19                 NAMES ${ARG_NAMES}
20                 PATHS "" ${ARG_PATHS}
21                 HINTS "" ${ARG_HINTS}
22                 PATH_SUFFIXES "lib" ${ARG_PATH_SUFFIXES}
23         )
24         mark_as_advanced(${LIB}_${COMPONENT}_LIBRARY)
25
26         if(${LIB}_${COMPONENT}_LIBRARY)
27                 # On success, set the standard FOUND variable...
28                 set(${LIB}_${COMPONENT}_FOUND TRUE PARENT_SCOPE)
29
30                 # ... and append the library path to the LIBRARIES variable ...
31                 list(APPEND ${LIB}_LIBRARIES
32                         "${${LIB}_${COMPONENT}_LIBRARY}"
33                         ${ARG_INTERFACE_LINK_LIBRARIES}
34                 )
35                 list(REMOVE_DUPLICATES ${LIB}_LIBRARIES)
36                 set(${LIB}_LIBRARIES ${${LIB}_LIBRARIES} PARENT_SCOPE)
37
38                 # ... and create an imported target for the component, if not already
39                 # done.
40                 if(NOT TARGET ${LIB}::${COMPONENT})
41                         add_library(${LIB}::${COMPONENT} UNKNOWN IMPORTED)
42                         set_target_properties(${LIB}::${COMPONENT} PROPERTIES
43                                 IMPORTED_LOCATION "${${LIB}_${COMPONENT}_LIBRARY}"
44                         )
45                         set_property(TARGET ${LIB}::${COMPONENT} PROPERTY
46                                 INTERFACE_INCLUDE_DIRECTORIES ${ARG_INCLUDE_DIRS}
47                         )
48                         set_property(TARGET ${LIB}::${COMPONENT} PROPERTY
49                                 INTERFACE_LINK_LIBRARIES ${ARG_INTERFACE_LINK_LIBRARIES}
50                         )
51                 endif()
52
53                 find_package_message("${LIB}_${COMPONENT}"
54                         "Found ${LIB} component ${COMPONENT}: ${${LIB}_${COMPONENT}_LIBRARY}"
55                         "[${${LIB}_${COMPONENT}_LIBRARY}][${ARG_INCLUDE_DIRS}]"
56                 )
57         endif()
58 endfunction()