| dnl @synopsis XERCES_TRANSCODER_SELECTION |
| dnl |
| dnl Determines the which transcoder to use |
| dnl |
| dnl @category C |
| dnl @author James Berry |
| dnl @version 2005-05-23 |
| dnl @license AllPermissive |
| dnl |
| dnl $Id$ |
| |
| AC_DEFUN([XERCES_TRANSCODER_SELECTION], |
| [ |
| |
| ###################################################### |
| # Test for availability of each transcoder on this host. |
| # For each transcoder that's available, and hasn't been disabled, add it to our list. |
| # If the transcoder has been explicitly "enable"d, then vote for it strongly, |
| # in upper case. |
| ###################################################### |
| |
| tc_list= |
| |
| # Check for GNU iconv support |
| no_GNUiconv=false |
| AC_CHECK_HEADERS([iconv.h wchar.h ctype.h locale.h errno.h], [], [no_GNUiconv=true]) |
| # The code in iconv needs just on of these include files |
| AC_CHECK_HEADER([endian.h], |
| [], |
| [ |
| AC_CHECK_HEADER([machine/endian.h], |
| [], |
| [ |
| AC_CHECK_HEADER([arpa/nameser_compat.h], |
| [], |
| [no_GNUiconv=true]) |
| ]) |
| ]) |
| AC_CHECK_FUNCS([iconv_open iconv_close iconv], [], [no_GNUiconv=true]) |
| AC_MSG_CHECKING([whether we can support the GNU iconv Transcoder]) |
| list_add= |
| AS_IF([! $no_GNUiconv], [ |
| AC_ARG_ENABLE([transcoder-gnuiconv], |
| AS_HELP_STRING([--enable-transcoder-gnuiconv], |
| [Enable GNU iconv-based transcoder support]), |
| [AS_IF([test x"$enableval" = xyes], |
| [list_add=GNUICONV])], |
| [list_add=gnuiconv]) |
| ]) |
| AS_IF([test x"$list_add" != x], |
| [tc_list="$tc_list -$list_add-"; AC_MSG_RESULT(yes)], |
| [AC_MSG_RESULT(no)] |
| ) |
| |
| # Check for iconv support |
| no_iconv=false |
| AC_CHECK_HEADERS([wchar.h], [], [no_iconv=true]) |
| AC_CHECK_FUNCS([mblen wcstombs mbstowcs], [], [no_iconv=true]) |
| AC_MSG_CHECKING([whether we can support the iconv Transcoder]) |
| list_add= |
| AS_IF([! $no_iconv], [ |
| AC_ARG_ENABLE([transcoder-iconv], |
| AS_HELP_STRING([--enable-transcoder-iconv], |
| [Enable iconv-based transcoder support]), |
| [AS_IF([test x"$enableval" = xyes], |
| [list_add=ICONV])], |
| [list_add=iconv]) |
| ]) |
| AS_IF([test x"$list_add" != x], |
| [tc_list="$tc_list -$list_add-"; AC_MSG_RESULT(yes)], |
| [AC_MSG_RESULT(no)] |
| ) |
| |
| # Check for ICU |
| AC_REQUIRE([XERCES_ICU_PREFIX]) |
| AC_MSG_CHECKING([whether we can support the ICU Transcoder]) |
| list_add= |
| AS_IF([test x"$xerces_cv_icu_present" != x"no"], [ |
| AC_ARG_ENABLE([transcoder-icu], |
| AS_HELP_STRING([--enable-transcoder-icu], |
| [Enable icu-based transcoder support]), |
| [AS_IF([test x"$enableval" = xyes], |
| [list_add=ICU])], |
| [list_add=icu]) |
| ]) |
| AS_IF([test x"$list_add" != x], |
| [tc_list="$tc_list -$list_add-"; AC_MSG_RESULT(yes)], |
| [AC_MSG_RESULT(no)] |
| ) |
| |
| |
| # Check for platform-specific transcoders |
| list_add= |
| case $host_os in |
| darwin*) |
| AC_MSG_CHECKING([whether we can support the MacOSUnicodeConverter Transcoder]) |
| AS_IF([test x"$ac_cv_header_CoreServices_CoreServices_h" = xyes], [ |
| AC_ARG_ENABLE([transcoder-macosunicodeconverter], |
| AS_HELP_STRING([--enable-transcoder-macosunicodeconverter], |
| [Enable MacOSUnicodeConverter-based transcoder support]), |
| [AS_IF([test x"$enableval" = xyes], |
| [list_add=MACOSUNICODECONVERTER])], |
| [list_add=macosunicodeconverter]) |
| ]) |
| AS_IF([test x"$list_add" != x], |
| [tc_list="$tc_list -$list_add-"; AC_MSG_RESULT(yes)], |
| [AC_MSG_RESULT(no)] |
| ) |
| ;; |
| windows* | mingw*) |
| AC_MSG_CHECKING([whether we can support the Windows Transcoder]) |
| AC_ARG_ENABLE([transcoder-windows], |
| AS_HELP_STRING([--enable-transcoder-windows], |
| [Enable Windows-based transcoder support]), |
| [AS_IF([test x"$enableval" = xyes], |
| [list_add=WINDOWS])], |
| [list_add=windows]) |
| AS_IF([test x"$list_add" != x], |
| [tc_list="$tc_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. |
| # |
| AC_MSG_CHECKING([whether to use the Windows Transcoder]) |
| AC_ARG_ENABLE([transcoder-windows], |
| AS_HELP_STRING([--enable-transcoder-windows], |
| [Enable Windows-based transcoder support]), |
| [AS_IF([test x"$enableval" = xyes], |
| [list_add=WINDOWS])]) |
| AS_IF([test x"$list_add" != x], |
| [tc_list="$tc_list -$list_add-"; AC_MSG_RESULT(yes)], |
| [AC_MSG_RESULT(no)] |
| ) |
| ;; |
| esac |
| |
| # TODO: Tests for additional transcoders |
| |
| ###################################################### |
| # Determine which transcoder to use. |
| # |
| # We do this in two passes. Transcoders 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). |
| ###################################################### |
| transcoder= |
| az_lower=abcdefghijklmnopqrstuvwxyz |
| az_upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| AC_MSG_CHECKING([for which Transcoder to use (choices:$tc_list)]) |
| for i in 1 2; do |
| # Swap upper/lower case in the tc_list. Cannot use tr ranges |
| # because of the portability issues. |
| # |
| tc_list=`echo $tc_list | tr "$az_lower$az_upper" "$az_upper$az_lower"` |
| |
| # Check for each transcoder, in implicit rank order |
| case $tc_list in |
| |
| *-icu-*) |
| transcoder=icu |
| AC_DEFINE([XERCES_USE_TRANSCODER_ICU], 1, [Define to use the ICU-based transcoder]) |
| LIBS="${LIBS} ${xerces_cv_icu_libs}" |
| break |
| ;; |
| |
| *-macosunicodeconverter-*) |
| transcoder=macosunicodeconverter |
| AC_DEFINE([XERCES_USE_TRANSCODER_MACOSUNICODECONVERTER], 1, [Define to use the Mac OS UnicodeConverter-based transcoder]) |
| XERCES_LINK_DARWIN_FRAMEWORK([CoreServices]) |
| break |
| ;; |
| |
| *-gnuiconv-*) |
| transcoder=gnuiconv |
| AC_DEFINE([XERCES_USE_TRANSCODER_GNUICONV], 1, [Define to use the GNU iconv transcoder]) |
| break |
| ;; |
| |
| *-windows-*) |
| transcoder=windows |
| AC_DEFINE([XERCES_USE_TRANSCODER_WINDOWS], 1, [Define to use the Windows transcoder]) |
| break |
| ;; |
| |
| *-iconv-*) |
| transcoder=iconv |
| AC_DEFINE([XERCES_USE_TRANSCODER_ICONV], 1, [Define to use the iconv transcoder]) |
| break |
| ;; |
| |
| *) |
| AS_IF([test $i -eq 2], [ |
| AC_MSG_RESULT([none]) |
| AC_MSG_ERROR([Xerces cannot function without a transcoder]) |
| ] |
| ) |
| ;; |
| esac |
| done |
| if test x"$transcoder" != x; then |
| AC_MSG_RESULT($transcoder) |
| 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_TRANSCODER_ICU], [test x"$transcoder" = xicu]) |
| AM_CONDITIONAL([XERCES_USE_TRANSCODER_MACOSUNICODECONVERTER], [test x"$transcoder" = xmacosunicodeconverter]) |
| AM_CONDITIONAL([XERCES_USE_TRANSCODER_GNUICONV], [test x"$transcoder" = xgnuiconv]) |
| AM_CONDITIONAL([XERCES_USE_TRANSCODER_ICONV], [test x"$transcoder" = xiconv]) |
| AM_CONDITIONAL([XERCES_USE_TRANSCODER_WINDOWS], [test x"$transcoder" = xwindows]) |
| |
| ] |
| ) |