| diff -Naur nanodbc-2.12.4/CMakeLists.txt nanodbc-2.12.4-patched/CMakeLists.txt |
| --- nanodbc-2.12.4/CMakeLists.txt 2016-03-22 00:55:36.000000000 +0300 |
| +++ nanodbc-2.12.4-patched/CMakeLists.txt 2018-05-15 08:31:25.024541100 +0300 |
| @@ -1,13 +1,10 @@ |
| cmake_minimum_required(VERSION 2.8.7) |
| project(nanodbc) |
| |
| -option(NANODBC_USE_UNICODE "build with unicode support turned on" OFF) |
| option(NANODBC_USE_BOOST_CONVERT "build using Boost.Locale for string convert" OFF) |
| option(NANODBC_HANDLE_NODATA_BUG "enable special handling for SQL_NO_DATA (required for vertica)" OFF) |
| -option(NANODBC_STATIC "build static instead of shared library" OFF) |
| option(NANODBC_EXAMPLES "build examples" ON) |
| option(NANODBC_TEST "build tests" ON) |
| -option(NANODBC_INSTALL "generate install target" ON) |
| option(NANODBC_ENABLE_LIBCXX "Use libc++ if available." ON) |
| |
| if(APPLE) |
| @@ -106,9 +103,6 @@ |
| set(CMAKE_FLAGS "${CMAKE_FLAGS} ${ODBC_CFLAGS}") |
| execute_process(COMMAND ${ODBC_CONFIG} --libs |
| OUTPUT_VARIABLE ODBC_LINK_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) |
| - if(NANODBC_USE_UNICODE) |
| - add_definitions(-DNANODBC_USE_IODBC_WIDE_STRINGS) |
| - endif() |
| endif() |
| endif() |
| |
| @@ -130,17 +124,6 @@ |
| add_definitions(-DNANODBC_ODBC_VERSION=${NANODBC_ODBC_VERSION}) |
| endif() |
| |
| -if(NANODBC_USE_UNICODE) |
| - message(STATUS "Unicode support: Turned on") |
| - add_definitions(-DNANODBC_USE_UNICODE) |
| - if(MSVC) |
| - # Sets "Use Unicode Character Set" property in Visual Studio projects |
| - add_definitions(-DUNICODE -D_UNICODE) |
| - endif() |
| -else() |
| - message(STATUS "Unicode support: Turned off") |
| -endif() |
| - |
| if(NANODBC_USE_BOOST_CONVERT) |
| message(STATUS "Boost string convert: Turned on") |
| add_definitions(-DNANODBC_USE_BOOST_CONVERT) |
| @@ -178,38 +161,109 @@ |
| set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${ODBC_LINK_FLAGS}") |
| elseif(MSVC) |
| set(ODBC_LIBRARIES odbc32.lib odbccp32.lib Ws2_32.lib) |
| +elseif(MINGW) |
| + set(ODBC_LIBRARIES odbc32 odbccp32) |
| endif() |
| |
| ######################################## |
| -## nanodbc library target |
| +## nanodbc static library target - non unicode |
| ######################################## |
| -if(NANODBC_STATIC) |
| - add_library(nanodbc STATIC src/nanodbc.cpp src/nanodbc.h) |
| - message(STATUS "Build target: STATIC") |
| -else() |
| - add_library(nanodbc SHARED src/nanodbc.cpp src/nanodbc.h) |
| - target_link_libraries(nanodbc ${Boost_LIBRARIES} ${ODBC_LIBRARIES}) |
| - message(STATUS "Build target: SHARED") |
| +add_library(nanodbc_static STATIC src/nanodbc.cpp src/nanodbc.h) |
| +set_target_properties(nanodbc_static PROPERTIES OUTPUT_NAME nanodbc) |
| +target_link_libraries(nanodbc_static PUBLIC ${Boost_LIBRARIES} ${ODBC_LIBRARIES}) |
| + |
| +if(UNIX) |
| + set_target_properties(nanodbc_static PROPERTIES |
| + COMPILE_FLAGS "${ODBC_CFLAGS}" |
| + LIBRARY_OUTPUT_DIRECTORY "lib") |
| endif() |
| |
| +install( |
| + TARGETS nanodbc_static |
| + LIBRARY DESTINATION lib |
| + ARCHIVE DESTINATION lib) |
| + |
| +######################################## |
| +## nanodbc shared library target - non unicode |
| +######################################## |
| +add_library(nanodbc_shared SHARED src/nanodbc.cpp src/nanodbc.h) |
| +set_target_properties(nanodbc_shared PROPERTIES OUTPUT_NAME nanodbc) |
| +target_link_libraries(nanodbc_shared PUBLIC ${Boost_LIBRARIES} ${ODBC_LIBRARIES}) |
| + |
| if(UNIX) |
| - set_target_properties(nanodbc PROPERTIES |
| + set_target_properties(nanodbc_shared PROPERTIES |
| COMPILE_FLAGS "${ODBC_CFLAGS}" |
| LIBRARY_OUTPUT_DIRECTORY "lib") |
| endif() |
| |
| -if(NANODBC_INSTALL) |
| - install(FILES src/nanodbc.h DESTINATION include) |
| - if(NANODBC_STATIC) |
| - install(TARGETS nanodbc ARCHIVE DESTINATION lib) |
| - else() |
| - install(TARGETS nanodbc LIBRARY DESTINATION lib) |
| - endif() |
| - message(STATUS "Target install: Turned on") |
| -else() |
| - message(STATUS "Target install: Turned off") |
| +install( |
| + TARGETS nanodbc_shared |
| + RUNTIME DESTINATION bin |
| + LIBRARY DESTINATION lib |
| + ARCHIVE DESTINATION lib) |
| + |
| +######################################## |
| +## nanodbc static library target - unicode |
| +######################################## |
| +add_library(nanodbc_unicode_static STATIC src/nanodbc.cpp src/nanodbc.h) |
| +set_target_properties(nanodbc_unicode_static PROPERTIES OUTPUT_NAME nanodbc_unicode) |
| +target_link_libraries(nanodbc_unicode_static PUBLIC ${Boost_LIBRARIES} ${ODBC_LIBRARIES}) |
| +target_compile_definitions(nanodbc_unicode_static PUBLIC -DNANODBC_USE_UNICODE) |
| + |
| +if(WIN32) |
| + # Sets "Use Unicode Character Set" property in Visual Studio projects |
| + target_compile_definitions(nanodbc_unicode_static PUBLIC -DUNICODE -D_UNICODE) |
| endif() |
| |
| +if(ODBC_CONFIG) |
| + target_compile_definitions(nanodbc_unicode_static PUBLIC -DNANODBC_USE_IODBC_WIDE_STRINGS) |
| +endif() |
| + |
| +if(UNIX) |
| + set_target_properties(nanodbc_unicode_static PROPERTIES |
| + COMPILE_FLAGS "${ODBC_CFLAGS}" |
| + LIBRARY_OUTPUT_DIRECTORY "lib") |
| +endif() |
| + |
| +install( |
| + TARGETS nanodbc_unicode_static |
| + LIBRARY DESTINATION lib |
| + ARCHIVE DESTINATION lib) |
| + |
| +######################################## |
| +## nanodbc shared library target - unicode |
| +######################################## |
| +add_library(nanodbc_unicode_shared SHARED src/nanodbc.cpp src/nanodbc.h) |
| +set_target_properties(nanodbc_unicode_shared PROPERTIES OUTPUT_NAME nanodbc_unicode) |
| +target_link_libraries(nanodbc_unicode_shared PUBLIC ${Boost_LIBRARIES} ${ODBC_LIBRARIES}) |
| +target_compile_definitions(nanodbc_unicode_shared PUBLIC -DNANODBC_USE_UNICODE) |
| + |
| +if(WIN32) |
| + # Sets "Use Unicode Character Set" property in Visual Studio projects |
| + target_compile_definitions(nanodbc_unicode_shared PUBLIC -DUNICODE -D_UNICODE) |
| +endif() |
| + |
| +if(ODBC_CONFIG) |
| + target_compile_definitions(nanodbc_unicode_shared PUBLIC -DNANODBC_USE_IODBC_WIDE_STRINGS) |
| +endif() |
| + |
| +if(UNIX) |
| + set_target_properties(nanodbc_unicode_shared PROPERTIES |
| + COMPILE_FLAGS "${ODBC_CFLAGS}" |
| + LIBRARY_OUTPUT_DIRECTORY "lib") |
| +endif() |
| + |
| +install( |
| + TARGETS nanodbc_unicode_shared |
| + RUNTIME DESTINATION bin |
| + LIBRARY DESTINATION lib |
| + ARCHIVE DESTINATION lib) |
| + |
| +######################################## |
| +## headers |
| +######################################## |
| +install(FILES src/nanodbc.h DESTINATION include) |
| + |
| ######################################## |
| ## examples |
| ######################################## |
| diff -Naur nanodbc-2.12.4/examples/CMakeLists.txt nanodbc-2.12.4-patched/examples/CMakeLists.txt |
| --- nanodbc-2.12.4/examples/CMakeLists.txt 2016-03-22 00:55:36.000000000 +0300 |
| +++ nanodbc-2.12.4-patched/examples/CMakeLists.txt 2018-05-15 08:31:25.040141200 +0300 |
| @@ -4,12 +4,10 @@ |
| include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src ${ODBC_INCLUDE_DIR}) |
| link_directories(${CMAKE_BINARY_DIR}/lib) |
| |
| -foreach(example ${examples}) |
| - add_executable(example_${example} ${example}.cpp) |
| - if (NANODBC_STATIC) |
| - target_link_libraries(example_${example} nanodbc ${ODBC_LIBRARIES}) |
| - else() |
| - target_link_libraries(example_${example} nanodbc "${ODBC_LINK_FLAGS}") |
| - endif() |
| - add_dependencies(examples example_${example}) |
| +foreach(config "" "_unicode") |
| + foreach(example ${examples}) |
| + add_executable(example_${example}${config} ${example}.cpp) |
| + target_link_libraries(example_${example}${config} nanodbc${config}_shared) |
| + add_dependencies(examples example_${example}${config}) |
| + endforeach() |
| endforeach() |
| diff -Naur nanodbc-2.12.4/examples/table_schema.cpp nanodbc-2.12.4-patched/examples/table_schema.cpp |
| --- nanodbc-2.12.4/examples/table_schema.cpp 2016-03-22 00:55:36.000000000 +0300 |
| +++ nanodbc-2.12.4-patched/examples/table_schema.cpp 2018-05-15 08:31:25.040141200 +0300 |
| @@ -11,7 +11,7 @@ |
| #include <string> |
| |
| #ifdef _WIN32 |
| -#define NOMINMAX |
| +//#define NOMINMAX |
| #include <windows.h> // SQLLEN, SQLULEN, SQLHWND |
| #endif |
| #include <sql.h> |
| diff -Naur nanodbc-2.12.4/src/nanodbc.cpp nanodbc-2.12.4-patched/src/nanodbc.cpp |
| --- nanodbc-2.12.4/src/nanodbc.cpp 2016-03-22 00:55:36.000000000 +0300 |
| +++ nanodbc-2.12.4-patched/src/nanodbc.cpp 2018-05-15 08:31:25.040141200 +0300 |
| @@ -44,7 +44,7 @@ |
| |
| #ifdef _WIN32 |
| // needs to be included above sql.h for windows |
| - #define NOMINMAX |
| + //#define NOMINMAX |
| #include <windows.h> |
| #endif |
| |
| diff -Naur nanodbc-2.12.4/test/base_test_fixture.h nanodbc-2.12.4-patched/test/base_test_fixture.h |
| --- nanodbc-2.12.4/test/base_test_fixture.h 2016-03-22 00:55:36.000000000 +0300 |
| +++ nanodbc-2.12.4-patched/test/base_test_fixture.h 2018-05-15 08:31:25.040141200 +0300 |
| @@ -31,7 +31,7 @@ |
| |
| #ifdef _WIN32 |
| // needs to be included above sql.h for windows |
| -#define NOMINMAX |
| +//#define NOMINMAX |
| #include <windows.h> |
| #endif |
| #include <sql.h> |
| @@ -39,6 +39,17 @@ |
| |
| struct base_test_fixture |
| { |
| + // Database vendor |
| + enum DBVendor |
| + { |
| + unknown, |
| + Oracle, |
| + SQLite, |
| + PostgreSQL, |
| + MySQL, |
| + SQLServer |
| + }; |
| + |
| // To invoke a unit test over all integral types, use: |
| // |
| typedef std::tuple< |
| @@ -71,9 +82,87 @@ |
| |
| nanodbc::string_type connection_string_; |
| |
| + DBVendor vendor_; |
| + |
| + DBVendor get_vendor(const nanodbc::string_type &dbms) |
| + { |
| + REQUIRE(!dbms.empty()); |
| + if (contains_string(dbms, NANODBC_TEXT("Oracle"))) |
| + return Oracle; |
| + else if (contains_string(dbms, NANODBC_TEXT("SQLite"))) |
| + return Oracle; |
| + else if (contains_string(dbms, NANODBC_TEXT("PostgreSQL"))) |
| + return PostgreSQL; |
| + else if (contains_string(dbms, NANODBC_TEXT("MySQL"))) |
| + return MySQL; |
| + else if (contains_string(dbms, NANODBC_TEXT("SQLServer"))) |
| + return SQLServer; |
| + else |
| + return unknown; |
| + } |
| + |
| + nanodbc::string_type get_binary_type_name() |
| + { |
| + switch (vendor_) |
| + { |
| + case SQLite: |
| + return NANODBC_TEXT("blob"); |
| + case PostgreSQL: |
| + return NANODBC_TEXT("bytea"); |
| + case MySQL: |
| + return NANODBC_TEXT("varbinary(10)"); |
| + default: |
| + return NANODBC_TEXT("varbinary"); // Oracle, SQL Server,...standard type? |
| + } |
| + } |
| + |
| + nanodbc::string_type get_primary_key_name(const nanodbc::string_type &assumed) |
| + { |
| + switch (vendor_) |
| + { |
| + case MySQL: |
| + return NANODBC_TEXT("PRIMARY"); |
| + default: |
| + return assumed; |
| + } |
| + } |
| + |
| + short get_data_type(const nanodbc::string_type &name) |
| + { |
| + if (name == NANODBC_TEXT("float")) |
| + return (vendor_ == MySQL) ? SQL_REAL : SQL_FLOAT; |
| + else |
| + return 0; |
| + } |
| + |
| + int get_data_type_size(const nanodbc::string_type &name, short radix = -1) |
| + { |
| + if (name == NANODBC_TEXT("float")) |
| + { |
| + if (radix == 10) |
| + return 17; // total number of digits allowed |
| + else if (radix != 2) |
| + WARN("numeric radix different than 2 or 10: was " + std::to_string(radix)); |
| + |
| + if (vendor_ == MySQL) |
| + return 7; // total number of bytes allowed |
| + else |
| + return 53; // total number of bits allowed |
| + } |
| + else if (name == NANODBC_TEXT("text")) |
| + { |
| + static const int get_data_type_size_text[] = {-1, 4000, 8190, 1073741824, 65535, 65535}; |
| + return get_data_type_size_text[vendor_]; |
| + } |
| + return -1; |
| + } |
| + |
| nanodbc::connection connect() |
| { |
| - return nanodbc::connection(connection_string_); |
| + nanodbc::connection connection(connection_string_); |
| + REQUIRE(connection.connected()); |
| + vendor_ = get_vendor(connection.dbms_name()); |
| + return connection; |
| } |
| |
| static void check_rows_equal(nanodbc::result results, int rows) |
| @@ -169,7 +258,6 @@ |
| void catalog_columns_test() |
| { |
| nanodbc::connection connection = connect(); |
| - REQUIRE(connection.connected()); |
| nanodbc::catalog catalog(connection); |
| |
| // Successfully tested against SQL Server and PostgreSQL (9.x) only. |
| @@ -193,23 +281,7 @@ |
| // Determine DBMS-specific features, properties and values |
| // NOTE: If handling DBMS-specific features become overly complicated, |
| // we may decided to remove such features from the tests. |
| - nanodbc::string_type binary_type_name; |
| - { |
| - nanodbc::string_type const dbms = connection.dbms_name(); |
| - REQUIRE(!dbms.empty()); |
| - if (contains_string(dbms, NANODBC_TEXT("SQLite"))) |
| - { |
| - binary_type_name = NANODBC_TEXT("blob"); |
| - } |
| - else if (contains_string(dbms, NANODBC_TEXT("PostgreSQL"))) |
| - { |
| - binary_type_name = NANODBC_TEXT("bytea"); |
| - } |
| - else |
| - { |
| - binary_type_name = NANODBC_TEXT("varbinary"); // Oracle, MySQL, SQL Server,...standard type? |
| - } |
| - } |
| + nanodbc::string_type binary_type_name = get_binary_type_name(); |
| REQUIRE(!binary_type_name.empty()); |
| |
| nanodbc::string_type const table_name(NANODBC_TEXT("catalog_columns_test")); |
| @@ -252,11 +324,9 @@ |
| |
| REQUIRE(columns.next()); |
| REQUIRE(columns.column_name() == NANODBC_TEXT("c2")); |
| - REQUIRE(columns.sql_data_type() == SQL_FLOAT); |
| - if (columns.numeric_precision_radix() == 10) |
| - REQUIRE(columns.column_size() == 17); // total number of digits allowed |
| - else |
| - REQUIRE(columns.column_size() == 53); // total number of bits allowed |
| + REQUIRE(columns.sql_data_type() == get_data_type(NANODBC_TEXT("float"))); |
| + REQUIRE(columns.column_size() == |
| + get_data_type_size(NANODBC_TEXT("float"), columns.numeric_precision_radix())); |
| REQUIRE(columns.nullable() == SQL_NULLABLE); |
| if (!columns.is_nullable().empty()) // nullability determined |
| REQUIRE(columns.is_nullable() == NANODBC_TEXT("YES")); |
| @@ -290,7 +360,7 @@ |
| REQUIRE(columns.column_name() == NANODBC_TEXT("c7")); |
| REQUIRE((columns.sql_data_type() == SQL_LONGVARCHAR || columns.sql_data_type() == SQL_WLONGVARCHAR)); |
| // PostgreSQL uses MaxLongVarcharSize=8190, which is configurable in odbc.ini |
| - REQUIRE((columns.column_size() == 2147483647 || columns.column_size() == 8190)); // TODO: confirm "text" max length |
| + REQUIRE(columns.column_size() == get_data_type_size(NANODBC_TEXT("text"))); |
| |
| REQUIRE(columns.next()); |
| REQUIRE(columns.column_name() == NANODBC_TEXT("c8")); |
| @@ -308,7 +378,6 @@ |
| void catalog_primary_keys_test() |
| { |
| nanodbc::connection connection = connect(); |
| - REQUIRE(connection.connected()); |
| nanodbc::catalog catalog(connection); |
| |
| // Successfully tested against SQL Server and PostgreSQL (9.x) only. |
| @@ -321,12 +390,12 @@ |
| execute(connection, NANODBC_TEXT("create table ") + table_name |
| + NANODBC_TEXT("(i int NOT NULL, CONSTRAINT pk_simple_test PRIMARY KEY (i));")); |
| |
| - nanodbc::catalog::primary_keys keys = catalog.find_primary_keys(table_name); |
| + nanodbc::catalog::primary_keys keys = catalog.find_primary_keys(table_name); |
| REQUIRE(keys.next()); |
| REQUIRE(keys.table_name() == table_name); |
| REQUIRE(keys.column_name() == NANODBC_TEXT("i")); |
| REQUIRE(keys.column_number() == 1); |
| - REQUIRE(keys.primary_key_name() == NANODBC_TEXT("pk_simple_test")); |
| + REQUIRE(keys.primary_key_name() == get_primary_key_name(NANODBC_TEXT("pk_simple_test"))); |
| // expect no more records |
| REQUIRE(!keys.next()); |
| } |
| @@ -338,18 +407,18 @@ |
| execute(connection, NANODBC_TEXT("create table ") + table_name |
| + NANODBC_TEXT("(a int, b smallint, CONSTRAINT pk_composite_test PRIMARY KEY(a, b));")); |
| |
| - nanodbc::catalog::primary_keys keys = catalog.find_primary_keys(table_name); |
| + nanodbc::catalog::primary_keys keys = catalog.find_primary_keys(table_name); |
| REQUIRE(keys.next()); |
| REQUIRE(keys.table_name() == table_name); |
| REQUIRE(keys.column_name() == NANODBC_TEXT("a")); |
| REQUIRE(keys.column_number() == 1); |
| - REQUIRE(keys.primary_key_name() == NANODBC_TEXT("pk_composite_test")); |
| + REQUIRE(keys.primary_key_name() == get_primary_key_name(NANODBC_TEXT("pk_composite_test"))); |
| |
| REQUIRE(keys.next()); |
| REQUIRE(keys.table_name() == table_name); |
| REQUIRE(keys.column_name() == NANODBC_TEXT("b")); |
| REQUIRE(keys.column_number() == 2); |
| - REQUIRE(keys.primary_key_name() == NANODBC_TEXT("pk_composite_test")); |
| + REQUIRE(keys.primary_key_name() == get_primary_key_name(NANODBC_TEXT("pk_composite_test"))); |
| |
| // expect no more records |
| REQUIRE(!keys.next()); |
| @@ -359,7 +428,6 @@ |
| void catalog_tables_test() |
| { |
| nanodbc::connection connection = connect(); |
| - REQUIRE(connection.connected()); |
| nanodbc::catalog catalog(connection); |
| |
| // Successfully tested against SQL Server and PostgreSQL (9.x) only. |
| @@ -672,7 +740,6 @@ |
| void null_test() |
| { |
| nanodbc::connection connection = connect(); |
| - REQUIRE(connection.connected()); |
| |
| drop_table(connection, NANODBC_TEXT("null_test")); |
| execute(connection, NANODBC_TEXT("create table null_test (a int, b varchar(10));")); |
| @@ -709,7 +776,6 @@ |
| void simple_test() |
| { |
| nanodbc::connection connection = connect(); |
| - REQUIRE(connection.connected()); |
| REQUIRE(connection.native_dbc_handle()); |
| REQUIRE(connection.native_env_handle()); |
| REQUIRE(connection.transactions() == std::size_t(0)); |
| @@ -822,7 +888,6 @@ |
| void string_test() |
| { |
| nanodbc::connection connection = connect(); |
| - REQUIRE(connection.connected()); |
| REQUIRE(connection.native_dbc_handle()); |
| REQUIRE(connection.native_env_handle()); |
| REQUIRE(connection.transactions() == std::size_t(0)); |
| @@ -849,10 +914,12 @@ |
| void transaction_test() |
| { |
| nanodbc::connection connection = connect(); |
| - REQUIRE(connection.connected()); |
| |
| drop_table(connection, NANODBC_TEXT("transaction_test")); |
| - execute(connection, NANODBC_TEXT("create table transaction_test (i int);")); |
| + if (vendor_ == MySQL) |
| + execute(connection, NANODBC_TEXT("create table transaction_test (i int) ENGINE = INNODB;")); |
| + else |
| + execute(connection, NANODBC_TEXT("create table transaction_test (i int);")); |
| |
| nanodbc::statement statement(connection); |
| prepare(statement, NANODBC_TEXT("insert into transaction_test (i) values (?);")); |
| diff -Naur nanodbc-2.12.4/test/CMakeLists.txt nanodbc-2.12.4-patched/test/CMakeLists.txt |
| --- nanodbc-2.12.4/test/CMakeLists.txt 2016-03-22 00:55:36.000000000 +0300 |
| +++ nanodbc-2.12.4-patched/test/CMakeLists.txt 2018-05-15 08:31:25.040141200 +0300 |
| @@ -23,20 +23,18 @@ |
| file(GLOB headers *.h *.hpp) |
| add_custom_target(tests DEPENDS tests catch) |
| set(test_list mysql odbc sqlite) |
| -foreach(test_item ${test_list}) |
| - set(test_name ${test_item}_tests) |
| - add_executable(${test_name} ${test_item}_test.cpp ${headers}) |
| - add_dependencies(${test_name} catch) |
| - if (NANODBC_STATIC) |
| - target_link_libraries(${test_name} nanodbc ${ODBC_LIBRARIES}) |
| - else() |
| - target_link_libraries(${test_name} nanodbc "${ODBC_LINK_FLAGS}") |
| - endif() |
| - add_test(NAME ${test_name} COMMAND ${test_name}) |
| - add_custom_target(${test_item}_test |
| - COMMAND ${CMAKE_CTEST_COMMAND} --force-new-ctest-process --output-on-failure -R ${test_name}) |
| - add_custom_target(${test_item}_check |
| - COMMAND ${CMAKE_CTEST_COMMAND} --force-new-ctest-process --output-on-failure -R ${test_name} |
| - DEPENDS ${test_name}) |
| - add_dependencies(tests ${test_name}) |
| +foreach(config "" "_unicode") |
| + foreach(test_item ${test_list}) |
| + set(test_name ${test_item}${config}_tests) |
| + add_executable(${test_name} ${test_item}_test.cpp ${headers}) |
| + add_dependencies(${test_name} catch) |
| + target_link_libraries(${test_name} nanodbc${config}_shared) |
| + add_test(NAME ${test_name} COMMAND ${test_name}) |
| + add_custom_target(${test_item}${config}_test |
| + COMMAND ${CMAKE_CTEST_COMMAND} --force-new-ctest-process --output-on-failure -R ${test_name}) |
| + add_custom_target(${test_item}${config}_check |
| + COMMAND ${CMAKE_CTEST_COMMAND} --force-new-ctest-process --output-on-failure -R ${test_name} |
| + DEPENDS ${test_name}) |
| + add_dependencies(tests ${test_name}) |
| + endforeach() |
| endforeach() |