xref: /freebsd/contrib/libyaml/CMakeLists.txt (revision 0f5c86ddb0257f4b7620f1d8e898289be30b19bf)
1*0f5c86ddSBaptiste Daroussin
2*0f5c86ddSBaptiste Daroussincmake_minimum_required(VERSION 3.0)
3*0f5c86ddSBaptiste Daroussinproject (yaml C)
4*0f5c86ddSBaptiste Daroussin
5*0f5c86ddSBaptiste Daroussinset (YAML_VERSION_MAJOR 0)
6*0f5c86ddSBaptiste Daroussinset (YAML_VERSION_MINOR 2)
7*0f5c86ddSBaptiste Daroussinset (YAML_VERSION_PATCH 5)
8*0f5c86ddSBaptiste Daroussinset (YAML_VERSION_STRING "${YAML_VERSION_MAJOR}.${YAML_VERSION_MINOR}.${YAML_VERSION_PATCH}")
9*0f5c86ddSBaptiste Daroussin
10*0f5c86ddSBaptiste Daroussinoption(BUILD_SHARED_LIBS "Build libyaml as a shared library" OFF)
11*0f5c86ddSBaptiste Daroussinset(YAML_STATIC_LIB_NAME "yaml" CACHE STRING "Base name of static library output")
12*0f5c86ddSBaptiste Daroussin
13*0f5c86ddSBaptiste Daroussin#
14*0f5c86ddSBaptiste Daroussin# Output directories for a build tree
15*0f5c86ddSBaptiste Daroussin#
16*0f5c86ddSBaptiste Daroussinif(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
17*0f5c86ddSBaptiste Daroussin  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
18*0f5c86ddSBaptiste Daroussinendif()
19*0f5c86ddSBaptiste Daroussin
20*0f5c86ddSBaptiste Daroussin#
21*0f5c86ddSBaptiste Daroussin# Install relative directories
22*0f5c86ddSBaptiste Daroussin#
23*0f5c86ddSBaptiste Daroussinif(NOT DEFINED INSTALL_LIB_DIR)
24*0f5c86ddSBaptiste Daroussin  set(INSTALL_LIB_DIR lib)
25*0f5c86ddSBaptiste Daroussinendif()
26*0f5c86ddSBaptiste Daroussinif(NOT DEFINED INSTALL_BIN_DIR)
27*0f5c86ddSBaptiste Daroussin  set(INSTALL_BIN_DIR bin)
28*0f5c86ddSBaptiste Daroussinendif()
29*0f5c86ddSBaptiste Daroussinif(NOT DEFINED INSTALL_INCLUDE_DIR)
30*0f5c86ddSBaptiste Daroussin  set(INSTALL_INCLUDE_DIR include)
31*0f5c86ddSBaptiste Daroussinendif()
32*0f5c86ddSBaptiste Daroussinif(NOT DEFINED INSTALL_CMAKE_DIR)
33*0f5c86ddSBaptiste Daroussin  set(INSTALL_CMAKE_DIR cmake)
34*0f5c86ddSBaptiste Daroussinendif()
35*0f5c86ddSBaptiste Daroussin
36*0f5c86ddSBaptiste Daroussin#
37*0f5c86ddSBaptiste Daroussin# Build library
38*0f5c86ddSBaptiste Daroussin#
39*0f5c86ddSBaptiste Daroussinset(SRCS
40*0f5c86ddSBaptiste Daroussin  src/api.c
41*0f5c86ddSBaptiste Daroussin  src/dumper.c
42*0f5c86ddSBaptiste Daroussin  src/emitter.c
43*0f5c86ddSBaptiste Daroussin  src/loader.c
44*0f5c86ddSBaptiste Daroussin  src/parser.c
45*0f5c86ddSBaptiste Daroussin  src/reader.c
46*0f5c86ddSBaptiste Daroussin  src/scanner.c
47*0f5c86ddSBaptiste Daroussin  src/writer.c
48*0f5c86ddSBaptiste Daroussin  )
49*0f5c86ddSBaptiste Daroussin
50*0f5c86ddSBaptiste Daroussinset(config_h ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
51*0f5c86ddSBaptiste Daroussinconfigure_file(
52*0f5c86ddSBaptiste Daroussin  cmake/config.h.in
53*0f5c86ddSBaptiste Daroussin  ${config_h}
54*0f5c86ddSBaptiste Daroussin  )
55*0f5c86ddSBaptiste Daroussin
56*0f5c86ddSBaptiste Daroussinadd_library(yaml ${SRCS})
57*0f5c86ddSBaptiste Daroussin
58*0f5c86ddSBaptiste Daroussinif(NOT BUILD_SHARED_LIBS)
59*0f5c86ddSBaptiste Daroussin  set_target_properties(yaml
60*0f5c86ddSBaptiste Daroussin    PROPERTIES OUTPUT_NAME ${YAML_STATIC_LIB_NAME}
61*0f5c86ddSBaptiste Daroussin  )
62*0f5c86ddSBaptiste Daroussinendif()
63*0f5c86ddSBaptiste Daroussin
64*0f5c86ddSBaptiste Daroussinset_target_properties(yaml
65*0f5c86ddSBaptiste Daroussin  PROPERTIES DEFINE_SYMBOL YAML_DECLARE_EXPORT
66*0f5c86ddSBaptiste Daroussin  )
67*0f5c86ddSBaptiste Daroussin
68*0f5c86ddSBaptiste Daroussintarget_compile_definitions(yaml
69*0f5c86ddSBaptiste Daroussin  PRIVATE HAVE_CONFIG_H
70*0f5c86ddSBaptiste Daroussin  PUBLIC
71*0f5c86ddSBaptiste Daroussin    $<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:YAML_DECLARE_STATIC>
72*0f5c86ddSBaptiste Daroussin    $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>
73*0f5c86ddSBaptiste Daroussin  )
74*0f5c86ddSBaptiste Daroussin
75*0f5c86ddSBaptiste Daroussintarget_include_directories(yaml PUBLIC
76*0f5c86ddSBaptiste Daroussin  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
77*0f5c86ddSBaptiste Daroussin  $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
78*0f5c86ddSBaptiste Daroussin  $<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
79*0f5c86ddSBaptiste Daroussin  )
80*0f5c86ddSBaptiste Daroussin
81*0f5c86ddSBaptiste Daroussin#
82*0f5c86ddSBaptiste Daroussin# Install rules
83*0f5c86ddSBaptiste Daroussin#
84*0f5c86ddSBaptiste Daroussininstall(
85*0f5c86ddSBaptiste Daroussin  FILES
86*0f5c86ddSBaptiste Daroussin    include/yaml.h
87*0f5c86ddSBaptiste Daroussin  DESTINATION include COMPONENT Development
88*0f5c86ddSBaptiste Daroussin  )
89*0f5c86ddSBaptiste Daroussin
90*0f5c86ddSBaptiste Daroussininstall(
91*0f5c86ddSBaptiste Daroussin  TARGETS yaml
92*0f5c86ddSBaptiste Daroussin  EXPORT yamlTargets
93*0f5c86ddSBaptiste Daroussin  RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT Runtime
94*0f5c86ddSBaptiste Daroussin  LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT Development
95*0f5c86ddSBaptiste Daroussin  ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT Development
96*0f5c86ddSBaptiste Daroussin  )
97*0f5c86ddSBaptiste Daroussin
98*0f5c86ddSBaptiste Daroussin#
99*0f5c86ddSBaptiste Daroussin# Add tests
100*0f5c86ddSBaptiste Daroussin#
101*0f5c86ddSBaptiste Daroussininclude(CTest) # This module defines BUILD_TESTING option
102*0f5c86ddSBaptiste Daroussinif(BUILD_TESTING)
103*0f5c86ddSBaptiste Daroussin  add_subdirectory(tests)
104*0f5c86ddSBaptiste Daroussinendif()
105*0f5c86ddSBaptiste Daroussin
106*0f5c86ddSBaptiste Daroussin#
107*0f5c86ddSBaptiste Daroussin# Generate 'yamlConfig.cmake', 'yamlConfigVersion.cmake' and 'yamlTargets.cmake'
108*0f5c86ddSBaptiste Daroussin#
109*0f5c86ddSBaptiste Daroussininclude(CMakePackageConfigHelpers)
110*0f5c86ddSBaptiste Daroussin
111*0f5c86ddSBaptiste Daroussin# Configure 'yamlConfig.cmake' for a build tree
112*0f5c86ddSBaptiste Daroussinset(CONFIG_DIR_CONFIG ${PROJECT_BINARY_DIR})
113*0f5c86ddSBaptiste Daroussinset(config_file ${PROJECT_BINARY_DIR}/yamlConfig.cmake)
114*0f5c86ddSBaptiste Daroussinconfigure_package_config_file(
115*0f5c86ddSBaptiste Daroussin  yamlConfig.cmake.in
116*0f5c86ddSBaptiste Daroussin  ${config_file}
117*0f5c86ddSBaptiste Daroussin  INSTALL_DESTINATION ${PROJECT_BINARY_DIR}
118*0f5c86ddSBaptiste Daroussin  PATH_VARS CONFIG_DIR_CONFIG
119*0f5c86ddSBaptiste Daroussin  NO_CHECK_REQUIRED_COMPONENTS_MACRO
120*0f5c86ddSBaptiste Daroussin  )
121*0f5c86ddSBaptiste Daroussin
122*0f5c86ddSBaptiste Daroussin# Configure 'yamlTargets.cmake' for a build tree
123*0f5c86ddSBaptiste Daroussinexport(TARGETS yaml
124*0f5c86ddSBaptiste Daroussin  FILE ${PROJECT_BINARY_DIR}/yamlTargets.cmake
125*0f5c86ddSBaptiste Daroussin  )
126*0f5c86ddSBaptiste Daroussin
127*0f5c86ddSBaptiste Daroussin# Configure and install 'yamlConfig.cmake' for an install tree
128*0f5c86ddSBaptiste Daroussinset(CONFIG_DIR_CONFIG ${INSTALL_CMAKE_DIR})
129*0f5c86ddSBaptiste Daroussinset(install_config_file ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/yamlConfig.cmake )
130*0f5c86ddSBaptiste Daroussinconfigure_package_config_file(
131*0f5c86ddSBaptiste Daroussin  yamlConfig.cmake.in
132*0f5c86ddSBaptiste Daroussin  ${install_config_file}
133*0f5c86ddSBaptiste Daroussin  INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}
134*0f5c86ddSBaptiste Daroussin  PATH_VARS CONFIG_DIR_CONFIG
135*0f5c86ddSBaptiste Daroussin  NO_CHECK_REQUIRED_COMPONENTS_MACRO
136*0f5c86ddSBaptiste Daroussin  )
137*0f5c86ddSBaptiste Daroussininstall(
138*0f5c86ddSBaptiste Daroussin  FILES ${install_config_file}
139*0f5c86ddSBaptiste Daroussin  DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development
140*0f5c86ddSBaptiste Daroussin  )
141*0f5c86ddSBaptiste Daroussin
142*0f5c86ddSBaptiste Daroussin# Configure and install 'yamlTargets.cmake' for an install tree
143*0f5c86ddSBaptiste Daroussininstall(EXPORT yamlTargets
144*0f5c86ddSBaptiste Daroussin  FILE yamlTargets.cmake
145*0f5c86ddSBaptiste Daroussin  DESTINATION ${INSTALL_CMAKE_DIR}
146*0f5c86ddSBaptiste Daroussin  COMPONENT Development
147*0f5c86ddSBaptiste Daroussin  )
148*0f5c86ddSBaptiste Daroussin
149*0f5c86ddSBaptiste Daroussin# Configure 'yamlConfigVersion.cmake' for a build tree
150*0f5c86ddSBaptiste Daroussinset(config_version_file ${PROJECT_BINARY_DIR}/yamlConfigVersion.cmake)
151*0f5c86ddSBaptiste Daroussinwrite_basic_package_version_file(
152*0f5c86ddSBaptiste Daroussin    ${config_version_file}
153*0f5c86ddSBaptiste Daroussin    VERSION ${YAML_VERSION_STRING}
154*0f5c86ddSBaptiste Daroussin    COMPATIBILITY AnyNewerVersion
155*0f5c86ddSBaptiste Daroussin)
156*0f5c86ddSBaptiste Daroussin# ... and install for an install tree
157*0f5c86ddSBaptiste Daroussininstall(
158*0f5c86ddSBaptiste Daroussin  FILES ${config_version_file}
159*0f5c86ddSBaptiste Daroussin  DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development
160*0f5c86ddSBaptiste Daroussin  )
161