+# FPTOOLS_SET_C_LD_FLAGS
+# ----------------------------------
+# Set the C, LD and CPP flags for a given platform
+# $1 is the platform
+# $2 is the name of the CC flags variable
+# $3 is the name of the linker flags variable when linking with gcc
+# $4 is the name of the linker flags variable when linking with ld
+# $5 is the name of the CPP flags variable
+AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
+[
+ AC_MSG_CHECKING([Setting up $2, $3, $4 and $5])
+ case $$1 in
+ i386-apple-darwin)
+ # By default, gcc on OS X will generate SSE
+ # instructions, which need things 16-byte aligned,
+ # but we don't 16-byte align things. Thus drop
+ # back to generic i686 compatibility. Trac #2983.
+ $2="$$2 -march=i686 -m32"
+ $3="$$3 -march=i686 -m32"
+ $4="$$4 -arch i386"
+ $5="$$5 -march=i686 -m32"
+ ;;
+ x86_64-apple-darwin)
+ $2="$$2 -m64"
+ $3="$$3 -m64"
+ $4="$$4 -arch x86_64"
+ $5="$$5 -m64"
+ ;;
+ esac
+
+ case $$1 in
+ i386-apple-darwin|x86_64-apple-darwin)
+ # We support back to OS X 10.5
+ $2="$$2 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
+ $3="$$3 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
+ $4="$$4 -macosx_version_min 10.5"
+ $5="$$5 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5"
+ ;;
+ esac
+
+ # If gcc knows about the stack protector, turn it off.
+ # Otherwise the stack-smash handler gets triggered.
+ echo 'int main(void) {return 0;}' > conftest.c
+ if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1
+ then
+ $2="$$2 -fno-stack-protector"
+ fi
+ rm -f conftest.c conftest.o
+ AC_MSG_RESULT([done])
+])
+
+
+# FP_VISIBILITY_HIDDEN
+# ----------------------------------
+# Is the visibility hidden attribute supported?
+AC_DEFUN([FP_VISIBILITY_HIDDEN],
+[
+ AC_MSG_CHECKING([whether __attribute__((visibility("hidden"))) is supported])
+ echo '__attribute__((visibility("hidden"))) void foo(void) {}' > conftest.c
+ if $CC -Wall -Werror -c conftest.c > /dev/null 2>&1
+ then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAS_VISIBILITY_HIDDEN, 1, [Has visibility hidden])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ rm -f conftest.c conftest.o
+])
+
+
+# FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
+# ----------------------------------
+# Little endian Arm on Linux with some ABIs has big endian word order
+# in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
+AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
+ [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#include <endian.h>],
+ [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
+ return 0;
+ #else
+ not float word order big endian
+ #endif]
+ )],
+ [fptools_cv_float_word_order_bigendian=yes],
+ [fptools_cv_float_word_order_bigendian=no])
+ ])
+ case $fptools_cv_float_word_order_bigendian in
+ yes)
+ AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
+ [Define to 1 if your processor stores words of floats with
+ the most significant byte first]) ;;
+ esac
+])
+
+