summaryrefslogtreecommitdiff
path: root/cmake/modules/FindGEOIP.cmake
blob: a8e671f4ce3990e76b3f9f66d9d2fa803d8f0d4a (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
#
# - Find GeoIP
# Find the native GEOIP includes and library
#
#  GEOIP_INCLUDE_DIRS - where to find GeoIP.h, etc.
#  GEOIP_LIBRARIES    - List of libraries when using GeoIP.
#  GEOIP_FOUND        - True if GeoIP found.
#  GEOIP_DLL_DIR      - (Windows) Path to the GeoIP DLL.
#  GEOIP_DLL          - (Windows) Name of the GeoIP DLL.


IF (GEOIP_INCLUDE_DIRS)
  # Already in cache, be silent
  SET(GEOIP_FIND_QUIETLY TRUE)
ENDIF (GEOIP_INCLUDE_DIRS)

INCLUDE(FindWSWinLibs)
FindWSWinLibs("GeoIP-.*" "GEOIP_HINTS")

find_package(PkgConfig)
pkg_search_module(GEOIP geoip)

FIND_PATH(GEOIP_INCLUDE_DIR GeoIP.h
  HINTS
    "${GEOIP_INCLUDEDIR}"
    "${GEOIP_HINTS}/include"
)

SET(GEOIP_NAMES GeoIP libGeoIP-1)
FIND_LIBRARY(GEOIP_LIBRARY NAMES ${GEOIP_NAMES}
  HINTS
    "${GEOIP_LIBDIR}"
    "${GEOIP_HINTS}/lib"
  )

# handle the QUIETLY and REQUIRED arguments and set GEOIP_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GEOIP DEFAULT_MSG GEOIP_LIBRARY GEOIP_INCLUDE_DIR)

IF(GEOIP_FOUND)
  SET(GEOIP_LIBRARIES ${GEOIP_LIBRARY} )
  SET(GEOIP_INCLUDE_DIRS ${GEOIP_INCLUDE_DIR} )
  INCLUDE(CheckFunctionExists)
  SET(CMAKE_REQUIRED_INCLUDES ${GEOIP_INCLUDE_DIRS})
  SET(CMAKE_REQUIRED_LIBRARIES ${GEOIP_LIBRARIES})
  CHECK_FUNCTION_EXISTS("GeoIP_country_name_by_ipnum_v6" HAVE_GEOIP_V6)
  CHECK_FUNCTION_EXISTS("GeoIP_free" HAVE_GEOIP_FREE)
  SET(CMAKE_REQUIRED_INCLUDES "")
  SET(CMAKE_REQUIRED_LIBRARIES "")
  if (WIN32)
    set ( GEOIP_DLL_DIR "${GEOIP_HINTS}/bin"
      CACHE PATH "Path to the GeoIP DLL"
    )
    file( GLOB _geoip_dll RELATIVE "${GEOIP_DLL_DIR}"
      "${GEOIP_DLL_DIR}/libGeoIP-*.dll"
    )
    set ( GEOIP_DLL ${_geoip_dll}
      # We're storing filenames only. Should we use STRING instead?
      CACHE FILEPATH "GeoIP DLL file name"
    )
    mark_as_advanced( GEOIP_DLL_DIR GEOIP_DLL )
  endif()
ELSE(GEOIP_FOUND)
  SET(GEOIP_LIBRARIES )
  SET(GEOIP_INCLUDE_DIRS )
  SET(GEOIP_DLL_DIR )
  SET(GEOIP_DLL )
ENDIF(GEOIP_FOUND)

MARK_AS_ADVANCED( GEOIP_LIBRARIES GEOIP_INCLUDE_DIRS )