From 8f874259e3f9e8cfc539665b41fabeda75e1163a Mon Sep 17 00:00:00 2001 From: Lawrin Novitsky Date: Thu, 21 Oct 2021 23:13:40 +0200 Subject: [PATCH] ODBC-340 cmake could lose openssl libs in the list of dependencies Put some order into options initialization and their defaults. Fixed some of options, that wasnt properly used. Moved them and some initizations and defaults to the separate cmake file cmake/options_defaults.cmake Added options BUILD_TESTS_ONLY that does exactly that. Fixed some VS compilation warnings --- CMakeLists.txt | 224 +++++++++++++++-------------------- cmake/FindDM.cmake | 4 +- cmake/options_defaults.cmake | 87 ++++++++++++++ libmariadb | 2 +- test/CMakeLists.txt | 25 +++- test/blob.c | 10 +- test/cursor.c | 6 +- test/error.c | 4 +- test/multistatement.c | 1 - test/prepare.c | 2 +- 10 files changed, 219 insertions(+), 146 deletions(-) create mode 100644 cmake/options_defaults.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b0e9064..182cca18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,9 @@ # License along with this library; if not see # or write to the Free Software Foundation, Inc., # 51 Franklin St., Fifth Floor, Boston, MA 02110, USA -# *************************************************************************************/ +# ************************************************************************************ + +CMAKE_POLICY(SET CMP0048 NEW) PROJECT(mariadb_connector_odbc C) cmake_minimum_required(VERSION 2.8) @@ -59,7 +61,6 @@ SET(DSN_DIALOG_FILES ${CMAKE_SOURCE_DIR}/dsn/odbc_dsn.c ${CMAKE_SOURCE_DIR}/dsn/odbc_dsn.rc ${CMAKE_SOURCE_DIR}/dsn/resource.h ma_dsn.c -# ma_error.c ma_common.c) MACRO(ADD_OPTION _name _text _default) @@ -94,61 +95,43 @@ IF(WIN32) SET(INSTALL_PLUGINDIR "${MARIADB_DEFAULT_PLUGINS_SUBDIR}") ENDIF() +INCLUDE(${CMAKE_SOURCE_DIR}/cmake/SearchLibrary.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/cmake/SetValueMacro.cmake) + +### Build options, initial settings and platform defaults +INCLUDE("${CMAKE_SOURCE_DIR}/cmake/options_defaults.cmake") + ### Setting installation paths - should go before C/C subproject sets its own. We need to have control over those INCLUDE("${CMAKE_SOURCE_DIR}/cmake/install.cmake") IF(WIN32 OR WITH_OPENSSL OR "${WITH_SSL}" STREQUAL "OPENSSL") - IF(WITH_OPENSSL OR "${WITH_SSL}" STREQUAL "OPENSSL") - FIND_PACKAGE(OpenSSL) - - IF(OPENSSL_FOUND) - MESSAGE(STATUS "Configuring to build with OpenSSL ${OPENSSL_LIBRARIES}") - - ADD_DEFINITIONS(-DHAVE_OPENSSL) - INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) - SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES}) - - SET(PLATFORM_DEPENDENCIES ${PLATFORM_DEPENDENCIES} ${SSL_LIBRARIES}) + # If C/C is linked dynamically, we don't need link C/ODBC against encryption library + IF (NOT MARIADB_LINK_DYNAMIC) + IF(WITH_OPENSSL OR "${WITH_SSL}" STREQUAL "OPENSSL") + FIND_PACKAGE(OpenSSL) + + IF(OPENSSL_FOUND) + MESSAGE(STATUS "Configuring to build with OpenSSL ${OPENSSL_LIBRARIES}") + + ADD_DEFINITIONS(-DHAVE_OPENSSL) + INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) + SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES}) + + SET(PLATFORM_DEPENDENCIES ${PLATFORM_DEPENDENCIES} ${SSL_LIBRARIES}) + ELSE() + MESSAGE(FATAL_ERROR "OpenSSL not found. Please install OpenSSL or disable SSL support via option -DWITH_OPENSSL=Off") + ENDIF() ELSE() - MESSAGE(FATAL_ERROR "OpenSSL not found. Please install OpenSSL or disable SSL support via option -DWITH_OPENSSL=Off") + MESSAGE(STATUS "Configuring SSL support using SChannel") + SET(PLATFORM_DEPENDENCIES ${PLATFORM_DEPENDENCIES} version.lib) ENDIF() - ELSE() - MESSAGE(STATUS "Configuring SSL support using SChannel") - SET(PLATFORM_DEPENDENCIES ${PLATFORM_DEPENDENCIES} version.lib) ENDIF() ELSE() MESSAGE(STATUS "Configuring to build without SSL support") ENDIF() -IF(APPLE) - SET(CMAKE_SKIP_BUILD_RPATH FALSE) - SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) - SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) - OPTION(WITH_IODBC "Build with iOdbc" ON) - CMAKE_POLICY(SET CMP0042 NEW) - CMAKE_POLICY(SET CMP0068 NEW) - set(CMAKE_INSTALL_RPATH "") - SET(CMAKE_INSTALL_NAME_DIR "") - SET(CMAKE_MACOSX_RPATH ON) -ELSE() - OPTION(WITH_IODBC "Build with iOdbc" OFF) -ENDIF() - -ADD_OPTION(WITH_UNIT_TESTS "build test suite" ON) - -# Currently limiting this feature to Windows onle, where it's most probably going to be only used -IF(WIN32 AND ALL_PLUGINS_STATIC) - SET(CLIENT_PLUGIN_AUTH_GSSAPI_CLIENT "STATIC") - SET(CLIENT_PLUGIN_DIALOG "STATIC") - SET(CLIENT_PLUGIN_CLIENT_ED25519 "STATIC") - SET(CLIENT_PLUGIN_CACHING_SHA2_PASSWORD "STATIC") - SET(CLIENT_PLUGIN_SHA256_PASSWORD "STATIC") - SET(CLIENT_PLUGIN_MYSQL_CLEAR_PASSWORD "STATIC") - SET(CLIENT_PLUGIN_MYSQL_OLD_PASSWORD "STATIC") -ENDIF() - ### Including C/C subproject -IF(EXISTS ${CMAKE_SOURCE_DIR}/libmariadb) +IF(NOT USE_SYSTEM_INSTALLED_LIB) IF(GIT_BUILD_SRCPKG) # We don't want with conn/c (wrong) src pkg to be built. SET(GIT_BUILD_SRCPKG FALSE) @@ -172,20 +155,12 @@ IF(EXISTS ${CMAKE_SOURCE_DIR}/libmariadb) ENDIF() ENDIF() ELSE() - SET(USE_SYSTEM_INSTALLED_LIB TRUE) # Adding mariadb subdirs of standard include locations INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR} "/usr/local/include/mariadb") INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR} "/usr/include/mariadb") - MESSAGE(STATUS "There is no Connector/C sub-project folder, linking against libmariadb installed on the system") -ENDIF() - -IF(WIN32) - #ADD_OPTION(WITH_MSI "Build MSI installation package" OFF) - ADD_OPTION(WITH_SIGNCODE "Digitally sign files" OFF) + MESSAGE(STATUS "Linking against libmariadb installed on the system") ENDIF() -#ADD_OPTION(WITH_SSL "Enables use of TLS/SSL library" ON) - IF(WITH_SIGNCODE) IF(WIN32 AND NOT SIGN_OPTIONS) SET(SIGN_OPTIONS /a /t http://timestamp.verisign.com/scripts/timstamp.dll) @@ -198,9 +173,6 @@ ENDIF() #Debug log is controlled by conenction option solely ADD_DEFINITIONS(-DMAODBC_DEBUG) -INCLUDE(${CMAKE_SOURCE_DIR}/cmake/SearchLibrary.cmake) -INCLUDE(${CMAKE_SOURCE_DIR}/cmake/SetValueMacro.cmake) - IF(WIN32) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/dsn) SET(ODBC_LIBS odbc32) @@ -241,7 +213,7 @@ IF(WIN32) ENDIF() ELSE() SEARCH_LIBRARY(LIB_MATH floor m) - SET(PLATFORM_DEPENDENCIES ${LIB_MATH}) + SET(PLATFORM_DEPENDENCIES ${PLATFORM_DEPENDENCIES} ${LIB_MATH}) SET (MARIADB_ODBC_SOURCES ${MARIADB_ODBC_SOURCES} ma_platform_posix.c ma_conv_charset.c) @@ -281,20 +253,29 @@ IF(APPLE OR CMAKE_SYSTEM_NAME MATCHES AIX) ENDIF() ENDIF() +# By now we have everything needed by tests. If we need to build them only - firing config now and exit +# There is "normal" tests config below +IF(BUILD_TESTS_ONLY) + ADD_SUBDIRECTORY(test) + IF(NOT WIN32) + # Configuring ini files for testing with UnixODBC + MESSAGE(STATUS "Configurig Test Driver: ${TEST_DRIVER}, Test DSN: ${TEST_DSN}, tcp://${TEST_UID}@${TEST_SERVER}:${TEST_PORT}/${TEST_SCHEMA} socket: ${TEST_SOCKET}") + + SET(DRIVER_LIB_LOCATION "${libmaodbc_prefix}/${INSTALL_LIBDIR}") + CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/test/odbcinst.ini.in ${CMAKE_BINARY_DIR}/test/odbcinst.ini) + + SET(TEST_DRIVER "${DRIVER_LIB_LOCATION}") + CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/test/odbc.ini.in ${CMAKE_BINARY_DIR}/test/odbc.ini) + ENDIF() + + RETURN() +ENDIF() + SET(CPACK_PACKAGE_VERSION ${MARIADB_ODBC_VERSION_MAJOR}.${MARIADB_ODBC_VERSION_MINOR}.${MARIADB_ODBC_VERSION_PATCH}) SET(CPACK_COMPONENTS_ALL ClientPlugins ODBCLibs Documentation) -#SET(CPACK_COMPONENTS_ALL ODBCLibs Documentation) SET(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1) -# TODO: Make it optional -# Disable dbug information for release builds -#SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DDBUG_OFF") -#SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DDBUG_OFF") -#SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DDBUG_OFF") -#SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DDBUG_OFF") - - # We need to determine the last parameter for SQLColAttribute: # Older UnixODBC version expect SQLPOINTER while Windows expects SQLLEN * TRY_COMPILE(COMPILE_OK ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/cmake/sqlcolattribute.c) @@ -360,25 +341,6 @@ TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${MARIADB_CLIENT_TARGET_NAME} ${ODBC_INSTL # Currently on Windows only IF(WIN32) - IF(ALL_PLUGINS_STATIC) - ADD_CUSTOM_COMMAND(TARGET maodbc POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -DDRIVER_LIB_DIR=$ - -DPLUGINS_LIB_DIR="" - -DINSTALLER_TOOLS_DIR=$ - -DPLUGINS_SUBDIR_NAME=${MARIADB_DEFAULT_PLUGINS_SUBDIR} - -DFILE_IN=${CMAKE_SOURCE_DIR}/wininstall/binaries_dir.xml.in - -DFILE_OUT=${CMAKE_SOURCE_DIR}/wininstall/binaries_dir.xml - -P ${CMAKE_SOURCE_DIR}/cmake/ConfigureFile.cmake) - ELSE() - ADD_CUSTOM_COMMAND(TARGET maodbc POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -DDRIVER_LIB_DIR=$ - -DPLUGINS_LIB_DIR=$ - -DINSTALLER_TOOLS_DIR=$ - -DPLUGINS_SUBDIR_NAME=${MARIADB_DEFAULT_PLUGINS_SUBDIR} - -DFILE_IN=${CMAKE_SOURCE_DIR}/wininstall/binaries_dir.xml.in - -DFILE_OUT=${CMAKE_SOURCE_DIR}/wininstall/binaries_dir.xml - -P ${CMAKE_SOURCE_DIR}/cmake/ConfigureFile.cmake) - ENDIF() ####### MAODBCS ####### ADD_LIBRARY(maodbcs SHARED ${DSN_DIALOG_FILES} ${CMAKE_SOURCE_DIR}/dsn/mariadb_odbc_setup.def) SET_TARGET_PROPERTIES(maodbcs PROPERTIES LANGUAGE C) @@ -394,7 +356,29 @@ ENDIF() SET(CPACK_PACKAGE_NAME "mariadb-connector-odbc") IF(WIN32) - ADD_SUBDIRECTORY(wininstall) + IF(WITH_MSI) + IF(ALL_PLUGINS_STATIC) + ADD_CUSTOM_COMMAND(TARGET maodbc POST_BUILD + COMMAND ${CMAKE_COMMAND} ARGS -DDRIVER_LIB_DIR=$ + -DPLUGINS_LIB_DIR="" + -DINSTALLER_TOOLS_DIR=$ + -DPLUGINS_SUBDIR_NAME=${MARIADB_DEFAULT_PLUGINS_SUBDIR} + -DFILE_IN=${CMAKE_SOURCE_DIR}/wininstall/binaries_dir.xml.in + -DFILE_OUT=${CMAKE_SOURCE_DIR}/wininstall/binaries_dir.xml + -P ${CMAKE_SOURCE_DIR}/cmake/ConfigureFile.cmake) + ELSE() + ADD_CUSTOM_COMMAND(TARGET maodbc POST_BUILD + COMMAND ${CMAKE_COMMAND} ARGS -DDRIVER_LIB_DIR=$ + -DPLUGINS_LIB_DIR=$ + -DINSTALLER_TOOLS_DIR=$ + -DPLUGINS_SUBDIR_NAME=${MARIADB_DEFAULT_PLUGINS_SUBDIR} + -DFILE_IN=${CMAKE_SOURCE_DIR}/wininstall/binaries_dir.xml.in + -DFILE_OUT=${CMAKE_SOURCE_DIR}/wininstall/binaries_dir.xml + -P ${CMAKE_SOURCE_DIR}/cmake/ConfigureFile.cmake) + + ENDIF() + ADD_SUBDIRECTORY(wininstall) + ENDIF() ADD_EXECUTABLE(install_driver osxinstall/install_driver.c) TARGET_LINK_LIBRARIES(install_driver ${PLATFORM_DEPENDENCIES} ${ODBC_INSTLIBS}) ELSE() @@ -425,47 +409,35 @@ ELSE() COMPONENT Documentation) ENDIF() -# Tests. Checking if we have them. May be not the case if we are building from source package -IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt") - IF(WITH_UNIT_TESTS) - ADD_SUBDIRECTORY(test) - IF(NOT WIN32) - # Configuring ini files for testing with UnixODBC - SET_VALUE(TEST_DRIVER "maodbc_test") - SET_VALUE(TEST_DSN "maodbc_test") - SET_VALUE(TEST_PORT "3306") - SET_VALUE(TEST_SERVER "localhost") - SET_VALUE(TEST_SOCKET "") - SET_VALUE(TEST_SCHEMA "test") - SET_VALUE(TEST_UID "root") - SET_VALUE(TEST_PASSWORD "") - SET_VALUE(TEST_USETLS "0") - - MESSAGE(STATUS "Configurig Test Driver: ${TEST_DRIVER}, Test DSN: ${TEST_DSN}, tcp://${TEST_UID}@${TEST_SERVER}:${TEST_PORT}/${TEST_SCHEMA} socket: ${TEST_SOCKET}") +# Tests. Should be verified by now, if we have them. +IF(WITH_UNIT_TESTS) + ADD_SUBDIRECTORY(test) + IF(NOT WIN32) + # Configuring ini files for testing with UnixODBC + MESSAGE(STATUS "Configurig Test Driver: ${TEST_DRIVER}, Test DSN: ${TEST_DSN}, tcp://${TEST_UID}@${TEST_SERVER}:${TEST_PORT}/${TEST_SCHEMA} socket: ${TEST_SOCKET}") - ADD_CUSTOM_COMMAND(TARGET maodbc POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -DDRIVER_LIB_LOCATION=$ - -DTEST_DRIVER=${TEST_DRIVER} - -DFILE_IN=${CMAKE_SOURCE_DIR}/test/odbcinst.ini.in - -DFILE_OUT=${CMAKE_BINARY_DIR}/test/odbcinst.ini - -P ${CMAKE_SOURCE_DIR}/cmake/ConfigureFile.cmake - ) + ADD_CUSTOM_COMMAND(TARGET maodbc POST_BUILD + COMMAND ${CMAKE_COMMAND} ARGS -DDRIVER_LIB_LOCATION=$ + -DTEST_DRIVER=${TEST_DRIVER} + -DFILE_IN=${CMAKE_SOURCE_DIR}/test/odbcinst.ini.in + -DFILE_OUT=${CMAKE_BINARY_DIR}/test/odbcinst.ini + -P ${CMAKE_SOURCE_DIR}/cmake/ConfigureFile.cmake + ) - ADD_CUSTOM_COMMAND(TARGET maodbc POST_BUILD - COMMAND ${CMAKE_COMMAND} ARGS -DTEST_DRIVER=$ - -DTEST_DSN=${TEST_DSN} - -DTEST_PORT=${TEST_PORT} - -DTEST_SERVER=${TEST_SERVER} - -DTEST_SOCKET=${TEST_SOCKET} - -DTEST_SCHEMA=${TEST_SCHEMA} - -DTEST_UID=${TEST_UID} - -DTEST_PASSWORD="${TEST_PASSWORD}" - -DTEST_USETLS=${TEST_USETLS} - -DFILE_IN=${CMAKE_SOURCE_DIR}/test/odbc.ini.in - -DFILE_OUT=${CMAKE_BINARY_DIR}/test/odbc.ini - -P ${CMAKE_SOURCE_DIR}/cmake/ConfigureFile.cmake - ) - ENDIF() + ADD_CUSTOM_COMMAND(TARGET maodbc POST_BUILD + COMMAND ${CMAKE_COMMAND} ARGS -DTEST_DRIVER=$ + -DTEST_DSN=${TEST_DSN} + -DTEST_PORT=${TEST_PORT} + -DTEST_SERVER=${TEST_SERVER} + -DTEST_SOCKET=${TEST_SOCKET} + -DTEST_SCHEMA=${TEST_SCHEMA} + -DTEST_UID=${TEST_UID} + -DTEST_PASSWORD="${TEST_PASSWORD}" + -DTEST_USETLS=${TEST_USETLS} + -DFILE_IN=${CMAKE_SOURCE_DIR}/test/odbc.ini.in + -DFILE_OUT=${CMAKE_BINARY_DIR}/test/odbc.ini + -P ${CMAKE_SOURCE_DIR}/cmake/ConfigureFile.cmake + ) ENDIF() ENDIF() diff --git a/cmake/FindDM.cmake b/cmake/FindDM.cmake index 3688cfdd..602bd00f 100755 --- a/cmake/FindDM.cmake +++ b/cmake/FindDM.cmake @@ -73,8 +73,8 @@ ELSE() ENDIF() ELSE() - SET(LIB_PATHS "${LIB_PATHS}" "/usr/local/lib/i386-linux-gnu" "/usr/lib/i386-linux-gnu" "/usr/local/lib/i686-linux-gnu" "/usr/lib/i686-linux-gnu") - SET(LIB_SUFFIX "lib" "i386-linux-gnu" "i686-linux-gnu") + SET(LIB_PATHS "${LIB_PATHS}" "/usr/local/lib/i386-linux-gnu" "/usr/lib/i386-linux-gnu" "/usr/local/lib/i686-linux-gnu" "/usr/lib/i686-linux-gnu" "/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}") + SET(LIB_SUFFIX "lib" "i386-linux-gnu" "i686-linux-gnu" "${CMAKE_LIBRARY_ARCHITECTURE}") ENDIF() FIND_PATH(ODBC_INCLUDE_DIR sql.h diff --git a/cmake/options_defaults.cmake b/cmake/options_defaults.cmake new file mode 100644 index 00000000..f902b59a --- /dev/null +++ b/cmake/options_defaults.cmake @@ -0,0 +1,87 @@ +# +# Copyright (C) 2021 MariaDB Corporation AB +# +# Redistribution and use is allowed according to the terms of the New +# BSD license. +# For details see the COPYING-CMAKE-SCRIPTS file. +# + +OPTION(BUILD_INTERACTIVE_TESTS "Build test(s) requiring user interaction" OFF) +OPTION(USE_INTERACTIVE_TESTS "Run interactive test(s) with ctest" OFF) + +IF(WIN32) + OPTION(WITH_MSI "Build MSI installation package" OFF) + OPTION(WITH_SIGNCODE "Digitally sign files" OFF) + + OPTION(MARIADB_LINK_DYNAMIC "Link Connector/C library dynamically" OFF) + OPTION(ALL_PLUGINS_STATIC "Compile all plugins in, i.e. make them static" ON) +ELSE() + OPTION(MARIADB_LINK_DYNAMIC "Link Connector/C library dynamically" ON) + SET(BUILD_INTERACTIVE_TESTS OFF) + SET(USE_INTERACTIVE_TESTS OFF) + OPTION(ALL_PLUGINS_STATIC "Compile all plugins in, i.e. make them static" OFF) +ENDIF() + +IF(USE_INTERACTIVE_TESTS) + SET(BUILD_INTERACTIVE_TESTS ON) +ENDIF() + +OPTION(WITH_SSL "Enables use of TLS/SSL library" ON) +OPTION(WITH_UNIT_TESTS "Build test suite" ON) +OPTION(USE_SYSTEM_INSTALLED_LIB "Use installed in the syctem C/C library and do not build one" OFF) +OPTION(DIRECT_LINK_TESTS "Link tests directly against driver library(bypass DM)" OFF) +# This is to be used for some testing scenarious, obviously. e.g. testing of the connector installation. +OPTION(BUILD_TESTS_ONLY "Build only tests and nothing else" OFF) +OPTION(WITH_UNIT_TESTS "Build unit tests" ON) + +IF(BUILD_TESTS_ONLY) + SET(WITH_UNIT_TESTS ON) +ENDIF() +IF(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt") + SET(WITH_UNIT_TESTS OFF) +ENDIF() + +IF(NOT EXISTS ${CMAKE_SOURCE_DIR}/libmariadb) + SET(USE_SYSTEM_INSTALLED_LIB ON) +ENDIF() + +IF(APPLE) + SET(CMAKE_SKIP_BUILD_RPATH FALSE) + SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) + SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) + OPTION(WITH_IODBC "Build with iOdbc" ON) + CMAKE_POLICY(SET CMP0042 NEW) + CMAKE_POLICY(SET CMP0068 NEW) + SET(CMAKE_INSTALL_RPATH "") + SET(CMAKE_INSTALL_NAME_DIR "") + SET(CMAKE_MACOSX_RPATH ON) +ELSE() + OPTION(WITH_IODBC "Build with iOdbc" OFF) +ENDIF() + +IF(WIN32) + # Currently limiting this feature to Windows only, where it's most probably going to be only used + IF(ALL_PLUGINS_STATIC) + SET(CLIENT_PLUGIN_AUTH_GSSAPI_CLIENT "STATIC") + SET(CLIENT_PLUGIN_DIALOG "STATIC") + SET(CLIENT_PLUGIN_CLIENT_ED25519 "STATIC") + SET(CLIENT_PLUGIN_CACHING_SHA2_PASSWORD "STATIC") + SET(CLIENT_PLUGIN_SHA256_PASSWORD "STATIC") + SET(CLIENT_PLUGIN_MYSQL_CLEAR_PASSWORD "STATIC") + SET(CLIENT_PLUGIN_MYSQL_OLD_PASSWORD "STATIC") + SET(MARIADB_LINK_DYNAMIC OFF) + ENDIF() +ELSE() + # Defaults for creating odbc(inst).ini for tests with Unix/iOdbc + IF(WITH_UNIT_TESTS) + SET_VALUE(TEST_DRIVER "maodbc_test") + SET_VALUE(TEST_DSN "maodbc_test") + SET_VALUE(TEST_PORT "3306") + SET_VALUE(TEST_SERVER "localhost") + SET_VALUE(TEST_SOCKET "") + SET_VALUE(TEST_SCHEMA "test") + SET_VALUE(TEST_UID "root") + SET_VALUE(TEST_PASSWORD "") + SET_VALUE(TEST_USETLS "0") + ENDIF() +ENDIF() diff --git a/libmariadb b/libmariadb index 180c5437..7cf38704 160000 --- a/libmariadb +++ b/libmariadb @@ -1 +1 @@ -Subproject commit 180c543704d627a50a52aaf60e24ca14e0ec4686 +Subproject commit 7cf38704c916996e7b44f62c9e644cc6d001ee91 diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 88a9d618..f280b290 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,3 +1,22 @@ +# ************************************************************************************ +# Copyright (C) 2013,2021 MariaDB Corporation AB +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not see +# or write to the Free Software Foundation, Inc., +# 51 Franklin St., Fifth Floor, Boston, MA 02110, USA +# ************************************************************************************ + IF (DIRECT_LINK_TESTS) MESSAGE(STATUS "Configuring tests for direct linking against the connector") ELSE() @@ -6,10 +25,6 @@ ENDIF() # Seems like libodbc needs it IF(NOT WIN32) - INCLUDE(${CMAKE_SOURCE_DIR}/cmake/FindIconv.cmake) - IF (ICONV_EXTERNAL) - SET(PLATFORM_DEPENDENCIES ${PLATFORM_DEPENDENCIES} ${ICONV_LIBRARIES}) - ENDIF() SET(PLATFORM_DEPENDENCIES ${PLATFORM_DEPENDENCIES} "pthread" "dl") ENDIF() @@ -24,7 +39,7 @@ SET (ODBC_TESTS "error" "param" "result1" "result2" "multistatement") SET(COMMON_TEST_SOURCES tap.h) # Interactive makes sense on WIN32 only atm -IF (WIN32 AND (BUILD_INTERACTIVE_TESTS OR USE_INTERACTIVE_TESTS)) +IF (BUILD_INTERACTIVE_TESTS) MESSAGE(STATUS "Configuring to build interactive test") SET (ODBC_TESTS ${ODBC_TESTS} "interactive") ENDIF() diff --git a/test/blob.c b/test/blob.c index 472e6b1f..bb4b1094 100644 --- a/test/blob.c +++ b/test/blob.c @@ -633,25 +633,25 @@ ODBC_TEST(t_text_fetch) rc = SQLFetch(Stmt); while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { - printf("# row '%ld' (lengths:", row_count); + printf("# row '%lld' (lengths:", (long long)row_count); rc = SQLGetData(Stmt,1,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN*6,&length); CHECK_STMT_RC(Stmt, rc); - printf("%ld", length); + printf("%lld", (long long)length); FAIL_IF(length != 255, "assert"); rc = SQLGetData(Stmt,2,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN*6,&length); CHECK_STMT_RC(Stmt, rc); - printf(",%ld", length); + printf(",%lld", (long long)length); FAIL_IF(length != TEST_ODBC_TEXT_LEN*3, "assert"); rc = SQLGetData(Stmt,3,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN*6,&length); CHECK_STMT_RC(Stmt, rc); - printf(",%ld", length); + printf(",%lld", (long long)length); FAIL_IF(length != (SQLINTEGER)(TEST_ODBC_TEXT_LEN*4), "assert"); rc = SQLGetData(Stmt,4,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN*6,&length); CHECK_STMT_RC(Stmt, rc); - printf(",%ld)\n", length); + printf(",%zd)\n", length); FAIL_IF(length != TEST_ODBC_TEXT_LEN*6-1, "assert"); row_count++; diff --git a/test/cursor.c b/test/cursor.c index a05f4e35..7bb9b78b 100644 --- a/test/cursor.c +++ b/test/cursor.c @@ -2460,7 +2460,7 @@ ODBC_TEST(bug6741) for(i = 0; i < BUG6741_VALS; ++i) { printf("xval[%d] = %d\n", i, results[i].xval); - printf("ylen[%d] = %ld\n", i, results[i].ylen); + printf("ylen[%d] = %lld\n", i, (unsigned long long)results[i].ylen); is_num(results[i].xval, i); if(i % 2) { @@ -3045,7 +3045,7 @@ typedef struct { } t_dae_row; ODBC_TEST(t_dae_setpos_insert) { - SQLPOINTER holder= (SQLPOINTER) 0xcfcdcecc; + SQLPOINTER holder= (SQLPOINTER) 0xcfcdceccLL; SQLPOINTER paramptr; SQLLEN offset= 0; t_dae_row data[2]; @@ -3105,7 +3105,7 @@ ODBC_TEST(t_dae_setpos_update) SQLCHAR *yval= (SQLCHAR *) "1234567890"; SQLCHAR yout[11]; SQLLEN ylen= SQL_LEN_DATA_AT_EXEC(9); - SQLPOINTER holder= (SQLPOINTER) 0xcfcdcecc; + SQLPOINTER holder= (SQLPOINTER) 0xcfcdceccLL; SQLPOINTER paramptr; /* setup */ diff --git a/test/error.c b/test/error.c index 1c175d6b..72f41b0f 100644 --- a/test/error.c +++ b/test/error.c @@ -366,7 +366,7 @@ ODBC_TEST(getdata_need_nullind) return OK; } -ODBC_TEST(connection_timeout) +ODBC_TEST(connection_readwrite_timeout) { SQLHDBC Connection1; SQLHSTMT Stmt1; @@ -879,7 +879,7 @@ MA_ODBC_TESTS my_tests[]= {bind_notenoughparam1, "bind_notenoughparam1"}, {bind_notenoughparam2, "bind_notenoughparam2" }, {getdata_need_nullind, "getdata_need_nullind"}, - {connection_timeout, "connection_timeout"}, + {connection_readwrite_timeout, "connection_readwrite_timeout"}, {t_handle_err, "t_handle_err"}, {sqlerror, "sqlerror"}, {t_bug27158, "t_bug27158"}, diff --git a/test/multistatement.c b/test/multistatement.c index 4d94a95c..a8cfd8e7 100644 --- a/test/multistatement.c +++ b/test/multistatement.c @@ -664,7 +664,6 @@ ODBC_TEST(test_autocommit) SQLUINTEGER ac; unsigned long noMsOptions= my_options & (~67108864); SQLCHAR tracked[256]; - SQLRETURN rc; CHECK_ENV_RC(Env, SQLAllocConnect(Env, &Dbc)); CHECK_DBC_RC(Dbc, SQLSetConnectOption(Dbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_ON)); diff --git a/test/prepare.c b/test/prepare.c index e5acd742..22ec8009 100644 --- a/test/prepare.c +++ b/test/prepare.c @@ -737,7 +737,7 @@ ODBC_TEST(t_prepare) rc = SQLFetch(Stmt); mystmt(Stmt,rc); - fprintf(stdout," outdata: %d, %s(%ld)\n", nodata,szodata,nlen); + fprintf(stdout," outdata: %d, %s(%lld)\n", nodata, szodata, (unsigned long long)nlen); IS(nodata == 200); rc = SQLFetch(Stmt);