From fb9ae3b26f57c7fc6ab3c1b2bff6f6aae578a79e Mon Sep 17 00:00:00 2001 From: Vitaly Zaitsev Date: Wed, 19 Apr 2023 16:47:13 +0200 Subject: [PATCH] Fixed broken CMake configs (rhbz#2188009). --- yaml-cpp-cmake.patch | 241 ++++++++++++++++++++++++++++++++++++++++--- yaml-cpp.spec | 67 ++++++------ 2 files changed, 262 insertions(+), 46 deletions(-) diff --git a/yaml-cpp-cmake.patch b/yaml-cpp-cmake.patch index ff50364..218484c 100644 --- a/yaml-cpp-cmake.patch +++ b/yaml-cpp-cmake.patch @@ -1,30 +1,245 @@ -Index: yaml-cpp-yaml-cpp-0.7.0/CMakeLists.txt -=================================================================== ---- yaml-cpp-yaml-cpp-0.7.0.orig/CMakeLists.txt -+++ yaml-cpp-yaml-cpp-0.7.0/CMakeLists.txt -@@ -130,7 +130,7 @@ set_target_properties(yaml-cpp PROPERTIE +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 "${CMAKE_INSTALL_LIBDIR}/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" -@@ -148,13 +148,13 @@ if (YAML_CPP_INSTALL) +@@ -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") ++ FILES_MATCHING PATTERN "*.h") install(EXPORT yaml-cpp-targets - DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/yaml-cpp") -+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/yaml-cpp") - install(FILES - "${PROJECT_BINARY_DIR}/yaml-cpp-config.cmake" - "${PROJECT_BINARY_DIR}/yaml-cpp-config-version.cmake" +- 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 "${CMAKE_INSTALL_LIBDIR}/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-cpp.spec b/yaml-cpp.spec index 078f77a..ed03cee 100644 --- a/yaml-cpp.spec +++ b/yaml-cpp.spec @@ -2,16 +2,18 @@ Name: yaml-cpp Version: 0.7.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A YAML parser and emitter for C++ License: MIT URL: https://github.com/jbeder/yaml-cpp -Source0: https://github.com/jbeder/yaml-cpp/archive/%{name}-%{version}.tar.gz +Source0: %{url}/archive/%{name}-%{version}/%{name}-%{version}.tar.gz -# Install pkgconf and cmake files in LIBDIR instead of DATADIR -Patch0: yaml-cpp-cmake.patch +# CMake fixes from 0e6e28d1a38224fc8172fae0109ea7f673c096db commit +Patch100: yaml-cpp-cmake.patch -BuildRequires: cmake gcc gcc-c++ +BuildRequires: cmake +BuildRequires: gcc +BuildRequires: gcc-c++ BuildRequires: make %description @@ -19,9 +21,8 @@ yaml-cpp is a YAML parser and emitter in C++ written around the YAML 1.2 spec. %package devel Summary: Development files for %{name} -License: MIT -Requires: %{name}%{?_isa} = %{version}-%{release} -Requires: pkgconfig +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires: libstdc++-devel%{?_isa} %description devel The %{name}-devel package contains libraries and header files for @@ -29,67 +30,67 @@ developing applications that use %{name}. %package static Summary: Static library for %{name} -License: MIT -Requires: %{name}-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-devel%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} %description static The %{name}-static package contains the static library for %{name}. - %prep -%autosetup -p1 -n %{name}-%{name}-%{version} - +%autosetup -n %{name}-%{name}-%{version} -p1 %build -%cmake -B build_shared \ - -DYAML_CPP_BUILD_TOOLS=OFF \ - -DYAML_BUILD_SHARED_LIBS=ON \ - -DYAML_CPP_BUILD_TESTS=OFF \ - %{nil} -%make_build -C build_shared - %cmake -B build_static \ - -DYAML_CPP_BUILD_TOOLS=OFF \ - -DYAML_BUILD_SHARED_LIBS=OFF \ - -DYAML_CPP_BUILD_TESTS=OFF \ - %{nil} + -DYAML_CPP_BUILD_TOOLS:BOOL=OFF \ + -DYAML_CPP_FORMAT_SOURCE:BOOL=OFF \ + -DYAML_BUILD_SHARED_LIBS:BOOL=OFF \ + -DYAML_BUILD_SHARED_LIBS:BOOL=OFF \ + -DYAML_CPP_BUILD_TESTS:BOOL=OFF %make_build -C build_static +%cmake -B build_shared \ + -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/%{name} \ - %{buildroot}%{_libdir}/cmake/%{name}-static + %{buildroot}%{_libdir}/cmake/%{name}-static mv %{buildroot}%{_libdir}/pkgconfig/%{name}.pc \ - %{buildroot}%{_libdir}/pkgconfig/%{name}-static.pc + %{buildroot}%{_libdir}/pkgconfig/%{name}-static.pc %make_install -C build_shared - -%ldconfig_scriptlets - - %files %doc CONTRIBUTING.md README.md %license LICENSE -%{_libdir}/*.so.%{sover}* +%{_libdir}/lib%{name}*.so.%{sover}* %files devel %{_includedir}/yaml-cpp/ -%{_libdir}/*.so +%{_libdir}/lib%{name}.so %{_libdir}/cmake/%{name} %{_libdir}/pkgconfig/%{name}.pc %files static %license LICENSE -%{_libdir}/*.a +%{_libdir}/lib%{name}.a %{_libdir}/cmake/%{name}-static %{_libdir}/pkgconfig/%{name}-static.pc %changelog +* Wed Apr 19 2023 Vitaly Zaitsev - 0.7.0-3 +- Fixed broken CMake configs (rhbz#2188009). +- Backported CMake fixes from upstream. +- Converted license tag to SPDX. +- Performed minor SPEC cleanup. + * Sat Jan 21 2023 Fedora Release Engineering - 0.7.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild