2011-03-17 05:06:10 +03:00
###
### CMake settings
###
## Due to Mac OSX we need to keep compatibility with CMake 2.6
# see http://www.cmake.org/Wiki/CMake_Policies
cmake_minimum_required ( VERSION 2.6 )
# see http://www.cmake.org/cmake/help/cmake-2-8-docs.html#policy:CMP0012
if ( POLICY CMP0012 )
cmake_policy ( SET CMP0012 OLD )
endif ( )
# see http://www.cmake.org/cmake/help/cmake-2-8-docs.html#policy:CMP0015
if ( POLICY CMP0015 )
cmake_policy ( SET CMP0015 OLD )
endif ( )
2016-10-02 07:23:07 +03:00
# see https://cmake.org/cmake/help/latest/policy/CMP0042.html
if ( POLICY CMP0042 )
# Enable MACOSX_RPATH by default.
cmake_policy ( SET CMP0042 NEW )
endif ( )
2011-03-17 05:06:10 +03:00
include ( CheckCXXCompilerFlag )
###
### Project settings
###
project ( YAML_CPP )
set ( YAML_CPP_VERSION_MAJOR "0" )
2018-01-28 19:23:36 +03:00
set ( YAML_CPP_VERSION_MINOR "6" )
2018-03-06 07:56:23 +03:00
set ( YAML_CPP_VERSION_PATCH "2" )
2011-03-17 05:06:10 +03:00
set ( YAML_CPP_VERSION "${YAML_CPP_VERSION_MAJOR}.${YAML_CPP_VERSION_MINOR}.${YAML_CPP_VERSION_PATCH}" )
enable_testing ( )
###
### Project options
###
## Project stuff
2017-11-09 23:30:25 +03:00
option ( YAML_CPP_BUILD_TESTS "Enable testing" ON )
option ( YAML_CPP_BUILD_TOOLS "Enable parse tools" ON )
2011-03-17 05:06:10 +03:00
option ( YAML_CPP_BUILD_CONTRIB "Enable contrib stuff in library" ON )
2015-03-31 14:32:09 +03:00
option ( YAML_CPP_SUPPORT_MERGE_KEYS "Support YAML merge keys ('<<') in yaml-cpp's executable targets. Use '#define YAML_CPP_SUPPORT_MERGE_KEYS' instead when linking from another project." OFF )
2011-03-17 05:06:10 +03:00
## Build options
# --> General
# see http://www.cmake.org/cmake/help/cmake2.6docs.html#variable:BUILD_SHARED_LIBS
# http://www.cmake.org/cmake/help/cmake2.6docs.html#command:add_library
option ( BUILD_SHARED_LIBS "Build Shared Libraries" OFF )
# --> Apple
option ( APPLE_UNIVERSAL_BIN "Apple: Build universal binary" OFF )
# --> Microsoft Visual C++
# see http://msdn.microsoft.com/en-us/library/aa278396(v=VS.60).aspx
# http://msdn.microsoft.com/en-us/library/2kzt1wy3(v=VS.71).aspx
option ( MSVC_SHARED_RT "MSVC: Build with shared runtime libs (/MD)" ON )
option ( MSVC_STHREADED_RT "MSVC: Build with single-threaded static runtime libs (/ML until VS .NET 2003)" OFF )
###
### Sources, headers, directories and libs
###
2014-03-25 09:02:16 +04:00
# From http://www.cmake.org/pipermail/cmake/2010-March/035992.html:
# function to collect all the sources from sub-directories
# into a single list
function ( add_sources )
get_property ( is_defined GLOBAL PROPERTY SRCS_LIST DEFINED )
if ( NOT is_defined )
define_property ( GLOBAL PROPERTY SRCS_LIST
B R I E F _ D O C S " L i s t o f s o u r c e f i l e s "
F U L L _ D O C S " L i s t o f a l l s o u r c e f i l e s i n t h e e n t i r e p r o j e c t " )
endif ( )
# make absolute paths
set ( SRCS )
foreach ( s IN LISTS ARGN )
if ( NOT IS_ABSOLUTE "${s}" )
get_filename_component ( s "${s}" ABSOLUTE )
endif ( )
list ( APPEND SRCS "${s}" )
endforeach ( )
# append to global list
set_property ( GLOBAL APPEND PROPERTY SRCS_LIST "${SRCS}" )
endfunction ( add_sources )
2011-10-18 23:55:31 +04:00
set ( header_directory "include/yaml-cpp/" )
2012-01-21 09:55:39 +04:00
file ( GLOB sources "src/[a-zA-Z]*.cpp" )
2012-05-20 00:36:22 +04:00
file ( GLOB_RECURSE public_headers "include/yaml-cpp/[a-zA-Z]*.h" )
2012-01-21 09:55:39 +04:00
file ( GLOB private_headers "src/[a-zA-Z]*.h" )
2011-09-11 02:57:23 +04:00
2011-03-17 05:06:10 +03:00
if ( YAML_CPP_BUILD_CONTRIB )
file ( GLOB contrib_sources "src/contrib/[a-zA-Z]*.cpp" )
file ( GLOB contrib_public_headers "include/yaml-cpp/contrib/[a-zA-Z]*.h" )
file ( GLOB contrib_private_headers "src/contrib/[a-zA-Z]*.h" )
else ( )
add_definitions ( -DYAML_CPP_NO_CONTRIB )
endif ( )
2015-03-31 14:32:09 +03:00
if ( YAML_CPP_SUPPORT_MERGE_KEYS )
add_definitions ( -DYAML_CPP_SUPPORT_MERGE_KEYS )
endif ( )
2014-03-25 09:02:16 +04:00
set ( library_sources
2014-03-25 08:34:26 +04:00
$ { s o u r c e s }
$ { p u b l i c _ h e a d e r s }
$ { p r i v a t e _ h e a d e r s }
$ { c o n t r i b _ s o u r c e s }
$ { c o n t r i b _ p u b l i c _ h e a d e r s }
$ { c o n t r i b _ p r i v a t e _ h e a d e r s }
)
2014-03-25 09:02:16 +04:00
add_sources ( ${ library_sources } )
2014-03-25 08:34:26 +04:00
2011-03-17 05:06:10 +03:00
if ( VERBOSE )
message ( STATUS "sources: ${sources}" )
message ( STATUS "public_headers: ${public_headers}" )
message ( STATUS "private_headers: ${private_headers}" )
message ( STATUS "contrib_sources: ${contrib_sources}" )
message ( STATUS "contrib_public_headers: ${contrib_public_headers}" )
message ( STATUS "contrib_private_headers: ${contrib_private_headers}" )
endif ( )
2018-05-05 19:03:13 +03:00
if ( CMAKE_VERSION VERSION_LESS 2.8.12 )
include_directories ( ${ YAML_CPP_SOURCE_DIR } /src )
include_directories ( ${ YAML_CPP_SOURCE_DIR } /include )
endif ( )
2011-03-17 05:06:10 +03:00
###
### General compilation settings
###
2014-03-25 08:34:26 +04:00
set ( yaml_c_flags ${ CMAKE_C_FLAGS } )
set ( yaml_cxx_flags ${ CMAKE_CXX_FLAGS } )
2011-03-17 05:06:10 +03:00
if ( BUILD_SHARED_LIBS )
set ( LABEL_SUFFIX "shared" )
else ( )
set ( LABEL_SUFFIX "static" )
endif ( )
if ( APPLE )
if ( APPLE_UNIVERSAL_BIN )
set ( CMAKE_OSX_ARCHITECTURES ppc;i386 )
endif ( )
endif ( )
if ( IPHONE )
set ( CMAKE_OSX_SYSROOT "iphoneos4.2" )
set ( CMAKE_OSX_ARCHITECTURES "armv6;armv7" )
endif ( )
if ( WIN32 )
if ( BUILD_SHARED_LIBS )
add_definitions ( -D ${ PROJECT_NAME } _DLL ) # use or build Windows DLL
endif ( )
if ( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT )
set ( CMAKE_INSTALL_PREFIX "C:/" )
endif ( )
endif ( )
2016-12-03 18:59:39 +03:00
# GCC or Clang or Intel Compiler specialities
2016-01-26 20:45:00 +03:00
if ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
2016-12-03 18:59:39 +03:00
C M A K E _ C X X _ C O M P I L E R _ I D M A T C H E S " C l a n g " O R
C M A K E _ C X X _ C O M P I L E R _ I D M A T C H E S " I n t e l " )
2011-03-17 05:06:10 +03:00
### General stuff
if ( WIN32 )
set ( CMAKE_SHARED_LIBRARY_PREFIX "" ) # DLLs do not have a "lib" prefix
set ( CMAKE_IMPORT_LIBRARY_PREFIX "" ) # same for DLL import libs
set ( CMAKE_LINK_DEF_FILE_FLAG "" ) # CMake workaround (2.8.3)
endif ( )
### Project stuff
if ( NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE )
set ( CMAKE_BUILD_TYPE Release )
endif ( )
#
set ( CMAKE_CXX_FLAGS_RELEASE "-O2" )
set ( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" )
set ( CMAKE_CXX_FLAGS_DEBUG "-g" )
set ( CMAKE_CXX_FLAGS_MINSIZEREL "-Os" )
#
set ( GCC_EXTRA_OPTIONS "" )
#
2015-12-10 18:33:00 +03:00
if ( BUILD_SHARED_LIBS )
set ( GCC_EXTRA_OPTIONS "${GCC_EXTRA_OPTIONS} -fPIC" )
endif ( )
#
2011-03-17 05:06:10 +03:00
set ( FLAG_TESTED "-Wextra" )
check_cxx_compiler_flag ( ${ FLAG_TESTED } FLAG_WEXTRA )
if ( FLAG_WEXTRA )
set ( GCC_EXTRA_OPTIONS "${GCC_EXTRA_OPTIONS} ${FLAG_TESTED}" )
endif ( )
#
2015-04-27 23:58:38 +03:00
set ( yaml_cxx_flags "-Wall ${GCC_EXTRA_OPTIONS} -pedantic -Wno-long-long -std=c++11 ${yaml_cxx_flags}" )
2013-06-18 17:12:23 +04:00
### Make specific
2014-03-25 08:46:03 +04:00
if ( ${ CMAKE_BUILD_TOOL } MATCHES make OR ${ CMAKE_BUILD_TOOL } MATCHES gmake )
2013-06-18 17:12:23 +04:00
add_custom_target ( debuggable $ ( MAKE ) clean
C O M M A N D $ { C M A K E _ C O M M A N D } - D C M A K E _ B U I L D _ T Y P E = D e b u g $ { C M A K E _ S O U R C E _ D I R }
C O M M E N T " A d j u s t i n g s e t t i n g s f o r d e b u g c o m p i l a t i o n "
V E R B A T I M )
add_custom_target ( releasable $ ( MAKE ) clean
C O M M A N D $ { C M A K E _ C O M M A N D } - D C M A K E _ B U I L D _ T Y P E = R e l e a s e $ { C M A K E _ S O U R C E _ D I R }
C O M M E N T " A d j u s t i n g s e t t i n g s f o r r e l e a s e c o m p i l a t i o n "
V E R B A T I M )
endif ( )
2011-03-17 05:06:10 +03:00
endif ( )
# Microsoft VisualC++ specialities
if ( MSVC )
### General stuff
# a) Change MSVC runtime library settings (/MD[d], /MT[d], /ML[d] (single-threaded until VS 2003))
# plus set lib suffix for later use and project label accordingly
# see http://msdn.microsoft.com/en-us/library/aa278396(v=VS.60).aspx
# http://msdn.microsoft.com/en-us/library/2kzt1wy3(v=VS.71).aspx
set ( LIB_RT_SUFFIX "md" ) # CMake defaults to /MD for MSVC
set ( LIB_RT_OPTION "/MD" )
#
if ( NOT MSVC_SHARED_RT ) # User wants to have static runtime libraries (/MT, /ML)
if ( MSVC_STHREADED_RT ) # User wants to have old single-threaded static runtime libraries
set ( LIB_RT_SUFFIX "ml" )
set ( LIB_RT_OPTION "/ML" )
if ( NOT ${ MSVC_VERSION } LESS 1400 )
message ( FATAL_ERROR "Single-threaded static runtime libraries (/ML) only available until VS .NET 2003 (7.1)." )
endif ( )
else ( )
set ( LIB_RT_SUFFIX "mt" )
set ( LIB_RT_OPTION "/MT" )
endif ( )
# correct linker options
2016-11-11 08:28:30 +03:00
foreach ( flag_var CMAKE_C_FLAGS CMAKE_CXX_FLAGS )
2011-03-17 05:06:10 +03:00
foreach ( config_name "" DEBUG RELEASE MINSIZEREL RELWITHDEBINFO )
set ( var_name "${flag_var}" )
if ( NOT "${config_name}" STREQUAL "" )
set ( var_name "${var_name}_${config_name}" )
endif ( )
string ( REPLACE "/MD" "${LIB_RT_OPTION}" ${ var_name } "${${var_name}}" )
2016-11-11 08:28:30 +03:00
set ( ${ var_name } "${${var_name}}" CACHE STRING "" FORCE )
2011-03-17 05:06:10 +03:00
endforeach ( )
endforeach ( )
endif ( )
#
2011-03-22 02:03:01 +03:00
set ( LABEL_SUFFIX "${LABEL_SUFFIX} ${LIB_RT_SUFFIX}" )
2011-03-17 05:06:10 +03:00
# b) Change prefix for static libraries
set ( CMAKE_STATIC_LIBRARY_PREFIX "lib" ) # to distinguish static libraries from DLL import libs
# c) Correct suffixes for static libraries
if ( NOT BUILD_SHARED_LIBS )
### General stuff
set ( LIB_TARGET_SUFFIX "${LIB_SUFFIX}${LIB_RT_SUFFIX}" )
endif ( )
### Project stuff
# /W3 = set warning level; see http://msdn.microsoft.com/en-us/library/thxezb7y.aspx
# /wd4127 = disable warning C4127 "conditional expression is constant"; see http://msdn.microsoft.com/en-us/library/6t66728h.aspx
# /wd4355 = disable warning C4355 "'this' : used in base member initializer list"; http://msdn.microsoft.com/en-us/library/3c594ae3.aspx
2015-01-24 23:38:22 +03:00
set ( yaml_cxx_flags "/W3 /wd4127 /wd4355 ${yaml_cxx_flags}" )
2011-03-17 05:06:10 +03:00
endif ( )
###
### General install settings
###
2017-11-09 21:41:01 +03:00
set ( INCLUDE_INSTALL_ROOT_DIR include )
2011-05-29 06:17:49 +04:00
set ( INCLUDE_INSTALL_DIR ${ INCLUDE_INSTALL_ROOT_DIR } /yaml-cpp )
2017-11-09 21:41:01 +03:00
set ( LIB_INSTALL_DIR "lib${LIB_SUFFIX}" )
2011-03-17 05:06:10 +03:00
set ( _INSTALL_DESTINATIONS
2017-11-09 21:41:01 +03:00
R U N T I M E D E S T I N A T I O N b i n
2011-03-17 05:06:10 +03:00
L I B R A R Y D E S T I N A T I O N $ { L I B _ I N S T A L L _ D I R }
2017-11-09 21:41:01 +03:00
A R C H I V E D E S T I N A T I O N $ { L I B _ I N S T A L L _ D I R }
2011-03-17 05:06:10 +03:00
)
###
### Library
###
2014-03-25 09:02:16 +04:00
add_library ( yaml-cpp ${ library_sources } )
2018-05-05 19:03:13 +03:00
if ( NOT CMAKE_VERSION VERSION_LESS 2.8.12 )
target_include_directories ( yaml-cpp
P U B L I C $ < B U I L D _ I N T E R F A C E : $ { Y A M L _ C P P _ S O U R C E _ D I R } / i n c l u d e >
$ < I N S T A L L _ I N T E R F A C E : $ { I N C L U D E _ I N S T A L L _ R O O T _ D I R } >
P R I V A T E $ < B U I L D _ I N T E R F A C E : $ { Y A M L _ C P P _ S O U R C E _ D I R } / s r c > )
endif ( )
2014-03-25 08:34:26 +04:00
set_target_properties ( yaml-cpp PROPERTIES
C O M P I L E _ F L A G S " $ { y a m l _ c _ f l a g s } $ { y a m l _ c x x _ f l a g s } "
2011-03-17 05:06:10 +03:00
)
set_target_properties ( yaml-cpp PROPERTIES
V E R S I O N " $ { Y A M L _ C P P _ V E R S I O N } "
S O V E R S I O N " $ { Y A M L _ C P P _ V E R S I O N _ M A J O R } . $ { Y A M L _ C P P _ V E R S I O N _ M I N O R } "
P R O J E C T _ L A B E L " y a m l - c p p $ { L A B E L _ S U F F I X } "
)
if ( IPHONE )
set_target_properties ( yaml-cpp PROPERTIES
X C O D E _ A T T R I B U T E _ I P H O N E O S _ D E P L O Y M E N T _ T A R G E T " 3 . 0 "
)
endif ( )
if ( MSVC )
if ( NOT BUILD_SHARED_LIBS )
# correct library names
set_target_properties ( yaml-cpp PROPERTIES
D E B U G _ P O S T F I X " $ { L I B _ T A R G E T _ S U F F I X } d "
R E L E A S E _ P O S T F I X " $ { L I B _ T A R G E T _ S U F F I X } "
M I N S I Z E R E L _ P O S T F I X " $ { L I B _ T A R G E T _ S U F F I X } "
R E L W I T H D E B I N F O _ P O S T F I X " $ { L I B _ T A R G E T _ S U F F I X } "
)
endif ( )
endif ( )
2015-11-25 19:33:36 +03:00
install ( TARGETS yaml-cpp EXPORT yaml-cpp-targets ${ _INSTALL_DESTINATIONS } )
2011-03-17 05:06:10 +03:00
install (
2011-10-18 23:55:31 +04:00
D I R E C T O R Y $ { h e a d e r _ d i r e c t o r y }
2011-03-17 05:06:10 +03:00
D E S T I N A T I O N $ { I N C L U D E _ I N S T A L L _ D I R }
2011-10-18 23:55:31 +04:00
F I L E S _ M A T C H I N G P A T T E R N " * . h "
2011-03-17 05:06:10 +03:00
)
2015-01-24 20:21:26 +03:00
export (
T A R G E T S y a m l - c p p
F I L E " $ { P R O J E C T _ B I N A R Y _ D I R } / y a m l - c p p - t a r g e t s . c m a k e " )
export ( PACKAGE yaml-cpp )
set ( EXPORT_TARGETS yaml-cpp CACHE INTERNAL "export targets" )
set ( CONFIG_INCLUDE_DIRS "${YAML_CPP_SOURCE_DIR}/include" )
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /yaml-cpp-config.cmake.in
" $ { P R O J E C T _ B I N A R Y _ D I R } / y a m l - c p p - c o n f i g . c m a k e " @ O N L Y )
2015-11-25 19:33:36 +03:00
if ( WIN32 AND NOT CYGWIN )
2017-11-09 21:41:01 +03:00
set ( INSTALL_CMAKE_DIR CMake )
2015-11-25 19:33:36 +03:00
else ( )
set ( INSTALL_CMAKE_DIR ${ LIB_INSTALL_DIR } /cmake/yaml-cpp )
endif ( )
2017-11-09 21:41:01 +03:00
file ( RELATIVE_PATH REL_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}" "${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_ROOT_DIR}" )
2015-11-25 19:33:36 +03:00
set ( CONFIG_INCLUDE_DIRS "\${YAML_CPP_CMAKE_DIR}/${REL_INCLUDE_DIR}" )
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /yaml-cpp-config.cmake.in
" $ { P R O J E C T _ B I N A R Y _ D I R } $ { C M A K E _ F I L E S _ D I R E C T O R Y } / y a m l - c p p - c o n f i g . c m a k e " @ O N L Y )
2015-01-24 20:21:26 +03:00
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /yaml-cpp-config-version.cmake.in
" $ { P R O J E C T _ B I N A R Y _ D I R } / y a m l - c p p - c o n f i g - v e r s i o n . c m a k e " @ O N L Y )
2015-11-25 19:33:36 +03:00
install ( FILES
" $ { P R O J E C T _ B I N A R Y _ D I R } $ { C M A K E _ F I L E S _ D I R E C T O R Y } / y a m l - c p p - c o n f i g . c m a k e "
" $ { P R O J E C T _ B I N A R Y _ D I R } / y a m l - c p p - c o n f i g - v e r s i o n . c m a k e "
D E S T I N A T I O N " $ { I N S T A L L _ C M A K E _ D I R } " C O M P O N E N T d e v )
install ( EXPORT yaml-cpp-targets DESTINATION ${ INSTALL_CMAKE_DIR } )
2011-03-17 05:06:10 +03:00
if ( UNIX )
set ( PC_FILE ${ CMAKE_BINARY_DIR } /yaml-cpp.pc )
configure_file ( "yaml-cpp.pc.cmake" ${ PC_FILE } @ONLY )
install ( FILES ${ PC_FILE } DESTINATION ${ LIB_INSTALL_DIR } /pkgconfig )
endif ( )
###
### Extras
###
2017-11-09 23:30:25 +03:00
if ( YAML_CPP_BUILD_TESTS )
2011-03-17 05:06:10 +03:00
add_subdirectory ( test )
2017-11-09 23:30:25 +03:00
endif ( )
if ( YAML_CPP_BUILD_TOOLS )
2011-03-17 05:06:10 +03:00
add_subdirectory ( util )
endif ( )
2014-03-25 09:02:16 +04:00
### Formatting
2014-03-26 07:01:35 +04:00
get_property ( all_sources GLOBAL PROPERTY SRCS_LIST )
add_custom_target ( format
C O M M A N D c l a n g - f o r m a t - - s t y l e = f i l e - i $ { a l l _ s o u r c e s }
C O M M E N T " R u n n i n g c l a n g - f o r m a t "
V E R B A T I M )