246 lines
8.6 KiB
Diff
246 lines
8.6 KiB
Diff
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 $<BOOL:${YAML_BUILD_SHARED_LIBS}>)
|
|
@@ -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
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
|
@@ -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>
|
|
-
|
|
$<$<AND:${backport-msvc-runtime},${msvc-rt-mtd-static}>:-MTd>
|
|
$<$<AND:${backport-msvc-runtime},${msvc-rt-mt-static}>:-MT>
|
|
$<$<AND:${backport-msvc-runtime},${msvc-rt-mtd-dll}>:-MDd>
|
|
@@ -108,6 +122,8 @@ target_compile_options(yaml-cpp
|
|
$<$<CXX_COMPILER_ID:MSVC>:/W3 /wd4127 /wd4355>)
|
|
|
|
target_compile_definitions(yaml-cpp
|
|
+ PUBLIC
|
|
+ $<$<NOT:$<BOOL:${YAML_BUILD_SHARED_LIBS}>>:YAML_CPP_STATIC_DEFINE>
|
|
PRIVATE
|
|
$<${build-windows-dll}:${PROJECT_NAME}_DLL>
|
|
$<$<NOT:$<BOOL:${YAML_CPP_BUILD_CONTRIB}>>: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 "${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"
|
|
@@ -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")
|
|
install(EXPORT yaml-cpp-targets
|
|
- DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/yaml-cpp")
|
|
- 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 "${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 $<TARGET_PROPERTY:yaml-cpp,SOURCES>
|
|
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++
|