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

Enable C++17 for clang-cl, too

Similar to libc++ in C++17 mode, some types like std::auto_ptr are indeed
removed in C++17 mode by default, and need _HAS_AUTO_PTR_ETC=1 to be enabled
(see <https://blogs.msdn.microsoft.com/vcblog/2017/12/08/c17-feature-removals-
and-deprecations/>).

Unlike libc++, also std::binary_function and std::unary_function are removed
(and need the same _HAS_AUTO_PTR_ETC=1 to enable).  So either set that flag to
make external code build, or use patches (for external/mdds) to make externals'
files included in LO proper still work there.

Change-Id: I886cc0de8196255334ee03ec48cb4bc54d460afd
Reviewed-on: https://gerrit.libreoffice.org/46514Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarStephan Bergmann <sbergman@redhat.com>
üst be46bc5d
......@@ -69,6 +69,7 @@ void ReservedId::run() {
&& id != "_ATL_STATIC_REGISTRY"
// extensions/source/activex/StdAfx2.h
&& id != "_GLIBCXX_CDTOR_CALLABI"
&& id != "_HAS_AUTO_PTR_ETC" // unotools/source/i18n/resmgr.cxx
&& id != "_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR" // unotools/source/i18n/resmgr.cxx
&& id != "_MAX_PATH" // Windows
&& id != "_POSIX_SOURCE"
......
......@@ -6037,11 +6037,11 @@ libo_FUZZ_ARG_ENABLE(c++17,
)
CXXFLAGS_CXX11=
if test "$COM" = MSC; then
if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
AC_MSG_CHECKING([whether $CXX supports C++11])
AC_MSG_RESULT(yes)
# MSVC supports (a subset of) CXX11 without any switch
elif test "$GCC" = "yes"; then
elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
HAVE_CXX11=
AC_MSG_CHECKING([whether $CXX supports C++17, C++14, or C++11])
dnl But only use C++17 if the gperf that is being used knows not to emit
......@@ -6052,6 +6052,9 @@ elif test "$GCC" = "yes"; then
my_flags="-std=gnu++17 -std=gnu++1z -std=c++17 -std=c++1z $my_flags"
fi
for flag in $my_flags; do
if test "$COM" = MSC; then
flag="-Xclang $flag"
fi
save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $flag -Werror"
if test "$SYSTEM_LIBCMIS" = TRUE; then
......
......@@ -18,6 +18,13 @@ $(eval $(call gb_StaticLibrary_add_defs,boost_date_time,\
-DBOOST_ALL_NO_LIB \
))
# Needed when building against MSVC in C++17 mode, as
# workdir/UnpackedTarball/boost/boost/numeric/conversion/detail/converter.hpp uses
# std::unary_function:
$(eval $(call gb_StaticLibrary_add_defs,boost_date_time, \
-D_HAS_AUTO_PTR_ETC=1 \
))
$(eval $(call gb_StaticLibrary_use_external,boost_date_time,boost_headers))
$(eval $(call gb_StaticLibrary_set_generated_cxx_suffix,boost_date_time,cpp))
......
......@@ -18,9 +18,10 @@ $(eval $(call gb_StaticLibrary_add_defs,boost_locale,\
-DBOOST_ALL_NO_LIB -DBOOST_LOCALE_NO_WINAPI_BACKEND -DBOOST_LOCALE_NO_POSIX_BACKEND -DBOOST_USE_WINDOWS_H \
))
# Needed when building against libc++ in C++17 mode, as Boost 1.65.1
# Needed when building against MSVC resp. libc++ in C++17 mode, as Boost 1.65.1
# workdir/UnpackedTarball/boost/boost/locale/generator.hpp contains "std::auto_ptr<data> d;":
$(eval $(call gb_StaticLibrary_add_defs,boost_locale, \
-D_HAS_AUTO_PTR_ETC=1 \
-D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR \
))
......
......@@ -29,6 +29,12 @@ $(eval $(call gb_Library_add_defs,clucene,\
-Dclucene_contribs_lib_EXPORTS \
))
# Needed when building against MSVC in C++17 mode, as
# workdir/UnpackedTarball/clucene/src/core/CLucene/util/Equators.h uses std::binary_function:
$(eval $(call gb_Library_add_defs,clucene, \
-D_HAS_AUTO_PTR_ETC=1 \
))
# clucene is riddled with warnings... let's spare use
# the pointless spamming
$(eval $(call gb_Library_add_cxxflags,clucene,\
......
......@@ -30,6 +30,12 @@ $(eval $(call gb_Library_add_defs,orcus-parser,\
-D__ORCUS_PSR_BUILDING_DLL \
))
# Needed when building against MSVC in C++17 mode, as
# workdir/UnpackedTarball/liborcus/include/orcus/global.hpp uses std::unary_function:
$(eval $(call gb_Library_add_defs,orcus-parser, \
-D_HAS_AUTO_PTR_ETC=1 \
))
$(eval $(call gb_Library_set_generated_cxx_suffix,orcus-parser,cpp))
$(eval $(call gb_Library_add_generated_exception_objects,orcus-parser,\
......
......@@ -36,6 +36,12 @@ $(eval $(call gb_Library_add_defs,orcus,\
-D__ORCUS_XLS_XML \
))
# Needed when building against MSVC in C++17 mode, as
# workdir/UnpackedTarball/liborcus/src/liborcus/css_document_tree.cpp uses std::unary_function:
$(eval $(call gb_Library_add_defs,orcus, \
-D_HAS_AUTO_PTR_ETC=1 \
))
$(eval $(call gb_Library_use_libraries,orcus,\
orcus-parser \
))
......
......@@ -14,6 +14,7 @@ $(eval $(call gb_UnpackedTarball_set_tarball,mdds,$(MDDS_TARBALL)))
$(eval $(call gb_UnpackedTarball_set_patchlevel,mdds,0))
$(eval $(call gb_UnpackedTarball_add_patches,mdds,\
external/mdds/c++17.patch \
))
# vim: set noet sw=4 ts=4:
--- include/mdds/multi_type_matrix.hpp
+++ include/mdds/multi_type_matrix.hpp
@@ -149,7 +149,7 @@
private:
template<typename _Func>
- struct walk_func : std::unary_function<typename store_type::const_iterator::value_type, void>
+ struct walk_func
{
_Func& m_func;
walk_func(_Func& func) : m_func(func) {}
--- include/mdds/multi_type_vector.hpp
+++ include/mdds/multi_type_vector.hpp
@@ -139,7 +139,7 @@
block& operator=(block);
};
- struct element_block_deleter : public std::unary_function<void, const element_block_type*>
+ struct element_block_deleter
{
void operator() (const element_block_type* p)
{
......@@ -23,6 +23,8 @@
#include <config_libcxx.h>
#if HAVE_LIBCXX && __cplusplus >= 201703L
#define _LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR
#elif defined _MSC_VER && __cplusplus >= 201703L
#define _HAS_AUTO_PTR_ETC 1
#endif
#include <config_folders.h>
......
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