]> andersk Git - libyaml.git/blame - CMakeLists.txt
debian: Release libyaml 0.2.2-1
[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)
24a020a1
TM
6set (YAML_VERSION_MINOR 2)
7set (YAML_VERSION_PATCH 2)
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)
99e0a150 11option(YAML_STATIC_LIB_NAME "base name of static library output" yaml)
01e8dadf 12
fe3d086f
JCFR
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()
300bd3f8 19
fe3d086f
JCFR
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()
01e8dadf 35
fe3d086f
JCFR
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 )
6dfd50f1 49
fe3d086f
JCFR
50set(config_h ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
51configure_file(
52 cmake/config.h.in
53 ${config_h}
54 )
6dfd50f1 55
fe3d086f
JCFR
56add_library(yaml ${SRCS})
57
58if(NOT BUILD_SHARED_LIBS)
59 set_target_properties(yaml
99e0a150
MD
60 PROPERTIES OUTPUT_NAME ${YAML_STATIC_LIB_NAME}
61 )
fe3d086f
JCFR
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
fe3d086f
JCFR
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.638768 seconds and 5 git commands to generate.