mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-12-12 10:41:43 +00:00
Compare commits
9 Commits
revert-984
...
revert-104
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e1e6344a21 | ||
|
|
317d6d3ce4 | ||
|
|
328d2d85e8 | ||
|
|
4564d9a131 | ||
|
|
2f8997565b | ||
|
|
1713859b05 | ||
|
|
393a02a225 | ||
|
|
0733aeb451 | ||
|
|
0d9dbcfe8c |
40
.github/workflows/build.yml
vendored
Normal file
40
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
name: Github PR
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
workflow_dispatch:
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Build static
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir -p build && cd build
|
||||||
|
cmake ..
|
||||||
|
cmake --build . --parallel 4
|
||||||
|
|
||||||
|
- name: Test static
|
||||||
|
shell: bash
|
||||||
|
run: cd build && ctest --output-on-failure
|
||||||
|
|
||||||
|
- name: Build shared
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
rm -rf build && mkdir -p build && cd build
|
||||||
|
cmake .. -DYAML_BUILD_SHARED_LIBS=ON
|
||||||
|
cmake --build . --parallel 4
|
||||||
|
|
||||||
|
# tests are failing for unknown reasons
|
||||||
|
- if: matrix.os == 'ubuntu-latest'
|
||||||
|
name: Test shared
|
||||||
|
shell: bash
|
||||||
|
run: cd build && ctest --output-on-failure
|
||||||
|
# test all ASAP
|
||||||
@@ -14,11 +14,6 @@ include(CMakeDependentOption)
|
|||||||
include(CheckCXXCompilerFlag)
|
include(CheckCXXCompilerFlag)
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
include(CTest)
|
include(CTest)
|
||||||
include(GenerateExportHeader)
|
|
||||||
|
|
||||||
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
|
||||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
||||||
set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
|
|
||||||
|
|
||||||
find_program(YAML_CPP_CLANG_FORMAT_EXE NAMES clang-format)
|
find_program(YAML_CPP_CLANG_FORMAT_EXE NAMES clang-format)
|
||||||
|
|
||||||
@@ -86,7 +81,6 @@ set_property(TARGET yaml-cpp
|
|||||||
target_include_directories(yaml-cpp
|
target_include_directories(yaml-cpp
|
||||||
PUBLIC
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
||||||
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
PRIVATE
|
PRIVATE
|
||||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)
|
||||||
@@ -142,12 +136,6 @@ write_basic_package_version_file(
|
|||||||
"${PROJECT_BINARY_DIR}/yaml-cpp-config-version.cmake"
|
"${PROJECT_BINARY_DIR}/yaml-cpp-config-version.cmake"
|
||||||
COMPATIBILITY AnyNewerVersion)
|
COMPATIBILITY AnyNewerVersion)
|
||||||
|
|
||||||
generate_export_header(yaml-cpp
|
|
||||||
BASE_NAME YAML_CPP
|
|
||||||
EXPORT_FILE_NAME "${PROJECT_BINARY_DIR}/include/yaml-cpp/dll.h"
|
|
||||||
EXPORT_MACRO_NAME YAML_CPP_API
|
|
||||||
)
|
|
||||||
|
|
||||||
configure_file(yaml-cpp.pc.in yaml-cpp.pc @ONLY)
|
configure_file(yaml-cpp.pc.in yaml-cpp.pc @ONLY)
|
||||||
|
|
||||||
if (YAML_CPP_INSTALL)
|
if (YAML_CPP_INSTALL)
|
||||||
@@ -157,9 +145,6 @@ if (YAML_CPP_INSTALL)
|
|||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
ARCHIVE 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")
|
|
||||||
install(DIRECTORY ${PROJECT_BINARY_DIR}/include/
|
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
FILES_MATCHING PATTERN "*.h")
|
FILES_MATCHING PATTERN "*.h")
|
||||||
install(EXPORT yaml-cpp-targets
|
install(EXPORT yaml-cpp-targets
|
||||||
|
|||||||
46
README.md
46
README.md
@@ -1,50 +1,46 @@
|
|||||||
# yaml-cpp [](https://travis-ci.org/jbeder/yaml-cpp) [](https://codedocs.xyz/jbeder/yaml-cpp/)
|
# yaml-cpp [](https://travis-ci.org/jbeder/yaml-cpp) [](https://codedocs.xyz/jbeder/yaml-cpp/)
|
||||||
|
|
||||||
yaml-cpp is a [YAML](http://www.yaml.org/) parser and emitter in C++ matching the [YAML 1.2 spec](http://www.yaml.org/spec/1.2/spec.html).
|
`yaml-cpp` is a [YAML](http://www.yaml.org/) parser and emitter in C++ matching the [YAML 1.2 spec](http://www.yaml.org/spec/1.2/spec.html).
|
||||||
|
|
||||||
To get a feel for how it can be used, see the [Tutorial](https://github.com/jbeder/yaml-cpp/wiki/Tutorial) or [How to Emit YAML](https://github.com/jbeder/yaml-cpp/wiki/How-To-Emit-YAML). For the old API (version < 0.5.0), see [How To Parse A Document](https://github.com/jbeder/yaml-cpp/wiki/How-To-Parse-A-Document-(Old-API)).
|
## Usage
|
||||||
|
|
||||||
# Problems? #
|
See [Tutorial](https://github.com/jbeder/yaml-cpp/wiki/Tutorial) and [How to Emit YAML](https://github.com/jbeder/yaml-cpp/wiki/How-To-Emit-YAML) for reference. For the old API (until 0.5.0), see [How To Parse A Document](https://github.com/jbeder/yaml-cpp/wiki/How-To-Parse-A-Document-(Old-API)).
|
||||||
|
|
||||||
|
## Any Problems?
|
||||||
|
|
||||||
If you find a bug, post an [issue](https://github.com/jbeder/yaml-cpp/issues)! If you have questions about how to use yaml-cpp, please post it on http://stackoverflow.com and tag it [`yaml-cpp`](http://stackoverflow.com/questions/tagged/yaml-cpp).
|
If you find a bug, post an [issue](https://github.com/jbeder/yaml-cpp/issues)! If you have questions about how to use yaml-cpp, please post it on http://stackoverflow.com and tag it [`yaml-cpp`](http://stackoverflow.com/questions/tagged/yaml-cpp).
|
||||||
|
|
||||||
# How to Build #
|
## How to Build
|
||||||
|
|
||||||
yaml-cpp uses [CMake](http://www.cmake.org) to support cross-platform building. The basic steps to build are:
|
`yaml-cpp` uses [CMake](http://www.cmake.org) to support cross-platform building. Install [CMake](http://www.cmake.org) _(Resources -> Download)_ before proceeding. The basic steps to build are:
|
||||||
|
|
||||||
1. Download and install [CMake](http://www.cmake.org) (Resources -> Download).
|
**Note:** If you don't use the provided installer for your platform, make sure that you add `CMake`'s bin folder to your path.
|
||||||
|
|
||||||
**Note:** If you don't use the provided installer for your platform, make sure that you add CMake's bin folder to your path.
|
#### 1. Navigate into the source directory, create build folder and run `CMake`:
|
||||||
|
|
||||||
2. Navigate into the source directory, and type:
|
```sh
|
||||||
|
|
||||||
```
|
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
|
cmake [-G generator] [-YAML_BUILD_SHARED_LIBS=on|OFF] ..
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Run CMake. The basic syntax is:
|
* The `generator` option is the build system you'd like to use. Run `cmake` without arguments to see a full list of available generators.
|
||||||
|
* On Windows, you might use "Visual Studio 12 2013" (VS 2013 32-bits), or "Visual Studio 14 2015 Win64" (VS 2015 64-bits).
|
||||||
|
* On OS X, you might use "Xcode".
|
||||||
|
* On a UNIX-like system, omit the option (for a Makefile).
|
||||||
|
|
||||||
```
|
* `yaml-cpp` builds a static library by default, you may want to build a shared library by specifying `-YAML_BUILD_SHARED_LIBS=ON`.
|
||||||
cmake [-G generator] [-DYAML_BUILD_SHARED_LIBS=ON|OFF] ..
|
|
||||||
```
|
|
||||||
|
|
||||||
* The `generator` is whatever type of build system you'd like to use. To see a full list of generators on your platform, just run `cmake` (with no arguments). For example:
|
|
||||||
* On Windows, you might use "Visual Studio 12 2013" to generate a Visual Studio 2013 solution or "Visual Studio 14 2015 Win64" to generate a 64-bit Visual Studio 2015 solution.
|
|
||||||
* On OS X, you might use "Xcode" to generate an Xcode project
|
|
||||||
* On a UNIX-y system, simply omit the option to generate a makefile
|
|
||||||
|
|
||||||
* yaml-cpp defaults to building a static library, but you may build a shared library by specifying `-DYAML_BUILD_SHARED_LIBS=ON`.
|
|
||||||
|
|
||||||
* For more options on customizing the build, see the [CMakeLists.txt](https://github.com/jbeder/yaml-cpp/blob/master/CMakeLists.txt) file.
|
* For more options on customizing the build, see the [CMakeLists.txt](https://github.com/jbeder/yaml-cpp/blob/master/CMakeLists.txt) file.
|
||||||
|
|
||||||
4. Build it!
|
#### 2. Build it!
|
||||||
|
* The command you'll need to run depends on the generator you chose earlier.
|
||||||
|
|
||||||
5. To clean up, just remove the `build` directory.
|
**Note:** To clean up, just remove the `build` directory.
|
||||||
|
|
||||||
# Recent Release #
|
## Recent Releases
|
||||||
|
|
||||||
[yaml-cpp 0.6.0](https://github.com/jbeder/yaml-cpp/releases/tag/yaml-cpp-0.6.0) has been released! This release requires C++11, and no longer depends on Boost.
|
[yaml-cpp 0.6.0](https://github.com/jbeder/yaml-cpp/releases/tag/yaml-cpp-0.6.0) released! This release requires C++11, and no longer depends on Boost.
|
||||||
|
|
||||||
[yaml-cpp 0.3.0](https://github.com/jbeder/yaml-cpp/releases/tag/release-0.3.0) is still available if you want the old API.
|
[yaml-cpp 0.3.0](https://github.com/jbeder/yaml-cpp/releases/tag/release-0.3.0) is still available if you want the old API.
|
||||||
|
|
||||||
|
|||||||
33
include/yaml-cpp/dll.h
Normal file
33
include/yaml-cpp/dll.h
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#ifndef DLL_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|
||||||
|
#define DLL_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) || \
|
||||||
|
(defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
|
||||||
|
(__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// The following ifdef block is the standard way of creating macros which make
|
||||||
|
// exporting from a DLL simpler. All files within this DLL are compiled with the
|
||||||
|
// yaml_cpp_EXPORTS symbol defined on the command line. This symbol should not
|
||||||
|
// be defined on any project that uses this DLL. This way any other project
|
||||||
|
// whose source files include this file see YAML_CPP_API functions as being
|
||||||
|
// imported from a DLL, whereas this DLL sees symbols defined with this macro as
|
||||||
|
// being exported.
|
||||||
|
#undef YAML_CPP_API
|
||||||
|
|
||||||
|
#ifdef YAML_CPP_DLL // Using or Building YAML-CPP DLL (definition defined
|
||||||
|
// manually)
|
||||||
|
#ifdef yaml_cpp_EXPORTS // Building YAML-CPP DLL (definition created by CMake
|
||||||
|
// or defined manually)
|
||||||
|
// #pragma message( "Defining YAML_CPP_API for DLL export" )
|
||||||
|
#define YAML_CPP_API __declspec(dllexport)
|
||||||
|
#else // yaml_cpp_EXPORTS
|
||||||
|
// #pragma message( "Defining YAML_CPP_API for DLL import" )
|
||||||
|
#define YAML_CPP_API __declspec(dllimport)
|
||||||
|
#endif // yaml_cpp_EXPORTS
|
||||||
|
#else // YAML_CPP_DLL
|
||||||
|
#define YAML_CPP_API
|
||||||
|
#endif // YAML_CPP_DLL
|
||||||
|
|
||||||
|
#endif // DLL_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|
||||||
@@ -169,7 +169,7 @@ class node {
|
|||||||
using nodes = std::set<node*, less>;
|
using nodes = std::set<node*, less>;
|
||||||
nodes m_dependencies;
|
nodes m_dependencies;
|
||||||
size_t m_index;
|
size_t m_index;
|
||||||
static std::atomic<size_t> m_amount;
|
static YAML_CPP_API std::atomic<size_t> m_amount;
|
||||||
};
|
};
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
} // namespace YAML
|
} // namespace YAML
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ std::vector<unsigned char> DecodeBase64(const std::string &input) {
|
|||||||
// skip newlines
|
// skip newlines
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
unsigned char d = decoding[static_cast<unsigned>(input[i])];
|
unsigned char d = decoding[static_cast<unsigned char>(input[i])];
|
||||||
if (d == 255)
|
if (d == 255)
|
||||||
return ret_type();
|
return ret_type();
|
||||||
|
|
||||||
|
|||||||
14
test/binary_test.cpp
Normal file
14
test/binary_test.cpp
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
#include "gtest/gtest.h"
|
||||||
|
#include <yaml-cpp/binary.h>
|
||||||
|
|
||||||
|
TEST(BinaryTest, DecodingSimple) {
|
||||||
|
std::string input{90, 71, 86, 104, 90, 71, 74, 108, 90, 87, 89, 61};
|
||||||
|
const std::vector<unsigned char> &result = YAML::DecodeBase64(input);
|
||||||
|
EXPECT_EQ(std::string(result.begin(), result.end()), "deadbeef");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(BinaryTest, DecodingNoCrashOnNegative) {
|
||||||
|
std::string input{-58, -1, -99, 109};
|
||||||
|
const std::vector<unsigned char> &result = YAML::DecodeBase64(input);
|
||||||
|
EXPECT_TRUE(result.empty());
|
||||||
|
}
|
||||||
@@ -5,19 +5,6 @@
|
|||||||
#include "yaml-cpp/eventhandler.h"
|
#include "yaml-cpp/eventhandler.h"
|
||||||
#include "yaml-cpp/yaml.h" // IWYU pragma: keep
|
#include "yaml-cpp/yaml.h" // IWYU pragma: keep
|
||||||
|
|
||||||
struct Params {
|
|
||||||
bool hasFile;
|
|
||||||
std::string fileName;
|
|
||||||
};
|
|
||||||
|
|
||||||
Params ParseArgs(int argc, char** argv) {
|
|
||||||
Params p;
|
|
||||||
|
|
||||||
std::vector<std::string> args(argv + 1, argv + argc);
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
class NullEventHandler : public YAML::EventHandler {
|
class NullEventHandler : public YAML::EventHandler {
|
||||||
public:
|
public:
|
||||||
void OnDocumentStart(const YAML::Mark&) override {}
|
void OnDocumentStart(const YAML::Mark&) override {}
|
||||||
@@ -47,8 +34,6 @@ void parse(std::istream& input) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
Params p = ParseArgs(argc, argv);
|
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
std::ifstream fin;
|
std::ifstream fin;
|
||||||
fin.open(argv[1]);
|
fin.open(argv[1]);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
prefix=@CMAKE_INSTALL_PREFIX@
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
exec_prefix=${prefix}
|
exec_prefix=${prefix}
|
||||||
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
||||||
libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
|
libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
|
|
||||||
Name: Yaml-cpp
|
Name: Yaml-cpp
|
||||||
Description: A YAML parser and emitter for C++
|
Description: A YAML parser and emitter for C++
|
||||||
|
|||||||
Reference in New Issue
Block a user