Commit 9a369f37 authored by jan.koester's avatar jan.koester
Browse files

test

parent 79cd687a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
cmake_minimum_required(VERSION 3.10)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" PARENT_SCOPE)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
project(libconfplus)

set(WINDOWS_EXPORT_ALL_SYMBOLS ON)
+51 −54
Original line number Diff line number Diff line
# FindYAMLCompat.cmake
# Ensures a modern imported target YAML::YAML exists.
# Tries config packages (yaml / LibYAML), then pkg-config, then manual.

# 1) Try config packages (vcpkg/Conan/etc.)
set(_yaml_config_found FALSE)
find_package(yaml CONFIG QUIET)
if(yaml_FOUND)
  if(TARGET yaml::yaml AND NOT TARGET YAML::YAML)
    add_library(YAML::YAML ALIAS yaml::yaml)
  endif()
  set(_yaml_config_found TRUE)
endif()
# CMake module to search for the C library libyaml
#
# If the library is found, then YAML_FOUND is set to TRUE,
# and following variables are set:
#   YAML_INCLUDE_DIR
#   YAML_LIBRARIES

if(NOT _yaml_config_found)
  find_package(LibYAML CONFIG QUIET)
  if(LibYAML_FOUND)
    if(TARGET LibYAML::LibYAML AND NOT TARGET YAML::YAML)
      add_library(YAML::YAML ALIAS LibYAML::LibYAML)
    endif()
    set(_yaml_config_found TRUE)
  endif()
endif()
# 1. Include directory search
find_path(YAML_INCLUDE_DIR NAMES yaml.h)

if(NOT TARGET YAML::YAML)
  # 2) Try pkg-config
  find_package(PkgConfig QUIET)
  if(PkgConfig_FOUND)
    pkg_check_modules(LIBYAML QUIET yaml-0.1)
  endif()
# 2. Configure library search for static libraries
# Speichern Sie die aktuellen Such-Suffixe
set(ORIGINAL_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})

  # 3) Manual fallback if pkg-config failed or incomplete
  if(NOT LIBYAML_FOUND)
    find_path(LIBYAML_INCLUDE_DIR yaml.h
      HINTS $ENV{LIBYAML_ROOT} ${CMAKE_PREFIX_PATH}
      PATH_SUFFIXES include
    )
    find_library(LIBYAML_LIBRARY NAMES yaml libyaml
      HINTS $ENV{LIBYAML_ROOT} ${CMAKE_PREFIX_PATH}
      PATH_SUFFIXES lib
    )
    if(NOT LIBYAML_INCLUDE_DIR OR NOT LIBYAML_LIBRARY)
      message(FATAL_ERROR "libyaml not found. Set LIBYAML_ROOT or install it (vcpkg: 'libyaml').")
# Stellen Sie sicher, dass wir nach den statischen Suffixen suchen
if (WIN32)
    # Unter Windows suchen wir explizit nach .lib (statisch) vor .dll (dynamisch)
    set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
else()
    # Unter Unix/Linux/macOS ist .a das statische Standard-Suffix
    set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
endif()

    add_library(YAML::YAML UNKNOWN IMPORTED)
    set_target_properties(YAML::YAML PROPERTIES
      IMPORTED_LOCATION "${LIBYAML_LIBRARY}"
      INTERFACE_INCLUDE_DIRECTORIES "${LIBYAML_INCLUDE_DIR}"
# 3. Search for the static library
find_library(YAML_LIBRARIES NAMES yaml libyaml)

# 4. Set Suffixes back to original
set(CMAKE_FIND_LIBRARY_SUFFIXES ${ORIGINAL_CMAKE_FIND_LIBRARY_SUFFIXES})


# 5. Handle standard arguments
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(YAML DEFAULT_MSG YAML_LIBRARIES YAML_INCLUDE_DIR)
mark_as_advanced(YAML_INCLUDE_DIR YAML_LIBRARIES)

# 6. Create IMPORTED Target for modern CMake usage
# WICHTIG: Verwenden Sie 'yaml::yaml', um den Anforderungen von libconfplus zu entsprechen.
if (YAML_FOUND AND NOT TARGET yaml::yaml)
    # Target mit dem korrekten Namen erstellen
    add_library(yaml::yaml UNKNOWN IMPORTED)
    
    set_target_properties(yaml::yaml PROPERTIES
        INTERFACE_INCLUDE_DIRECTORIES "${YAML_INCLUDE_DIR}"
        IMPORTED_LOCATION "${YAML_LIBRARIES}"
        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
    )
  else()
    # Use pkg-config result to create a modern target
    add_library(YAML::YAML INTERFACE IMPORTED)
    set_target_properties(YAML::YAML PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${LIBYAML_INCLUDE_DIRS}"
      INTERFACE_LINK_LIBRARIES "${LIBYAML_LIBRARIES}"

    # Wenn es eine statische Bibliothek ist, verwenden wir IMPORTED_LINK_INTERFACE_LIBRARIES
    # Das Ziel benötigt KEINE zusätzlichen Bibliotheken (wie pthread oder ws2_32),
    # da libyaml diese nicht exponiert.
    if (YAML_LIBRARIES MATCHES "\\.a$|\\.lib$")
        set_target_properties(yaml::yaml PROPERTIES 
            IMPORTED_LINK_INTERFACE_LIBRARIES ""
        )
    endif()
endif()
 No newline at end of file