正在显示
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 | + | ... | ... |
请
注册
或
登录
后发表评论