Commit b7f63fb3 authored by jan.koester's avatar jan.koester
Browse files

tes

parent a6ca9558
Loading
Loading
Loading
Loading
+16 −15
Original line number Diff line number Diff line
# postgresql-config.cmake
# FindPostgreSQL.cmake
# Unterstützt find_package(PostgreSQL) ohne REQUIRED-Flag.
# Definiert das moderne Imported Target PostgreSQL::pq.

set(POSTGRESQL_FOUND FALSE)

# --------------------------------------------------------------------------
# 1. Suche nach Header und Bibliothek
# 1. Suche nach Header und Bibliothek (Robust über find_path/find_library)
# --------------------------------------------------------------------------

# Suche nach dem Haupt-Header
# Suche nach dem Haupt-Header (libpq-fe.h)
find_path(POSTGRESQL_INCLUDE_DIRS NAMES libpq-fe.h)

# Suche nach der Bibliothek (PostgreSQL Client Library ist "pq")
# CMake findet automatisch .so auf Unix oder .lib auf Windows
find_library(POSTGRESQL_LIBRARIES NAMES pq)

# WICHTIG: Setze FOUND nur, wenn beides gefunden wurde
@@ -25,10 +25,10 @@ endif()
# --------------------------------------------------------------------------

if (NOT TARGET PostgreSQL::pq AND POSTGRESQL_FOUND)
    # UNKNOWN erlaubt SHARED/STATIC/etc., ist aber hier nicht streng notwendig
    # Wir nehmen SHARED an, da libpq fast immer shared ist.
    # Target als SHARED und GLOBAL definieren, um Sichtbarkeitsprobleme zu vermeiden
    add_library(PostgreSQL::pq SHARED IMPORTED GLOBAL)

    # 🌟 FIX FÜR HEADER-FEHLER: Korrekte Übergabe der Header-Pfade über INTERFACE
    target_include_directories(PostgreSQL::pq INTERFACE ${POSTGRESQL_INCLUDE_DIRS})

    set_target_properties(PostgreSQL::pq PROPERTIES
@@ -36,30 +36,31 @@ if (NOT TARGET PostgreSQL::pq AND POSTGRESQL_FOUND)
    )

    if (WIN32)
        # Windows-Implementierung (Hier muss der Pfad oft manuell zwischen DLL und LIB unterschieden werden)
        # --- Windows Implementierung (.dll/.lib) ---

        # 1. Ermittle das Verzeichnis der gefundenen Import Library (.lib)
        # Ermittle das Verzeichnis der gefundenen Import Library (.lib)
        get_filename_component(_POSTGRESQL_LIB_DIR "${POSTGRESQL_LIBRARIES}" DIRECTORY)

        # 2. Rate den Pfad zur DLL (typisch ist der gleiche Ordner)
        # Dies ist ein Ratversuch und kann fehlschlagen, wenn das Layout nicht Standard ist.
        # Rate den Pfad zur DLL (typisch ist der gleiche Ordner)
        set(_POSTGRESQL_DLL_PATH "${_POSTGRESQL_LIB_DIR}/libpq.dll")

        set_target_properties(PostgreSQL::pq PROPERTIES
            IMPORTED_IMPLIB_RELEASE "${POSTGRESQL_LIBRARIES}"       # Die gefundene .lib
            IMPORTED_LOCATION_RELEASE "${_POSTGRESQL_DLL_PATH}"     # Die geratene .dll
            # Annahmen für Debug
            IMPORTED_IMPLIB_DEBUG "${_POSTGRESQL_LIB_DIR}/libpqd.lib"
            IMPORTED_LOCATION_DEBUG "${_POSTGRESQL_LIB_DIR}/libpqd.dll"
        )
    else()
        # Linux/Unix Implementierung (.so oder .a)
        # --- Linux/Unix Implementierung (.so) ---
        set_target_properties(PostgreSQL::pq PROPERTIES
            IMPORTED_LOCATION_RELEASE "${POSTGRESQL_LIBRARIES}"
            IMPORTED_LOCATION_DEBUG "${POSTGRESQL_LIBRARIES}"
        )

        # libpq benötigt oft math (m) und zlib (z)
        # libpq benötigt oft math (m) und zlib (z) auf Unix-Systemen
        set_property(TARGET PostgreSQL::pq APPEND PROPERTY INTERFACE_LINK_LIBRARIES "m;z")
    endif()
endif()

# Setze die CMAKE-Standardvariable für Legacy-Kompatibilität
set(PostgreSQL_LIBRARIES "PostgreSQL::pq" CACHE STRING "The PostgreSQL client library target.")