|
| 1 | +# |
| 2 | +# Copyright 2016 Kai Pastor |
| 3 | +# |
| 4 | +# This file is part of OpenOrienteering. |
| 5 | +# |
| 6 | +# OpenOrienteering is free software: you can redistribute it and/or modify |
| 7 | +# it under the terms of the GNU General Public License as published by |
| 8 | +# the Free Software Foundation, either version 3 of the License, or |
| 9 | +# (at your option) any later version. |
| 10 | +# |
| 11 | +# OpenOrienteering is distributed in the hope that it will be useful, |
| 12 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 14 | +# GNU General Public License for more details. |
| 15 | +# |
| 16 | +# You should have received a copy of the GNU General Public License |
| 17 | +# along with OpenOrienteering. If not, see <http://www.gnu.org/licenses/>. |
| 18 | + |
| 19 | + |
| 20 | +project(GDAL) |
| 21 | + |
| 22 | +cmake_minimum_required(VERSION 2.8.3) |
| 23 | + |
| 24 | +include(ExternalProject) |
| 25 | + |
| 26 | +# Configuration options |
| 27 | + |
| 28 | +set(GDAL_VERSION_DEFAULT 2.0.1+dfsg) |
| 29 | +set(GDAL_VERSION ${GDAL_VERSION_DEFAULT} CACHE STRING |
| 30 | + "Version number of the GDAL library, recommended value: ${GDAL_VERSION_DEFAULT}") |
| 31 | +mark_as_advanced(GDAL_VERSION) |
| 32 | + |
| 33 | +message(STATUS "Configuring GDAL library ${GDAL_VERSION}") |
| 34 | + |
| 35 | +string(REGEX MATCH "^[0-9]\\.[0-9]+\\.[0-9]+" GDAL_MAJOR_MINOR_REVISION ${GDAL_VERSION}) |
| 36 | +if (NOT "${GDAL_VERSION}" MATCHES "^${GDAL_MAJOR_MINOR_REVISION}") |
| 37 | + message(WARNING |
| 38 | + "The GDAL library version is different from the current recommended version " |
| 39 | + "(${GDAL_VERSION} vs. ${GDAL_VERSION_DEFAULT}).") |
| 40 | +endif() |
| 41 | + |
| 42 | +set(GDAL_MD5SUMS |
| 43 | + 2.0.1+dfsg:18e207a12f920e2a40405891eb6168ec:https://github.com/OpenOrienteering/sources/releases/download/3rd-party/gdal_2.0.1.dfsg.orig.tar.gz |
| 44 | +) |
| 45 | +string(REPLACE "+" "[+]" GDAL_VERSION_REGEX "${GDAL_VERSION}") |
| 46 | +foreach(line ${GDAL_MD5SUMS}) |
| 47 | + if(${line} MATCHES "^${GDAL_VERSION_REGEX}:") |
| 48 | + string(REPLACE "${GDAL_VERSION}:" "" GDAL_MD5 ${line}) |
| 49 | + break() |
| 50 | + endif() |
| 51 | +endforeach() |
| 52 | +if(NOT GDAL_MD5) |
| 53 | + message(FATAL_ERROR |
| 54 | + "Unknown MD5 sum for GDAL library ${GDAL_VERSION}. " |
| 55 | + "Edit ${GDALECT_SOURCE_DIR}/CMakeLists.txt, " |
| 56 | + "or specify the correct GDAL_MD5 value at the command line.") |
| 57 | +endif() |
| 58 | +if(GDAL_MD5 MATCHES ":") |
| 59 | + message(WARNING "Not using an official release of GDAL.") |
| 60 | + string(REGEX REPLACE "^[0-9a-fA-F]*:" "" GDAL_URL "${GDAL_MD5}") |
| 61 | + string(REGEX REPLACE ":.*" "" GDAL_MD5 "${GDAL_MD5}") |
| 62 | +elseif(GDAL_VERSION MATCHES "-openorienteering-") |
| 63 | + set(GDAL_URL "https://github.com/OpenOrienteering/sources/releases/download/3rd-party/gdal-${GDAL_VERSION}.tar.gz") |
| 64 | +else() |
| 65 | + set(GDAL_URL "http://download.osgeo.org/gdal/${GDAL_VERSION}/gdal-${GDAL_VERSION}.tar.gz") |
| 66 | +endif() |
| 67 | + |
| 68 | +set(GDAL_LICENSE_FILE "${PROJECT_SOURCE_DIR}/LICENSE.TXT") |
| 69 | +if(EXISTS "${GDAL_LICENSE_FILE}.${GDAL_VERSION}") |
| 70 | + set(GDAL_LICENSE_FILE "${GDAL_LICENSE_FILE}.${GDAL_VERSION}") |
| 71 | +endif() |
| 72 | + |
| 73 | + |
| 74 | +# External project definition |
| 75 | + |
| 76 | +set(GDAL_EXTRA_FLAGS "-Wno-unused-parameter -Wno-ignored-qualifiers -Wno-unused-private-field -Wno-deprecated-register") |
| 77 | +string(REGEX REPLACE "-Wpedantic|-Wall" "" GDAL_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE} ${GDAL_EXTRA_FLAGS}") |
| 78 | +string(REGEX REPLACE "-Wpedantic|-Wall" "" GDAL_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} ${GDAL_EXTRA_FLAGS}") |
| 79 | +if(CMAKE_CROSSCOMPILING AND NOT GNU_SYSTEM_NAME AND MINGW) |
| 80 | + set(_env_lang $ENV{LC_ALL}) |
| 81 | + set(ENV{LC_ALL} C) |
| 82 | + execute_process( |
| 83 | + COMMAND ${CMAKE_C_COMPILER} -v |
| 84 | + ERROR_VARIABLE GNU_SYSTEM_NAME |
| 85 | + ) |
| 86 | + set(ENV{LC_ALL} ${_env_lang}) |
| 87 | + string(REGEX REPLACE ".*Target: ?([^\n]*).*" \\1 GNU_SYSTEM_NAME ${GNU_SYSTEM_NAME}) |
| 88 | +endif() |
| 89 | +if(CMAKE_CROSSCOMPILING AND GNU_SYSTEM_NAME) |
| 90 | + execute_process( |
| 91 | + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/patches/config.guess" |
| 92 | + OUTPUT_VARIABLE build |
| 93 | + OUTPUT_STRIP_TRAILING_WHITESPACE |
| 94 | + ) |
| 95 | + set(GDAL_CONFIG_EXTRA "--host=${GNU_SYSTEM_NAME}" "--build=${build}" --without-expat) |
| 96 | + get_directory_property(_include_dirs INCLUDE_DIRECTORIES) |
| 97 | + if(_include_dirs) |
| 98 | + unset(_cpp_flags) |
| 99 | + foreach(_dir ${_include_dirs}) |
| 100 | + set(_cpp_flags "${_cpp_flags} -I${_dir}") |
| 101 | + endforeach() |
| 102 | + list(APPEND GDAL_CONFIG_EXTRA "CPPFLAGS=${_cpp_flags}") |
| 103 | + endif() |
| 104 | + if(GNU_SYSTEM_NAME STREQUAL "arm-linux-androideabi") |
| 105 | + set(STANDALONE_TOOLCHAIN arm-linux-androideabi-4.9) |
| 106 | + set(CMAKE_C_COMPILER <BINARY_DIR>/toolchain/${STANDALONE_TOOLCHAIN}/bin/arm-linux-androideabi-gcc) |
| 107 | + set(CMAKE_CXX_COMPILER <BINARY_DIR>/toolchain/${STANDALONE_TOOLCHAIN}/bin/arm-linux-androideabi-g++) |
| 108 | + elseif(GNU_SYSTEM_NAME STREQUAL "i686-linux-android") |
| 109 | + set(STANDALONE_TOOLCHAIN arm-linux-androideabi-gcc-4.9) |
| 110 | + set(CMAKE_C_COMPILER <BINARY_DIR>/toolchain/${STANDALONE_TOOLCHAIN}/bin/i686-linux-android-gcc) |
| 111 | + set(CMAKE_CXX_COMPILER <BINARY_DIR>/toolchain/${STANDALONE_TOOLCHAIN}/bin/i686-linux-android-g++) |
| 112 | + elseif(ANDROID) |
| 113 | + message(WARNING "Unsupported Android architecture '${GNU_SYSTEM_NAME}'") |
| 114 | + endif() |
| 115 | +elseif(APPLE) |
| 116 | + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") |
| 117 | + # Didn't manage to pass the deployment target to all libtool link steps |
| 118 | + #string(REGEX REPLACE "(^| )(--?[^W])" "\\1-Wl,\\2" CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}) |
| 119 | + set(GDAL_CONFIG_EXTRA --without-libtool) |
| 120 | +else() |
| 121 | + unset(GDAL_CONFIG_EXTRA) |
| 122 | +endif() |
| 123 | + |
| 124 | +include(ExternalProject) |
| 125 | +ExternalProject_Add( |
| 126 | + GDAL |
| 127 | + DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/download |
| 128 | + URL ${GDAL_URL} |
| 129 | + URL_MD5 ${GDAL_MD5} |
| 130 | + # Check that the license hasn't changed. |
| 131 | + UPDATE_COMMAND |
| 132 | + ${CMAKE_COMMAND} -E compare_files <SOURCE_DIR>/LICENSE.TXT "${GDAL_LICENSE_FILE}" |
| 133 | + PATCH_COMMAND |
| 134 | + cp ${PROJECT_SOURCE_DIR}/patches/config.sub ${PROJECT_SOURCE_DIR}/patches/config.guess <SOURCE_DIR>/ |
| 135 | + COMMAND |
| 136 | + find ${PROJECT_SOURCE_DIR}/patches -name gdal-${GDAL_MAJOR_MINOR_REVISION}*.patch -exec patch -p0 -N -i {} + |
| 137 | + CONFIGURE_COMMAND |
| 138 | + "<SOURCE_DIR>/configure" |
| 139 | + "--prefix=<INSTALL_DIR>" |
| 140 | + --disable-static |
| 141 | + --enable-shared |
| 142 | + --with-ogr |
| 143 | + --with-hide-internal-symbols |
| 144 | + --with-rename-internal-libtiff-symbols |
| 145 | + --without-jpeg12 # possible violation of ODR in GDAL < 2.1 |
| 146 | + --with-threads=no |
| 147 | + --without-pcraster |
| 148 | + --without-grib |
| 149 | + --without-perl |
| 150 | + --without-php |
| 151 | + --without-python |
| 152 | + --without-java |
| 153 | + ${GDAL_CONFIG_EXTRA} |
| 154 | + "CC=${CMAKE_C_COMPILER}" |
| 155 | + "CFLAGS=${GDAL_CFLAGS}" |
| 156 | + "CXX=${CMAKE_CXX_COMPILER}" |
| 157 | + "CXXFLAGS=${GDAL_CXXFLAGS}" |
| 158 | + "LDFLAGS=${CMAKE_EXE_LINKER_FLAGS}" |
| 159 | + BUILD_COMMAND |
| 160 | + "\$(MAKE)" |
| 161 | + INSTALL_COMMAND |
| 162 | + "\$(MAKE)" -j1 install |
| 163 | + BUILD_IN_SOURCE 1 |
| 164 | +) |
| 165 | + |
| 166 | +if(ANDROID AND STANDALONE_TOOLCHAIN) |
| 167 | + ExternalProject_Add_Step(GDAL toolchain |
| 168 | + COMMENT "Creating standalone toolchain" |
| 169 | + DEPENDEES update |
| 170 | + DEPENDERS configure |
| 171 | + COMMAND |
| 172 | + bash $(ANDROID_NDK_ROOT)/build/tools/make-standalone-toolchain.sh |
| 173 | + --install-dir=<BINARY_DIR>/toolchain/${STANDALONE_TOOLCHAIN} |
| 174 | + --platform=$(ANDROID_NDK_PLATFORM) |
| 175 | + --toolchain=${STANDALONE_TOOLCHAIN} |
| 176 | + ) |
| 177 | +endif() |
| 178 | + |
| 179 | + |
| 180 | +# Exported configuration |
| 181 | + |
| 182 | +# The following will not succeed during the initial configuration |
| 183 | +# but on repeated configuration after an successful build. |
| 184 | + |
| 185 | +ExternalProject_Get_Property(GDAL BINARY_DIR) |
| 186 | +ExternalProject_Get_Property(GDAL INSTALL_DIR) |
| 187 | + |
| 188 | +find_path(GDAL_INCLUDE_DIR NAMES gdal.h PATHS |
| 189 | + "${INSTALL_DIR}/include" |
| 190 | + NO_DEFAULT_PATH |
| 191 | + NO_CMAKE_FIND_ROOT_PATH |
| 192 | +) |
| 193 | +mark_as_advanced(GDAL_INCLUDE_DIR) |
| 194 | + |
| 195 | +find_library(GDAL_LIBRARY NAMES gdal PATHS |
| 196 | + "${INSTALL_DIR}/lib" |
| 197 | + NO_DEFAULT_PATH |
| 198 | + NO_CMAKE_FIND_ROOT_PATH |
| 199 | +) |
| 200 | +mark_as_advanced(GDAL_LIBRARY) |
| 201 | + |
| 202 | +if(GDAL_INCLUDE_DIR AND GDAL_LIBRARY) |
| 203 | + set(GDAL_BINARY_DIR "${INSTALL_DIR}/bin" PARENT_SCOPE) |
| 204 | + mark_as_advanced(GDAL_BINARY_DIR) |
| 205 | + set(GDAL_FOUND TRUE PARENT_SCOPE) |
| 206 | +endif() |
| 207 | + |
| 208 | +# Don't let Xcode re-root the install |
| 209 | +set_target_properties(GDAL PROPERTIES XCODE_ATTRIBUTE_INSTALL_ROOT "") |
0 commit comments