Math Processor Unit Library

libmpu – library of arithmetic functions for integer, real, and complex numbers of increased digit capacity

16 Commits   0 Branches   2 Tags

dnl ============================================================
dnl We define the macro GLIBC_PROVIDES to do an AC_PROVIDE for
dnl each macro which appears in configure.ac before the sysdep
dnl configure scripts are run. Each sysdep configure.ac does
dnl LIBMPU_PROVIDES first, to avoid any AC_REQUIREs or
dnl AC_BEFOREs duplicating their code.
dnl ============================================================
define([LIBMPU_PROVIDES], [dnl
AC_PROVIDE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
AC_PROVIDE([AC_CONFIG_SUBDIRS])dnl
AC_PROVIDE([_AS_ECHO_N_PREPARE])dnl
AC_PROVIDE([_AS_ECHO_PREPARE])dnl
AC_PROVIDE([_AS_CR_PREPARE])dnl
AC_PROVIDE([_AS_TR_SH_PREPARE])dnl
AC_PROVIDE([_AS_VAR_ARITH_PREPARE])dnl
AC_PROVIDE([AC_PROG_INSTALL])dnl
AC_PROVIDE([AC_PROG_CC])dnl
AC_PROVIDE([AC_PROG_CPP])dnl
AC_PROVIDE([_AS_PATH_SEPARATOR_PREPARE])dnl
AC_PROVIDE([_AS_TEST_PREPARE])dnl
AC_PROVIDE([_AS_BASENAME_PREPARE])dnl
AC_PROVIDE([_AS_ME_PREPARE])dnl
AC_PROVIDE([_AS_LINENO_PREPARE])dnl
AC_PROVIDE([AS_SHELL_FN_as_fn_set_status])dnl
AC_PROVIDE([AS_SHELL_FN_as_fn_exit])dnl
AC_PROVIDE([AS_SHELL_FN_as_fn_arith])dnl
AC_PROVIDE([AS_SHELL_FN_ac_fn_c_try_compile])dnl
define([AS_MESSAGE_LOG_FD],5)dnl
define([AS_MESSAGE_FD],6)dnl
dnl Ripped out of AS_INIT, which does more cruft we do not want.
m4_wrap([m4_divert_pop([BODY])[]])
m4_divert_push([BODY])[]dnl
dnl End of ripped out of AS_INIT.
# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
define([_AC_LANG], [C])dnl
])dnl

dnl ============================================================
dnl Support for Configuration Headers
dnl
dnl    configure.ac:
dnl       AC_LIBMPU_HEADLINE(<short-name>, <long-name>,
dnl                          <vers-var>, <vers-file>,
dnl                          <copyright>)
dnl
dnl NOTE:
dnl ====
dnl   See the paragraph 8.3.3 of Autoconf Documentation at:
dnl
dnl     https://www.gnu.org/software/autoconf/manual/autoconf.html#Diversion-support
dnl
dnl ============================================================
m4_define([AC_LIBMPU_HEADLINE], [dnl
m4_divert_push([M4SH-SANITIZE])dnl
{
  if test ".`echo dummy [$]@ | grep help`" = .; then
    ####### bootstrapping version-tool
    ac_prog=[$]0
changequote(, )dnl
    ac_srcdir=`echo $ac_prog | sed -e 's%/[^/][^/]*$%%' -e 's%\([^/]\)/*$%\1%'`
changequote([, ])dnl
    test ".$ac_srcdir" = ".$ac_prog" && ac_srcdir=.
    ac_version_tool="${CONFIG_SHELL-/bin/sh} $ac_srcdir/version-tool"

    ####### нахождение escape последовательностей для
    ####### обозначения начала и конца выделяемого текста
    ####### Use a `Quadrigaph'. '@<:@' gives you [ and '@:>@' gives you ] :
    TB=`echo -n -e '\033@<:@1m'`
    TN=`echo -n -e '\033@<:@0m'`

    ####### чтение короткого номера версии продукта (например, "1.0.0")
    $3="`$ac_version_tool $ac_srcdir/$4`"
    AC_SUBST($3)

    ####### печать заголовка
    echo "Configuring:"
    echo ""
    echo "${TB}$1${TN} ($2), Version ${TB}${$3}${TN}"
    echo "$5"
    echo ""

    ####### чтение шестнадцатеричного номера версии продукта (например, 0x100200)
#    $3_HEX="`$ac_version_tool version -lc -dhex $ac_srcdir/$4`"
#    AC_SUBST($3_HEX)
  fi
}
m4_divert_pop([M4SH-SANITIZE])dnl
])dnl


dnl ============================================================
dnl Display Configuration Headers
dnl
dnl    configure.ac:
dnl       AC_MSG_CFG_PART(<text>)
dnl ============================================================
AC_DEFUN([AC_MSG_CFG_PART],[dnl
   AC_MSG_RESULT()
   AC_MSG_RESULT([${TB}$1:${TN}])
])dnl


dnl ============================================================
dnl  Check for weak symbols too:
dnl ============================================================
AC_DEFUN([LIBMPU_ALIAS_ATTRIBUTE],
[AC_CACHE_CHECK(for broken __attribute__((alias())),
  libmpu_cv_broken_alias_attribute,
  [cat > conftest.c <<EOF
   extern int foo (int x) __asm ("xyzzy");
   int bar (int x) { return x; }
   extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
   extern int dfoo;
   extern __typeof (dfoo) dfoo __asm ("abccb");
   int dfoo = 1;
EOF
  libmpu_cv_broken_alias_attribute=yes
  if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
    if grep 'xyzzy' conftest.s >/dev/null &&
       grep 'abccb' conftest.s >/dev/null; then
       libmpu_cv_broken_alias_attribute=no
    fi
  fi
  rm -f conftest.c conftest.s
  ])
if test $libmpu_cv_broken_alias_attribute = yes; then
  AC_MSG_ERROR([
********   ${TB}Working alias attribute support required.${TN}])
else
  AC_DEFINE(HAVE_WEAK_SYMBOLS, 1, [Defined if supports weak symbols.])
fi
])


