Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
44159c6c
Kaydet (Commit)
44159c6c
authored
Haz 13, 2013
tarafından
Luboš Luňák
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
split the 'can we use C++11' check into independent tests for each problem
Change-Id: If0fdc13b02ca6dd4eb67afee5b308d2e51a5b30d
üst
d7ae9f77
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
78 additions
and
47 deletions
+78
-47
configure.ac
configure.ac
+78
-47
No files found.
configure.ac
Dosyayı görüntüle @
44159c6c
...
@@ -5560,31 +5560,51 @@ dnl C++11
...
@@ -5560,31 +5560,51 @@ dnl C++11
dnl ===================================================================
dnl ===================================================================
CXXFLAGS_CXX11=
CXXFLAGS_CXX11=
HAVE_CXX11=
if test "$GCC" = "yes"; then
if test "$GCC" = "yes"; then
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
CXXFLAGS_CXX11=
AC_MSG_CHECKING([whether $CXX supports C++11])
for flag in -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x ; do
save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $flag -Werror"
AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[void f() {}]])],[CXXFLAGS_CXX11=$flag])
AC_LANG_POP([C++])
CXXFLAGS=$save_CXXFLAGS
if test -n "$CXXFLAGS_CXX11"; then
HAVE_CXX11=TRUE
break
fi
done
if test "$HAVE_CXX11" = TRUE; then
AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
else
AC_MSG_RESULT(no)
fi
if test "$HAVE_CXX11" = TRUE; then
AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
# This should check libstdc++ version, not gcc, but clang has incidentally C++11 support
# disabled in this case by the __float128 case below.
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#if __GNUC__ == 4 && __GNUC_MINOR__ == 7 && (__GNUC_PATCHLEVEL__ == 0 || __GNUC_PATCHLEVEL__ == 1)
#if __GNUC__ == 4 && __GNUC_MINOR__ == 7 && (__GNUC_PATCHLEVEL__ == 0 || __GNUC_PATCHLEVEL__ == 1)
abi broken
#else
#else
abi ok
#endif
#endif
]])],[HAVE_BROKEN_ABI=TRUE],[HAVE_BROKEN_ABI=FALSE])
]])], [AC_MSG_RESULT(no, ok)],
[AC_MSG_RESULT(yes, disabling C++11)
HAVE_CXX11=])
fi
AC_MSG_CHECKING([whether $CXX supports C++11 without Language Defect 757])
if test "$HAVE_CXX11" = TRUE; then
# This should check libstdc++ version, not gcc, but clang has incidentally C++11 support
AC_MSG_CHECKING([whether $CXX supports C++11 without Language Defect 757])
# disabled in this case by the __float128 case below.
if test "$HAVE_BROKEN_ABI" = "TRUE"; then
AC_MSG_NOTICE([Not using -std=gnu++0x on $CXX version 4.7.0/4.7.1 due to libstdc++ ABI breakage.])
else
save_CXXFLAGS=$CXXFLAGS
save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS
-std=gnu++0x
"
CXXFLAGS="$CXXFLAGS
$CXXFLAGS_CXX11
"
AC_LANG_PUSH([C++])
AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <stddef.h>
#include <stddef.h>
#include <vector>
// some Clang fail when compiling against GCC 4.7 headers with -std=gnu++0x
// (__float128)
template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
namespace
namespace
...
@@ -5607,22 +5627,37 @@ size_t i = sizeof(sal_n_array_size(thinga));
...
@@ -5607,22 +5627,37 @@ size_t i = sizeof(sal_n_array_size(thinga));
size_t j = sizeof(sal_n_array_size(thingb));
size_t j = sizeof(sal_n_array_size(thingb));
return !(i != 0 && j != 0);
return !(i != 0 && j != 0);
]])
]])
],[
], [ AC_MSG_RESULT(yes) ],
HAVE_CXX11=TRUE
[ AC_MSG_RESULT(no)
if test "$CPP_LIBRARY" = LIBCPP -a $_os = Darwin; then
HAVE_CXX11=
: Already set CXX to contain -std=c++11
])
else
AC_LANG_POP([C++])
CXXFLAGS_CXX11=-std=gnu++0x
CXXFLAGS=$save_CXXFLAGS
fi
fi
],[])
if test "$HAVE_CXX11" = TRUE; then
AC_MSG_CHECKING([whether $CXX supports C++11 without __float128 compile error])
save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <vector>
// some Clang fail when compiling against GCC 4.7 headers with -std=gnu++0x
// (__float128)
]])
],[ AC_MSG_RESULT(yes) ],
[ AC_MSG_RESULT(no)
HAVE_CXX11=
])
AC_LANG_POP([C++])
AC_LANG_POP([C++])
CXXFLAGS=$save_CXXFLAGS
CXXFLAGS=$save_CXXFLAGS
fi
fi
if test "$HAVE_CXX11" = "TRUE"; then
AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
if test "$HAVE_CXX11" != "TRUE" -a -n "$CXXFLAGS_CXX11"; then
else
AC_MSG_NOTICE([Disabling C++11 support])
AC_MSG_RESULT([no])
CXXFLAGS_CXX11=
fi
fi
fi
fi
...
@@ -5633,8 +5668,8 @@ dnl ==================================
...
@@ -5633,8 +5668,8 @@ dnl ==================================
dnl Check for C++11 "= delete" support
dnl Check for C++11 "= delete" support
dnl ==================================
dnl ==================================
AC_MSG_CHECKING([whether $CXX supports C++11 = delete syntax])
if test "$HAVE_CXX11" = "TRUE"; then
if test "$HAVE_CXX11" = "TRUE"; then
AC_MSG_CHECKING([whether $CXX supports C++11 = delete syntax])
save_CXXFLAGS=$CXXFLAGS
save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
AC_LANG_PUSH([C++])
AC_LANG_PUSH([C++])
...
@@ -5653,16 +5688,14 @@ struct A
...
@@ -5653,16 +5688,14 @@ struct A
else
else
AC_MSG_RESULT([no])
AC_MSG_RESULT([no])
fi
fi
else
AC_MSG_RESULT([no])
fi
fi
dnl ==================================
dnl ==================================
dnl Check for C++11 "override" support
dnl Check for C++11 "override" support
dnl ==================================
dnl ==================================
AC_MSG_CHECKING([whether $CXX supports C++11 "override" syntax])
if test "$HAVE_CXX11" = "TRUE"; then
if test "$HAVE_CXX11" = "TRUE"; then
AC_MSG_CHECKING([whether $CXX supports C++11 "override" syntax])
save_CXXFLAGS=$CXXFLAGS
save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
AC_LANG_PUSH([C++])
AC_LANG_PUSH([C++])
...
@@ -5686,16 +5719,14 @@ struct B : A
...
@@ -5686,16 +5719,14 @@ struct B : A
else
else
AC_MSG_RESULT([no])
AC_MSG_RESULT([no])
fi
fi
else
AC_MSG_RESULT([no])
fi
fi
dnl ==================================
dnl ==================================
dnl Check for C++11 "final" support
dnl Check for C++11 "final" support
dnl ==================================
dnl ==================================
AC_MSG_CHECKING([whether $CXX supports C++11 "final" syntax])
if test "$HAVE_CXX11" = "TRUE"; then
if test "$HAVE_CXX11" = "TRUE"; then
AC_MSG_CHECKING([whether $CXX supports C++11 "final" syntax])
save_CXXFLAGS=$CXXFLAGS
save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
AC_LANG_PUSH([C++])
AC_LANG_PUSH([C++])
...
@@ -5755,30 +5786,30 @@ struct D : C
...
@@ -5755,30 +5786,30 @@ struct D : C
else
else
AC_MSG_RESULT([no])
AC_MSG_RESULT([no])
fi
fi
else
AC_MSG_RESULT([no])
fi
fi
dnl ===================================================================
dnl ===================================================================
dnl Check for C++11 perfect forwarding support
dnl Check for C++11 perfect forwarding support
dnl ===================================================================
dnl ===================================================================
AC_MSG_CHECKING([whether $CXX supports C++11 perfect forwarding])
if test "$HAVE_CXX11" = "TRUE"; then
save_CXXFLAGS=$CXXFLAGS
AC_MSG_CHECKING([whether $CXX supports C++11 perfect forwarding])
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
save_CXXFLAGS=$CXXFLAGS
AC_LANG_PUSH([C++])
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <utility>
#include <utility>
template<typename T, typename... Args> T * f(Args &&... v) {
template<typename T, typename... Args> T * f(Args &&... v) {
return new T(std::forward<Args>(v)...);
return new T(std::forward<Args>(v)...);
}
}
]], [[
]], [[
f<int>(0);
f<int>(0);
]])], [perfect_forwarding=yes], [perfect_forwarding=no])
]])], [perfect_forwarding=yes], [perfect_forwarding=no])
AC_LANG_POP([C++])
AC_LANG_POP([C++])
CXXFLAGS=$save_CXXFLAGS
CXXFLAGS=$save_CXXFLAGS
AC_MSG_RESULT([$perfect_forwarding])
AC_MSG_RESULT([$perfect_forwarding])
if test "$perfect_forwarding" = yes; then
if test "$perfect_forwarding" = yes; then
AC_DEFINE([HAVE_CXX11_PERFECT_FORWARDING])
AC_DEFINE([HAVE_CXX11_PERFECT_FORWARDING])
fi
fi
fi
dnl ===================================================================
dnl ===================================================================
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment