Changeset: e8912be442b1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e8912be442b1
Added Files:
        cmake/FindGeos.cmake
Modified Files:
        CMakeLists.txt
        clients/odbc/winsetup/CMakeLists.txt
Branch: cmake-fun
Log Message:

Use own script to find geos library.


diffs (114 lines):

diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1597,51 +1597,31 @@ if(NOT ${WITH_SAMTOOLS} STREQUAL "NO")
        cmake_pop_check_state()
 endif()
 
-set(GEOS_INCLUDE_DIR "")
-set(GEOS_LIBRARIES "")
-set(WITH_GEOS "AUTO" CACHE PATH "geos library is installed in DIR") # Check 
with HAVE_GEOS_LIB
+set(WITH_GEOS "AUTO" CACHE STRING "Include geos library support 
(default=AUTO)") # Check with HAVE_GEOS_LIB
 if(NOT ${WITH_GEOS} STREQUAL "NO")
-       set(GEOS_VERSION_REQUIRED_MIN "3.4.0")
-
-       if(${WITH_GEOS} MATCHES "^YES|AUTO$")
-               set(GEOS_EXECUTABLE "geos-config")
-       else()
-               set(GEOS_EXECUTABLE "${WITH_GEOS}/bin/geos-config")
-       endif()
-
-       exec_program("${GEOS_EXECUTABLE}" ARGS "--version" OUTPUT_VARIABLE 
GEOS_VERSION RETURN_VALUE GEOS_RC)
-       if(GEOS_RC EQUAL 0)
-               if(GEOS_VERSION VERSION_GREATER_EQUAL 
${GEOS_VERSION_REQUIRED_MIN})
+       include(FindGeos)
 
-                       exec_program("${GEOS_EXECUTABLE}" ARGS "--cflags" 
OUTPUT_VARIABLE GEOS_INCLUDE_DIR RETURN_VALUE GEOS_INCS_RC)
-                       exec_program("${GEOS_EXECUTABLE}" ARGS "--clibs" 
OUTPUT_VARIABLE GEOS_LIBRARIES RETURN_VALUE GEOS_LIBS_RC)
-                       if(NOT GEOS_LIBS_RC EQUAL 0)
-                               exec_program("${GEOS_EXECUTABLE}" ARGS "--libs" 
OUTPUT_VARIABLE GEOS_LIBRARIES RETURN_VALUE GEOS_LIBS_RC)
-                               if(GEOS_LIBS_RC EQUAL 0)
-                                       string(REPLACE "-lgeos" "-lgeos_c" 
GEOS_LIBRARIES ${GEOS_LIBRARIES})
-                               endif()
+       if(GEOS_FOUND)
+               set(GEOS_MINIMUM_VERSION "3.4.0")
+               if(GEOS_VERSION VERSION_LESS "${GEOS_MINIMUM_VERSION}")
+                       if(${WITH_GEOS} STREQUAL "YES")
+                               message(FATAL_ERROR "geos library found but 
version is too old: ${GEOS_VERSION} < ${GEOS_MINIMUM_VERSION}")
+                       else()
+                               message(STATUS "geos library found but version 
is too old: ${GEOS_VERSION} < ${GEOS_MINIMUM_VERSION}")
                        endif()
-                       if(GEOS_INCS_RC EQUAL 0 AND GEOS_LIBS_RC EQUAL 0)
-                               MT_clibsToCmake(${GEOS_INCLUDE_DIR} 
GEOS_INCLUDE_DIR)
-                               set(HAVE_GEOS_LIB YES)
-                       elseif(${WITH_GEOS} STREQUAL "YES")
-                               message(FATAL_ERROR "could not determine geos 
cflags and clibs")
-                       else()
-                               message(WARNING "could not determine geos 
cflags and clibs")
-                       endif()
-               elseif(${WITH_GEOS} STREQUAL "YES")
-                       message(FATAL_ERROR "geos version is too old 
${GEOS_VERSION} < ${GEOS_VERSION_REQUIRED_MIN}")
                else()
-                       message(WARNING "geos version is too old 
${GEOS_VERSION} < ${GEOS_VERSION_REQUIRED_MIN}")
+                       message(STATUS "geos library found")
+                       set(HAVE_GEOS_LIB ON)
                endif()
        elseif(${WITH_GEOS} STREQUAL "YES")
-               message(FATAL_ERROR "geos-config not found")
+               message(FATAL_ERROR "geos library not found")
        else()
-               message(STATUS "geos-config not found")
+               message(STATUS "geos library not found")
        endif()
 endif()
-
 if(NOT HAVE_GEOS_LIB)
+       set(GEOS_INCLUDE_DIR "")
+       set(GEOS_LIBRARIES "")
        if(${ENABLE_GEOM} STREQUAL "YES")
                message(FATAL_ERROR "geos library required for geom module")
        else()
diff --git a/clients/odbc/winsetup/CMakeLists.txt 
b/clients/odbc/winsetup/CMakeLists.txt
--- a/clients/odbc/winsetup/CMakeLists.txt
+++ b/clients/odbc/winsetup/CMakeLists.txt
@@ -6,7 +6,7 @@
 # Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
 #]]
 
-include_directories(../include ../driver ${ODBC_INCLUDE_DIR})
+include_directories(../driver ${ODBC_INCLUDE_DIR})
 
 add_library(MonetODBCs SHARED setup.c setup.rc setup.syms resource.h)
 target_link_libraries(MonetODBCs PRIVATE ${ODBCINST_LIBRARIES})
diff --git a/cmake/FindGeos.cmake b/cmake/FindGeos.cmake
new file mode 100644
--- /dev/null
+++ b/cmake/FindGeos.cmake
@@ -0,0 +1,27 @@
+# - Find geos
+# Find the native geos headers and libraries.
+#
+# GEOS_INCLUDE_DIR     - where to find geos_c.h, etc.
+# GEOS_LIBRARIES       - List of libraries when using geos.
+# GEOS_VERSION - GEOS_VERSION if found
+# GEOS_FOUND   - True if geos found.
+
+# Look for the header file.
+find_path(GEOS_INCLUDE_DIR NAMES geos_c.h)
+
+# Look for the library.
+find_library(GEOS_LIBRARIES NAMES geos_c geos)
+
+# Handle the QUIETLY and REQUIRED arguments and set GEOS_FOUND to TRUE if all 
listed variables are TRUE.
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GEOS DEFAULT_MSG GEOS_LIBRARIES 
GEOS_INCLUDE_DIR)
+
+if(GEOS_FOUND)
+       file(STRINGS "${GEOS_INCLUDE_DIR}/geos_c.h" GEOS_VERSION_LINES REGEX 
"#define[ \t]+GEOS_VERSION_(MAJOR|MINOR|PATCH)")
+       string(REGEX REPLACE ".*GEOS_VERSION_MAJOR *\([0-9]*\).*" "\\1" 
GEOS_VERSION_MAJOR "${GEOS_VERSION_LINES}")
+       string(REGEX REPLACE ".*GEOS_VERSION_MINOR *\([0-9]*\).*" "\\1" 
GEOS_VERSION_MINOR "${GEOS_VERSION_LINES}")
+       string(REGEX REPLACE ".*GEOS_VERSION_PATCH *\([0-9]*\).*" "\\1" 
GEOS_VERSION_PATCH "${GEOS_VERSION_LINES}")
+       set(GEOS_VERSION 
"${GEOS_VERSION_MAJOR}.${GEOS_VERSION_MINOR}.${GEOS_VERSION_PATCH}")
+endif()
+
+mark_as_advanced(GEOS_INCLUDE_DIR GEOS_LIBRARIES GEOS_VERSION)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to