dnl ============================================================
dnl  Check for hidden visibility attribute:
dnl ============================================================
AC_DEFUN([LIBMPU_HIDDEN_VISIBILITY_ATTRIBUTE],
[AC_CACHE_CHECK(for __attribute__((visibility("hidden"))),
  libmpu_cv_hidden_visibility_attribute,
  [cat > conftest.c <<EOF
   int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }
EOF
  libmpu_cv_hidden_visibility_attribute=no
  if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
    if grep '\.hidden.*foo' conftest.s >/dev/null; then
       libmpu_cv_hidden_visibility_attribute=yes
    fi
  fi
  rm -f conftest.c conftest.s
  ])
if test $libmpu_cv_hidden_visibility_attribute = yes; then
  AC_DEFINE([HAVE_HIDDEN_VISIBILITY_ATTRIBUTE], [1],
    [Defined if __attribute__((visibility("hidden"))) supported.])
fi
])


dnl ============================================================
dnl Check GNU Binutils
dnl
dnl    configure.ac:
dnl       LIBMPU_PROG_BINUTILS
dnl ============================================================
AC_DEFUN([LIBMPU_PROG_FOO_GNU],
[# Most GNU programs take a -v and spit out some text including
# the word 'GNU'.  Some try to read stdin, so give them /dev/null.
if $1 -o conftest -v </dev/null 2>&1 | grep GNU > /dev/null 2>&1; then
  $2
else
  $3
fi
rm -fr contest*])

AC_DEFUN([LIBMPU_PROG_BINUTILS],
[dnl
AS=`$CC -print-prog-name=as`
LD=`$CC -print-prog-name=ld`
AR=`$CC -print-prog-name=ar`
AC_SUBST(AR)
AC_SUBST(AS)
OBJDUMP=`$CC -print-prog-name=objdump`
AC_SUBST(OBJDUMP)
OBJCOPY=`$CC -print-prog-name=objcopy`
AC_SUBST(OBJCOPY)

# ranlib has to be treated a bit differently since it might not exist at all.
RANLIB=`$CC -print-prog-name=ranlib`
if test $RANLIB = ranlib; then
# This extra check has to happen since gcc simply echos the parameter in
# case it cannot find the value in its own directories.
AC_CHECK_TOOL(RANLIB, ranlib, :)
fi
AC_SUBST(RANLIB)

# readelf has to be treated a bit differently since it might not exist at all.
READELF=`$CC -print-prog-name=readelf`
if test $READELF = readelf; then
# This extra check has to happen since gcc simply echos the parameter in
# case it cannot find the value in its own directories.
AC_CHECK_TOOL(READELF, readelf, :)
fi
AC_SUBST(READELF)

# nm has to be treated a bit differently since it might not exist at all.
NM=`$CC -print-prog-name=nm`
if test $NM = nm; then
# This extra check has to happen since gcc simply echos the parameter in
# case it cannot find the value in its own directories.
AC_CHECK_TOOL(NM, nm, :)
fi
AC_SUBST(NM)

# strip has to be treated a bit differently since it might not exist at all.
STRIP=`$CC -print-prog-name=strip`
if test $STRIP = strip; then
# This extra check has to happen since gcc simply echos the parameter in
# case it cannot find the value in its own directories.
AC_CHECK_TOOL(STRIP, strip, :)
fi
AC_SUBST(STRIP)

# Determine whether we are using GNU binutils.
AC_CACHE_CHECK(whether $AS is GNU as, libmpu_cv_prog_as_gnu,
[LIBMPU_PROG_FOO_GNU($AS, libmpu_cv_prog_as_gnu=yes, libmpu_cv_prog_as_gnu=no)])
rm -f a.out
gnu_as=$libmpu_cv_prog_as_gnu

AC_CACHE_CHECK(whether $LD is GNU ld, libmpu_cv_prog_ld_gnu,
[LIBMPU_PROG_FOO_GNU($LD, libmpu_cv_prog_ld_gnu=yes, libmpu_cv_prog_ld_gnu=no)])
gnu_ld=$libmpu_cv_prog_ld_gnu
])


dnl ============================================================
dnl  Test for build_cc:
dnl  =================
dnl
dnl    configure.ac:
dnl       if test $host != $build; then
dnl         AC_PROG_BUILD_CC
dnl       fi
dnl
dnl ============================================================
AC_DEFUN([AC_PROG_BUILD_CC],
[ac_test_BUILD_CFLAGS=${BUILD_CFLAGS+set}
ac_save_BUILD_CFLAGS=$BUILD_CFLAGS
AC_CHECK_PROGS(BUILD_CC, gcc cc)
AC_MSG_CHECKING(whether $BUILD_CC works on build machine)
AC_CACHE_VAL(ac_cv_prog_build_cc,
[rm -f conftest
cat > conftest.c <<EOF

int main()
{
   char *s = "strip";

   return( 0 );
}

EOF
$BUILD_CC -o conftest conftest.c
if test -f conftest
then
   rm -f conftest conftest.c
   ac_cv_prog_build_cc="$BUILD_CC"
else
   rm -f conftest conftest.c
   ac_cv_prog_build_cc=
fi])dnl

if test "$ac_test_BUILD_CFLAGS" = set; then
  BUILD_CFLAGS=$ac_save_BUILD_CFLAGS
fi

BUILD_CC="$ac_cv_prog_build_cc"
if test "$ac_cv_prog_build_cc" = "$BUILD_CC"; then
   AC_MSG_RESULT(yes)
else
   AC_MSG_RESULT(no)
fi
AC_SUBST(BUILD_CC)dnl
])


