]> andersk Git - libyaml.git/blob - CMakeLists.txt
debian: Release libyaml 0.2.2-1
[libyaml.git] / CMakeLists.txt
1
2 cmake_minimum_required(VERSION 3.0)
3 project (yaml C)
4
5 set (YAML_VERSION_MAJOR 0)
6 set (YAML_VERSION_MINOR 2)
7 set (YAML_VERSION_PATCH 2)
8 set (YAML_VERSION_STRING "${YAML_VERSION_MAJOR}.${YAML_VERSION_MINOR}.${YAML_VERSION_PATCH}")
9
10 option(BUILD_SHARED_LIBS "Build libyaml as a shared library" OFF)
11 option(YAML_STATIC_LIB_NAME "base name of static library output" yaml)
12
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()
19
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()
35
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   )
49
50 set(config_h ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
51 configure_file(
52   cmake/config.h.in
53   ${config_h}
54   )
55
56 add_library(yaml ${SRCS})
57
58 if(NOT BUILD_SHARED_LIBS)
59   set_target_properties(yaml
60     PROPERTIES OUTPUT_NAME ${YAML_STATIC_LIB_NAME}
61   )
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
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   )
This page took 0.104129 seconds and 5 git commands to generate.