dnl @synopsis XERCES_NETACCESSOR_SELECTION dnl dnl Determines the which netaccessor to use dnl dnl @category C dnl @author James Berry dnl @version 2005-05-23 dnl @license AllPermissive dnl dnl $Id$ AC_DEFUN([XERCES_NETACCESSOR_SELECTION], [ network=yes AC_ARG_ENABLE( [network], AS_HELP_STRING([--disable-network], [Disable network support (enabled by default)]), [AS_IF([test x"$enableval" = xno], [network=no])]) # If network is disabled we don't need to check any of the # netaccessors. # na_list= if test x"$network" = xyes; then # Checks for libraries. AC_CHECK_LIB([socket], [socket]) AC_CHECK_LIB([nsl], [gethostbyname]) ###################################################### # Test for availability of each netaccessor on this host. # For each netaccessor that's available, and hasn't been disabled, add it to our list. # If the netaccessor has been explicitly "enable"d, then vote for it strongly, # in upper case. ###################################################### AC_REQUIRE([XERCES_CURL_PREFIX]) AC_MSG_CHECKING([whether we can support the libcurl-based NetAccessor]) list_add= AS_IF([test x"$xerces_cv_curl_present" != x"no"], [ AC_ARG_ENABLE([netaccessor-curl], AS_HELP_STRING([--enable-netaccessor-curl], [Enable libcurl-based NetAccessor support]), [AS_IF([test x"$enableval" = xyes], [list_add=CURL])], [list_add=curl]) ]) AS_IF([test x"$list_add" != x], [na_list="$na_list -$list_add-"; AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)] ) AC_MSG_CHECKING([whether we can support the sockets-based NetAccessor]) list_add= AS_IF([test x"$ac_cv_header_sys_socket_h" = xyes], [AC_ARG_ENABLE([netaccessor-socket], AS_HELP_STRING([--enable-netaccessor-socket], [Enable sockets-based NetAccessor support]), [AS_IF([test x"$enableval" = xyes], [list_add=SOCKET])], [list_add=socket]) ]) AS_IF([test x"$list_add" != x], [na_list="$na_list -$list_add-"; AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)] ) # Check for OS-specific netaccessors case $host_os in darwin*) list_add= AC_MSG_CHECKING([whether we can support the CFURL NetAccessor (Mac OS X)]) AS_IF([test x"$ac_cv_header_CoreServices_CoreServices_h" = xyes], [ AC_ARG_ENABLE([netaccessor-cfurl], AS_HELP_STRING([--enable-netaccessor-cfurl], [Enable cfurl-based NetAccessor support]), [AS_IF([test x"$enableval" = xyes], [list_add=CFURL])], [list_add=cfurl]) ] ) AS_IF([test x"$list_add" != x], [na_list="$na_list -$list_add-"; AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)] ) ;; windows* | mingw*) list_add= no_winsock=false AC_CHECK_HEADERS([winsock2.h], [], [no_winsock=true]) AC_MSG_CHECKING([whether we can support the WinSock NetAccessor (Windows)]) AS_IF([! $no_winsock], [ AC_ARG_ENABLE([netaccessor-winsock], AS_HELP_STRING([--enable-netaccessor-winsock], [Enable winsock-based NetAccessor support]), [AS_IF([test x"$enableval" = xyes], [list_add=WINSOCK])], [list_add=winsock]) ]) AS_IF([test x"$list_add" != x], [na_list="$na_list -$list_add-"; AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)] ) ;; cygwin*) # Only add it to the list if the user explicitly asked # for it. # list_add= no_winsock=false AC_CHECK_HEADERS([winsock2.h], [], [no_winsock=true]) AC_MSG_CHECKING([whether to use the WinSock NetAccessor (Windows)]) AS_IF([! $no_winsock], [ AC_ARG_ENABLE([netaccessor-winsock], AS_HELP_STRING([--enable-netaccessor-winsock], [Enable winsock-based NetAccessor support]), [AS_IF([test x"$enableval" = xyes], [list_add=WINSOCK])]) ]) AS_IF([test x"$list_add" != x], [na_list="$na_list -$list_add-"; AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)] ) ;; esac ###################################################### # Determine which netaccessor to use. # # We do this in two passes. Accessors that have been enabled with "yes", # and which start out in upper case, get the top priority on the first pass. # On the second pass, we consider those which are simply available, but # which were not "disable"d (these won't even be in our list). ###################################################### netaccessor= az_lower=abcdefghijklmnopqrstuvwxyz az_upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ AC_MSG_CHECKING([for which NetAccessor to use (choices:$na_list)]) for i in 1 2; do # Swap upper/lower case in the na_list. Cannot use tr ranges # because of the portability issues. # na_list=`echo $na_list | tr "$az_lower$az_upper" "$az_upper$az_lower"` # Check for each netaccessor, in implicit rank order case $na_list in *-curl-*) netaccessor=curl AC_DEFINE([XERCES_USE_NETACCESSOR_CURL], 1, [Define to use the CURL NetAccessor]) LIBS="${LIBS} ${xerces_cv_curl_libs}" break ;; *-winsock-*) netaccessor=winsock AC_DEFINE([XERCES_USE_NETACCESSOR_WINSOCK], 1, [Define to use the WinSock NetAccessor]) break ;; *-socket-*) netaccessor=socket AC_DEFINE([XERCES_USE_NETACCESSOR_SOCKET], 1, [Define to use the Sockets-based NetAccessor]) break ;; *-cfurl-*) netaccessor=cfurl AC_DEFINE([XERCES_USE_NETACCESSOR_CFURL], 1, [Define to use the Mac OS X CFURL NetAccessor]) XERCES_LINK_DARWIN_FRAMEWORK([CoreServices]) break ;; *) AS_IF([test $i -eq 2], [ AC_MSG_RESULT([none available; there will be no network access!!!]) ] ) ;; esac done if test x"$netaccessor" != x; then AC_MSG_RESULT($netaccessor) fi else # network netaccessor=disabled # for the report fi # Define the auto-make conditionals which determine what actually gets compiled # Note that these macros can't be executed conditionally, which is why they're here, not above. AM_CONDITIONAL([XERCES_USE_NETACCESSOR_CURL], [test x"$netaccessor" = xcurl]) AM_CONDITIONAL([XERCES_USE_NETACCESSOR_CFURL], [test x"$netaccessor" = xcfurl]) AM_CONDITIONAL([XERCES_USE_NETACCESSOR_WINSOCK], [test x"$netaccessor" = xwinsock]) AM_CONDITIONAL([XERCES_USE_NETACCESSOR_SOCKET], [test x"$netaccessor" = xsocket]) ] )