cmake_minimum_required(VERSION 3.21)
project(leaf_xmlxx VERSION 5.6.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
find_package(LibXml2 REQUIRED)
# The upstream Meson manifest lists these same ungenerated implementation files.
file(GLOB_RECURSE XMLXX_FILES "${XMLXX_SOURCE}/libxml++/*.cc")
file(READ "${XMLXX_SOURCE}/libxml++config.h.in" CONFIG)
foreach(VARIABLE HAVE_EXCEPTION_PTR MAJOR_VERSION MINOR_VERSION MICRO_VERSION)
 if(VARIABLE STREQUAL HAVE_EXCEPTION_PTR)
  set(VALUE 1)
 elseif(VARIABLE STREQUAL MAJOR_VERSION)
  set(VALUE 5)
 elseif(VARIABLE STREQUAL MINOR_VERSION)
  set(VALUE 6)
 else()
  set(VALUE 1)
 endif()
 string(REPLACE "#undef LIBXMLXX_${VARIABLE}" "#define LIBXMLXX_${VARIABLE} ${VALUE}" CONFIG "${CONFIG}")
endforeach()
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/libxml++config.h" "${CONFIG}")
add_library(xmlxx STATIC ${XMLXX_FILES})
target_compile_definitions(xmlxx PRIVATE LIBXMLPP_BUILD=1 PUBLIC LIBXMLXX_STATIC=1)
target_include_directories(xmlxx PUBLIC "${XMLXX_SOURCE}" "${CMAKE_CURRENT_BINARY_DIR}")
target_link_libraries(xmlxx PUBLIC LibXml2::LibXml2)
set_target_properties(xmlxx PROPERTIES OUTPUT_NAME "xml++-5.0")
install(TARGETS xmlxx ARCHIVE DESTINATION lib)
install(DIRECTORY "${XMLXX_SOURCE}/libxml++" DESTINATION include/libxml++-5.0 FILES_MATCHING PATTERN "*.h")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libxml++config.h" DESTINATION lib/libxml++-5.0/include)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/libxml++-5.0.pc"
 "prefix=${CMAKE_INSTALL_PREFIX}\nlibdir=\${prefix}/lib\nincludedir=\${prefix}/include\nName: libxml++\nDescription: Original libxml++ C++ XML wrapper\nVersion: 5.6.1\nRequires.private: libxml-2.0\nLibs: -L\${libdir} -lxml++-5.0\nCflags: -I\${includedir}/libxml++-5.0 -I\${libdir}/libxml++-5.0/include\n")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libxml++-5.0.pc" DESTINATION lib/pkgconfig)