dnl ============================================================
dnl  Test for build_host `strip -s':
dnl  ==============================
dnl
dnl    configure.ac:
dnl       if test $host != $build; then
dnl         AC_PATH_PROG_BUILD_STRIP_S
dnl       fi
dnl
dnl ============================================================
AC_DEFUN([AC_PATH_PROG_BUILD_STRIP_S],
[AC_REQUIRE([AC_PROG_BUILD_CC])dnl
AC_PATH_PROG(BUILD_STRIP, strip, no, /usr/local/bin:/usr/bin:/bin:$PATH)
AC_MSG_CHECKING(whether strip -s works on build machine)
AC_CACHE_VAL(ac_cv_path_prog_STRIP_S,
[rm -f conftest
cat > conftest.c <<EOF

int main()
{
   char *s = "strip";

   return( 0 );
}

EOF
$BUILD_CC -o conftest conftest.c
if $BUILD_STRIP -s conftest 2>/dev/null
then
   rm -f conftest conftest.c
   ac_cv_path_prog_STRIP_S="$BUILD_STRIP -s"
else
   rm -f conftest conftest.c
   ac_cv_path_prog_STRIP_S="$BUILD_STRIP"
fi])dnl
BUILD_STRIP_S="$ac_cv_path_prog_STRIP_S"
if test "$ac_cv_path_prog_STRIP_S" = "$BUILD_STRIP -s"; then
   AC_MSG_RESULT(yes)
else
   AC_MSG_RESULT(no)
fi
AC_SUBST(BUILD_STRIP)dnl
AC_SUBST(BUILD_STRIP_S)dnl
])


dnl ============================================================
dnl  Test for WIDTH of MACHINE REGISTER using GCC predefines:
dnl  ==================
dnl
dnl    configure.ac:
dnl       AC_GCC_REGISTER_WIDTH
dnl
dnl ============================================================
AC_DEFUN([AC_GCC_REGISTER_WIDTH],
[dnl
AC_MSG_CHECKING(for CPP predefined macro __INT_FAST32_WIDTH__ )
AC_CACHE_VAL(ac_cv_int_fast32_width,
[ac_cv_int_fast32_width=`$CC -dM -E - < /dev/null | grep __INT_FAST32_WIDTH__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_int_fast32_width" != ""; then
  AC_MSG_RESULT($ac_cv_int_fast32_width)
else
  AC_MSG_RESULT(not defined)
fi

