Merge branch 'modern-cmake' of pramsey/geos into master
continuous-integration/drone/push Build is passing Details

3.8
pramsey 2019-05-16 19:47:19 -07:00 committed by Gitea
commit b15fd11718
36 changed files with 643 additions and 1054 deletions

View File

@ -37,6 +37,8 @@ end_of_line = crlf
[CMakeLists.txt]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
# CMake modules
[*.cmake]

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
/*build*
/*install*
aclocal.m4
Makefile.in
Makefile

View File

@ -1,336 +1,263 @@
#################################################################################
##############################################################################
# Part of CMake configuration for GEOS
#
# Main GEOS build configuration file for CMake build system
#
# Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018-2019 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
cmake_minimum_required(VERSION 3.1.3)
##############################################################################
if(NOT CMAKE_VERSION)
set(CMAKE_VERSION
"${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
# Require CMake 3.8+ with support for meta-features that request compiler
# modes for specific C/C++ language standard levels.
cmake_minimum_required(VERSION 3.8)
# Require CMake 3.14+ with VS generator for complete support of VS versions.
if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
endif()
if(POLICY CMP0048)
cmake_policy(SET CMP0048 NEW)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
# TODO: Follow CMake detection of git and version tagging
# https://gitlab.kitware.com/cmake/cmake/blob/master/Source/CMakeVersionSource.cmake
if(EXISTS ${CMAKE_SOURCE_DIR}/.git/HEAD)
set(GEOS_BUILD_FROM_GIT ON)
endif()
#################################################################################
# Set GEOS project
#################################################################################
project(GEOS LANGUAGES C CXX)
# Add custom GEOS modules for CMake
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules")
#-----------------------------------------------------------------------------
# Options
#-----------------------------------------------------------------------------
include(CMakeDependentOption)
#################################################################################
# Set C++ standard
#################################################################################
set(CMAKE_CXX_STANDARD 11)
## CMake global variables
option(BUILD_SHARED_LIBS "Build GEOS with shared libraries" ON)
set(CMAKE_CXX_STANDARD 11 CACHE STRING "C++ standard version to use (default is 11)")
## GEOS custom variables
cmake_dependent_option(GEOS_BUILD_DEVELOPER
"Build with compilation flags useful for development" ON
"GEOS_BUILD_FROM_GIT" OFF)
mark_as_advanced(GEOS_BUILD_DEVELOPER)
#-----------------------------------------------------------------------------
# Version
#-----------------------------------------------------------------------------
file(READ Version.txt _version_txt)
string(REGEX MATCH "GEOS_VERSION_MAJOR=([0-9]+)" _ ${_version_txt})
set(_version_major ${CMAKE_MATCH_1})
string(REGEX MATCH "GEOS_VERSION_MINOR=([0-9]+)" _ ${_version_txt})
set(_version_minor ${CMAKE_MATCH_1})
string(REGEX MATCH "GEOS_VERSION_PATCH=([0-9]+)" _ ${_version_txt})
set(_version_patch ${CMAKE_MATCH_1})
# OPTIONS: "", "dev", "rc1" etc.
string(REGEX MATCH "GEOS_PATCH_WORD=([a-zA-Z0-9]+)" _ ${_version_txt})
set(_version_patch_word ${CMAKE_MATCH_1})
# Version of JTS this release is bound to
string(REGEX MATCH "JTS_PORT=([0-9a-zA-Z\.]+)" _ ${_version_txt})
set(JTS_PORT ${CMAKE_MATCH_1})
# Version of public C API
string(REGEX MATCH "CAPI_INTERFACE_CURRENT=([0-9]+)" _ ${_version_txt})
set(_version_capi_current ${CMAKE_MATCH_1})
string(REGEX MATCH "CAPI_INTERFACE_REVISION=([0-9]+)" _ ${_version_txt})
set(_version_capi_revision ${CMAKE_MATCH_1})
string(REGEX MATCH "CAPI_INTERFACE_AGE=([0-9]+)" _ ${_version_txt})
set(_version_capi_age ${CMAKE_MATCH_1})
unset(_version_txt)
math(EXPR _version_capi_major "${_version_capi_current} - ${_version_capi_age}")
set(CAPI_VERSION_MAJOR ${_version_capi_major})
set(CAPI_VERSION_MINOR ${_version_capi_age})
set(CAPI_VERSION_PATCH ${_version_capi_revision})
set(CAPI_VERSION "${_version_capi_major}.${_version_capi_age}.${_version_capi_revision}")
if(NOT WIN32)
set(CAPI_SOVERSION ${_version_capi_age})
endif()
unset(_version_capi_current)
unset(_version_capi_major)
unset(_version_capi_age)
unset(_version_capi_revision)
#-----------------------------------------------------------------------------
# Project
#-----------------------------------------------------------------------------
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.9)
list(APPEND _project_info DESCRIPTION "GEOS - C++ port of the Java Topology Suite (JTS)")
endif()
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12)
list(APPEND _project_info HOMEPAGE_URL "http://geos.osgeo.org")
endif()
project(GEOS VERSION "${_version_major}.${_version_minor}.${_version_patch}"
LANGUAGES C CXX
${_project_info})
if("${_version_patch_word}" STREQUAL "")
set(GEOS_VERSION_FULL "${GEOS_VERSION}")
else()
set(GEOS_VERSION_FULL "${GEOS_VERSION}-${_version_patch_word}")
endif()
unset(_version_major)
unset(_version_minor)
unset(_version_patch)
unset(_version_patch_word)
message(STATUS "GEOS: Version ${GEOS_VERSION_FULL}")
message(STATUS "GEOS: C API soversion ${CAPI_SOVERSION}")
message(STATUS "GEOS: JTS port ${JTS_PORT}")
#-----------------------------------------------------------------------------
# C++ language version and compilation flags
#-----------------------------------------------------------------------------
message(STATUS "GEOS: Require C++${CMAKE_CXX_STANDARD}")
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
message(STATUS "Setting C++ requirement to C++${CMAKE_CXX_STANDARD}")
#-----------------------------------------------------------------------------
# Target geos_cxx_flags: common compilation flags
#-----------------------------------------------------------------------------
add_library(geos_cxx_flags INTERFACE)
target_compile_features(geos_cxx_flags INTERFACE cxx_std_11)
#################################################################################
# Setup GEOS version
#################################################################################
# READ GEOS VERSIONS FROM FILE
file(READ "Version.txt" VERSION_TXT)
string(REGEX MATCH "GEOS_VERSION_MAJOR=([0-9]+)" _ ${VERSION_TXT})
set(GEOS_VERSION_MAJOR ${CMAKE_MATCH_1})
string(REGEX MATCH "GEOS_VERSION_MINOR=([0-9]+)" _ ${VERSION_TXT})
set(GEOS_VERSION_MINOR ${CMAKE_MATCH_1})
string(REGEX MATCH "GEOS_VERSION_PATCH=([0-9]+)" _ ${VERSION_TXT})
set(GEOS_VERSION_PATCH ${CMAKE_MATCH_1})
# OPTIONS: "", "dev", "rc1" etc.
string(REGEX MATCH "GEOS_PATCH_WORD=([a-zA-Z0-9]+)" _ ${VERSION_TXT})
set(GEOS_PATCH_WORD ${CMAKE_MATCH_1})
string(REGEX MATCH "CAPI_INTERFACE_CURRENT=([0-9]+)" _ ${VERSION_TXT})
set(CAPI_INTERFACE_CURRENT ${CMAKE_MATCH_1})
string(REGEX MATCH "CAPI_INTERFACE_REVISION=([0-9]+)" _ ${VERSION_TXT})
set(CAPI_INTERFACE_REVISION ${CMAKE_MATCH_1})
string(REGEX MATCH "CAPI_INTERFACE_AGE=([0-9]+)" _ ${VERSION_TXT})
set(CAPI_INTERFACE_AGE ${CMAKE_MATCH_1})
# GEOS release version
# GEOS C++ library SONAME will use these encoding ABI break at every release
set(GEOS_VERSION "${GEOS_VERSION_MAJOR}.${GEOS_VERSION_MINOR}.${GEOS_VERSION_PATCH}${GEOS_PATCH_WORD}")
set(VERSION "${GEOS_VERSION}")
# Copy version components into different variable names to match those used
# by autotools for *.h.in files
set(VERSION_MAJOR "${GEOS_VERSION_MAJOR}")
set(VERSION_MINOR "${GEOS_VERSION_MINOR}")
set(VERSION_PATCH "${GEOS_VERSION_PATCH}${GEOS_PATCH_WORD}")
# JTS_PORT is the version of JTS this release is bound to
string(REGEX MATCH "JTS_PORT=([0-9a-zA-Z\.]+)" _ ${VERSION_TXT})
set(JTS_PORT ${CMAKE_MATCH_1})
message(STATUS "Setting GEOS version ${VERSION} as port of JTS ${JTS_PORT}")
math(EXPR CAPI_VERSION_MAJOR "${CAPI_INTERFACE_CURRENT} - ${CAPI_INTERFACE_AGE}")
set(CAPI_VERSION_MINOR ${CAPI_INTERFACE_AGE})
set(CAPI_VERSION_PATCH ${CAPI_INTERFACE_REVISION})
set(CAPI_VERSION "${CAPI_VERSION_MAJOR}.${CAPI_VERSION_MINOR}.${CAPI_VERSION_PATCH}")
message(STATUS "Setting GEOS C API version ${CAPI_VERSION}")
if (NOT WIN32)
set(CAPI_SOVERSION ${CAPI_VERSION_MAJOR})
message(STATUS "Setting GEOS C API soversion ${CAPI_SOVERSION}")
#-----------------------------------------------------------------------------
# Target geos_cxx_flags: common compilation flags
#-----------------------------------------------------------------------------
option(DISABLE_GEOS_INLINE "Disable inlining" OFF)
if(NOT DISABLE_GEOS_INLINE)
target_compile_definitions(geos_cxx_flags INTERFACE GEOS_INLINE)
endif()
#################################################################################
# Check custom global options
#################################################################################
#-----------------------------------------------------------------------------
# Target geos_developer_cxx_flags: developer mode compilation flags
#-----------------------------------------------------------------------------
# Do NOT install this target for end-users!
add_library(geos_developer_cxx_flags INTERFACE)
option(GEOS_ENABLE_INLINE
"Set to OFF|ON (default) to control GEOS compilation with small functions inlining" ON)
if(NOT MSVC)
option(GEOS_ENABLE_ASSERT
"Set to ON|OFF (default) to build GEOS with assert() macro enabled" OFF)
if(GEOS_BUILD_DEVELOPER)
message(STATUS "GEOS: Developer mode enabled")
endif()
option(GEOS_ENABLE_TESTS
"Set to OFF|ON (default) to control build of GEOS tests package" ON)
option(GEOS_ENABLE_TESTS_UNIT2_ONLY
"Set to ON|OFF (default) to enable only new tests based on Catch (WIP: experimental)." OFF)
option(GEOS_BUILD_STATIC
"Set to OFF|ON (default) to build GEOS static libraries" ON)
option(GEOS_BUILD_SHARED
"Set to OFF|ON (default) to build GEOS shared libraries" ON)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
option(GEOS_ENABLE_FLOATSTORE
"Set to OFF|ON (default) to control IEEE754 conformance and remove extra precision" ON)
# geos_cxx_flags inherits properties from geos_developer_cxx_flags when
# building as part of the GEOS repository or on explicit request for
# developer compilation mode, as GEOS contributor.
# The flags are intended only for GEOS itself and are not part of
# usage requirements needed by GEOS consumers.
if(GEOS_BUILD_DEVELOPER)
target_link_libraries(geos_cxx_flags
INTERFACE
$<BUILD_INTERFACE:geos_developer_cxx_flags>)
endif()
if(APPLE)
option(GEOS_ENABLE_MACOSX_FRAMEWORK
"Set to ON|OFF (default) to build GEOS as a Mac OS X framework" OFF)
option(GEOS_ENABLE_MACOSX_FRAMEWORK_UNIXCOMPAT
"Set to ON|OFF (default) to add Unix compatibility to the Mac OS X framework" OFF)
target_compile_definitions(geos_developer_cxx_flags
INTERFACE
USE_UNSTABLE_GEOS_CPP_API)
target_compile_definitions(geos_developer_cxx_flags
INTERFACE
$<$<CXX_COMPILER_ID:MSVC>:_CRT_NONSTDC_NO_DEPRECATE>
$<$<CXX_COMPILER_ID:MSVC>:_SCL_SECURE_NO_DEPRECATE>
$<$<CXX_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS>
$<$<CXX_COMPILER_ID:MSVC>:NOMINMAX>)
target_compile_options(geos_developer_cxx_flags
INTERFACE
$<$<CXX_COMPILER_ID:MSVC>:-W4>
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-pedantic -Wall -Wextra -Wno-long-long -Wcast-align -Wconversion -Wchar-subscripts -Wdouble-promotion -Wpointer-arith -Wformat -Wformat-security -Wshadow -Wuninitialized -Wunused-parameter -fno-common>
$<$<CXX_COMPILER_ID:GNU>:-fno-implicit-inline-templates>)
# Disable TTMath ASM support on MinGW (Windows+GCC)
# due to build issues
if(MINGW)
target_compile_definitions(geos_cxx_flags
INTERFACE TTMATH_NOASM)
endif()
#################################################################################
# Setup C/C++ compiler options
#################################################################################
if(NOT MSVC_IDE)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING
"Choose the type of build, options are: None Debug Release" FORCE)
endif()
message(STATUS "Setting GEOS build type - ${CMAKE_BUILD_TYPE}")
endif()
if(CMAKE_BUILD_TYPE STREQUAL Debug)
add_definitions(-D_DEBUG)
endif()
add_definitions(-DUSE_UNSTABLE_GEOS_CPP_API)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
# General options
set(CMAKE_C_FLAGS "-pedantic -ansi ${CMAKE_C_FLAGS}")
# Numerical stability
if(GEOS_ENABLE_FLOATSTORE)
# Remove extra precision by forcing conformance to IEEE 754 rather than IEEE 854
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffloat-store")
endif()
message(STATUS
"Forcing IEEE 754 using flag -ffloat-store - ${GEOS_ENABLE_FLOATSTORE}")
# Warnings specification
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -fno-implicit-inline-templates -Wconversion -pedantic -W -Wunused -Wuninitialized -Wextra -Wdouble-promotion -Wshadow")
# Turn on Position Independent Code generation for GEOS C shared library
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Wconversion -pedantic -Wmissing-prototypes -W -Wunused -Wuninitialized -Wextra -Wdouble-promotion")
# Enable glibc ISO C99 features (macros isfinite, isnan)
set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_ISOC99_SOURCE=1")
# For now, punt on ASM on MinGW (Windows+GCC)
if(WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTTMATH_NOASM")
message(STATUS "Setting TTMATH_NOASM")
endif()
elseif(MSVC)
# Set pedantic mode by default
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
string(REGEX REPLACE "/W[0-9]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
add_definitions(-D_SCL_SECURE_NO_WARNINGS)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-DNOMINMAX)
endif()
endif()
if(GEOS_ENABLE_INLINE)
add_definitions(-DGEOS_INLINE)
endif()
message(STATUS
"Setting GEOS compilation with small functions inlining - ${GEOS_ENABLE_INLINE}")
if(NOT MSVC)
if(GEOS_ENABLE_ASSERT)
string(REGEX REPLACE "[-/]D.*NDEBUG" "-U NDEBUG"
CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
endif()
message(STATUS
"Setting GEOS compilation with assert() macro enabled - ${GEOS_ENABLE_ASSERT}")
endif()
#################################################################################
# Setup C/C++ library features
#################################################################################
if (false)
# check header files
include(CheckIncludeFiles)
check_include_files(stdint.h HAVE_STDINT_H)
check_include_files(inttypes.h HAVE_INTTYPES_H)
check_include_files(ieeefp.h HAVE_IEEEFP_H)
# check types and sizes
include(CheckTypeSize)
if(MSVC)
check_type_size("__int64" HAVE_INT64_T_64)
else()
if(HAVE_STDINT_H OR HAVE_INTTYPES_H)
check_type_size("int64_t" HAVE_INT64_T_64)
else()
check_type_size("long long int" HAVE_LONG_LONG_INT_64)
endif()
endif()
endif()
################################################################################
# Setup build directories
#################################################################################
# Put the libaries and binaries that get built into directories at the
# top of the build tree rather than in hard-to-find leaf
# directories. This simplifies manual testing and the use of the build
# tree rather than installed Boost libraries.
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
################################################################################
# Setup include directories
#################################################################################
# for including GEOS C++ API headers
include_directories(${PROJECT_SOURCE_DIR}/include)
# for including build-specific GEOS C API headers
include_directories(${PROJECT_BINARY_DIR}/capi)
# for including build-specific version.h and geos_c.h
include_directories(${PROJECT_BINARY_DIR}/include)
# for geos_ts.cpp which does #include "../geos_revision.h" whereas
# CMake generates geos_revision.h in build directory,
# to not to pollute source tree.
include_directories(${PROJECT_BINARY_DIR})
#################################################################################
# Setup checks and generate config headers
#################################################################################
find_package(Git)
message(STATUS "Generating GEOS ${PROJECT_BINARY_DIR}/geos_revision.h")
file(WRITE ${CMAKE_BINARY_DIR}/geos_revision.h.in "\#define GEOS_REVISION \"@GEOS_REVISION@\"\n")
file(WRITE ${CMAKE_BINARY_DIR}/geos_revision.cmake
"
execute_process(COMMAND \${GIT} describe --tags --always
WORKING_DIRECTORY \${CWD}
OUTPUT_VARIABLE GEOS_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE)
configure_file(\${SRC} \${DST} @ONLY)
")
add_custom_target(geos_revision
COMMAND ${CMAKE_COMMAND}
-D CWD=${CMAKE_CURRENT_SOURCE_DIR}
-D GIT=${GIT_EXECUTABLE}
-D SRC=${PROJECT_BINARY_DIR}/geos_revision.h.in
-D DST=${PROJECT_BINARY_DIR}/geos_revision.h
-P ${PROJECT_BINARY_DIR}/geos_revision.cmake)
message(STATUS "Generating GEOS ${PROJECT_BINARY_DIR}/include/geos/version.h")
configure_file(${PROJECT_SOURCE_DIR}/include/geos/version.h.in
${PROJECT_BINARY_DIR}/include/geos/version.h @ONLY)
message(STATUS "Generating GEOS ${PROJECT_BINARY_DIR}/capi/geos_c.h")
configure_file(${PROJECT_SOURCE_DIR}/capi/geos_c.h.in
${PROJECT_BINARY_DIR}/capi/geos_c.h @ONLY)
#################################################################################
# Configure tests
#################################################################################
if(GEOS_ENABLE_TESTS OR GEOS_ENABLE_TESTS_UNIT2_ONLY)
enable_testing()
# Define "make check" as alias for "make test"
add_custom_target(check COMMAND ctest)
endif()
#################################################################################
# IDE specifics
#################################################################################
if (MSVC_IDE)
# Visual Studio 2017 supports .editorconfig, copy it next to generated .sln
message(STATUS "Copying .editorconfig file to ${PROJECT_BINARY_DIR}")
file(COPY "${PROJECT_SOURCE_DIR}/.editorconfig"
DESTINATION "${PROJECT_BINARY_DIR}")
endif()
include(GenerateSourceGroups)
# Enable target debugging for CMake Tools in Visual Studio Code
# https://github.com/vector-of-bool/vscode-cmake-tools
include(CMakeToolsHelpers OPTIONAL)
#################################################################################
# Configure subdirectories
#################################################################################
#-----------------------------------------------------------------------------
# Target geos: C++ API library
#-----------------------------------------------------------------------------
add_library(geos "")
target_link_libraries(geos PUBLIC geos_cxx_flags)
add_subdirectory(include)
add_subdirectory(src)
if(BUILD_SHARED_LIBS)
set_target_properties(geos PROPERTIES VERSION ${GEOS_VERSION})
if(NOT WIN32)
set_target_properties(geos PROPERTIES SOVERSION ${GEOS_VERSION_MAJOR})
endif()
endif()
#-----------------------------------------------------------------------------
# Target geos_c: C API library
#-----------------------------------------------------------------------------
add_library(geos_c "")
target_link_libraries(geos_c PRIVATE geos)
add_subdirectory(capi)
add_subdirectory(tests)
if(BUILD_SHARED_LIBS)
set_target_properties(geos_c PROPERTIES VERSION ${GEOS_VERSION})
if(NOT WIN32)
set_target_properties(geos_c PROPERTIES SOVERSION ${GEOS_VERSION_MAJOR})
endif()
endif()
#-----------------------------------------------------------------------------
# Tests
#-----------------------------------------------------------------------------
include(CTest)
if(BUILD_TESTING)
add_subdirectory(tests)
endif()
#-----------------------------------------------------------------------------
# Install and export targets - support 'make install' or equivalent
#-----------------------------------------------------------------------------
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/geos-config-version.cmake"
VERSION ${GEOS_VERSION}
COMPATIBILITY AnyNewerVersion)
configure_file(cmake/geos-config.cmake
"${CMAKE_CURRENT_BINARY_DIR}/geos-config.cmake"
COPYONLY)
install(TARGETS geos geos_c geos_cxx_flags
EXPORT geos-targets
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include)
install(EXPORT geos-targets
FILE geos-targets.cmake
NAMESPACE GEOS::
DESTINATION lib/cmake/GEOS)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/geos-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/geos-config-version.cmake"
DESTINATION lib/cmake/GEOS)
install(DIRECTORY
"${CMAKE_CURRENT_LIST_DIR}/include/geos"
"${CMAKE_CURRENT_BINARY_DIR}/include/geos"
DESTINATION include
FILES_MATCHING PATTERN "*.h")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/capi/geos_c.h"
DESTINATION include)
add_subdirectory(tools)
#################################################################################
# Install/Uninstall
#################################################################################
#-----------------------------------------------------------------------------
# Uninstall
#-----------------------------------------------------------------------------
configure_file("${PROJECT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
"${PROJECT_BINARY_DIR}/cmake/cmake_uninstall.cmake"
@ -339,11 +266,3 @@ configure_file("${PROJECT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
add_custom_target(uninstall
"${CMAKE_COMMAND}" -P "${PROJECT_BINARY_DIR}/cmake/cmake_uninstall.cmake")
#################################################################################
# DEBUG settings - TODO: make a summary
message(STATUS "CMake ${CMAKE_VERSION} successfully configured ${PROJECT_NAME} using ${CMAKE_GENERATOR} generator")
#message(STATUS "XXX: CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}")
#message(STATUS "XXX: CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
#message(STATUS "XXX: CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")

View File

@ -26,10 +26,10 @@ BUILT_SOURCES = geos_revision.h
EXTRA_DIST = acsite.m4 .editorconfig \
Version.txt CMakeLists.txt \
cmake/modules/CheckPrototypeExists.cmake \
cmake/modules/COPYING-CMAKE-SCRIPTS \
cmake/modules/GenerateSourceGroups.cmake \
cmake/cmake_uninstall.cmake.in geos_revision.h \
cmake/GenerateRevisionHeader.cmake \
cmake/GetGitRevision.cmake \
cmake/cmake_uninstall.cmake.in \
cmake/geos-config.cmake \
README.md
ACLOCAL_AMFLAGS = -I macros

View File

@ -1,81 +1,81 @@
version: 1.0.{build}
image: Visual Studio 2017
platform: x64
configuration: Release
shallow_clone: true
clone_depth: 5
matrix:
fast_finish: false # set this flag to immediately finish build once one of the jobs fails.
environment:
matrix:
- PLATFORM: x64
BUILDER: CMake
GENERATOR: "Visual Studio 15 2017 Win64"
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
# - PLATFORM: x86
# BUILDER: CMake
# GENERATOR: "Visual Studio 15 2017"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
# - PLATFORM: x64
# BUILDER: CMake
# GENERATOR: "NMake Makefiles"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
# - PLATFORM: x86
# BUILDER: CMake
# GENERATOR: "NMake Makefiles"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
# - PLATFORM: x64
# BUILDER: CMake
# GENERATOR: "Visual Studio 14 2015 Win64"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
# - PLATFORM: x86
# BUILDER: CMake
# GENERATOR: "Visual Studio 14 2015"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
# - PLATFORM: x64
# BUILDER: CMake
# GENERATOR: "NMake Makefiles"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- PLATFORM: x86
BUILDER: CMake
GENERATOR: "NMake Makefiles"
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
init:
- ps: 'Write-Host "Building GEOS branch: $env:APPVEYOR_REPO_BRANCH" -ForegroundColor Magenta'
#- ps: |
# Write-Host "Build worker environment variables:" -ForegroundColor Magenta
# Get-ChildItem Env: | %{"{0}={1}" -f $_.Name,$_.Value}
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" if "%GENERATOR%"=="NMake Makefiles" if "%PLATFORM%"=="x86" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" if "%GENERATOR%"=="NMake Makefiles" if "%PLATFORM%"=="x64" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" if "%GENERATOR%"=="NMake Makefiles" if "%PLATFORM%"=="x86" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" if "%GENERATOR%"=="NMake Makefiles" if "%PLATFORM%"=="x64" call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" if "%GENERATOR%"=="NMake Makefiles" if "%PLATFORM%"=="x64" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64
before_build:
- ps: 'Write-Host "Running $env:BUILDER with $env:GENERATOR" -ForegroundColor Magenta'
- if "%BUILDER%"=="CMake" cmake.exe -G "%GENERATOR%" -DCMAKE_BUILD_TYPE=%CONFIGURATION% %APPVEYOR_BUILD_FOLDER%
- if "%BUILDER%"=="NMake" .\autogen.bat
build_script:
- ps: 'Write-Host "Running $env:BUILDER:" -ForegroundColor Magenta'
- if "%BUILDER%"=="CMake" cmake --build . --config %CONFIGURATION%
- if "%BUILDER%"=="NMake" nmake /f makefile.vc
test_script:
- ps: 'Write-Host "Running tests:" -ForegroundColor Magenta'
- if "%BUILDER%"=="CMake" ctest --output-on-failure -C %CONFIGURATION%
- if "%BUILDER%"=="NMake" echo *** NMake does NOT build tests ***
# If you need to debug AppVeyor session (https://www.appveyor.com/docs/how-to/rdp-to-build-worker), then:
# 1. Uncomment the on_finish section below:
#on_finish:
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# 2. Add this line to the init section below
#- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
version: 1.0.{build}
image: Visual Studio 2017
platform: x64
configuration: Release
shallow_clone: true
clone_depth: 5
matrix:
fast_finish: false # set this flag to immediately finish build once one of the jobs fails.
environment:
matrix:
- PLATFORM: x64
BUILDER: CMake
GENERATOR: "Visual Studio 15 2017 Win64"
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
# - PLATFORM: x86
# BUILDER: CMake
# GENERATOR: "Visual Studio 15 2017"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
# - PLATFORM: x64
# BUILDER: CMake
# GENERATOR: "NMake Makefiles"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
# - PLATFORM: x86
# BUILDER: CMake
# GENERATOR: "NMake Makefiles"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
# - PLATFORM: x64
# BUILDER: CMake
# GENERATOR: "Visual Studio 14 2015 Win64"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
# - PLATFORM: x86
# BUILDER: CMake
# GENERATOR: "Visual Studio 14 2015"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
# - PLATFORM: x64
# BUILDER: CMake
# GENERATOR: "NMake Makefiles"
# APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- PLATFORM: x86
BUILDER: CMake
GENERATOR: "NMake Makefiles"
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
init:
- ps: 'Write-Host "Building GEOS branch: $env:APPVEYOR_REPO_BRANCH" -ForegroundColor Magenta'
#- ps: |
# Write-Host "Build worker environment variables:" -ForegroundColor Magenta
# Get-ChildItem Env: | %{"{0}={1}" -f $_.Name,$_.Value}
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" if "%GENERATOR%"=="NMake Makefiles" if "%PLATFORM%"=="x86" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" if "%GENERATOR%"=="NMake Makefiles" if "%PLATFORM%"=="x64" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" if "%GENERATOR%"=="NMake Makefiles" if "%PLATFORM%"=="x86" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" if "%GENERATOR%"=="NMake Makefiles" if "%PLATFORM%"=="x64" call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" if "%GENERATOR%"=="NMake Makefiles" if "%PLATFORM%"=="x64" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64
before_build:
- ps: 'Write-Host "Running $env:BUILDER with $env:GENERATOR" -ForegroundColor Magenta'
- if "%BUILDER%"=="CMake" cmake.exe -G "%GENERATOR%" -DCMAKE_BUILD_TYPE=%CONFIGURATION% %APPVEYOR_BUILD_FOLDER%
- if "%BUILDER%"=="NMake" .\autogen.bat
build_script:
- ps: 'Write-Host "Running $env:BUILDER:" -ForegroundColor Magenta'
- if "%BUILDER%"=="CMake" cmake --build . --config %CONFIGURATION%
- if "%BUILDER%"=="NMake" nmake /f makefile.vc
test_script:
- ps: 'Write-Host "Running tests:" -ForegroundColor Magenta'
- if "%BUILDER%"=="CMake" ctest --output-on-failure -C %CONFIGURATION%
- if "%BUILDER%"=="NMake" echo *** NMake does NOT build tests ***
# If you need to debug AppVeyor session (https://www.appveyor.com/docs/how-to/rdp-to-build-worker), then:
# 1. Uncomment the on_finish section below:
#on_finish:
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# 2. Add this line to the init section below
#- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))

View File

@ -1,75 +1,47 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# GEOS C library build configuration for CMake build system
#
# Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
if(WIN32)
add_definitions("-DGEOS_DLL_EXPORT=1")
endif()
set(geos_c_SOURCES
geos_c.cpp
geos_ts_c.cpp)
file(GLOB geos_capi_HEADERS ${CMAKE_BINARY_DIR}/capi/*.h) # fix source_group issue
if(NOT GEOS_ENABLE_MACOSX_FRAMEWORK AND GEOS_BUILD_SHARED)
# if building OS X framework or only building static libs, CAPI built into C++ library
add_library(geos_c SHARED ${geos_c_SOURCES})
target_link_libraries(geos_c geos)
if (WIN32)
set_target_properties(geos_c
PROPERTIES
VERSION ${CAPI_VERSION}
CLEAN_DIRECT_OUTPUT 1)
else()
set_target_properties(geos_c
PROPERTIES
VERSION ${CAPI_VERSION}
SOVERSION ${CAPI_SOVERSION}
CLEAN_DIRECT_OUTPUT 1)
endif()
add_dependencies(geos_c geos_revision)
################################################################################
if(GEOS_BUILD_FROM_GIT)
add_custom_target(geos_revision_header
COMMAND ${CMAKE_COMMAND}
-D DST=${CMAKE_BINARY_DIR}/geos_revision.h
-D CMAKE_MODULE_PATH="${PROJECT_SOURCE_DIR}/cmake"
-P ${CMAKE_SOURCE_DIR}/cmake/GenerateRevisionHeader.cmake
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
else()
add_library(geos_c INTERFACE)
target_link_libraries(geos_c INTERFACE geos-static)
add_library(geos_revision_header INTERFACE)
endif()
add_dependencies(geos_c geos_revision_header)
#################################################################################
# Installation
#################################################################################
file(GLOB_RECURSE _headers ${CMAKE_CURRENT_LIST_DIR}/*.cpp CONFIGURE_DEPEND)
target_sources(geos_c PRIVATE ${_headers})
unset(_headers)
if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/geos_c.h
DESTINATION GEOS.framework/Versions/${VERSION_MAJOR}/Headers)
install(CODE "execute_process(COMMAND sed -E -i \"\" \"s,# *include[[:space:]]+<geos/,#include <GEOS/,g\" \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/GEOS.framework/Versions/${VERSION_MAJOR}/Headers/geos_c.h\")")
else()
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/geos_c.h
DESTINATION include)
endif()
target_include_directories(geos_c
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<INSTALL_INTERFACE:include/geos>)
if(NOT GEOS_ENABLE_MACOSX_FRAMEWORK AND GEOS_BUILD_SHARED)
install(TARGETS geos_c
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
endif()
set(VERSION ${GEOS_VERSION})
set(VERSION_MAJOR ${GEOS_VERSION_MAJOR})
set(VERSION_MINOR ${GEOS_VERSION_MINOR})
set(VERSION_PATCH ${GEOS_VERSION_PATCH})
#################################################################################
# Group source files for IDE source explorers (e.g. Visual Studio)
#################################################################################
configure_file(
${CMAKE_CURRENT_LIST_DIR}/geos_c.h.in
${CMAKE_CURRENT_BINARY_DIR}/geos_c.h
@ONLY)
source_group("Header Files" FILES ${geos_capi_HEADERS})
unset(VERSION)
unset(VERSION_MAJOR)
unset(VERSION_MINOR)
unset(VERSION_PATCH)

View File

@ -0,0 +1,26 @@
################################################################################
# Part of CMake configuration for GEOS
#
# Copyright (C) 2018 Daniel Baston <dbaston@gmail.com>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
################################################################################
include(GetGitRevision)
get_git_revision(
HASH_LENGTH 7
HASH GEOS_GIT_HASH
DIRTY GEOS_GIT_IS_DIRTY)
set(REV ${GEOS_GIT_HASH})
if (${GEOS_GIT_IS_DIRTY})
set(REV "${REV} (dirty)")
endif()
message(STATUS "GEOS: GEOS_REVISION=${REV}")
file(WRITE ${DST} "#define GEOS_REVISION \"${REV}\"
")

View File

@ -0,0 +1,40 @@
# Adapted from https://gitlab.kitware.com/cmake/cmake/blob/aec06dd4922187ce5346d20a9f0d53f01b6ce9fc/Source/CMakeVersionSource.cmake
# Try to identify the current development source version.
function(get_git_revision)
cmake_parse_arguments("ARG" "" "HASH;HASH_LENGTH;DIRTY" "" "${ARGN}")
if(EXISTS ${CMAKE_SOURCE_DIR}/.git/HEAD)
find_program(GIT_EXECUTABLE NAMES git git.cmd)
mark_as_advanced(GIT_EXECUTABLE)
if(GIT_EXECUTABLE)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --verify -q --short=${ARG_HASH_LENGTH} HEAD
OUTPUT_VARIABLE head
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
if(head)
execute_process(
COMMAND ${GIT_EXECUTABLE} update-index -q --refresh
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
execute_process(
COMMAND ${GIT_EXECUTABLE} diff-index --name-only HEAD -- --ignore-space-at-eol
OUTPUT_VARIABLE dirty
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
endif()
endif()
endif()
set(${ARG_HASH} "${head}" PARENT_SCOPE)
if(dirty)
set(${ARG_DIRTY} 1 PARENT_SCOPE)
else()
set("${ARG_DIRTY}" 0 PARENT_SCOPE)
endif()
endfunction()

View File

@ -4,12 +4,12 @@
#
# Defines commands used by make uninstall target of CMake build configuration.
#
# Author: Credit to the CMake mailing list archives for providing this solution.
# Author: Credit to the CMake mailing list archives for providing this solution.
# Modifications: Mateusz Loskot <mateusz@loskot.net>
#
#################################################################################
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
message(FATAL_ERROR
message(FATAL_ERROR
"Cannot find install manifest:
@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
endif()
@ -20,7 +20,7 @@ string(REGEX REPLACE "\n" ";" files "${files}")
set(GEOS_INCLUDE_DIR)
foreach(file ${files})
if(${file} MATCHES "geos.h")
if(${file} MATCHES "geom.h")
get_filename_component(GEOS_INCLUDE_DIR ${file} PATH)
endif()
@ -39,7 +39,7 @@ foreach(file ${files})
endforeach()
message(STATUS "Deleting ${GEOS_INCLUDE_DIR} directory")
exec_program("@CMAKE_COMMAND@"
exec_program("@CMAKE_COMMAND@"
ARGS "-E remove_directory \"${GEOS_INCLUDE_DIR}\""
OUTPUT_VARIABLE rm_out
RETURN_VALUE rm_retval)

11
cmake/geos-config.cmake Normal file
View File

@ -0,0 +1,11 @@
################################################################################
# Part of CMake configuration for GEOS
#
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
################################################################################
include("${CMAKE_CURRENT_LIST_DIR}/geos-targets.cmake")

View File

@ -1,22 +0,0 @@
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,43 +0,0 @@
# - Check if the prototype for a function exists.
# CHECK_PROTOTYPE_EXISTS (FUNCTION HEADER VARIABLE)
#
# FUNCTION - the name of the function you are looking for
# HEADER - the header(s) where the prototype should be declared
# VARIABLE - variable to store the result
#
# The following variables may be set before calling this macro to
# modify the way the check is run:
#
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
# Source: KDE/kdelibs
# <http://websvn.kde.org/trunk/KDE/kdelibs/cmake/modules/CheckPrototypeExists.cmake?pathrev=776742>
#
INCLUDE(CheckCXXSourceCompiles)
MACRO(CHECK_PROTOTYPE_EXISTS _SYMBOL _HEADER _RESULT)
SET(_INCLUDE_FILES)
FOREACH (it ${_HEADER})
SET(_INCLUDE_FILES "${_INCLUDE_FILES}#include <${it}>\n")
ENDFOREACH (it)
SET(_CHECK_PROTO_EXISTS_SOURCE_CODE "
${_INCLUDE_FILES}
int main()
{
#ifndef ${_SYMBOL}
int i = sizeof(&${_SYMBOL});
#endif
return 0;
}
")
CHECK_CXX_SOURCE_COMPILES("${_CHECK_PROTO_EXISTS_SOURCE_CODE}" ${_RESULT})
ENDMACRO(CHECK_PROTOTYPE_EXISTS _SYMBOL _HEADER _RESULT)

View File

@ -1,17 +0,0 @@
#
# Macro generates tree of IDE source groups based on folders structure
# Source: http://www.cmake.org/pipermail/cmake/2013-November/056332.html
#
macro(GenerateSourceGroups curdir)
file(GLOB children RELATIVE ${PROJECT_SOURCE_DIR}/${curdir} ${PROJECT_SOURCE_DIR}/${curdir}/*)
foreach(child ${children})
if(IS_DIRECTORY ${PROJECT_SOURCE_DIR}/${curdir}/${child})
GenerateSourceGroups(${curdir}/${child})
else()
string(REPLACE "/" "\\" groupname ${curdir})
# I would like to call the src root folder in a different name, only in visual studio (not mandatory requirement)
string(REPLACE "src" "Source Files" groupname ${groupname})
source_group(${groupname} FILES ${PROJECT_SOURCE_DIR}/${curdir}/${child})
endif()
endforeach()
endmacro()

View File

@ -0,0 +1,20 @@
################################################################################
# Part of CMake configuration for GEOS
#
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
################################################################################
cmake_minimum_required(VERSION 3.12)
project(GEOS VERSION 1.0.0 LANGUAGES C CXX)
find_package(GEOS 3.8 REQUIRED)
add_executable(geos_client geos_client.cpp)
target_link_libraries(geos_client PRIVATE GEOS::geos)
add_executable(geos_c_client geos_c_client.cpp)
target_link_libraries(geos_c_client PRIVATE GEOS::geos_c)

View File

@ -0,0 +1,6 @@
#include <geos_c.h>
int main()
{
finishGEOS();
}

View File

@ -0,0 +1,8 @@
#include <geos/geom/GeometryFactory.h>
using namespace geos::geom;
int main()
{
GeometryFactory::Ptr factory = GeometryFactory::create();
(void)factory;
}

View File

@ -1,54 +1,33 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# GEOS C++ library build configuration for CMake build system
#
# Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
################################################################################
file(GLOB_RECURSE _headers ${CMAKE_CURRENT_LIST_DIR}/*.h CONFIGURE_DEPEND)
target_sources(geos PRIVATE ${_headers})
unset(_headers)
#################################################################################
# Install/Uninstall
#################################################################################
target_include_directories(geos
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<INSTALL_INTERFACE:include/geos>)
# There is a builtin cmake way to get headers in the right location
# for OS X framework, but it's not practical this complex tree
set(VERSION ${GEOS_VERSION})
set(VERSION_MAJOR ${GEOS_VERSION_MAJOR})
set(VERSION_MINOR ${GEOS_VERSION_MINOR})
set(VERSION_PATCH ${GEOS_VERSION_PATCH})
if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK)
set(installdest GEOS.framework/Versions/${VERSION_MAJOR}/Headers)
else()
set(installdest include/geos)
endif()
configure_file(${CMAKE_CURRENT_LIST_DIR}/geos/version.h.in
${CMAKE_CURRENT_BINARY_DIR}/geos/version.h
@ONLY)
install(FILES geos.h
DESTINATION ${installdest})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/geos/version.h
DESTINATION ${installdest})
install(DIRECTORY geos/
DESTINATION ${installdest}
FILES_MATCHING
PATTERN "*.h"
PATTERN "*.inl"
PATTERN ".svn" EXCLUDE)
# Some post-processing for the framework
# luckily GEOS uses header subdir already, just need to change case
if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK)
install(CODE
"execute_process(COMMAND find \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${installdest}\" -name *.* -print0
COMMAND xargs -0 sed -E -i \"\" \"s,# *include[[:space:]]+<geos/,#include <GEOS/,g\")")
install(CODE
"execute_process(COMMAND ln -sfh Versions/Current/Headers \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/GEOS.framework/Headers\")")
endif()
#################################################################################
# Group source files for IDE source explorers (e.g. Visual Studio)
#################################################################################
GenerateSourceGroups(include)
unset(VERSION)
unset(VERSION_MAJOR)
unset(VERSION_MINOR)
unset(VERSION_PATCH)

View File

@ -1,125 +1,13 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# GEOS C++ library build configuration for CMake build system
#
# Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
file(GLOB_RECURSE geos_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
file(GLOB_RECURSE geos_ALL_HEADERS ${CMAKE_SOURCE_DIR}/include/*.h) # fix source_group issue
# Building with Visual C++ x86_64 needs to compile the asm utilities first
if (MSVC AND (${CMAKE_SIZEOF_VOID_P} EQUAL 8))
set(TTMATH_MSVC64_ASM ttmathuint_x86_64_msvc.asm)
enable_language(ASM_MASM)
message(STATUS "Enabled MASM to compile '${TTMATH_MSVC64_ASM}'")
list(INSERT geos_SOURCES 0 ${CMAKE_SOURCE_DIR}/include/geos/algorithm/ttmath/${TTMATH_MSVC64_ASM})
endif()
# Include CAPI in OS X framework binary and in static libs
set(geos_c_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/../capi/geos_c.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../capi/geos_ts_c.cpp)
if(GEOS_ENABLE_MACOSX_FRAMEWORK)
# OS X frameworks don't have static libs
# also 1 binary, so include CAPI here
# and, make name all caps
add_library(GEOS SHARED ${geos_SOURCES} ${geos_c_SOURCES})
math(EXPR CVERSION "${VERSION_MAJOR} + 1")
# VERSION = current version, SOVERSION = compatibility version
set_target_properties(GEOS
PROPERTIES
CLEAN_DIRECT_OUTPUT 1
FRAMEWORK 1
VERSION "${CVERSION}.${VERSION_MINOR}.${VERSION_PATCH}"
SOVERSION ${CVERSION}
FRAMEWORK_VERSION ${VERSION_MAJOR}
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}"
MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
MACOSX_FRAMEWORK_BUNDLE_VERSION "GEOS ${VERSION}"
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${VERSION}
MACOSX_FRAMEWORK_IDENTIFIER org.osgeo.geos)
install(TARGETS GEOS FRAMEWORK DESTINATION .)
if(GEOS_ENABLE_MACOSX_FRAMEWORK_UNIXCOMPAT)
# Unix compatibility option, provides typical bin/lib/include folder
# structure for framework-challenged projects
set(GEOS_FWDIR "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/GEOS.framework")
set(GEOS_FWDIR_VER "${GEOS_FWDIR}/Versions/${VERSION_MAJOR}")
install(CODE "execute_process(COMMAND mkdir -p \"${GEOS_FWDIR_VER}/unix/bin\")")
install(CODE "execute_process(COMMAND mkdir -p \"${GEOS_FWDIR_VER}/unix/include\")")
install(CODE "execute_process(COMMAND mkdir -p \"${GEOS_FWDIR_VER}/unix/lib\")")
install(CODE "execute_process(COMMAND ln -sfh ../../Headers \"${GEOS_FWDIR_VER}/unix/include/geos\")")
install(CODE "execute_process(COMMAND ln -sf ../../Headers/geos_c.h \"${GEOS_FWDIR_VER}/unix/include/geos_c.h\")")
install(CODE "execute_process(COMMAND ln -sf ../../GEOS \"${GEOS_FWDIR_VER}/unix/lib/libgeos.dylib\")")
install(CODE "execute_process(COMMAND ln -sf ../../GEOS \"${GEOS_FWDIR_VER}/unix/lib/libgeos_c.dylib\")")
install(CODE "execute_process(COMMAND ln -sfh Versions/Current/unix \"${GEOS_FWDIR}/unix\")")
endif()
else()
if(GEOS_BUILD_SHARED)
add_library(geos SHARED ${geos_SOURCES} ${geos_ALL_HEADERS})
set_target_properties(geos
PROPERTIES
DEFINE_SYMBOL GEOS_DLL_EXPORT
VERSION ${VERSION}
CLEAN_DIRECT_OUTPUT 1)
install(TARGETS geos
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
endif()
if(GEOS_BUILD_STATIC)
file(GLOB geos_capi_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../capi/*.h) # fix source_group issue
add_library(geos-static STATIC ${geos_SOURCES} ${geos_c_SOURCES} ${geos_ALL_HEADERS} ${geos_capi_HEADERS})
set_target_properties(geos-static
PROPERTIES
OUTPUT_NAME "geos"
PREFIX "lib"
CLEAN_DIRECT_OUTPUT 1)
add_dependencies(geos-static geos_revision)
install(TARGETS geos-static
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
endif()
if(NOT GEOS_BUILD_SHARED)
add_library(geos INTERFACE)
target_link_libraries(geos INTERFACE geos-static)
endif()
endif() # (GEOS_ENABLE_MACOSX_FRAMEWORK)
# if(APPLE)
# set_target_properties(geos
# PROPERTIES
# BUILD_WITH_INSTALL_RPATH TRUE
# INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}")
# endif()
#################################################################################
# Group source files for IDE source explorers (e.g. Visual Studio)
#################################################################################
GenerateSourceGroups(src)
################################################################################
file(GLOB_RECURSE _sources ${CMAKE_CURRENT_LIST_DIR}/*.cpp CONFIGURE_DEPEND)
target_sources(geos PRIVATE ${_sources})
unset(_sources)

View File

@ -1,15 +1,14 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# GEOS tests build configuration for CMake build system
#
# Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
################################################################################
add_custom_target(check COMMAND ctest)
add_subdirectory(unit)
add_subdirectory(xmltester)

View File

@ -1,45 +1,20 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# CMake configuration for GEOS big test
#
# Copyright (C) 2011 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
################################################################################
add_executable(test_bug234 bug234.cpp)
target_link_libraries(test_bug234 PRIVATE geos)
add_test(NAME test_bug234 COMMAND test_bug234)
set(STATUS_MESSAGE "Enable GEOS large geometry tests build")
set(STATUS_RESULT "OFF")
if(GEOS_ENABLE_TESTS)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
add_executable(test_bug234 bug234.cpp)
if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK)
target_link_libraries(test_bug234 GEOS)
else()
target_link_libraries(test_bug234 geos)
endif()
add_executable(test_sweep_line_speed
TestSweepLineSpeed.cpp
GeometryTestFactory.cpp
bigtest.h)
if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK)
target_link_libraries(test_sweep_line_speed GEOS)
else()
target_link_libraries(test_sweep_line_speed geos)
endif()
add_test(test_bug234 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_bug234)
add_test(test_sweep_line_speed ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_sweep_line_speed)
set(STATUS_RESULT "ON")
endif()
message(STATUS "${STATUS_MESSAGE} - ${STATUS_RESULT}")
add_executable(test_sweep_line_speed)
target_sources(test_sweep_line_speed
PRIVATE
TestSweepLineSpeed.cpp
GeometryTestFactory.cpp)
target_link_libraries(test_sweep_line_speed PRIVATE geos)

View File

@ -1,34 +1,16 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# CMake configuration for GEOS perf tests
#
# Copyright (C) 2017 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
################################################################################
add_executable(test_perf_class_sizes ClassSizes.cpp)
target_link_libraries(test_perf_class_sizes PRIVATE geos)
add_test(NAME test_perf_class_sizes COMMAND test_perf_class_sizes)
set(STATUS_MESSAGE "Enable GEOS performance tests build")
set(STATUS_RESULT "OFF")
if(GEOS_ENABLE_TESTS)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
add_executable(perf_class_sizes ClassSizes.cpp)
target_link_libraries(perf_class_sizes geos)
# add_test(perf_class_sizes ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/perf_class_sizes)
add_subdirectory(algorithm)
add_subdirectory(operation)
add_subdirectory(capi)
set(STATUS_RESULT "ON")
endif()
message(STATUS "${STATUS_MESSAGE} - ${STATUS_RESULT}")
add_subdirectory(operation)
add_subdirectory(capi)

View File

@ -1,18 +1,19 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# CMake configuration for GEOS perf/capi tests
#
# Copyright (C) 2017 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
add_executable(perf_memleak_mp_prep memleak_mp_prep.c)
target_link_libraries(perf_memleak_mp_prep geos_c)
#add_test(perf_memleak_mp_prep ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/perf_memleak_mp_prep)
################################################################################
add_executable(test_perf_memleak_mp_prep memleak_mp_prep.c)
# test_perf_memleak_mp_prep is not dependant against geos target,
# but geos_c only, so need explicit include directories.
target_include_directories(test_perf_memleak_mp_prep
PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
target_link_libraries(test_perf_memleak_mp_prep PRIVATE geos_c)
add_test(NAME test_perf_memleak_mp_prep COMMAND test_perf_memleak_mp_prep)

View File

@ -1,15 +1,12 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# CMake configuration for GEOS perf/operation tests
#
# Copyright (C) 2017 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
################################################################################
add_subdirectory(buffer)
add_subdirectory(predicate)

View File

@ -1,18 +1,13 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# CMake configuration for GEOS perf/operation/buffer tests
#
# Copyright (C) 2017 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
add_executable(perf_iterated_buffer IteratedBufferStressTest.cpp)
target_link_libraries(perf_iterated_buffer geos)
#add_test(perf_iterated_buffer ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/perf_iterated_buffer)
################################################################################
add_executable(test_perf_iterated_buffer IteratedBufferStressTest.cpp)
target_link_libraries(test_perf_iterated_buffer PRIVATE geos)
add_test(NAME test_perf_iterated_buffer COMMAND test_perf_iterated_buffer)

View File

@ -1,19 +1,13 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# CMake configuration for GEOS perf/operation/predicate tests
#
# Copyright (C) 2017 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
add_executable(perf_rectangle_intersects RectangleIntersectsPerfTest.cpp)
target_link_libraries(perf_rectangle_intersects geos)
#add_test(perf_rectangle_intersects ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/perf_rectangle_intersects)
################################################################################
add_executable(test_perf_rectangle_intersects RectangleIntersectsPerfTest.cpp)
target_link_libraries(test_perf_rectangle_intersects PRIVATE geos)
add_test(NAME test_perf_rectangle_intersects COMMAND test_perf_rectangle_intersects)

View File

@ -1,41 +1,20 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# GEOS unit tests build configuration for CMake build system
#
# Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
################################################################################
file(GLOB_RECURSE _sources ${CMAKE_CURRENT_LIST_DIR}/*.cpp CONFIGURE_DEPEND)
add_executable(test_geos_unit ${_sources})
unset(_sources)
set(STATUS_MESSAGE "Enable GEOS unit tests build")
set(STATUS_RESULT "OFF")
target_link_libraries(test_geos_unit PRIVATE geos geos_c)
target_include_directories(test_geos_unit
PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>)
if(GEOS_ENABLE_TESTS)
include_directories(${CMAKE_SOURCE_DIR}/capi)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
file(GLOB_RECURSE geos_unit_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
add_executable(test_geos_unit ${geos_unit_SOURCES})
if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK)
target_link_libraries(test_geos_unit GEOS)
else()
target_link_libraries(test_geos_unit geos geos_c)
endif()
add_test(test_geos_unit ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_geos_unit)
set(STATUS_RESULT "ON")
endif()
message(STATUS "${STATUS_MESSAGE} - ${STATUS_RESULT}")
#################################################################################
# Group source files for IDE source explorers (e.g. Visual Studio)
#################################################################################
GenerateSourceGroups(tests/unit)
add_test(NAME test_geos_unit COMMAND test_geos_unit)

View File

@ -1,163 +1,31 @@
#################################################################################
################################################################################
# Part of CMake configuration for GEOS
#
# GEOS XML tests runner build configuration for CMake build system
#
# Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net>
# Copyright (C) 2018 Mateusz Loskot <mateusz@loskot.net>
#
# This is free software; you can redistribute and/or modify it under
# the terms of the GNU Lesser General Public Licence as published
# by the Free Software Foundation.
# See the COPYING file for more information.
#
#################################################################################
################################################################################
set(STATUS_MESSAGE "Enable GEOS XML tests build")
set(STATUS_RESULT "OFF")
add_executable(test_simplewkttester SimpleWKTTester.cpp)
target_link_libraries(test_simplewkttester PRIVATE geos)
if(GEOS_ENABLE_TESTS)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/tinyxml2)
set(simplewkttester_SOURCES SimpleWKTTester.cpp)
set(xmltester_SOURCES
add_executable(test_xmltester)
target_sources(test_xmltester
PRIVATE
XMLTester.cpp
tinyxml2/tinyxml2.h
tinyxml2/tinyxml2.cpp
BufferResultMatcher.cpp
SingleSidedBufferResultMatcher.cpp)
SingleSidedBufferResultMatcher.cpp
tinyxml2/tinyxml2.h
tinyxml2/tinyxml2.cpp)
target_link_libraries(test_xmltester PRIVATE geos)
target_include_directories(test_xmltester
PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>/tinyxml)
add_executable(test_simplewkttester ${simplewkttester_SOURCES})
if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK)
target_link_libraries(test_simplewkttester GEOS)
else()
target_link_libraries(test_simplewkttester geos)
endif()
add_executable(test_xmltester ${xmltester_SOURCES})
if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK)
target_link_libraries(test_xmltester GEOS)
else()
target_link_libraries(test_xmltester geos)
endif()
set(XMLTESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tests)
set(SAVE_XMLTESTS
${XMLTESTS_DIR}/general/TestBoundary.xml
${XMLTESTS_DIR}/general/TestBuffer.xml
${XMLTESTS_DIR}/general/TestBufferMitredJoin.xml
${XMLTESTS_DIR}/general/TestCentroid.xml
${XMLTESTS_DIR}/general/TestConvexHull-big.xml
${XMLTESTS_DIR}/general/TestConvexHull.xml
${XMLTESTS_DIR}/general/TestDensify.xml
${XMLTESTS_DIR}/general/TestDistance.xml
${XMLTESTS_DIR}/general/TestEqualsExact.xml
${XMLTESTS_DIR}/general/TestFunctionAA.xml
${XMLTESTS_DIR}/general/TestFunctionAAPrec.xml
${XMLTESTS_DIR}/general/TestFunctionLA.xml
${XMLTESTS_DIR}/general/TestFunctionLAPrec.xml
${XMLTESTS_DIR}/general/TestFunctionLL.xml
${XMLTESTS_DIR}/general/TestFunctionLLPrec.xml
${XMLTESTS_DIR}/general/TestFunctionPA.xml
${XMLTESTS_DIR}/general/TestFunctionPL.xml
${XMLTESTS_DIR}/general/TestFunctionPLPrec.xml
${XMLTESTS_DIR}/general/TestFunctionPP.xml
${XMLTESTS_DIR}/general/TestInteriorPoint.xml
${XMLTESTS_DIR}/general/TestMinimumClearance.xml
${XMLTESTS_DIR}/general/TestPreparedPointPredicate.xml
${XMLTESTS_DIR}/general/TestPreparedPolygonPredicate.xml
${XMLTESTS_DIR}/general/TestPreparedPredicatesWithGeometryCollection.xml
${XMLTESTS_DIR}/general/TestRectanglePredicate.xml
${XMLTESTS_DIR}/general/TestRelateAA.xml
${XMLTESTS_DIR}/general/TestRelateAC.xml
${XMLTESTS_DIR}/general/TestRelateLA.xml
${XMLTESTS_DIR}/general/TestRelateLC.xml
${XMLTESTS_DIR}/general/TestRelateLL.xml
${XMLTESTS_DIR}/general/TestRelatePA.xml
${XMLTESTS_DIR}/general/TestRelatePL.xml
${XMLTESTS_DIR}/general/TestRelatePP.xml
${XMLTESTS_DIR}/general/TestSimple.xml
${XMLTESTS_DIR}/general/TestUnaryUnion.xml
${XMLTESTS_DIR}/general/TestUnaryUnionFloating.xml
${XMLTESTS_DIR}/general/TestValid.xml
${XMLTESTS_DIR}/general/TestValid2-big.xml
${XMLTESTS_DIR}/general/TestValid2.xml
${XMLTESTS_DIR}/general/TestWithinDistance.xml
${XMLTESTS_DIR}/misc/Buffer-1.xml
${XMLTESTS_DIR}/misc/Buffer-2.xml
${XMLTESTS_DIR}/misc/InvalidRelates.xml
${XMLTESTS_DIR}/misc/Segfaults.xml
${XMLTESTS_DIR}/misc/TestBufferExternal-1.xml
${XMLTESTS_DIR}/misc/TestBufferExternal-2.xml
${XMLTESTS_DIR}/misc/TestIsValid.xml
${XMLTESTS_DIR}/misc/buildarea.xml
${XMLTESTS_DIR}/misc/fme.xml
${XMLTESTS_DIR}/misc/heisenbugs.xml
${XMLTESTS_DIR}/misc/hexwkb.xml
${XMLTESTS_DIR}/misc/hole_from_shell.xml
${XMLTESTS_DIR}/misc/hole_red.xml
${XMLTESTS_DIR}/misc/linemerge.xml
${XMLTESTS_DIR}/misc/makevalid.xml
${XMLTESTS_DIR}/misc/robustness.xml
${XMLTESTS_DIR}/misc/safe-16595.xml
${XMLTESTS_DIR}/misc/safe-16596.xml
${XMLTESTS_DIR}/misc/safe-TestBufferJagged.xml
${XMLTESTS_DIR}/misc/singlesidedbuffer.xml
${XMLTESTS_DIR}/misc/stmlf-20061020-invalid-output.xml
${XMLTESTS_DIR}/misc/stmlf-20061020.xml
${XMLTESTS_DIR}/misc/stmlf-20070119.xml
${XMLTESTS_DIR}/misc/split.xml
${XMLTESTS_DIR}/robust/TestRobustOverlayFixed.xml
${XMLTESTS_DIR}/robust/TestRobustRelate.xml
${XMLTESTS_DIR}/issue/issue-geos-176.xml
${XMLTESTS_DIR}/issue/issue-geos-188.xml
${XMLTESTS_DIR}/issue/issue-geos-244.xml
${XMLTESTS_DIR}/issue/issue-geos-275.xml
${XMLTESTS_DIR}/issue/issue-geos-350.xml
${XMLTESTS_DIR}/issue/issue-geos-356.xml
${XMLTESTS_DIR}/issue/issue-geos-358.xml
${XMLTESTS_DIR}/issue/issue-geos-360.xml
${XMLTESTS_DIR}/issue/issue-geos-366.xml
${XMLTESTS_DIR}/issue/issue-geos-392.xml
${XMLTESTS_DIR}/issue/issue-geos-398.xml
${XMLTESTS_DIR}/issue/issue-geos-434.xml
${XMLTESTS_DIR}/issue/issue-geos-459.xml
${XMLTESTS_DIR}/issue/issue-geos-527.xml
${XMLTESTS_DIR}/issue/issue-geos-569.xml
${XMLTESTS_DIR}/issue/issue-geos-582.xml
${XMLTESTS_DIR}/issue/issue-geos-586.xml
${XMLTESTS_DIR}/issue/issue-geos-599.xml
${XMLTESTS_DIR}/issue/issue-geos-605.xml
${XMLTESTS_DIR}/issue/issue-geos-615.xml
${XMLTESTS_DIR}/issue/issue-geos-716.xml
${XMLTESTS_DIR}/issue/issue-geos-837.xml
${XMLTESTS_DIR}/issue/issue-geos-838.xml
${XMLTESTS_DIR}/validate/TestRelateAA-big.xml
${XMLTESTS_DIR}/validate/TestRelateAA.xml
${XMLTESTS_DIR}/validate/TestRelateAC.xml
${XMLTESTS_DIR}/validate/TestRelateLA.xml
${XMLTESTS_DIR}/validate/TestRelateLC.xml
${XMLTESTS_DIR}/validate/TestRelateLL.xml
${XMLTESTS_DIR}/validate/TestRelatePA.xml
${XMLTESTS_DIR}/validate/TestRelatePL.xml
${XMLTESTS_DIR}/validate/TestRelatePP.xml
)
set(FAILING_XMLTESTS
${XMLTESTS_DIR}/issue/issue-geos-488.xml
${XMLTESTS_DIR}/issue/issue-geos-344.xml
${XMLTESTS_DIR}/robust/TestRobustRelateFloat.xml
${XMLTESTS_DIR}/failure/TestOverlay.xml
${XMLTESTS_DIR}/misc/TestBigNastyBuffer.xml
${XMLTESTS_DIR}/misc/TestSameDirection.xml
)
add_test(test_xmltester ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_xmltester -v --test-valid-output ${SAVE_XMLTESTS})
set(STATUS_RESULT "ON")
endif()
message(STATUS "${STATUS_MESSAGE} - ${STATUS_RESULT}")
file(GLOB_RECURSE _tests ${CMAKE_CURRENT_LIST_DIR}/tests/*.xml CONFIGURE_DEPEND)
list(FILTER _tests EXCLUDE REGEX failure)
add_test(NAME test_xmltester COMMAND test_xmltester --test-valid-output ${_tests})
unset(_tests)

View File

@ -117,11 +117,11 @@ INVALID_OUTPUT_XMLTESTS =
FAILING_XMLTESTS = \
$(srcdir)/tests/failure/TestOverlay.xml \
$(srcdir)/tests/issue/issue-geos-488.xml \
$(srcdir)/tests/issue/issue-geos-344.xml \
$(srcdir)/tests/robust/TestRobustRelateFloat.xml \
$(srcdir)/tests/misc/TestBigNastyBuffer.xml \
$(srcdir)/tests/misc/TestSameDirection.xml
$(srcdir)/tests/failure/issue-geos-488.xml \
$(srcdir)/tests/failure/issue-geos-344.xml \
$(srcdir)/tests/failure/robust-TestRobustRelateFloat.xml \
$(srcdir)/tests/failure/misc-TestBigNastyBuffer.xml \
$(srcdir)/tests/failure/misc-TestSameDirection.xml

View File

@ -11,31 +11,43 @@
#
#################################################################################
if(UNIX OR MINGW)
if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK AND GEOS_ENABLE_MACOSX_FRAMEWORK_UNIXCOMPAT)
set(installdest GEOS.framework/Versions/${VERSION_MAJOR}/unix/bin)
set(prefix ${CMAKE_INSTALL_PREFIX}/GEOS.framework/Versions/${VERSION_MAJOR}/unix)
elseif(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK)
# just a dummy so installdest not set
# want geos-config only for Mac unix build or framework+unixcompat
else()
set(installdest bin)
set(prefix ${CMAKE_INSTALL_PREFIX})
endif()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/geos-config.in
${CMAKE_CURRENT_BINARY_DIR}/geos-config)
set(exec_prefix ${prefix}/bin)
set(libdir ${prefix}/lib)
if(installdest)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/geos-config.in
${CMAKE_CURRENT_BINARY_DIR}/geos-config @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/geos-config
DESTINATION bin
PERMISSIONS
OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/geos-config
DESTINATION ${installdest}
PERMISSIONS
OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
endif()
endif()
add_subdirectory(astyle)
# if(UNIX OR MINGW)
# if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK AND GEOS_ENABLE_MACOSX_FRAMEWORK_UNIXCOMPAT)
# set(installdest GEOS.framework/Versions/${VERSION_MAJOR}/unix/bin)
# set(prefix ${CMAKE_INSTALL_PREFIX}/GEOS.framework/Versions/${VERSION_MAJOR}/unix)
# elseif(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK)
# # just a dummy so installdest not set
# # want geos-config only for Mac unix build or framework+unixcompat
# else()
# set(installdest bin)
# set(prefix ${CMAKE_INSTALL_PREFIX})
# endif()
# set(exec_prefix ${prefix}/bin)
# set(libdir ${prefix}/lib)
# if(installdest)
# configure_file(${CMAKE_CURRENT_SOURCE_DIR}/geos-config.in
# ${CMAKE_CURRENT_BINARY_DIR}/geos-config @ONLY)
# install(FILES ${CMAKE_CURRENT_BINARY_DIR}/geos-config
# DESTINATION ${installdest}
# PERMISSIONS
# OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
# endif()
# endif()

View File

@ -14,7 +14,3 @@ file(GLOB_RECURSE astyle_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
add_executable(astyle ${astyle_SOURCES})
# message(STATUS "Enable AStyle")
#################################################################################
# Group source files for IDE source explorers (e.g. Visual Studio)
#################################################################################
GenerateSourceGroups(tools/astyle)

View File

@ -1,7 +1,8 @@
#!/bin/sh
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=@CMAKE_INSTALL_PREFIX@/bin
libdir=@CMAKE_INSTALL_PREFIX@/lib
usage()
{
@ -22,9 +23,11 @@ Options:
EOF
exit $1
}
if test $# -eq 0; then
usage 1 1>&2
fi
while test $# -gt 0; do
case "$1" in
-*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
@ -32,36 +35,34 @@ case "$1" in
esac
case $1 in
--prefix)
echo ${prefix}
;;
echo @CMAKE_INSTALL_PREFIX@
;;
--version)
echo @VERSION@
;;
echo @GEOS_VERSION@
;;
--cflags)
echo -I${prefix}/include
echo -I@CMAKE_INSTALL_PREFIX@/include
;;
--libs)
# TODO: make an alias for --clibs
# see http://trac.osgeo.org/geos/ticket/497
echo -L${libdir} -lgeos-@VERSION_RELEASE@
echo -L@CMAKE_INSTALL_PREFIX@/lib -lgeos-@GEOS_VERSION_MAJOR@
;;
--clibs)
echo -L${libdir} -lgeos_c
echo -L@CMAKE_INSTALL_PREFIX@/lib -lgeos_c
;;
--cclibs)
echo -L${libdir} -lgeos
echo -L@CMAKE_INSTALL_PREFIX@/lib -lgeos
;;
--static-clibs)
echo -L${libdir} -lgeos_c -lgeos -lm
echo -L@CMAKE_INSTALL_PREFIX@/lib -lgeos_c -lgeos -lm
;;
--static-cclibs)
echo -L${libdir} -lgeos -lm
echo -L@CMAKE_INSTALL_PREFIX@/lib -lgeos -lm
;;
--ldflags)
echo -L${libdir}
echo -L@CMAKE_INSTALL_PREFIX@/lib -lgeos
;;
--includes)
echo ${prefix}/include
echo @CMAKE_INSTALL_PREFIX@/include
;;
--jtsport)
echo @JTS_PORT@