Loading cmake/FindINIPARSER.cmake 0 → 100644 +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 Loading
cmake/FindINIPARSER.cmake 0 → 100644 +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