Kaydet (Commit) e83393a9 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Make C++ AC_RUN_IFELSE check link on Windows

Change-Id: Idb4e50a98a2fcdd1746ef14fc0dbe53bf1d7db8a
üst 3324d52d
...@@ -6225,34 +6225,6 @@ if test "$GCC" = "yes"; then ...@@ -6225,34 +6225,6 @@ if test "$GCC" = "yes"; then
fi fi
AC_SUBST(HAVE_GCC_PRAGMA_OPERATOR) AC_SUBST(HAVE_GCC_PRAGMA_OPERATOR)
AC_MSG_CHECKING([whether $CXX has broken static initializer_list support])
save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
AC_LANG_PUSH([C++])
AC_RUN_IFELSE([AC_LANG_PROGRAM([[
// Exit with failure if the static initializer_list is stored on the stack
// (as done by Clang < 3.4):
#include <initializer_list>
struct S {};
bool g(void const * p1, void const * p2) {
int n;
return !((p1 > p2 && p2 > &n) || (p1 < p2 && p2 < &n));
}
bool f(void const * p1) {
static std::initializer_list<S> s { S() };
return g(p1, s.begin());
}
]],[[
int n;
return f(&n) ? 0 : 1;
]])], [broken=no], [broken=yes])
AC_LANG_POP([C++])
CXXFLAGS=$save_CXXFLAGS
AC_MSG_RESULT([$broken])
if test "$broken" = yes; then
AC_DEFINE([HAVE_BROKEN_STATIC_INITILIZER_LIST])
fi
dnl =================================================================== dnl ===================================================================
dnl system stl sanity tests dnl system stl sanity tests
dnl =================================================================== dnl ===================================================================
...@@ -12582,22 +12554,30 @@ fi ...@@ -12582,22 +12554,30 @@ fi
# #
# Set up ILIB for MSVC build # Set up ILIB for MSVC build
# #
ILIB1=
if test "$build_os" = "cygwin"; then if test "$build_os" = "cygwin"; then
ILIB="." ILIB="."
if test -n "$JAVA_HOME" -a "$JAVA_HOME" != "NO_JAVA_HOME"; then if test -n "$JAVA_HOME" -a "$JAVA_HOME" != "NO_JAVA_HOME"; then
ILIB="$ILIB;$JAVA_HOME/lib" ILIB="$ILIB;$JAVA_HOME/lib"
fi fi
ILIB1=-link
if test "$BITNESS_OVERRIDE" = 64; then if test "$BITNESS_OVERRIDE" = 64; then
ILIB="$ILIB;$COMPATH/lib/amd64" ILIB="$ILIB;$COMPATH/lib/amd64"
ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/amd64"
ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/x64" ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/x64"
ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/x64"
if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81; then if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81; then
ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/x64" ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/x64"
ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/x64"
fi fi
else else
ILIB="$ILIB;$COMPATH/lib" ILIB="$ILIB;$COMPATH/lib"
ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib"
ILIB="$ILIB;$WINDOWS_SDK_HOME/lib" ILIB="$ILIB;$WINDOWS_SDK_HOME/lib"
ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib"
if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81; then if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81; then
ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/x86" ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/x86"
ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/x86"
fi fi
fi fi
ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib" ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
...@@ -12605,6 +12585,39 @@ if test "$build_os" = "cygwin"; then ...@@ -12605,6 +12585,39 @@ if test "$build_os" = "cygwin"; then
AC_SUBST(ILIB) AC_SUBST(ILIB)
fi fi
AC_MSG_CHECKING([whether $CXX has broken static initializer_list support])
save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
save_LIBS=$LIBS
if test -n "$ILIB1"; then
LIBS="$LIBS $ILIB1"
fi
AC_LANG_PUSH([C++])
AC_RUN_IFELSE([AC_LANG_PROGRAM([[
// Exit with failure if the static initializer_list is stored on the stack
// (as done by Clang < 3.4):
#include <initializer_list>
struct S {};
bool g(void const * p1, void const * p2) {
int n;
return !((p1 > p2 && p2 > &n) || (p1 < p2 && p2 < &n));
}
bool f(void const * p1) {
static std::initializer_list<S> s { S() };
return g(p1, s.begin());
}
]],[[
int n;
return f(&n) ? 0 : 1;
]])], [broken=no], [broken=yes])
AC_LANG_POP([C++])
LIBS=$save_LIBS
CXXFLAGS=$save_CXXFLAGS
AC_MSG_RESULT([$broken])
if test "$broken" = yes; then
AC_DEFINE([HAVE_BROKEN_STATIC_INITILIZER_LIST])
fi
# =================================================================== # ===================================================================
# Creating bigger shared library to link against # Creating bigger shared library to link against
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment