Support cmake build system,Modify URL and Source0

This commit is contained in:
fly_fzc 2023-05-27 09:13:49 +08:00
parent 32e55aefb9
commit 4736175d8e
2 changed files with 154 additions and 5 deletions

View File

@ -0,0 +1,141 @@
From fe3d086fa75a289d6e4085df6f855f4c88c8d7c2 Mon Sep 17 00:00:00 2001
From: Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
Date: Thu, 30 Nov 2017 08:14:27 -0500
Subject: [PATCH] Improve CMake build system
New build options
-----------------
* Add option BUILD_TESTING by default ON
See https://cmake.org/cmake/help/v2.8.12/cmake.html#module:CTest
* Simplify library type selection using standard option BUILD_SHARED_LIBS
See https://cmake.org/cmake/help/v3.0/variable/BUILD_SHARED_LIBS.html
yamlConfig.cmake
----------------
* Generate and install yamlConfig.cmake, yamlConfigVersion.cmake and yamlTargets.cmake
* Bump CMake version and explicitly associate include dirs with targets
See https://cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#include-directories-and-usage-requirements
* Ensure building against libyaml using "find_package(yaml)" uses expected compile options: Set HAVE_CONFIG_H
as private compile option, YAML_DECLARE_STATIC as public
Testing
-------
* Build all examples from "tests" directory
CMake Best practices
--------------------
* configure "config.h" based on version info found in CMakeLists.txt
* Ensure buildsystem re-generation listing sources (best-practice)
It is not recommended to use GLOB to collect a list of source files from
the source tree. If no CMakeLists.txt file changes when a source is added
or removed then the generated build system cannot know when to ask CMake
to regenerate.
See https://cmake.org/cmake/help/v3.8/command/file.html
Compilation warnings
--------------------
* Set _CRT_SECURE_NO_WARNINGS if building using VisualStudio
This will avoid warnings like this one:
```
C:\projects\libyaml\tests\run-emitter.c(268): warning C4996: 'fopen':
This function or variable may be unsafe. Consider using fopen_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for
details.
```
Continuous Integration
----------------------
* travis: Install CMake >= 3.x using scikit-ci-addons
* Add comments to appveyor.yml and run-tests.sh
---
cmake/config.h.in | 4 ++
tests/CMakeLists.txt | 27 +++++++
yamlConfig.cmake.in | 16 +++++
3 files changed, 47 insertions(+), 0 deletions(-)
create mode 100644 cmake/config.h.in
create mode 100644 tests/CMakeLists.txt
create mode 100644 yamlConfig.cmake.in
diff --git a/cmake/config.h.in b/cmake/config.h.in
new file mode 100644
index 0000000..51e2e24
--- /dev/null
+++ b/cmake/config.h.in
@@ -0,0 +1,4 @@
+#define YAML_VERSION_MAJOR @YAML_VERSION_MAJOR@
+#define YAML_VERSION_MINOR @YAML_VERSION_MINOR@
+#define YAML_VERSION_PATCH @YAML_VERSION_PATCH@
+#define YAML_VERSION_STRING "@YAML_VERSION_STRING@"
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
new file mode 100644
index 0000000..d10b424
--- /dev/null
+++ b/tests/CMakeLists.txt
@@ -0,0 +1,27 @@
+
+function(add_yaml_executable name)
+ add_executable(${name} ${name}.c)
+ target_link_libraries(${name} yaml)
+endfunction()
+
+foreach(name IN ITEMS
+ example-deconstructor
+ example-deconstructor-alt
+ example-reformatter
+ example-reformatter-alt
+ run-dumper
+ run-emitter
+ run-emitter-test-suite
+ run-loader
+ run-parser
+ run-parser-test-suite
+ run-scanner
+ test-reader
+ test-version
+ )
+ add_yaml_executable(${name})
+endforeach()
+
+add_test(NAME version COMMAND test-version)
+add_test(NAME reader COMMAND test-reader)
+
diff --git a/yamlConfig.cmake.in b/yamlConfig.cmake.in
new file mode 100644
index 0000000..dd3f8ee
--- /dev/null
+++ b/yamlConfig.cmake.in
@@ -0,0 +1,16 @@
+# Config file for the yaml library.
+#
+# It defines the following variables:
+# yaml_LIBRARIES - libraries to link against
+
+@PACKAGE_INIT@
+
+set_and_check(yaml_TARGETS "@PACKAGE_CONFIG_DIR_CONFIG@/yamlTargets.cmake")
+
+if(NOT yaml_TARGETS_IMPORTED)
+ set(yaml_TARGETS_IMPORTED 1)
+ include(${yaml_TARGETS})
+endif()
+
+set(yaml_LIBRARIES yaml)
+
--
2.27.0

View File

@ -1,25 +1,29 @@
Name: libyaml
Version: 0.2.5
Release: 4
Release: 5
Summary: A C library for parsing and emitting YAML
License: MIT
URL: http://pyyaml.org/
Source0: http://pyyaml.org/download/libyaml/yaml-%{version}.tar.gz
URL: https://github.com/yaml/libyaml
Source0: https://github.com/yaml/libyaml/releases/download/%{version}/yaml-%{version}.tar.gz
Patch0: fix-heap-buffer-overflow-in-yaml_emitter_emit_flow_m.patch
Patch1: fix-heap-buffer-overflow-error-in-yaml-emitter-emit.patch
Patch2: backport-Improve-CMake-build-system.patch
BuildRequires: gcc
%description
%{summary}.
YAML is a data serialization format designed for human readability and
interaction with scripting languages. LibYAML is a YAML parser and
emitter written in C.
%package devel
Summary: Development files for LibYAML applications
Requires: libyaml = %{version}-%{release}, pkgconfig
%description devel
%{summary}.
The %{name}-devel package contains libraries and header files for
developing applications that use LibYAML.
%package help
Summary: Documents for using LibYAML
@ -70,6 +74,10 @@ make check
%changelog
* Sat May 27 2023 fuanan <fuanan3@h-partners.com> - 0.2.5-5
- Support cmake build system
- Modify URL and Source0
* Fri Nov 18 2022 chenziyang <chenziyang4@huawei.com> - 0.2.5-4
- Fix heap buffer overflow in yaml_emitter_emit_flow_sequence_item