xref: /aosp_15_r20/external/tinyxml2/CMakeLists.txt (revision 7485b22521f577cf944e5687361548d8993d8d2c)
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