AC_MSG_CHECKING(for CPP predefined macro __INT_FAST64_WIDTH__ )
AC_CACHE_VAL(ac_cv_int_fast64_width,
[ac_cv_int_fast64_width=`$CC -dM -E - < /dev/null | grep __INT_FAST64_WIDTH__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_int_fast64_width" != ""; then
  AC_MSG_RESULT($ac_cv_int_fast64_width)
else
  AC_MSG_RESULT(not defined)
fi

AC_MSG_CHECKING(for MACHINE REGISTER WIDTH )
AC_CACHE_VAL(ac_cv_machine_register_width,
[dnl
if test "$ac_cv_int_fast64_width" != "" -a "$ac_cv_int_fast32_width" != "" ; then
  if test "$ac_cv_int_fast64_width" -gt "$ac_cv_int_fast32_width" ; then
    ac_cv_machine_register_width=$ac_cv_int_fast32_width
  else
    ac_cv_machine_register_width=$ac_cv_int_fast64_width
  fi
elif test "$ac_cv_int_fast64_width" != "" ; then
  ac_cv_machine_register_width=$ac_cv_int_fast64_width
elif test "$ac_cv_int_fast32_width" != "" ; then
  ac_cv_machine_register_width=$ac_cv_int_fast32_width
else
  ac_cv_machine_register_width=32
fi
])dnl
if test "$ac_cv_machine_register_width" != ""; then
  MACHINE_REGISTER_WIDTH=$ac_cv_machine_register_width
  AC_MSG_RESULT($ac_cv_machine_register_width)
else
  MACHINE_REGISTER_WIDTH=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(MACHINE_REGISTER_WIDTH)dnl
AC_DEFINE_UNQUOTED([MACHINE_REGISTER_WIDTH], [$ac_cv_machine_register_width], [The size of Machine Register in bits.])dnl
])


dnl ============================================================
dnl  Test for GCC Types:
dnl  ==================
dnl
dnl    configure.ac:
dnl       AC_GCC_TYPES
dnl
dnl ============================================================
AC_DEFUN([AC_GCC_TYPES],
[dnl
AC_MSG_CHECKING(for CPP predefined macro __CHAR16_TYPE__ )
AC_CACHE_VAL(ac_cv_char16_type,
[ac_cv_char16_type=`$CC -dM -E - < /dev/null | grep __CHAR16_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_char16_type" != ""; then
  GCC_CHAR16_TYPE=$ac_cv_char16_type
  AC_MSG_RESULT($ac_cv_char16_type)
else
  GCC_CHAR16_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_CHAR16_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __CHAR32_TYPE__ )
AC_CACHE_VAL(ac_cv_char32_type,
[ac_cv_char32_type=`$CC -dM -E - < /dev/null | grep __CHAR32_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_char32_type" != ""; then
  GCC_CHAR32_TYPE=$ac_cv_char32_type
  AC_MSG_RESULT($ac_cv_char32_type)
else
  GCC_CHAR32_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_CHAR32_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __WCHAR_TYPE__ )
AC_CACHE_VAL(ac_cv_wchar_type,
[ac_cv_wchar_type=`$CC -dM -E - < /dev/null | grep __WCHAR_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_wchar_type" != ""; then
  GCC_WCHAR_TYPE=$ac_cv_wchar_type
  AC_MSG_RESULT($ac_cv_wchar_type)
else
  GCC_WCHAR_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_WCHAR_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __INT8_TYPE__ )
AC_CACHE_VAL(ac_cv_int8_type,
[ac_cv_int8_type=`$CC -dM -E - < /dev/null | grep __INT8_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_int8_type" != ""; then
  GCC_INT8_TYPE=$ac_cv_int8_type
  AC_MSG_RESULT($ac_cv_int8_type)
else
  GCC_INT8_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_INT8_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __UINT8_TYPE__ )
AC_CACHE_VAL(ac_cv_uint8_type,
[ac_cv_uint8_type=`$CC -dM -E - < /dev/null | grep __UINT8_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_uint8_type" != ""; then
  GCC_UINT8_TYPE=$ac_cv_uint8_type
  AC_MSG_RESULT($ac_cv_uint8_type)
else
  GCC_UINT8_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_UINT8_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __INT16_TYPE__ )
AC_CACHE_VAL(ac_cv_int16_type,
[ac_cv_int16_type=`$CC -dM -E - < /dev/null | grep __INT16_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_int16_type" != ""; then
  GCC_INT16_TYPE=$ac_cv_int16_type
  AC_MSG_RESULT($ac_cv_int16_type)
else
  GCC_INT16_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_INT16_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __UINT16_TYPE__ )
AC_CACHE_VAL(ac_cv_uint16_type,
[ac_cv_uint16_type=`$CC -dM -E - < /dev/null | grep __UINT16_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_uint16_type" != ""; then
  GCC_UINT16_TYPE=$ac_cv_uint16_type
  AC_MSG_RESULT($ac_cv_uint16_type)
else
  GCC_UINT16_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_UINT16_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __INT32_TYPE__ )
AC_CACHE_VAL(ac_cv_int32_type,
[ac_cv_int32_type=`$CC -dM -E - < /dev/null | grep __INT32_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_int32_type" != ""; then
  GCC_INT32_TYPE=$ac_cv_int32_type
  AC_MSG_RESULT($ac_cv_int32_type)
else
  GCC_INT32_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_INT32_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __UINT32_TYPE__ )
AC_CACHE_VAL(ac_cv_uint32_type,
[ac_cv_uint32_type=`$CC -dM -E - < /dev/null | grep __UINT32_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
AC_CACHE_VAL(ac_cv_uint32_const_suffix,
[ac_cv_uint32_const_suffix=`$CC -dM -E - < /dev/null | grep __UINT32_C | cut -f5- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_uint32_type" != ""; then
  GCC_UINT32_TYPE=$ac_cv_uint32_type
  AC_MSG_RESULT($ac_cv_uint32_type)
else
  GCC_UINT32_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_UINT32_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __INT64_TYPE__ )
AC_CACHE_VAL(ac_cv_int64_type,
[ac_cv_int64_type=`$CC -dM -E - < /dev/null | grep __INT64_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_int64_type" != ""; then
  GCC_INT64_TYPE=$ac_cv_int64_type
  AC_MSG_RESULT($ac_cv_int64_type)
else
  GCC_INT64_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_INT64_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __UINT64_TYPE__ )
AC_CACHE_VAL(ac_cv_uint64_type,
[ac_cv_uint64_type=`$CC -dM -E - < /dev/null | grep __UINT64_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
AC_CACHE_VAL(ac_cv_uint64_const_suffix,
[ac_cv_uint64_const_suffix=`$CC -dM -E - < /dev/null | grep __UINT64_C | cut -f5- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_uint64_type" != ""; then
  GCC_UINT64_TYPE=$ac_cv_uint64_type
  AC_MSG_RESULT($ac_cv_uint64_type)
else
  GCC_UINT64_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_UINT64_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __WINT_TYPE__ )
AC_CACHE_VAL(ac_cv_wint_type,
[ac_cv_wint_type=`$CC -dM -E - < /dev/null | grep __WINT_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_wint_type" != ""; then
  GCC_WINT_TYPE=$ac_cv_wint_type
  AC_MSG_RESULT($ac_cv_wint_type)
else
  GCC_WINT_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_WINT_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __INTMAX_TYPE__ )
AC_CACHE_VAL(ac_cv_intmax_type,
[ac_cv_intmax_type=`$CC -dM -E - < /dev/null | grep __INTMAX_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_intmax_type" != ""; then
  GCC_INTMAX_TYPE=$ac_cv_intmax_type
  AC_MSG_RESULT($ac_cv_intmax_type)
else
  GCC_INTMAX_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_INTMAX_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __UINTMAX_TYPE__ )
AC_CACHE_VAL(ac_cv_uintmax_type,
[ac_cv_uintmax_type=`$CC -dM -E - < /dev/null | grep __UINTMAX_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_uintmax_type" != ""; then
  GCC_UINTMAX_TYPE=$ac_cv_uintmax_type
  AC_MSG_RESULT($ac_cv_uintmax_type)
else
  GCC_UINTMAX_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_UINTMAX_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZE_TYPE__ )
AC_CACHE_VAL(ac_cv_size_type,
[ac_cv_size_type=`$CC -dM -E - < /dev/null | grep __SIZE_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_size_type" != ""; then
  GCC_SIZE_TYPE=$ac_cv_size_type
  AC_MSG_RESULT($ac_cv_size_type)
else
  GCC_SIZE_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZE_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __INTPTR_TYPE__ )
AC_CACHE_VAL(ac_cv_intptr_type,
[ac_cv_intptr_type=`$CC -dM -E - < /dev/null | grep __INTPTR_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_intptr_type" != ""; then
  GCC_INTPTR_TYPE=$ac_cv_intptr_type
  AC_MSG_RESULT($ac_cv_intptr_type)
else
  GCC_INTPTR_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_INTPTR_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __UINTPTR_TYPE__ )
AC_CACHE_VAL(ac_cv_uintptr_type,
[ac_cv_uintptr_type=`$CC -dM -E - < /dev/null | grep __UINTPTR_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_uintptr_type" != ""; then
  GCC_UINTPTR_TYPE=$ac_cv_uintptr_type
  AC_MSG_RESULT($ac_cv_uintptr_type)
else
  GCC_UINTPTR_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_UINTPTR_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __PTRDIFF_TYPE__ )
AC_CACHE_VAL(ac_cv_ptrdiff_type,
[ac_cv_ptrdiff_type=`$CC -dM -E - < /dev/null | grep __PTRDIFF_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_ptrdiff_type" != ""; then
  GCC_PTRDIFF_TYPE=$ac_cv_ptrdiff_type
  AC_MSG_RESULT($ac_cv_ptrdiff_type)
else
  GCC_PTRDIFF_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_PTRDIFF_TYPE)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIG_ATOMIC_TYPE__ )
AC_CACHE_VAL(ac_cv_sig_atomic_type,
[ac_cv_sig_atomic_type=`$CC -dM -E - < /dev/null | grep __SIG_ATOMIC_TYPE__ | cut -f3- -d' ' | tr '\n' ' ' | tr -s ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sig_atomic_type" != ""; then
  GCC_SIG_ATOMIC_TYPE=$ac_cv_sig_atomic_type
  AC_MSG_RESULT($ac_cv_sig_atomic_type)
else
  GCC_SIG_ATOMIC_TYPE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIG_ATOMIC_TYPE)dnl
])


dnl ============================================================
dnl  Test for GCC Sizeof Types:
dnl  =========================
dnl
dnl    configure.ac:
dnl       AC_GCC_SIZEOF_TYPES
dnl
dnl ============================================================
AC_DEFUN([AC_GCC_SIZEOF_TYPES],
[dnl
AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_WCHAR_T__ )
AC_CACHE_VAL(ac_cv_sizeof_wchar_t,
[ac_cv_sizeof_wchar_t=`$CC -dM -E - < /dev/null | grep __SIZEOF_WCHAR_T__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_wchar_t" != ""; then
  GCC_SIZEOF_WCHAR_T=$ac_cv_sizeof_wchar_t
  AC_MSG_RESULT($ac_cv_sizeof_wchar_t)
else
  GCC_SIZEOF_WCHAR_T=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_WCHAR_T)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_SHORT__ )
AC_CACHE_VAL(ac_cv_sizeof_short,
[ac_cv_sizeof_short=`$CC -dM -E - < /dev/null | grep __SIZEOF_SHORT__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_short" != ""; then
  GCC_SIZEOF_SHORT=$ac_cv_sizeof_short
  AC_MSG_RESULT($ac_cv_sizeof_short)
else
  GCC_SIZEOF_SHORT=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_SHORT)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_INT__ )
AC_CACHE_VAL(ac_cv_sizeof_int,
[ac_cv_sizeof_int=`$CC -dM -E - < /dev/null | grep __SIZEOF_INT__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_int" != ""; then
  GCC_SIZEOF_INT=$ac_cv_sizeof_int
  AC_MSG_RESULT($ac_cv_sizeof_int)
else
  GCC_SIZEOF_INT=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_INT)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_WINT_T__ )
AC_CACHE_VAL(ac_cv_sizeof_wint_t,
[ac_cv_sizeof_wint_t=`$CC -dM -E - < /dev/null | grep __SIZEOF_WINT_T__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_wint_t" != ""; then
  GCC_SIZEOF_WINT_T=$ac_cv_sizeof_wint_t
  AC_MSG_RESULT($ac_cv_sizeof_wint_t)
else
  GCC_SIZEOF_WINT_T=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_WINT_T)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_LONG__ )
AC_CACHE_VAL(ac_cv_sizeof_long,
[ac_cv_sizeof_long=`$CC -dM -E - < /dev/null | grep __SIZEOF_LONG__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_long" != ""; then
  GCC_SIZEOF_LONG=$ac_cv_sizeof_long
  AC_MSG_RESULT($ac_cv_sizeof_long)
else
  GCC_SIZEOF_LONG=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_LONG)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_LONG_LONG__ )
AC_CACHE_VAL(ac_cv_sizeof_long_long,
[ac_cv_sizeof_long_long=`$CC -dM -E - < /dev/null | grep __SIZEOF_LONG_LONG__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_long_long" != ""; then
  GCC_SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
  AC_MSG_RESULT($ac_cv_sizeof_long_long)
else
  GCC_SIZEOF_LONG_LONG=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_LONG_LONG)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_FLOAT__ )
AC_CACHE_VAL(ac_cv_sizeof_float,
[ac_cv_sizeof_float=`$CC -dM -E - < /dev/null | grep __SIZEOF_FLOAT__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_float" != ""; then
  GCC_SIZEOF_FLOAT=$ac_cv_sizeof_float
  AC_MSG_RESULT($ac_cv_sizeof_float)
else
  GCC_SIZEOF_FLOAT=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_FLOAT)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_DOUBLE__ )
AC_CACHE_VAL(ac_cv_sizeof_double,
[ac_cv_sizeof_double=`$CC -dM -E - < /dev/null | grep __SIZEOF_DOUBLE__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_double" != ""; then
  GCC_SIZEOF_DOUBLE=$ac_cv_sizeof_double
  AC_MSG_RESULT($ac_cv_sizeof_double)
else
  GCC_SIZEOF_DOUBLE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_DOUBLE)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_LONG_DOUBLE__ )
AC_CACHE_VAL(ac_cv_sizeof_long_double,
[ac_cv_sizeof_long_double=`$CC -dM -E - < /dev/null | grep __SIZEOF_LONG_DOUBLE__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_long_double" != ""; then
  GCC_SIZEOF_LONG_DOUBLE=$ac_cv_sizeof_long_double
  AC_MSG_RESULT($ac_cv_sizeof_long_double)
else
  GCC_SIZEOF_LONG_DOUBLE=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_LONG_DOUBLE)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_SIZE_T__ )
AC_CACHE_VAL(ac_cv_sizeof_size_t,
[ac_cv_sizeof_size_t=`$CC -dM -E - < /dev/null | grep __SIZEOF_SIZE_T__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_size_t" != ""; then
  GCC_SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
  AC_MSG_RESULT($ac_cv_sizeof_size_t)
else
  GCC_SIZEOF_SIZE_T=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_SIZE_T)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_POINTER__ )
AC_CACHE_VAL(ac_cv_sizeof_pointer,
[ac_cv_sizeof_pointer=`$CC -dM -E - < /dev/null | grep __SIZEOF_POINTER__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_pointer" != ""; then
  GCC_SIZEOF_POINTER=$ac_cv_sizeof_pointer
  AC_MSG_RESULT($ac_cv_sizeof_pointer)
else
  GCC_SIZEOF_POINTER=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_POINTER)dnl

AC_MSG_CHECKING(for CPP predefined macro __SIZEOF_PTRDIFF_T__ )
AC_CACHE_VAL(ac_cv_sizeof_ptrdiff_t,
[ac_cv_sizeof_ptrdiff_t=`$CC -dM -E - < /dev/null | grep __SIZEOF_PTRDIFF_T__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_sizeof_ptrdiff_t" != ""; then
  GCC_SIZEOF_PTRDIFF_T=$ac_cv_sizeof_ptrdiff_t
  AC_MSG_RESULT($ac_cv_sizeof_ptrdiff_t)
else
  GCC_SIZEOF_PTRDIFF_T=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_SIZEOF_PTRDIFF_T)dnl
])


dnl ============================================================
dnl  Test for GCC Width of Types:
dnl  ===========================
dnl
dnl    configure.ac:
dnl       AC_GCC_WIDTH_OF_TYPES
dnl
dnl ============================================================
AC_DEFUN([AC_GCC_WIDTH_OF_TYPES],
[dnl
AC_MSG_CHECKING(for CPP predefined macro __CHAR_BIT__ )
AC_CACHE_VAL(ac_cv_char_width,
[ac_cv_char_width=`$CC -dM -E - < /dev/null | grep __CHAR_BIT__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_char_width" != ""; then
  GCC_CHAR_WIDTH=$ac_cv_char_width
  AC_MSG_RESULT($ac_cv_char_width)
else
  GCC_CHAR_WIDTH=
  AC_MSG_RESULT(not defined)
fi
AC_SUBST(GCC_CHAR_WIDTH)dnl
])


dnl ============================================================
dnl  Test for GCC Byte Order:
dnl  =======================
dnl
dnl    configure.ac:
dnl       AC_GCC_BYTE_ORDER
dnl
dnl ============================================================
AC_DEFUN([AC_GCC_BYTE_ORDER],
[dnl
AC_MSG_CHECKING(for CPP predefined macro __BYTE_ORDER__ )
AC_CACHE_VAL(ac_cv_order_little_endian,
[ac_cv_order_little_endian=`$CC -dM -E - < /dev/null | grep __ORDER_LITTLE_ENDIAN__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
AC_CACHE_VAL(ac_cv_order_big_endian,
[ac_cv_order_big_endian=`$CC -dM -E - < /dev/null | grep __ORDER_BIG_ENDIAN__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
AC_CACHE_VAL(ac_cv_byte_order,
[ac_cv_byte_order=`$CC -dM -E - < /dev/null | grep __BYTE_ORDER__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_byte_order" = "__ORDER_LITTLE_ENDIAN__"; then
  GCC_BYTE_ORDER=1234
  GCC_BYTE_ORDER_LITTLE_ENDIAN=1
  GCC_BYTE_ORDER_BIG_ENDIAN=0
  AC_MSG_RESULT(Little-endian)
else
  GCC_BYTE_ORDER=4321
  GCC_BYTE_ORDER_LITTLE_ENDIAN=0
  GCC_BYTE_ORDER_BIG_ENDIAN=1
  AC_MSG_RESULT(Big-endian)
fi
AC_SUBST(GCC_BYTE_ORDER)dnl
AC_SUBST(GCC_BYTE_ORDER_LITTLE_ENDIAN)dnl
AC_SUBST(GCC_BYTE_ORDER_BIG_ENDIAN)dnl
])


dnl ============================================================
dnl  Test for GCC Float Word Order:
dnl  =============================
dnl
dnl    configure.ac:
dnl       AC_GCC_FLOAT_WORD_ORDER
dnl
dnl ============================================================
AC_DEFUN([AC_GCC_FLOAT_WORD_ORDER],
[dnl
AC_MSG_CHECKING(for CPP predefined macro __FLOAT_WORD_ORDER__ )
AC_CACHE_VAL(ac_cv_order_little_endian,
[ac_cv_order_little_endian=`$CC -dM -E - < /dev/null | grep __ORDER_LITTLE_ENDIAN__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
AC_CACHE_VAL(ac_cv_order_big_endian,
[ac_cv_order_big_endian=`$CC -dM -E - < /dev/null | grep __ORDER_BIG_ENDIAN__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
AC_CACHE_VAL(ac_cv_float_word_order,
[ac_cv_float_word_order=`$CC -dM -E - < /dev/null | grep __FLOAT_WORD_ORDER__ | cut -f3 -d' ' | tr '\n' ' ' | sed 's,^[ \t]*,,;s,[ \t]*$,,'`])dnl
if test "$ac_cv_float_word_order" = "__ORDER_LITTLE_ENDIAN__"; then
  GCC_FLOAT_WORD_ORDER=1234
  GCC_FLOAT_WORD_ORDER_LITTLE_ENDIAN=1
  GCC_FLOAT_WORD_ORDER_BIG_ENDIAN=0
  AC_MSG_RESULT(Little-endian)
else
  GCC_FLOAT_WORD_ORDER=4321
  GCC_FLOAT_WORD_ORDER_LITTLE_ENDIAN=0
  GCC_FLOAT_WORD_ORDER_BIG_ENDIAN=1
  AC_MSG_RESULT(Big-endian)
fi
AC_SUBST(GCC_FLOAT_WORD_ORDER)dnl
AC_SUBST(GCC_FLOAT_WORD_ORDER_LITTLE_ENDIAN)dnl
AC_SUBST(GCC_FLOAT_WORD_ORDER_BIG_ENDIAN)dnl
])


dnl =======================================================================
dnl  AC_GCC_PROGRAMMING_MODEL
dnl
dnl  Determine programming model corresponding to following list:
dnl
dnl    PROGRAMMING MODELS:
dnl    ------------------
dnl
dnl           PM: |     1 |     2 |        3  |     4 |        5  |      6
dnl    -----------+-------+-------+-----------+-------+-----------+--------
dnl               |  LP32 | ILP32 |     LP64  | ILP64 |    LLP64  | SILP64
dnl     Data type |       |       | (I32LP64) |       | (IL32P64) |
dnl    ===========|=======|=======|===========|=======|===========|========
dnl          char |     8 |     8 |         8 |     8 |         8 |      8
dnl    -----------+-------+-------+-----------+-------+-----------+--------
dnl         short |    16 |    16 |        16 |    16 |        16 |     64
dnl    -----------+-------+-------+-----------+-------+-----------+--------
dnl           int |    16 |    32 |        32 |    64 |        32 |     64
dnl    -----------+-------+-------+-----------+-------+-----------+--------
dnl          long |    32 |    32 |        64 |    64 |        32 |     64
dnl    -----------+-------+-------+-----------+-------+-----------+--------
dnl     long long |                     64
dnl    -----------+-------+-------+-----------+-------+-----------+--------
dnl       pointer |    32 |    32 |        64 |    64 |        64 |     64
dnl    -----------+-------+-------+-----------+-------+-----------+--------
dnl     ptrdiff_t |    32 |    32 |        64 |    64 |        64 |     64
dnl    ===========+=======+=======+===========+=======+===========+========
dnl          CPU: |       |  i686 |    x86_64 |       |           |
dnl
dnl    Many 64-bit platforms today use an LP64 model (including Solaris,
dnl    AIX, HP-UX, Linux, macOS, BSD, and IBM z/OS).  Microsoft Windows
dnl    uses an LLP64 model.  The disadvantage of the LP64 model is that
dnl    storing a long into an int may overflow.  On the other hand,
dnl    converting a pointer to a long will “work” in LP64. In the LLP64
dnl    model, the reverse is true.  These are not problems which affect
dnl    fully standard-compliant code, but code is often written with
dnl    implicit assumptions about the widths of data types. C code
dnl    should prefer (u)intptr_t instead of long when casting pointers
dnl    into integer objects.
dnl
dnl =======================================================================
AC_DEFUN([AC_GCC_PROGRAMMING_MODEL],
[AC_REQUIRE([AC_GCC_TYPES])dnl
AC_REQUIRE([AC_GCC_SIZEOF_TYPES])dnl
AC_CACHE_CHECK(for Target Machine Programming Model, ac_cv_gcc_programming_model,
ac_cv_gcc_programming_model=unknown  dnl Initialize to unknown
[
silp=${ac_cv_sizeof_short}${ac_cv_sizeof_int}${ac_cv_sizeof_long}${ac_cv_sizeof_pointer}
changequote(,)dnl
case "$silp" in
   2244)
      ac_cv_gcc_programming_model=LP32
      ac_cv_gcc_programming_model_silp=2244
      ac_cv_gcc_programming_model_id=1
      ;;
   2444)
      ac_cv_gcc_programming_model=ILP32
      ac_cv_gcc_programming_model_silp=2444
      ac_cv_gcc_programming_model_id=2
      ;;
   2488)
      ac_cv_gcc_programming_model=LP64
      ac_cv_gcc_programming_model_silp=2488
      ac_cv_gcc_programming_model_id=3
      ;;
   2888)
      ac_cv_gcc_programming_model=ILP64
      ac_cv_gcc_programming_model_silp=2888
      ac_cv_gcc_programming_model_id=4
      ;;
   2448)
      ac_cv_gcc_programming_model=LLP64
      ac_cv_gcc_programming_model_silp=2448
      ac_cv_gcc_programming_model_id=5
      ;;
   8888)
      ac_cv_gcc_programming_model=SILP64
      ac_cv_gcc_programming_model_silp=8888
      ac_cv_gcc_programming_model_id=6
      ;;
   *)
changequote([,])dnl
      ac_cv_c_programming_model=unknown
      ;;
esac
]
if test $ac_cv_gcc_programming_model = unknown ; then
  AC_MSG_ERROR([
********   ${TB}Not able to determine programming model.${TN}])
elif test $ac_cv_gcc_programming_model = LP32 ; then
  AC_MSG_ERROR([
********   ${TB}MPU Library does not support LP32 programming model.${TN}])
elif test $ac_cv_gcc_programming_model = IPL64 ; then
  AC_MSG_ERROR([
********   ${TB}MPU Library does not support IPL64 programming model.${TN}])
elif test $ac_cv_gcc_programming_model = SIPL64 ; then
  AC_MSG_ERROR([
********   ${TB}MPU Library does not support SIPL64 programming model.${TN}])
fi
)

dnl =======================================================================
dnl Programming model IDs:
dnl =======================================================================
AC_SUBST(PM_LP32, 1)
AC_SUBST(PM_ILP32, 2)
AC_SUBST(PM_LP64, 3)
AC_SUBST(PM_ILP64, 4)
AC_SUBST(PM_LLP64, 5)
AC_SUBST(PM_SILP64, 6)

AC_DEFINE([__PM_LP32], [1], [The ID of LP32 programming model.])dnl
AC_DEFINE([__PM_ILP32], [2], [The ID of ILP32 programming model.])dnl
AC_DEFINE([__PM_LP64], [3], [The ID of LP64 programming model.])dnl
AC_DEFINE([__PM_ILP64], [4], [The ID of ILP64 programming model.])dnl
AC_DEFINE([__PM_LLP64], [5], [The ID of LLP64 programming model.])dnl
AC_DEFINE([__PM_SILP64], [6], [The ID of SILP64 programming model.])dnl

dnl =======================================================================
dnl EMUSHORT, EMULONG Types:
dnl =======================================================================
AC_SUBST(LIBMPU_EMUSHORT_TYPE, $ac_cv_int32_type)
AC_SUBST(LIBMPU_UINT32_CONST_SUFFIX, $ac_cv_uint32_const_suffix)
AC_SUBST(LIBMPU_SIZEOF_EMUSHORT, 4)
AC_SUBST(LIBMPU_EMUSHORT_WIDTH, 32)

AC_DEFINE_UNQUOTED([EMUSHORT], [$ac_cv_uint32_type], [The type of unsigned 32-bit integer variables.])dnl
AC_DEFINE_UNQUOTED([EMUSHORT_C(c)], [c ## $ac_cv_uint32_const_suffix], [The macro for expand the EMUSHORT value to constant expression.])dnl
AC_DEFINE([SIZE_OF_EMUSHORT], [4], [The size of EMUSHORT type in bytes.])dnl
AC_DEFINE([BITS_PER_EMUSHORT], [32], [The size of EMUSHORT type in bits.])dnl

AC_SUBST(LIBMPU_EMUPART_TYPE, $ac_cv_int32_type)
AC_SUBST(LIBMPU_SIZEOF_EMUPART, 4)
AC_SUBST(LIBMPU_EMUPART_WIDTH, 32)

AC_DEFINE_UNQUOTED([EMUPART], [$ac_cv_uint32_type], [The type of unsigned 32-bit integer variables.])dnl
AC_DEFINE_UNQUOTED([EMUPART_C(c)], [c ## $ac_cv_uint32_const_suffix], [The macro for expand the EMUPART value to constant expression.])dnl
AC_DEFINE([SIZE_OF_EMUPART], [4], [The size of EMUPART type in bytes.])dnl
AC_DEFINE([BITS_PER_EMUPART], [32], [The size of EMUPART type in bits.])dnl

AC_SUBST(LIBMPU_EMULONG_TYPE, $ac_cv_int64_type)
AC_SUBST(LIBMPU_UINT64_CONST_SUFFIX, $ac_cv_uint64_const_suffix)
AC_SUBST(LIBMPU_SIZEOF_EMULONG, 8)
AC_SUBST(LIBMPU_EMULONG_WIDTH, 64)

AC_DEFINE_UNQUOTED([EMULONG], [$ac_cv_uint64_type], [The type of unsigned 64-bit integer variables.])dnl
AC_DEFINE_UNQUOTED([EMULONG_C(c)], [c ## $ac_cv_uint64_const_suffix], [The macro for expand the EMULONG value to constant expression.])dnl
AC_DEFINE([SIZE_OF_EMULONG], [8], [The size of EMULONG type in bytes.])dnl
AC_DEFINE([BITS_PER_EMULONG], [64], [The size of EMULONG type in bits.])dnl

AC_DEFINE_UNQUOTED([BITS_PER_BYTE], [$ac_cv_char_width], [The size of BYTE or UNIT type in bits.])dnl

AC_SUBST(GCC_PROGRAMMING_MODEL, $ac_cv_gcc_programming_model)
AC_SUBST(GCC_PROGRAMMING_MODEL_SILP, $ac_cv_gcc_programming_model_silp)
AC_SUBST(GCC_PROGRAMMING_MODEL_ID, $ac_cv_gcc_programming_model_id)

AC_DEFINE_UNQUOTED([__PROGRAMMING_MODEL], [$ac_cv_gcc_programming_model], [The programming model name.])dnl
AC_DEFINE_UNQUOTED([__PROGRAMMING_MODEL_SILP], [$ac_cv_gcc_programming_model_silp], [The programming model sizes of short, int, long, pointer types.])dnl
AC_DEFINE_UNQUOTED([__PROGRAMMING_MODEL_ID], [$ac_cv_gcc_programming_model_id], [The programming model identificator.])dnl
])


AC_DEFUN([AC_LIBMPU_LT_VERSION_INFO],
[AC_MSG_CHECKING(for MPU Library Version Information)
#
# Made LT_VERSION_INFO so that library version matches PACKAGE_VERSION:
#
major=`echo ${PACKAGE_VERSION} | cut -f1 -d'.'`
minor=`echo ${PACKAGE_VERSION} | cut -f2 -d'.'`
patch=`echo ${PACKAGE_VERSION} | cut -f3 -d'.'`

current=$( expr ${major} + ${patch} )
revision=${minor}
age=${patch}

ac_cv_libmpu_lt_release="${major}.${minor}"
ac_cv_libmpu_lt_current="${current}"
ac_cv_libmpu_lt_revision="${revision}"
ac_cv_libmpu_lt_age="${age}"

ac_cv_libmpu_lt_version_info="${major}:${age}:${revision}"

AC_SUBST(LIBMPU_LT_RELEASE, $ac_cv_libmpu_lt_release)
AC_SUBST(LIBMPU_LT_VERSION_INFO, $ac_cv_libmpu_lt_version_info)
AC_SUBST(LIBMPU_LT_CURRENT, $ac_cv_libmpu_lt_current)
AC_SUBST(LIBMPU_LT_REVISION, $ac_cv_libmpu_lt_revision)
AC_SUBST(LIBMPU_LT_AGE, $ac_cv_libmpu_lt_age)

AC_MSG_RESULT($ac_cv_libmpu_lt_version_info)
if test "$ac_cv_libmpu_lt_version_info" = ""; then
AC_MSG_ERROR([
********   ${TB}The MPU Library Version Information does not declared.${TN}])
fi
])


dnl ============================================================
dnl  Test if LD_LIBRARY_PATH contains the notation for the
dnl  current directory since this would lead to problems
dnl  installing/building kxlibc .
dnl
dnl  LD_LIBRARY_PATH contains the current directory if one
dnl  of the following is true:
dnl     - one of the terminals (":" and ";") is the first or
dnl       last sign;
dnl     - two terminals occur directly after each other;
dnl     - the path contains an element with a dot in it .
dnl ============================================================
AC_DEFUN([AC_LD_LIBRARY_PATH],
[AC_MSG_CHECKING(for LD_LIBRARY_PATH does not contain current directory)
changequote(,)dnl
case ${LD_LIBRARY_PATH} in
   [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
      ld_library_path_setting="contains current directory"
      ;;
   *)
      ld_library_path_setting="ok"
      ;;
esac
changequote([,])dnl
AC_MSG_RESULT($ld_library_path_setting)
if test "$ld_library_path_setting" != "ok"; then
AC_MSG_ERROR([
********   ${TB}LD_LIBRARY_PATH shouldn't contain the current directory when${TN}
********   ${TB}building MPU Library. Please change the environment variable${TN}
********   ${TB}and run configure again.${TN}])
fi
])