]> andersk Git - libyaml.git/blame - CMakeLists.txt
Improve CMake build system
[libyaml.git] / CMakeLists.txt
CommitLineData
01e8dadf 1
fe3d086f 2cmake_minimum_required(VERSION 3.0)
01e8dadf
KS
3project (yaml C)
4
5set (YAML_VERSION_MAJOR 0)
6set (YAML_VERSION_MINOR 1)
686b2d85 7set (YAML_VERSION_PATCH 7)
01e8dadf
KS
8set (YAML_VERSION_STRING "${YAML_VERSION_MAJOR}.${YAML_VERSION_MINOR}.${YAML_VERSION_PATCH}")
9
fe3d086f 10option(BUILD_SHARED_LIBS "Build libyaml as a shared library" OFF)
01e8dadf 11
fe3d086f
JCFR
12#
13# Output directories for a build tree
14#
15if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
16 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
17endif()
300bd3f8 18
fe3d086f
JCFR
19#
20# Install relative directories
21#
22if(NOT DEFINED INSTALL_LIB_DIR)
23 set(INSTALL_LIB_DIR lib)
24endif()
25if(NOT DEFINED INSTALL_BIN_DIR)
26 set(INSTALL_BIN_DIR bin)
27endif()
28if(NOT DEFINED INSTALL_INCLUDE_DIR)
29 set(INSTALL_INCLUDE_DIR include)
30endif()
31if(NOT DEFINED INSTALL_CMAKE_DIR)
32 set(INSTALL_CMAKE_DIR cmake)
33endif()
01e8dadf 34
fe3d086f
JCFR
35#
36# Build library
37#
38set(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 )
6dfd50f1 48
fe3d086f
JCFR
49set(config_h ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
50configure_file(
51 cmake/config.h.in
52 ${config_h}
53 )
6dfd50f1 54
fe3d086f
JCFR
55add_library(yaml ${SRCS})
56
57if(NOT BUILD_SHARED_LIBS)
58 set_target_properties(yaml
59 PROPERTIES OUTPUT_NAME yaml_static
60 )
61endif()
62
63set_target_properties(yaml
64 PROPERTIES DEFINE_SYMBOL YAML_DECLARE_EXPORT
65 )
66
67target_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
74target_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#
83install(
84 FILES
85 include/yaml.h
86 ${config_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 )
This page took 0.118723 seconds and 5 git commands to generate.