diff --git a/CMakeLists.txt b/CMakeLists.txt index 7632022..80a3838 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,130 +1,134 @@ -cmake_minimum_required(VERSION 3.15) -project(tinyxml2 VERSION 10.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 "$") - -target_compile_definitions( - tinyxml2 - PUBLIC $<$:TINYXML2_DEBUG> - INTERFACE $<$:TINYXML2_IMPORT> - PRIVATE $<$:_CRT_SECURE_NO_WARNINGS> - PUBLIC _FILE_OFFSET_BITS=64 -) - -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 -) +cmake_minimum_required(VERSION 3.15) +project(tinyxml2 VERSION 10.0.0) + +if(DEFINED CMAKE_TOOLCHAIN_FILE) + MESSAGE(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}") +endif() + +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 "$") + +target_compile_definitions( + tinyxml2 + PUBLIC $<$:TINYXML2_DEBUG> + INTERFACE $<$:TINYXML2_IMPORT> + PRIVATE $<$:_CRT_SECURE_NO_WARNINGS> + PUBLIC _FILE_OFFSET_BITS=64 +) + +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 +)