| dnl @synopsis XERCES_MUTEXMGR_SELECTION |
| dnl |
| dnl Determines the which XMLMutexMgr to use |
| dnl |
| dnl @category C |
| dnl @author James Berry |
| dnl @version 2005-05-25 |
| dnl @license AllPermissive |
| dnl |
| dnl $Id$ |
| |
| AC_DEFUN([XERCES_MUTEXMGR_SELECTION], |
| [ |
| |
| ###################################################### |
| # Test for availability of each mutex manager on this host. |
| # For each mutex manager that's available, and hasn't been |
| # disabled, add it to our list. If the mutex manager has been |
| # explicitly "enable"d, then vote for it strongly, in upper |
| # case. |
| ###################################################### |
| |
| ml_list= |
| |
| AC_REQUIRE([XERCES_NO_THREADS]) |
| AC_REQUIRE([ACX_PTHREAD]) |
| AC_REQUIRE([AC_CXX_HAVE_STD_THREAD]) |
| |
| # Use Standard C++11 threads if available |
| list_add= |
| AC_MSG_CHECKING([whether we can support the Standard C++11 threads-based MutexMgr]) |
| AS_IF([test x$xerces_cv_no_threads = xno && test x$ac_cv_cxx_have_std_thread = xyes], [ |
| AC_ARG_ENABLE([mutexmgr-standard], |
| AS_HELP_STRING([--enable-mutexmgr-standard], |
| [Enable Standard C++11 threads mutex manager support]), |
| [AS_IF([test x"$enableval" = xyes], |
| [list_add=STANDARD])], |
| [list_add=standard]) |
| ]) |
| AS_IF([test x"$list_add" != x], |
| [mm_list="$mm_list -$list_add-"; AC_MSG_RESULT(yes)], |
| [AC_MSG_RESULT(no)] |
| ) |
| |
| # Check for OS-specific mutex managers |
| case $host_os in |
| windows* | mingw*) |
| # Native Windows threads |
| list_add= |
| AC_MSG_CHECKING([whether we can support the Windows threads-based MutexMgr]) |
| AS_IF([test x$xerces_cv_no_threads = xno], [ |
| AC_ARG_ENABLE([mutexmgr-windows], |
| AS_HELP_STRING([--enable-mutexmgr-windows], |
| [Enable Windows mutex manager support]), |
| [AS_IF([test x"$enableval" = xyes], |
| [list_add=WINDOWS])], |
| [list_add=windows]) |
| ]) |
| AS_IF([test x"$list_add" != x], |
| [mm_list="$mm_list -$list_add-"; AC_MSG_RESULT(yes)], |
| [AC_MSG_RESULT(no)] |
| ) |
| break |
| ;; |
| *) |
| # Native POSIX threads |
| list_add= |
| AC_MSG_CHECKING([whether we can support the POSIX threads (pthreads)-based MutexMgr]) |
| AS_IF([test x$xerces_cv_no_threads = xno], [ |
| AC_ARG_ENABLE([mutexmgr-posix], |
| AS_HELP_STRING([--enable-mutexmgr-posix], |
| [Enable POSIX mutex manager support]), |
| [AS_IF([test x"$enableval" = xyes], |
| [list_add=POSIX])], |
| [list_add=posix]) |
| ]) |
| AS_IF([test x"$list_add" != x], |
| [mm_list="$mm_list -$list_add-"; AC_MSG_RESULT(yes)], |
| [AC_MSG_RESULT(no)] |
| ) |
| break |
| ;; |
| esac |
| |
| # If no threads is specified, use the NoThread Mutex Mgr |
| list_add= |
| AC_MSG_CHECKING([whether we can support the NoThreads MutexMgr]) |
| AC_ARG_ENABLE([mutexmgr-nothreads], |
| AS_HELP_STRING([--enable-mutexmgr-nothreads], |
| [Enable NoThreads mutex manager support (no threading)]), |
| [AS_IF([test x"$enableval" = xyes], |
| [list_add=NOTHREADS])], |
| [list_add=nothreads]) |
| AS_IF([test x"$list_add" != x], |
| [mm_list="$mm_list -$list_add-"; AC_MSG_RESULT(yes)], |
| [AC_MSG_RESULT(no)] |
| ) |
| |
| |
| ###################################################### |
| # Determine which mutex manager to use. |
| # |
| # We do this in two passes. Mutex managers 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). |
| ###################################################### |
| mutexmgr= |
| az_lower=abcdefghijklmnopqrstuvwxyz |
| az_upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| AC_MSG_CHECKING([for which mutex manager to use (choices:$mm_list)]) |
| for i in 1 2; do |
| # Swap upper/lower case in the mm_list. Cannot use tr ranges |
| # because of the portability issues. |
| # |
| mm_list=`echo $mm_list | tr "$az_lower$az_upper" "$az_upper$az_lower"` |
| |
| # Check for each mutexmgr, in implicit rank order |
| case $mm_list in |
| *-standard-*) |
| mutexmgr=standard; |
| AC_DEFINE([XERCES_USE_MUTEXMGR_STD], 1, [Define to use the C++ standard mutex mgr (requires C++11)]) |
| |
| case $host_os in |
| mingw*) |
| CXXFLAGS="${CXXFLAGS} -mthreads" |
| ;; |
| esac |
| if test "$acx_pthread_ok" = yes; then |
| LIBS="${LIBS} ${PTHREAD_LIBS}" |
| CXXFLAGS="${CXXFLAGS} ${PTHREAD_CFLAGS}" |
| fi |
| break |
| ;; |
| |
| *-posix-*) |
| mutexmgr=POSIX; |
| AC_DEFINE([XERCES_USE_MUTEXMGR_POSIX], 1, [Define to use the POSIX mutex mgr]) |
| |
| # Set additional flags for link and compile |
| LIBS="${LIBS} ${PTHREAD_LIBS}" |
| CXXFLAGS="${CXXFLAGS} ${PTHREAD_CFLAGS}" |
| break |
| ;; |
| |
| *-windows-*) |
| mutexmgr=Windows; |
| AC_DEFINE([XERCES_USE_MUTEXMGR_WINDOWS], 1, [Define to use the Windows mutex mgr]) |
| |
| case $host_os in |
| mingw*) |
| CXXFLAGS="${CXXFLAGS} -mthreads" |
| ;; |
| esac |
| break |
| ;; |
| |
| *-nothreads-*) |
| mutexmgr=NoThreads |
| AC_DEFINE([XERCES_USE_MUTEXMGR_NOTHREAD], 1, [Define to use the NoThread mutex mgr]) |
| break |
| ;; |
| |
| *) |
| AS_IF([test $i -eq 2], [ |
| AC_MSG_RESULT([Xerces cannot function without mutex support. You may want to --disable-threads.]) |
| ] |
| ) |
| ;; |
| |
| esac |
| done |
| |
| if test x"$mutexmgr" != x; then |
| AC_MSG_RESULT($mutexmgr) |
| 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_MUTEXMGR_NOTHREAD], [test x"$mutexmgr" = xNoThreads]) |
| AM_CONDITIONAL([XERCES_USE_MUTEXMGR_STD], [test x"$mutexmgr" = xstandard]) |
| AM_CONDITIONAL([XERCES_USE_MUTEXMGR_POSIX], [test x"$mutexmgr" = xPOSIX]) |
| AM_CONDITIONAL([XERCES_USE_MUTEXMGR_WINDOWS], [test x"$mutexmgr" = xWindows]) |
| |
| ] |
| ) |
| |
| |