142 lines
3.8 KiB
Diff
142 lines
3.8 KiB
Diff
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
|
|
|