]>
Commit | Line | Data |
---|---|---|
01e8dadf | 1 | |
fe3d086f | 2 | cmake_minimum_required(VERSION 3.0) |
01e8dadf KS |
3 | project (yaml C) |
4 | ||
5 | set (YAML_VERSION_MAJOR 0) | |
24a020a1 TM |
6 | set (YAML_VERSION_MINOR 2) |
7 | set (YAML_VERSION_PATCH 2) | |
01e8dadf KS |
8 | set (YAML_VERSION_STRING "${YAML_VERSION_MAJOR}.${YAML_VERSION_MINOR}.${YAML_VERSION_PATCH}") |
9 | ||
fe3d086f | 10 | option(BUILD_SHARED_LIBS "Build libyaml as a shared library" OFF) |
99e0a150 | 11 | option(YAML_STATIC_LIB_NAME "base name of static library output" yaml) |
01e8dadf | 12 | |
fe3d086f JCFR |
13 | # |
14 | # Output directories for a build tree | |
15 | # | |
16 | if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY) | |
17 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) | |
18 | endif() | |
300bd3f8 | 19 | |
fe3d086f JCFR |
20 | # |
21 | # Install relative directories | |
22 | # | |
23 | if(NOT DEFINED INSTALL_LIB_DIR) | |
24 | set(INSTALL_LIB_DIR lib) | |
25 | endif() | |
26 | if(NOT DEFINED INSTALL_BIN_DIR) | |
27 | set(INSTALL_BIN_DIR bin) | |
28 | endif() | |
29 | if(NOT DEFINED INSTALL_INCLUDE_DIR) | |
30 | set(INSTALL_INCLUDE_DIR include) | |
31 | endif() | |
32 | if(NOT DEFINED INSTALL_CMAKE_DIR) | |
33 | set(INSTALL_CMAKE_DIR cmake) | |
34 | endif() | |
01e8dadf | 35 | |
fe3d086f JCFR |
36 | # |
37 | # Build library | |
38 | # | |
39 | set(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 | ) | |
6dfd50f1 | 49 | |
fe3d086f JCFR |
50 | set(config_h ${CMAKE_CURRENT_BINARY_DIR}/include/config.h) |
51 | configure_file( | |
52 | cmake/config.h.in | |
53 | ${config_h} | |
54 | ) | |
6dfd50f1 | 55 | |
fe3d086f JCFR |
56 | add_library(yaml ${SRCS}) |
57 | ||
58 | if(NOT BUILD_SHARED_LIBS) | |
59 | set_target_properties(yaml | |
99e0a150 MD |
60 | PROPERTIES OUTPUT_NAME ${YAML_STATIC_LIB_NAME} |
61 | ) | |
fe3d086f JCFR |
62 | endif() |
63 | ||
64 | set_target_properties(yaml | |
65 | PROPERTIES DEFINE_SYMBOL YAML_DECLARE_EXPORT | |
66 | ) | |
67 | ||
68 | target_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 | ||
75 | target_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 | # | |
84 | install( | |
85 | FILES | |
86 | include/yaml.h | |
fe3d086f JCFR |
87 | DESTINATION include COMPONENT Development |
88 | ) | |
89 | ||
90 | install( | |
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 | # | |
101 | include(CTest) # This module defines BUILD_TESTING option | |
102 | if(BUILD_TESTING) | |
103 | add_subdirectory(tests) | |
104 | endif() | |
105 | ||
106 | # | |
107 | # Generate 'yamlConfig.cmake', 'yamlConfigVersion.cmake' and 'yamlTargets.cmake' | |
108 | # | |
109 | include(CMakePackageConfigHelpers) | |
110 | ||
111 | # Configure 'yamlConfig.cmake' for a build tree | |
112 | set(CONFIG_DIR_CONFIG ${PROJECT_BINARY_DIR}) | |
113 | set(config_file ${PROJECT_BINARY_DIR}/yamlConfig.cmake) | |
114 | configure_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 | |
123 | export(TARGETS yaml | |
124 | FILE ${PROJECT_BINARY_DIR}/yamlTargets.cmake | |
125 | ) | |
126 | ||
127 | # Configure and install 'yamlConfig.cmake' for an install tree | |
128 | set(CONFIG_DIR_CONFIG ${INSTALL_CMAKE_DIR}) | |
129 | set(install_config_file ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/yamlConfig.cmake ) | |
130 | configure_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 | ) | |
137 | install( | |
138 | FILES ${install_config_file} | |
139 | DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development | |
140 | ) | |
141 | ||
142 | # Configure and install 'yamlTargets.cmake' for an install tree | |
143 | install(EXPORT yamlTargets | |
144 | FILE yamlTargets.cmake | |
145 | DESTINATION ${INSTALL_CMAKE_DIR} | |
146 | COMPONENT Development | |
147 | ) | |
148 | ||
149 | # Configure 'yamlConfigVersion.cmake' for a build tree | |
150 | set(config_version_file ${PROJECT_BINARY_DIR}/yamlConfigVersion.cmake) | |
151 | write_basic_package_version_file( | |
152 | ${config_version_file} | |
153 | VERSION ${YAML_VERSION_STRING} | |
154 | COMPATIBILITY AnyNewerVersion | |
155 | ) | |
156 | # ... and install for an install tree | |
157 | install( | |
158 | FILES ${config_version_file} | |
159 | DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development | |
160 | ) |