[Libreoffice-commits] core.git: compilerplugins/clang configure.ac external/boost external/clucene external/liborcus external/mdds unotools/source

Stephan Bergmann sbergman at redhat.com
Fri Dec 15 21:27:08 UTC 2017


 compilerplugins/clang/reservedid.cxx            |    1 +
 configure.ac                                    |    7 +++++--
 external/boost/StaticLibrary_boost_date_time.mk |    7 +++++++
 external/boost/StaticLibrary_boost_locale.mk    |    3 ++-
 external/clucene/Library_clucene.mk             |    6 ++++++
 external/liborcus/Library_orcus-parser.mk       |    6 ++++++
 external/liborcus/Library_orcus.mk              |    6 ++++++
 external/mdds/UnpackedTarball_mdds.mk           |    1 +
 external/mdds/c++17.patch                       |   22 ++++++++++++++++++++++
 unotools/source/i18n/resmgr.cxx                 |    2 ++
 10 files changed, 58 insertions(+), 3 deletions(-)

New commits:
commit c5f6043b0f2c4cb521e8694dbf3dd355042fd704
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Dec 15 11:05:00 2017 +0100

    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/46514
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/compilerplugins/clang/reservedid.cxx b/compilerplugins/clang/reservedid.cxx
index ad1dcece0037..82bbc7ea033c 100644
--- a/compilerplugins/clang/reservedid.cxx
+++ b/compilerplugins/clang/reservedid.cxx
@@ -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"
diff --git a/configure.ac b/configure.ac
index 6645af1aab51..bd5f184f66ae 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
diff --git a/external/boost/StaticLibrary_boost_date_time.mk b/external/boost/StaticLibrary_boost_date_time.mk
index ef97e25c8823..9f871ee164fe 100644
--- a/external/boost/StaticLibrary_boost_date_time.mk
+++ b/external/boost/StaticLibrary_boost_date_time.mk
@@ -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))
diff --git a/external/boost/StaticLibrary_boost_locale.mk b/external/boost/StaticLibrary_boost_locale.mk
index b6734d149c14..520131fb9174 100644
--- a/external/boost/StaticLibrary_boost_locale.mk
+++ b/external/boost/StaticLibrary_boost_locale.mk
@@ -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 \
 ))
 
diff --git a/external/clucene/Library_clucene.mk b/external/clucene/Library_clucene.mk
index e0f04b6e2894..abc14d903f46 100644
--- a/external/clucene/Library_clucene.mk
+++ b/external/clucene/Library_clucene.mk
@@ -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,\
diff --git a/external/liborcus/Library_orcus-parser.mk b/external/liborcus/Library_orcus-parser.mk
index 4c2ca7f291db..83a4a2f48806 100644
--- a/external/liborcus/Library_orcus-parser.mk
+++ b/external/liborcus/Library_orcus-parser.mk
@@ -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,\
diff --git a/external/liborcus/Library_orcus.mk b/external/liborcus/Library_orcus.mk
index 9916f6fe5236..6457ec4afc0c 100644
--- a/external/liborcus/Library_orcus.mk
+++ b/external/liborcus/Library_orcus.mk
@@ -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 \
 ))
diff --git a/external/mdds/UnpackedTarball_mdds.mk b/external/mdds/UnpackedTarball_mdds.mk
index c015f4c13f5a..93eb3e6214fd 100644
--- a/external/mdds/UnpackedTarball_mdds.mk
+++ b/external/mdds/UnpackedTarball_mdds.mk
@@ -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:
diff --git a/external/mdds/c++17.patch b/external/mdds/c++17.patch
new file mode 100755
index 000000000000..d96910f34e68
--- /dev/null
+++ b/external/mdds/c++17.patch
@@ -0,0 +1,22 @@
+--- 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)
+         {
diff --git a/unotools/source/i18n/resmgr.cxx b/unotools/source/i18n/resmgr.cxx
index 99b27cd7bbbf..ce5bc28f8896 100644
--- a/unotools/source/i18n/resmgr.cxx
+++ b/unotools/source/i18n/resmgr.cxx
@@ -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>


More information about the Libreoffice-commits mailing list