Changeset: ea6bd99abf45 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ea6bd99abf45
Removed Files:
        cmake/flag_test.c
        cmake/readline_test.c
Modified Files:
        CMakeLists.txt
        cmake/monetdb_config.h.in
        common/utils/mcrypt.c
Branch: cmake-fun
Log Message:

Added additional checks for optional dependencies, plus cleaned unnecessary 
compilation test files.


diffs (truncated from 402 to 300 lines):

diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,13 +6,14 @@ project(MonetDB C)
 
 set(C_STANDARD_REQUIRED ON)
 set(CMAKE_C_STANDARD 99)
-set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE)
 
 find_package(PkgConfig REQUIRED)
 find_package(BISON)
 
-set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
+set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
 include(GNUInstallDirs REQUIRED)
+include(CheckCSourceCompiles REQUIRED)
+include(CheckCSourceRuns REQUIRED)
 include(CheckIncludeFile REQUIRED)
 include(CheckIncludeFiles REQUIRED)
 include(CheckSymbolExists REQUIRED)
@@ -56,7 +57,7 @@ string(SUBSTRING ${STREAM_VERSION} 15 ST
 
 # Intel compiler hack
 if("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel")
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-gcc")
+       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-gcc")
 endif()
 
 # Set default build options
@@ -185,7 +186,21 @@ endif()
 set(X_CFLAGS "${CMAKE_C_FLAGS}")
 
 function(checkCompilerFlag Flag)
-       try_compile(COMPILE_SUCCEEDED "${CMAKE_BINARY_DIR}/temp" 
"${CMAKE_SOURCE_DIR}/cmake/flag_test.c" CMAKE_FLAGS "${CMAKE_C_FLAGS} ${Flag}")
+       set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${Flag}")
+       check_c_source_compiles("
+               #include <stdio.h>
+               #include <stdlib.h>
+               #include <string.h>
+
+               int main(int argc, char **av) {
+                       char buf[24];
+                       double d = atof(\"4.2\");
+                       if (argc == 0 || strchr(av[0], av[0][0]) != NULL)
+                               snprintf(buf, sizeof(buf), \"%f\", d);
+                       return 0;
+               }
+       " COMPILE_SUCCEEDED)
+       set(CMAKE_REQUIRED_FLAGS "${PREV_CMAKE_REQUIRED_FLAGS}")
        if(COMPILE_SUCCEEDED)
                message(STATUS "Test for ${Flag} succeeded")
                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${Flag}" PARENT_SCOPE)
@@ -292,7 +307,21 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Intel"
        endif()
 endif()
 
-try_compile(COMPILE_SUCCEEDED "${CMAKE_BINARY_DIR}/temp" 
"${CMAKE_SOURCE_DIR}/cmake/flag_test.c" CMAKE_FLAGS "${CMAKE_C_FLAGS} 
-Wl,-Bsymbolic-functions")
+set(CMAKE_REQUIRED_LINK_OPTIONS "${CMAKE_REQUIRED_LINK_OPTIONS} 
-Wl,-Bsymbolic-functions")
+check_c_source_compiles("
+       #include <stdio.h>
+       #include <stdlib.h>
+       #include <string.h>
+
+       int main(int argc, char **av) {
+               char buf[24];
+               double d = atof(\"4.2\");
+               if (argc == 0 || strchr(av[0], av[0][0]) != NULL)
+                       snprintf(buf, sizeof(buf), \"%f\", d);
+               return 0;
+       }
+" COMPILE_SUCCEEDED)
+set(CMAKE_REQUIRED_LINK_OPTIONS "${PREV_CMAKE_REQUIRED_LINK_OPTIONS}")
 if(COMPILE_SUCCEEDED)
        message(STATUS "Test for -Bsymbolic-functions option succeeded")
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${Flag}")
@@ -572,6 +601,7 @@ defineCmacro("SO_PREFIX"    "SO_PREFIX \
 set(PREV_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
 set(PREV_CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}")
 set(PREV_CMAKE_REQUIRED_LINK_OPTIONS "${CMAKE_REQUIRED_LINK_OPTIONS}")
+set(PREV_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
 
 set(WITH_BZ2 "AUTO" CACHE STRING "Include bz2 support (default=auto)")
 if(NOT ${WITH_BZ2} STREQUAL "NO")
@@ -752,14 +782,25 @@ if(NOT ${WITH_READLINE} STREQUAL "NO")
        elseif(${WITH_READLINE} STREQUAL "YES")
                message(FATAL_ERROR "Readline library not found")
        else()
-               message(WARN " Readline library not found2")
+               message(WARN " Readline library not found")
        endif()
 
        if(HAVE_READLINE_LIB)
                check_symbol_exists("rl_completion_matches" 
"stdio.h;readline/readline.h" HAVE_READLINE_LIB)
                if(HAVE_READLINE_LIB)
                        message(STATUS "Checking whether rl_completion_func_t 
exists")
-                       try_compile(HAVE_READLINE_LIB 
"${CMAKE_BINARY_DIR}/temp" "${CMAKE_SOURCE_DIR}/cmake/readline_test.c" 
CMAKE_FLAGS "${CMAKE_C_FLAGS} ${CUSTOM_READLINE_INCS} ${CUSTOM_READLINE_LIBS}" 
LINK_LIBRARIES "${READLINE_LIBS}")
+                       check_c_source_compiles("
+                               #include <stdio.h>
+                               #include <readline/readline.h>
+
+                               int main(int argc, char **argv) {
+                                       rl_completion_func_t *func = NULL;
+                                       (void) argc;
+                                       (void) argv;
+                                       (void) func;
+                                       return 0;
+                               }
+                       " HAVE_READLINE_LIB)
                        if(NOT HAVE_READLINE_LIB)
                                if(${WITH_READLINE} STREQUAL "YES")
                                        message(FATAL_ERROR 
"readline/readline.h does not contain rl_completion_func_t, is it GNU 
readline?")
@@ -807,7 +848,7 @@ endif()
 # OpenSSL or CommonCrypto library
 if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
        defineCmacro("HAVE_COMMONCRYPTO" "HAVE_COMMONCRYPTO 1")
-       set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};crypto") # 
TODO is it right?
+       set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};crypto") # 
TODO test this
 
        check_symbol_exists("CC_MD5_Update" "CommonCrypto/CommonDigest.h" 
HAVE_CC_MD5_Update_FUNC)
        if(HAVE_CC_MD5_Update_FUNC)
@@ -844,8 +885,8 @@ else()
 
                if(OPENSSL_FOUND)
                        message(STATUS "openssl library found")
-                       defineCmacro("HAVE_OPENSSL" "HAVE_OPENSSL 1")
                        set(CMAKE_REQUIRED_LIBRARIES 
"${CMAKE_REQUIRED_LIBRARIES};ssl;crypto")
+
                        check_symbol_exists("MD5_Update" "openssl/md5.h" 
HAVE_MD5_Update_FUNC)
                        if(HAVE_MD5_Update_FUNC)
                                defineCmacro("HAVE_MD5_UPDATE" "HAVE_MD5_UPDATE 
1")
@@ -874,17 +915,181 @@ else()
                        if(HAVE_SHA512_Update_FUNC)
                                defineCmacro("SHA512_Update" "SHA512_Update 1")
                        endif()
+
+                       if(NOT HAVE_${PASSWORD_BACKEND}_Update_FUNC)
+                               if(${ENABLE_MONETDB5} STREQUAL "YES")
+                                       message(FATAL_ERROR "OpenSSL library 
found but checksum algorithm required for MonetDB5 not found")
+                               else()
+                                       set(ENABLE_MONETDB5 "NO")
+                                       message(WARN " OpenSSL library found 
but required checksum algorithm not found, so disabling")
+                               endif()
+                       else()
+                               defineCmacro("HAVE_OPENSSL" "HAVE_OPENSSL 1")
+                       endif()
                else()
                        if(${ENABLE_MONETDB5} STREQUAL "YES")
                                message(FATAL_ERROR "OpenSSL library not found 
but required for MonetDB5")
                        else()
+                               set(ENABLE_MONETDB5 "NO")
                                message(WARN " OpenSSL library not found but 
required for MonetDB5")
                        endif()
                endif()
        endif()
 endif()
+set(CMAKE_REQUIRED_LIBRARIES "${PREV_CMAKE_REQUIRED_LIBRARIES}")
 
-set(CMAKE_REQUIRED_LIBRARIES "${PREV_CMAKE_REQUIRED_LIBRARIES}")
+# Regex library
+set(WITH_REGEX "PCRE" CACHE STRING "Use either PCRE or POSIX regular 
expressions (default=PCRE if available)")
+if(NOT ${WITH_REGEX} MATCHES "^AUTO|PCRE|POSIX$")
+       message(FATAL_ERROR "WITH_REGEX argument must be either AUTO, PCRE or 
POSIX")
+endif()
+
+if(NOT ${WITH_REGEX} STREQUAL "POSIX")
+       set(PCRE_REQUIRED_VERSION "4.5")
+       pkg_search_module(PCRE NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH 
libpcre>=${PCRE_REQUIRED_VERSION})
+
+       if(PCRE_FOUND)
+               message(STATUS "PCRE library found")
+               message(STATUS "Checking for UTF-8 support on PCRE library")
+               set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};pcre")
+               check_c_source_runs("
+                       #include <pcre.h>
+
+                       int main(int argc, char **argv) {
+                               int rc;
+                               (void) argc;
+                               (void) argv;
+                               if (pcre_config(PCRE_CONFIG_UTF8, &rc) != 0)
+                                       return 1;
+                               exit(!rc);
+                               return 0;
+                       }
+               " PCRE_HAS_UTF8)
+               set(CMAKE_REQUIRED_LIBRARIES "${PREV_CMAKE_REQUIRED_LIBRARIES}")
+               if(PCRE_HAS_UTF8)
+                       defineCmacro("HAVE_LIBPCRE" "HAVE_LIBPCRE 1")
+               elseif(${WITH_REGEX} STREQUAL "PCRE")
+                       message(FATAL_ERROR "PCRE library found but no UTF-8 
support")
+               else()
+                       message(ERROR " PCRE library found but no UTF-8 
support")
+               endif()
+       else()
+               if(PCRE_FOUND AND PCRE_VERSION VERSION_LESS_EQUAL 
${PCRE_REQUIRED_VERSION})
+                       set(PCRE_ERROR_MESSAGE " PCRE library found, but the 
version is too old ${PCRE_VERSION} < ${PCRE_REQUIRED_VERSION}")
+               else()
+                       set(PCRE_ERROR_MESSAGE " PCRE library not found or not 
usable")
+               endif()
+
+               if(${WITH_REGEX} STREQUAL "PCRE")
+                       message(FATAL_ERROR "${PCRE_ERROR_MESSAGE}")
+               else()
+                       message(WARN "${PCRE_ERROR_MESSAGE}")
+               endif()
+       endif()
+endif()
+
+if(NOT PCRE_HAS_UTF8)
+       message(STATUS "Checking for GNU regex library")
+       check_c_source_runs("
+               #include <regex.h>
+
+               int main(int argc, char **argv) {
+                       regex_t re;
+                       (void) argc;
+                       (void) argv;
+                       return regcomp(&re, \"hello\", REG_EXTENDED|REG_NOSUB) 
? 1 : 0;
+               }
+       " HAS_POSIX_REGEX)
+endif()
+
+if(NOT PCRE_HAS_UTF8 AND NOT HAS_POSIX_REGEX)
+       if(${ENABLE_MONETDB5} STREQUAL "YES")
+               message(FATAL_ERROR "PCRE library or GNU regex library not 
found but required for MonetDB5")
+       else()
+               set(ENABLE_MONETDB5 "NO")
+               message(WARN " PCRE library or GNU regex library not found but 
required for MonetDB5")
+       endif()
+endif()
+
+set(WITH_LIBXML2 "AUTO" CACHE STRING "Include libxml2 support (default=auto)")
+if(NOT ${WITH_LIBXML2} STREQUAL "NO")
+       pkg_search_module(LIBXML2 NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH 
libxml-2.0)
+
+       if(LIBXML2_FOUND)
+               message(STATUS "libxml2 library found")
+               defineCmacro("HAVE_LIBXML" "HAVE_LIBXML 1")
+       else()
+               if(${WITH_LIBXML2} STREQUAL "YES")
+                       message(FATAL_ERROR "libxml2 library not found")
+               else()
+                       message(ERROR " libxml2 library not found")
+               endif()
+       endif()
+endif()
+
+set(WITH_CURL "AUTO" CACHE STRING "Include cURL support (default=auto)")
+if(NOT ${WITH_CURL} STREQUAL "NO")
+       pkg_search_module(CURL NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH libcurl)
+
+       if(CURL_FOUND)
+               message(STATUS "libcurl library found")
+               defineCmacro("HAVE_CURL" "HAVE_CURL 1")
+       else()
+               if(${WITH_CURL} STREQUAL "YES")
+                       message(FATAL_ERROR "libcurl library not found")
+               else()
+                       message(ERROR " libcurl library not found")
+               endif()
+       endif()
+endif()
+
+set(WITH_ZLIB "AUTO" CACHE STRING "Include zlib support (default=auto)")
+if(NOT ${WITH_ZLIB} STREQUAL "NO")
+       pkg_search_module(ZLIB NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH zlib)
+
+       if(ZLIB_FOUND)
+               message(STATUS "zlib library found")
+               defineCmacro("HAVE_LIBZ" "HAVE_LIBZ 1")
+       else()
+               if(${WITH_CURL} STREQUAL "YES")
+                       message(FATAL_ERROR "zlib library not found")
+               else()
+                       message(ERROR " zlib library not found")
+               endif()
+       endif()
+endif()
+
+set(WITH_LIBLZMA "AUTO" CACHE STRING "Include liblzma support (default=auto)")
+if(NOT ${WITH_LIBLZMA} STREQUAL "NO")
+       pkg_search_module(LIBLZMA NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH 
liblzma)
+
+       if(LIBLZMA_FOUND)
+               message(STATUS "liblzma library found")
+               defineCmacro("HAVE_LIBLZMA" "HAVE_LIBLZMA 1")
+       else()
+               if(${WITH_LIBLZMA} STREQUAL "YES")
+                       message(FATAL_ERROR "liblzma library not found")
+               else()
+                       message(ERROR " liblzma library not found")
+               endif()
+       endif()
+endif()
+
+set(WITH_VALGRIND "NO" CACHE STRING "Include valgrind support (default=no)")
+if(NOT ${WITH_VALGRIND} STREQUAL "NO")
+       pkg_search_module(VALGRIND NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH 
valgrind)
+
+       if(VALGRIND_FOUND)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to