#                                               -*- 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$
#

AC_PREREQ(2.60)
AC_INIT([xerces-c],[4.0.0])
INTERFACE_VERSION=4.0
GRAMMAR_SERIALIZATION_LEVEL=7

XERCES_VERSION_MAJOR=$(echo $PACKAGE_VERSION | cut -d. -f1)
XERCES_VERSION_MINOR=$(echo $PACKAGE_VERSION | cut -d. -f2)
XERCES_VERSION_REVISION=$(echo $PACKAGE_VERSION | cut -d. -f3)

INTERFACE_VERSION_MAJOR=$(echo $INTERFACE_VERSION | cut -d. -f1)
INTERFACE_VERSION_MINOR=$(echo $INTERFACE_VERSION | cut -d. -f2)

INTERFACE_VERSION_D="${INTERFACE_VERSION_MAJOR}.${INTERFACE_VERSION_MINOR}"
INTERFACE_VERSION_U="${INTERFACE_VERSION_MAJOR}_${INTERFACE_VERSION_MINOR}"

AC_SUBST([XERCES_VERSION_MAJOR])
AC_SUBST([XERCES_VERSION_MINOR])
AC_SUBST([XERCES_VERSION_REVISION])
AC_SUBST([INTERFACE_VERSION_MAJOR])
AC_SUBST([INTERFACE_VERSION_MINOR])
AC_SUBST([INTERFACE_VERSION_D])
AC_SUBST([INTERFACE_VERSION_U])

AC_DEFINE_UNQUOTED([XERCES_VERSION_MAJOR], $XERCES_VERSION_MAJOR, [Definition of Xerces major version])
AC_DEFINE_UNQUOTED([XERCES_VERSION_MINOR], $XERCES_VERSION_MINOR, [Definition of Xerces minor version])
AC_DEFINE_UNQUOTED([XERCES_VERSION_REVISION], $XERCES_VERSION_REVISION, [Definition of Xerces patch version])

AC_DEFINE_UNQUOTED([INTERFACE_VERSION_MAJOR], $INTERFACE_VERSION_MAJOR, [Definition of Xerces interface major version])
AC_DEFINE_UNQUOTED([INTERFACE_VERSION_MINOR], $INTERFACE_VERSION_MINOR, [Definition of Xerces interface minor version])

AC_DEFINE_UNQUOTED([XERCES_GRAMMAR_SERIALIZATION_LEVEL], $GRAMMAR_SERIALIZATION_LEVEL, [Definition of Xerces grammar serialization level])

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_HEADER([src/xercesc/util/XercesVersion.hpp])
AC_CONFIG_FILES([Makefile
                 doc/Makefile
                 doc/Doxyfile
                 doc/style/dtd/entities.ent
                 src/Makefile
                 tests/Makefile
                 samples/Makefile
		 xerces-c.pc
                 scripts/run-test])

# Check the target system
AC_CANONICAL_HOST

# Initialize automake
AM_SILENT_RULES([yes])
AM_INIT_AUTOMAKE([foreign subdir-objects dist-bzip2 tar-ustar])
AM_MAINTAINER_MODE

# Checks for C++ standard version
AX_CXX_COMPILE_STDCXX([17], [ext], [optional])
if test "$HAVE_CXX17" = "0"; then
  AX_CXX_COMPILE_STDCXX([14], [ext], [optional])
  if test "$HAVE_CXX14" = "0"; then
    AX_CXX_COMPILE_STDCXX([11], [ext], [optional])
  fi
fi

# 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 langinfo.h limits.h locale.h \
                  memory.h netdb.h netinet/in.h nl_types.h stddef.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_CHECK_SIZEOF(wchar_t)

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 timegm gmtime_r \
		memmove memset nl_langinfo setlocale localeconv \
		strcasecmp strncasecmp stricmp strnicmp strchr strdup \
		strrchr strstr strtol strtoul snprintf \
		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
# Furthermore, OpenBSD 5.1 doesn't follow the standard that states
# that the "src" pointer must be set to NULL when a \0 has been 
# converted in the source data, a behaviour that we rely on
# So we also check for this scenario before using these functions
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_RUN_IFELSE(  [AC_LANG_PROGRAM([[#include <wchar.h>
#include <cstring>]],
                                 [[
mbstate_t st;
memset(&st, 0, sizeof(st));
char buffer[32];
const wchar_t* src=L"help";
wcsrtombs(buffer, &src, 32, &st);
if(src==0)
    return 0;
else
    return 1;]])],
                    [
                      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_RUN_IFELSE(  [AC_LANG_PROGRAM([[#include <wchar.h>
#include <cstring>]],
                                 [[
mbstate_t st;
memset(&st, 0, sizeof(st));
wchar_t buffer[32];
const char* src="help";
mbsrtowcs(buffer, &src, 32, &st);
if(src==0)
    return 0;
else
    return 1;]])],
                    [
                      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_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.
######################################################

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]))

case $host in
*-*-msdos* | *-*-mingw32* | *-*-cygwin* | *-*-windows* )
	platform_export="__declspec(dllexport)"
	platform_import="__declspec(dllimport)"
        template_extern=""
	;;
* )
	platform_export=""
	platform_import=""
        template_extern="extern"
	;;
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])
AC_DEFINE_UNQUOTED([XERCES_TEMPLATE_EXTERN], [$template_extern], [Define as the platform's template extern attribute])

XERCES_XMLCH_SELECTION

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

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])
AC_MSG_NOTICE([  XMLCh Type: $xmlch])
