From 317d6d3ce45e3acc25c104662766505badc38ef0 Mon Sep 17 00:00:00 2001 From: Jesse Beder Date: Fri, 19 Nov 2021 10:47:42 -0600 Subject: [PATCH 1/3] Revert "Revert "Revert "Hide most of non-public symbols by default (#984)" (#1038)" (#1045)" This reverts commit 0733aeb451e2526dc05824d954348ca5baa0feed. --- CMakeLists.txt | 15 --------------- include/yaml-cpp/dll.h | 33 +++++++++++++++++++++++++++++++++ src/node_data.cpp | 2 +- 3 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 include/yaml-cpp/dll.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 73fd8e551..b230b9e6d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,11 +14,6 @@ include(CMakeDependentOption) include(CheckCXXCompilerFlag) include(GNUInstallDirs) 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) @@ -86,7 +81,6 @@ set_property(TARGET yaml-cpp target_include_directories(yaml-cpp PUBLIC $ - $ $ PRIVATE $) @@ -142,12 +136,6 @@ write_basic_package_version_file( "${PROJECT_BINARY_DIR}/yaml-cpp-config-version.cmake" 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) if (YAML_CPP_INSTALL) @@ -157,9 +145,6 @@ if (YAML_CPP_INSTALL) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - FILES_MATCHING PATTERN "*.h") - install(DIRECTORY ${PROJECT_BINARY_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h") install(EXPORT yaml-cpp-targets diff --git a/include/yaml-cpp/dll.h b/include/yaml-cpp/dll.h new file mode 100644 index 000000000..a32c06b2e --- /dev/null +++ b/include/yaml-cpp/dll.h @@ -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 diff --git a/src/node_data.cpp b/src/node_data.cpp index 8f5422ae6..da2aefce9 100644 --- a/src/node_data.cpp +++ b/src/node_data.cpp @@ -13,7 +13,7 @@ namespace YAML { namespace detail { -YAML_CPP_API std::atomic node::m_amount{0}; +std::atomic node::m_amount{0}; const std::string& node_data::empty_scalar() { static const std::string svalue; From e1e6344a217f3ca2fff2d54eb85973b0767309f7 Mon Sep 17 00:00:00 2001 From: Jesse Beder Date: Fri, 19 Nov 2021 10:55:17 -0600 Subject: [PATCH 2/3] Add back missing YAML_CPP_API. --- src/node_data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node_data.cpp b/src/node_data.cpp index da2aefce9..8f5422ae6 100644 --- a/src/node_data.cpp +++ b/src/node_data.cpp @@ -13,7 +13,7 @@ namespace YAML { namespace detail { -std::atomic node::m_amount{0}; +YAML_CPP_API std::atomic node::m_amount{0}; const std::string& node_data::empty_scalar() { static const std::string svalue; From 6323e5996fe3415b5605c7a17698aa981a027720 Mon Sep 17 00:00:00 2001 From: Pavel Karelin Date: Sat, 20 Nov 2021 12:06:20 +0300 Subject: [PATCH 3/3] The dll.h is made static again (revert commit 0733aeb4) New dll.h is assembly from cmake-generation for GCC, MSVC, MIGW --- CMakeLists.txt | 6 ++-- include/yaml-cpp/dll.h | 80 ++++++++++++++++++++++++++++-------------- 2 files changed, 58 insertions(+), 28 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b230b9e6d..f65efefab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,11 +31,13 @@ cmake_dependent_option(YAML_MSVC_SHARED_RT "MSVC: Build yaml-cpp with shared runtime libs (/MD)" ON "MSVC" OFF) -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") + add_definitions(-DYAML_CPP_STATIC_DEFINE) endif() set(build-shared $) diff --git a/include/yaml-cpp/dll.h b/include/yaml-cpp/dll.h index a32c06b2e..eabdda1d9 100644 --- a/include/yaml-cpp/dll.h +++ b/include/yaml-cpp/dll.h @@ -1,33 +1,61 @@ #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 +// Definition YAML_CPP_STATIC_DEFINE using to building YAML-CPP as static +// library (definition created by CMake or defined manually) + +// Definition yaml_cpp_EXPORTS using to building YAML-CPP as dll/so library +// (definition created by CMake or defined manually) + +#ifdef YAML_CPP_STATIC_DEFINE +# define YAML_CPP_API +# define YAML_CPP_NO_EXPORT +#else +# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) +# ifndef YAML_CPP_API +# ifdef yaml_cpp_EXPORTS + /* We are building this library */ +# pragma message( "Defining YAML_CPP_API for DLL export" ) +# define YAML_CPP_API __declspec(dllexport) +# else + /* We are using this library */ +# pragma message( "Defining YAML_CPP_API for DLL import" ) +# define YAML_CPP_API __declspec(dllimport) +# endif +# endif +# ifndef YAML_CPP_NO_EXPORT +# define YAML_CPP_NO_EXPORT +# endif +# else /* No _MSC_VER */ +# ifndef YAML_CPP_API +# ifdef yaml_cpp_EXPORTS + /* We are building this library */ +# define YAML_CPP_API __attribute__((visibility("default"))) +# else + /* We are using this library */ +# define YAML_CPP_API __attribute__((visibility("default"))) +# endif +# endif +# ifndef YAML_CPP_NO_EXPORT +# define YAML_CPP_NO_EXPORT __attribute__((visibility("hidden"))) +# endif +# endif /* _MSC_VER */ +#endif /* YAML_CPP_STATIC_DEFINE */ + +#ifndef YAML_CPP_DEPRECATED +# ifdef _MSC_VER +# define YAML_CPP_DEPRECATED __declspec(deprecated) +# else +# define YAML_CPP_DEPRECATED __attribute__ ((__deprecated__)) +# endif #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 +#ifndef YAML_CPP_DEPRECATED_EXPORT +# define YAML_CPP_DEPRECATED_EXPORT YAML_CPP_API YAML_CPP_DEPRECATED +#endif -#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 +#ifndef YAML_CPP_DEPRECATED_NO_EXPORT +# define YAML_CPP_DEPRECATED_NO_EXPORT YAML_CPP_NO_EXPORT YAML_CPP_DEPRECATED +#endif -#endif // DLL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 +#endif /* DLL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 */