xref: /freebsd/contrib/libyaml/CMakeLists.txt (revision 0f5c86ddb0257f4b7620f1d8e898289be30b19bf)
1
2cmake_minimum_required(VERSION 3.0)
3project (yaml C)
4
5set (YAML_VERSION_MAJOR 0)
6set (YAML_VERSION_MINOR 2)
7set (YAML_VERSION_PATCH 5)
8set (YAML_VERSION_STRING "${YAML_VERSION_MAJOR}.${YAML_VERSION_MINOR}.${YAML_VERSION_PATCH}")
9
10option(BUILD_SHARED_LIBS "Build libyaml as a shared library" OFF)
11set(YAML_STATIC_LIB_NAME "yaml" CACHE STRING "Base name of static library output")
12
13#
14# Output directories for a build tree
15#
16if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
17  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
18endif()
19
20#
21# Install relative directories
22#
23if(NOT DEFINED INSTALL_LIB_DIR)
24  set(INSTALL_LIB_DIR lib)
25endif()
26if(NOT DEFINED INSTALL_BIN_DIR)
27  set(INSTALL_BIN_DIR bin)
28endif()
29if(NOT DEFINED INSTALL_INCLUDE_DIR)
30  set(INSTALL_INCLUDE_DIR include)
31endif()
32if(NOT DEFINED INSTALL_CMAKE_DIR)
33  set(INSTALL_CMAKE_DIR cmake)
34endif()
35
36#
37# Build library
38#
39set(SRCS
40  src/api.c
41  src/dumper.c
42  src/emitter.c
43  src/loader.c
44  src/parser.c
45  src/reader.c
46  src/scanner.c
47  src/writer.c
48  )
49
50set(config_h ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
51configure_file(
52  cmake/config.h.in
53  ${config_h}
54  )
55
56add_library(yaml ${SRCS})
57
58if(NOT BUILD_SHARED_LIBS)
59  set_target_properties(yaml
60    PROPERTIES OUTPUT_NAME ${YAML_STATIC_LIB_NAME}
61  )
62endif()
63
64set_target_properties(yaml
65  PROPERTIES DEFINE_SYMBOL YAML_DECLARE_EXPORT
66  )
67
68target_compile_definitions(yaml
69  PRIVATE HAVE_CONFIG_H
70  PUBLIC
71    $<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:YAML_DECLARE_STATIC>
72    $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>
73  )
74
75target_include_directories(yaml PUBLIC
76  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
77  $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
78  $<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
79  )
80
81#
82# Install rules
83#
84install(
85  FILES
86    include/yaml.h
87  DESTINATION include COMPONENT Development
88  )
89
90install(
91  TARGETS yaml
92  EXPORT yamlTargets
93  RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT Runtime
94  LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT Development
95  ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT Development
96  )
97
98#
99# Add tests
100#
101include(CTest) # This module defines BUILD_TESTING option
102if(BUILD_TESTING)
103  add_subdirectory(tests)
104endif()
105
106#
107# Generate 'yamlConfig.cmake', 'yamlConfigVersion.cmake' and 'yamlTargets.cmake'
108#
109include(CMakePackageConfigHelpers)
110
111# Configure 'yamlConfig.cmake' for a build tree
112set(CONFIG_DIR_CONFIG ${PROJECT_BINARY_DIR})
113set(config_file ${PROJECT_BINARY_DIR}/yamlConfig.cmake)
114configure_package_config_file(
115  yamlConfig.cmake.in
116  ${config_file}
117  INSTALL_DESTINATION ${PROJECT_BINARY_DIR}
118  PATH_VARS CONFIG_DIR_CONFIG
119  NO_CHECK_REQUIRED_COMPONENTS_MACRO
120  )
121
122# Configure 'yamlTargets.cmake' for a build tree
123export(TARGETS yaml
124  FILE ${PROJECT_BINARY_DIR}/yamlTargets.cmake
125  )
126
127# Configure and install 'yamlConfig.cmake' for an install tree
128set(CONFIG_DIR_CONFIG ${INSTALL_CMAKE_DIR})
129set(install_config_file ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/yamlConfig.cmake )
130configure_package_config_file(
131  yamlConfig.cmake.in
132  ${install_config_file}
133  INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}
134  PATH_VARS CONFIG_DIR_CONFIG
135  NO_CHECK_REQUIRED_COMPONENTS_MACRO
136  )
137install(
138  FILES ${install_config_file}
139  DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development
140  )
141
142# Configure and install 'yamlTargets.cmake' for an install tree
143install(EXPORT yamlTargets
144  FILE yamlTargets.cmake
145  DESTINATION ${INSTALL_CMAKE_DIR}
146  COMPONENT Development
147  )
148
149# Configure 'yamlConfigVersion.cmake' for a build tree
150set(config_version_file ${PROJECT_BINARY_DIR}/yamlConfigVersion.cmake)
151write_basic_package_version_file(
152    ${config_version_file}
153    VERSION ${YAML_VERSION_STRING}
154    COMPATIBILITY AnyNewerVersion
155)
156# ... and install for an install tree
157install(
158  FILES ${config_version_file}
159  DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development
160  )
161