include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CPPUNIT_INCLUDE_DIR}
    ${UTILITIES_TESTCOMMON_INCLUDE_DIR}
    ${MYSQL_INCLUDE_DIR}
    Common
    MySql
    Odbc
    PostGis
)

add_subdirectory( Common )
add_subdirectory( Odbc )
add_subdirectory( MySql )
add_subdirectory( PostGis )

add_definitions( -D__STDC_LIMIT_MACROS -DRDBI_STATIC )

# Ensure test data is copied to where the unit test binary is generated
file(GLOB GenericRdbmsUnitTest_TESTDATA
    "*.txt"
    "*.xml"
    "*.xslt"
    "*.mdb"
    "*.xls"
    "*.DBF"
    "*.INF"
    "*.MDX"
)
file(COPY ${GenericRdbmsUnitTest_TESTDATA} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})

################ MySQL Unit Test ################

set( UnitTestMySql_SRCS
    MySqlTestRegister.cpp
)

add_executable( UnitTestMySql ${UnitTestMySql_SRCS} )
add_sanitizers( UnitTestMySql )

if( CMAKE_COMPILER_IS_GNUCXX )
    target_link_libraries( UnitTestMySql
        -Wl,-whole-archive
        ${CPPUNIT_LIBRARIES}
        FdoRdbms
        rdbi
        mysqldr
        Gdbi
        LTManager
        LockManager
        genericrdbms_util
        FdoRdbmsMySQL_Fdo
        FdoRdbmsMySQL_SchemaMgr
        FdoRdbmsMySQL_SchemaMgr_Lp
        FdoRdbmsMySQL_SchemaMgr_Ph
        geometry_fgf
        SmLpGrd
        SmGrd
        SmPhCfgGrd
        SmPhGrd
        SmPhRdGrd
        ProvidersCommon
        SchemaMgr
        TestCommon
        CommonUnitTests
        MySqlUnitTests
        -Wl,-no-whole-archive
    )
else( CMAKE_COMPILER_IS_GNUCXX )
    target_link_libraries( UnitTestMySql
        ${CPPUNIT_LIBRARIES}
        FdoRdbms
        rdbi
        mysqldr
        Gdbi
        LTManager
        LockManager
        genericrdbms_util
        FdoRdbmsMySQL_Fdo
        FdoRdbmsMySQL_SchemaMgr
        FdoRdbmsMySQL_SchemaMgr_Lp
        FdoRdbmsMySQL_SchemaMgr_Ph
        geometry_fgf
        SmLpGrd
        SmGrd
        SmPhCfgGrd
        SmPhGrd
        SmPhRdGrd
        ProvidersCommon
        SchemaMgr
        TestCommon
        CommonUnitTests
        MySqlUnitTests
    )
endif( CMAKE_COMPILER_IS_GNUCXX )
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}
)

################ ODBC Unit Test ################

set( UnitTestOdbc_SRCS
    OdbcTestRegister.cpp
)

add_executable( UnitTestOdbc ${UnitTestOdbc_SRCS} )
add_sanitizers( UnitTestOdbc )

if( CMAKE_COMPILER_IS_GNUCXX )
    target_link_libraries( UnitTestOdbc
        -Wl,-whole-archive
        ${CPPUNIT_LIBRARIES}
        FdoRdbms
        rdbi
        FdoODBCDriver
        Gdbi
        LTManager
        LockManager
        genericrdbms_util
        FdoRdbmsODBC_Fdo
        FdoRdbmsODBC_SchemaMgr
        FdoRdbmsODBC_SchemaMgr_Lp
        FdoRdbmsODBC_SchemaMgr_Ph
        geometry_fgf
        SmLpGrd
        SmGrd
        SmPhCfgGrd
        SmPhGrd
        SmPhRdGrd
        ProvidersCommon
        SchemaMgr
        TestCommon
        CommonUnitTests
        OdbcUnitTests
        -Wl,-no-whole-archive
    )
else( CMAKE_COMPILER_IS_GNUCXX )
    target_link_libraries( UnitTestOdbc
        ${CPPUNIT_LIBRARIES}
        FdoRdbms
        rdbi
        FdoODBCDriver
        Gdbi
        LTManager
        LockManager
        genericrdbms_util
        FdoRdbmsODBC_Fdo
        FdoRdbmsODBC_SchemaMgr
        FdoRdbmsODBC_SchemaMgr_Lp
        FdoRdbmsODBC_SchemaMgr_Ph
        geometry_fgf
        SmLpGrd
        SmGrd
        SmPhCfgGrd
        SmPhGrd
        SmPhRdGrd
        ProvidersCommon
        SchemaMgr
        TestCommon
        CommonUnitTests
        OdbcUnitTests
    )
endif( CMAKE_COMPILER_IS_GNUCXX )
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}
)

################ PostGIS Unit Test ################

set( UnitTestPostGis_SRCS
    PostGisTestRegister.cpp
)

add_executable( UnitTestPostGis ${UnitTestPostGis_SRCS} )
add_sanitizers( UnitTestPostGis )

if( CMAKE_COMPILER_IS_GNUCXX )
    target_link_libraries( UnitTestPostGis
        -Wl,-whole-archive
        ${CPPUNIT_LIBRARIES}
        ProvidersCommon
        SchemaMgr
        FdoRdbms
        rdbi
        postgisdr
        Gdbi
        LTManager
        LockManager
        genericrdbms_util
        FdoRdbmsPostGis_Fdo
        FdoRdbmsPostGis_SchemaMgr
        FdoRdbmsPostGis_SchemaMgr_Lp
        FdoRdbmsPostGis_SchemaMgr_Ph
        geometry_fgf
        SmLpGrd
        SmGrd
        SmPhCfgGrd
        SmPhGrd
        SmPhRdGrd
        TestCommon
        CommonUnitTests
        PostGisUnitTests
        -Wl,-no-whole-archive
    )
else( CMAKE_COMPILER_IS_GNUCXX )
    target_link_libraries( UnitTestPostGis
        ${CPPUNIT_LIBRARIES}
        ProvidersCommon
        SchemaMgr
        FdoRdbms
        rdbi
        postgisdr
        Gdbi
        LTManager
        LockManager
        genericrdbms_util
        FdoRdbmsPostGis_Fdo
        FdoRdbmsPostGis_SchemaMgr
        FdoRdbmsPostGis_SchemaMgr_Lp
        FdoRdbmsPostGis_SchemaMgr_Ph
        geometry_fgf
        SmLpGrd
        SmGrd
        SmPhCfgGrd
        SmPhGrd
        SmPhRdGrd
        TestCommon
        CommonUnitTests
        PostGisUnitTests
    )
endif( CMAKE_COMPILER_IS_GNUCXX )
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}
)