Mercurial > hg > orthanc-databases
diff Resources/CMake/UnixOdbcConfiguration.cmake @ 329:b5fb8b77ce4d
initial commit of ODBC framework
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 10 Aug 2021 20:08:53 +0200 |
parents | |
children | 75ff5ce4a995 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/CMake/UnixOdbcConfiguration.cmake Tue Aug 10 20:08:53 2021 +0200 @@ -0,0 +1,248 @@ +# Orthanc - A Lightweight, RESTful DICOM Store +# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics +# Department, University Hospital of Liege, Belgium +# Copyright (C) 2017-2021 Osimis S.A., Belgium +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU Affero General Public License +# as published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +if (STATIC_BUILD OR NOT USE_SYSTEM_UNIX_ODBC) + include(CheckFunctionExists) + include(CheckTypeSize) + + set(VERSION "2.3.9") # Used in "config.h.in" + set(UNIX_ODBC_SOURCES_DIR ${CMAKE_BINARY_DIR}/unixODBC-${VERSION}) + set(UNIX_ODBC_MD5 "06f76e034bb41df5233554abe961a16f") + set(UNIX_ODBC_URL "http://orthanc.osimis.io/ThirdPartyDownloads/unixODBC-${VERSION}.tar.gz") + + DownloadPackage(${UNIX_ODBC_MD5} ${UNIX_ODBC_URL} "${UNIX_ODBC_SOURCES_DIR}") + + if (STATIC_BUILD OR NOT USE_SYSTEM_LTDL) + add_definitions( + -DLT_OBJDIR=".libs/" + -DLTDL # Necessary for LT_SCOPE to be properly defined + #-DLT_DEBUG_LOADERS # Get debug messages + ) + + include_directories( + ${UNIX_ODBC_SOURCES_DIR}/libltdl + ${UNIX_ODBC_SOURCES_DIR}/libltdl/libltdl/ + ) + + list(APPEND LTDL_SOURCES + ${UNIX_ODBC_SOURCES_DIR}/libltdl/loaders/dlopen.c + ${UNIX_ODBC_SOURCES_DIR}/libltdl/loaders/preopen.c + ${UNIX_ODBC_SOURCES_DIR}/libltdl/lt__alloc.c + ${UNIX_ODBC_SOURCES_DIR}/libltdl/lt__strl.c + ${UNIX_ODBC_SOURCES_DIR}/libltdl/lt_dlloader.c + ${UNIX_ODBC_SOURCES_DIR}/libltdl/lt_error.c + ${UNIX_ODBC_SOURCES_DIR}/libltdl/ltdl.c + ${UNIX_ODBC_SOURCES_DIR}/libltdl/slist.c + ) + else() + check_include_file("libltdl/lt_dlloader.h" HAVE_LT_DLLOADER_H) + if (NOT HAVE_LT_DLLOADER_H) + message(FATAL_ERROR "Please install the libltdl-dev package") + endif() + + link_libraries(ltdl) + endif() + + + include_directories( + ${CMAKE_CURRENT_BINARY_DIR}/AUTOGENERATED + ${UNIX_ODBC_SOURCES_DIR}/include + ${UNIX_ODBC_SOURCES_DIR}/DriverManager + ) + + file(GLOB UNIX_ODBC_SOURCES + ${UNIX_ODBC_SOURCES_DIR}/cur/*.c + ${UNIX_ODBC_SOURCES_DIR}/DriverManager/*.c + ${UNIX_ODBC_SOURCES_DIR}/odbcinst/*.c + ${UNIX_ODBC_SOURCES_DIR}/ini/*.c + ${UNIX_ODBC_SOURCES_DIR}/log/*.c + ${UNIX_ODBC_SOURCES_DIR}/lst/*.c + ) + + list(REMOVE_ITEM UNIX_ODBC_SOURCES + ${UNIX_ODBC_SOURCES_DIR}/cur/SQLConnect.c + ${UNIX_ODBC_SOURCES_DIR}/cur/SQLGetDiagRec.c + ) + + + set(ASCII_ENCODING "auto-search") + set(SYSTEM_FILE_PATH "/etc") + set(DEFLIB_PATH "/usr/lib") + set(ENABLE_DRIVER_ICONV ON) # Enables support for encodings + + set(STDC_HEADERS 1) + set(UNIXODBC ON) + set(UNIXODBC_SOURCE ON) # This makes "intptr_t" to be defined + set(ICONV_CONST ON) + set(STRICT_ODBC_ERROR ON) + + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + set(PLATFORM64 1) + endif() + + list(GET CMAKE_FIND_LIBRARY_SUFFIXES 0 SHLIBEXT) + + check_include_file("alloca.h" HAVE_ALLOCA_H) + check_include_file("argz.h" HAVE_ARGZ_H) + check_include_file("crypt.h" HAVE_CRYPT_H) + check_include_file("dirent.h" HAVE_DIRENT_H) + check_include_file("dlfcn.h" HAVE_DLFCN_H) + check_include_file("inttypes.h" HAVE_INTTYPES_H) + check_include_file("langinfo.h" HAVE_LANGINFO_H) + check_include_file("crypt.h" HAVE_CRYPT_H) + check_include_file("limits.h" HAVE_LIMITS_H) + check_include_file("locale.h" HAVE_LOCALE_H) + check_include_file("malloc.h" HAVE_MALLOC_H) + check_include_file("memory.h" HAVE_MEMORY_H) + check_include_file("pwd.h" HAVE_PWD_H) + check_include_file("stdarg.h" HAVE_STDARG_H) + check_include_file("stdlib.h" HAVE_STDLIB_H) + check_include_file("string.h" HAVE_STRING_H) + check_include_file("strings.h" HAVE_STRINGS_H) + check_include_file("time.h" HAVE_TIME_H) + check_include_file("sys/sem.h" HAVE_SYS_SEM_H) + check_include_file("sys/stat.h" HAVE_SYS_STAT_H) + check_include_file("sys/time.h" HAVE_SYS_TIME_H) + check_include_file("sys/timeb.h" HAVE_SYS_TIMEB_H) + check_include_file("unistd.h" HAVE_UNISTD_H) + check_include_file("readline/readline.h" HAVE_READLINE_H) + check_include_file("readline/history.h" HAVE_READLINE_HISTORY_H) + + check_symbol_exists(alloca "alloca.h" HAVE_ALLOCA) + check_symbol_exists(argz_add "argz.h" HAVE_ARGZ_ADD) + check_symbol_exists(argz_append "argz.h" HAVE_ARGZ_APPEND) + check_symbol_exists(argz_count "argz.h" HAVE_ARGZ_COUNT) + check_symbol_exists(argz_create_sep "argz.h" HAVE_ARGZ_CREATE_SEP) + check_symbol_exists(argz_insert "argz.h" HAVE_ARGZ_INSERT) + check_symbol_exists(argz_next "argz.h" HAVE_ARGZ_NEXT) + check_symbol_exists(argz_stringify "argz.h" HAVE_ARGZ_STRINGIFY) + + check_function_exists(atoll HAVE_ATOLL) + check_function_exists(closedir HAVE_CLOSEDIR) + check_function_exists(endpwent HAVE_ENDPWENT) + + if (HAVE_ARGZ_H) + set(HAVE_WORKING_ARGZ 1) + endif() + + find_package(Threads) + if (Threads_FOUND) + set(HAVE_LIBPTHREAD 1) + endif () + + set(CMAKE_REQUIRED_LIBRARIES) + if (HAVE_DLFCN_H) + list(APPEND CMAKE_REQUIRED_LIBRARIES "dl") + endif() + if (HAVE_CRYPT_H) + list(APPEND CMAKE_REQUIRED_LIBRARIES "crypt") + endif() + if (HAVE_READLINE_H) + list(APPEND CMAKE_REQUIRED_LIBRARIES "readline") + endif() + if (HAVE_LT_DLLOADER_H) + set(HAVE_LIBDLLOADER 0) # to improve + set(HAVE_LTDL 1) # to improve + endif() + + check_function_exists(dlerror HAVE_DLERROR) + check_function_exists(dlloader_init HAVE_LIBDLLOADER) + check_function_exists(dlopen HAVE_LIBDL) + check_function_exists(encrypt HAVE_LIBCRYPT) + check_function_exists(ftime HAVE_FTIME) + check_function_exists(getpwuid HAVE_GETPWUID) + check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) + check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) + check_function_exists(getuid HAVE_GETUID) + check_function_exists(iconv HAVE_ICONV) + check_function_exists(localtime_r HAVE_LOCALTIME_R) + check_function_exists(opendir HAVE_OPENDIR) + check_function_exists(putenv HAVE_PUTENV) + check_function_exists(readdir HAVE_READDIR) + check_function_exists(readline HAVE_READLINE) + check_function_exists(setenv HAVE_SETENV) + check_function_exists(setlocale HAVE_SETLOCALE) + check_function_exists(socket HAVE_SOCKET) + check_function_exists(strcasecmp HAVE_STRCASECMP) + check_function_exists(strchr HAVE_STRCHR) + check_function_exists(strdup HAVE_STRDUP) + check_function_exists(strncasecmp HAVE_STRNCASECMP) + check_function_exists(strstr HAVE_STRSTR) + check_function_exists(strtol HAVE_STRTOL) + check_function_exists(strtoll HAVE_STRTOLL) + check_function_exists(time HAVE_TIME) + check_function_exists(vprintf HAVE_VPRINTF) + check_function_exists(vsnprintf HAVE_VSNPRINTF) + + set(CMAKE_EXTRA_INCLUDE_FILES) + if (HAVE_ARGZ_H) + list(APPEND CMAKE_EXTRA_INCLUDE_FILES "argz.h") + endif() + + check_type_size("long" SIZEOF_LONG) + check_type_size("long int" SIZEOF_LONG_INT) + + check_type_size("error_t" HAVE_ERROR_T) + if (DEFINED HAVE_ERROR_T) + set(HAVE_ERROR_T 1) + endif() + + check_type_size("long long" HAVE_LONG_LONG) + if (DEFINED HAVE_LONG_LONG) + set(HAVE_LONG_LONG 1) + endif() + + check_type_size("nl_langinfo" HAVE_LANGINFO_CODESET) + if (DEFINED HAVE_LANGINFO_CODESET) + set(HAVE_LANGINFO_CODESET 1) # to improve + set(HAVE_NL_LANGINFO 1) + endif() + + check_type_size("ptrdiff_t" HAVE_PTRDIFF_T) + if (DEFINED HAVE_PTRDIFF_T) + set(HAVE_PTRDIFF_T 1) + endif() + + configure_file( + ${CMAKE_CURRENT_LIST_DIR}/../Odbc/config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/AUTOGENERATED/config.h + ) + + configure_file( + ${CMAKE_CURRENT_LIST_DIR}/../Odbc/config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/AUTOGENERATED/unixodbc_conf.h + ) + + add_definitions( + -DHAVE_CONFIG_H=1 + ) + +else() + check_include_file("sqlext.h" HAVE_UNIX_ODBC_H) + if (NOT HAVE_UNIX_ODBC_H) + message(FATAL_ERROR "Please install the unixodbc-dev package") + endif() + + check_include_file("libltdl/lt_dlloader.h" HAVE_LT_DLLOADER_H) + if (NOT HAVE_LT_DLLOADER_H) + message(FATAL_ERROR "Please install the libltdl-dev package") + endif() + + link_libraries(odbc ltdl) +endif()