You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
7.4 KiB
245 lines
7.4 KiB
# Top-level CMakeLists.txt for the CMake-based build and test system |
|
# of the shapelib software. |
|
|
|
# Copyright (C) 2012-2013 Alan W. Irwin |
|
|
|
# See README.CMake |
|
|
|
# This file is free software; you can redistribute it and/or modify |
|
# it under the terms of the GNU Library General Public License as published |
|
# by the Free Software Foundation; version 2 of the License. |
|
# |
|
# This file is distributed in the hope that it will be useful, |
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
# GNU Library General Public License for more details. |
|
# |
|
# You should have received a copy of the GNU Library General Public License |
|
# along with this file; if not, write to the Free Software |
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
|
|
# It is a fatal error if no working C compiler is available to build |
|
# the shapelib library and utilities |
|
project(shapelib C) |
|
|
|
message(STATUS "CMake version = ${CMAKE_VERSION}") |
|
message(STATUS "CMAKE_SYSTEM_NAME = ${CMAKE_SYSTEM_NAME}") |
|
|
|
# Version 2.8.5 or above of cmake is currently required for all platforms. |
|
cmake_minimum_required(VERSION 2.8.5 FATAL_ERROR) |
|
|
|
# libraries are all shared by default. |
|
option(BUILD_SHARED_LIBS "Build shared libraries" OFF) |
|
|
|
cmake_policy(SET CMP0026 OLD) # Disallow use of the LOCATION property for build targets |
|
|
|
add_compile_options( |
|
-Wno-missing-braces |
|
-Wno-sign-compare |
|
-Wno-return-type |
|
) |
|
|
|
# Use rpath? |
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
|
# No rpath on Darwin. Setting it will only cause trouble. |
|
else(CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
|
option(USE_RPATH "Use -rpath when linking libraries, executables" ON) |
|
endif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
|
|
|
# In windows all created dlls are gathered in the dll directory |
|
# if you add this directory to your PATH all shared libraries are available |
|
if(BUILD_SHARED_LIBS AND WIN32 AND NOT CYGWIN) |
|
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/dll) |
|
endif(BUILD_SHARED_LIBS AND WIN32 AND NOT CYGWIN) |
|
|
|
set(PACKAGE shp) |
|
|
|
# Set up install locations. |
|
set( |
|
CMAKE_INSTALL_BINDIR |
|
${CMAKE_INSTALL_PREFIX}/bin |
|
CACHE PATH "install location for user executables" |
|
) |
|
|
|
set( |
|
CMAKE_INSTALL_LIBDIR |
|
${CMAKE_INSTALL_PREFIX}/lib |
|
CACHE PATH "install location for object code libraries" |
|
) |
|
|
|
set( |
|
CMAKE_INSTALL_INCLUDEDIR |
|
${CMAKE_INSTALL_PREFIX}/include |
|
CACHE PATH "install location for C header files" |
|
) |
|
|
|
set( |
|
CMAKE_INSTALL_SHP_DATADIR |
|
${CMAKE_INSTALL_PREFIX}/share/${PACKAGE} |
|
CACHE PATH "install location for read-only architecture-independent shp data" |
|
) |
|
|
|
# Export build information to help other projects link installed |
|
# shapelib software. Only one of these signatures is required |
|
# for the export_shp name. |
|
install(EXPORT export_shp DESTINATION ${CMAKE_INSTALL_SHP_DATADIR}) |
|
|
|
# Initial boilerplate done, now build library and executables. |
|
|
|
set(lib_SRC |
|
shpopen.c |
|
dbfopen.c |
|
safileio.c |
|
shptree.c |
|
sbnsearch.c |
|
) |
|
option(SHP_DROP_UNABLE_TO_OPEN_MSG "Drop \"unable to open\" error messages" ON) |
|
if(SHP_DROP_UNABLE_TO_OPEN_MSG) |
|
#define the SHP_DROP_UNABLE_TO_OPEN_MSG C macro for this source file. |
|
set_source_files_properties(shpopen.c |
|
PROPERTIES |
|
COMPILE_DEFINITIONS SHP_DROP_UNABLE_TO_OPEN_MSG |
|
) |
|
endif(SHP_DROP_UNABLE_TO_OPEN_MSG) |
|
|
|
add_library(shp ${lib_SRC}) |
|
|
|
if(WIN32 AND NOT CYGWIN) |
|
set_target_properties(shp |
|
PROPERTIES |
|
COMPILE_DEFINITIONS SHAPELIB_DLLEXPORT |
|
) |
|
endif(WIN32 AND NOT CYGWIN) |
|
|
|
if(UNIX) |
|
find_library(M_LIB m) |
|
if(M_LIB) |
|
TARGET_LINK_LIBRARIES(shp -lm) |
|
endif() |
|
endif(UNIX) |
|
|
|
set(shp_SOVERSION 1) |
|
set(shp_VERSION 1.4.1) |
|
set_target_properties(shp |
|
PROPERTIES |
|
SOVERSION ${shp_SOVERSION} |
|
VERSION ${shp_VERSION} |
|
INSTALL_NAME_DIR "${CMAKE_INSTALL_LIBDIR}" |
|
) |
|
|
|
if(USE_RPATH) |
|
set_target_properties(shp |
|
PROPERTIES |
|
INSTALL_RPATH "${CMAKE_INSTALL_LIBDIR}" |
|
) |
|
endif(USE_RPATH) |
|
|
|
install(TARGETS shp |
|
EXPORT export_shp |
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
|
) |
|
|
|
# executables to be built and installed. |
|
set(executables |
|
shpcreate |
|
shpadd |
|
shpdump |
|
shprewind |
|
dbfcreate |
|
dbfadd |
|
dbfdump |
|
shptreedump |
|
) |
|
|
|
find_program(BASH_EXECUTABLE bash) |
|
find_program(SED_EXECUTABLE sed) |
|
if(BASH_EXECUTABLE AND SED_EXECUTABLE) |
|
#set(BUILD_TEST ON) |
|
else(BASH_EXECUTABLE AND SED_EXECUTABLE) |
|
message(STATUS "WARNING: sed or bash not available so disabling testing") |
|
endif(BASH_EXECUTABLE AND SED_EXECUTABLE) |
|
|
|
# For the first series of tests, the user needs to have downloaded |
|
# from http://dl.maptools.org/dl/shapelib/shape_eg_data.zip, unpacked |
|
# that file, and specified the location of that directory with |
|
# the cmake option, -DEG_DATA:PATH=whatever |
|
if(BUILD_TEST) |
|
if(EG_DATA) |
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/script.sed "s?/u/www/projects/shapelib/eg_data?${EG_DATA}?\n") |
|
else(EG_DATA) |
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/script.sed "") |
|
message(STATUS "WARNING: EG_DATA:PATH not set to point to downloaded eg_data directory so the eg_data part of testing will be ignored.") |
|
endif(EG_DATA) |
|
endif(BUILD_TEST) |
|
|
|
foreach(executable ${executables}) |
|
add_executable(${executable} ${executable}.c) |
|
target_link_libraries(${executable} shp) |
|
if(USE_RPATH) |
|
set_target_properties(${executable} |
|
PROPERTIES |
|
INSTALL_RPATH "${CMAKE_INSTALL_LIBDIR}" |
|
) |
|
endif(USE_RPATH) |
|
if(BUILD_TEST) |
|
get_target_property(${executable}_LOC ${executable} LOCATION) |
|
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/script.sed "s?\\./${executable}?${${executable}_LOC}?\n") |
|
endif(BUILD_TEST) |
|
install(TARGETS ${executable} DESTINATION ${CMAKE_INSTALL_BINDIR}) |
|
endforeach(executable ${executables}) |
|
|
|
# Install header |
|
install(FILES shapefil.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
|
|
|
if(BUILD_TEST) |
|
# Set up tests: |
|
|
|
enable_testing() |
|
|
|
# Other executables to be built to facilitate tests. |
|
foreach(executable shptest shputils) |
|
add_executable(${executable} ${executable}.c) |
|
target_link_libraries(${executable} shp) |
|
get_target_property(${executable}_LOC ${executable} LOCATION) |
|
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/script.sed "s?\\./${executable}?${${executable}_LOC}?\n") |
|
endforeach(executable shptest shputils) |
|
|
|
# Write this as a shell script since execute_process cannot handle |
|
# anything like redirection. |
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/script.sh "${SED_EXECUTABLE} -f script.sed < $1 >| $2") |
|
execute_process( |
|
COMMAND |
|
${BASH_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/script.sh ${CMAKE_CURRENT_SOURCE_DIR}/tests/test1.sh ${CMAKE_CURRENT_BINARY_DIR}/sed_scripted_test1.sh |
|
) |
|
|
|
execute_process( |
|
COMMAND |
|
${BASH_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/script.sh ${CMAKE_CURRENT_SOURCE_DIR}/tests/test2.sh ${CMAKE_CURRENT_BINARY_DIR}/sed_scripted_test2.sh |
|
) |
|
|
|
execute_process( |
|
COMMAND |
|
${BASH_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/script.sh ${CMAKE_CURRENT_SOURCE_DIR}/tests/test3.sh ${CMAKE_CURRENT_BINARY_DIR}/sed_scripted_test3.sh |
|
) |
|
|
|
if(EG_DATA) |
|
# These tests correspond to everything in test1.sh |
|
add_test( |
|
NAME test1 |
|
COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/sed_scripted_test1.sh |
|
) |
|
endif(EG_DATA) |
|
# These tests correspond to everything in test2.sh |
|
add_test( |
|
NAME test2 |
|
COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/sed_scripted_test2.sh |
|
) |
|
|
|
# These tests correspond to everything in test3.sh |
|
add_test( |
|
NAME test3 |
|
COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/sed_scripted_test3.sh |
|
) |
|
endif(BUILD_TEST)
|
|
|