You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
479 lines
18 KiB
479 lines
18 KiB
# -*- Autoconf -*-
|
|
# Process this file with autoconf to produce a configure script.
|
|
#
|
|
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership.
|
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
|
# (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
#
|
|
# $Id: configure.ac 1662881 2015-02-28 02:00:45Z scantor $
|
|
#
|
|
|
|
AC_PREREQ(2.60)
|
|
AC_INIT([xerces-c],[3.1.2])
|
|
AC_CONFIG_SRCDIR([src/Makefile.am])
|
|
AC_CONFIG_LIBOBJ_DIR([src])
|
|
AC_CONFIG_AUX_DIR([config])
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
AC_CONFIG_HEADERS([config.h src/xercesc/util/Xerces_autoconf_config.hpp])
|
|
AC_CONFIG_FILES([Makefile \
|
|
src/Makefile \
|
|
src/xercesc/util/MsgLoaders/MsgCatalog/Makefile \
|
|
tests/Makefile \
|
|
samples/Makefile \
|
|
xerces-c.pc])
|
|
|
|
# Check the target system
|
|
AC_CANONICAL_HOST
|
|
|
|
# Initialize automake
|
|
AM_INIT_AUTOMAKE([foreign subdir-objects dist-bzip2 tar-ustar])
|
|
AM_MAINTAINER_MODE
|
|
|
|
# Check if rpath is disabled
|
|
AC_MSG_CHECKING(whether to use rpath)
|
|
AC_ARG_ENABLE(rpath,
|
|
[AC_HELP_STRING([--disable-rpath],
|
|
[Patches libtool to not use rpath in the libraries produced.])],
|
|
[xerces_cv_rpath="$enable_rpath"], [xerces_cv_rpath="yes"])
|
|
AC_MSG_RESULT($xerces_cv_rpath)
|
|
|
|
# Checks for programs.
|
|
AC_PROG_CXX
|
|
# Use the C++ compiler for the compile tests
|
|
AC_LANG(C++)
|
|
# used by "make check"
|
|
AC_PROG_SED
|
|
#it would be nice to also check for PERL...
|
|
#AC_PROG_PERL
|
|
|
|
#skip detection of Fortran
|
|
m4_undefine([AC_PROG_F77])
|
|
m4_defun([AC_PROG_F77],[])
|
|
|
|
AC_PROG_LN_S
|
|
AC_LIBTOOL_WIN32_DLL
|
|
AC_PROG_LIBTOOL
|
|
AM_PROG_CC_C_O
|
|
|
|
AS_IF([test x$AR = xfalse],
|
|
AC_MSG_ERROR([Cannot find a valid 'ar' tool]))
|
|
|
|
# Patch libtool to not use rpath if requested.
|
|
#
|
|
AC_CONFIG_COMMANDS([libtool-rpath-patch],
|
|
[if test "$libtool_patch_use_rpath" = "no"; then
|
|
echo config.status: patching libtool to not use rpath
|
|
sed < libtool > libtool-2 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_NO_RPATH__ "/'
|
|
mv libtool-2 libtool
|
|
chmod 755 libtool
|
|
fi],
|
|
[libtool_patch_use_rpath=$xerces_cv_rpath])
|
|
|
|
# Export information on whether we are building static/shared libraries.
|
|
# enable_shared and enable_static are defined by AC_PROG_LIBTOOL.
|
|
#
|
|
AC_SUBST([BUILD_SHARED], [$enable_shared])
|
|
AC_SUBST([BUILD_STATIC], [$enable_static])
|
|
|
|
# Checks for header files.
|
|
AC_HEADER_STDC
|
|
AC_HEADER_TIME
|
|
AC_CHECK_HEADERS([arpa/inet.h fcntl.h float.h inttypes.h langinfo.h limits.h locale.h \
|
|
memory.h netdb.h netinet/in.h nl_types.h stddef.h stdint.h stdlib.h \
|
|
string.h strings.h \
|
|
sys/param.h sys/socket.h sys/time.h sys/timeb.h \
|
|
unistd.h wchar.h wctype.h \
|
|
CoreServices/CoreServices.h \
|
|
endian.h machine/endian.h arpa/nameser_compat.h \
|
|
])
|
|
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
|
AC_HEADER_STDBOOL
|
|
AC_C_CONST
|
|
AC_C_INLINE
|
|
AC_C_VOLATILE
|
|
|
|
AC_CHECK_SIZEOF(wchar_t)
|
|
AC_CHECK_TYPE(size_t)
|
|
AC_CHECK_TYPE(ssize_t)
|
|
|
|
AC_TYPE_OFF_T
|
|
AC_TYPE_SIZE_T
|
|
|
|
XERCES_INT_TYPES
|
|
|
|
AC_CXX_HAVE_BOOL
|
|
AC_CXX_HAVE_NAMESPACES
|
|
AC_CXX_HAVE_STD_NAMESPACE
|
|
AC_CXX_HAVE_STD_LIBS
|
|
AC_CXX_HAVE_LSTRING
|
|
|
|
ACX_PTHREAD
|
|
|
|
# Checks for library functions.
|
|
#AC_FUNC_ERROR_AT_LINE
|
|
#AC_FUNC_MALLOC
|
|
#AC_FUNC_MEMCMP
|
|
#AC_FUNC_STRCOLL
|
|
#AC_FUNC_STRTOD
|
|
AC_CHECK_FUNCS([getcwd pathconf realpath \
|
|
getaddrinfo gethostbyaddr gethostbyname socket \
|
|
clock_gettime ftime gettimeofday \
|
|
memmove memset nl_langinfo setlocale localeconv \
|
|
strcasecmp strncasecmp stricmp strnicmp strchr strdup \
|
|
strrchr strstr strtol strtoul \
|
|
towupper towlower mblen \
|
|
wcsupr wcslwr wcsnicmp wcsicmp \
|
|
])
|
|
|
|
# Some Unix systems, like Gnu Hurd, don't define PATH_MAX
|
|
AC_MSG_CHECKING([for PATH_MAX])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <limits.h>]],
|
|
[[char dummy[PATH_MAX];]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([HAVE_PATH_MAX], 1, [Define to 1 if you have the PATH_MAX macro.])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
AC_DEFINE_UNQUOTED([HAVE_PATH_MAX], 0, [Define to 1 if you have the PATH_MAX macro.])
|
|
]
|
|
)
|
|
|
|
# The check for mbrlen, wcsrtombs and mbsrtowcs gives a false
|
|
# positive on HP-UX, so we use a different snippet to set the
|
|
# corresponding macro
|
|
AC_MSG_CHECKING([for mbrlen])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <wchar.h>]],
|
|
[[mbstate_t st; mbrlen( "t", 5, &st );]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([HAVE_MBRLEN], 1, [Define to 1 if you have the `mbrlen' function.])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
AC_DEFINE_UNQUOTED([HAVE_MBRLEN], 0, [Define to 1 if you have the `mbrlen' function.])
|
|
]
|
|
)
|
|
AC_MSG_CHECKING([for wcsrtombs])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <wchar.h>]],
|
|
[[mbstate_t st; char buffer[2]; const wchar_t* src=0; wcsrtombs(buffer, &src, 2, &st);]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([HAVE_WCSRTOMBS], 1, [Define to 1 if you have the `wcsrtombs' function.])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
AC_DEFINE_UNQUOTED([HAVE_WCSRTOMBS], 0, [Define to 1 if you have the `wcsrtombs' function.])
|
|
]
|
|
)
|
|
AC_MSG_CHECKING([for mbsrtowcs])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <wchar.h>]],
|
|
[[mbstate_t st; wchar_t buffer[2]; const char* src=0; mbsrtowcs(buffer, &src, 2, &st);]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([HAVE_MBSRTOWCS], 1, [Define to 1 if you have the `mbsrtowcs' function.])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
AC_DEFINE_UNQUOTED([HAVE_MBSRTOWCS], 0, [Define to 1 if you have the `mbsrtowcs' function.])
|
|
]
|
|
)
|
|
|
|
AC_MSG_CHECKING([if iconv uses const pointers])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <iconv.h>]],
|
|
[[
|
|
const char *fromPtr=0;
|
|
size_t fromLen=0;
|
|
char *toPtr=0;
|
|
size_t toLen=0;
|
|
iconv_t cv=0;
|
|
iconv(cv, &fromPtr, &fromLen, &toPtr, &toLen);
|
|
]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([ICONV_USES_CONST_POINTER], 1, [Define to 1 if you have to use const char* with iconv, to 0 if you must use char*.])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
AC_DEFINE_UNQUOTED([ICONV_USES_CONST_POINTER], 0, [Define to 1 if you have to use const char* with iconv, to 0 if you must use char*.])
|
|
]
|
|
)
|
|
|
|
AC_SUBST([SHREXT], [$shrext_cmds])
|
|
|
|
#
|
|
# Orchestrate the replacement of missing functions
|
|
#
|
|
AC_REPLACE_FUNCS([stricmp strnicmp towlower towupper])
|
|
|
|
abs_top_srcdir=`cd $srcdir; pwd`
|
|
AC_SUBST(abs_top_srcdir)
|
|
abs_top_builddir=`pwd`
|
|
AC_SUBST(abs_top_builddir)
|
|
|
|
######################################################
|
|
# Look for availability of available packages
|
|
######################################################
|
|
|
|
XERCES_PRETTY_MAKE
|
|
XERCES_PATH_DELIMITERS
|
|
|
|
XERCES_MUTEXMGR_SELECTION
|
|
XERCES_NETACCESSOR_SELECTION
|
|
XERCES_TRANSCODER_SELECTION
|
|
XERCES_MSGLOADER_SELECTION
|
|
XERCES_FILEMGR_SELECTION
|
|
|
|
# Allow the user to specify the pkgconfig directory.
|
|
#
|
|
AC_ARG_WITH(pkgconfigdir,
|
|
AC_HELP_STRING([--with-pkgconfigdir=DIR],[Specify location of pkgconfig dir (default is libdir/pkgconfig)]),
|
|
[pkgconfigdir=${withval}],
|
|
[pkgconfigdir='${libdir}/pkgconfig'])
|
|
|
|
AC_SUBST([pkgconfigdir])
|
|
|
|
# Allow the user to disable the SSE2 support
|
|
#
|
|
AC_ARG_ENABLE(sse2,
|
|
AC_HELP_STRING([--disable-sse2],[disable SSE2 optimizations]),
|
|
[have_sse2=${enableval}],
|
|
[have_sse2=yes])
|
|
|
|
######################################################
|
|
# Define some namespace-protected macros for use in the
|
|
# publicly visible Xerces_autoconf_config.h file.
|
|
######################################################
|
|
|
|
AC_DEFINE([XERCES_AUTOCONF], 1, [Define to true if autoconf is used in this configuration])
|
|
|
|
AS_IF([test x$ac_cv_header_sys_types_h = xyes],
|
|
AC_DEFINE([XERCES_HAVE_SYS_TYPES_H], 1, [Define to 1 if we have sys/types.h]))
|
|
AS_IF([test x$ac_cv_header_inttypes_h = xyes],
|
|
AC_DEFINE([XERCES_HAVE_INTTYPES_H], 1, [Define to 1 if we have inttypes.h]))
|
|
|
|
case $host in
|
|
*-*-msdos* | *-*-mingw32* | *-*-cygwin* | *-*-windows* )
|
|
platform_export="__declspec(dllexport)"
|
|
platform_import="__declspec(dllimport)"
|
|
;;
|
|
* )
|
|
platform_export=""
|
|
platform_import=""
|
|
;;
|
|
esac
|
|
|
|
AC_DEFINE_UNQUOTED([XERCES_PLATFORM_EXPORT], [$platform_export], [Define as the platform's export attribute])
|
|
AC_DEFINE_UNQUOTED([XERCES_PLATFORM_IMPORT], [$platform_import], [Define as the platform's import attribute])
|
|
|
|
AS_IF([test ! $ac_cv_cxx_have_bool],
|
|
AC_DEFINE([XERCES_NO_NATIVE_BOOL], 1, [Define if there is no native bool support in this environment]))
|
|
|
|
AS_IF([test $ac_cv_cxx_have_lstring],
|
|
AC_DEFINE([XERCES_LSTRSUPPORT], 1, [Define if there is support for L"widestring"]))
|
|
|
|
# check if the Windows API is defined as using wchar_t or unsigned short; if it's wchar_t, we need to map XMLCh to be wchar_t
|
|
# (this is safe because on Windows wchar_t is used to store UTF-16 codepoints, while it is not true on Unix)
|
|
AC_MSG_CHECKING([whether the Windows SDK is available and using wchar_t as wide string])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <windows.h>
|
|
wchar_t file[] = L"dummy.file";]],
|
|
[[DeleteFileW(file);]])],
|
|
[
|
|
xerces_cv_type_xmlch=wchar_t
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([XERCES_INCLUDE_WCHAR_H], 1, [Define to have Xerces_autoconf_config.hpp include wchar.h])
|
|
],
|
|
[
|
|
xerces_cv_type_xmlch=$xerces_cv_type_u16bit_int
|
|
AC_MSG_RESULT([no])
|
|
]
|
|
)
|
|
|
|
AC_DEFINE_UNQUOTED([XERCES_XMLCH_T], [$xerces_cv_type_xmlch], [Define to the 16 bit type used to represent Xerces UTF-16 characters])
|
|
|
|
AC_MSG_CHECKING([whether the compiler chokes on a placement operator delete])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <stdlib.h>
|
|
|
|
class XMemory
|
|
{
|
|
public :
|
|
void* operator new(size_t s) { return 0; }
|
|
void* operator new(size_t s, void* ptr) { return 0; }
|
|
void operator delete(void* p) {}
|
|
void operator delete(void* p, void* ptr) {}
|
|
};]],
|
|
[[ ]])],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([XERCES_NO_MATCHING_DELETE_OPERATOR], 1, [Define to have XMemory.hpp avoid declaring a matching operator delete for the placement operator new])
|
|
]
|
|
)
|
|
|
|
if test "$have_sse2" = "yes"; then
|
|
no_sse2_CXXFLAGS="$CXXFLAGS"
|
|
|
|
save_CXXFLAGS="$CXXFLAGS"
|
|
CXXFLAGS="$CXXFLAGS -msse2"
|
|
AC_MSG_CHECKING([whether we need to add -msse2])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <emmintrin.h>]], [[__m128i one;]])],
|
|
[msse2_ok=yes],
|
|
[msse2_ok=no]
|
|
)
|
|
AC_MSG_RESULT($msse2_ok)
|
|
if test x"$msse2_ok" = xno; then
|
|
CXXFLAGS="$save_CXXFLAGS"
|
|
fi
|
|
# Sun CC option test. Currently disabled since it doesn't work. Also note
|
|
# that Sun CC will accept -msse2 (i.e., it won't fail) but will keep issuing
|
|
# warnings. So if enabled this test needs to be moved before -msse2 and if
|
|
# it passes, then -msse2 should be skipped.
|
|
#
|
|
# save_CXXFLAGS="$CXXFLAGS"
|
|
# CXXFLAGS="$CXXFLAGS -xarch=sse2"
|
|
# AC_MSG_CHECKING([whether we need to add -xarch=sse2])
|
|
# AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <emmintrin.h>]], [[__m128i one;]])],
|
|
# [xarchsse2_ok=yes],
|
|
# [xarchsse2_ok=no]
|
|
# )
|
|
# AC_MSG_RESULT($xarchsse2_ok)
|
|
# if test x"$xarchsse2_ok" = xno; then
|
|
# CXXFLAGS="$save_CXXFLAGS"
|
|
# fi
|
|
|
|
AC_MSG_CHECKING([for intrin.h usability])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <intrin.h>]],
|
|
[[]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([XERCES_HAVE_INTRIN_H], 1, [Define to 1 if you have intrin.h])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
]
|
|
)
|
|
AC_MSG_CHECKING([for emmintrin.h usability])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <emmintrin.h>]],
|
|
[[]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([XERCES_HAVE_EMMINTRIN_H], 1, [Define to 1 if you have emmintrin.h])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
]
|
|
)
|
|
AC_MSG_CHECKING([for cpuid.h usability])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <cpuid.h>]],
|
|
[[]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([HAVE_CPUID_H], 1, [Define to 1 if you have cpuid.h])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
]
|
|
)
|
|
|
|
AC_MSG_CHECKING([whether the compiler has the CPUID intrinsic])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <intrin.h>]],
|
|
[[int CPUInfo[4];
|
|
__cpuid(CPUInfo, 1);
|
|
]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([XERCES_HAVE_CPUID_INTRINSIC], 1, [Define to have SSE2 instruction support detected at runtime using __cpuid])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
]
|
|
)
|
|
|
|
AC_MSG_CHECKING([whether the compiler has the _get_cpuid intrinsic])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <cpuid.h>]],
|
|
[[unsigned int eax, ebx, ecx, edx;
|
|
__get_cpuid (1, &eax, &ebx, &ecx, &edx);
|
|
]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE_UNQUOTED([XERCES_HAVE_GETCPUID], 1, [Define to have SSE2 instruction support detected at runtime using __get_cpuid])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
]
|
|
)
|
|
|
|
AC_MSG_CHECKING([whether the compiler has the SSE2 intrinsic])
|
|
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <emmintrin.h>]],
|
|
[[__m128i* one=(__m128i*)_mm_malloc(4, 16);
|
|
__m128i* two=(__m128i*)_mm_malloc(4, 16);
|
|
__m128i xmm1 = _mm_load_si128(one);
|
|
__m128i xmm2 = _mm_load_si128(two);
|
|
__m128i xmm3 = _mm_or_si128(xmm1, xmm2);
|
|
_mm_store_si128(one, xmm3);
|
|
_mm_free(one);
|
|
_mm_free(two);
|
|
]])],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
sse2_usable=yes
|
|
AC_DEFINE_UNQUOTED([XERCES_HAVE_SSE2_INTRINSIC], 1, [Define to have SSE2 instruction used at runtime])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no])
|
|
sse2_usable=no
|
|
]
|
|
|
|
)
|
|
# Restore original CXXFLAGS if SSE2 is not usable.
|
|
#
|
|
if test "$sse2_usable" = "no"; then
|
|
CXXFLAGS="$no_sse2_CXXFLAGS"
|
|
fi
|
|
fi
|
|
|
|
AS_IF([test x$ac_cv_type_size_t = xyes],
|
|
AC_DEFINE([XERCES_SIZE_T], [size_t], [Define as the appropriate size_t type]),
|
|
AC_DEFINE([XERCES_SIZE_T], [long], [Define as the appropriate size_t type]))
|
|
|
|
AS_IF([test x$ac_cv_type_ssize_t = xyes],
|
|
AC_DEFINE([XERCES_SSIZE_T], [ssize_t], [Define as the appropriate ssize_t type]),
|
|
AC_DEFINE([XERCES_SSIZE_T], [unsigned long], [Define as the appropriate ssize_t type]))
|
|
|
|
AS_IF([test x$ac_cv_cxx_have_namespaces = xyes],
|
|
AC_DEFINE([XERCES_HAS_CPP_NAMESPACE], 1, [Define if namespaces is supported by the compiler]))
|
|
|
|
AS_IF([test x$ac_cv_cxx_have_std_namespace = xyes],
|
|
AC_DEFINE([XERCES_STD_NAMESPACE], 1, [Define if the std namespace is supported]))
|
|
|
|
AS_IF([test x$ac_cv_cxx_have_std_libs = xyes],
|
|
AC_DEFINE([XERCES_NEW_IOSTREAMS], 1, [Define if the isstream library can be included as <iostream>]))
|
|
|
|
|
|
AC_OUTPUT
|
|
|
|
AC_MSG_NOTICE
|
|
AC_MSG_NOTICE([Report:])
|
|
AC_MSG_NOTICE([ File Manager: $filemgr])
|
|
AC_MSG_NOTICE([ Mutex Manager: $mutexmgr])
|
|
AC_MSG_NOTICE([ Transcoder: $transcoder])
|
|
AC_MSG_NOTICE([ NetAccessor: $netaccessor])
|
|
AC_MSG_NOTICE([ Message Loader: $msgloader])
|