summaryrefslogtreecommitdiffstats
path: root/cmake/modules/FindSMI.cmake
blob: 0fe39735fe6b2d64899e28b14271db6334711ff4 (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#
# - Find smi
# Find the native SMI includes and library
#
#  SMI_INCLUDE_DIRS - where to find smi.h, etc.
#  SMI_LIBRARIES    - List of libraries when using smi.
#  SMI_FOUND        - True if smi found.
#  SMI_DLL_DIR      - (Windows) Path to the SMI DLL.
#  SMI_DLL          - (Windows) Name of the SMI DLL.
#  SMI_SHARE_DIR    - (Windows) Path to the SMI MIBs.


IF (SMI_INCLUDE_DIR)
  # Already in cache, be silent
  SET(SMI_FIND_QUIETLY TRUE)
ENDIF (SMI_INCLUDE_DIR)

INCLUDE(FindWSWinLibs)
FindWSWinLibs("libsmi-.*" "SMI_HINTS")

FIND_PATH(SMI_INCLUDE_DIR smi.h HINTS "${SMI_HINTS}/include" )

IF(MSVC)
  SET(SMI_NAMES libsmi-2)
ELSE()
  SET(SMI_NAMES smi libsmi-2)
ENDIF()
FIND_LIBRARY(SMI_LIBRARY NAMES ${SMI_NAMES} HINTS "${SMI_HINTS}/lib" )

# handle the QUIETLY and REQUIRED arguments and set SMI_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SMI DEFAULT_MSG SMI_LIBRARY SMI_INCLUDE_DIR)

IF(SMI_FOUND)
  SET( SMI_LIBRARIES ${SMI_LIBRARY} )
  SET( SMI_INCLUDE_DIRS ${SMI_INCLUDE_DIR} )
  if (WIN32)
    set ( SMI_DLL_DIR "${SMI_HINTS}/bin"
      CACHE PATH "Path to the SMI DLL"
    )
    set ( SMI_SHARE_DIR "${SMI_HINTS}/share"
      CACHE PATH "Path to the SMI MIBs"
    )
    file( GLOB _smi_dll RELATIVE "${SMI_DLL_DIR}"
      "${SMI_DLL_DIR}/libsmi-*.dll"
    )
    set ( SMI_DLL ${_smi_dll}
      # We're storing filenames only. Should we use STRING instead?
      CACHE FILEPATH "SMI DLL file name"
    )
    mark_as_advanced( SMI_DLL_DIR SMI_DLL )
  endif()

  include(CheckSymbolExists)
  cmake_push_check_state()
  set(CMAKE_REQUIRED_INCLUDES ${SMI_INCLUDE_DIRS})
  set(CMAKE_REQUIRED_LIBRARIES ${SMI_LIBRARIES})
  # On Windows symbol visibility for global variables defaults to hidden
  # and libsmi doesn't use any visibility decorators.
  check_symbol_exists("smi_version_string" "smi.h" HAVE_SMI_VERSION_STRING)
  cmake_pop_check_state()

ELSE(SMI_FOUND)
  SET( SMI_LIBRARIES )
  SET( SMI_INCLUDE_DIRS )
  SET( SMI_DLL_DIR )
  SET( SMI_SHARE_DIR )
  SET( SMI_DLL )
ENDIF(SMI_FOUND)

MARK_AS_ADVANCED( SMI_LIBRARIES SMI_INCLUDE_DIRS )