1*7485b225SElliott Hughescmake_minimum_required(VERSION 3.15) 2*7485b225SElliott Hughesproject(tinyxml2 VERSION 10.0.0) 3*7485b225SElliott Hughes 4*7485b225SElliott Hughesinclude(CTest) 5*7485b225SElliott Hughesoption(tinyxml2_BUILD_TESTING "Build tests for tinyxml2" "${BUILD_TESTING}") 6*7485b225SElliott Hughes 7*7485b225SElliott Hughes## 8*7485b225SElliott Hughes## Honor tinyxml2_SHARED_LIBS to match install interface 9*7485b225SElliott Hughes## 10*7485b225SElliott Hughes 11*7485b225SElliott Hughesif (DEFINED tinyxml2_SHARED_LIBS) 12*7485b225SElliott Hughes set(BUILD_SHARED_LIBS "${tinyxml2_SHARED_LIBS}") 13*7485b225SElliott Hughesendif () 14*7485b225SElliott Hughes 15*7485b225SElliott Hughes## 16*7485b225SElliott Hughes## Main library build 17*7485b225SElliott Hughes## 18*7485b225SElliott Hughes 19*7485b225SElliott Hughesset(CMAKE_CXX_VISIBILITY_PRESET hidden) 20*7485b225SElliott Hughesset(CMAKE_VISIBILITY_INLINES_HIDDEN YES) 21*7485b225SElliott Hughes 22*7485b225SElliott Hughesadd_library(tinyxml2 tinyxml2.cpp tinyxml2.h) 23*7485b225SElliott Hughesadd_library(tinyxml2::tinyxml2 ALIAS tinyxml2) 24*7485b225SElliott Hughes 25*7485b225SElliott Hughes# Uncomment the following line to require C++11 (or greater) to use tinyxml2 26*7485b225SElliott Hughes# target_compile_features(tinyxml2 PUBLIC cxx_std_11) 27*7485b225SElliott Hughestarget_include_directories(tinyxml2 PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>") 28*7485b225SElliott Hughes 29*7485b225SElliott Hughestarget_compile_definitions( 30*7485b225SElliott Hughes tinyxml2 31*7485b225SElliott Hughes PUBLIC $<$<CONFIG:Debug>:TINYXML2_DEBUG> 32*7485b225SElliott Hughes INTERFACE $<$<BOOL:${BUILD_SHARED_LIBS}>:TINYXML2_IMPORT> 33*7485b225SElliott Hughes PRIVATE $<$<CXX_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS> 34*7485b225SElliott Hughes PUBLIC _FILE_OFFSET_BITS=64 35*7485b225SElliott Hughes) 36*7485b225SElliott Hughes 37*7485b225SElliott Hughesset_target_properties( 38*7485b225SElliott Hughes tinyxml2 39*7485b225SElliott Hughes PROPERTIES 40*7485b225SElliott Hughes DEFINE_SYMBOL "TINYXML2_EXPORT" 41*7485b225SElliott Hughes VERSION "${tinyxml2_VERSION}" 42*7485b225SElliott Hughes SOVERSION "${tinyxml2_VERSION_MAJOR}" 43*7485b225SElliott Hughes) 44*7485b225SElliott Hughes 45*7485b225SElliott Hughesif (tinyxml2_BUILD_TESTING) 46*7485b225SElliott Hughes add_executable(xmltest xmltest.cpp) 47*7485b225SElliott Hughes target_link_libraries(xmltest PRIVATE tinyxml2::tinyxml2) 48*7485b225SElliott Hughes 49*7485b225SElliott Hughes add_test( 50*7485b225SElliott Hughes NAME xmltest 51*7485b225SElliott Hughes COMMAND xmltest 52*7485b225SElliott Hughes WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 53*7485b225SElliott Hughes ) 54*7485b225SElliott Hughes 55*7485b225SElliott Hughes set_tests_properties(xmltest PROPERTIES PASS_REGULAR_EXPRESSION ", Fail 0") 56*7485b225SElliott Hughesendif () 57*7485b225SElliott Hughes 58*7485b225SElliott Hughes## 59*7485b225SElliott Hughes## Installation 60*7485b225SElliott Hughes## 61*7485b225SElliott Hughes 62*7485b225SElliott Hughes## Standard modules 63*7485b225SElliott Hughesinclude(GNUInstallDirs) 64*7485b225SElliott Hughesinclude(CMakePackageConfigHelpers) 65*7485b225SElliott Hughes 66*7485b225SElliott Hughes## Custom locations 67*7485b225SElliott Hughesset(tinyxml2_INSTALL_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" 68*7485b225SElliott Hughes CACHE PATH "Directory for pkgconfig files") 69*7485b225SElliott Hughes 70*7485b225SElliott Hughesset(tinyxml2_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/tinyxml2" 71*7485b225SElliott Hughes CACHE STRING "Path to tinyxml2 CMake files") 72*7485b225SElliott Hughes 73*7485b225SElliott Hughes## CMake targets and export scripts 74*7485b225SElliott Hughes 75*7485b225SElliott Hughesinstall( 76*7485b225SElliott Hughes TARGETS tinyxml2 EXPORT tinyxml2-targets 77*7485b225SElliott Hughes RUNTIME COMPONENT tinyxml2_runtime 78*7485b225SElliott Hughes LIBRARY COMPONENT tinyxml2_runtime 79*7485b225SElliott Hughes NAMELINK_COMPONENT tinyxml2_development 80*7485b225SElliott Hughes ARCHIVE COMPONENT tinyxml2_development 81*7485b225SElliott Hughes INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" 82*7485b225SElliott Hughes) 83*7485b225SElliott Hughes 84*7485b225SElliott Hughes# Type-specific targets 85*7485b225SElliott Hughes 86*7485b225SElliott Hughesif (BUILD_SHARED_LIBS) 87*7485b225SElliott Hughes set(type shared) 88*7485b225SElliott Hugheselse () 89*7485b225SElliott Hughes set(type static) 90*7485b225SElliott Hughesendif () 91*7485b225SElliott Hughes 92*7485b225SElliott Hughesinstall( 93*7485b225SElliott Hughes EXPORT tinyxml2-targets 94*7485b225SElliott Hughes DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}" 95*7485b225SElliott Hughes NAMESPACE tinyxml2:: 96*7485b225SElliott Hughes FILE tinyxml2-${type}-targets.cmake 97*7485b225SElliott Hughes COMPONENT tinyxml2_development 98*7485b225SElliott Hughes) 99*7485b225SElliott Hughes 100*7485b225SElliott Hughes# Auto-generated version compatibility file 101*7485b225SElliott Hugheswrite_basic_package_version_file( 102*7485b225SElliott Hughes tinyxml2-config-version.cmake 103*7485b225SElliott Hughes COMPATIBILITY SameMajorVersion 104*7485b225SElliott Hughes) 105*7485b225SElliott Hughes 106*7485b225SElliott Hughesinstall( 107*7485b225SElliott Hughes FILES 108*7485b225SElliott Hughes "${CMAKE_CURRENT_SOURCE_DIR}/cmake/tinyxml2-config.cmake" 109*7485b225SElliott Hughes "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2-config-version.cmake" 110*7485b225SElliott Hughes DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}" 111*7485b225SElliott Hughes COMPONENT tinyxml2_development 112*7485b225SElliott Hughes) 113*7485b225SElliott Hughes 114*7485b225SElliott Hughes## Headers 115*7485b225SElliott Hughes 116*7485b225SElliott Hughesinstall( 117*7485b225SElliott Hughes FILES tinyxml2.h 118*7485b225SElliott Hughes TYPE INCLUDE 119*7485b225SElliott Hughes COMPONENT tinyxml2_development 120*7485b225SElliott Hughes) 121*7485b225SElliott Hughes 122*7485b225SElliott Hughes## pkg-config 123*7485b225SElliott Hughes 124*7485b225SElliott Hughesconfigure_file(cmake/tinyxml2.pc.in tinyxml2.pc.gen @ONLY) 125*7485b225SElliott Hughesfile(GENERATE OUTPUT tinyxml2.pc INPUT "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc.gen") 126*7485b225SElliott Hughesinstall( 127*7485b225SElliott Hughes FILES "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc" 128*7485b225SElliott Hughes DESTINATION "${tinyxml2_INSTALL_PKGCONFIGDIR}" 129*7485b225SElliott Hughes COMPONENT tinyxml2_development 130*7485b225SElliott Hughes) 131