Commit 41f27373 authored by jan.koester's avatar jan.koester
Browse files

added missing file

parent c843ac12
Loading
Loading
Loading
Loading
+115 −0
Original line number Diff line number Diff line
# =====================================================================
# FindIniparser.cmake
# Prüft auf Iniparser-Header/Bibliothek und definiert das Target 
# iniparser::iniparser.
# =====================================================================

include(FindPackageHandleStandardArgs)

# -----------------------------------------------------------------------------
# 0. Definieren von Hilfsvariablen
# -----------------------------------------------------------------------------

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

if (WIN32)
    # Unter Windows wird die Iniparser-Bibliothek oft statisch kompiliert (.lib).
    # Hier nehmen wir jedoch an, dass eine dynamische Version gesucht wird,
    # analog zum YAML-Beispiel, aber ohne Debug-Suffix, da dies seltener ist.
    set(_INIPARSER_DLL_NAME "iniparser.dll")
    set(_INIPARSER_IMPLIB_NAME "iniparser.lib")
    set(_INIPARSER_LIB_NAME "iniparser") # Für find_library (findet die .lib)
    set(_INIPARSER_LIB_NAME_DEBUG "iniparser") # Optional: iniparser-d wäre denkbar
else()
    set(_INIPARSER_LIB_NAME "iniparser")
    set(_INIPARSER_LIB_NAME_DEBUG "iniparser") 
endif()


# -----------------------------------------------------------------------------
# 1. Hauptsuche (Verwendet CMAKE_PREFIX_PATH und CMAKE_MODULE_PATH)
# -----------------------------------------------------------------------------

# Sucht den Pfad zum Header (iniparser.h)
find_path(INIPARSER_INCLUDE_DIR
    NAMES iniparser.h dictionary.h
    PATH_SUFFIXES include/iniparser include
)

# Sucht den Pfad zur Import-Bibliothek (.lib unter Windows, .so unter Linux)
find_library(INIPARSER_LIBRARY
    NAMES ${_INIPARSER_LIB_NAME}
)

# Sucht nach der Debug-Version (optional)
find_library(INIPARSER_LIBRARY_DEBUG
    NAMES ${_INIPARSER_LIB_NAME_DEBUG}
)


# -----------------------------------------------------------------------------
# 2. Fehlerbehandlung und Setzen der FOUND-Variable
# -----------------------------------------------------------------------------

find_package_handle_standard_args(Iniparser
    FOUND_VAR               INIPARSER_FOUND
    REQUIRED_VARS           INIPARSER_INCLUDE_DIR
                            INIPARSER_LIBRARY
    FAIL_MESSAGE            "Could NOT find Iniparser shared library or headers (iniparser.h)."
)

# -----------------------------------------------------------------------------
# 3. Definiere Imported Shared Target (Wenn gefunden)
# -----------------------------------------------------------------------------

if(INIPARSER_FOUND)
    
    # 1. Definiere das primäre Target (INIPARSER::INIPARSER)
    add_library(INIPARSER::INIPARSER SHARED IMPORTED)
    
    # 2. Setze die öffentlichen Header
    set_target_properties(INIPARSER::INIPARSER PROPERTIES
        INTERFACE_INCLUDE_DIRECTORIES "${INIPARSER_INCLUDE_DIR}"
    )
    
    # 3. Setze die Speicherort-Eigenschaften
    if(WIN32)
        
        # --- Pfad-Ableitung (Annahme: /install/lib für .lib, /install/bin für .dll) ---
        get_filename_component(_LIB_DIR "${INIPARSER_LIBRARY}" DIRECTORY)  # z.B. C:/.../install/lib
        get_filename_component(_PARENT_DIR "${_LIB_DIR}" DIRECTORY)    # z.B. C:/.../install
        
        # Setze IMPORTED_IMPLIB (die .lib) für Linker
        set_target_properties(INIPARSER::INIPARSER PROPERTIES
            IMPORTED_IMPLIB "${INIPARSER_LIBRARY}"
            IMPORTED_IMPLIB_DEBUG "${INIPARSER_LIBRARY_DEBUG}"
        )
        
        # Setze IMPORTED_LOCATION (die .dll) für die Runtime
        set_target_properties(INIPARSER::INIPARSER PROPERTIES
            IMPORTED_LOCATION_RELEASE "${_PARENT_DIR}/bin/${_INIPARSER_DLL_NAME}"
            IMPORTED_LOCATION_DEBUG   "${_PARENT_DIR}/bin/${_INIPARSER_DLL_NAME}"  # Hier annehmen, dass DLL-Name gleich ist (falls Debug-DLL existiert)
            IMPORTED_LOCATION_RELWITHDEBINFO "${_PARENT_DIR}/bin/${_INIPARSER_DLL_NAME}"
        )
        
    else()
        # Non-Windows systems: link file is the runtime file
        set_target_properties(INIPARSER::INIPARSER PROPERTIES
            IMPORTED_LOCATION "${INIPARSER_LIBRARY}"
            IMPORTED_LOCATION_DEBUG "${INIPARSER_LIBRARY_DEBUG}"
        )
    endif()

    # -----------------------------------------------------------------------------
    # 4. Definiere Alias für den Konsumenten
    # -----------------------------------------------------------------------------
    add_library(iniparser::iniparser ALIAS INIPARSER::INIPARSER)
    
endif()

# Verstecke interne Variablen
mark_as_advanced(
    INIPARSER_INCLUDE_DIR
    INIPARSER_LIBRARY
    INIPARSER_LIBRARY_DEBUG
)
 No newline at end of file