Commit 364679c0 authored by jan.koester's avatar jan.koester
Browse files

fixed

parent 209393e1
Loading
Loading
Loading
Loading
+35 −30
Original line number Diff line number Diff line
# iniparser-config.cmake

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

# --- Definiere plattformspezifische Dateinamen für STATIC Libs ---
if (WIN32)
    # Windows: Statische Bibliothek (typischerweise iniparser-static.lib)
    set(_INIPARSER_LIB_NAME_STATIC "iniparser-static.lib")
    set(_INIPARSER_LIB_NAME_STATIC_DEBUG "iniparser-static-d.lib")
else()
    # Linux/Unix: Statische Bibliothek (.a)
    set(_INIPARSER_LIB_NAME_STATIC "libiniparser.a")
endif()

if(DEFINED CMAKE_PREFIX_PATH)
    foreach(PREFIX_PATH ${CMAKE_PREFIX_PATH})
        # Setze den potenziellen Include-Pfad (z.B. /usr/include)
        set(_POTENTIAL_INCLUDE_DIR "${PREFIX_PATH}/include")

        # Setze den potenziellen Bibliotheks-Pfad (Verwende den Linux-Namen als primäre Prüfung, kann angepasst werden)
        set(_POTENTIAL_LIB_FILE "${PREFIX_PATH}/lib/${_INIPARSER_LIB_NAME_STATIC}")

        # Prüfe, ob die benötigte Header-Datei ODER die Bibliothek in diesem Pfad existiert
        if (EXISTS "${_POTENTIAL_INCLUDE_DIR}/iniparser/iniparser.h" OR EXISTS "${_POTENTIAL_LIB_FILE}")
            # Wenn gefunden, setze diesen Pfad als das endgültige INIPARSER_ROOT
        # Verwende AND, um sicherzustellen, dass sowohl Header als auch Bibliothek existieren
        if (EXISTS "${_POTENTIAL_INCLUDE_DIR}/iniparser/iniparser.h" AND EXISTS "${_POTENTIAL_LIB_FILE}")
            set(INIPARSER_ROOT "${PREFIX_PATH}")
            message(STATUS "iniparser-config: Found INIPARSER_ROOT at ${INIPARSER_ROOT}")
            break() # Beende die Schleife, da der Pfad gefunden wurde
            break()
        endif()
    endforeach()
elseif(DEFINED CMAKE_INSTALL_PREFIX)
endif()

if(NOT INIPARSER_ROOT)
    # Prüfe auf CMAKE_INSTALL_PREFIX
    if(DEFINED CMAKE_INSTALL_PREFIX)
        set(INIPARSER_ROOT "${CMAKE_INSTALL_PREFIX}")
    # FIX: Füge den UNIX-Standardpfad-Fallback hinzu, um /usr/local/lib Fehler zu verhindern
    elseif(UNIX)
        set(INIPARSER_ROOT "/usr")
    else()
        # Fallback zur Berechnung basierend auf dem Speicherort dieser Datei
        get_filename_component(INIPARSER_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)
    endif()
endif()

# Setze die Variablen, die von der installierten iniparser erwartet werden
# Setze den Include-Pfad (ist i.d.R. immer ${INIPARSER_ROOT}/include)
set(INIPARSER_INCLUDE_DIR "${INIPARSER_ROOT}/include")
set(INIPARSER_LIBRARY_DIR "${INIPARSER_ROOT}/lib")
set(INIPARSER_FOUND TRUE)


# --- Multiarch-Fix für Unix: Absoluten Bibliothekspfad suchen ---
if (NOT WIN32)
    # 🌟 MULTIARCH FIX: find_library findet den absoluten, Multiarch-fähigen Pfad
    # zur statischen Bibliothek libiniparser.a.
    find_library(INIPARSER_LIBRARY NAMES iniparser)
    if (NOT INIPARSER_LIBRARY)
        message(FATAL_ERROR "libiniparser.a not found. Check if libiniparser-dev is installed.")
    endif()
endif()

# --------------------------------------------------------------------------
# 2. Erstellen des Namespaced IMPORTED Targets (Cross-Platform)
# 2. Erstellen des Namespaced IMPORTED Targets
# --------------------------------------------------------------------------

