正在显示
1 个修改的文件
包含
258 行增加
和
0 行删除
CMakeLists.txt
0 → 100644
1 | +CMAKE_MINIMUM_REQUIRED(VERSION 3.6 FATAL_ERROR) | ||
2 | +# set path to additional CMake modules | ||
3 | +SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) | ||
4 | +#SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) | ||
5 | + | ||
6 | +############################################################# | ||
7 | +# Project and version | ||
8 | +SET(CPACK_PACKAGE_VERSION_MAJOR "3") | ||
9 | +SET(CPACK_PACKAGE_VERSION_MINOR "0") | ||
10 | +SET(CPACK_PACKAGE_VERSION_PATCH "0") | ||
11 | +SET(COMPLETE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}) | ||
12 | +SET(RELEASE_NAME "Master") | ||
13 | +PROJECT(DMap VERSION ${COMPLETE_VERSION}) | ||
14 | + | ||
15 | +# we default to Release build type | ||
16 | +# if(NOT CMAKE_BUILD_TYPE) | ||
17 | +# SET(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) | ||
18 | +# endif() | ||
19 | + | ||
20 | +MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}") | ||
21 | + | ||
22 | +# Note the version no is Mmmpp for Major/minor/patch, 0-padded, thus '10100' for 1.1.0 | ||
23 | +MATH(EXPR DMAP_VERSION_INT "${CPACK_PACKAGE_VERSION_MAJOR}*10000+${CPACK_PACKAGE_VERSION_MINOR}*100+${CPACK_PACKAGE_VERSION_PATCH}") | ||
24 | +MESSAGE(STATUS "DMAP version: ${COMPLETE_VERSION} ${RELEASE_NAME} (${DMAP_VERSION_INT})") | ||
25 | + | ||
26 | +SET (WITH_CORE TRUE CACHE BOOL "Determines whether DMap core should be built.") | ||
27 | +MARK_AS_ADVANCED(WITH_CORE) | ||
28 | + | ||
29 | +IF(WITH_CORE) | ||
30 | + | ||
31 | + SET (WITH_BINDINGS FALSE CACHE BOOL "Determines whether python bindings should be built") | ||
32 | + IF (WITH_BINDINGS) | ||
33 | + # By default bindings will be installed only to DMap directory | ||
34 | + # Someone might want to install it to python site-packages directory | ||
35 | + # as otherwise user has to use PYTHONPATH environment variable to add | ||
36 | + # DMap bindings to package search path | ||
37 | + SET (BINDINGS_GLOBAL_INSTALL TRUE CACHE BOOL "Install bindings to global python directory? (might need root)") | ||
38 | + SET (WITH_STAGED_PLUGINS FALSE CACHE BOOL "Stage-install core Python plugins to run from build directory? (utilities and console are always staged)") | ||
39 | + SET (WITH_PY_COMPILE FALSE CACHE BOOL "Determines whether Python modules in staged or installed locations are byte-compiled") | ||
40 | + ADD_DEFINITIONS(-DWITH_BINDINGS) | ||
41 | + ENDIF (WITH_BINDINGS) | ||
42 | + | ||
43 | + SET (WITH_SERVER TRUE CACHE BOOL "Determines whether DMap server should be built") | ||
44 | + IF(WITH_SERVER) | ||
45 | + SET (WITH_SERVER_PLUGINS ${WITH_BINDINGS} CACHE BOOL "Determines whether DMap server support for python plugins should be built") | ||
46 | + IF(WITH_SERVER_PLUGINS AND NOT WITH_BINDINGS) | ||
47 | + MESSAGE(FATAL_ERROR "Server plugins are not supported without python bindings. Enable WITH_BINDINGS or disable WITH_SERVER_PLUGINS") | ||
48 | + ENDIF(WITH_SERVER_PLUGINS AND NOT WITH_BINDINGS) | ||
49 | + IF(WITH_SERVER_PLUGINS) | ||
50 | + SET(HAVE_SERVER_PYTHON_PLUGINS TRUE) | ||
51 | + ENDIF(WITH_SERVER_PLUGINS) | ||
52 | + ENDIF(WITH_SERVER) | ||
53 | + | ||
54 | + # try to configure and build POSTGRESQL support | ||
55 | + SET (WITH_POSTGRESQL TRUE CACHE BOOL "Determines whether POSTGRESQL support should be built") | ||
56 | + IF (WITH_POSTGRESQL) | ||
57 | + SET (POSTGRESQL_PREFIX "" CACHE PATH "Path to POSTGRESQL base directory") | ||
58 | + ENDIF (WITH_POSTGRESQL) | ||
59 | + | ||
60 | + ############################################################# | ||
61 | + # search for dependencies | ||
62 | + | ||
63 | + # required | ||
64 | + FIND_PACKAGE(Boost 1.57 REQUIRED COMPONENTS filesystem REQUIRED) | ||
65 | + FIND_PACKAGE(Boost 1.57 COMPONENTS regex REQUIRED) | ||
66 | + FIND_PACKAGE(Boost 1.57 COMPONENTS system REQUIRED) | ||
67 | + #FIND_PACKAGE(Proj) | ||
68 | + #FIND_PACKAGE(GEOS) | ||
69 | + #FIND_PACKAGE(GDAL) | ||
70 | + #FIND_PACKAGE(Spatialindex REQUIRED) | ||
71 | + | ||
72 | + # optional | ||
73 | + IF (WITH_POSTGRESQL) | ||
74 | + FIND_PACKAGE(Postgres) # PostgreSQL provider | ||
75 | + ENDIF (WITH_POSTGRESQL) | ||
76 | + | ||
77 | + #[[ | ||
78 | + IF (NOT PROJ_FOUND OR NOT GEOS_FOUND OR NOT GDAL_FOUND) | ||
79 | + MESSAGE (SEND_ERROR "Some dependencies were not found! Proj: ${PROJ_FOUND}, Geos: ${GEOS_FOUND}, GDAL: ${GDAL_FOUND}") | ||
80 | + ENDIF (NOT PROJ_FOUND OR NOT GEOS_FOUND OR NOT GDAL_FOUND) | ||
81 | + ]] | ||
82 | + IF (POSTGRES_FOUND) | ||
83 | + SET (HAVE_POSTGRESQL TRUE) | ||
84 | + ENDIF (POSTGRES_FOUND) | ||
85 | + | ||
86 | +ENDIF(WITH_CORE) | ||
87 | + | ||
88 | +############################################################# | ||
89 | +SET(CMAKE_CXX_STANDARD 11) | ||
90 | +############################################################# | ||
91 | +# platform specific stuff | ||
92 | +IF (WITH_CORE) | ||
93 | + IF (WIN32) | ||
94 | + ADD_DEFINITIONS(-DIS_WIN32) | ||
95 | + SET (DEFAULT_LIB_SUBDIR lib) | ||
96 | + SET (DEFAULT_LIBEXEC_SUBDIR .) | ||
97 | + SET (DEFAULT_DATA_SUBDIR .) | ||
98 | + SET (DEFAULT_PLUGIN_SUBDIR plugins) | ||
99 | + SET (DEFAULT_INCLUDE_SUBDIR include) | ||
100 | + SET (DEFAULT_SERVER_MODULE_SUBDIR server) | ||
101 | + | ||
102 | + IF (MSVC) | ||
103 | + SET (DEFAULT_BIN_SUBDIR bin) | ||
104 | + SET (DEFAULT_CGIBIN_SUBDIR bin) | ||
105 | + # put all the build products into a single directory | ||
106 | + # under build (doesn't affect install target) to make for | ||
107 | + # easier debugging. | ||
108 | + | ||
109 | + # Turn on defines for non standard maths stuff | ||
110 | + ADD_DEFINITIONS(-D_USE_MATH_DEFINES) | ||
111 | + | ||
112 | + # Turn off deprecation warnings | ||
113 | + ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) | ||
114 | + ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_WARNINGS) | ||
115 | + | ||
116 | + IF (INSTALL_DEPS) | ||
117 | + INSTALL(DIRECTORY ${INSTALL_DEPS} DESTINATION .) | ||
118 | + ENDIF (INSTALL_DEPS) | ||
119 | + ELSE(MSVC) | ||
120 | + SET (DEFAULT_BIN_SUBDIR .) | ||
121 | + SET (DEFAULT_CGIBIN_SUBDIR .) | ||
122 | + ENDIF(MSVC) | ||
123 | + ELSE (WIN32) | ||
124 | + # UNIX | ||
125 | + ADD_DEFINITIONS(-DIS_LINUX) | ||
126 | + SET (DEFAULT_BIN_SUBDIR bin) | ||
127 | + SET (DEFAULT_CGIBIN_SUBDIR bin) | ||
128 | + SET (DEFAULT_LIB_SUBDIR lib${LIB_SUFFIX}) | ||
129 | + SET (DEFAULT_DATA_SUBDIR share/dmap) | ||
130 | + SET (DEFAULT_LIBEXEC_SUBDIR lib${LIB_SUFFIX}/dmap) | ||
131 | + SET (DEFAULT_PLUGIN_SUBDIR lib${LIB_SUFFIX}/dmap/plugins) | ||
132 | + SET (DEFAULT_INCLUDE_SUBDIR include/dmap) | ||
133 | + SET (DEFAULT_SERVER_MODULE_SUBDIR ${DEFAULT_LIBEXEC_SUBDIR}/server) | ||
134 | + ENDIF (WIN32) | ||
135 | + #[[ | ||
136 | + if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") | ||
137 | + SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") | ||
138 | + SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined") | ||
139 | + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined") | ||
140 | + endif() #"${CMAKE_SYSTEM_NAME}" MATCHES "Linux") | ||
141 | + ]] | ||
142 | + INCLUDE(GenerateExportHeader) | ||
143 | + | ||
144 | +ENDIF (WITH_CORE) | ||
145 | + | ||
146 | + | ||
147 | +############################################################# | ||
148 | +# user-changeable settings which can be used to customize | ||
149 | +# layout of DMAP installation | ||
150 | +# (default values are platform-specific) | ||
151 | + | ||
152 | +SET (DMAP_BIN_SUBDIR ${DEFAULT_BIN_SUBDIR} CACHE STRING "Subdirectory where executables will be installed") | ||
153 | +SET (DMAP_CGIBIN_SUBDIR ${DEFAULT_CGIBIN_SUBDIR} CACHE STRING "Subdirectory where CGI executables will be installed") | ||
154 | +SET (DMAP_LIB_SUBDIR ${DEFAULT_LIB_SUBDIR} CACHE STRING "Subdirectory where libraries will be installed") | ||
155 | +SET (DMAP_LIBEXEC_SUBDIR ${DEFAULT_LIBEXEC_SUBDIR} CACHE STRING "Subdirectory where private executables will be installed") | ||
156 | +SET (DMAP_DATA_SUBDIR ${DEFAULT_DATA_SUBDIR} CACHE STRING "Subdirectory where DMAP data will be installed") | ||
157 | +SET (DMAP_PLUGIN_SUBDIR ${DEFAULT_PLUGIN_SUBDIR} CACHE STRING "Subdirectory where plugins will be installed") | ||
158 | +SET (DMAP_INCLUDE_SUBDIR ${DEFAULT_INCLUDE_SUBDIR} CACHE STRING "Subdirectory where header files will be installed") | ||
159 | +SET (DMAP_SERVER_MODULE_SUBDIR ${DEFAULT_SERVER_MODULE_SUBDIR} CACHE STRING "Subdirectory where server modules will be installed") | ||
160 | + | ||
161 | +# mark *_SUBDIR variables as advanced as this is not something | ||
162 | +# that an average user would use | ||
163 | +MARK_AS_ADVANCED (DMAP_BIN_SUBDIR DMAP_CGIBIN_SUBDIR DMAP_LIB_SUBDIR DMAP_LIBEXEC_SUBDIR DMAP_DATA_SUBDIR DMAP_PLUGIN_SUBDIR DMAP_INCLUDE_SUBDIR) | ||
164 | + | ||
165 | +# full paths for the installation | ||
166 | +SET (DMAP_BIN_DIR ${DMAP_BIN_SUBDIR}) | ||
167 | +SET (DMAP_CGIBIN_DIR ${DMAP_CGIBIN_SUBDIR}) | ||
168 | +SET (DMAP_LIB_DIR ${DMAP_LIB_SUBDIR}) | ||
169 | +SET (DMAP_LIBEXEC_DIR ${DMAP_LIBEXEC_SUBDIR}) | ||
170 | +SET (DMAP_DATA_DIR ${DMAP_DATA_SUBDIR}) | ||
171 | +SET (DMAP_PLUGIN_DIR ${DMAP_PLUGIN_SUBDIR}) | ||
172 | +SET (DMAP_INCLUDE_DIR ${DMAP_INCLUDE_SUBDIR}) | ||
173 | +SET (DMAP_SERVER_MODULE_DIR ${DMAP_SERVER_MODULE_SUBDIR}) | ||
174 | + | ||
175 | +# set the default locations where the targets (executables, libraries) will land when compiled | ||
176 | +# this is to allow running dmap from the source tree without having to actually do a "make install" | ||
177 | +SET (DMAP_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output) | ||
178 | +SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DMAP_OUTPUT_DIRECTORY}/${DMAP_BIN_SUBDIR}) | ||
179 | +SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${DMAP_OUTPUT_DIRECTORY}/${DMAP_LIB_SUBDIR}) | ||
180 | + | ||
181 | +# write a marker with source directory path into the output's bin directory | ||
182 | +# if run from the build directory DMAP will detect it and alter the paths | ||
183 | +FILE(WRITE ${DMAP_OUTPUT_DIRECTORY}/${DMAP_BIN_SUBDIR}/dmapbuildpath.txt "${CMAKE_SOURCE_DIR}\n${DMAP_OUTPUT_DIRECTORY}") | ||
184 | + | ||
185 | +############################################################# | ||
186 | +# Python build dependency | ||
187 | + | ||
188 | +FIND_PACKAGE(PythonInterp 3 REQUIRED) | ||
189 | + | ||
190 | +############################################################# | ||
191 | +# Python bindings | ||
192 | + | ||
193 | +# IF (WITH_CORE AND WITH_BINDINGS) | ||
194 | + | ||
195 | + FIND_PACKAGE(PythonLibrary ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} EXACT REQUIRED) | ||
196 | + LIST( | ||
197 | + APPEND _components | ||
198 | + python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} | ||
199 | + python${PYTHON_VERSION_MAJOR} | ||
200 | + python | ||
201 | + ) | ||
202 | + SET(DMAP_BOOST_PYTHON_FOUND "") | ||
203 | + | ||
204 | + foreach(_component IN ITEMS ${_components}) | ||
205 | + find_package(Boost COMPONENTS ${_component}) | ||
206 | + if(Boost_FOUND) | ||
207 | + SET(DMAP_BOOST_PYTHON_FOUND ${_component}) | ||
208 | + break() | ||
209 | + endif() | ||
210 | + endforeach() | ||
211 | + | ||
212 | + if(DMAP_BOOST_PYTHON_FOUND STREQUAL "") | ||
213 | + message(FATAL_ERROR "No matching Boost.Python component found") | ||
214 | + endif() | ||
215 | + #MESSAGE(STATUS "XXX python: ${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}") | ||
216 | + | ||
217 | + IF (NOT BINDINGS_GLOBAL_INSTALL) | ||
218 | + SET(PYTHON_SITE_PACKAGES_DIR ${DMAP_DATA_DIR}/python) | ||
219 | + ENDIF (NOT BINDINGS_GLOBAL_INSTALL) | ||
220 | + | ||
221 | +# ENDIF (WITH_CORE AND WITH_BINDINGS) | ||
222 | + | ||
223 | +############################################################# | ||
224 | +# create dmpconfig.h | ||
225 | +# installed with app target | ||
226 | +CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake_templates/dmpconfig.h.in ${CMAKE_BINARY_DIR}/dmpconfig.h) | ||
227 | +INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}) | ||
228 | + | ||
229 | +#[[ | ||
230 | +message(STATUS "Project will be installed to ${CMAKE_INSTALL_PREFIX}") | ||
231 | + | ||
232 | +include(GNUInstallDirs) | ||
233 | +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) | ||
234 | +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) | ||
235 | +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) | ||
236 | + | ||
237 | +set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries") | ||
238 | +set(INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for executables") | ||
239 | +set(INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Installation directory for header files") | ||
240 | + | ||
241 | +# Report to user | ||
242 | +foreach(p LIB BIN INCLUDE CMAKE) | ||
243 | + file(TO_NATIVE_PATH ${CMAKE_INSTALL_PREFIX}/${INSTALL_${p}DIR} _path ) | ||
244 | + message(STATUS "Installing ${p} components to ${_path}") | ||
245 | + unset(_path) | ||
246 | +endforeach() | ||
247 | +]] | ||
248 | +############################################################# | ||
249 | +# process subdirs | ||
250 | + | ||
251 | +ADD_SUBDIRECTORY(apache) | ||
252 | +ADD_SUBDIRECTORY(src) | ||
253 | + | ||
254 | +# enable testing and define tests | ||
255 | +#enable_testing() | ||
256 | +#add_subdirectory(tests) | ||
257 | + | ||
258 | + |
请
注册
或
登录
后发表评论