@@ -8,5 +8,69 @@ dnl LIBXML2_DISPLAY
88dnl LIBXML2_FOUND
99
1010AC_DEFUN ( [ CHECK_LIBXML2] , [
11- MSC_CHECK_LIB([ LIBXML2] , [ libxml-2.0] , [ libxml/parser.h] , [ xml2] , [ -DWITH_LIBXML2] , [ 2.6.29] , [ libxml] )
11+ AC_ARG_WITH ( [ libxml2-source] ,
12+ [ AS_HELP_STRING ( [ --with-libxml2-source=SOURCE] ,
13+ [ Select libxml2 source: vendor (others/libxml2) or system [ default=vendor] ] ) ] ,
14+ [ msc_libxml2_source="$withval"] ,
15+ [ msc_libxml2_source="vendor"] )
16+
17+ AS_CASE ( [ $msc_libxml2_source] ,
18+ [ vendor|system] , [ ] ,
19+ [ AC_MSG_ERROR ( [ Unsupported --with-libxml2-source value '$msc_libxml2_source'. Use vendor or system.] ) ] )
20+
21+ if test "x$with_libxml" = "xno"; then
22+ AC_MSG_NOTICE ( [ LIBXML2 support disabled via --without-libxml] )
23+ LIBXML2_FOUND=2
24+ LIBXML2_CFLAGS=""
25+ LIBXML2_LDADD=""
26+ LIBXML2_LDFLAGS=""
27+ LIBXML2_VERSION=""
28+ LIBXML2_DISPLAY=""
29+ elif test "x$msc_libxml2_source" = "xvendor"; then
30+ LIBXML2_VENDOR_DIR="${PWD}/others/libxml2"
31+ LIBXML2_VENDOR_BUILD_DIR="${PWD}/others/libxml2-vendor-build"
32+
33+ if ! test -f "${LIBXML2_VENDOR_DIR}/CMakeLists.txt"; then
34+ AC_MSG_ERROR ( [ \
35+
36+
37+ Vendored libxml2 was not found at ${LIBXML2_VENDOR_DIR}.
38+ Initialize submodules first:
39+
40+ $ git submodule update --init --recursive
41+
42+ ] )
43+ fi
44+
45+ AC_MSG_NOTICE ( [ Configuring vendored libxml2 from ${LIBXML2_VENDOR_DIR}] )
46+ AS_MKDIR_P ( [ "${LIBXML2_VENDOR_BUILD_DIR}"] )
47+
48+ LIBXML2_VENDOR_CONFIGURE_CMD="cmake -S \"${LIBXML2_VENDOR_DIR}\" -B \"${LIBXML2_VENDOR_BUILD_DIR}\" -DBUILD_SHARED_LIBS=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_PROGRAMS=OFF -DLIBXML2_WITH_TESTS=OFF -DLIBXML2_WITH_ZLIB=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_ICU=OFF"
49+ AC_MSG_NOTICE ( [ ${LIBXML2_VENDOR_CONFIGURE_CMD}] )
50+ if ! eval "${LIBXML2_VENDOR_CONFIGURE_CMD}"; then
51+ AC_MSG_ERROR ( [ Failed to configure vendored libxml2 with CMake.] )
52+ fi
53+
54+ LIBXML2_VENDOR_BUILD_CMD="cmake --build \"${LIBXML2_VENDOR_BUILD_DIR}\" --target LibXml2"
55+ AC_MSG_NOTICE ( [ ${LIBXML2_VENDOR_BUILD_CMD}] )
56+ if ! eval "${LIBXML2_VENDOR_BUILD_CMD}"; then
57+ AC_MSG_ERROR ( [ Failed to build vendored libxml2.] )
58+ fi
59+
60+ LIBXML2_CFLAGS="-DWITH_LIBXML2 -I${LIBXML2_VENDOR_DIR}/include -I${LIBXML2_VENDOR_BUILD_DIR} -I${LIBXML2_VENDOR_BUILD_DIR}/libxml"
61+ LIBXML2_LDADD="-lxml2"
62+ LIBXML2_LDFLAGS="-L${LIBXML2_VENDOR_BUILD_DIR} -Wl,-rpath,${LIBXML2_VENDOR_BUILD_DIR}"
63+ LIBXML2_VERSION=`cd "${LIBXML2_VENDOR_DIR}" && git describe --tags --always 2>/dev/null || echo unknown`
64+ LIBXML2_DISPLAY="vendored source: ${LIBXML2_VENDOR_DIR}, build: ${LIBXML2_VENDOR_BUILD_DIR}"
65+ LIBXML2_FOUND=1
66+ else
67+ MSC_CHECK_LIB([ LIBXML2] , [ libxml-2.0] , [ libxml/parser.h] , [ xml2] , [ -DWITH_LIBXML2] , [ 2.6.29] , [ libxml] )
68+ fi
69+
70+ AC_SUBST ( [ LIBXML2_CFLAGS] )
71+ AC_SUBST ( [ LIBXML2_LDADD] )
72+ AC_SUBST ( [ LIBXML2_LDFLAGS] )
73+ AC_SUBST ( [ LIBXML2_VERSION] )
74+ AC_SUBST ( [ LIBXML2_DISPLAY] )
75+ AC_SUBST ( [ LIBXML2_FOUND] )
1276] ) # AC_DEFUN [CHECK_LIBXML2]
0 commit comments