Changeset: 6a4f728cab39 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6a4f728cab39
Modified Files:
        CMakeLists.txt
        common/options/getopt.c
        monetdb5/modules/kernel/batmmath.c
        monetdb5/modules/kernel/mmath.c
Branch: cmake-fun
Log Message:

Added checks for type sizes and existence of functions.


diffs (truncated from 377 to 300 lines):

diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,11 +6,12 @@ project(MonetDB C)
 
 set(C_STANDARD_REQUIRED ON)
 set(CMAKE_C_STANDARD 99)
+set(PACKAGE "MonetDB" CACHE STRING "")
 
 find_package(PkgConfig REQUIRED)
 find_package(BISON)
 
-set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
+set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" CACHE INTERNAL "Location of 
custom CMake modules.")
 include(GNUInstallDirs REQUIRED)
 include(CheckCSourceCompiles REQUIRED)
 include(CheckCSourceRuns REQUIRED)
@@ -20,6 +21,7 @@ include(CheckSymbolExists REQUIRED)
 include(CheckTypeSize REQUIRED)
 include(FindIconv REQUIRED)
 include(TestLargeFiles REQUIRED)
+include(CheckCCompilerFlag REQUIRED)
 
 cmake_policy(SET CMP0075 NEW)
 
@@ -173,21 +175,7 @@ endif()
 set(X_CFLAGS "${CMAKE_C_FLAGS}")
 
 function(checkCompilerFlag 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}")
+       check_c_compiler_flag("${Flag}" COMPILE_SUCCEEDED)
        if(COMPILE_SUCCEEDED)
                message(STATUS "Test for ${Flag} succeeded")
                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${Flag}" PARENT_SCOPE)
