From f525fe4eb68988cd42a991aa942bbf77b3b353bd Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 7 Apr 2016 10:32:39 -0400 Subject: [PATCH] Released 0.9.1. [publish binary] --- bigtiff_header_extract.tif | Bin 0 -> 252 bytes deps/libgdal/gdal/dist_docs/SETUP_GDAL.BAT | 24 + deps/libgdal/gdal/dist_docs/burnpath.c | 113 +++++ deps/libgdal/gdal/dist_docs/install_unx.sh | 70 +++ deps/libgdal/gdal/doxygen_sqlite3.db | Bin 0 -> 162816 bytes deps/libproj/proj/CMakeLists.txt | 111 +++++ deps/libproj/proj/cmake/CMakeLists.txt | 29 ++ deps/libproj/proj/cmake/Proj4Config.cmake | 41 ++ .../libproj/proj/cmake/Proj4InstallPath.cmake | 67 +++ deps/libproj/proj/cmake/Proj4Mac.cmake | 24 + deps/libproj/proj/cmake/Proj4SystemInfo.cmake | 83 ++++ deps/libproj/proj/cmake/Proj4Test.cmake | 32 ++ deps/libproj/proj/cmake/Proj4Utilities.cmake | 456 ++++++++++++++++++ deps/libproj/proj/cmake/Proj4Version.cmake | 47 ++ deps/libproj/proj/cmake/policies.cmake | 5 + deps/libproj/proj/compile | 347 +++++++++++++ deps/libproj/proj/nad/CMakeLists.txt | 57 +++ deps/libproj/proj/src/CMakeLists.txt | 45 ++ deps/libproj/proj/src/bin_cs2cs.cmake | 14 + deps/libproj/proj/src/bin_geod.cmake | 16 + deps/libproj/proj/src/bin_nad2bin.cmake | 17 + deps/libproj/proj/src/bin_proj.cmake | 19 + deps/libproj/proj/src/lib_proj.cmake | 330 +++++++++++++ package.json | 2 +- yuidoc.json | 2 +- 25 files changed, 1949 insertions(+), 2 deletions(-) create mode 100644 bigtiff_header_extract.tif create mode 100755 deps/libgdal/gdal/dist_docs/SETUP_GDAL.BAT create mode 100644 deps/libgdal/gdal/dist_docs/burnpath.c create mode 100755 deps/libgdal/gdal/dist_docs/install_unx.sh create mode 100644 deps/libgdal/gdal/doxygen_sqlite3.db create mode 100644 deps/libproj/proj/CMakeLists.txt create mode 100644 deps/libproj/proj/cmake/CMakeLists.txt create mode 100644 deps/libproj/proj/cmake/Proj4Config.cmake create mode 100644 deps/libproj/proj/cmake/Proj4InstallPath.cmake create mode 100644 deps/libproj/proj/cmake/Proj4Mac.cmake create mode 100644 deps/libproj/proj/cmake/Proj4SystemInfo.cmake create mode 100644 deps/libproj/proj/cmake/Proj4Test.cmake create mode 100644 deps/libproj/proj/cmake/Proj4Utilities.cmake create mode 100644 deps/libproj/proj/cmake/Proj4Version.cmake create mode 100644 deps/libproj/proj/cmake/policies.cmake create mode 100755 deps/libproj/proj/compile create mode 100644 deps/libproj/proj/nad/CMakeLists.txt create mode 100644 deps/libproj/proj/src/CMakeLists.txt create mode 100644 deps/libproj/proj/src/bin_cs2cs.cmake create mode 100644 deps/libproj/proj/src/bin_geod.cmake create mode 100644 deps/libproj/proj/src/bin_nad2bin.cmake create mode 100644 deps/libproj/proj/src/bin_proj.cmake create mode 100644 deps/libproj/proj/src/lib_proj.cmake diff --git a/bigtiff_header_extract.tif b/bigtiff_header_extract.tif new file mode 100644 index 0000000000000000000000000000000000000000..a43e6fe6e00cd9390964e01c2279ba6fa95c5a32 GIT binary patch literal 252 zcmebD)MnsdU|jmp%V35J0E*Og#R5=3xwc7~e literal 0 HcmV?d00001 diff --git a/deps/libgdal/gdal/dist_docs/SETUP_GDAL.BAT b/deps/libgdal/gdal/dist_docs/SETUP_GDAL.BAT new file mode 100755 index 00000000..8cf90be6 --- /dev/null +++ b/deps/libgdal/gdal/dist_docs/SETUP_GDAL.BAT @@ -0,0 +1,24 @@ +@echo off + +set GDAL_DIR=c:\gdal114 + +if exist %GDAL_DIR%\SETUP_GDAL.BAT goto DIROK + +echo ----------------------------------------------------------------------- +echo It appears that the GDAL_DIR environment variable is not set properly +echo in SETUP_GDAL.BAT. Please edit GDAL_SETUP.BAT, and modify the GDAL_DIR +echo variable to contain the directory containing the SETUP_GDAL.BAT ... the +echo base directory of the unzipped GDAL tree. +echo ----------------------------------------------------------------------- + +goto Done + +:DIROK + +set PATH=%GDAL_DIR%\bin;%PATH% +set INCLUDE=%GDAL_DIR%\include;%INCLUDE% +set LIB=%GDAL_DIR%\include;%LIB% +set PYTHONPATH=%GDAL_DIR%\pymod;%PYTHONPATH% +set GEOTIFF_CSV=%GDAL_DIR%\data + +:Done \ No newline at end of file diff --git a/deps/libgdal/gdal/dist_docs/burnpath.c b/deps/libgdal/gdal/dist_docs/burnpath.c new file mode 100644 index 00000000..6fcb61fc --- /dev/null +++ b/deps/libgdal/gdal/dist_docs/burnpath.c @@ -0,0 +1,113 @@ +#include +#include + +const static int block_size = 10000; + +/************************************************************************/ +/* main() */ +/************************************************************************/ +int main( int argc, char ** argv ) + +{ + FILE *fp; + int offset, size, overlap; + const char *marker; + const char *path; + const char *targetfile; + char blockbuf[block_size+1]; + +/* -------------------------------------------------------------------- */ +/* Usage message. */ +/* -------------------------------------------------------------------- */ + if( argc < 4 ) + { + printf( "\n" ); + printf( "Usage: burnpath \n" ); + printf( "\n" ); + printf( "eg. \n" ); + printf( " %% burnpath /opt/lib/libgdal.1.1.so __INST_DATA_TARGET: /opt/share/gdal\n" ); + exit( 1 ); + } + + targetfile = argv[1]; + marker = argv[2]; + path = argv[3]; + + overlap = strlen(marker) + strlen(path) + 1; + +/* -------------------------------------------------------------------- */ +/* Open the target file. */ +/* -------------------------------------------------------------------- */ + fp = fopen( targetfile, "r+" ); + if( fp == NULL ) + { + perror( "fopen" ); + exit( 1 ); + } + +/* -------------------------------------------------------------------- */ +/* Establish the file length. */ +/* -------------------------------------------------------------------- */ + fseek( fp, 0, SEEK_END ); + size = ftell( fp ); + fseek( fp, 0, SEEK_SET ); + +/* -------------------------------------------------------------------- */ +/* Read in the file in overlapping chunks. We assume the */ +/* "space" after the marker could be up to 200 bytes. */ +/* -------------------------------------------------------------------- */ + for( offset = 0; offset < size; offset += block_size - overlap ) + { + int block_bytes, block_modified = 0, i; + + if( offset + block_size < size ) + block_bytes = block_size; + else + block_bytes = size - offset; + + if( fseek( fp, offset, SEEK_SET ) != 0 ) + { + perror( "fseek" ); + exit( 1 ); + } + + if( fread( blockbuf, block_bytes, 1, fp ) != 1 ) + { + perror( "fread" ); + exit( 1 ); + } + blockbuf[block_bytes] = '\0'; + + for( i = 0; i < block_bytes - overlap; i++ ) + { + if( blockbuf[i] == marker[0] + && strncmp( blockbuf + i, marker, strlen(marker) ) == 0 ) + { + strcpy( blockbuf+i+strlen(marker), path ); + block_modified = 1; + } + } + + if( block_modified ) + { + if( fseek( fp, offset, SEEK_SET ) != 0 ) + { + perror( "fseek" ); + exit( 1 ); + } + + if( fwrite( blockbuf, block_bytes, 1, fp ) != 1 ) + { + perror( "fwrite" ); + exit( 1 ); + } + } + } + +/* -------------------------------------------------------------------- */ +/* We are done. */ +/* -------------------------------------------------------------------- */ + fclose( fp ); + + exit( 0 ); +} diff --git a/deps/libgdal/gdal/dist_docs/install_unx.sh b/deps/libgdal/gdal/dist_docs/install_unx.sh new file mode 100755 index 00000000..06fa6edf --- /dev/null +++ b/deps/libgdal/gdal/dist_docs/install_unx.sh @@ -0,0 +1,70 @@ +#!/bin/sh + +if test $# -eq 0; then + echo "Usage: install_unx.sh install-path" + echo + echo "This script will attempt to install GDAL binaries, and shared" + echo "library in the named location." + exit 1 +fi + +PREFIX=$1 + +if test ! -d $PREFIX ; then + echo "Directory $PREFIX does not exist. Please create or correct." + exit 1 +fi + +if test ! -f bin/gdalinfo ; then + echo "This script must be run from within the unpacked binary distribution" + echo "directory." + exit 1 +fi + +############################################################################### +# Ensure required subdirectories exist. +# + +if test ! -d $PREFIX/lib ; then + mkdir $PREFIX/lib +fi +if test ! -d $PREFIX/bin ; then + mkdir $PREFIX/bin +fi +if test ! -d $PREFIX/share ; then + mkdir $PREFIX/share +fi +if test ! -d $PREFIX/share/gdal ; then + mkdir $PREFIX/share/gdal +fi + +############################################################################### +# The following is intended to "burn" an updated INST_DATA location +# into the given file over the preformatted message embedded in the so. +# Look at gcore/gdaldrivermanager.cpp for a clue as to what is going on there. +# + +SHARED_LIB=libgdal.1.1.so + +for SHARED_LIB in lib/* ; do + cp $SHARED_LIB $PREFIX/lib + bin/burnpath $PREFIX/$SHARED_LIB __INST_DATA_TARGET: $PREFIX/share/gdal +done + +############################################################################### +# Copy the rest of the files. +# + +cp share/gdal/* $PREFIX/share/gdal + +for EXECUTABLE in bin/* ; do + if test "$EXECUTABLE" == "bin/gdal-config" -o "$EXECUTABLE" == "bin/burnpath" ; then + /bin/true + else + cp $EXECUTABLE $PREFIX/bin + bin/burnpath $PREFIX/$EXECUTABLE __INST_DATA_TARGET: $PREFIX/share/gdal + fi +done + +echo "Installation of GDAL to $PREFIX complete." + diff --git a/deps/libgdal/gdal/doxygen_sqlite3.db b/deps/libgdal/gdal/doxygen_sqlite3.db new file mode 100644 index 0000000000000000000000000000000000000000..d1c8b4e5c6063ec908c908c9dea3d68cbdb4e669 GIT binary patch literal 162816 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 x!IH@ePy* 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 ) +# +# Copyright (C) 2011 Nicolas David +# Distributed under the MIT license +# +################################################################################# +# General settings +################################################################################# +cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR) + +# proj4 is an ANSI C project +project(PROJ4 C) +set(PROJECT_INTERN_NAME PROJ) + +################################################################################# +# PROJ4 CMake modules +################################################################################# +# Path to additional CMake modules +set(CMAKE_MODULE_PATH ${PROJ4_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) +set(CMAKE_MODULE_PATH ${PROJ4_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) + +include(Proj4Utilities) + +message(STATUS "") +colormsg(_HIBLUE_ "Configuring PROJ:") + +################################################################################# +#PROJ version information +################################################################################# +include(Proj4Version) +proj_version(MAJOR 4 MINOR 9 PATCH 2) +set(PROJ_API_VERSION "9") +set(PROJ_BUILD_VERSION "10.0.1") + +################################################################################# +# Build features and variants +################################################################################# +include(Proj4SystemInfo) +include(Proj4Config) +include(Proj4Mac) +include(policies) + +################################################################################# +# threading configuration +################################################################################# +set(CMAKE_THREAD_PREFER_PTHREAD TRUE) +find_package (Threads) + +include(CheckIncludeFiles) +include(CheckSymbolExists) +CHECK_SYMBOL_EXISTS(PTHREAD_MUTEX_RECURSIVE pthread.h HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN) +if (HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN) + add_definitions(-DHAVE_PTHREAD_MUTEX_RECURSIVE=1) +endif() + +boost_report_value(PROJ_PLATFORM_NAME) +boost_report_value(PROJ_COMPILER_NAME) + +# Set a default build type for single-configuration cmake generators if +# no build type is set. +if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) + set (CMAKE_BUILD_TYPE Release) +endif () + +if (MSVC OR CMAKE_CONFIGURATION_TYPES) + # For multi-config systems and for Visual Studio, the debug version of + # the library has _d appended. + set (CMAKE_DEBUG_POSTFIX _d) +endif () + +option(PROJ4_TESTS "Enable build of collection of PROJ4 tests" ON) +boost_report_value(PROJ4_TESTS) +if(PROJ4_TESTS) + include(CTest) + enable_testing() +endif(PROJ4_TESTS) +include(Proj4Test) + +# 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 ${PROJECT_BINARY_DIR}/lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) +link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) + +################################################################################# +# Installation +################################################################################# +include(Proj4InstallPath) +set(BINDIR "${DEFAULT_BINDIR}" CACHE PATH "The directory to install binaries into.") +set(LIBDIR "${DEFAULT_LIBDIR}" CACHE PATH "The directory to install libraries into.") +set(DATADIR "${DEFAULT_DATADIR}" CACHE PATH "The directory to install data files into.") +set(DOCDIR "${DEFAULT_DOCDIR}" CACHE PATH "The directory to install doc files into.") +set(INCLUDEDIR "${DEFAULT_INCLUDEDIR}" CACHE PATH "The directory to install includes into.") + +################################################################################# +# Build configured components +################################################################################# +include_directories(${PROJ4_SOURCE_DIR}/src) + +message(STATUS "") +add_subdirectory(nad) +add_subdirectory(src) +add_subdirectory(man) +add_subdirectory(cmake) + diff --git a/deps/libproj/proj/cmake/CMakeLists.txt b/deps/libproj/proj/cmake/CMakeLists.txt new file mode 100644 index 00000000..742da0e9 --- /dev/null +++ b/deps/libproj/proj/cmake/CMakeLists.txt @@ -0,0 +1,29 @@ +# proj-config.cmake for the install tree. It's installed in +# ${INSTALL_CMAKE_DIR} and @PROJECT_ROOT_DIR@ is the relative +# path to the root from there. (Note that the whole install tree can +# be relocated.) +if (NOT WIN32) + set (INSTALL_CMAKE_DIR "share/cmake/${PROJECT_NAME}") + set (PROJECT_ROOT_DIR "../../..") +else () + set (INSTALL_CMAKE_DIR "cmake") + set (PROJECT_ROOT_DIR "..") +endif () + +string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER) +configure_file (project-config.cmake.in project-config.cmake @ONLY) +configure_file (project-config-version.cmake.in + project-config-version.cmake @ONLY) +install (FILES + "${CMAKE_CURRENT_BINARY_DIR}/project-config.cmake" + DESTINATION "${INSTALL_CMAKE_DIR}" + RENAME "${PROJECT_NAME_LOWER}-config.cmake") +install (FILES + "${CMAKE_CURRENT_BINARY_DIR}/project-config-version.cmake" + DESTINATION "${INSTALL_CMAKE_DIR}" + RENAME "${PROJECT_NAME_LOWER}-config-version.cmake") +# Make information about the cmake targets (the library and the tools) +# available. +install (EXPORT targets + FILE ${PROJECT_NAME_LOWER}-targets.cmake + DESTINATION "${INSTALL_CMAKE_DIR}") diff --git a/deps/libproj/proj/cmake/Proj4Config.cmake b/deps/libproj/proj/cmake/Proj4Config.cmake new file mode 100644 index 00000000..fda9c9c2 --- /dev/null +++ b/deps/libproj/proj/cmake/Proj4Config.cmake @@ -0,0 +1,41 @@ +################################################################################ +# SociConfig.cmake - CMake build configuration of SOCI library +################################################################################ +# Copyright (C) 2010 Mateusz Loskot +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +################################################################################ +include (CheckIncludeFiles) +include (CheckLibraryExists) +include (CheckFunctionExists) + +# check needed include file +check_include_files (dlfcn.h HAVE_DLFCN_H) +check_include_files (inttypes.h HAVE_INTTYPES_H) +check_include_files (jni.h HAVE_JNI_H) +check_include_files (memory.h HAVE_MEMORY_H) +check_include_files (stdint.h HAVE_STDINT_H) +check_include_files (stdlib.h HAVE_STDLIB_H) +check_include_files (string.h HAVE_STRING_H) +check_include_files (sys/stat.h HAVE_SYS_STAT_H) +check_include_files (sys/types.h HAVE_SYS_TYPES_H) +check_include_files (unistd.h HAVE_UNISTD_H) +check_include_files("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS) + +CHECK_FUNCTION_EXISTS(localeconv HAVE_LOCALECONV) + +# check libm need on unix +check_library_exists(m ceil "" HAVE_LIBM) + +set(PACKAGE "proj") +set(PACKAGE_BUGREPORT "warmerdam@pobox.com") +set(PACKAGE_NAME "PROJ.4 Projections") +set(PACKAGE_STRING "PROJ.4 Projections ${${PROJECT_INTERN_NAME}_VERSION}") +set(PACKAGE_TARNAME "proj") +set(PACKAGE_VERSION "${${PROJECT_INTERN_NAME}_VERSION}") + +configure_file(cmake/proj_config.cmake.in src/proj_config.h) + + diff --git a/deps/libproj/proj/cmake/Proj4InstallPath.cmake b/deps/libproj/proj/cmake/Proj4InstallPath.cmake new file mode 100644 index 00000000..da1491c0 --- /dev/null +++ b/deps/libproj/proj/cmake/Proj4InstallPath.cmake @@ -0,0 +1,67 @@ +#---------------------------------------------- +# installation path settings +#---------------------------------------------- +if(WIN32) + if(DEFINED ENV{OSGEO4W_ROOT}) + set(OSGEO4W_ROOT_DIR $ENV{OSGEO4W_ROOT}) + else() + set(OSGEO4W_ROOT_DIR c:/OSGeo4W) + endif() + set(DEFAULT_PROJ_ROOT_DIR ${OSGEO4W_ROOT_DIR}) +endif() +if(UNIX) + set(DEFAULT_PROJ_ROOT_DIR "/usr/local/") +endif(UNIX) + + +IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + SET(CMAKE_INSTALL_PREFIX ${DEFAULT_PROJ_ROOT_DIR} CACHE PATH "Foo install + prefix" FORCE) +ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + +#TODO +# for data install testing the PROJ_LIB envVar + +if(WIN32) + set(DEFAULT_BIN_SUBDIR bin) + set(DEFAULT_LIB_SUBDIR local/lib) + set(DEFAULT_DATA_SUBDIR share) + set(DEFAULT_INCLUDE_SUBDIR local/include) + set(DEFAULT_DOC_SUBDIR share/doc/proj) +else() + # Common locatoins for Unix and Mac OS X + set(DEFAULT_BIN_SUBDIR bin) + set(DEFAULT_LIB_SUBDIR lib) + set(DEFAULT_DATA_SUBDIR share/proj) + set(DEFAULT_DOC_SUBDIR doc/proj) + set(DEFAULT_INCLUDE_SUBDIR include) +endif() + +# Locations are changeable by user to customize layout of PDAL installation +# (default values are platform-specific) +set(PROJ_BIN_SUBDIR ${DEFAULT_BIN_SUBDIR} CACHE STRING + "Subdirectory where executables will be installed") +set(PROJ_LIB_SUBDIR ${DEFAULT_LIB_SUBDIR} CACHE STRING + "Subdirectory where libraries will be installed") +set(PROJ_INCLUDE_SUBDIR ${DEFAULT_INCLUDE_SUBDIR} CACHE STRING + "Subdirectory where header files will be installed") +set(PROJ_DATA_SUBDIR ${DEFAULT_DATA_SUBDIR} CACHE STRING + "Subdirectory where data will be installed") +set(PROJ_DOC_SUBDIR ${DEFAULT_DOC_SUBDIR} CACHE STRING + "Subdirectory where data will be installed") + +# Mark *DIR variables as advanced and dedicated to use by power-users only. +mark_as_advanced(PROJ_ROOT_DIR + PROJ_BIN_SUBDIR + PROJ_LIB_SUBDIR + PROJ_INCLUDE_SUBDIR + PROJ_DATA_SUBDIR + PROJ_DOC_SUBDIR ) + +set(DEFAULT_BINDIR "${PROJ_BIN_SUBDIR}") +set(DEFAULT_LIBDIR "${PROJ_LIB_SUBDIR}") +set(DEFAULT_DATADIR "${PROJ_DATA_SUBDIR}") +set(DEFAULT_DOCDIR "${PROJ_DOC_SUBDIR}") +set(DEFAULT_INCLUDEDIR "${PROJ_INCLUDE_SUBDIR}") + + diff --git a/deps/libproj/proj/cmake/Proj4Mac.cmake b/deps/libproj/proj/cmake/Proj4Mac.cmake new file mode 100644 index 00000000..c2448e7b --- /dev/null +++ b/deps/libproj/proj/cmake/Proj4Mac.cmake @@ -0,0 +1,24 @@ +if(APPLE) +set(FRAMEWORKDIR "Library/Frameworks" CACHE PATH "the path to install framework") + set(BUNDLEDIR "Applications/OSGEO" CACHE PATH "the path to install bundle") + file(RELATIVE_PATH BUNDLE_FRAME_REL_PATH_AAA "/${FRAMEWORKDIR}" "/aaa") + string(LENGTH ${BUNDLE_FRAME_REL_PATH_AAA} AAA_LENGTH) + math(EXPR RELATIVE_PATH_LENGTH "${AAA_LENGTH}-4") + string(SUBSTRING ${BUNDLE_FRAME_REL_PATH_AAA} 0 ${RELATIVE_PATH_LENGTH} BUNDLE_FRAME_REL_PATH) + set(PROJ_INSTALL_NAME_DIR "@executable_path/${BUNDLE_FRAME_REL_PATH}/${FRAMEWORKDIR}" ) +else(APPLE) + set(FRAMEWORKDIR "") + set(BUNDLEDIR "") + set(PROJ_INSTALL_NAME_DIR "") +endif(APPLE) + +set(PROJ_RESOURCES "" ) + +if(APPLE) + option(BUILD_FRAMEWORKS_AND_BUNDLE "if set to ON, build a library framework and application bundle, + otherwise install classical UNIX bin/lib" OFF ) + set(DEFAULT_BINDIR ${BUNDLEDIR}) + boost_report_value(BUNDLEDIR) + boost_report_value(PROJ_INSTALL_NAME_DIR) + boost_report_value(FRAMEWORKDIR) +endif(APPLE) diff --git a/deps/libproj/proj/cmake/Proj4SystemInfo.cmake b/deps/libproj/proj/cmake/Proj4SystemInfo.cmake new file mode 100644 index 00000000..294a50b2 --- /dev/null +++ b/deps/libproj/proj/cmake/Proj4SystemInfo.cmake @@ -0,0 +1,83 @@ +################################################################################ +# SociSystemInfo.cmake - part of CMake configuration of Proj.4 library +# +# Based on idea taken from http://code.google.com/p/softart/ project +################################################################################ +# Copyright (C) 2010 Mateusz Loskot +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +################################################################################ +# The following variables are defined: +# PROJ_COMPILER_NAME - name of compiler toolset, follows Boost toolset naming. +# PROJ_PLATFORM_NAME - target platform name: x64, x86 or win32 +################################################################################ + +set(PROJ_COMPILER_NAME) +set(PROJ_PLATFORM_NAME) + +if(MINGW OR UNIX) + exec_program(gcc ARGS -dumpversion OUTPUT_VARIABLE GCC_VERSION) + string(REPLACE "." "" GCC_VERSION_STR_FULL ${GCC_VERSION}) + string(REGEX MATCH "[0-9]+\\.[0-9]+" GCC_VERSION_MAJOR_MINOR ${GCC_VERSION}) +endif() + +if(WIN32) + # Compilers, taken from http://predef.sourceforge.net/precomp.html#sec34 + if(MSVC) + if(MSVC_VERSION EQUAL 1200) + set(PROJ_COMPILER_NAME "msvc-6.0") + endif() + if(MSVC_VERSION EQUAL 1300) + set(PROJ_COMPILER_NAME "msvc-7.0") + endif() + if(MSVC_VERSION EQUAL 1310) + set(PROJ_COMPILER_NAME "msvc-7.1") #Visual Studio 2003 + endif() + if(MSVC_VERSION EQUAL 1400) + set(PROJ_COMPILER_NAME "msvc-8.0") #Visual Studio 2005 + endif() + if(MSVC_VERSION EQUAL 1500) + set(PROJ_COMPILER_NAME "msvc-9.0") #Visual Studio 2008 + endif() + if(MSVC_VERSION EQUAL 1600) + set(PROJ_COMPILER_NAME "msvc-10.0") #Visual Studio 2010 + endif() + if(MSVC_VERSION EQUAL 1700) + set(PROJ_COMPILER_NAME "msvc-11.0") #Visual Studio 2012 + endif() + if(MSVC_VERSION EQUAL 1800) + set(PROJ_COMPILER_NAME "msvc-12.0") #Visual Studio 2013 + endif() + endif(MSVC) + + if(MINGW) + set(PROJ_COMPILER_NAME "mingw-${GCC_VERSION}") + endif( MINGW ) + + if(CMAKE_GENERATOR MATCHES "Win64") + set(PROJ_PLATFORM_NAME "x64") + else() + set(PROJ_PLATFORM_NAME "win32") + endif() +endif(WIN32) + +if(UNIX) + set(PROJ_COMPILER_NAME "gcc-${GCC_VERSION}") + if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + set(PROJ_PLATFORM_NAME "x64") + else() + set(PROJ_PLATFORM_NAME "x86") + endif() +endif(UNIX) + +if(NOT PROJ_COMPILER_NAME) + colormsg(_RED_ "WARNING:") + colormsg(RED "Could not determine compiler toolset name to set PROJ_COMPILER_NAME variable.") +endif() + +if(NOT PROJ_COMPILER_NAME) + colormsg(_RED_ "WARNING:") + colormsg(RED "Could not determine platform name to set PROJ_COMPILER_NAME variable.") +endif() diff --git a/deps/libproj/proj/cmake/Proj4Test.cmake b/deps/libproj/proj/cmake/Proj4Test.cmake new file mode 100644 index 00000000..7a0270c2 --- /dev/null +++ b/deps/libproj/proj/cmake/Proj4Test.cmake @@ -0,0 +1,32 @@ +# +# add test with sh script +# + +function(proj_add_test_script_sh SH_NAME BIN_USE) + if(UNIX) + get_filename_component(testname ${SH_NAME} NAME_WE) + + set(TEST_OK 1) + if(ARGV2) + set(TEST_OK 0) + set(GRID_FULLNAME ${PROJECT_SOURCE_DIR}/nad/${ARGV2}) + if(EXISTS ${GRID_FULLNAME}) + set(TEST_OK 1) + endif(EXISTS ${GRID_FULLNAME}) + endif(ARGV2) + + if( CMAKE_MINOR_VERSION LESS 8 OR CMAKE_PATCH_VERSION LESS 4 ) + set(TEST_OK 0) + message(STATUS "test with bash script need a cmake version > 2.8.3 ") + endif() + + if(${TEST_OK}) + add_test( NAME "${testname}" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/nad + COMMAND ${PROJECT_SOURCE_DIR}/nad/${SH_NAME} + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${${BIN_USE}} + ) + endif(${TEST_OK}) + + endif(UNIX) +endfunction() diff --git a/deps/libproj/proj/cmake/Proj4Utilities.cmake b/deps/libproj/proj/cmake/Proj4Utilities.cmake new file mode 100644 index 00000000..24b61701 --- /dev/null +++ b/deps/libproj/proj/cmake/Proj4Utilities.cmake @@ -0,0 +1,456 @@ +################################################################################ +# SociUtilities.cmake - part of CMake configuration of Proj4 library +# +# Based on BoostUtilities.cmake from CMake configuration for Boost +################################################################################ +# Copyright (C) 2007 Douglas Gregor +# Copyright (C) 2007 Troy Straszheim +# Copyright (C) 2010 Mateusz Loskot +# +# Distributed under the Boost Software License, Version 1.0. +# See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt +################################################################################ +# Macros in this module: +# +# list_contains: Determine whether a string value is in a list. +# +# car: Return the first element in a list +# +# cdr: Return all but the first element in a list +# +# parse_arguments: Parse keyword arguments for use in other macros. +# +# proj_report_directory_property +# +# proj_target_output_name: +# +################################################################################ + +# This utility macro determines whether a particular string value +# occurs within a list of strings: +# +# list_contains(result string_to_find arg1 arg2 arg3 ... argn) +# +# This macro sets the variable named by result equal to TRUE if +# string_to_find is found anywhere in the following arguments. +macro(list_contains var value) + set(${var}) + foreach (value2 ${ARGN}) + if (${value} STREQUAL ${value2}) + set(${var} TRUE) + endif (${value} STREQUAL ${value2}) + endforeach (value2) +endmacro(list_contains) + +# This utility macro extracts the first argument from the list of +# arguments given, and places it into the variable named var. +# +# car(var arg1 arg2 ...) +macro(car var) + set(${var} ${ARGV1}) +endmacro(car) + +# This utility macro extracts all of the arguments given except the +# first, and places them into the variable named var. +# +# car(var arg1 arg2 ...) +macro(cdr var junk) + set(${var} ${ARGN}) +endmacro(cdr) + +# The parse_arguments macro will take the arguments of another macro and +# define several variables. The first argument to parse_arguments is a +# prefix to put on all variables it creates. The second argument is a +# list of names, and the third argument is a list of options. Both of +# these lists should be quoted. The rest of parse_arguments are +# arguments from another macro to be parsed. +# +# parse_arguments(prefix arg_names options arg1 arg2...) +# +# For each item in options, parse_arguments will create a variable with +# that name, prefixed with prefix_. So, for example, if prefix is +# MY_MACRO and options is OPTION1;OPTION2, then parse_arguments will +# create the variables MY_MACRO_OPTION1 and MY_MACRO_OPTION2. These +# variables will be set to true if the option exists in the command line +# or false otherwise. +# +# For each item in arg_names, parse_arguments will create a variable +# with that name, prefixed with prefix_. Each variable will be filled +# with the arguments that occur after the given arg_name is encountered +# up to the next arg_name or the end of the arguments. All options are +# removed from these lists. parse_arguments also creates a +# prefix_DEFAULT_ARGS variable containing the list of all arguments up +# to the first arg_name encountered. +macro(parse_arguments prefix arg_names option_names) + set(DEFAULT_ARGS) + foreach(arg_name ${arg_names}) + set(${prefix}_${arg_name}) + endforeach(arg_name) + foreach(option ${option_names}) + set(${prefix}_${option} FALSE) + endforeach(option) + + set(current_arg_name DEFAULT_ARGS) + set(current_arg_list) + foreach(arg ${ARGN}) + list_contains(is_arg_name ${arg} ${arg_names}) + if (is_arg_name) + set(${prefix}_${current_arg_name} ${current_arg_list}) + set(current_arg_name ${arg}) + set(current_arg_list) + else (is_arg_name) + list_contains(is_option ${arg} ${option_names}) + if (is_option) + set(${prefix}_${arg} TRUE) + else (is_option) + set(current_arg_list ${current_arg_list} ${arg}) + endif (is_option) + endif (is_arg_name) + endforeach(arg) + set(${prefix}_${current_arg_name} ${current_arg_list}) +endmacro(parse_arguments) + +# Perform a reverse topological sort on the given LIST. +# +# topological_sort(my_list "MY_" "_EDGES") +# +# LIST is the name of a variable containing a list of elements to be +# sorted in reverse topological order. Each element in the list has a +# set of outgoing edges (for example, those other list elements that +# it depends on). In the resulting reverse topological ordering +# (written back into the variable named LIST), an element will come +# later in the list than any of the elements that can be reached by +# following its outgoing edges and the outgoing edges of any vertices +# they target, recursively. Thus, if the edges represent dependencies +# on build targets, for example, the reverse topological ordering is +# the order in which one would build those targets. +# +# For each element E in this list, the edges for E are contained in +# the variable named ${PREFIX}${E}${SUFFIX}, where E is the +# upper-cased version of the element in the list. If no such variable +# exists, then it is assumed that there are no edges. For example, if +# my_list contains a, b, and c, one could provide a dependency graph +# using the following variables: +# +# MY_A_EDGES b +# MY_B_EDGES +# MY_C_EDGES a b +# +# With the involcation of topological_sort shown above and these +# variables, the resulting reverse topological ordering will be b, a, +# c. +function(topological_sort LIST PREFIX SUFFIX) + # Clear the stack and output variable + set(VERTICES "${${LIST}}") + set(STACK) + set(${LIST}) + + # Loop over all of the vertices, starting the topological sort from + # each one. + foreach(VERTEX ${VERTICES}) + string(TOUPPER ${VERTEX} UPPER_VERTEX) + + # If we haven't already processed this vertex, start a depth-first + # search from where. + if (NOT FOUND_${UPPER_VERTEX}) + # Push this vertex onto the stack with all of its outgoing edges + string(REPLACE ";" " " NEW_ELEMENT + "${VERTEX};${${PREFIX}${UPPER_VERTEX}${SUFFIX}}") + list(APPEND STACK ${NEW_ELEMENT}) + + # We've now seen this vertex + set(FOUND_${UPPER_VERTEX} TRUE) + + # While the depth-first search stack is not empty + list(LENGTH STACK STACK_LENGTH) + while(STACK_LENGTH GREATER 0) + # Remove the vertex and its remaining out-edges from the top + # of the stack + list(GET STACK -1 OUT_EDGES) + list(REMOVE_AT STACK -1) + + # Get the source vertex and the list of out-edges + separate_arguments(OUT_EDGES) + list(GET OUT_EDGES 0 SOURCE) + list(REMOVE_AT OUT_EDGES 0) + + # While there are still out-edges remaining + list(LENGTH OUT_EDGES OUT_DEGREE) + while (OUT_DEGREE GREATER 0) + # Pull off the first outgoing edge + list(GET OUT_EDGES 0 TARGET) + list(REMOVE_AT OUT_EDGES 0) + + string(TOUPPER ${TARGET} UPPER_TARGET) + if (NOT FOUND_${UPPER_TARGET}) + # We have not seen the target before, so we will traverse + # its outgoing edges before coming back to our + # source. This is the key to the depth-first traversal. + + # We've now seen this vertex + set(FOUND_${UPPER_TARGET} TRUE) + + # Push the remaining edges for the current vertex onto the + # stack + string(REPLACE ";" " " NEW_ELEMENT + "${SOURCE};${OUT_EDGES}") + list(APPEND STACK ${NEW_ELEMENT}) + + # Setup the new source and outgoing edges + set(SOURCE ${TARGET}) + string(TOUPPER ${SOURCE} UPPER_SOURCE) + set(OUT_EDGES + ${${PREFIX}${UPPER_SOURCE}${SUFFIX}}) + endif(NOT FOUND_${UPPER_TARGET}) + + list(LENGTH OUT_EDGES OUT_DEGREE) + endwhile (OUT_DEGREE GREATER 0) + + # We have finished all of the outgoing edges for + # SOURCE; add it to the resulting list. + list(APPEND ${LIST} ${SOURCE}) + + # Check the length of the stack + list(LENGTH STACK STACK_LENGTH) + endwhile(STACK_LENGTH GREATER 0) + endif (NOT FOUND_${UPPER_VERTEX}) + endforeach(VERTEX) + + set(${LIST} ${${LIST}} PARENT_SCOPE) +endfunction(topological_sort) + +# Small little hack that tweaks a component name (as used for CPack) +# to make sure to avoid certain names that cause problems. Sets the +# variable named varname to the "sanitized" name. +# +# FIXME: This is a complete hack. We probably need to fix the CPack +# generators (NSIS in particular) to get rid of the need for this. +macro(fix_cpack_component_name varname name) + if (${name} STREQUAL "foreach") + set(${varname} "boost_foreach") + else() + set(${varname} ${name}) + endif() +endmacro() + + +# +# A big shout out to the cmake gurus @ compiz +# + +function (colormsg) + string (ASCII 27 _escape) + set(WHITE "29") + set(GRAY "30") + set(RED "31") + set(GREEN "32") + set(YELLOW "33") + set(BLUE "34") + set(MAG "35") + set(CYAN "36") + + foreach (color WHITE GRAY RED GREEN YELLOW BLUE MAG CYAN) + set(HI${color} "1\;${${color}}") + set(LO${color} "2\;${${color}}") + set(_${color}_ "4\;${${color}}") + set(_HI${color}_ "1\;4\;${${color}}") + set(_LO${color}_ "2\;4\;${${color}}") + endforeach() + + set(str "") + set(coloron FALSE) + foreach(arg ${ARGV}) + if (NOT ${${arg}} STREQUAL "") + if (CMAKE_COLOR_MAKEFILE) + set(str "${str}${_escape}[${${arg}}m") + set(coloron TRUE) + endif() + else() + set(str "${str}${arg}") + if (coloron) + set(str "${str}${_escape}[0m") + set(coloron FALSE) + endif() + set(str "${str} ") + endif() + endforeach() + message(STATUS ${str}) +endfunction() + +# colormsg("Colors:" +# WHITE "white" GRAY "gray" GREEN "green" +# RED "red" YELLOW "yellow" BLUE "blue" MAG "mag" CYAN "cyan" +# _WHITE_ "white" _GRAY_ "gray" _GREEN_ "green" +# _RED_ "red" _YELLOW_ "yellow" _BLUE_ "blue" _MAG_ "mag" _CYAN_ "cyan" +# _HIWHITE_ "white" _HIGRAY_ "gray" _HIGREEN_ "green" +# _HIRED_ "red" _HIYELLOW_ "yellow" _HIBLUE_ "blue" _HIMAG_ "mag" _HICYAN_ "cyan" +# HIWHITE "white" HIGRAY "gray" HIGREEN "green" +# HIRED "red" HIYELLOW "yellow" HIBLUE "blue" HIMAG "mag" HICYAN "cyan" +# "right?") + +# +# pretty-prints the value of a variable so that the +# equals signs align +# + +function(boost_report_value NAME) + string(LENGTH "${NAME}" varlen) + # LOG + #message(STATUS "boost_report_value: NAME=${NAME} (${varlen})") + #message(STATUS "boost_report_value: \${NAME}=${${NAME}}") + math(EXPR padding_len 40-${varlen}) + string(SUBSTRING " " + 0 ${padding_len} varpadding) + colormsg("${NAME}${varpadding} = ${${NAME}}") +endfunction() + +function(trace NAME) + if(BOOST_CMAKE_TRACE) + string(LENGTH "${NAME}" varlen) + math(EXPR padding_len 40-${varlen}) + string(SUBSTRING "........................................" + 0 ${padding_len} varpadding) + message("${NAME} ${varpadding} ${${NAME}}") + endif() +endfunction() + +# +# pretty-prints the value of a variable so that the +# equals signs align +# +function(boost_report_pretty PRETTYNAME VARNAME) + string(LENGTH "${PRETTYNAME}" varlen) + math(EXPR padding_len 30-${varlen}) + string(SUBSTRING " " + 0 ${padding_len} varpadding) + message(STATUS "${PRETTYNAME}${varpadding} = ${${VARNAME}}") +endfunction() + +# +# assert that ARG is actually a library target +# + +macro(dependency_check ARG) + trace(ARG) + if (NOT "${ARG}" STREQUAL "") + get_target_property(deptype ${ARG} TYPE) + if(NOT deptype MATCHES ".*_LIBRARY$") + set(DEPENDENCY_OKAY FALSE) + list(APPEND DEPENDENCY_FAILURES ${ARG}) + endif() + endif() +endmacro() + + + +# +# Pretty-print of given property of current directory. +# +macro(proj_report_directory_property PROPNAME) + get_directory_property(${PROPNAME} ${PROPNAME}) + boost_report_value(${PROPNAME}) +endmacro() + +# +# Scans the current directory and returns a list of subdirectories. +# Author: Robert Fleming +# Source: http://www.cmake.org/pipermail/cmake/2008-February/020114.html +# +# Third parameter is 1 if you want relative paths returned. +# Usage: list_subdirectories(the_list_is_returned_here /path/to/project TRUE) +# + +macro(list_subdirectories retval curdir return_relative) + file(GLOB sub-dir RELATIVE ${curdir} *) + set(list_of_dirs "") + foreach(dir ${sub-dir}) + if(IS_DIRECTORY ${curdir}/${dir}) + if (${return_relative}) + set(list_of_dirs ${list_of_dirs} ${dir}) + else() + set(list_of_dirs ${list_of_dirs} ${curdir}/${dir}) + endif() + endif() + endforeach() + set(${retval} ${list_of_dirs}) +endmacro() + +# +# Generates output name for given target depending on platform and version. +# For instance, on Windows, libraries get ABI version suffix soci_coreXY.{dll|lib}. +# + +function(proj_target_output_name TARGET_NAME OUTPUT_NAME) + if(NOT DEFINED TARGET_NAME) + message(SEND_ERROR "Error, the variable TARGET_NAME is not defined!") + endif() + + if(NOT DEFINED ${PROJECT_INTERN_NAME}_VERSION) + message(SEND_ERROR "Error, the variable ${${PROJECT_INTERN_NAME}_VERSION} is not defined!") + endif() + + # On Windows, ABI version is specified using binary file name suffix. + # On Unix, suffix is empty and SOVERSION is used instead. + if (WIN32) + string(LENGTH "${${PROJECT_INTERN_NAME}_ABI_VERSION}" abilen) + if(abilen GREATER 0) + set(SUFFIX "_${${PROJECT_INTERN_NAME}_ABI_VERSION}") + endif() + endif() + + set(${OUTPUT_NAME} ${TARGET_NAME}${SUFFIX} PARENT_SCOPE) +endfunction() + + +# +# conversion from lla name to lla convert name ( without lla extension) +# + +function(proj_lla_output_name LLA_INPUT_NAME LLA_OUTPUT_NAME ) + get_filename_component(filename ${LLA_INPUT_NAME} NAME_WE) + get_filename_component(pathname ${LLA_INPUT_NAME} PATH) + set(${LLA_OUTPUT_NAME} ${pathname}/${filename} PARENT_SCOPE) + set(${LLA_OUTPUT_NAME} ${pathname}/${filename} PARENT_SCOPE) +endfunction() + +function(proj_lla_target_name LLA_INPUT_NAME LLA_TARGET ) + get_filename_component(filename ${LLA_INPUT_NAME} NAME_WE) + set(${LLA_TARGET} ${filename} PARENT_SCOPE) +endfunction() + +# +# in place conversion of lla file to gsb +# + +function(proj_convert_grid_lla2gsb GRID_DIRECTORY) + set(NAD2BIN_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) + set(NAD2BIN_PATH ${NAD2BIN_DIR}/nad2bin${CMAKE_EXECUTABLE_SUFFIX}) + file(TO_NATIVE_PATH ${NAD2BIN_PATH} NAD2BIN_EXE) + file(GLOB LLA_FILES ${${GRID_DIRECTORY}}/*.lla) + foreach(LLA ${LLA_FILES} ) + proj_lla_output_name(${LLA} DEST_FILE) + file(TO_NATIVE_PATH ${DEST_FILE} DEST) + proj_lla_target_name(${LLA} LLA_TARGET) + if(NOT EXISTS ${DEST}) + add_custom_target( ${LLA_TARGET} ALL + COMMAND ${NAD2BIN_EXE} ${DEST} "<" ${LLA} + DEPENDS nad2bin ) + endif(NOT EXISTS ${DEST}) + endforeach(LLA) +endfunction() + +# +# add lla output list to an existing file list +# + +function(proj_append_lla_output_file LLA_INPUT_FILE FILE_LIST) + set(LIST_OUT ${${FILE_LIST}}) + foreach(LLA ${${LLA_INPUT_FILE}} ) + proj_lla_output_name(${LLA} DEST_FILE) + file(TO_NATIVE_PATH ${DEST_FILE} DEST) + set(LIST_OUT ${LIST_OUT} ${DEST_FILE} ) + endforeach(LLA ${LLA_INPUT_FILE}) + set(${FILE_LIST} ${LIST_OUT} PARENT_SCOPE) +endfunction() + diff --git a/deps/libproj/proj/cmake/Proj4Version.cmake b/deps/libproj/proj/cmake/Proj4Version.cmake new file mode 100644 index 00000000..fafaf24d --- /dev/null +++ b/deps/libproj/proj/cmake/Proj4Version.cmake @@ -0,0 +1,47 @@ +################################################################################ +# Proj4Version.cmake - part of CMake configuration of Proj4 library +################################################################################ +# Copyright (C) 2010 Mateusz Loskot +# +# Distributed under the Boost Software License, Version 1.0 +################################################################################ +# Macros in this module: +# +# proj_version - defines version information for PROJ library +# (best known as PROJ4 because MAJOR version is 4 since a very long time) +################################################################################ + +# Defines version information for PROJ library +# +# proj_version(MAJOR major_version MINOR minor_version PATCH patch_level) +# +# MAJOR.MINOR version is used to set SOVERSION +# + +macro(proj_version) + parse_arguments(THIS_VERSION "MAJOR;MINOR;PATCH;" + "" + ${ARGN}) + + # Set version components + set(${PROJECT_INTERN_NAME}_VERSION_MAJOR ${THIS_VERSION_MAJOR}) + set(${PROJECT_INTERN_NAME}_VERSION_MINOR ${THIS_VERSION_MINOR}) + set(${PROJECT_INTERN_NAME}_VERSION_PATCH ${THIS_VERSION_PATCH}) + + # Set VERSION string + set(${PROJECT_INTERN_NAME}_VERSION + "${${PROJECT_INTERN_NAME}_VERSION_MAJOR}.${${PROJECT_INTERN_NAME}_VERSION_MINOR}.${${PROJECT_INTERN_NAME}_VERSION_PATCH}") + + # Set ABI version string used to name binary output + # On Windows, ABI version is specified using binary file name suffix. + if(WIN32) + set(${PROJECT_INTERN_NAME}_ABI_VERSION + "${${PROJECT_INTERN_NAME}_VERSION_MAJOR}_${${PROJECT_INTERN_NAME}_VERSION_MINOR}") + endif() + + message(STATUS "") + boost_report_value(${PROJECT_INTERN_NAME}_VERSION) + if(WIN32) + boost_report_value(${PROJECT_INTERN_NAME}_ABI_VERSION) + endif(WIN32) +endmacro() diff --git a/deps/libproj/proj/cmake/policies.cmake b/deps/libproj/proj/cmake/policies.cmake new file mode 100644 index 00000000..c16fbc12 --- /dev/null +++ b/deps/libproj/proj/cmake/policies.cmake @@ -0,0 +1,5 @@ +if (CMAKE_MAJOR_VERSION GREATER 2) + cmake_policy(SET CMP0022 OLD) # interface link libraries + cmake_policy(SET CMP0042 NEW) # osx rpath + cmake_policy(SET CMP0011 NEW) # policy setting +endif() diff --git a/deps/libproj/proj/compile b/deps/libproj/proj/compile new file mode 100755 index 00000000..531136b0 --- /dev/null +++ b/deps/libproj/proj/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/deps/libproj/proj/nad/CMakeLists.txt b/deps/libproj/proj/nad/CMakeLists.txt new file mode 100644 index 00000000..a9b08cbd --- /dev/null +++ b/deps/libproj/proj/nad/CMakeLists.txt @@ -0,0 +1,57 @@ +# +# files containing dictionnary of useful projection +# + +set(PROJ_DICTIONARY epsg + esri + world + esri.extra + other.extra + IGNF + nad27 + GL27 + nad83 + nad.lst + proj_def.dat + CH ) + +# +# gridshift file +# + +file(GLOB GSB_FILES *.gsb) +set(GRIDSHIFT_FILES ${GSB_FILES}) +set(GRIDSHIFT_FILES ${GRIDSHIFT_FILES} + ) +option(CONVERT_DATA "convert some ascii file to binary file for use in proj4" OFF) +if(CONVERT_DATA AND nad2bin) + message(ERROR " you need to compile nad2bin exe in order to convert data file" ) +else(CONVERT_DATA AND nad2bin) + set(LLA_GRID_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + proj_convert_grid_lla2gsb(LLA_GRID_DIR) + file(GLOB LLA_FILES *.lla) + proj_append_lla_output_file(LLA_FILES GRIDSHIFT_FILES) +endif(CONVERT_DATA AND nad2bin) + + +# +#install +# +set(ALL_DATA_FILE ${PROJ_DICTIONARY} + ${GRIDSHIFT_FILES} + ${GEOID_FILES}) +install(FILES ${ALL_DATA_FILE} + DESTINATION ${DATADIR}) + +# +# test +# +set(CS2CS_BIN "cs2cs") +set(PROJ_BIN "proj") +proj_add_test_script_sh("test27" PROJ_BIN ) +proj_add_test_script_sh("test83" PROJ_BIN ) +proj_add_test_script_sh("testvarious" CS2CS_BIN ) +proj_add_test_script_sh("testdatumfile" CS2CS_BIN "connu") +proj_add_test_script_sh("testIGNF" CS2CS_BIN "ntf_r93.gsb") +proj_add_test_script_sh("testntv2" CS2CS_BIN "ntv2_0.gsb") + diff --git a/deps/libproj/proj/src/CMakeLists.txt b/deps/libproj/proj/src/CMakeLists.txt new file mode 100644 index 00000000..aba5b4c4 --- /dev/null +++ b/deps/libproj/proj/src/CMakeLists.txt @@ -0,0 +1,45 @@ +# first include proj library +# always need +include(lib_proj.cmake) + +# configure executable build +option(BUILD_CS2CS "Build cs2cs (coordinate systems to coordinate systems translation tool)" ON) +option(BUILD_PROJ "Build proj (cartographic projection tool : latlong <-> projected coordinates" ON) +option(BUILD_GEOD "Build geod (computation of geodesic lines)" ON) +option(BUILD_NAD2BIN "Build nad2bin (format conversion tool) " ON) + +if(NOT MSVC) + if (NOT APPLE) + # Use relative path so that package is relocatable + set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${LIBDIR}") + else () + set (CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${LIBDIR}") + # TO DO: cmake 2.8.12 introduces a way to make the install tree + # relocatable with OSX via + # (1) set(CMAKE_MACOSX_RPATH ON) and + # (2) setting the INSTALL_RPATH property on the executables to + # "@loader_path/../${LIBDIR}" + endif () +endif () + +if(BUILD_CS2CS) + include(bin_cs2cs.cmake) +endif(BUILD_CS2CS) + +if(BUILD_PROJ) + include(bin_proj.cmake) +endif(BUILD_PROJ) + +if(BUILD_GEOD) + include(bin_geod.cmake) +endif(BUILD_GEOD) + +if(BUILD_NAD2BIN) + include(bin_nad2bin.cmake) +endif(BUILD_NAD2BIN) + +if (MSVC OR CMAKE_CONFIGURATION_TYPES) + # Add _d suffix for your debug versions of the tools + set_target_properties (cs2cs binproj geod nad2bin PROPERTIES + DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) +endif () diff --git a/deps/libproj/proj/src/bin_cs2cs.cmake b/deps/libproj/proj/src/bin_cs2cs.cmake new file mode 100644 index 00000000..59e57adc --- /dev/null +++ b/deps/libproj/proj/src/bin_cs2cs.cmake @@ -0,0 +1,14 @@ +set(CS2CS_SRC cs2cs.c + gen_cheb.c + p_series.c) + +source_group("Source Files\\Bin" FILES ${CS2CS_SRC}) + +if(WIN32) + set(CS2CS_SRC ${CS2CS_SRC} emess.c) +endif(WIN32) + +add_executable(cs2cs ${CS2CS_SRC} ${CS2CS_INCLUDE}) +target_link_libraries(cs2cs ${PROJ_LIBRARIES}) +install(TARGETS cs2cs + RUNTIME DESTINATION ${BINDIR}) diff --git a/deps/libproj/proj/src/bin_geod.cmake b/deps/libproj/proj/src/bin_geod.cmake new file mode 100644 index 00000000..c6dff717 --- /dev/null +++ b/deps/libproj/proj/src/bin_geod.cmake @@ -0,0 +1,16 @@ +set(GEOD_SRC geod.c + geod_set.c geod_interface.c ) +set(GEOD_INCLUDE geod_interface.h) + +source_group("Source Files\\Bin" FILES ${GEOD_SRC} ${GEOD_INCLUDE}) + +if(WIN32) + set(GEOD_SRC ${GEOD_SRC} emess.c) +endif(WIN32) + +#Executable +add_executable(geod ${GEOD_SRC} ${GEOD_INCLUDE}) +target_link_libraries(geod ${PROJ_LIBRARIES}) +install(TARGETS geod + RUNTIME DESTINATION ${BINDIR}) + diff --git a/deps/libproj/proj/src/bin_nad2bin.cmake b/deps/libproj/proj/src/bin_nad2bin.cmake new file mode 100644 index 00000000..57cbfe21 --- /dev/null +++ b/deps/libproj/proj/src/bin_nad2bin.cmake @@ -0,0 +1,17 @@ +if(WIN32 AND BUILD_LIBPROJ_SHARED) + message(warning " nad2nad can't be build with a DLL proj4 library you need a static lib") +endif(WIN32 AND BUILD_LIBPROJ_SHARED) + + +set(NAD2BIN_SRC nad2bin.c) +source_group("Source Files\\Bin" FILES ${NAD2BIN_SRC}) +if(WIN32) + set(NAD2BIN_SRC ${NAD2BIN_SRC} emess.c) +endif(WIN32) + +#Executable +add_executable(nad2bin ${NAD2BIN_SRC}) +target_link_libraries(nad2bin ${PROJ_LIBRARIES}) +install(TARGETS nad2bin + RUNTIME DESTINATION ${BINDIR}) + diff --git a/deps/libproj/proj/src/bin_proj.cmake b/deps/libproj/proj/src/bin_proj.cmake new file mode 100644 index 00000000..f20d2f3f --- /dev/null +++ b/deps/libproj/proj/src/bin_proj.cmake @@ -0,0 +1,19 @@ +set(PROJ_SRC proj.c + gen_cheb.c + p_series.c) + +source_group("Source Files\\Bin" FILES ${PROJ_SRC}) + +if(WIN32) + set(PROJ_SRC ${PROJ_SRC} emess.c) +endif(WIN32) + +#Executable +add_executable(binproj ${PROJ_SRC}) +set_target_properties(binproj + PROPERTIES + OUTPUT_NAME proj) +target_link_libraries(binproj ${PROJ_LIBRARIES}) +install(TARGETS binproj + RUNTIME DESTINATION ${BINDIR}) + diff --git a/deps/libproj/proj/src/lib_proj.cmake b/deps/libproj/proj/src/lib_proj.cmake new file mode 100644 index 00000000..8a6349d8 --- /dev/null +++ b/deps/libproj/proj/src/lib_proj.cmake @@ -0,0 +1,330 @@ +############################################## +### SWITCH BETWEEN STATIC OR SHARED LIBRARY### +############################################## +colormsg(_HIBLUE_ "Configuring proj library:") +message(STATUS "") + +# default config, shared on unix and static on Windows +if(UNIX) + set(BUILD_LIBPROJ_SHARED_DEFAULT ON ) +endif(UNIX) +if( WIN32) + set(BUILD_LIBPROJ_SHARED_DEFAULT OFF) +endif(WIN32) +option(BUILD_LIBPROJ_SHARED "Build libproj library shared." ${BUILD_LIBPROJ_SHARED_DEFAULT}) +if(BUILD_LIBPROJ_SHARED) + set(PROJ_LIBRARY_TYPE SHARED) +else(BUILD_LIBPROJ_SHARED) + set(PROJ_LIBRARY_TYPE STATIC) +endif(BUILD_LIBPROJ_SHARED) + + +option(USE_THREAD "Build libproj with thread/mutex support " ON) +if(NOT USE_THREAD) + add_definitions( -DMUTEX_stub) +endif(NOT USE_THREAD) +find_package(Threads QUIET) +if(USE_THREAD AND Threads_FOUND AND CMAKE_USE_WIN32_THREADS_INIT ) + add_definitions( -DMUTEX_win32) +endif(USE_THREAD AND Threads_FOUND AND CMAKE_USE_WIN32_THREADS_INIT ) +if(USE_THREAD AND Threads_FOUND AND CMAKE_USE_PTHREADS_INIT ) + add_definitions( -DMUTEX_pthread) +endif(USE_THREAD AND Threads_FOUND AND CMAKE_USE_PTHREADS_INIT ) +if(USE_THREAD AND NOT Threads_FOUND) + message(FATAL_ERROR "No thread library found and thread/mutex support is required by USE_THREAD option") +endif(USE_THREAD AND NOT Threads_FOUND) + + +############################################## +### librairie source list and include_list ### +############################################## +SET(SRC_LIBPROJ_PJ + nad_init.c + PJ_aea.c + PJ_aeqd.c + PJ_airy.c + PJ_aitoff.c + PJ_august.c + PJ_bacon.c + PJ_bipc.c + PJ_boggs.c + PJ_bonne.c + PJ_calcofi.c + PJ_cass.c + PJ_cc.c + PJ_cea.c + PJ_chamb.c + PJ_collg.c + PJ_crast.c + PJ_denoy.c + PJ_eck1.c + PJ_eck2.c + PJ_eck3.c + PJ_eck4.c + PJ_eck5.c + PJ_eqc.c + PJ_eqdc.c + PJ_fahey.c + PJ_fouc_s.c + PJ_gall.c + PJ_geos.c + PJ_gins8.c + PJ_gnom.c + PJ_gn_sinu.c + PJ_goode.c + PJ_gstmerc.c + PJ_hammer.c + PJ_hatano.c + PJ_igh.c + PJ_isea.c + PJ_imw_p.c + PJ_krovak.c + PJ_labrd.c + PJ_laea.c + PJ_lagrng.c + PJ_larr.c + PJ_lask.c + PJ_lcca.c + PJ_lcc.c + PJ_loxim.c + PJ_lsat.c + PJ_mbt_fps.c + PJ_mbtfpp.c + PJ_mbtfpq.c + PJ_merc.c + PJ_mill.c + PJ_mod_ster.c + PJ_moll.c + PJ_natearth.c + PJ_nell.c + PJ_nell_h.c + PJ_nocol.c + PJ_nsper.c + PJ_nzmg.c + PJ_ob_tran.c + PJ_ocea.c + PJ_oea.c + PJ_omerc.c + PJ_ortho.c + PJ_poly.c + PJ_putp2.c + PJ_putp3.c + PJ_putp4p.c + PJ_putp5.c + PJ_putp6.c + PJ_qsc.c + PJ_robin.c + PJ_rpoly.c + PJ_sconics.c + PJ_somerc.c + PJ_sterea.c + PJ_stere.c + PJ_sts.c + PJ_tcc.c + PJ_tcea.c + PJ_tmerc.c + PJ_tpeqd.c + PJ_urm5.c + PJ_urmfps.c + PJ_vandg.c + PJ_vandg2.c + PJ_vandg4.c + PJ_wag2.c + PJ_wag3.c + PJ_wag7.c + PJ_wink1.c + PJ_wink2.c + proj_etmerc.c +) + +SET(SRC_LIBPROJ_CORE + aasincos.c + adjlon.c + bch2bps.c + bchgen.c + biveval.c + dmstor.c + emess.c + emess.h + geocent.c + geocent.h + geodesic.c + mk_cheby.c + nad_cvt.c + nad_init.c + nad_intr.c + pj_apply_gridshift.c + pj_apply_vgridshift.c + pj_auth.c + pj_ctx.c + pj_fileapi.c + pj_datum_set.c + pj_datums.c + pj_deriv.c + pj_ell_set.c + pj_ellps.c + pj_errno.c + pj_factors.c + pj_fwd.c + pj_gauss.c + pj_gc_reader.c + pj_geocent.c + pj_gridcatalog.c + pj_gridinfo.c + pj_gridlist.c + PJ_healpix.c + pj_init.c + pj_initcache.c + pj_inv.c + pj_latlong.c + pj_list.c + pj_list.h + pj_log.c + pj_malloc.c + pj_mlfn.c + pj_msfn.c + pj_mutex.c + pj_open_lib.c + pj_param.c + pj_phi2.c + pj_pr_list.c + pj_qsfn.c + pj_release.c + pj_strerrno.c + pj_transform.c + pj_tsfn.c + pj_units.c + pj_utils.c + pj_zpoly1.c + proj_mdist.c + proj_rouss.c + rtodms.c + vector1.c + pj_strtod.c + ${CMAKE_CURRENT_BINARY_DIR}/proj_config.h + ) + +set(HEADERS_LIBPROJ + projects.h + proj_api.h + geodesic.h +) + +# Group source files for IDE source explorers (e.g. Visual Studio) +source_group("Header Files" FILES ${HEADERS_LIBPROJ}) +source_group("Source Files\\Core" FILES ${SRC_LIBPROJ_CORE}) +source_group("Source Files\\PJ" FILES ${SRC_LIBPROJ_PJ}) +include_directories( ${CMAKE_CURRENT_BINARY_DIR}) +source_group("CMake Files" FILES CMakeLists.txt) + + +# Embed PROJ_LIB data files location +add_definitions(-DPROJ_LIB="${CMAKE_INSTALL_PREFIX}/${DATADIR}") + +################################################# +## java wrapping with jni +################################################# +option(JNI_SUPPORT "Build support of java/jni wrapping for proj library" OFF) +find_package(JNI QUIET) +if(JNI_SUPPORT AND NOT JNI_FOUND) + message(FATAL_ERROR "jni support is required but jni is not found") +endif(JNI_SUPPORT AND NOT JNI_FOUND) +boost_report_value(JNI_SUPPORT) +if(JNI_SUPPORT) + set(SRC_LIBPROJ_CORE ${SRC_LIBPROJ_CORE} + jniproj.c ) + set(HEADERS_LIBPROJ ${HEADERS_LIBPROJ} + org_proj4_PJ.h + org_proj4_Projections.h) + source_group("Source Files\\JNI" FILES ${SRC_LIBPROJ_JNI}) + add_definitions(-DJNI_ENABLED) + include_directories( ${JNI_INCLUDE_DIRS}) + boost_report_value(JNI_INCLUDE_DIRS) +endif(JNI_SUPPORT) + +################################################# +## targets: libproj and proj_config.h +################################################# +set(ALL_LIBPROJ_SOURCES ${SRC_LIBPROJ_PJ} ${SRC_LIBPROJ_CORE}) +set(ALL_LIBPROJ_HEADERS ${HEADERS_LIBPROJ} ) +if(WIN32 AND BUILD_LIBPROJ_SHARED) + set(ALL_LIBPROJ_SOURCES ${ALL_LIBPROJ_SOURCES} proj.def ) +endif(WIN32 AND BUILD_LIBPROJ_SHARED) + +# Core targets configuration +string(TOLOWER "${PROJECT_INTERN_NAME}" PROJECTNAMEL) +set(PROJ_CORE_TARGET ${PROJECTNAMEL}) +proj_target_output_name(${PROJ_CORE_TARGET} PROJ_CORE_TARGET_OUTPUT_NAME) + +add_library( ${PROJ_CORE_TARGET} + ${PROJ_LIBRARY_TYPE} + ${ALL_LIBPROJ_SOURCES} + ${ALL_LIBPROJ_HEADERS} + ${PROJ_RESOURCES} ) + + +if(WIN32) + set_target_properties(${PROJ_CORE_TARGET} + PROPERTIES + VERSION "${${PROJECT_INTERN_NAME}_BUILD_VERSION}" + OUTPUT_NAME "${PROJ_CORE_TARGET_OUTPUT_NAME}" + CLEAN_DIRECT_OUTPUT 1) +elseif(BUILD_FRAMEWORKS_AND_BUNDLE) + set_target_properties(${PROJ_CORE_TARGET} + PROPERTIES + VERSION "${${PROJECT_INTERN_NAME}_BUILD_VERSION}" + INSTALL_NAME_DIR ${PROJ_INSTALL_NAME_DIR} + CLEAN_DIRECT_OUTPUT 1) +else() + set_target_properties(${PROJ_CORE_TARGET} + PROPERTIES + VERSION "${${PROJECT_INTERN_NAME}_BUILD_VERSION}" + SOVERSION "${${PROJECT_INTERN_NAME}_API_VERSION}" + CLEAN_DIRECT_OUTPUT 1) +endif() + +set_target_properties(${PROJ_CORE_TARGET} + PROPERTIES + LINKER_LANGUAGE C) + +############################################## +# Link properties +############################################## +set(PROJ_LIBRARIES ${PROJ_CORE_TARGET} ) +if(UNIX AND BUILD_LIBPROJ_SHARED) + find_library(M_LIB m) + if(M_LIB) + TARGET_LINK_LIBRARIES(${PROJ_CORE_TARGET} -lm) + endif() +endif(UNIX AND BUILD_LIBPROJ_SHARED) +if(USE_THREAD AND Threads_FOUND AND CMAKE_USE_PTHREADS_INIT AND BUILD_LIBPROJ_SHARED) + TARGET_LINK_LIBRARIES(${PROJ_CORE_TARGET} ${CMAKE_THREAD_LIBS_INIT}) +endif(USE_THREAD AND Threads_FOUND AND CMAKE_USE_PTHREADS_INIT AND BUILD_LIBPROJ_SHARED) + + +############################################## +# install +############################################## +install(TARGETS ${PROJ_CORE_TARGET} + EXPORT targets + RUNTIME DESTINATION ${BINDIR} + LIBRARY DESTINATION ${LIBDIR} + ARCHIVE DESTINATION ${LIBDIR} + FRAMEWORK DESTINATION ${FRAMEWORKDIR}) + +if(NOT BUILD_FRAMEWORKS_AND_BUNDLE) + install(FILES ${ALL_LIBPROJ_HEADERS} + DESTINATION ${INCLUDEDIR}) +endif(NOT BUILD_FRAMEWORKS_AND_BUNDLE) + +############################################## +# Core configuration summary +############################################## +boost_report_value(PROJ_CORE_TARGET) +boost_report_value(PROJ_CORE_TARGET_OUTPUT_NAME) +boost_report_value(PROJ_LIBRARY_TYPE) +boost_report_value(PROJ_LIBRARIES) + + + + diff --git a/package.json b/package.json index 66dafa11..08ba58db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gdal", - "version": "0.9.0", + "version": "0.9.1", "description": "Bindings to GDAL (Geospatial Data Abstraction Library)", "license": "Apache-2.0", "url": "http://github.com/naturalatlas/node-gdal", diff --git a/yuidoc.json b/yuidoc.json index 729716c5..c6cfb6fd 100644 --- a/yuidoc.json +++ b/yuidoc.json @@ -1,7 +1,7 @@ { "name": "node-gdal", "description": "Node.js bindings for GDAL (Geospatial Data Abstraction Library)", - "version": "0.9.0", + "version": "0.9.1", "url": "https://github.com/naturalatlas/node-gdal", "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/GDALLogoColor.svg/200px-GDALLogoColor.svg.png", "options": {