Commit 42d0c07f authored by jan.koester's avatar jan.koester
Browse files

fxied

parent 6e8b1f27
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
cmake_minimum_required(VERSION 3.18)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" PARENT_SCOPE)

include(GenerateExportHeader)

project(dbpp)
+27 −60
Original line number Diff line number Diff line
@@ -6,28 +6,6 @@ endif()

find_package(PostgreSQL)
if(${PostgreSQL_FOUND})
    if(NOT TARGET PostgreSQL::pq)
        get_filename_component(POSTGRESQL_LIB_DIR "${PostgreSQL_LIBRARIES}" DIRECTORY)
        get_filename_component(POSTGRESQL_BIN_DIR "${POSTGRESQL_LIB_DIR}/../bin" ABSOLUTE)
        
        set(POSTGRESQL_BIN_DIR_DEBUG "${POSTGRESQL_BIN_DIR}")

        message(STATUS "POSTGRESQL_BIN_DIR: ${POSTGRESQL_BIN_DIR}")

        add_library(PostgreSQL::pq SHARED IMPORTED) 

        set_target_properties(PostgreSQL::pq PROPERTIES
            INTERFACE_INCLUDE_DIRECTORIES "${PostgreSQL_INCLUDE_DIRS}"
        )

        set_target_properties(PostgreSQL::pq PROPERTIES
            IMPORTED_LOCATION "${PostgreSQL_LIBRARIES}"  
            IMPORTED_IMPLIB "${PostgreSQL_LIBRARIES}" 
            IMPORTED_LOCATION_RELEASE "${PostgreSQL_BIN_DIR}/libpq.dll"
            IMPORTED_LOCATION_DEBUG "${POSTGRESQL_BIN_DIR_DEBUG}/libpq.dll"
        )
    endif()
    
    add_library(pgsql SHARED pgsql/pgsql.cpp)

    target_include_directories(pgsql PRIVATE
@@ -56,22 +34,7 @@ if(${PostgreSQL_FOUND})
endif()

find_package(SQLite3 )
    if(${SQLite3_FOUND})
        if(NOT TARGET SQLite3::sqlite3)
            add_library(SQLite3::sqlite3 SHARED IMPORTED GLOBAL)

            # .lib (meist was SQLite3_LIBRARIES liefert)
            set(_sqlite3_implib "${SQLite3_LIBRARIES}")
            get_filename_component(_libdir "${_sqlite3_implib}" DIRECTORY)   # .../lib
            get_filename_component(_triproot "${_libdir}" DIRECTORY)          # .../<triplet>
            set(_sqlite3_dll "${_triproot}/bin/sqlite3.dll")                  # vcpkg-Layout

            set_target_properties(SQLite3::sqlite3 PROPERTIES
                IMPORTED_IMPLIB "${_sqlite3_implib}"
                IMPORTED_LOCATION "${_sqlite3_dll}"
                INTERFACE_INCLUDE_DIRECTORIES "${SQLite3_INCLUDE_DIRS}"
            )
        endif()
if(SQLite3_FOUND)

    add_library(sqlite SHARED sqlite/sqlite.cpp)

@@ -84,17 +47,21 @@ find_package(SQLite3 )

    message(STATUS "SQLite3_LIBRARIES: ${SQLite3_LIBRARIES}")

        target_link_libraries(sqlite PUBLIC dbpp PRIVATE SQLite3::sqlite3)
    # KORREKTUR: Verwenden Sie den korrekten, kleingeschriebenen Target-Namen
    target_link_libraries(sqlite PUBLIC dbpp PRIVATE sqlite3::sqlite3)

    set_target_properties(sqlite PROPERTIES PREFIX "")

    # Installation des sqlite-Moduls
    set(DESTDIR "lib/confplus/backend") # Setzen Sie DESTDIR hier auf den finalen Pfad
    install(TARGETS sqlite DESTINATION ${DESTDIR} RUNTIME_DEPENDENCY_SET sqlitedep)

    # Windows-Installationslogik für Abhängigkeiten (korrekt)
    if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
        install(
            RUNTIME_DEPENDENCY_SET sqlitedep
            DIRECTORIES
                    "$<TARGET_FILE_DIR:SQLite3::sqlite3>"
                "$<TARGET_FILE_DIR:sqlite3::sqlite3>" # KORREKTUR: Kleingeschriebener Target-Name
            DESTINATION ${DESTDIR}
            PRE_EXCLUDE_REGEXES   "((api|ext)-ms-.*|.*azureattest.*|vcruntime.*|ucrtbase.*|msvcrt.*|wpaxholder.*)\\.dll"
            POST_EXCLUDE_REGEXES [[.*(\\|/)system32(\\|/).*\.dll]]
+104 −0
Original line number Diff line number Diff line
# postgresql-config.cmake
# Unterstützt find_package(PostgreSQL) ohne REQUIRED-Flag.

# --------------------------------------------------------------------------
# 1. Definieren der Pfadvariablen (Pfadsuche und Fallbacks)
# --------------------------------------------------------------------------

set(POSTGRESQL_FOUND FALSE) # Standardmäßig nicht gefunden

# Definiere den Header-Namen für die Suche
set(_POSTGRESQL_HEADER_FILE "libpq-fe.h")

# Definiere plattformspezifische Dateinamen (libpq ist oft shared)
if (WIN32)
    set(_POSTGRESQL_LIB_NAME_SHARED "libpq.dll")
    set(_POSTGRESQL_IMPLIB_NAME "libpq.lib")
else()
    # Auf Unix wird find_library verwendet, der Name ist nur für die Prefix-Prüfung
    set(_POSTGRESQL_LIB_NAME_SHARED "libpq.so")
endif()

if(DEFINED CMAKE_PREFIX_PATH)
    foreach(PREFIX_PATH ${CMAKE_PREFIX_PATH})
        set(_POTENTIAL_INCLUDE_DIR "${PREFIX_PATH}/include")

        # Prüfe auf den Include-Pfad (der Header ist entscheidend)
        if (EXISTS "${_POTENTIAL_INCLUDE_DIR}/${_POSTGRESQL_HEADER_FILE}")
            set(POSTGRESQL_ROOT "${PREFIX_PATH}")
            message(STATUS "postgresql-config: Found POSTGRESQL_ROOT at ${POSTGRESQL_ROOT}")
            break()
        endif()
    endforeach()
endif()

if(NOT POSTGRESQL_ROOT)
    if(DEFINED CMAKE_INSTALL_PREFIX)
        set(POSTGRESQL_ROOT "${CMAKE_INSTALL_PREFIX}")
    # FIX: Füge den UNIX-Standardpfad-Fallback hinzu
    elseif(UNIX)
        set(POSTGRESQL_ROOT "/usr")
    else()
        get_filename_component(POSTGRESQL_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)
    endif()
endif()

# Setze den Include-Pfad (libpq Header sind direkt unter include/)
set(POSTGRESQL_INCLUDE_DIR "${POSTGRESQL_ROOT}/include")


# --------------------------------------------------------------------------
# 2. Bibliothek suchen und FOUND-Variable setzen (Multiarch- & Optional-Fix)
# --------------------------------------------------------------------------

if (WIN32)
    set(POSTGRESQL_LIBRARY_DIR "${POSTGRESQL_ROOT}/lib")

    # Prüfe die Existenz der Import Library
    if (EXISTS "${POSTGRESQL_LIBRARY_DIR}/${_POSTGRESQL_IMPLIB_NAME}")
        set(POSTGRESQL_FOUND TRUE)
    endif()
else()
    # Unix/Linux: find_library sucht nach libpq.so (Multiarch-kompatibel)
    # Verwende 'pq' als Namen, um die Suche zu vereinfachen
    find_library(POSTGRESQL_LIBRARY NAMES pq)

    if (POSTGRESQL_LIBRARY)
        set(POSTGRESQL_FOUND TRUE)
    endif()
endif()


# --------------------------------------------------------------------------
# 3. Erstellen des Namespaced IMPORTED Targets (Nur wenn gefunden)
# --------------------------------------------------------------------------

if (NOT TARGET PostgreSQL::pq AND POSTGRESQL_FOUND)
    add_library(PostgreSQL::pq SHARED IMPORTED)

    set_target_properties(PostgreSQL::pq PROPERTIES
        IMPORTED_CONFIGURATIONS "Release;Debug"
        INTERFACE_INCLUDE_DIRECTORIES "${POSTGRESQL_INCLUDE_DIR}"
    )

    # --- Windows Implementierung (.dll/.lib) ---
    if (WIN32)
        # Annahme: DLL und LIB liegen im selben Verzeichnis (Standard bei VCPKG/Installer)
        set_target_properties(PostgreSQL::pq PROPERTIES
            IMPORTED_IMPLIB_RELEASE "${POSTGRESQL_LIBRARY_DIR}/${_POSTGRESQL_IMPLIB_NAME}"
            IMPORTED_LOCATION_RELEASE "${POSTGRESQL_LIBRARY_DIR}/${_POSTGRESQL_LIB_NAME_SHARED}"
            # Implizite Annahme für Debug-Namen
            IMPORTED_IMPLIB_DEBUG "${POSTGRESQL_LIBRARY_DIR}/libpqd.lib"
            IMPORTED_LOCATION_DEBUG "${POSTGRESQL_LIBRARY_DIR}/libpqd.dll"
        )
    # --- Linux/Unix Implementierung (.so) ---
    else()
        # NUTZT den von find_library gefundenen ABSOLUTEN PFAD
        set_target_properties(PostgreSQL::pq PROPERTIES
            IMPORTED_LOCATION_RELEASE "${POSTGRESQL_LIBRARY}"
            IMPORTED_LOCATION_DEBUG "${POSTGRESQL_LIBRARY}"
        )
    endif()
endif()

set(PostgreSQL_LIBRARIES "PostgreSQL::pq" CACHE STRING "The PostgreSQL client library target.")
+100 −0
Original line number Diff line number Diff line
# sqlite3-config.cmake
# Unterstützt find_package(SQLite3) ohne REQUIRED-Flag.

# --------------------------------------------------------------------------
# 1. Definieren der Pfadvariablen (Pfadsuche und Fallbacks)
# --------------------------------------------------------------------------

set(SQLITE3_FOUND FALSE) # Standardmäßig nicht gefunden

# Definiere den Header-Namen für die Suche
set(_SQLITE3_HEADER_FILE "sqlite3.h")

# Definiere plattformspezifische Dateinamen für STATIC Libs (für die Prefix-Prüfung)
if (WIN32)
    set(_SQLITE3_LIB_NAME_STATIC "sqlite3.lib")
else()
    set(_SQLITE3_LIB_NAME_STATIC "libsqlite3.a")
endif()

if(DEFINED CMAKE_PREFIX_PATH)
    foreach(PREFIX_PATH ${CMAKE_PREFIX_PATH})
        set(_POTENTIAL_INCLUDE_DIR "${PREFIX_PATH}/include")
        set(_POTENTIAL_LIB_FILE "${PREFIX_PATH}/lib/${_SQLITE3_LIB_NAME_STATIC}")

        # Verwende AND, um sicherzustellen, dass sowohl Header als auch Bibliothek existieren
        if (EXISTS "${_POTENTIAL_INCLUDE_DIR}/${_SQLITE3_HEADER_FILE}" AND EXISTS "${_POTENTIAL_LIB_FILE}")
            set(SQLITE3_ROOT "${PREFIX_PATH}")
            message(STATUS "sqlite3-config: Found SQLITE3_ROOT at ${SQLITE3_ROOT}")
            break()
        endif()
    endforeach()
endif()

if(NOT SQLITE3_ROOT)
    if(DEFINED CMAKE_INSTALL_PREFIX)
        set(SQLITE3_ROOT "${CMAKE_INSTALL_PREFIX}")
    # FIX: Füge den UNIX-Standardpfad-Fallback hinzu, um /usr/local/lib Fehler zu verhindern
    elseif(UNIX)
        set(SQLITE3_ROOT "/usr")
    else()
        get_filename_component(SQLITE3_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)
    endif()
endif()

# Setze den Include-Pfad
set(SQLITE3_INCLUDE_DIR "${SQLITE3_ROOT}/include")


# --------------------------------------------------------------------------
# 2. Bibliothek suchen und FOUND-Variable setzen (Multiarch- & Optional-Fix)
# --------------------------------------------------------------------------

if (WIN32)
    set(SQLITE3_LIBRARY_DIR "${SQLITE3_ROOT}/lib")

    # Prüfe die Existenz der Release-Bibliothek
    if (EXISTS "${SQLITE3_LIBRARY_DIR}/${_SQLITE3_LIB_NAME_STATIC}")
        set(SQLITE3_FOUND TRUE)
    endif()
else()
    # Unix/Linux: find_library sucht nach libsqlite3.a und libsqlite3.so in Multiarch-Pfaden
    find_library(SQLITE3_LIBRARY NAMES sqlite3)

    if (SQLITE3_LIBRARY)
        set(SQLITE3_FOUND TRUE)
    endif()
endif()


# --------------------------------------------------------------------------
# 3. Erstellen des Namespaced IMPORTED Targets (Nur wenn gefunden)
# --------------------------------------------------------------------------

if (NOT TARGET sqlite3::sqlite3 AND SQLITE3_FOUND)
    # UNKNOWN erlaubt es, dass die Bibliothek statisch oder shared sein kann
    add_library(sqlite3::sqlite3 UNKNOWN IMPORTED)

    set_target_properties(sqlite3::sqlite3 PROPERTIES
        IMPORTED_CONFIGURATIONS "Release;Debug"
        INTERFACE_INCLUDE_DIRECTORIES "${SQLITE3_INCLUDE_DIR}"
    )

    # --- Windows Implementierung (.lib) ---
    if (WIN32)
        # Annahme: Debug-Bibliothek heißt sqlite3d.lib
        set_target_properties(sqlite3::sqlite3 PROPERTIES
            IMPORTED_LOCATION_RELEASE "${SQLITE3_LIBRARY_DIR}/${_SQLITE3_LIB_NAME_STATIC}"
            IMPORTED_LOCATION_DEBUG "${SQLITE3_LIBRARY_DIR}/sqlite3d.lib"
        )
    # --- Linux/Unix Implementierung (.a/.so) ---
    else()
        # NUTZT den von find_library gefundenen ABSOLUTEN PFAD
        set_target_properties(sqlite3::sqlite3 PROPERTIES
            IMPORTED_LOCATION_RELEASE "${SQLITE3_LIBRARY}"
            IMPORTED_LOCATION_DEBUG "${SQLITE3_LIBRARY}"
        )
    endif()
endif()

set(SQLITE3_LIBRARIES "sqlite3::sqlite3" CACHE STRING "The SQLITE3 library target.")