rpm/neon/macros/neon-xml-parser.m4

149 lines
4.8 KiB
Plaintext

# Copyright (C) 1998-2004 Joe Orton <joe@manyfish.co.uk> -*- autoconf -*-
#
# This file is free software; you may copy and/or distribute it with
# or without modifications, as long as this notice is preserved.
# This software is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even
# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE.
# The above license applies to THIS FILE ONLY, the neon library code
# itself may be copied and distributed under the terms of the GNU
# LGPL, see COPYING.LIB for more details
# This file is part of the neon HTTP/WebDAV client library.
# See http://www.webdav.org/neon/ for the latest version.
# Please send any feedback to <neon@webdav.org>
# Check for XML parser, supporting libxml 2.x and expat 1.95.x,
# or a bundled copy of expat.
# * Bundled expat if a directory name argument is passed
# -> expat dir must contain minimal expat sources, i.e.
# xmltok, xmlparse sub-directories. See sitecopy/cadaver for
# examples of how to do this.
#
# Usage:
# NEON_XML_PARSER()
# or
# NEON_XML_PARSER(expat-dir)
dnl Find expat: run $1 if found, else $2
AC_DEFUN([NE_XML_EXPAT], [
AC_CHECK_HEADER(expat.h,
[AC_CHECK_LIB(expat, XML_SetXmlDeclHandler, [
AC_DEFINE(HAVE_EXPAT, 1, [Define if you have expat])
neon_xml_parser_message="expat"
NEON_LIBS="$NEON_LIBS -lexpat"
neon_xml_parser=expat
], [$1])], [$1])
])
dnl Find libxml2: run $1 if found, else $2
AC_DEFUN([NE_XML_LIBXML2], [
AC_CHECK_PROG(XML2_CONFIG, xml2-config, xml2-config)
if test -n "$XML2_CONFIG"; then
neon_xml_parser_message="libxml `$XML2_CONFIG --version`"
AC_DEFINE(HAVE_LIBXML, 1, [Define if you have libxml])
# xml2-config in some versions erroneously includes -I/include
# in the --cflags output.
CPPFLAGS="$CPPFLAGS `$XML2_CONFIG --cflags | sed 's| -I/include||g'`"
NEON_LIBS="$NEON_LIBS `$XML2_CONFIG --libs | sed 's|-L/usr/lib ||g'`"
AC_CHECK_HEADERS(libxml/xmlversion.h libxml/parser.h,,[
AC_MSG_ERROR([could not find parser.h, libxml installation problem?])])
neon_xml_parser=libxml2
else
$1
fi
])
dnl Configure for a bundled expat build.
AC_DEFUN([NE_XML_BUNDLED_EXPAT], [
AC_REQUIRE([AC_C_BIGENDIAN])
# Define XML_BYTE_ORDER for expat sources.
if test $ac_cv_c_bigendian = "yes"; then
ne_xml_border=21
else
ne_xml_border=12
fi
# mini-expat doesn't pick up config.h
CPPFLAGS="$CPPFLAGS -DXML_BYTE_ORDER=$ne_xml_border -DXML_DTD -I$1/xmlparse -I$1/xmltok"
# Use the bundled expat sources
AC_LIBOBJ($1/xmltok/xmltok)
AC_LIBOBJ($1/xmltok/xmlrole)
AC_LIBOBJ($1/xmlparse/xmlparse)
AC_LIBOBJ($1/xmlparse/hashtable)
AC_DEFINE(HAVE_EXPAT)
AC_DEFINE(HAVE_XMLPARSE_H, 1, [Define if using expat which includes xmlparse.h])
])
AC_DEFUN([NEON_XML_PARSER], [
dnl Switches to force choice of library
AC_ARG_WITH([libxml2],
AS_HELP_STRING([--with-libxml2], [force use of libxml 2.x]))
AC_ARG_WITH([expat],
AS_HELP_STRING([--with-expat], [force use of expat]))
dnl Flag to force choice of included expat, if available.
ifelse($#, 1, [
AC_ARG_WITH([included-expat],
AS_HELP_STRING([--with-included-expat], [use bundled expat sources]),,
with_included_expat=no)],
with_included_expat=no)
if test "$NEON_NEED_XML_PARSER" = "yes"; then
# Find an XML parser
neon_xml_parser=none
# Forced choice of expat:
case $with_expat in
yes) NE_XML_EXPAT([AC_MSG_ERROR([expat library not found, cannot proceed])]) ;;
no) ;;
*/libexpat.la)
# Special case for Subversion
ne_expdir=`echo $with_expat | sed 's:/libexpat.la$::'`
AC_DEFINE(HAVE_EXPAT)
CPPFLAGS="$CPPFLAGS -I$ne_expdir"
if test "x${NEON_TARGET}" = "xlibneon.la"; then
NEON_LTLIBS=$with_expat
else
# no dependency on libexpat => crippled libneon, so do partial install
ALLOW_INSTALL=lib
fi
neon_xml_parser=expat
neon_xml_parser_message="expat in $ne_expdir"
;;
/*) AC_MSG_ERROR([--with-expat does not take a directory argument]) ;;
esac
# If expat wasn't specifically enabled and libxml was:
if test "${neon_xml_parser}-${with_libxml}-${with_included_expat}" = "none-yes-no"; then
NE_XML_LIBXML2(
[AC_MSG_ERROR([libxml2.x library not found, cannot proceed])])
fi
# Otherwise, by default search for libxml2 then expat:
if test "${neon_xml_parser}-${with_included_expat}" = "none-no"; then
NE_XML_LIBXML2([NE_XML_EXPAT([:])])
fi
# If an XML parser still has not been found, fail or use the bundled expat
if test "$neon_xml_parser" = "none"; then
m4_if($1, [],
[AC_MSG_ERROR([no XML parser was found: expat or libxml 2.x required])],
[# Configure the bundled copy of expat
NE_XML_BUNDLED_EXPAT($1)
neon_xml_parser_message="bundled expat in $1"])
fi
AC_MSG_NOTICE([XML parser used: $neon_xml_parser_message])
fi
])