]> andersk Git - libyaml.git/blob - CMakeLists.txt
Update libyaml homepage link in README
[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 1)
7 set (YAML_VERSION_PATCH 7)
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
12 #
13 # Output directories for a build tree
14 #
15 if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
16   set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
17 endif()
18
19 #
20 # Install relative directories
21 #
22 if(NOT DEFINED INSTALL_LIB_DIR)
23   set(INSTALL_LIB_DIR lib)
24 endif()
25 if(NOT DEFINED INSTALL_BIN_DIR)
26   set(INSTALL_BIN_DIR bin)
27 endif()
28 if(NOT DEFINED INSTALL_INCLUDE_DIR)
29   set(INSTALL_INCLUDE_DIR include)
30 endif()
31 if(NOT DEFINED INSTALL_CMAKE_DIR)
32   set(INSTALL_CMAKE_DIR cmake)
33 endif()
34
35 #
36 # Build library
37 #
38 set(SRCS
39   src/api.c
40   src/dumper.c
41   src/emitter.c
42   src/loader.c
43   src/parser.c
44   src/reader.c
45   src/scanner.c
46   src/writer.c
47   )
48
49 set(config_h ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
50 configure_file(
51   cmake/config.h.in
52   ${config_h}
53   )
54
55 add_library(yaml ${SRCS})
56
57 if(NOT BUILD_SHARED_LIBS)
58   set_target_properties(yaml
59     PROPERTIES OUTPUT_NAME yaml_static
60     )
61 endif()
62
63 set_target_properties(yaml
64   PROPERTIES DEFINE_SYMBOL YAML_DECLARE_EXPORT
65   )
66
67 target_compile_definitions(yaml
68   PRIVATE HAVE_CONFIG_H
69   PUBLIC
70     $<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:YAML_DECLARE_STATIC>
71     $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>
72   )
73
74 target_include_directories(yaml PUBLIC
75   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
76   $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
77   $<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
78   )
79
80 #
81 # Install rules
82 #
83 install(
84   FILES
85     include/yaml.h
86     ${config_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.047356 seconds and 5 git commands to generate.