set( UnitTest_IncludeDirs ${CMAKE_CURRENT_SOURCE_DIR} ${GenericRdbms_IncludeDirs} ${CPPUNIT_INCLUDE_DIR} ${UTILITIES_TESTCOMMON_INCLUDE_DIR} Common ) if (MSVC) add_definitions( -DRDBI_STATIC -D_CRT_SECURE_NO_DEPRECATE ) msvc_use_mbcs() # Original vcxproj files also suppresses inheritance via dominance warning (C4250) add_definitions(/wd4250) else (MSVC) add_definitions( -D__STDC_LIMIT_MACROS -DRDBI_STATIC ) endif (MSVC) # In the original vcxproj files, this set of files was included inline for every # unit test target. Here we go with the Linux approach of a single static library # which means we don't have to recompile the same set of sources for every unit # test target set (UnitTestRdbmsCommon_SRCS Common/ConnectionUtil.cpp Common/ConnectTests.cpp Common/DataTypeTests.cpp Common/DescribeSchemaTest.cpp Common/FdoAdvancedSelectTest.cpp Common/FdoApplySchemaTest.cpp Common/FdoAssociationDeleteTest.cpp Common/FdoAssociationInsertTest.cpp Common/FdoAssociationSchemaTest.cpp Common/FdoAssociationSelectTest.cpp Common/FdoAssociationUpdateTest.cpp Common/FdoCapabilityTest.cpp Common/FdoConnectTest.cpp Common/FdoConnectionInfoTest.cpp Common/FdoConstraintsTest.cpp Common/FdoDatastoreTest.cpp Common/FdoDeleteTest.cpp Common/FdoFilterTest.cpp Common/FdoExpressionFunctionTest.cpp Common/FdoForeignSchemaTest.cpp Common/FdoImportExportTest.cpp Common/FdoInsertTest.cpp Common/FdoMultiThreadTest.cpp Common/FdoSchemaRollbackTest.cpp Common/FdoSchemaTest.cpp Common/FdoSelectTest.cpp Common/FdoSpatialContextTest.cpp Common/FdoSqlCmdTest.cpp Common/FdoTransactionTest.cpp Common/FdoUpdateTest.cpp Common/GeometryTests.cpp Common/ReaderTest.cpp Common/MessageTest.cpp Common/SchemaMgrTests.cpp Common/SchemaOverrideUtil.cpp Common/SelectTests.cpp Common/XmlFormatter.cpp Common/UnitTestUtil.cpp Common/Pch.cpp ) if (UNIX) list (APPEND UnitTestRdbmsCommon_SRCS Common/glibpatch.cpp) endif (UNIX) add_library(UnitTestRdbmsCommon STATIC ${UnitTestRdbmsCommon_SRCS}) target_include_directories(UnitTestRdbmsCommon PRIVATE ${UnitTest_IncludeDirs} ) # Ensure test data is copied to where the unit test binary is generated file(GLOB GenericRdbmsUnitTest_TESTDATA "*.txt" "*.txt" "apply*.xml" "config*.xml" "M*.xml" "Ora*.xml" "Sch*.xml" "spatial*.xml" "syn*.xml" "tm*.xml" "*.xslt" "*.mdb" "*.xls" "*.DBF" "*.INF" "*.MDX" ) file(COPY ${GenericRdbmsUnitTest_TESTDATA} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) ################ MySQL Unit Test ################ set( UnitTestMySql_SRCS MySqlTestRegister.cpp MySql/MySqlConnectionUtil.cpp MySql/MySqlConnectTests.cpp MySql/MySqlDataTypeTests.cpp MySql/MySqlDescribeSchemaTest.cpp MySql/MySqlFdoAdvancedSelectTest.cpp MySql/MySqlFdoApplySchemaTest.cpp MySql/MySqlFdoAssociationDeleteTest.cpp MySql/MySqlFdoAssociationInsertTest.cpp MySql/MySqlFdoAssociationSchemaTest.cpp MySql/MySqlFdoAssociationSelectTest.cpp MySql/MySqlFdoAssociationUpdateTest.cpp MySql/MySqlFdoCapabilityTest.cpp MySql/MySqlFdoConnectionInfoTest.cpp MySql/MySqlFdoConnectTest.cpp MySql/MySqlFdoConstraintsTest.cpp MySql/MySqlFdoDatastoreTest.cpp MySql/MySqlFdoDeleteTest.cpp MySql/MySqlFdoFilterTest.cpp MySql/MySqlFdoExpressionFunctionTest.cpp MySql/MySqlFdoForeignSchemaTest.cpp MySql/MySqlFdoImportExportTest.cpp MySql/MySqlFdoInsertTest.cpp MySql/MySqlFdoMultiThreadTest.cpp MySql/MySqlFdoSchemaRollbackTest.cpp MySql/MySqlFdoSchemaTest.cpp MySql/MySqlFdoSelectTest.cpp MySql/MySqlFdoSqlCmdTest.cpp MySql/MySqlFdoUpdateTest.cpp MySql/MySqlGeometryTests.cpp MySql/MySqlSchemaMgrTests.cpp MySql/MySqlSchemaOverrideUtil.cpp MySql/MySqlSelectTests.cpp ) add_unit_test_entry_point(UnitTestMySql_SRCS "MySQLProvider") add_executable( UnitTestMySql ${UnitTestMySql_SRCS} ) add_sanitizers( UnitTestMySql ) if (MSVC) # HACK: Something in this dependency chain wants the opposite MSVCRT? For now, take their warning # suggestion and put in /NODEFAULTLIB set_target_properties( UnitTestMySql PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"MSVCRT\"" ) set_target_properties( UnitTestMySql PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB:\"MSVCRTD\"" ) set_target_properties( UnitTestMySql PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/NODEFAULTLIB:\"MSVCRTD\"" ) set_target_properties( UnitTestMySql PROPERTIES LINK_FLAGS_MINSIZEREL "/NODEFAULTLIB:\"MSVCRTD\"" ) endif (MSVC) target_include_directories( UnitTestMySql PRIVATE ${UnitTest_IncludeDirs} ${MYSQL_INCLUDE_DIR} MySql Odbc PostGis ) if( CMAKE_COMPILER_IS_GNUCXX ) target_link_libraries( UnitTestMySql -Wl,-whole-archive ${CPPUNIT_LIBRARIES} FdoRdbmsGeneric rdbi MySQLDriver Gdbi LongTransactionManager LockManager genericrdbms_util MySQLSchemaMgr geometry_fgf GrdSchemaMgr ProvidersCommon SchemaMgr TestCommon UnitTestRdbmsCommon -Wl,-no-whole-archive ) target_link_libraries( UnitTestMySql ${ZLIB_LIBRARIES} ${MYSQL_LIBRARIES} FDO${FDO_VERSION_SUFFIX} ExpressionEngine${FDO_VERSION_SUFFIX} RdbmsOverrides${FDO_VERSION_SUFFIX} MySQLOverrides${FDO_VERSION_SUFFIX} MySQLProvider${FDO_VERSION_SUFFIX} ) else( CMAKE_COMPILER_IS_GNUCXX ) target_link_libraries( UnitTestMySql ${CPPUNIT_LIBRARIES} ${ZLIB_LIBRARIES} ${MYSQL_LIBRARIES} FDO FDOCommon FDOGeometry FDOSpatial ExpressionEngine RdbmsOverrides MySQLOverrides MySQLProvider FdoRdbmsGeneric rdbi MySQLDriver Gdbi LongTransactionManager LockManager genericrdbms_util MySQLSchemaMgr geometry_fgf GrdSchemaMgr ProvidersCommon SchemaMgr TestCommon UnitTestRdbmsCommon ) endif( CMAKE_COMPILER_IS_GNUCXX ) ################ ODBC Unit Test ################ set(UnitTestOdbc_SRCS) # TODO: This was *really* confusing when I first saw it, we should really # just combine the 2 files and #ifdef the appropriate content within if (WIN32) list(APPEND UnitTestOdbc_SRCS Odbc/OdbcTestRegister.cpp) else (WIN32) list(APPEND UnitTestOdbc_SRCS OdbcTestRegister.cpp) endif (WIN32) list(APPEND UnitTestOdbc_SRCS Odbc/OdbcBaseSetup.cpp Odbc/OdbcConnectionUtil.cpp Odbc/OdbcDescribeSchemaTest.cpp Odbc/OdbcFdoAdvancedSelectTest.cpp Odbc/OdbcFdoConnectionInfoTest.cpp Odbc/OdbcFdoConnectTest.cpp Odbc/OdbcFdoDeleteTest.cpp Odbc/OdbcFdoInsertTest.cpp Odbc/OdbcFdoMultiThreadTest.cpp Odbc/OdbcFdoSchemaTest.cpp Odbc/OdbcFdoSelectTest.cpp Odbc/OdbcFdoSqlCmdTest.cpp Odbc/OdbcFdoUpdateTest.cpp ) add_unit_test_entry_point(UnitTestOdbc_SRCS "ODBCProvider") add_executable( UnitTestOdbc ${UnitTestOdbc_SRCS} ) add_sanitizers( UnitTestOdbc ) target_include_directories( UnitTestOdbc PRIVATE ${UnitTest_IncludeDirs} Odbc ) if( CMAKE_COMPILER_IS_GNUCXX ) target_link_libraries( UnitTestOdbc -Wl,-whole-archive ${CPPUNIT_LIBRARIES} FdoRdbmsGeneric rdbi ODBCDriver Gdbi LongTransactionManager LockManager genericrdbms_util ODBCSchemaMgr geometry_fgf GrdSchemaMgr ProvidersCommon SchemaMgr TestCommon UnitTestRdbmsCommon -Wl,-no-whole-archive ) target_link_libraries( UnitTestOdbc ${ODBC_LIBRARY} ${ODBCINST_LIBRARY} FDO${FDO_VERSION_SUFFIX} ExpressionEngine${FDO_VERSION_SUFFIX} RdbmsOverrides${FDO_VERSION_SUFFIX} ODBCOverrides${FDO_VERSION_SUFFIX} ODBCProvider${FDO_VERSION_SUFFIX} ) else( CMAKE_COMPILER_IS_GNUCXX ) target_link_libraries( UnitTestOdbc ${CPPUNIT_LIBRARIES} FDO FDOCommon FDOGeometry FDOSpatial ExpressionEngine RdbmsOverrides ODBCOverrides ODBCProvider FdoRdbmsGeneric rdbi ODBCDriver Gdbi LongTransactionManager LockManager genericrdbms_util ODBCSchemaMgr geometry_fgf GrdSchemaMgr ProvidersCommon SchemaMgr TestCommon UnitTestRdbmsCommon ) endif( CMAKE_COMPILER_IS_GNUCXX ) ################ PostGIS Unit Test ################ set( UnitTestPostGis_SRCS PostGisTestRegister.cpp PostGis/PostGisConnectionUtil.cpp PostGis/PostGisConnectTests.cpp PostGis/PostGisDescribeSchemaTest.cpp PostGis/PostGisFdoAdvancedSelectTest.cpp PostGis/PostGisFdoApplySchemaTest.cpp PostGis/PostGisFdoConnectionInfoTest.cpp PostGis/PostGisFdoConnectTest.cpp PostGis/PostGisFdoConstraintsTest.cpp PostGis/PostGisFdoDatastoreTest.cpp PostGis/PostGisFdoDeleteTest.cpp PostGis/PostGisFdoImportExportTest.cpp PostGis/PostGisFdoInsertTest.cpp PostGis/PostGisFdoMultiThreadTest.cpp PostGis/PostGisFdoSelectTest.cpp PostGis/PostGisFdoSpatialContextTest.cpp PostGis/PostGisFdoSqlCmdTest.cpp PostGis/PostGisFdoUpdateTest.cpp PostGis/PostGisGeometryTests.cpp PostGis/PostGisSchemaMgrTests.cpp PostGis/PostGisSchemaOverrideUtil.cpp ) add_unit_test_entry_point(UnitTestPostGis_SRCS "PostgreSQLProvider") add_executable( UnitTestPostGis ${UnitTestPostGis_SRCS} ) add_sanitizers( UnitTestPostGis ) target_include_directories( UnitTestPostGis PRIVATE ${UnitTest_IncludeDirs} PostGis ) if( CMAKE_COMPILER_IS_GNUCXX ) target_link_libraries( UnitTestPostGis -Wl,-whole-archive ${CPPUNIT_LIBRARIES} ProvidersCommon SchemaMgr FdoRdbmsGeneric rdbi PostGISDriver Gdbi LongTransactionManager LockManager genericrdbms_util PostGISSchemaMgr geometry_fgf GrdSchemaMgr TestCommon UnitTestRdbmsCommon -Wl,-no-whole-archive ) target_link_libraries( UnitTestPostGis ${POSTGRESQL_LIBRARIES} FDO${FDO_VERSION_SUFFIX} ExpressionEngine${FDO_VERSION_SUFFIX} RdbmsOverrides${FDO_VERSION_SUFFIX} PostgreSQLOverrides${FDO_VERSION_SUFFIX} PostgreSQLProvider${FDO_VERSION_SUFFIX} ) else( CMAKE_COMPILER_IS_GNUCXX ) target_link_libraries( UnitTestPostGis ${CPPUNIT_LIBRARIES} FDO FDOCommon FDOGeometry FDOSpatial ExpressionEngine RdbmsOverrides PostgreSQLOverrides PostgreSQLProvider ProvidersCommon SchemaMgr FdoRdbmsGeneric rdbi PostGISDriver Gdbi LongTransactionManager LockManager genericrdbms_util PostGISSchemaMgr geometry_fgf GrdSchemaMgr TestCommon UnitTestRdbmsCommon ) endif( CMAKE_COMPILER_IS_GNUCXX ) ################ SQL Server Spatial Unit Test ################ set( UnitTestSQLServerSpatial_SRCS SQLServerSpatial/SqlServerTestRegister.cpp SQLServerSpatial/SqlServerConnectionUtil.cpp SQLServerSpatial/SqlServerConnectTests.cpp SQLServerSpatial/SqlServerDataTypeTests.cpp SQLServerSpatial/SqlServerDescribeSchemaTest.cpp SQLServerSpatial/SqlServerFdoAdvancedSelectTest.cpp SQLServerSpatial/SqlServerFdoApplySchemaTest.cpp SQLServerSpatial/SqlServerFdoAssociationDeleteTest.cpp SQLServerSpatial/SqlServerFdoAssociationInsertTest.cpp SQLServerSpatial/SqlServerFdoAssociationSchemaTest.cpp SQLServerSpatial/SqlServerFdoAssociationSelectTest.cpp SQLServerSpatial/SqlServerFdoAssociationUpdateTest.cpp SQLServerSpatial/SqlServerFdoCapabilityTest.cpp SQLServerSpatial/SqlServerFdoConnectionInfoTest.cpp SQLServerSpatial/SqlServerFdoConnectTest.cpp SQLServerSpatial/SqlServerFdoConstraintsTest.cpp SQLServerSpatial/SqlServerFdoDatastoreTest.cpp SQLServerSpatial/SqlServerFdoDeleteTest.cpp SQLServerSpatial/SqlServerFdoExpressionFunctionTest.cpp SQLServerSpatial/SqlServerFdoFilterTest.cpp SQLServerSpatial/SqlServerFdoForeignSchemaTest.cpp SQLServerSpatial/SqlServerFdoImportExportTest.cpp SQLServerSpatial/SqlServerFdoInsertTest.cpp SQLServerSpatial/SqlServerFdoMultiThreadTest.cpp SQLServerSpatial/SqlServerFdoSchemaRollbackTest.cpp SQLServerSpatial/SqlServerFdoSchemaTest.cpp SQLServerSpatial/SqlServerFdoSelectTest.cpp SQLServerSpatial/SqlServerFdoSpatialContextTest.cpp SQLServerSpatial/SqlServerFdoSqlCmdTest.cpp SQLServerSpatial/SqlServerFdoTransactionTest.cpp SQLServerSpatial/SqlServerFdoUpdateTest.cpp SQLServerSpatial/SqlServerGeometryTests.cpp #SQLServerSpatial/SqlServerLongTransactionTests.cpp SQLServerSpatial/SqlServerReaderTest.cpp SQLServerSpatial/SqlServerSchemaMgrTests.cpp SQLServerSpatial/SqlServerSchemaOverrideUtil.cpp SQLServerSpatial/SqlServerSelectTests.cpp ) add_unit_test_entry_point(UnitTestSQLServerSpatial_SRCS "SQLServerSpatial") if (WIN32) add_executable( UnitTestSQLServerSpatial ${UnitTestSQLServerSpatial_SRCS} ) add_sanitizers( UnitTestSQLServerSpatial ) target_compile_definitions( UnitTestSQLServerSpatial PRIVATE -DSQL_SERVER_XPLAT -DRDBI_DEF_SSQL ) target_include_directories( UnitTestSQLServerSpatial PRIVATE ${UnitTest_IncludeDirs} SQLServerSpatial ) if( CMAKE_COMPILER_IS_GNUCXX ) #target_link_libraries( UnitTestSQLServerSpatial # -Wl,-whole-archive # ${CPPUNIT_LIBRARIES} # ProvidersCommon # SchemaMgr # FdoRdbmsGeneric # rdbi # SQLServerSpatialODBCDriver # Gdbi # LongTransactionManager # LockManager # genericrdbms_util # PostGISSchemaMgr # geometry_fgf # GrdSchemaMgr # TestCommon # -Wl,-no-whole-archive #) #target_link_libraries( UnitTestSQLServerSpatial # ${POSTGRESQL_LIBRARIES} # FDO${FDO_VERSION_SUFFIX} # ExpressionEngine${FDO_VERSION_SUFFIX} # RdbmsOverrides${FDO_VERSION_SUFFIX} # PostgreSQLOverrides${FDO_VERSION_SUFFIX} # PostgreSQLProvider${FDO_VERSION_SUFFIX} #) else( CMAKE_COMPILER_IS_GNUCXX ) target_link_libraries( UnitTestSQLServerSpatial ${CPPUNIT_LIBRARIES} FDO FDOCommon FDOGeometry FDOSpatial ExpressionEngine RdbmsOverrides SQLServerSpatialOverrides SQLServerSpatialProvider ProvidersCommon SchemaMgr FdoRdbmsGeneric rdbi SQLServerSpatialODBCDriver Gdbi LongTransactionManager LockManager genericrdbms_util SQLServerSpatialOverrides geometry_fgf GrdSchemaMgr TestCommon UnitTestRdbmsCommon ) endif( CMAKE_COMPILER_IS_GNUCXX ) endif (WIN32) if (NOT WIN32) # Remove providers.xml from output as that is windows-only file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/providers.xml") # Replace with our own configured version set(FDO_MYSQL_PROVIDER_NAME "OSGeo.MySQL") set(FDO_MYSQL_PROVIDER_LIBRARY "../MySQL/libMySQLProvider${FDO_VERSION_SUFFIX}.so") set(FDO_ODBC_PROVIDER_NAME "OSGeo.ODBC") set(FDO_ODBC_PROVIDER_LIBRARY "../ODBC/libODBCProvider${FDO_VERSION_SUFFIX}.so") set(FDO_POSTGRESQL_PROVIDER_NAME "OSGeo.PostgreSQL") set(FDO_POSTGRESQL_PROVIDER_LIBRARY "../PostGis/libPostgreSQLProvider${FDO_VERSION_SUFFIX}.so") # This provider doesn't exist on Linux, but if/when it does ... set(FDO_SQLSERVER_PROVIDER_NAME "OSGeo.SQLServerSpatial") set(FDO_SQLSERVER_PROVIDER_LIBRARY "../SQLServerSpatial/libSQLServerSpatialProvider${FDO_VERSION_SUFFIX}.so") configure_file(${CMAKE_MODULE_PATH}/../configs/providers.rdbms.xml.in ${CMAKE_CURRENT_BINARY_DIR}/providers.xml) endif (NOT WIN32)