Commit 044ffd88 authored by jan.koester's avatar jan.koester
Browse files

test

parent 42d0c07f
Loading
Loading
Loading
Loading
+34 −74
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")

set(POSTGRESQL_FOUND FALSE)

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

if (WIN32)
    set(POSTGRESQL_LIBRARY_DIR "${POSTGRESQL_ROOT}/lib")
# Suche nach dem Haupt-Header
find_path(POSTGRESQL_INCLUDE_DIRS NAMES libpq-fe.h)

    # 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)
# 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)

    if (POSTGRESQL_LIBRARY)
# WICHTIG: Setze FOUND nur, wenn beides gefunden wurde
if (POSTGRESQL_INCLUDE_DIRS AND POSTGRESQL_LIBRARIES)
    set(POSTGRESQL_FOUND TRUE)
endif()
endif()


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

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.
    add_library(PostgreSQL::pq SHARED IMPORTED)

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

    # --- Windows Implementierung (.dll/.lib) ---
    if (WIN32)
        # Annahme: DLL und LIB liegen im selben Verzeichnis (Standard bei VCPKG/Installer)
        # Windows-Implementierung (Hier muss der Pfad oft manuell zwischen DLL und LIB unterschieden werden)

        # 1. 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.
        set(_POSTGRESQL_DLL_PATH "${_POSTGRESQL_LIB_DIR}/libpq.dll")

        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"
            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"
        )
    # --- Linux/Unix Implementierung (.so) ---
    else()
        # NUTZT den von find_library gefundenen ABSOLUTEN PFAD
        # Linux/Unix Implementierung (.so oder .a)
        set_target_properties(PostgreSQL::pq PROPERTIES
            IMPORTED_LOCATION_RELEASE "${POSTGRESQL_LIBRARY}"
            IMPORTED_LOCATION_DEBUG "${POSTGRESQL_LIBRARY}"
            IMPORTED_LOCATION_RELEASE "${POSTGRESQL_LIBRARIES}"
            IMPORTED_LOCATION_DEBUG "${POSTGRESQL_LIBRARIES}"
        )

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

set(PostgreSQL_LIBRARIES "PostgreSQL::pq" CACHE STRING "The PostgreSQL client library target.")
+20 −67
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")

set(SQLITE3_FOUND FALSE)

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

if (WIN32)
    set(SQLITE3_LIBRARY_DIR "${SQLITE3_ROOT}/lib")
# Suche nach dem Header (lib/sqlite3.h oder include/sqlite3.h)
find_path(SQLITE3_INCLUDE_DIRS NAMES sqlite3.h)

    # 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)
# Suche nach der Bibliothek (libsqlite3.a/.so oder sqlite3.lib)
find_library(SQLITE3_LIBRARIES NAMES sqlite3)

    if (SQLITE3_LIBRARY)
# WICHTIG: Setze FOUND nur, wenn beides gefunden wurde
if (SQLITE3_INCLUDE_DIRS AND SQLITE3_LIBRARIES)
    set(SQLITE3_FOUND TRUE)
endif()
endif()


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

if (NOT TARGET sqlite3::sqlite3 AND SQLITE3_FOUND)
@@ -77,24 +29,25 @@ if (NOT TARGET sqlite3::sqlite3 AND SQLITE3_FOUND)

    set_target_properties(sqlite3::sqlite3 PROPERTIES
        IMPORTED_CONFIGURATIONS "Release;Debug"
        INTERFACE_INCLUDE_DIRECTORIES "${SQLITE3_INCLUDE_DIR}"
        INTERFACE_INCLUDE_DIRECTORIES "${SQLITE3_INCLUDE_DIRS}"
        # SQLite3 benötigt oft keinen expliziten Bibliothekspfad, aber wir setzen den Pfad zur gefundenen Datei
    )

    # --- Windows Implementierung (.lib) ---
    if (WIN32)
        # Annahme: Debug-Bibliothek heißt sqlite3d.lib
        # Windows (.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"
            IMPORTED_LOCATION_RELEASE "${SQLITE3_LIBRARIES}"
            # Annahme für Debug-Namen: muss ggf. angepasst werden
            IMPORTED_LOCATION_DEBUG "${SQLITE3_LIBRARIES}d"
        )
    # --- Linux/Unix Implementierung (.a/.so) ---
    else()
        # NUTZT den von find_library gefundenen ABSOLUTEN PFAD
        # Linux/Unix (.a/.so)
        set_target_properties(sqlite3::sqlite3 PROPERTIES
            IMPORTED_LOCATION_RELEASE "${SQLITE3_LIBRARY}"
            IMPORTED_LOCATION_DEBUG "${SQLITE3_LIBRARY}"
            IMPORTED_LOCATION_RELEASE "${SQLITE3_LIBRARIES}"
            IMPORTED_LOCATION_DEBUG "${SQLITE3_LIBRARIES}"
        )
    endif()
endif()

# Setze die CMAKE-Standardvariable für Legacy-Kompatibilität
set(SQLITE3_LIBRARIES "sqlite3::sqlite3" CACHE STRING "The SQLITE3 library target.")