diff --git a/.editorconfig b/.editorconfig index 273bb061..f752fe11 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,14 +2,10 @@ root = true -[Makefile*] -indent_style = tab - -[CMakeLists.txt] -indent_style = tab -indent_size = 4 - -[*.{c,h}] +[*] indent_style = space indent_size = 4 tab_width = 8 + +[Makefile*] +indent_style = tab diff --git a/CMakeLists.txt b/CMakeLists.txt index 2da8250c..c652a0aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,11 +2,11 @@ cmake_minimum_required(VERSION 3.18) file(STRINGS "configure.ac" CONFIGURE_AC_LINES) foreach(line ${CONFIGURE_AC_LINES}) - if(line MATCHES [[^m4_define\(\[(MAJOR_VERSION|MINOR_VERSION|MICRO_VERSION)\],[ \t]*([0-9]+)\)$]]) - set(LIBXML_${CMAKE_MATCH_1} ${CMAKE_MATCH_2}) - elseif(line MATCHES "^(LIBXML_MAJOR_VERSION|LIBXML_MINOR_VERSION|LIBXML_MICRO_VERSION)=([0-9]+)$") - set(${CMAKE_MATCH_1} ${CMAKE_MATCH_2}) - endif() + if(line MATCHES [[^m4_define\(\[(MAJOR_VERSION|MINOR_VERSION|MICRO_VERSION)\],[ \t]*([0-9]+)\)$]]) + set(LIBXML_${CMAKE_MATCH_1} ${CMAKE_MATCH_2}) + elseif(line MATCHES "^(LIBXML_MAJOR_VERSION|LIBXML_MINOR_VERSION|LIBXML_MICRO_VERSION)=([0-9]+)$") + set(${CMAKE_MATCH_1} ${CMAKE_MATCH_2}) + endif() endforeach() set(VERSION "${LIBXML_MAJOR_VERSION}.${LIBXML_MINOR_VERSION}.${LIBXML_MICRO_VERSION}") @@ -65,20 +65,20 @@ option(LIBXML2_WITH_ZLIB "Use libz" OFF) set(LIBXML2_XMLCONF_WORKING_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH "Working directory for XML Conformance Test Suite") if(LIBXML2_WITH_PYTHON) - check_include_files(unistd.h HAVE_UNISTD_H) - check_symbol_exists(F_GETFL fcntl.h HAVE_F_GETFL) - 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") + check_include_files(unistd.h HAVE_UNISTD_H) + check_symbol_exists(F_GETFL fcntl.h HAVE_F_GETFL) + 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_FTP WITH_HTML WITH_HTTP WITH_ICONV WITH_ICU WITH_ISO8859X WITH_LEGACY WITH_LZMA WITH_MEM_DEBUG WITH_MODULES WITH_OUTPUT WITH_PATTERN WITH_PUSH WITH_READER WITH_REGEXPS WITH_SAX1 WITH_SCHEMAS WITH_SCHEMATRON WITH_THREADS WITH_THREAD_ALLOC WITH_TREE WITH_UNICODE WITH_VALID WITH_WRITER WITH_XINCLUDE WITH_XPATH WITH_XPTR WITH_XPTR_LOCS WITH_ZLIB) - if(LIBXML2_${VARIABLE}) - set(${VARIABLE} 1) - else() - set(${VARIABLE} 0) - endif() + if(LIBXML2_${VARIABLE}) + set(${VARIABLE} 1) + else() + set(${VARIABLE} 0) + endif() endforeach() set(LIBXML_VERSION ${VERSION}) @@ -99,225 +99,225 @@ set(PACKAGE_URL "https://gitlab.gnome.org/GNOME/libxml2") set(PACKAGE_VERSION ${VERSION}) if(LIBXML2_WITH_ICONV) - find_package(Iconv REQUIRED) + find_package(Iconv REQUIRED) endif() if(LIBXML2_WITH_ICU) - find_package(ICU REQUIRED COMPONENTS data i18n uc) + find_package(ICU REQUIRED COMPONENTS data i18n uc) endif() if(LIBXML2_WITH_LZMA) - find_package(LibLZMA REQUIRED) + 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) + 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) + find_package(ZLIB REQUIRED) endif() if (NOT MSVC) - check_c_source_compiles(" - void __attribute__((destructor)) - f(void) {} - int main(void) { return 0; } - " HAVE_ATTRIBUTE_DESTRUCTOR) - if(HAVE_ATTRIBUTE_DESTRUCTOR) - set(ATTRIBUTE_DESTRUCTOR "__attribute__((destructor))") - endif() - check_include_files(arpa/inet.h HAVE_ARPA_INET_H) - check_function_exists(class HAVE_CLASS) - check_include_files(dlfcn.h HAVE_DLFCN_H) - check_library_exists(dl dlopen "" HAVE_DLOPEN) - check_include_files(dl.h HAVE_DL_H) - check_include_files(fcntl.h HAVE_FCNTL_H) - check_function_exists(fpclass HAVE_FPCLASS) - check_function_exists(ftime HAVE_FTIME) - check_function_exists(getentropy HAVE_GETENTROPY) - check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) - check_include_files(inttypes.h HAVE_INTTYPES_H) - check_function_exists(isascii HAVE_ISASCII) - check_library_exists(history append_history "" HAVE_LIBHISTORY) - check_library_exists(readline readline "" HAVE_LIBREADLINE) - check_function_exists(mmap HAVE_MMAP) - check_function_exists(munmap HAVE_MUNMAP) - check_include_files(netdb.h HAVE_NETDB_H) - check_include_files(netinet/in.h HAVE_NETINET_IN_H) - check_include_files(poll.h HAVE_POLL_H) - check_library_exists(dld shl_load "" HAVE_SHLLOAD) - check_function_exists(stat HAVE_STAT) - check_include_files(stdint.h HAVE_STDINT_H) - check_include_files(sys/mman.h HAVE_SYS_MMAN_H) - check_include_files(sys/random.h HAVE_SYS_RANDOM_H) - check_include_files(sys/select.h HAVE_SYS_SELECT_H) - check_include_files(sys/socket.h HAVE_SYS_SOCKET_H) - check_include_files(sys/stat.h HAVE_SYS_STAT_H) - check_include_files(sys/timeb.h HAVE_SYS_TIMEB_H) - check_include_files(sys/time.h HAVE_SYS_TIME_H) - check_include_files(unistd.h HAVE_UNISTD_H) - check_c_source_compiles(" - #include - #include - int main() { (void) getsockopt(1, 1, 1, NULL, (socklen_t*) NULL); return 0; } - " XML_SOCKLEN_T_SOCKLEN_T) - if(XML_SOCKLEN_T_SOCKLEN_T) - set(XML_SOCKLEN_T socklen_t) - else() - check_c_source_compiles(" - #include - #include - int main() { (void) getsockopt(1, 1, 1, NULL, (size_t*) NULL); return 0; } - " XML_SOCKLEN_T_SIZE_T) - if(XML_SOCKLEN_T_SIZE_T) - set(XML_SOCKLEN_T size_t) - else() - check_c_source_compiles(" - #include - #include - int main() { (void) getsockopt (1, 1, 1, NULL, (int*) NULL); return 0; } - " XML_SOCKLEN_T_INT) - set(XML_SOCKLEN_T int) - endif() - endif() + check_c_source_compiles(" + void __attribute__((destructor)) + f(void) {} + int main(void) { return 0; } + " HAVE_ATTRIBUTE_DESTRUCTOR) + if(HAVE_ATTRIBUTE_DESTRUCTOR) + set(ATTRIBUTE_DESTRUCTOR "__attribute__((destructor))") + endif() + check_include_files(arpa/inet.h HAVE_ARPA_INET_H) + check_function_exists(class HAVE_CLASS) + check_include_files(dlfcn.h HAVE_DLFCN_H) + check_library_exists(dl dlopen "" HAVE_DLOPEN) + check_include_files(dl.h HAVE_DL_H) + check_include_files(fcntl.h HAVE_FCNTL_H) + check_function_exists(fpclass HAVE_FPCLASS) + check_function_exists(ftime HAVE_FTIME) + check_function_exists(getentropy HAVE_GETENTROPY) + check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) + check_include_files(inttypes.h HAVE_INTTYPES_H) + check_function_exists(isascii HAVE_ISASCII) + check_library_exists(history append_history "" HAVE_LIBHISTORY) + check_library_exists(readline readline "" HAVE_LIBREADLINE) + check_function_exists(mmap HAVE_MMAP) + check_function_exists(munmap HAVE_MUNMAP) + check_include_files(netdb.h HAVE_NETDB_H) + check_include_files(netinet/in.h HAVE_NETINET_IN_H) + check_include_files(poll.h HAVE_POLL_H) + check_library_exists(dld shl_load "" HAVE_SHLLOAD) + check_function_exists(stat HAVE_STAT) + check_include_files(stdint.h HAVE_STDINT_H) + check_include_files(sys/mman.h HAVE_SYS_MMAN_H) + check_include_files(sys/random.h HAVE_SYS_RANDOM_H) + check_include_files(sys/select.h HAVE_SYS_SELECT_H) + check_include_files(sys/socket.h HAVE_SYS_SOCKET_H) + check_include_files(sys/stat.h HAVE_SYS_STAT_H) + check_include_files(sys/timeb.h HAVE_SYS_TIMEB_H) + check_include_files(sys/time.h HAVE_SYS_TIME_H) + check_include_files(unistd.h HAVE_UNISTD_H) + check_c_source_compiles(" + #include + #include + int main() { (void) getsockopt(1, 1, 1, NULL, (socklen_t*) NULL); return 0; } + " XML_SOCKLEN_T_SOCKLEN_T) + if(XML_SOCKLEN_T_SOCKLEN_T) + set(XML_SOCKLEN_T socklen_t) + else() + check_c_source_compiles(" + #include + #include + int main() { (void) getsockopt(1, 1, 1, NULL, (size_t*) NULL); return 0; } + " XML_SOCKLEN_T_SIZE_T) + if(XML_SOCKLEN_T_SIZE_T) + set(XML_SOCKLEN_T size_t) + else() + check_c_source_compiles(" + #include + #include + int main() { (void) getsockopt (1, 1, 1, NULL, (int*) NULL); return 0; } + " XML_SOCKLEN_T_INT) + set(XML_SOCKLEN_T int) + endif() + endif() 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() + 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 + 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 - nanoftp.c - nanohttp.c - parser.c - parserInternals.c - pattern.c - relaxng.c - SAX.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 + 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 + nanoftp.c + nanohttp.c + parser.c + parserInternals.c + pattern.c + relaxng.c + SAX.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" - ) + 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}) @@ -326,323 +326,323 @@ add_library(LibXml2::LibXml2 ALIAS LibXml2) target_compile_definitions(LibXml2 PRIVATE SYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}") if(LIBXML2_WITH_THREADS) - target_compile_definitions(LibXml2 PRIVATE _REENTRANT) - if(NOT WIN32) - check_include_files(pthread.h HAVE_PTHREAD_H) - endif() + target_compile_definitions(LibXml2 PRIVATE _REENTRANT) + if(NOT WIN32) + check_include_files(pthread.h HAVE_PTHREAD_H) + endif() endif() target_include_directories( - LibXml2 - PUBLIC - $ - $ - $/${CMAKE_INSTALL_INCLUDEDIR}/libxml2> + LibXml2 + PUBLIC + $ + $ + $/${CMAKE_INSTALL_INCLUDEDIR}/libxml2> ) if(LIBXML2_WITH_MODULES) - if(HAVE_DLOPEN) - target_link_libraries(LibXml2 PRIVATE dl) - set(MODULE_PLATFORM_LIBS "-ldl") - endif() + if(HAVE_DLOPEN) + target_link_libraries(LibXml2 PRIVATE dl) + set(MODULE_PLATFORM_LIBS "-ldl") + endif() - if(HAVE_SHLLOAD) - target_link_libraries(LibXml2 PRIVATE dld) - set(MODULE_PLATFORM_LIBS "-ldld") - endif() + if(HAVE_SHLLOAD) + target_link_libraries(LibXml2 PRIVATE dld) + set(MODULE_PLATFORM_LIBS "-ldld") + endif() endif() if(UNIX) - target_link_libraries(LibXml2 PRIVATE m) - set(LIBM "-lm") + 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") + 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() + 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() + 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() + 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) + 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() + 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 \ + # 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") - if(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() + if(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_target_properties( - LibXml2 - PROPERTIES - IMPORT_PREFIX lib - OUTPUT_NAME xml2 - POSITION_INDEPENDENT_CODE ON - PREFIX lib - VERSION ${PROJECT_VERSION} - SOVERSION ${LIBXML_MAJOR_VERSION} + LibXml2 + PROPERTIES + IMPORT_PREFIX lib + OUTPUT_NAME xml2 + POSITION_INDEPENDENT_CODE ON + PREFIX lib + VERSION ${PROJECT_VERSION} + SOVERSION ${LIBXML_MAJOR_VERSION} ) 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() + 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 + 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 $ DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS Debug RelWithDebInfo COMPONENT debug) + install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS Debug RelWithDebInfo COMPONENT debug) endif() if(LIBXML2_WITH_PROGRAMS) - set( - PROGRAMS - xmlcatalog - xmllint - ) - foreach(PROGRAM ${PROGRAMS}) - add_executable(${PROGRAM} ${PROGRAM}.c) - 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() + set( + PROGRAMS + xmlcatalog + xmllint + ) + foreach(PROGRAM ${PROGRAMS}) + add_executable(${PROGRAM} ${PROGRAM}.c) + 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 - testThreads - ) - 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 testThreads) - 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) - add_test(NAME testrecurse COMMAND testrecurse WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) - add_test(NAME testThreads COMMAND testThreads WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + enable_testing() + set( + TESTS + runtest + runxmlconf + runsuite + testapi + testchar + testdict + testModule + testlimits + testparser + testrecurse + testThreads + ) + 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 testThreads) + 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) + add_test(NAME testrecurse COMMAND testrecurse WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + add_test(NAME testThreads COMMAND testThreads 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 - $ - ) - 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 $ 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) + 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 + $ + ) + 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 $ 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) install(FILES doc/xmlcatalog.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT documentation) install(FILES doc/xmllint.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT documentation) install(DIRECTORY doc/ DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT documentation - PATTERN "Makefile.*" EXCLUDE - PATTERN "*.1" EXCLUDE - PATTERN "*.py" EXCLUDE - PATTERN "*.res" EXCLUDE - PATTERN "*.xml" EXCLUDE - PATTERN "*.xsl" EXCLUDE) + PATTERN "Makefile.*" 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} + 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 + 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 + ${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 + 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 + EXPORT LibXml2 + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libxml2-${PROJECT_VERSION} + NAMESPACE LibXml2:: + FILE libxml2-export.cmake + COMPONENT development ) if(MSVC) - configure_file(include/win32config.h config.h COPYONLY) + configure_file(include/win32config.h config.h COPYONLY) else() - configure_file(config.h.cmake.in config.h) + configure_file(config.h.cmake.in config.h) endif() 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) + 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}") @@ -660,22 +660,22 @@ set(XML_LIBDIR "-L\${libdir}") set(XML_LIBS "-lxml2") if(BUILD_SHARED_LIBS) - set(XML_PC_PRIVATE ".private") - set(XML_PC_LIBS_PRIVATE " + set(XML_PC_PRIVATE ".private") + set(XML_PC_LIBS_PRIVATE " Libs.private:") else() - target_compile_definitions(LibXml2 PUBLIC LIBXML_STATIC) - set(XML_CFLAGS "-DLIBXML_STATIC") - set(XML_PRIVATE_LIBS_NO_SHARED "${XML_PRIVATE_LIBS}") + target_compile_definitions(LibXml2 PUBLIC LIBXML_STATIC) + set(XML_CFLAGS "-DLIBXML_STATIC") + set(XML_PRIVATE_LIBS_NO_SHARED "${XML_PRIVATE_LIBS}") 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}") + set(prefix "\${pcfiledir}/${PACKAGE_RELATIVE_PATH}") else() - set(prefix "${CMAKE_INSTALL_PREFIX}") + set(prefix "${CMAKE_INSTALL_PREFIX}") endif() set(exec_prefix "\${prefix}") set(libdir "\${prefix}/${CMAKE_INSTALL_LIBDIR}") @@ -684,13 +684,13 @@ 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)/..") + 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) if(UNIX) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/libxml.m4 DESTINATION ${CMAKE_INSTALL_DATADIR}/aclocal) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/libxml.m4 DESTINATION ${CMAKE_INSTALL_DATADIR}/aclocal) endif() set(XML_INCLUDEDIR "-I${CMAKE_INSTALL_FULL_INCLUDEDIR}/libxml2")