cmake_minimum_required(VERSION 3.15) | |
project(tinyxml2 VERSION 9.0.0) | |
include(CTest) | |
option(tinyxml2_BUILD_TESTING "Build tests for tinyxml2" "${BUILD_TESTING}") | |
## | |
## Honor tinyxml2_SHARED_LIBS to match install interface | |
## | |
if (DEFINED tinyxml2_SHARED_LIBS) | |
set(BUILD_SHARED_LIBS "${tinyxml2_SHARED_LIBS}") | |
endif () | |
## | |
## Main library build | |
## | |
set(CMAKE_CXX_VISIBILITY_PRESET hidden) | |
set(CMAKE_VISIBILITY_INLINES_HIDDEN YES) | |
add_library(tinyxml2 tinyxml2.cpp tinyxml2.h) | |
add_library(tinyxml2::tinyxml2 ALIAS tinyxml2) | |
# Uncomment the following line to require C++11 (or greater) to use tinyxml2 | |
# target_compile_features(tinyxml2 PUBLIC cxx_std_11) | |
target_include_directories(tinyxml2 PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>") | |
target_compile_definitions( | |
tinyxml2 | |
PUBLIC $<$<CONFIG:Debug>:TINYXML2_DEBUG> | |
INTERFACE $<$<BOOL:${BUILD_SHARED_LIBS}>:TINYXML2_IMPORT> | |
PRIVATE $<$<CXX_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS> | |
) | |
set_target_properties( | |
tinyxml2 | |
PROPERTIES | |
DEFINE_SYMBOL "TINYXML2_EXPORT" | |
VERSION "${tinyxml2_VERSION}" | |
SOVERSION "${tinyxml2_VERSION_MAJOR}" | |
) | |
if (tinyxml2_BUILD_TESTING) | |
add_executable(xmltest xmltest.cpp) | |
target_link_libraries(xmltest PRIVATE tinyxml2::tinyxml2) | |
add_test( | |
NAME xmltest | |
COMMAND xmltest | |
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" | |
) | |
set_tests_properties(xmltest PROPERTIES PASS_REGULAR_EXPRESSION ", Fail 0") | |
endif () | |
## | |
## Installation | |
## | |
## Standard modules | |
include(GNUInstallDirs) | |
include(CMakePackageConfigHelpers) | |
## Custom locations | |
set(tinyxml2_INSTALL_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" | |
CACHE PATH "Directory for pkgconfig files") | |
set(tinyxml2_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/tinyxml2" | |
CACHE STRING "Path to tinyxml2 CMake files") | |
## CMake targets and export scripts | |
install( | |
TARGETS tinyxml2 EXPORT tinyxml2-targets | |
RUNTIME COMPONENT tinyxml2_runtime | |
LIBRARY COMPONENT tinyxml2_runtime | |
NAMELINK_COMPONENT tinyxml2_development | |
ARCHIVE COMPONENT tinyxml2_development | |
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" | |
) | |
# Type-specific targets | |
if (BUILD_SHARED_LIBS) | |
set(type shared) | |
else () | |
set(type static) | |
endif () | |
install( | |
EXPORT tinyxml2-targets | |
DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}" | |
NAMESPACE tinyxml2:: | |
FILE tinyxml2-${type}-targets.cmake | |
COMPONENT tinyxml2_development | |
) | |
# Auto-generated version compatibility file | |
write_basic_package_version_file( | |
tinyxml2-config-version.cmake | |
COMPATIBILITY SameMajorVersion | |
) | |
install( | |
FILES | |
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/tinyxml2-config.cmake" | |
"${CMAKE_CURRENT_BINARY_DIR}/tinyxml2-config-version.cmake" | |
DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}" | |
COMPONENT tinyxml2_development | |
) | |
## Headers | |
install( | |
FILES tinyxml2.h | |
TYPE INCLUDE | |
COMPONENT tinyxml2_development | |
) | |
## pkg-config | |
configure_file(cmake/tinyxml2.pc.in tinyxml2.pc.gen @ONLY) | |
file(GENERATE OUTPUT tinyxml2.pc INPUT "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc.gen") | |
install( | |
FILES "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc" | |
DESTINATION "${tinyxml2_INSTALL_PKGCONFIGDIR}" | |
COMPONENT tinyxml2_development | |
) |