diff options
| -rw-r--r-- | m4/ax_lib_xerces.m4 | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/m4/ax_lib_xerces.m4 b/m4/ax_lib_xerces.m4 new file mode 100644 index 0000000..960dbe6 --- /dev/null +++ b/m4/ax_lib_xerces.m4 @@ -0,0 +1,290 @@ +# =========================================================================== +# http://autoconf-archive.cryp.to/ax_lib_xerces.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_LIB_XERCES([MINIMUM-VERSION]) +# +# DESCRIPTION +# +# This macro provides tests of availability of Apache Xerces C++ Parser of +# particular version or newer. This macros checks for Apache Xerces C++ +# Parser headers and libraries and defines compilation flags +# +# Macro supports following options and their values: +# +# 1) Single-option usage: +# +# --with-xerces - yes, no or path to Xerces installation prefix +# +# 2) Three-options usage (all options are required): +# +# --with-xerces=yes +# --with-xerces-inc - path to base directory with Xerces headers +# --with-xerces-lib - linker flags for Xerces +# +# This macro calls: +# +# AC_SUBST(XERCES_CFLAGS) +# AC_SUBST(XERCES_LDFLAGS) +# AC_SUBST(XERCES_VERSION) - only if version requirement is used +# +# And sets: +# +# HAVE_XERCES +# +# LAST MODIFICATION +# +# 2008-04-12 +# +# COPYLEFT +# +# Copyright (c) 2008 Mateusz Loskot <mateusz@loskot.net> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_LIB_XERCES], +[ + AC_REQUIRE([ACX_PTHREAD]) + + AC_ARG_WITH([xerces], + AC_HELP_STRING([--with-xerces=@<:@ARG@:>@], + [use Xerces C++ Parser from given prefix (ARG=path); check standard prefixes (ARG=yes); disable (ARG=no)] + ), + [ + if test "$withval" = "yes"; then + if test -d /usr/local/include/xercesc ; then + xerces_prefix=/usr/local + elif test -d /usr/include/xercesc ; then + xerces_prefix=/usr + else + xerces_prefix="" + fi + xerces_requested="yes" + elif test -d "$withval"; then + xerces_prefix="$withval" + xerces_requested="yes" + else + xerces_prefix="" + xerces_requested="no" + fi + ], + [ + dnl Default behavior is implicit yes + if test -d /usr/local/include/xercesc ; then + xerces_prefix=/usr/local + elif test -d /usr/include/xercesc ; then + xerces_prefix=/usr + else + xerces_prefix="" + fi + ] + ) + + AC_ARG_WITH([xerces-inc], + AC_HELP_STRING([--with-xerces-inc=@<:@DIR@:>@], + [path to Xerces C++ Parser headers] + ), + [xerces_include_dir="$withval"], + [xerces_include_dir=""] + ) + AC_ARG_WITH([xerces-lib], + AC_HELP_STRING([--with-xerces-lib=@<:@ARG@:>@], + [link options for Xerces C++ Parser libraries] + ), + [xerces_ldflags="$withval"], + [xerces_ldflags=""] + ) + + XERCES_CPPFLAGS="" + XERCES_LDFLAGS="" + XERCES_VERSION="" + + dnl + dnl Collect include/lib paths and flags + dnl + run_xerces_test="no" + + if test -n "$xerces_prefix"; then + xerces_include_dir="$xerces_prefix/include" + xerces_include_dir2="$xerces_prefix/include/xercesc" + xerces_ldflags="-L$xerces_prefix/lib" + run_xerces_test="yes" + elif test "$xerces_requested" = "yes"; then + if test -n "$xerces_include_dir" -a -n "$xerces_lib_flags"; then + xerces_include_dir2="$xerces_include_dir/xercesc" + run_xerces_test="yes" + fi + else + run_xerces_test="no" + fi + + xerces_libs="-lxerces-c" + + dnl + dnl Check Xerces C++ Parser files + dnl + if test "$run_xerces_test" = "yes"; then + + saved_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -I$xerces_include_dir -I$xerces_include_dir2" + + saved_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $xerces_ldflags $PTHREAD_LDFLAGS" + + saved_LIBS="$LIBS" + LIBS="$xerces_libs $PTHREAD_LIBS $LIBS" + + dnl + dnl Check Xerces headers + dnl + AC_MSG_CHECKING([for Xerces C++ Parser headers in $xerces_include_dir and $xerces_include_dir2]) + + AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM( + [[ +@%:@include <xercesc/util/XercesDefs.hpp> +@%:@include <xercesc/util/PlatformUtils.hpp> + ]], + [[]] + )], + [ + XERCES_CPPFLAGS="-I$xerces_include_dir -I$xerces_include_dir2" + xerces_header_found="yes" + AC_MSG_RESULT([found]) + ], + [ + xerces_header_found="no" + AC_MSG_RESULT([not found]) + ] + ) + AC_LANG_POP([C++]) + + dnl + dnl Check Xerces libraries + dnl + if test "$xerces_header_found" = "yes"; then + + AC_MSG_CHECKING([for Xerces C++ Parser libraries]) + + AC_LANG_PUSH([C++]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM( + [[ +@%:@include <xercesc/util/XercesDefs.hpp> +@%:@include <xercesc/util/PlatformUtils.hpp> +#if (_XERCES_VERSION >= 20200) +XERCES_CPP_NAMESPACE_USE +#endif + ]], + [[ +XMLPlatformUtils::Initialize(); + ]] + )], + [ + XERCES_LDFLAGS="$xerces_ldflags $PTHREAD_LDFLAGS" + XERCES_LIBS="$xerces_libs $PTHREAD_LIBS" + xerces_lib_found="yes" + AC_MSG_RESULT([found]) + ], + [ + xerces_lib_found="no" + AC_MSG_RESULT([not found]) + ] + ) + AC_LANG_POP([C++]) + fi + + CPPFLAGS="$saved_CPPFLAGS" + LDFLAGS="$saved_LDFLAGS" + LIBS="$saved_LIBS" + fi + + AC_MSG_CHECKING([for Xerces C++ Parser]) + + if test "$run_xerces_test" = "yes"; then + if test "$xerces_header_found" = "yes" -a "$xerces_lib_found" = "yes"; then + + AC_SUBST([XERCES_CPPFLAGS]) + AC_SUBST([XERCES_LDFLAGS]) + AC_SUBST([XERCES_LIBS]) + + HAVE_XERCES="yes" + else + HAVE_XERCES="no" + fi + + AC_MSG_RESULT([$HAVE_XERCES]) + + dnl + dnl Check Xerces version + dnl + if test "$HAVE_XERCES" = "yes"; then + + xerces_version_req=ifelse([$1], [], [], [$1]) + + if test -n "$xerces_version_req"; then + + AC_MSG_CHECKING([if Xerces C++ Parser version is >= $xerces_version_req]) + + if test -f "$xerces_include_dir2/util/XercesVersion.hpp"; then + + xerces_major=`cat $xerces_include_dir2/util/XercesVersion.hpp | \ + grep '^#define.*XERCES_VERSION_MAJOR.*[0-9]$' | \ + sed -e 's/#define XERCES_VERSION_MAJOR.//'` + + xerces_minor=`cat $xerces_include_dir2/util/XercesVersion.hpp | \ + grep '^#define.*XERCES_VERSION_MINOR.*[0-9]$' | \ + sed -e 's/#define XERCES_VERSION_MINOR.//'` + + xerces_revision=`cat $xerces_include_dir2/util/XercesVersion.hpp | \ + grep '^#define.*XERCES_VERSION_REVISION.*[0-9]$' | \ + sed -e 's/#define XERCES_VERSION_REVISION.//'` + + XERCES_VERSION="$xerces_major.$xerces_minor.$xerces_revision" + AC_SUBST([XERCES_VERSION]) + + dnl Decompose required version string and calculate numerical representation + xerces_version_req_major=`expr $xerces_version_req : '\([[0-9]]*\)'` + xerces_version_req_minor=`expr $xerces_version_req : '[[0-9]]*\.\([[0-9]]*\)'` + xerces_version_req_revision=`expr $xerces_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + if test "x$xerces_version_req_revision" = "x"; then + xerces_version_req_revision="0" + fi + + xerces_version_req_number=`expr $xerces_version_req_major \* 10000 \ + \+ $xerces_version_req_minor \* 100 \ + \+ $xerces_version_req_revision` + + dnl Calculate numerical representation of detected version + xerces_version_number=`expr $xerces_major \* 10000 \ + \+ $xerces_minor \* 100 \ + \+ $xerces_revision` + + xerces_version_check=`expr $xerces_version_number \>\= $xerces_version_req_number` + if test "$xerces_version_check" = "1"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_WARN([Found Xerces C++ Parser $XERCES_VERSION, which is older than required. Possible compilation failure.]) + fi + else + AC_MSG_RESULT([no]) + AC_MSG_WARN([Missing header XercesVersion.hpp. Unable to determine Xerces version.]) + fi + fi + fi + + else + HAVE_XERCES="no" + AC_MSG_RESULT([$HAVE_XERCES]) + + if test "$xerces_requested" = "yes"; then + AC_MSG_WARN([Xerces C++ Parser support requested but headers or library not found. Specify valid prefix of Xerces C++ using --with-xerces=@<:@DIR@:>@ or provide include directory and linker flags using --with-xerces-inc and --with-xerces-lib]) + fi + fi +]) |
