| cmake_minimum_required(VERSION 3.18) |
| |
| file(READ "VERSION" VERSION) |
| string(STRIP ${VERSION} VERSION) |
| if(${VERSION} MATCHES [[([0-9]+)\.([0-9]+)\.([0-9]+)]]) |
| set(LIBXML_MAJOR_VERSION ${CMAKE_MATCH_1}) |
| set(LIBXML_MINOR_VERSION ${CMAKE_MATCH_2}) |
| set(LIBXML_MICRO_VERSION ${CMAKE_MATCH_3}) |
| endif() |
| |
| project(libxml2 VERSION ${VERSION} LANGUAGES C) |
| |
| include(CheckCSourceCompiles) |
| include(CheckFunctionExists) |
| include(CheckIncludeFiles) |
| include(CheckLibraryExists) |
| include(CheckLinkerFlag) |
| include(CheckStructHasMember) |
| include(CheckSymbolExists) |
| include(CMakeDependentOption) |
| include(CMakePackageConfigHelpers) |
| include(FindPkgConfig) |
| include(GNUInstallDirs) |
| |
| option(BUILD_SHARED_LIBS "Build shared libraries" ON) |
| set(LIBXML2_WITH_AUTOMATA ON) |
| option(LIBXML2_WITH_CATALOG "Add the Catalog support" ON) |
| option(LIBXML2_WITH_DEBUG "Add the debugging module" ON) |
| set(LIBXML2_WITH_EXPR ON) |
| option(LIBXML2_WITH_HTML "Add the HTML support" ON) |
| option(LIBXML2_WITH_HTTP "Add the HTTP support" OFF) |
| option(LIBXML2_WITH_ICONV "Add ICONV support" ON) |
| option(LIBXML2_WITH_ICU "Add ICU support" OFF) |
| option(LIBXML2_WITH_ISO8859X "Add ISO8859X support if no iconv" ON) |
| option(LIBXML2_WITH_LEGACY "Add deprecated APIs for compatibility" OFF) |
| option(LIBXML2_WITH_LZMA "Use liblzma" OFF) |
| option(LIBXML2_WITH_MODULES "Add the dynamic modules support" ON) |
| option(LIBXML2_WITH_OUTPUT "Add the serialization support" ON) |
| option(LIBXML2_WITH_PATTERN "Add the xmlPattern selection interface" ON) |
| option(LIBXML2_WITH_PROGRAMS "Build programs" ON) |
| option(LIBXML2_WITH_PUSH "Add the PUSH parser interfaces" ON) |
| option(LIBXML2_WITH_PYTHON "Build Python bindings" ON) |
| option(LIBXML2_WITH_READLINE "readline support for xmllint shell" OFF) |
| option(LIBXML2_WITH_REGEXPS "Add Regular Expressions support" ON) |
| option(LIBXML2_WITH_SAX1 "Add the older SAX1 interface" ON) |
| option(LIBXML2_WITH_TESTS "Build tests" ON) |
| option(LIBXML2_WITH_THREADS "Add multithread support" ON) |
| option(LIBXML2_WITH_TLS "Enable thread-local storage" OFF) |
| set(LIBXML2_WITH_UNICODE ON) |
| option(LIBXML2_WITH_VALID "Add the DTD validation support" ON) |
| option(LIBXML2_WITH_XPATH "Add the XPATH support" ON) |
| option(LIBXML2_WITH_ZLIB "Use libz" OFF) |
| |
| cmake_dependent_option( |
| LIBXML2_WITH_C14N "Add the Canonicalization support" ON |
| "LIBXML2_WITH_OUTPUT;LIBXML2_WITH_XPATH" OFF) |
| cmake_dependent_option( |
| LIBXML2_WITH_HISTORY "history support for xmllint shell" OFF |
| "LIBXML2_WITH_READLINE" OFF) |
| cmake_dependent_option( |
| LIBXML2_WITH_READER "Add the xmlReader parsing interface" ON |
| "LIBXML2_WITH_PUSH" OFF) |
| cmake_dependent_option( |
| LIBXML2_WITH_SCHEMAS "Add Relax-NG and Schemas support" ON |
| "LIBXML2_WITH_PATTERN;LIBXML2_WITH_REGEXPS" OFF) |
| cmake_dependent_option( |
| LIBXML2_WITH_SCHEMATRON "Add Schematron support" ON |
| "LIBXML2_WITH_PATTERN;LIBXML2_WITH_XPATH" OFF) |
| cmake_dependent_option( |
| LIBXML2_WITH_THREAD_ALLOC "Add per-thread malloc hooks" OFF |
| "LIBXML2_WITH_THREADS" OFF) |
| cmake_dependent_option( |
| LIBXML2_WITH_WRITER "Add the xmlWriter saving interface" ON |
| "LIBXML2_WITH_OUTPUT;LIBXML2_WITH_PUSH" OFF) |
| cmake_dependent_option( |
| LIBXML2_WITH_XINCLUDE "Add the XInclude support" ON |
| "LIBXML2_WITH_XPATH" OFF) |
| cmake_dependent_option( |
| LIBXML2_WITH_XPTR "Add the XPointer support" ON |
| "LIBXML2_WITH_XPATH" OFF) |
| |
| set(LIBXML2_XMLCONF_WORKING_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH "Working directory for XML Conformance Test Suite") |
| |
| if(LIBXML2_WITH_PYTHON) |
| find_package(Python COMPONENTS Interpreter Development REQUIRED) |
| #set(LIBXML2_PYTHON_INSTALL_DIR ${Python_SITEARCH} CACHE PATH "Python bindings install directory") |
| set(LIBXML2_PYTHON_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/python" |
| CACHE PATH "Python bindings install directory") |
| endif() |
| |
| foreach(VARIABLE IN ITEMS WITH_AUTOMATA WITH_C14N WITH_CATALOG WITH_DEBUG WITH_EXPR WITH_HTML WITH_HTTP WITH_ICONV WITH_ICU WITH_ISO8859X WITH_LEGACY WITH_LZMA WITH_MODULES WITH_OUTPUT WITH_PATTERN WITH_PUSH WITH_READER WITH_REGEXPS WITH_SAX1 WITH_SCHEMAS WITH_SCHEMATRON WITH_THREADS WITH_THREAD_ALLOC WITH_UNICODE WITH_VALID WITH_WRITER WITH_XINCLUDE WITH_XPATH WITH_XPTR WITH_ZLIB) |
| if(LIBXML2_${VARIABLE}) |
| set(${VARIABLE} 1) |
| else() |
| set(${VARIABLE} 0) |
| endif() |
| endforeach() |
| |
| set(LIBXML_VERSION ${VERSION}) |
| set(LIBXML_VERSION_EXTRA "") |
| math(EXPR LIBXML_VERSION_NUMBER " |
| ${LIBXML_MAJOR_VERSION} * 10000 + |
| ${LIBXML_MINOR_VERSION} * 100 + |
| ${LIBXML_MICRO_VERSION} |
| ") |
| |
| set(MODULE_EXTENSION "${CMAKE_SHARED_LIBRARY_SUFFIX}") |
| |
| set(PACKAGE "libxml2") |
| set(PACKAGE_NAME "libxml2") |
| set(PACKAGE_STRING "libxml2 ${VERSION}") |
| set(PACKAGE_TARNAME "libxml2") |
| set(PACKAGE_URL "https://gitlab.gnome.org/GNOME/libxml2") |
| set(PACKAGE_VERSION ${VERSION}) |
| |
| if(LIBXML2_WITH_ICONV) |
| find_package(Iconv REQUIRED) |
| endif() |
| |
| if(LIBXML2_WITH_ICU) |
| find_package(ICU REQUIRED COMPONENTS data i18n uc) |
| endif() |
| |
| if(LIBXML2_WITH_LZMA) |
| find_package(LibLZMA REQUIRED) |
| endif() |
| |
| if(LIBXML2_WITH_THREADS) |
| find_package(Threads REQUIRED) |
| set(THREAD_LIBS ${CMAKE_THREAD_LIBS_INIT}) |
| list(APPEND CMAKE_REQUIRED_LIBRARIES Threads::Threads) |
| endif() |
| |
| if(LIBXML2_WITH_ZLIB) |
| find_package(ZLIB REQUIRED) |
| endif() |
| |
| check_c_source_compiles(" |
| void __attribute__((destructor)) |
| f(void) {} |
| int main(void) { return 0; } |
| " HAVE_FUNC_ATTRIBUTE_DESTRUCTOR) |
| check_symbol_exists(getentropy "sys/random.h" HAVE_DECL_GETENTROPY) |
| check_symbol_exists(glob "glob.h" HAVE_DECL_GLOB) |
| check_symbol_exists(mmap "sys/mman.h" HAVE_DECL_MMAP) |
| check_include_files(stdint.h HAVE_STDINT_H) |
| |
| if(LIBXML2_WITH_READLINE) |
| check_library_exists(readline readline "" HAVE_LIBREADLINE) |
| if (LIBXML2_WITH_HISTORY) |
| check_library_exists(history append_history "" HAVE_LIBHISTORY) |
| endif() |
| endif() |
| |
| if(LIBXML2_WITH_HTTP) |
| check_include_files(poll.h HAVE_POLL_H) |
| endif() |
| |
| if(LIBXML2_WITH_TLS) |
| check_c_source_compiles( |
| "_Thread_local int v; int main(){return 0;}" |
| XML_THREAD_LOCAL_C11 |
| ) |
| if (XML_THREAD_LOCAL_C11) |
| set(XML_THREAD_LOCAL "_Thread_local") |
| else() |
| check_c_source_compiles( |
| "__thread int v; int main(){return 0;}" |
| XML_THREAD_LOCAL_THREAD |
| ) |
| if (XML_THREAD_LOCAL_THREAD) |
| set(XML_THREAD_LOCAL "__thread") |
| else() |
| check_c_source_compiles( |
| "__declspec(thread) int v; int main(){return 0;}" |
| XML_THREAD_LOCAL_DECLSPEC |
| ) |
| if (XML_THREAD_LOCAL_DECLSPEC) |
| set(XML_THREAD_LOCAL "__declspec(thread)") |
| endif() |
| endif() |
| endif() |
| endif() |
| |
| set( |
| LIBXML2_HDRS |
| include/libxml/c14n.h |
| include/libxml/catalog.h |
| include/libxml/chvalid.h |
| include/libxml/debugXML.h |
| include/libxml/dict.h |
| include/libxml/encoding.h |
| include/libxml/entities.h |
| include/libxml/globals.h |
| include/libxml/hash.h |
| include/libxml/HTMLparser.h |
| include/libxml/HTMLtree.h |
| include/libxml/list.h |
| include/libxml/nanoftp.h |
| include/libxml/nanohttp.h |
| include/libxml/parser.h |
| include/libxml/parserInternals.h |
| include/libxml/pattern.h |
| include/libxml/relaxng.h |
| include/libxml/SAX.h |
| include/libxml/SAX2.h |
| include/libxml/schemasInternals.h |
| include/libxml/schematron.h |
| include/libxml/threads.h |
| include/libxml/tree.h |
| include/libxml/uri.h |
| include/libxml/valid.h |
| include/libxml/xinclude.h |
| include/libxml/xlink.h |
| include/libxml/xmlIO.h |
| include/libxml/xmlautomata.h |
| include/libxml/xmlerror.h |
| include/libxml/xmlexports.h |
| include/libxml/xmlmemory.h |
| include/libxml/xmlmodule.h |
| include/libxml/xmlreader.h |
| include/libxml/xmlregexp.h |
| include/libxml/xmlsave.h |
| include/libxml/xmlschemas.h |
| include/libxml/xmlschemastypes.h |
| include/libxml/xmlstring.h |
| include/libxml/xmlunicode.h |
| include/libxml/xmlwriter.h |
| include/libxml/xpath.h |
| include/libxml/xpathInternals.h |
| include/libxml/xpointer.h |
| ) |
| |
| set( |
| LIBXML2_SRCS |
| buf.c |
| c14n.c |
| catalog.c |
| chvalid.c |
| debugXML.c |
| dict.c |
| encoding.c |
| entities.c |
| error.c |
| globals.c |
| hash.c |
| HTMLparser.c |
| HTMLtree.c |
| legacy.c |
| list.c |
| nanohttp.c |
| parser.c |
| parserInternals.c |
| pattern.c |
| relaxng.c |
| SAX2.c |
| schematron.c |
| threads.c |
| tree.c |
| uri.c |
| valid.c |
| xinclude.c |
| xlink.c |
| xmlIO.c |
| xmlmemory.c |
| xmlmodule.c |
| xmlreader.c |
| xmlregexp.c |
| xmlsave.c |
| xmlschemas.c |
| xmlschemastypes.c |
| xmlstring.c |
| xmlunicode.c |
| xmlwriter.c |
| xpath.c |
| xpointer.c |
| xzlib.c |
| ) |
| |
| if(WIN32) |
| list(APPEND LIBXML2_SRCS win32/libxml2.rc) |
| file( |
| WRITE |
| ${CMAKE_CURRENT_BINARY_DIR}/rcVersion.h |
| "#define LIBXML_MAJOR_VERSION ${LIBXML_MAJOR_VERSION}\n" |
| "#define LIBXML_MINOR_VERSION ${LIBXML_MINOR_VERSION}\n" |
| "#define LIBXML_MICRO_VERSION ${LIBXML_MICRO_VERSION}\n" |
| "#define LIBXML_DOTTED_VERSION \"${VERSION}\"\n" |
| ) |
| endif() |
| |
| add_library(LibXml2 ${LIBXML2_HDRS} ${LIBXML2_SRCS}) |
| add_library(LibXml2::LibXml2 ALIAS LibXml2) |
| |
| target_compile_definitions(LibXml2 PRIVATE SYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}") |
| |
| target_include_directories( |
| LibXml2 |
| PUBLIC |
| $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> |
| $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}/libxml2> |
| ) |
| |
| if(LIBXML2_WITH_MODULES) |
| check_library_exists(dl dlopen "" HAVE_DLOPEN) |
| if(HAVE_DLOPEN) |
| target_link_libraries(LibXml2 PRIVATE dl) |
| set(MODULE_LIBS "-ldl") |
| else() |
| check_library_exists(dld shl_load "" HAVE_SHLLOAD) |
| if(HAVE_SHLLOAD) |
| target_link_libraries(LibXml2 PRIVATE dld) |
| set(MODULE_LIBS "-ldld") |
| endif() |
| endif() |
| endif() |
| |
| if(UNIX) |
| target_link_libraries(LibXml2 PRIVATE m) |
| set(LIBM "-lm") |
| endif() |
| |
| if(WIN32) |
| target_link_libraries(LibXml2 PRIVATE ws2_32) |
| set(WINSOCK_LIBS "-lws2_32") |
| target_link_libraries(LibXml2 PRIVATE bcrypt) |
| set(CRYPTO_LIBS "-lbcrypt") |
| endif() |
| |
| if(LIBXML2_WITH_ICONV) |
| target_link_libraries(LibXml2 PUBLIC Iconv::Iconv) |
| if(NOT Iconv_IS_BUILT_IN) |
| set(ICONV_LIBS "-liconv") |
| endif() |
| endif() |
| |
| if(LIBXML2_WITH_ICU) |
| target_link_libraries(LibXml2 PRIVATE ICU::data ICU::i18n ICU::uc) |
| if(WIN32) |
| set(ICU_LDFLAGS "-licudt -licuin -licuuc") |
| else() |
| set(ICU_LDFLAGS "-licudata -licui18n -licuuc") |
| endif() |
| list(APPEND XML_PRIVATE_LIBS "${ICU_LDFLAGS}") |
| pkg_check_modules(ICU_PC IMPORTED_TARGET icu-i18n) |
| if(ICU_PC_FOUND) |
| list(APPEND XML_PC_REQUIRES icu-i18n) |
| else() |
| list(APPEND XML_PC_LIBS "${ICU_LDFLAGS}") |
| endif() |
| endif() |
| |
| if(LIBXML2_WITH_LZMA) |
| target_link_libraries(LibXml2 PRIVATE LibLZMA::LibLZMA) |
| set(LibLZMA_LDFLAGS "-llzma") |
| list(APPEND XML_PRIVATE_LIBS "${LibLZMA_LDFLAGS}") |
| pkg_check_modules(LibLZMA_PC IMPORTED_TARGET liblzma) |
| if(LibLZMA_PC_FOUND) |
| list(APPEND XML_PC_REQUIRES liblzma) |
| else() |
| list(APPEND XML_PC_LIBS "${LibLZMA_LDFLAGS}") |
| endif() |
| endif() |
| |
| if(LIBXML2_WITH_THREADS) |
| target_link_libraries(LibXml2 PRIVATE Threads::Threads) |
| endif() |
| |
| if(LIBXML2_WITH_ZLIB) |
| target_link_libraries(LibXml2 PRIVATE ZLIB::ZLIB) |
| set(ZLIB_LDFLAGS "-lz") |
| list(APPEND XML_PRIVATE_LIBS "${ZLIB_LDFLAGS}") |
| pkg_check_modules(ZLIB_PC IMPORTED_TARGET zlib) |
| if(ZLIB_PC_FOUND) |
| list(APPEND XML_PC_REQUIRES zlib) |
| else() |
| list(APPEND XML_PC_LIBS "${ZLIB_LDFLAGS}") |
| endif() |
| endif() |
| |
| if(CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID STREQUAL "GNU") |
| # These compiler flags can break the checks above so keep them here. |
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic -Wall -Wextra -Wshadow \ |
| -Wpointer-arith -Wcast-align -Wwrite-strings \ |
| -Wstrict-prototypes -Wmissing-prototypes \ |
| -Wno-long-long -Wno-format-extra-args -Wno-array-bounds") |
| |
| if(LIBXML2_WITH_LEGACY AND BUILD_SHARED_LIBS AND UNIX AND NOT APPLE) |
| check_linker_flag(C "LINKER:--undefined-version" FLAG_UNDEFINED_VERSION) |
| if (FLAG_UNDEFINED_VERSION) |
| target_link_options(LibXml2 PRIVATE "LINKER:--undefined-version") |
| endif() |
| target_link_options(LibXml2 PRIVATE "LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libxml2.syms") |
| endif() |
| endif() |
| |
| set(LIBXML_MINOR_COMPAT 0) |
| math(EXPR LIBXML_SOVERSION "${LIBXML_MAJOR_VERSION} + ${LIBXML_MINOR_COMPAT}") |
| set_target_properties( |
| LibXml2 |
| PROPERTIES |
| IMPORT_PREFIX lib |
| OUTPUT_NAME xml2 |
| POSITION_INDEPENDENT_CODE ON |
| PREFIX lib |
| VERSION ${PROJECT_VERSION} |
| SOVERSION ${LIBXML_SOVERSION} |
| ) |
| |
| if(MSVC) |
| if(BUILD_SHARED_LIBS) |
| set_target_properties( |
| LibXml2 |
| PROPERTIES |
| DEBUG_POSTFIX d |
| ) |
| else() |
| set_target_properties( |
| LibXml2 |
| PROPERTIES |
| DEBUG_POSTFIX sd |
| MINSIZEREL_POSTFIX s |
| RELEASE_POSTFIX s |
| RELWITHDEBINFO_POSTFIX s |
| ) |
| endif() |
| endif() |
| |
| install(FILES ${LIBXML2_HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libxml2/libxml COMPONENT development) |
| |
| install( |
| TARGETS LibXml2 |
| EXPORT LibXml2 |
| ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT development |
| LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT runtime NAMELINK_COMPONENT development |
| RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime |
| ) |
| |
| if(MSVC AND BUILD_SHARED_LIBS) |
| install(FILES $<TARGET_PDB_FILE:LibXml2> DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS Debug RelWithDebInfo COMPONENT debug) |
| endif() |
| |
| if(LIBXML2_WITH_PROGRAMS) |
| add_executable(xmllint xmllint.c shell.c) |
| add_executable(xmlcatalog xmlcatalog.c) |
| set( |
| PROGRAMS |
| xmlcatalog |
| xmllint |
| ) |
| foreach(PROGRAM ${PROGRAMS}) |
| add_executable(LibXml2::${PROGRAM} ALIAS ${PROGRAM}) |
| target_compile_definitions(${PROGRAM} PRIVATE SYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}") |
| target_link_libraries(${PROGRAM} LibXml2) |
| if(HAVE_LIBHISTORY) |
| target_link_libraries(${PROGRAM} history) |
| endif() |
| if(HAVE_LIBREADLINE) |
| target_link_libraries(${PROGRAM} readline) |
| endif() |
| install(TARGETS ${PROGRAM} EXPORT LibXml2 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT programs) |
| endforeach() |
| endif() |
| |
| if(LIBXML2_WITH_TESTS) |
| enable_testing() |
| set( |
| TESTS |
| runtest |
| runxmlconf |
| runsuite |
| testapi |
| testchar |
| testdict |
| testModule |
| testlimits |
| testparser |
| testrecurse |
| ) |
| foreach(TEST ${TESTS}) |
| add_executable(${TEST} ${TEST}.c) |
| target_compile_definitions(${TEST} PRIVATE SYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}") |
| target_link_libraries(${TEST} LibXml2) |
| endforeach() |
| if(Threads_FOUND) |
| foreach(TEST runtest) |
| target_link_libraries(${TEST} Threads::Threads) |
| endforeach() |
| endif() |
| add_test(NAME runtest COMMAND runtest --out ${CMAKE_CURRENT_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) |
| add_test(NAME runsuite COMMAND runsuite WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) |
| if(EXISTS ${LIBXML2_XMLCONF_WORKING_DIR}/xmlconf/xmlconf.xml) |
| add_test(NAME runxmlconf COMMAND runxmlconf WORKING_DIRECTORY ${LIBXML2_XMLCONF_WORKING_DIR}) |
| endif() |
| if(NOT WIN32) |
| add_test(NAME testapi COMMAND testapi) |
| endif() |
| add_test(NAME testchar COMMAND testchar) |
| add_test(NAME testdict COMMAND testdict) |
| add_test(NAME testparser COMMAND testparser WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) |
| add_test(NAME testrecurse COMMAND testrecurse WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) |
| endif() |
| |
| if(LIBXML2_WITH_PYTHON) |
| execute_process( |
| COMMAND |
| ${Python_EXECUTABLE} |
| ${CMAKE_CURRENT_SOURCE_DIR}/python/generator.py |
| ${CMAKE_CURRENT_SOURCE_DIR}/doc/libxml2-api.xml |
| ${CMAKE_CURRENT_SOURCE_DIR}/python/libxml2-python-api.xml |
| WORKING_DIRECTORY |
| ${CMAKE_CURRENT_BINARY_DIR} |
| ) |
| file(READ python/libxml.py LIBXML_PY) |
| file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/libxml2.py.in "${LIBXML_PY}") |
| file(READ ${CMAKE_CURRENT_BINARY_DIR}/libxml2class.py LIBXML2CLASS_PY) |
| file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/libxml2.py.in "${LIBXML2CLASS_PY}") |
| configure_file(${CMAKE_CURRENT_BINARY_DIR}/libxml2.py.in libxml2.py COPYONLY) |
| add_library( |
| LibXml2Mod |
| libxml2-py.c |
| libxml2-py.h |
| python/libxml.c |
| python/libxml_wrap.h |
| python/types.c |
| ) |
| target_include_directories( |
| LibXml2Mod |
| PUBLIC |
| $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/python> |
| ) |
| target_link_libraries(LibXml2Mod LibXml2 Python::Python) |
| set_target_properties( |
| LibXml2Mod |
| PROPERTIES |
| IMPORT_PREFIX lib |
| OUTPUT_NAME xml2mod |
| PREFIX lib |
| VERSION ${PROJECT_VERSION} |
| ) |
| if (WIN32) |
| set_target_properties(LibXml2Mod PROPERTIES SUFFIX ".pyd") |
| endif() |
| install( |
| TARGETS LibXml2Mod |
| ARCHIVE DESTINATION ${LIBXML2_PYTHON_INSTALL_DIR} COMPONENT development |
| LIBRARY DESTINATION ${LIBXML2_PYTHON_INSTALL_DIR} COMPONENT runtime NAMELINK_COMPONENT development |
| RUNTIME DESTINATION ${LIBXML2_PYTHON_INSTALL_DIR} COMPONENT runtime |
| ) |
| if(MSVC AND BUILD_SHARED_LIBS) |
| install(FILES $<TARGET_PDB_FILE:LibXml2Mod> DESTINATION ${LIBXML2_PYTHON_INSTALL_DIR} CONFIGURATIONS Debug RelWithDebInfo COMPONENT debug) |
| endif() |
| install(FILES python/drv_libxml2.py DESTINATION ${LIBXML2_PYTHON_INSTALL_DIR} COMPONENT runtime) |
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libxml2.py DESTINATION ${LIBXML2_PYTHON_INSTALL_DIR} COMPONENT runtime) |
| endif() |
| |
| install(FILES doc/xml2-config.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT documentation) |
| if(LIBXML2_WITH_PROGRAMS) |
| install(FILES doc/xmlcatalog.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT documentation) |
| install(FILES doc/xmllint.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT documentation) |
| endif() |
| install(DIRECTORY doc/ DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT documentation |
| PATTERN "Makefile.*" EXCLUDE |
| PATTERN "meson.build" EXCLUDE |
| PATTERN "*.1" EXCLUDE |
| PATTERN "*.py" EXCLUDE |
| PATTERN "*.res" EXCLUDE |
| PATTERN "*.xml" EXCLUDE |
| PATTERN "*.xsl" EXCLUDE) |
| |
| configure_package_config_file( |
| libxml2-config.cmake.cmake.in libxml2-config.cmake |
| INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libxml2-${PROJECT_VERSION} |
| ) |
| |
| install( |
| FILES ${CMAKE_CURRENT_BINARY_DIR}/libxml2-config.cmake |
| DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libxml2-${PROJECT_VERSION} |
| COMPONENT development |
| ) |
| |
| write_basic_package_version_file( |
| ${CMAKE_CURRENT_BINARY_DIR}/libxml2-config-version.cmake |
| VERSION ${PROJECT_VERSION} |
| COMPATIBILITY ExactVersion |
| ) |
| |
| install( |
| FILES ${CMAKE_CURRENT_BINARY_DIR}/libxml2-config-version.cmake |
| DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libxml2-${PROJECT_VERSION} |
| COMPONENT development |
| ) |
| |
| install( |
| EXPORT LibXml2 |
| DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libxml2-${PROJECT_VERSION} |
| NAMESPACE LibXml2:: |
| FILE libxml2-export.cmake |
| COMPONENT development |
| ) |
| |
| configure_file(config.h.cmake.in config.h) |
| configure_file(include/libxml/xmlversion.h.in libxml/xmlversion.h) |
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libxml/xmlversion.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libxml2/libxml COMPONENT development) |
| |
| if(LIBXML2_WITH_PYTHON) |
| set(prefix "${CMAKE_INSTALL_PREFIX}") |
| configure_file(python/setup.py.in setup.py @ONLY) |
| endif() |
| |
| set(NON_PC_LIBS "${THREAD_LIBS} ${ICONV_LIBS} ${LIBM} ${WINSOCK_LIBS} ${CRYPTO_LIBS} ${MODULE_LIBS}") |
| list(APPEND XML_PC_LIBS "${NON_PC_LIBS}") |
| list(APPEND XML_PRIVATE_LIBS "${NON_PC_LIBS}") |
| list(REMOVE_DUPLICATES XML_PC_LIBS) |
| list(REMOVE_DUPLICATES XML_PRIVATE_LIBS) |
| |
| list(JOIN XML_PC_REQUIRES " " XML_PC_REQUIRES) |
| list(JOIN XML_PC_LIBS " " XML_PC_LIBS) |
| list(JOIN XML_PRIVATE_LIBS " " XML_PRIVATE_LIBS) |
| |
| set(XML_INCLUDEDIR "-I\${includedir}/libxml2") |
| set(XML_LIBDIR "-L\${libdir}") |
| set(XML_LIBS "-lxml2") |
| |
| if(BUILD_SHARED_LIBS) |
| set(XML_PC_PRIVATE ".private") |
| set(XML_PC_LIBS_PRIVATE " |
| Libs.private:") |
| else() |
| set(XML_PRIVATE_LIBS_NO_SHARED "${XML_PRIVATE_LIBS}") |
| endif() |
| |
| if(WIN32) |
| set(XML_STATIC_CFLAGS "-DLIBXML_STATIC") |
| if (BUILD_SHARED_LIBS) |
| set(XML_PC_CFLAGS_PRIVATE " |
| Cflags.private:") |
| else() |
| target_compile_definitions(LibXml2 PUBLIC LIBXML_STATIC) |
| set(XML_CFLAGS "${XML_STATIC_CFLAGS}") |
| endif() |
| endif() |
| |
| file(RELATIVE_PATH PACKAGE_RELATIVE_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig" "${CMAKE_INSTALL_PREFIX}") |
| string(REGEX REPLACE "/$" "" PACKAGE_RELATIVE_PATH "${PACKAGE_RELATIVE_PATH}") |
| |
| if(WIN32) |
| set(prefix "\${pcfiledir}/${PACKAGE_RELATIVE_PATH}") |
| else() |
| set(prefix "${CMAKE_INSTALL_PREFIX}") |
| endif() |
| set(exec_prefix "\${prefix}") |
| set(libdir "\${prefix}/${CMAKE_INSTALL_LIBDIR}") |
| set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") |
| configure_file(libxml-2.0.pc.in libxml-2.0.pc @ONLY) |
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libxml-2.0.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT development) |
| |
| if(WIN32) |
| set(prefix "\$(cd \"\$(dirname \"\$0\")\"; pwd -P)/..") |
| endif() |
| configure_file(xml2-config.in xml2-config @ONLY) |
| install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/xml2-config DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT development) |
| |
| set(XML_INCLUDEDIR "-I${CMAKE_INSTALL_FULL_INCLUDEDIR}/libxml2") |
| set(XML_LIBDIR "-L${CMAKE_INSTALL_FULL_LIBDIR}") |
| |
| set(CPACK_COMPONENT_DEVELOPMENT_DEPENDS runtime) |
| set(CPACK_COMPONENT_PROGRAMS_DEPENDS runtime) |
| set(CPACK_DEB_COMPONENT_INSTALL ON) |
| set(CPACK_DEBIAN_DEVELOPMENT_PACKAGE_DEPENDS "${PACKAGE_TARNAME}") |
| set(CPACK_DEBIAN_DEVELOPMENT_PACKAGE_NAME "${PACKAGE_TARNAME}-dev") |
| set(CPACK_DEBIAN_DEVELOPMENT_PACKAGE_SECTION "libdevel") |
| set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${PACKAGE_URL}) |
| set(CPACK_DEBIAN_PACKAGE_NAME ${PACKAGE_TARNAME}) |
| set(CPACK_DEBIAN_PACKAGE_SECTION "devel") |
| set(CPACK_DEBIAN_PROGRAMS_PACKAGE_DEPENDS "${PACKAGE_TARNAME}") |
| set(CPACK_DEBIAN_PROGRAMS_PACKAGE_NAME "${PACKAGE_TARNAME}-utils") |
| set(CPACK_DEBIAN_PROGRAMS_PACKAGE_SECTION "utils") |
| set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME ${PACKAGE_TARNAME}) |
| set(CPACK_DEBIAN_RUNTIME_PACKAGE_RECOMMENDS "${PACKAGE_TARNAME}-utils") |
| set(CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION "libs") |
| set(CPACK_NSIS_PACKAGE_NAME ${PACKAGE_STRING}) |
| set(CPACK_NSIS_URL_INFO_ABOUT ${PACKAGE_URL}) |
| set(CPACK_PACKAGE_DISPLAY_NAME ${PACKAGE_STRING}) |
| set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PACKAGE_TARNAME}-${PACKAGE_VERSION}") |
| set(CPACK_PACKAGE_NAME ${PACKAGE_TARNAME}) |
| set(CPACK_PACKAGE_VERSION ${PACKAGE_VERSION}) |
| set(CPACK_PACKAGE_VERSION_MAJOR ${LIBXML_MAJOR_VERSION}) |
| set(CPACK_PACKAGE_VERSION_MINOR ${LIBXML_MINOR_VERSION}) |
| set(CPACK_PACKAGE_VERSION_PATCH ${LIBXML_MICRO_VERSION}) |
| set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/Copyright) |
| set(CPACK_RPM_COMPONENT_INSTALL ON) |
| set(CPACK_RPM_development_PACKAGE_NAME "${PACKAGE_NAME}-devel") |
| set(CPACK_RPM_development_PACKAGE_REQUIRES "${PACKAGE_NAME}") |
| set(CPACK_RPM_PACKAGE_GROUP "Development/Libraries") |
| set(CPACK_RPM_PACKAGE_NAME ${PACKAGE_TARNAME}) |
| set(CPACK_RPM_PACKAGE_URL ${PACKAGE_URL}) |
| set(CPACK_RPM_programs_PACKAGE_NAME "${PACKAGE_NAME}-utils") |
| set(CPACK_RPM_programs_PACKAGE_REQUIRES "${PACKAGE_NAME}") |
| set(CPACK_RPM_runtime_PACKAGE_NAME "${PACKAGE_NAME}") |
| set(CPACK_RPM_runtime_PACKAGE_SUGGESTS "${PACKAGE_NAME}-utils") |
| |
| include(CPack) |