Loading cmake/FindINIPARSER.cmake +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() cmake/FindYAML.cmake +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() # -------------------------------------------------------------------------- Loading @@ -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() Loading Loading
cmake/FindINIPARSER.cmake +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()
cmake/FindYAML.cmake +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() # -------------------------------------------------------------------------- Loading @@ -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() Loading