提交 1b273ff46a8489a91966c93555f2116ba3529799

作者 LJH 李佳桓
1 个父辈 68bac308

add

正在显示 1 个修改的文件 包含 258 行增加0 行删除
  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 +
注册登录 后发表评论