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