From 6709035a2849a7f7e98eeead51ecfacc68a7c189 Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Wed, 3 Dec 2025 17:18:14 -0700 Subject: [PATCH] Initial compatibility package --- .gitignore | 1 + sources | 1 + yaml-cpp-cmake.patch | 245 +++++++++++++++++++++++++++++++++++++++++++ yaml-cpp0.7.spec | 103 ++++++++++++++++++ 4 files changed, 350 insertions(+) create mode 100644 .gitignore create mode 100644 sources create mode 100644 yaml-cpp-cmake.patch create mode 100644 yaml-cpp0.7.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aad38d5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/yaml-cpp-0.7.0.tar.gz diff --git a/sources b/sources new file mode 100644 index 0000000..a73bbfa --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (yaml-cpp-0.7.0.tar.gz) = 2de0f0ec8f003cd3c498d571cda7a796bf220517bad2dc02cba70c522dddde398f33cf1ad20da251adaacb2a07b77844111f297e99d45a7c46ebc01706bbafb5 diff --git a/yaml-cpp-cmake.patch b/yaml-cpp-cmake.patch new file mode 100644 index 0000000..218484c --- /dev/null +++ b/yaml-cpp-cmake.patch @@ -0,0 +1,245 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index b230b9e..6ef6e8a 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -9,33 +9,39 @@ endif() + + project(YAML_CPP VERSION 0.7.0 LANGUAGES CXX) + ++set(YAML_CPP_MAIN_PROJECT OFF) ++if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) ++ set(YAML_CPP_MAIN_PROJECT ON) ++endif() ++ + include(CMakePackageConfigHelpers) + include(CMakeDependentOption) + include(CheckCXXCompilerFlag) + include(GNUInstallDirs) + include(CTest) + +-find_program(YAML_CPP_CLANG_FORMAT_EXE NAMES clang-format) +- + option(YAML_CPP_BUILD_CONTRIB "Enable yaml-cpp contrib in library" ON) + option(YAML_CPP_BUILD_TOOLS "Enable parse tools" ON) + option(YAML_BUILD_SHARED_LIBS "Build yaml-cpp shared library" ${BUILD_SHARED_LIBS}) +- ++option(YAML_CPP_INSTALL "Enable generation of yaml-cpp install targets" ${YAML_CPP_MAIN_PROJECT}) ++option(YAML_CPP_FORMAT_SOURCE "Format source" ON) + cmake_dependent_option(YAML_CPP_BUILD_TESTS +- "Enable yaml-cpp tests" ON +- "BUILD_TESTING;CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR" OFF) +-cmake_dependent_option(YAML_CPP_INSTALL +- "Enable generation of yaml-cpp install targets" ON +- "CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR" OFF) ++ "Enable yaml-cpp tests" OFF ++ "BUILD_TESTING;YAML_CPP_MAIN_PROJECT" OFF) + cmake_dependent_option(YAML_MSVC_SHARED_RT + "MSVC: Build yaml-cpp with shared runtime libs (/MD)" ON +- "MSVC" OFF) ++ "CMAKE_SYSTEM_NAME MATCHES Windows" OFF) ++ ++if (YAML_CPP_FORMAT_SOURCE) ++ find_program(YAML_CPP_CLANG_FORMAT_EXE NAMES clang-format) ++endif() + +-set(yaml-cpp-type STATIC) +-set(yaml-cpp-label-postfix "static") + if (YAML_BUILD_SHARED_LIBS) + set(yaml-cpp-type SHARED) + set(yaml-cpp-label-postfix "shared") ++else() ++ set(yaml-cpp-type STATIC) ++ set(yaml-cpp-label-postfix "static") + endif() + + set(build-shared $) +@@ -78,6 +84,10 @@ set_property(TARGET yaml-cpp + PROPERTY + CXX_STANDARD_REQUIRED ON) + ++if (NOT YAML_BUILD_SHARED_LIBS) ++ set_property(TARGET yaml-cpp PROPERTY POSITION_INDEPENDENT_CODE ON) ++endif() ++ + target_include_directories(yaml-cpp + PUBLIC + $ +@@ -91,11 +101,15 @@ if (NOT DEFINED CMAKE_CXX_STANDARD) + CXX_STANDARD 11) + endif() + ++if(YAML_CPP_MAIN_PROJECT) ++ target_compile_options(yaml-cpp ++ PRIVATE ++ $<${not-msvc}:-Wall -Wextra -Wshadow -Weffc++ -Wno-long-long> ++ $<${not-msvc}:-pedantic -pedantic-errors>) ++endif() ++ + target_compile_options(yaml-cpp + PRIVATE +- $<${not-msvc}:-Wall -Wextra -Wshadow -Weffc++ -Wno-long-long> +- $<${not-msvc}:-pedantic -pedantic-errors> +- + $<$:-MTd> + $<$:-MT> + $<$:-MDd> +@@ -108,6 +122,8 @@ target_compile_options(yaml-cpp + $<$:/W3 /wd4127 /wd4355>) + + target_compile_definitions(yaml-cpp ++ PUBLIC ++ $<$>:YAML_CPP_STATIC_DEFINE> + PRIVATE + $<${build-windows-dll}:${PROJECT_NAME}_DLL> + $<$>:YAML_CPP_NO_CONTRIB>) +@@ -127,10 +143,14 @@ set_target_properties(yaml-cpp PROPERTIES + PROJECT_LABEL "yaml-cpp ${yaml-cpp-label-postfix}" + DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}") + ++set(CONFIG_EXPORT_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/yaml-cpp") ++set(EXPORT_TARGETS yaml-cpp) + configure_package_config_file( + "${PROJECT_SOURCE_DIR}/yaml-cpp-config.cmake.in" + "${PROJECT_BINARY_DIR}/yaml-cpp-config.cmake" +- INSTALL_DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/yaml-cpp") ++ INSTALL_DESTINATION "${CONFIG_EXPORT_DIR}" ++ PATH_VARS CMAKE_INSTALL_INCLUDEDIR CMAKE_INSTALL_LIBDIR CONFIG_EXPORT_DIR YAML_BUILD_SHARED_LIBS) ++unset(EXPORT_TARGETS) + + write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/yaml-cpp-config-version.cmake" +@@ -139,36 +159,48 @@ write_basic_package_version_file( + configure_file(yaml-cpp.pc.in yaml-cpp.pc @ONLY) + + if (YAML_CPP_INSTALL) +- install(TARGETS yaml-cpp ++ install(TARGETS yaml-cpp + EXPORT yaml-cpp-targets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +- install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ ++ install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +- FILES_MATCHING PATTERN "*.h") ++ FILES_MATCHING PATTERN "*.h") + install(EXPORT yaml-cpp-targets +- DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/yaml-cpp") +- install(FILES +- "${PROJECT_BINARY_DIR}/yaml-cpp-config.cmake" +- "${PROJECT_BINARY_DIR}/yaml-cpp-config-version.cmake" +- DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/yaml-cpp") ++ DESTINATION "${CONFIG_EXPORT_DIR}") ++ install(FILES ++ "${PROJECT_BINARY_DIR}/yaml-cpp-config.cmake" ++ "${PROJECT_BINARY_DIR}/yaml-cpp-config-version.cmake" ++ DESTINATION "${CONFIG_EXPORT_DIR}") + install(FILES "${PROJECT_BINARY_DIR}/yaml-cpp.pc" +- DESTINATION ${CMAKE_INSTALL_DATADIR}/pkgconfig) ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + endif() ++unset(CONFIG_EXPORT_DIR) + + if(YAML_CPP_BUILD_TESTS) +- add_subdirectory(test) ++ add_subdirectory(test) + endif() + + if(YAML_CPP_BUILD_TOOLS) +- add_subdirectory(util) ++ add_subdirectory(util) + endif() + +-if (YAML_CPP_CLANG_FORMAT_EXE) ++if (YAML_CPP_FORMAT_SOURCE AND YAML_CPP_CLANG_FORMAT_EXE) + add_custom_target(format + COMMAND clang-format --style=file -i $ + COMMAND_EXPAND_LISTS + COMMENT "Running clang-format" + VERBATIM) + endif() ++ ++# uninstall target ++if(NOT TARGET uninstall) ++ configure_file( ++ "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" ++ "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" ++ IMMEDIATE @ONLY) ++ ++ add_custom_target(uninstall ++ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) ++endif() +diff --git a/cmake_uninstall.cmake.in b/cmake_uninstall.cmake.in +new file mode 100644 +index 0000000..c2d34d4 +--- /dev/null ++++ b/cmake_uninstall.cmake.in +@@ -0,0 +1,21 @@ ++if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") ++ message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") ++endif() ++ ++file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) ++string(REGEX REPLACE "\n" ";" files "${files}") ++foreach(file ${files}) ++ message(STATUS "Uninstalling $ENV{DESTDIR}${file}") ++ if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") ++ exec_program( ++ "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" ++ OUTPUT_VARIABLE rm_out ++ RETURN_VALUE rm_retval ++ ) ++ if(NOT "${rm_retval}" STREQUAL 0) ++ message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") ++ endif() ++ else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") ++ message(STATUS "File $ENV{DESTDIR}${file} does not exist.") ++ endif() ++endforeach() +diff --git a/yaml-cpp-config.cmake.in b/yaml-cpp-config.cmake.in +index 7b41e3f..799b9b4 100644 +--- a/yaml-cpp-config.cmake.in ++++ b/yaml-cpp-config.cmake.in +@@ -1,14 +1,22 @@ + # - Config file for the yaml-cpp package + # It defines the following variables +-# YAML_CPP_INCLUDE_DIR - include directory +-# YAML_CPP_LIBRARIES - libraries to link against ++# YAML_CPP_INCLUDE_DIR - include directory ++# YAML_CPP_LIBRARY_DIR - directory containing libraries ++# YAML_CPP_SHARED_LIBS_BUILT - whether we have built shared libraries or not ++# YAML_CPP_LIBRARIES - libraries to link against + +-# Compute paths +-get_filename_component(YAML_CPP_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +-set(YAML_CPP_INCLUDE_DIR "@CONFIG_INCLUDE_DIRS@") ++@PACKAGE_INIT@ ++ ++set_and_check(YAML_CPP_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@") ++set_and_check(YAML_CPP_LIBRARY_DIR "@PACKAGE_CMAKE_INSTALL_LIBDIR@") ++ ++# Are we building shared libraries? ++set(YAML_CPP_SHARED_LIBS_BUILT "@PACKAGE_YAML_BUILD_SHARED_LIBS@") + + # Our library dependencies (contains definitions for IMPORTED targets) +-include("${YAML_CPP_CMAKE_DIR}/yaml-cpp-targets.cmake") ++include(@PACKAGE_CONFIG_EXPORT_DIR@/yaml-cpp-targets.cmake) + + # These are IMPORTED targets created by yaml-cpp-targets.cmake + set(YAML_CPP_LIBRARIES "@EXPORT_TARGETS@") ++ ++check_required_components(@EXPORT_TARGETS@) +diff --git a/yaml-cpp.pc.in b/yaml-cpp.pc.in +index f713de6..d02dc9e 100644 +--- a/yaml-cpp.pc.in ++++ b/yaml-cpp.pc.in +@@ -1,7 +1,7 @@ + prefix=@CMAKE_INSTALL_PREFIX@ + exec_prefix=${prefix} +-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ +-libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@ ++includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ ++libdir=@CMAKE_INSTALL_FULL_LIBDIR@ + + Name: Yaml-cpp + Description: A YAML parser and emitter for C++ diff --git a/yaml-cpp0.7.spec b/yaml-cpp0.7.spec new file mode 100644 index 0000000..4deccb5 --- /dev/null +++ b/yaml-cpp0.7.spec @@ -0,0 +1,103 @@ +%global sover 0.7 +%global srcname yaml-cpp + +Name: yaml-cpp%{sover} +Version: 0.7.0 +Release: 1%{?dist} + +License: MIT +Summary: A YAML parser and emitter for C++ +URL: https://github.com/jbeder/yaml-cpp +Source0: %{url}/archive/%{srcname}-%{version}/%{srcname}-%{version}.tar.gz + +# CMake fixes from 0e6e28d1a38224fc8172fae0109ea7f673c096db commit +Patch100: yaml-cpp-cmake.patch + +BuildRequires: cmake +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: make + +# This compat package cannot be installed at the same time as the base package +# of the same soname version due to file conflicts. Different soname versions +# can be installed in parallel. +%ifarch armv7hl i686 +Conflicts: libyaml-cpp.so.%{sover} +%else +Conflicts: libyaml-cpp.so.%{sover}()(%{__isa_bits}bit) +%endif + +%description +yaml-cpp is a YAML parser and emitter in C++ written around the YAML 1.2 spec. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires: libstdc++-devel%{?_isa} +Conflicts: %{srcname}-devel + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + +%package static +Summary: Static library for %{name} +Requires: %{name}-devel%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Conflicts: %{srcname}-static + +%description static +The %{name}-static package contains the static library for %{name}. + +%prep +%autosetup -n %{srcname}-%{srcname}-%{version} -p1 + +%build +%cmake -B build_static \ + -DCMAKE_BUILD_TYPE=Release \ + -DYAML_CPP_BUILD_TOOLS:BOOL=OFF \ + -DYAML_CPP_FORMAT_SOURCE:BOOL=OFF \ + -DYAML_CPP_INSTALL:BOOL=ON \ + -DYAML_BUILD_SHARED_LIBS:BOOL=OFF \ + -DYAML_CPP_BUILD_TESTS:BOOL=OFF +%make_build -C build_static + +%cmake -B build_shared \ + -DCMAKE_BUILD_TYPE=Release \ + -DYAML_CPP_BUILD_TOOLS:BOOL=OFF \ + -DYAML_CPP_FORMAT_SOURCE:BOOL=OFF \ + -DYAML_CPP_INSTALL:BOOL=ON \ + -DYAML_BUILD_SHARED_LIBS:BOOL=ON \ + -DYAML_CPP_BUILD_TESTS:BOOL=OFF +%make_build -C build_shared + +%install +%make_install -C build_static yaml-cpp + +# Move files so they don't get trampled +mv %{buildroot}%{_libdir}/cmake/%{srcname} \ + %{buildroot}%{_libdir}/cmake/%{srcname}-static +mv %{buildroot}%{_libdir}/pkgconfig/%{srcname}.pc \ + %{buildroot}%{_libdir}/pkgconfig/%{srcname}-static.pc + +%make_install -C build_shared + +%files +%doc CONTRIBUTING.md README.md +%license LICENSE +%{_libdir}/lib%{srcname}*.so.%{sover}* + +%files devel +%{_includedir}/yaml-cpp/ +%{_libdir}/lib%{srcname}.so +%{_libdir}/cmake/%{srcname} +%{_libdir}/pkgconfig/%{srcname}.pc + +%files static +%license LICENSE +%{_libdir}/lib%{srcname}.a +%{_libdir}/cmake/%{srcname}-static +%{_libdir}/pkgconfig/%{srcname}-static.pc + +%changelog +* Tue Dec 02 2025 Orion Poplawski - 0.7.0-1 +- Initial compatibility packge