| # =========================================================================== |
| # http://www.gnu.org/software/autoconf-archive/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 |
| # |
| # LICENSE |
| # |
| # 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. This file is offered as-is, without any |
| # warranty. |
| |
| #serial 10 |
| |
| AC_DEFUN([AX_LIB_XERCES], |
| [ |
| # AC_REQUIRE([AX_PTHREAD]) |
| |
| AC_ARG_WITH([xerces], |
| AS_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" |
| xerces_install="$withval" |
| AC_SUBST(xerces_install) |
| 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], |
| AS_HELP_STRING([--with-xerces-inc=@<:@DIR@:>@], |
| [path to Xerces C++ Parser headers] |
| ), |
| [xerces_include_dir="$withval"], |
| [xerces_include_dir=""] |
| ) |
| AC_ARG_WITH([xerces-lib], |
| AS_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 |
| HAVE_XERCES="no" |
| AC_MSG_RESULT([no]) |
| AC_MSG_ERROR([Found Xerces C++ Parser $XERCES_VERSION, which is older than required. Possible compilation failure.]) |
| fi |
| else |
| HAVE_XERCES="no" |
| AC_MSG_RESULT([no]) |
| AC_MSG_ERROR([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_ERROR([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 |
| ]) |