# Definieren des Targets mit Namensraum (iniparser::iniparser)
if (NOT TARGET iniparser::iniparser)
    add_library(iniparser::iniparser STATIC IMPORTED)

    set_target_properties(iniparser::iniparser PROPERTIES
        # Hinzugefügt: Fügt unterstützte Konfigurationen hinzu, um Warnungen zu vermeiden
        IMPORTED_CONFIGURATIONS "Release;Debug"

        # Schnittstellen-Include-Pfade definieren
        INTERFACE_INCLUDE_DIRECTORIES "${INIPARSER_INCLUDE_DIR}"
    )

    # --- Windows Implementierung (.lib) ---
    if (WIN32)
        set(INIPARSER_LIBRARY_DIR "${INIPARSER_ROOT}/lib")
        set_target_properties(iniparser::iniparser PROPERTIES
            # Release Konfiguration
            IMPORTED_LOCATION_RELEASE "${INIPARSER_LIBRARY_DIR}/${_INIPARSER_LIB_NAME_STATIC}"
            # Debug Konfiguration (Annahme: Debug-Bibliotheken haben ein Suffix)
            IMPORTED_LOCATION_DEBUG "${INIPARSER_LIBRARY_DIR}/${_INIPARSER_LIB_NAME_STATIC_DEBUG}"
        )
    # --- Linux/Unix Implementierung (.a) ---
    else()
        # NUTZT den von find_library gefundenen Multiarch-fähigen ABSOLUTEN PFAD
        set_target_properties(iniparser::iniparser PROPERTIES
            # Release Konfiguration (libiniparser.a)
            IMPORTED_LOCATION_RELEASE "${INIPARSER_LIBRARY_DIR}/${_INIPARSER_LIB_NAME_STATIC}"

            # Debug Konfiguration: Oft derselbe Pfad für statische Bibliotheken
            IMPORTED_LOCATION_DEBUG "${INIPARSER_LIBRARY_DIR}/${_INIPARSER_LIB_NAME_STATIC}"
            IMPORTED_LOCATION_RELEASE "${INIPARSER_LIBRARY}"
            IMPORTED_LOCATION_DEBUG "${INIPARSER_LIBRARY}"
        )
    endif()

    # Setze INIPARSER_FOUND
    set(INIPARSER_FOUND TRUE)
endif()
+29 −32
Original line number Diff line number Diff line
# yaml-config.cmake

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

if(DEFINED CMAKE_PREFIX_PATH)
    foreach(PREFIX_PATH ${CMAKE_PREFIX_PATH})
        # Setze den potenziellen Include-Pfad (z.B. /usr/include)
        set(_POTENTIAL_INCLUDE_DIR "${PREFIX_PATH}/include")
        set(_POTENTIAL_HEADER_FILE "${PREFIX_PATH}/include/yaml.h")

        # Setze den potenziellen Bibliotheks-Pfad (z.B. /usr/lib/libiniparser.a)
        set(_POTENTIAL_LIB_FILE "${PREFIX_PATH}/lib/libiniparser.a") # Oder der tatsächliche Dateiname

        # Prüfe, ob die benötigte Header-Datei ODER die Bibliothek in diesem Pfad existiert
        if (EXISTS "${_POTENTIAL_INCLUDE_DIR}/iniparser/iniparser.h" OR EXISTS "${_POTENTIAL_LIB_FILE}")
            # Wenn gefunden, setze diesen Pfad als das endgültige INIPARSER_ROOT
        if (EXISTS "${_POTENTIAL_HEADER_FILE}")
            set(YAML_ROOT "${PREFIX_PATH}")
            message(STATUS "yaml-config: Found YAML_ROOT at ${YAML_ROOT}")
            break() # Beende die Schleife, da der Pfad gefunden wurde
            break()
        endif()
    endforeach()
elseif(DEFINED CMAKE_INSTALL_PREFIX)
endif()

