summaryrefslogtreecommitdiff
blob: e47f61ee894abde0d6659a7a94f594f1cac8ed70 (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
--- /dev/null
+++ cmake/Modules/FindLibGeoIP.cmake
@@ -0,0 +1,68 @@
+# - Try to find GeoIP headers and libraries
+#
+# Usage of this module as follows:
+#
+#     find_package(LibGeoIP)
+#
+# Variables used by this module, they can change the default behaviour and need
+# to be set before calling find_package:
+#
+#  LibGeoIP_ROOT_DIR         Set this variable to the root installation of
+#                            libGeoIP if the module has problems finding the
+#                            proper installation path.
+#
+# Variables defined by this module:
+#
+#  LIBGEOIP_FOUND                   System has GeoIP libraries and headers
+#  LibGeoIP_LIBRARY                 The GeoIP library
+#  LibGeoIP_INCLUDE_DIR             The location of GeoIP headers
+#  HAVE_GEOIP_COUNTRY_EDITION_V6    Whether the API support IPv6 country edition
+#  HAVE_GEOIP_CITY_EDITION_REV0_V6  Whether the API supports IPv6 city edition
+
+find_path(LibGeoIP_ROOT_DIR
+    NAMES include/GeoIPCity.h
+)
+
+if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+    # the static version of the library is preferred on OS X for the
+    # purposes of making packages (libGeoIP doesn't ship w/ OS X)
+    set(libgeoip_names libGeoIp.a GeoIP)
+else ()
+    set(libgeoip_names GeoIP)
+endif ()
+
+find_library(LibGeoIP_LIBRARY
+    NAMES ${libgeoip_names}
+    HINTS ${LibGeoIP_ROOT_DIR}/lib
+)
+
+find_path(LibGeoIP_INCLUDE_DIR
+    NAMES GeoIPCity.h
+    HINTS ${LibGeoIP_ROOT_DIR}/include
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LibGeoIP DEFAULT_MSG
+    LibGeoIP_LIBRARY
+    LibGeoIP_INCLUDE_DIR
+)
+
+if (LIBGEOIP_FOUND)
+    include(CheckCXXSourceCompiles)
+    set(CMAKE_REQUIRED_INCLUDES ${LibGeoIP_INCLUDE_DIR})
+    check_cxx_source_compiles("
+    #include <GeoIPCity.h>
+    int main() { GEOIP_COUNTRY_EDITION_V6; return 0; }
+    " HAVE_GEOIP_COUNTRY_EDITION_V6)
+    check_cxx_source_compiles("
+    #include <GeoIPCity.h>
+    int main() { GEOIP_CITY_EDITION_REV0_V6; return 0; }
+    " HAVE_GEOIP_CITY_EDITION_REV0_V6)
+    set(CMAKE_REQUIRED_INCLUDES)
+endif ()
+
+mark_as_advanced(
+    LibGeoIP_ROOT_DIR
+    LibGeoIP_LIBRARY
+    LibGeoIP_INCLUDE_DIR
+)
\ No newline at end of file
diff --git a/cmake/Modules/FindPythonModule.cmake b/cmake/Modules/FindPythonModule.cmake
new file mode 100644
index 0000000..1a29315
--- /dev/null
+++ cmake/Modules/FindPythonModule.cmake
@@ -0,0 +1,24 @@
+# Find if a Python module is installed
+# Found at http://www.cmake.org/pipermail/cmake/2011-January/041666.html
+# To use do: find_python_module(PyQt4 REQUIRED)
+function(find_python_module module)
+	string(TOUPPER ${module} module_upper)
+	if(NOT PYTHON_${module_upper})
+		include (FindPythonInterp)
+		if(ARGC GREATER 1 AND ARGV1 STREQUAL "REQUIRED")
+			set(PY_${module}_FIND_REQUIRED TRUE)
+		endif()
+		# A module's location is usually a directory, but for binary modules
+		# it's a .so file.
+		execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" 
+			"import re, ${module}; print(re.compile('/__init__.py.*').sub('',${module}.__file__))"
+			RESULT_VARIABLE _${module}_status 
+			OUTPUT_VARIABLE _${module}_location
+			ERROR_QUIET 
+			OUTPUT_STRIP_TRAILING_WHITESPACE)
+		if(${_${module}_status} EQUAL 0)
+			set(PYTHON_${module_upper} ${_${module}_location} CACHE STRING "Location of Python module ${module}")
+		endif(${_${module}_status} EQUAL 0)
+	endif(NOT PYTHON_${module_upper})
+	find_package_handle_standard_args(PY_${module} DEFAULT_MSG PYTHON_${module_upper})
+endfunction(find_python_module)
\ No newline at end of file
diff --git a/cvmfs/CMakeLists.txt b/cvmfs/CMakeLists.txt
index cb09b94..44be85e 100644
--- cvmfs/CMakeLists.txt
+++ cvmfs/CMakeLists.txt
@@ -347,9 +347,9 @@ if (BUILD_SERVER)
   # create targets with corresponding sources and static link libraries
   add_executable (cvmfs_swissknife ${CVMFS_SWISSKNIFE_SOURCES})
   add_executable (cvmfs_suid_helper ${CVMFS_SUID_HELPER_SOURCES})
-  add_custom_target (geoip ALL)
 
   if (GEOIP_BUILTIN)
+    add_custom_target (geoip ALL)
     add_dependencies (python-geoip libgeoip)
     add_dependencies (geoip python-geoip)
   endif (GEOIP_BUILTIN)
--- CMakeLists.txt.orig	2015-08-04 15:33:53.383868890 +0000
+++ CMakeLists.txt	2015-08-04 15:58:03.133842858 +0000
@@ -145,6 +145,12 @@
 endif (EXISTS "${CMAKE_SOURCE_DIR}/bootstrap.sh")
 
 #
+# include some common functionality
+#
+include (FindPythonModule)
+
+
+#
 # set some default flags
 #
 # flags in CMAKE_C**_FLAGS are always passed to the compiler
@@ -309,13 +315,15 @@
   set (INCLUDE_DIRECTORIES ${INCLUDE_DIRECTORIES} ${GTEST_INCLUDE_DIRS})
 endif (GOOGLETEST_BUILTIN)
 
+if (BUILD_SERVER OR BUILD_UNITTESTS)
 if (GEOIP_BUILTIN)
   include (${LIBGEOIP_BUILTIN_LOCATION}/CVMFS-CMakeLists.txt)
   include (${PYTHON_GEOIP_BUILTIN_LOCATION}/CVMFS-CMakeLists.txt)
 else (GEOIP_BUILTIN)
-  find_package (GeoIP REQUIRED)
-  find_package (python-GeoIP REQUIRED)
+  find_package (LibGeoIP REQUIRED)
+  find_python_module (GeoIP REQUIRED)
 endif (GEOIP_BUILTIN)
+endif (BUILD_SERVER OR BUILD_UNITTESTS)
 
 # required libraries for client and libcvmfs
 if (BUILD_CVMFS OR BUILD_LIBCVMFS)