Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 1 | cmake_minimum_required(VERSION 3.15)
|
Lee Thomason | 1dee28e | 2021-06-06 17:10:24 -0700 | [diff] [blame] | 2 | project(tinyxml2 VERSION 9.0.0)
|
Lee Thomason (grinliz) | 4dbe869 | 2012-09-08 21:23:33 -0700 | [diff] [blame] | 3 |
|
Chow Loong Jin | 5381145 | 2017-06-22 01:14:07 +0800 | [diff] [blame] | 4 | include(CTest)
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 5 | option(tinyxml2_BUILD_TESTING "Build tests for tinyxml2" "${BUILD_TESTING}")
|
Lee Thomason (grinliz) | 4dbe869 | 2012-09-08 21:23:33 -0700 | [diff] [blame] | 6 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 7 | ##
|
| 8 | ## Honor tinyxml2_SHARED_LIBS to match install interface
|
| 9 | ##
|
Lee Thomason (grinliz) | 4dbe869 | 2012-09-08 21:23:33 -0700 | [diff] [blame] | 10 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 11 | if (DEFINED tinyxml2_SHARED_LIBS)
|
| 12 | set(BUILD_SHARED_LIBS "${tinyxml2_SHARED_LIBS}")
|
| 13 | endif ()
|
Lee Thomason (grinliz) | 4dbe869 | 2012-09-08 21:23:33 -0700 | [diff] [blame] | 14 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 15 | ##
|
| 16 | ## Main library build
|
| 17 | ##
|
Masadow | 4be5bc8 | 2018-10-09 14:57:44 +0200 | [diff] [blame] | 18 |
|
Matthew Woehlke | 8170bdc | 2016-08-09 13:21:06 -0400 | [diff] [blame] | 19 | set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 20 | set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
|
Mark Mossberg | 60e9616 | 2019-12-03 22:35:33 +0000 | [diff] [blame] | 21 |
|
Lukas Solanka | b7c169c | 2018-04-28 00:55:28 +0100 | [diff] [blame] | 22 | add_library(tinyxml2 tinyxml2.cpp tinyxml2.h)
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 23 | add_library(tinyxml2::tinyxml2 ALIAS tinyxml2)
|
renu555 | 871d72f | 2015-09-18 13:39:51 +0530 | [diff] [blame] | 24 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 25 | # Uncomment the following line to require C++11 (or greater) to use tinyxml2
|
| 26 | # target_compile_features(tinyxml2 PUBLIC cxx_std_11)
|
| 27 | target_include_directories(tinyxml2 PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
|
Lee Thomason (grinliz) | 4dbe869 | 2012-09-08 21:23:33 -0700 | [diff] [blame] | 28 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 29 | target_compile_definitions(
|
| 30 | tinyxml2
|
| 31 | PUBLIC $<$<CONFIG:Debug>:TINYXML2_DEBUG>
|
| 32 | INTERFACE $<$<BOOL:${BUILD_SHARED_LIBS}>:TINYXML2_IMPORT>
|
| 33 | PRIVATE $<$<CXX_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS>
|
| 34 | )
|
jasjuang | f66441e | 2017-06-01 17:25:30 -0700 | [diff] [blame] | 35 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 36 | set_target_properties(
|
| 37 | tinyxml2
|
| 38 | PROPERTIES
|
| 39 | DEFINE_SYMBOL "TINYXML2_EXPORT"
|
| 40 | VERSION "${tinyxml2_VERSION}"
|
| 41 | SOVERSION "${tinyxml2_VERSION_MAJOR}"
|
| 42 | )
|
jasjuang | f66441e | 2017-06-01 17:25:30 -0700 | [diff] [blame] | 43 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 44 | if (tinyxml2_BUILD_TESTING)
|
| 45 | add_executable(xmltest xmltest.cpp)
|
| 46 | target_link_libraries(xmltest PRIVATE tinyxml2::tinyxml2)
|
jasjuang | f66441e | 2017-06-01 17:25:30 -0700 | [diff] [blame] | 47 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 48 | add_test(
|
| 49 | NAME xmltest
|
| 50 | COMMAND xmltest
|
| 51 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
| 52 | )
|
Lukasz Kurylo | 2818e67 | 2016-06-22 17:21:54 +0200 | [diff] [blame] | 53 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 54 | set_tests_properties(xmltest PROPERTIES PASS_REGULAR_EXPRESSION ", Fail 0")
|
| 55 | endif ()
|
jasjuang | f66441e | 2017-06-01 17:25:30 -0700 | [diff] [blame] | 56 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 57 | ##
|
| 58 | ## Installation
|
| 59 | ##
|
renu555 | 871d72f | 2015-09-18 13:39:51 +0530 | [diff] [blame] | 60 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 61 | ## Standard modules
|
| 62 | include(GNUInstallDirs)
|
Lukas Solanka | 392ec18 | 2018-05-04 23:02:00 +0100 | [diff] [blame] | 63 | include(CMakePackageConfigHelpers)
|
jasjuang | f66441e | 2017-06-01 17:25:30 -0700 | [diff] [blame] | 64 |
|
Alex Reinking | 7df6b3f | 2021-03-10 16:47:19 -0800 | [diff] [blame] | 65 | ## Custom locations
|
| 66 | set(tinyxml2_INSTALL_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
|
| 67 | CACHE PATH "Directory for pkgconfig files")
|
| 68 |
|
| 69 | set(tinyxml2_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/tinyxml2"
|
| 70 | CACHE STRING "Path to tinyxml2 CMake files")
|
| 71 |
|
| 72 | ## CMake targets and export scripts
|
| 73 |
|
| 74 | install(
|
| 75 | TARGETS tinyxml2 EXPORT tinyxml2-targets
|
| 76 | RUNTIME COMPONENT tinyxml2_runtime
|
| 77 | LIBRARY COMPONENT tinyxml2_runtime
|
| 78 | NAMELINK_COMPONENT tinyxml2_development
|
| 79 | ARCHIVE COMPONENT tinyxml2_development
|
| 80 | INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
| 81 | )
|
| 82 |
|
| 83 | # Type-specific targets
|
| 84 |
|
| 85 | if (BUILD_SHARED_LIBS)
|
| 86 | set(type shared)
|
| 87 | else ()
|
| 88 | set(type static)
|
| 89 | endif ()
|
| 90 |
|
| 91 | install(
|
| 92 | EXPORT tinyxml2-targets
|
| 93 | DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}"
|
| 94 | NAMESPACE tinyxml2::
|
| 95 | FILE tinyxml2-${type}-targets.cmake
|
| 96 | COMPONENT tinyxml2_development
|
| 97 | )
|
| 98 |
|
| 99 | # Auto-generated version compatibility file
|
| 100 | write_basic_package_version_file(
|
| 101 | tinyxml2-config-version.cmake
|
| 102 | COMPATIBILITY SameMajorVersion
|
| 103 | )
|
| 104 |
|
| 105 | install(
|
| 106 | FILES
|
| 107 | "${CMAKE_CURRENT_SOURCE_DIR}/cmake/tinyxml2-config.cmake"
|
| 108 | "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2-config-version.cmake"
|
| 109 | DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}"
|
| 110 | COMPONENT tinyxml2_development
|
| 111 | )
|
| 112 |
|
| 113 | ## Headers
|
| 114 |
|
| 115 | install(
|
| 116 | FILES tinyxml2.h
|
| 117 | TYPE INCLUDE
|
| 118 | COMPONENT tinyxml2_development
|
| 119 | )
|
| 120 |
|
| 121 | ## pkg-config
|
| 122 |
|
| 123 | configure_file(cmake/tinyxml2.pc.in tinyxml2.pc.gen @ONLY)
|
| 124 | file(GENERATE OUTPUT tinyxml2.pc INPUT "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc.gen")
|
| 125 | install(
|
| 126 | FILES "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc"
|
| 127 | DESTINATION "${tinyxml2_INSTALL_PKGCONFIGDIR}"
|
| 128 | COMPONENT tinyxml2_development
|
| 129 | )
|