@@ -307,9 +295,9 @@ check_c_source_compiles("
                        snprintf(buf, sizeof(buf), \"%f\", d);
                return 0;
        }
-" COMPILE_SUCCEEDED)
+" HAVE_WL_BSYMBOLIC_FUNCTIONS)
 set(CMAKE_REQUIRED_LINK_OPTIONS "${PREV_CMAKE_REQUIRED_LINK_OPTIONS}")
-if(COMPILE_SUCCEEDED)
+if(HAVE_WL_BSYMBOLIC_FUNCTIONS)
        message(STATUS "Test for -Bsymbolic-functions option succeeded")
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${Flag}")
        set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${Flag}")
@@ -1253,9 +1241,9 @@ if(NOT ${ENABLE_ODBC} STREQUAL "NO")
                endif()
 
                set(CMAKE_EXTRA_INCLUDE_FILES 
"${CMAKE_EXTRA_INCLUDE_FILES};sql.h")
-               check_type_size(SQLWCHAR SIZEOF_SQLWCHAR BUILTIN_TYPES_ONLY 
LANGUAGE C)
+               check_type_size(SQLWCHAR SIZEOF_SQLWCHAR LANGUAGE C)
                set(CMAKE_EXTRA_INCLUDE_FILES 
"${PREV_CMAKE_EXTRA_INCLUDE_FILES}")
-               if(NOT HAVE_SIZEOF_SQLWCHAR OR ${SIZEOF_SQLWCHAR} STREQUAL "")
+               if(NOT HAVE_SIZEOF_SQLWCHAR OR ${SIZEOF_SQLWCHAR} STREQUAL "0")
                        if(${WITH_UNIXODBC} STREQUAL "YES")
                                message(FATAL_ERROR "could not determine the 
size of SQLWCHAR")
                        else()
@@ -1524,7 +1512,7 @@ if(NOT HAVE_LIBLAS_LIB)
        endif()
 endif()
 
-set(WITH_ATOMIC_OPS "AUTO" CACHE STRING "Use atomic_ops library 
(default=auto)") # Check with HAVE_ATOMIC_OPS
+set(WITH_ATOMIC_OPS "AUTO" CACHE STRING "Use atomic_ops library 
(default=auto)") # Check with HAVE_ATOMIC_OPS_H
 if(NOT ${WITH_ATOMIC_OPS} STREQUAL "NO")
        pkg_search_module(ATOMIC_OPS NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH 
atomic_ops)
 
@@ -1532,8 +1520,8 @@ if(NOT ${WITH_ATOMIC_OPS} STREQUAL "NO")
                if("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel")
                        message(ERROR " atomic_ops does not compile with 
Intel's icc")
                else()
-                       check_include_file("atomic_ops.h" HAVE_ATOMIC_OPS)
-                       if(NOT HAVE_ATOMIC_OPS)
+                       check_include_file("atomic_ops.h" HAVE_ATOMIC_OPS_H)
+                       if(NOT HAVE_ATOMIC_OPS_H)
                                if(${WITH_ATOMIC_OPS} STREQUAL "YES")
                                        message(FATAL_ERROR "atomic_ops was 
incorrectly installed (happens on at least Solaris/OpenIndiana)")
                                else()
@@ -1546,6 +1534,7 @@ if(NOT ${WITH_ATOMIC_OPS} STREQUAL "NO")
        endif()
 endif()
 
+# Header files
 check_include_file("dirent.h" HAVE_DIRENT_H)
 check_include_file("dlfcn.h" HAVE_DLFCN_H)
 check_include_file("execinfo.h" HAVE_EXECINFO_H)
@@ -1571,6 +1560,7 @@ check_include_file("sys/mman.h" HAVE_SYS
 check_include_file("sys/param.h" HAVE_SYS_PARAM_H)
 check_include_file("sys/resource.h" HAVE_SYS_RESOURCE_H)
 check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H)
+check_include_file("sys/stat.h" HAVE_SYS_STAT_H)
 if(${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD") # on OpenBSD, sys/sysctl.h 
requires sys/param.h to be included beforehand
        check_include_files("sys/param.h;sys/sysctl.h" HAVE_SYS_SYSCTL_H)
 else()
@@ -1588,6 +1578,7 @@ check_include_file("unistd.h" HAVE_UNIST
 check_include_file("uuid/uuid.h" HAVE_UUID_UUID_H)
 check_include_file("winsock.h" HAVE_WINSOCK_H)
 
+# Socket libraries
 set(SOCKET_LIBRARIES "")
 check_symbol_exists("gethostbyname_r" "netdb.h;sys/socket.h" 
HAVE_GETHOSTBYNAME_R)
 if(NOT HAVE_GETHOSTBYNAME_R)
@@ -1661,10 +1652,212 @@ if(NOT HAVE_GETADDRINFO)
        set(CMAKE_REQUIRED_LIBRARIES "${PREV_CMAKE_REQUIRED_LIBRARIES}")
 endif()
 
-check_type_size(int SIZEOF_INT BUILTIN_TYPES_ONLY LANGUAGE C)
-check_type_size(short SIZEOF_SHORT BUILTIN_TYPES_ONLY LANGUAGE C)
-check_type_size(char SIZEOF_CHAR BUILTIN_TYPES_ONLY LANGUAGE C)
-check_type_size(long SIZEOF_LONG BUILTIN_TYPES_ONLY LANGUAGE C)
+if(HAVE_WINSOCK_H)
+       set(CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_EXTRA_INCLUDE_FILES};winsock.h")
+else()
+       set(CMAKE_EXTRA_INCLUDE_FILES 
"${CMAKE_EXTRA_INCLUDE_FILES};sys/types.h;sys/socket.h")
+endif()
+check_type_size(SOCKET SIZEOF_SOCKET LANGUAGE C)
+if(NOT HAVE_SIZEOF_SOCKET OR "${SIZEOF_SOCKET}" STREQUAL "0")
+       set(SOCKET int)
+endif()
+set(CMAKE_EXTRA_INCLUDE_FILES "${PREV_CMAKE_EXTRA_INCLUDE_FILES}")
+if(HAVE_SIZEOF_SOCKETLEN_T AND NOT "${SIZEOF_SOCKETLEN_T}" STREQUAL "0")
+       set(HAVE_SOCKLEN_T ON)
+else()
+       set(socklen_t int)
+endif()
+set(CMAKE_EXTRA_INCLUDE_FILES "${PREV_CMAKE_EXTRA_INCLUDE_FILES}")
+
+check_type_size(size_t SIZEOF_SIZE_T LANGUAGE C)
+if(HAVE_SIZEOF_SIZE_T AND NOT "${SIZEOF_SIZE_T}" STREQUAL "0")
+       set(SIZEOF_SIZE_T ${SIZEOF_SIZE_T})
+       set(size_t ON)
+endif()
+check_type_size(ssize_t SIZEOF_SSIZE_T LANGUAGE C)
+if(HAVE_SIZEOF_SSIZE_T AND NOT "${SIZEOF_SSIZE_T}" STREQUAL "0")
+       set(SIZEOF_SSIZE_T ${SIZEOF_SSIZE_T})
+       set(ssize_t ON)
+endif()
+
+check_type_size(pid_t SIZEOF_PID_T LANGUAGE C)
+if(NOT HAVE_SIZEOF_PID_T OR "${SIZEOF_PID_T}" STREQUAL "0")
+       set(pid_t int)
+endif()
+check_type_size(off_t SIZEOF_OFF_T LANGUAGE C)
+if(NOT HAVE_SIZEOF_OFF_T OR "${SIZEOF_OFF_T}" STREQUAL "0")
+       set(off_t int)
+endif()
+
+if(NOT ${ENABLE_INT128} STREQUAL "NO")
+       check_type_size(__int128 SIZEOF___INT128 LANGUAGE C)
+       if(HAVE_SIZEOF___INT128 AND NOT "${SIZEOF___INT128}" STREQUAL "0")
+               set(SIZEOF___INT128 ${SIZEOF___INT128})
+               set(HAVE___INT128 ON)
+       endif()
+
+       check_type_size(__int128_t SIZEOF___INT128_T LANGUAGE C)
+       if(HAVE_SIZEOF___INT128_T AND NOT "${SIZEOF___INT128_T}" STREQUAL "0")
+               set(SIZEOF___INT128_T ${SIZEOF___INT128_T})
+               set(HAVE___INT128_T ON)
+       endif()
+
+       check_type_size(__uint128_t SIZEOF___UINT128_T LANGUAGE C)
+       if(HAVE_SIZEOF___UINT128_T AND NOT "${SIZEOF___UINT128_T}" STREQUAL "0")
+               set(HAVE___UINT128_T ON)
+       endif()
+
+       if(NOT HAVE_SIZEOF___INT128 AND NOT HAVE_SIZEOF___INT128_T AND NOT 
HAVE_SIZEOF___UINT128_T)
+               if(${ENABLE_INT128} STREQUAL "YES")
+                       message(FATAL_ERROR "128-bit integers not supported by 
platform")
+               else()
+                       message(ERROR " 128-bit integers not supported by 
platform")
+               endif()
+       endif()
+endif()
+
+check_type_size(ptrdiff_t PTRDIFF_T LANGUAGE C)
+if(HAVE_PTRDIFF_T AND NOT "${PTRDIFF_T}" STREQUAL "0")
+       set(SIZEOF_PTRDIFF_T ${PTRDIFF_T})
+endif()
+check_type_size(intptr_t INTPTR_T LANGUAGE C)
+check_type_size(uintptr_t UINTPTR_T LANGUAGE C)
+
+check_type_size(char CHAR LANGUAGE C)
+if(HAVE_CHAR AND NOT "${CHAR}" STREQUAL "0")
+       set(SIZEOF_CHAR ${CHAR})
+endif()
+check_type_size(short SHORT LANGUAGE C)
+if(HAVE_SHORT AND NOT "${SHORT}" STREQUAL "0")
+       set(SIZEOF_SHORT ${SHORT})
+endif()
+check_type_size(int INT LANGUAGE C)
+if(HAVE_INT AND NOT "${INT}" STREQUAL "0")
+       set(SIZEOF_INT ${INT})
+endif()
+check_type_size(long LONG LANGUAGE C)
+if(HAVE_LONG AND NOT "${LONG}" STREQUAL "0")
+       set(SIZEOF_LONG ${LONG})
+endif()
+check_type_size(void* VOID_P LANGUAGE C)
+if(HAVE_VOID_P AND NOT "${VOID_P}" STREQUAL "0")
+       set(SIZEOF_VOID_P ${VOID_P})
+endif()
+check_type_size(wchar_t WCHAR_T LANGUAGE C)
+if(HAVE_WCHAR_T AND NOT "${WCHAR_T}" STREQUAL "0")
+       set(SIZEOF_WCHAR_T ${WCHAR_T})
+endif()
+
+set(FLEXIBLE_ARRAY_MEMBER ON) # We compile according to C99 standard onwards
+
+# 
https://github.com/Unidata/netcdf-c/commit/b432a527c4a38af45498691a44c5a88961b9c751
+message(STATUS "Check if char type is unsigned or not")
+check_c_source_compiles("
+    #include <stdlib.h>
+
+    int main(int argc, char **argv) {
+        (void) argc;
+        (void) argv;
+        char error_if_char_is_signed[((char)-1) < 0 ? -1 : 1];
+        error_if_char_is_signed[0] = 0;
+        (void) error_if_char_is_signed;
+        return 0;
+    }" __CHAR_UNSIGNED__)
+if(__CHAR_UNSIGNED__)
+       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__CHAR_UNSIGNED__")
+endif()
+
+message(STATUS "Check if __hidden macro is supported")
+check_c_source_compiles("
+    #include <stdlib.h>
+
+    __hidden void test(int a);
+    void test(int a) { (void)a; }
+
+    int main(int argc, char **argv) {
+        (void) argc;
+        (void) argv;
+        test(1);
+        return 0;
+    }" HAVE_HIDDEN)
+if(NOT HAVE_HIDDEN)
+       set(__hidden ON)
+endif()
+
+message(STATUS "If your compiler can use NAN as an initializer")
+check_c_source_compiles("
+    #include <math.h>
+
+    extern const float f;
+    extern const double d;
+    const float f = NAN;
+    const double d = NAN;
+
+    int main(int argc, char **argv) {
+        (void) argc;
+        (void) argv;
+        return 0;
+    }" NAN_CAN_BE_USED_AS_INITIALIZER)
+if(NOT NAN_CAN_BE_USED_AS_INITIALIZER)
+       set(NAN_CANNOT_BE_USED_AS_INITIALIZER ON)
+endif()
+
+check_symbol_exists("accept4" "sys/types.h;sys/socket.h" HAVE_ACCEPT4)
+check_symbol_exists("asctime_r" "time.h" HAVE_ASCTIME_R)
+check_symbol_exists("backtrace" "execinfo.h" HAVE_BACKTRACE)
+check_symbol_exists("clock_gettime" "time.h" HAVE_CLOCK_GETTIME)
+check_symbol_exists("ctime_r" "time.h" HAVE_CTIME_R)
+check_symbol_exists("fallocate" "fcntl.h" HAVE_FALLOCATE)
+check_symbol_exists("fcntl" "unistd.h;fcntl.h" HAVE_FCNTL)
+if(NOT(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" AND CMAKE_SYSTEM_VERSION 
VERSION_LESS_EQUAL 17))
+       check_symbol_exists("fdatasync" "unistd.h" HAVE_FDATASYNC)
+endif()
+check_symbol_exists("fseeko" "stdio.h" HAVE_FSEEKO)
+check_symbol_exists("fsync" "unistd.h" HAVE_FSYNC)
+check_symbol_exists("ftime" "sys/timeb.h" HAVE_FTIME)
+check_symbol_exists("getexecname" "stdlib.h" HAVE_GETEXECNAME)
+check_symbol_exists("getlogin" "unistd.h" HAVE_GETLOGIN)
+check_symbol_exists("getopt" "unistd.h" HAVE_GETOPT)
+check_symbol_exists("getopt_long" "unistd.h;getopt.h" HAVE_GETOPT)
+check_symbol_exists("gettimeofday" "sys/time.h" HAVE_GETTIMEOFDAY)
+check_symbol_exists("getuid" "unistd.h;sys/types.h" HAVE_GETUID)
+check_symbol_exists("localtime_r" "time.h" HAVE_LOCALTIME_R)
+check_symbol_exists("lockf" "unistd.h" HAVE_LOCKF)
+check_symbol_exists("madvise" "sys/mman.h" HAVE_MADVISE)
+check_symbol_exists("mremap" "sys/mman.h" HAVE_MREMAP)
+check_symbol_exists("nl_langinfo" "langinfo.h" HAVE_NL_LANGINFO)
+check_symbol_exists("_NSGetExecutablePath" "mach-o/dyld.h" 
HAVE__NSGETEXECUTABLEPATH)
+check_symbol_exists("pipe2" "fcntl.h;unistd.h" HAVE_PIPE2)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to