add_library(pglablib STATIC
    Pglablib.cpp
    ASyncDBConnection.cpp
    ConnectionConfig.cpp
    TestConnection.cpp
    catalog/PgType.cpp
    catalog/PgTypeContainer.cpp
    catalog/PgNamespace.cpp
    catalog/PgClass.cpp
    catalog/PgDatabase.cpp
    catalog/PgDatabaseContainer.cpp
    catalog/PgAuthId.cpp
    catalog/PgAuthIdContainer.cpp
    catalog/PgClassContainer.cpp
    catalog/PgDatabaseCatalog.cpp
    catalog/PgNamespaceContainer.cpp
    catalog/PgAttribute.cpp
    catalog/PgContainer.cpp
    catalog/PgAttributeContainer.cpp
    catalog/PgIndex.cpp
    catalog/PgIndexContainer.cpp
    catalog/PgConstraint.cpp
    catalog/PgConstraintContainer.cpp
    ParamListJson.cpp
    ParamListModel.cpp
    sqlite/SQLiteConnection.cpp
    sqlite/sqlite3.c
    ui/catalog/tables/TableNode.cpp
    ui/catalog/tables/TableSize.cpp
    ui/catalog/tables/TableTreeBuilder.cpp
    util.cpp
    SqlFormattingUtils.cpp
    catalog/PgKeywordList.cpp
    QueryGenerator.cpp
    ResultSourceMapping.cpp
    catalog/PgObject.cpp
    catalog/PgTablespace.cpp
    catalog/PgTablespaceContainer.cpp
    codebuilder/LanguageConfig.cpp
    codebuilder/CodeBuilder.cpp
    codebuilder/NameManglingRules.cpp
    codebuilder/DefaultConfigs.cpp
    codebuilder/TypeMappings.cpp
    codebuilder/IndentationConfig.cpp
    codebuilder/StructureTemplate.cpp
    FormatToStream.cpp
    codebuilder/StringLiteralRules.cpp
    codebuilder/StringEscapeRule.cpp
    catalog/PgTrigger.cpp
    catalog/PgTriggerContainer.cpp
    catalog/PgProc.cpp
    catalog/PgProcContainer.cpp
    catalog/PgDatabaseObject.cpp
    catalog/PgServerObject.cpp
    catalog/PgNamespaceObject.cpp
    catalog/PgCollation.cpp
    catalog/PgCollationContainer.cpp
    catalog/PgInherits.cpp
    catalog/PgInheritsContainer.cpp
    SelectionEditorFactory.cpp
    catalog/PgAm.cpp
    model/TypeModelFactory.cpp
    model/TypeSelectionItemModel.cpp
    catalog/PgAmContainer.cpp
    model/CollationModel.cpp
    model/CollationModelFactory.cpp
    catalog/PgLanguageContainer.cpp
    catalog/PgLanguage.cpp
    catalog/PgAcl.cpp
    catalog/PgSequence.cpp
    catalog/PgSequenceContainer.cpp
    utils/HumanReadableBytes.cpp
    utils/KeyStrengthener.cpp
    utils/PasswordManager.cpp
    utils/PostgresqlUrlParser.cpp
    Pglablib.h
    ASyncDBConnection.h
    ConnectionConfig.h
    TestConnection.h
    catalog/PgType.h
    catalog/PgTypeContainer.h
    catalog/PgNamespace.h
    catalog/PgClass.h
    catalog/PgDatabase.h
    catalog/PgDatabaseContainer.h
    catalog/PgContainer.h
    catalog/PgAuthId.h
    catalog/PgAuthIdContainer.h
    catalog/PgClassContainer.h
    catalog/PgDatabaseCatalog.h
    catalog/PgNamespaceContainer.h
    catalog/PgAttribute.h
    catalog/PgAttributeContainer.h
    catalog/PgIndex.h
    catalog/PgIndexContainer.h
    catalog/PgConstraint.h
    catalog/PgConstraintContainer.h
    ParamListJson.h
    ParamListModel.h
    sqlite/SQLiteConnection.h
    sqlite/sqlite3.h
    sqlite/sqlite3ext.h
    ui/catalog/tables/TableNode.h
    ui/catalog/tables/TableSize.h
    ui/catalog/tables/TableTreeBuilder.h
    util.h
    SqlFormattingUtils.h
    catalog/PgCatalogTypes.h
    catalog/PgKeywordList.h
    QueryGenerator.h
    ResultSourceMapping.h
    catalog/PgObject.h
    catalog/PgTablespace.h
    catalog/PgTablespaceContainer.h
    codebuilder/LanguageConfig.h
    codebuilder/CodeBuilder.h
    codebuilder/NameManglingRules.h
    codebuilder/DefaultConfigs.h
    codebuilder/TypeMappings.h
    codebuilder/IndentationConfig.h
    codebuilder/StructureTemplate.h
    FormatToStream.h
    codebuilder/ResultLoopTemplate.h
    codebuilder/StringEscapeRule.h
    codebuilder/StringLiteralRules.h
    catalog/PgTrigger.h
    catalog/PgTriggerContainer.h
    catalog/PgProc.h
    catalog/PgProcContainer.h
    catalog/PgDatabaseObject.h
    catalog/PgServerObject.h
    catalog/PgNamespaceObject.h
    catalog/PgCollation.h
    catalog/PgCollationContainer.h
    AbstractModelFactory.h
    AbstractEditorFactory.h
    catalog/PgInherits.h
    catalog/PgInheritsContainer.h
    SelectionEditorFactory.h
    model/TypeSelectionItemModel.h
    model/TypeModelFactory.h
    catalog/PgAm.h
    catalog/PgAmContainer.h
    model/CollationModel.h
    model/CollationModelFactory.h
    catalog/PgLanguageContainer.h
    catalog/PgLanguage.h
    catalog/PgAcl.h
    catalog/PgSequence.h
    catalog/PgSequenceContainer.h
    utils/HumanReadableBytes.h
    utils/KeyStrengthener.h
    utils/PasswordManager.h
    utils/PostgresqlUrlParser.h
    )

find_package(Boost REQUIRED COMPONENTS container timer chrono assert)

find_path(BOTAN_INCLUDE_DIR botan/hash.h REQUIRED)
find_library(BOTAN_LIBRARY NAMES botan-3 botan REQUIRED)
if(NOT TARGET Botan::Botan)
    add_library(Botan::Botan STATIC IMPORTED)
    set_target_properties(Botan::Botan PROPERTIES
        IMPORTED_LOCATION "${BOTAN_LIBRARY}"
        INTERFACE_INCLUDE_DIRECTORIES "${BOTAN_INCLUDE_DIR}"
        )
endif()

target_link_libraries(pglablib PUBLIC
    core
    pgsql
    Boost::container
    Boost::timer
    Boost::chrono
    Boost::assert
    Botan::Botan
    Qt6::Core
    Qt6::Widgets
    )

target_include_directories(pglablib PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
    )

set_target_properties(pglablib PROPERTIES
    CXX_STANDARD 20
    CXX_STANDARD_REQUIRED ON
    POSITION_INDEPENDENT_CODE ON
    )