if(NOT YAML_ROOT)
    if(DEFINED CMAKE_INSTALL_PREFIX)
        set(YAML_ROOT "${CMAKE_INSTALL_PREFIX}")
    elseif(UNIX)
        # Behalten Sie den /usr-Fallback bei, um den Include-Pfad zu setzen
        set(YAML_ROOT "/usr")
    else()
    # Fallback zur Berechnung basierend auf dem Speicherort dieser Datei
    get_filename_component(INIPARSER_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)
        get_filename_component(YAML_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)
    endif()
endif()

# Setze den Include-Pfad (ist i.d.R. immer ${YAML_ROOT}/include)
set(YAML_INCLUDE_DIR "${YAML_ROOT}/include")
set(YAML_LIBRARY_DIR "${YAML_ROOT}/lib")
set(YAML_FOUND TRUE)

# --- Definiere plattformspezifische Dateinamen ---
# --- Definiere plattformspezifische Pfade und suche auf Unix ---
if (WIN32)
    # Windows: .dll (Runtime) und .lib (Import Library)
    set(_YAML_DLL_NAME "yaml.dll")
    set(_YAML_IMPLIB_NAME "yaml.lib")
else()
    # Linux/Unix: .so (Shared Object)
    set(_YAML_SO_NAME "libyaml.so")
    # 🌟 MULTIARCH FIX: Verwende find_library, um den absoluten Pfad zu erhalten.
    # Dies durchsucht automatisch /usr/lib, /usr/lib/x86_64-linux-gnu, etc.
    find_library(YAML_LIBRARY NAMES yaml)
    if (NOT YAML_LIBRARY)
        message(FATAL_ERROR "libyaml.so not found. Check if libyaml-dev is installed.")
    endif()
endif()

# --------------------------------------------------------------------------
@@ -48,33 +51,27 @@ endif()
if (NOT TARGET yaml::yaml)
    add_library(yaml::yaml SHARED IMPORTED)

    # WICHTIG: Setze explizit die Konfigurationen und Include-Pfade
    set_target_properties(yaml::yaml PROPERTIES
        IMPORTED_CONFIGURATIONS "Release;Debug" # Behebt den CMP0111 Warnung/Fehler
        IMPORTED_CONFIGURATIONS "Release;Debug"
        INTERFACE_INCLUDE_DIRECTORIES "${YAML_INCLUDE_DIR}"
    )

    # --- Windows Implementierung (.dll/.lib) ---
    if (WIN32)
        # Windows muss weiterhin auf dem konfigurierten Pfad basieren
        set(YAML_LIBRARY_DIR "${YAML_ROOT}/lib")
        set_target_properties(yaml::yaml PROPERTIES
            # Release Konfiguration
            IMPORTED_LOCATION_RELEASE "${YAML_LIBRARY_DIR}/${_YAML_DLL_NAME}"
            IMPORTED_IMPLIB_RELEASE "${YAML_LIBRARY_DIR}/${_YAML_IMPLIB_NAME}"
            # Debug Konfiguration (angenommener Name mit '-d' Suffix)
            IMPORTED_LOCATION_DEBUG "${YAML_LIBRARY_DIR}/yaml-d.dll"
            IMPORTED_IMPLIB_DEBUG "${YAML_LIBRARY_DIR}/yaml-d.lib"
        )
    # --- Linux/Unix Implementierung (.so) ---
    else()
        # Release Konfiguration (libyaml.so)
        set_target_properties(yaml::yaml PROPERTIES
            IMPORTED_LOCATION_RELEASE "${YAML_LIBRARY_DIR}/${_YAML_SO_NAME}"
        )

        # Debug Konfiguration: Setzen Sie einen Wert, um den 'missing location' Fehler zu vermeiden.
        # Im Zweifel den gleichen Pfad wie Release verwenden, wenn keine separate Debug-Datei existiert.
        # NUTZT den von find_library gefundenen Multiarch-fähigen ABSOLUTEN PFAD
        set_target_properties(yaml::yaml PROPERTIES
            IMPORTED_LOCATION_DEBUG "${YAML_LIBRARY_DIR}/${_YAML_SO_NAME}"
            IMPORTED_LOCATION_RELEASE "${YAML_LIBRARY}"
            IMPORTED_LOCATION_DEBUG "${YAML_LIBRARY}"
        )
    endif()