From d2a2b3e4e99b3f661fc6167db332b3b2d9e50591 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 7 Nov 2019 13:44:35 +0100 Subject: [PATCH 1/2] Build: require SQLite 3.11 (refs #1718) PROJ can build and run against older version (3.7 for example), but it has been found that performance is horrible. With 3.11 (Ubuntu 16.04), it is fine, so sets this as the minimum version. --- CMakeLists.txt | 6 ++++++ cmake/FindSqlite3.cmake | 13 +++++++++++++ configure.ac | 6 +++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 63f516a3d2..2761e542e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,6 +127,12 @@ if(NOT SQLITE3_FOUND) message(SEND_ERROR "sqlite3 dependency not found!") endif() +# Would build and run with older versons, but with horrible performance +# See https://github.com/OSGeo/PROJ/issues/1718 +IF("${SQLITE3_VERSION}" VERSION_LESS "3.11") + message(SEND_ERROR "sqlite3 >= 3.11 required!") +ENDIF() + ################################################################################ # threading configuration ################################################################################ diff --git a/cmake/FindSqlite3.cmake b/cmake/FindSqlite3.cmake index 4f1d909fcc..06cba0fbd7 100644 --- a/cmake/FindSqlite3.cmake +++ b/cmake/FindSqlite3.cmake @@ -10,6 +10,7 @@ # and following variables are set: # SQLITE3_INCLUDE_DIR # SQLITE3_LIBRARY +# SQLITE3_VERSION # find_path and find_library normally search standard locations @@ -53,9 +54,21 @@ if(SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY) set(SQLITE3_FOUND TRUE) endif() +# Extract version information from the header file +if(SQLITE3_INCLUDE_DIR) + file(STRINGS ${SQLITE3_INCLUDE_DIR}/sqlite3.h _ver_line + REGEX "^#define SQLITE_VERSION *\"[0-9]+\\.[0-9]+\\.[0-9]+\"" + LIMIT_COUNT 1) + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" + SQLITE3_VERSION "${_ver_line}") + unset(_ver_line) +endif() + + if(SQLITE3_FOUND) if(NOT SQLITE3_FIND_QUIETLY) message(STATUS "Found Sqlite3: ${SQLITE3_LIBRARY}") + message(STATUS "Sqlite3 version: ${SQLITE3_VERSION}") endif() else() diff --git a/configure.ac b/configure.ac index 7a6814b4b4..e9274621fa 100644 --- a/configure.ac +++ b/configure.ac @@ -280,7 +280,11 @@ dnl Check for sqlite3 library and binary dnl --------------------------------------------------------------------------- if test "x$SQLITE3_CFLAGS$SQLITE3_LIBS" = "x" ; then - PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= 3.7]) + + dnl Would build and run with older versons, but with horrible performance + dnl See https://github.com/OSGeo/PROJ/issues/1718 + + PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= 3.11]) fi AC_SUBST(SQLITE3_CFLAGS,$SQLITE3_CFLAGS) AC_SUBST(SQLITE3_LIBS,$SQLITE3_LIBS) From 589f2104784ff88670f43fab899ece6d503ac027 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 7 Nov 2019 18:44:47 +0100 Subject: [PATCH 2/2] Doc: document build requirements --- docs/source/install.rst | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/source/install.rst b/docs/source/install.rst index d3c2fab60a..5f1013cda9 100644 --- a/docs/source/install.rst +++ b/docs/source/install.rst @@ -119,15 +119,20 @@ Compilation and installation from source code The classical way of installing PROJ is via the source code distribution. The most recent version is available from the :ref:`download page`. -PROJ requires C and C++11 compilers. It also requires SQLite3 (headers, -library and executable). - You will need that and at least the standard *proj-datumgrid* package for a successful installation. The following guides show how to compile and install the software using the Autotools and CMake build systems. +Build requirements +-------------------------------------------------------------------------------- + +- C99 compiler +- C++11 compiler +- SQLite3 >= 3.11 (headers, library and executable) +- GNU make for autotools build or CMake >= 3.5 + Autotools --------------------------------------------------------------------------------