1 2cmake_minimum_required(VERSION 3.0) 3project (yaml C) 4 5set (YAML_VERSION_MAJOR 0) 6set (YAML_VERSION_MINOR 2) 7set (YAML_VERSION_PATCH 5) 8set (YAML_VERSION_STRING "${YAML_VERSION_MAJOR}.${YAML_VERSION_MINOR}.${YAML_VERSION_PATCH}") 9 10option(BUILD_SHARED_LIBS "Build libyaml as a shared library" OFF) 11set(YAML_STATIC_LIB_NAME "yaml" CACHE STRING "Base name of static library output") 12 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() 19 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() 35 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 ) 49 50set(config_h ${CMAKE_CURRENT_BINARY_DIR}/include/config.h) 51configure_file( 52 cmake/config.h.in 53 ${config_h} 54 ) 55 56add_library(yaml ${SRCS}) 57 58if(NOT BUILD_SHARED_LIBS) 59 set_target_properties(yaml 60 PROPERTIES OUTPUT_NAME ${YAML_STATIC_LIB_NAME} 61 ) 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 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 ) 161