[Libreoffice-commits] core.git: 5 commits - configure.ac external/boost include/rtl sal/qa

Stephan Bergmann sbergman at redhat.com
Fri Nov 13 01:29:28 PST 2015


 configure.ac                                |   14 ++++++++-
 external/boost/StaticLibrary_boostthread.mk |   20 +++++++++++++
 external/boost/UnpackedTarball_boost.mk     |    2 +
 external/boost/clang-cl.patch.0             |   42 ++++++++++++++++++++++++++++
 include/rtl/byteseq.h                       |    6 +++-
 include/rtl/stringutils.hxx                 |    3 +-
 sal/qa/osl/file/osl_old_test_file.cxx       |    2 +
 7 files changed, 86 insertions(+), 3 deletions(-)

New commits:
commit b957190edfc40e1fea99e4781c95aea0bd6fce5e
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Nov 12 18:19:11 2015 +0100

    Work around clang-cl -FIIntrin.h workaround
    
    Change-Id: I71e0de9e13718c1a6cd11339aba740effa2e0476

diff --git a/configure.ac b/configure.ac
index 5737d68..58a6ad7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3684,7 +3684,19 @@ if test "$_os" = "WINNT"; then
         dnl localized
         AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
         echo "#include <stdlib.h>" > conftest.c
-        SHOWINCLUDES_PREFIX=`$CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
+        dnl Filter out -FIIntrin.h when CC points at clang-cl.exe and needs to
+        dnl explicitly state that argument:
+        my_CC=
+        for i in $CC; do
+            case $i in
+            -FIIntrin.h)
+                ;;
+            *)
+                my_CC="$my_CC $i"
+                ;;
+            esac
+        done
+        SHOWINCLUDES_PREFIX=`$my_CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
             grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
         rm -f conftest.c conftest.obj
         if test -z "$SHOWINCLUDES_PREFIX"; then
commit 9b421ef6dee41c33d1a82fc8a8ec6983f13fe2a7
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Nov 12 18:17:51 2015 +0100

    external/boost: Adapt to clang-cl
    
    Change-Id: Ib07e85bd1a157b6fa78f07a17f8cf5033b01bddf

diff --git a/external/boost/StaticLibrary_boostthread.mk b/external/boost/StaticLibrary_boostthread.mk
index 77b6ea1..f2498d5 100644
--- a/external/boost/StaticLibrary_boostthread.mk
+++ b/external/boost/StaticLibrary_boostthread.mk
@@ -18,6 +18,26 @@ $(eval $(call gb_StaticLibrary_add_defs,boostthread,\
 	-DBOOST_ALL_NO_LIB \
 ))
 
+# Lots of the declarations in boost duplicated from windows.h when
+# BOOST_USE_WINDOWS_H is not defined (which appears to be the normal case) cause
+# warnings or even errors with Clang when windows.h is included too (e.g.,
+# "conflicting types for 'FileTimeToLocalFileTime'" between
+# C:/PROGRA~2/WI3CF2~1/8.1/include/um/fileapi.h and
+# workdir/UnpackedTarball/boost/boost/date_time/filetime_functions.hpp), for
+# which it appears easies to just define BOOST_USE_WINDOWS_H; also
+# -Winvalid-constexpr (e.g., reported from the constexpr definition of lowest()
+# in workdir/UnpackedTarball/boost/boost/chrono/duration.hpp, which uses
+# std::numeric_limits<>::max() from MSVC's standard library, where nothing is
+# marked constexpr) is apparently reported as an error by default:
+ifeq ($(OS),WNT)
+ifeq ($(COM_IS_CLANG),TRUE)
+$(eval $(call gb_StaticLibrary_add_defs,boostthread, \
+    -DBOOST_USE_WINDOWS_H \
+    -Wno-error=invalid-constexpr \
+))
+endif
+endif
+
 $(eval $(call gb_StaticLibrary_use_external,boostthread,boost_headers))
 
 $(eval $(call gb_StaticLibrary_set_generated_cxx_suffix,boostthread,cpp))
diff --git a/external/boost/UnpackedTarball_boost.mk b/external/boost/UnpackedTarball_boost.mk
index 6beeac1..e52f6cd 100644
--- a/external/boost/UnpackedTarball_boost.mk
+++ b/external/boost/UnpackedTarball_boost.mk
@@ -85,6 +85,8 @@ boost_patches += boost_1_59_0.multi_array.wshadow.patch
 # https://svn.boost.org/trac/boost/ticket/11501
 boost_patches += boost_1_59_0.property_tree.wreturn-type.patch
 
+boost_patches += clang-cl.patch.0
+
 $(eval $(call gb_UnpackedTarball_UnpackedTarball,boost))
 
 $(eval $(call gb_UnpackedTarball_set_tarball,boost,$(BOOST_TARBALL)))
diff --git a/external/boost/clang-cl.patch.0 b/external/boost/clang-cl.patch.0
new file mode 100644
index 0000000..0dd44d4
--- /dev/null
+++ b/external/boost/clang-cl.patch.0
@@ -0,0 +1,42 @@
+--- boost/config/compiler/clang.hpp
++++ boost/config/compiler/clang.hpp
+@@ -260,9 +260,7 @@
+ 
+ 
+ // Unused attribute:
+-#if defined(__GNUC__) && (__GNUC__ >= 4)
+ #  define BOOST_ATTRIBUTE_UNUSED __attribute__((unused))
+-#endif
+ 
+ #ifndef BOOST_COMPILER
+ #  define BOOST_COMPILER "Clang version " __clang_version__
+
+# workdir/UnpackedTarball/boost\boost/smart_ptr/detail/sp_counted_base_clang.hpp(29,1) :  error: cannot mangle this C11 atomic type yet
+# inline void atomic_increment( atomic_int_least32_t * pw )
+# ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+--- boost/smart_ptr/detail/sp_counted_base.hpp
++++ boost/smart_ptr/detail/sp_counted_base.hpp
+@@ -21,7 +21,7 @@
+ #include <boost/smart_ptr/detail/sp_has_sync.hpp>
+ 
+ #if defined( __clang__ ) && defined( __has_extension )
+-# if __has_extension( __c_atomic__ )
++# if __has_extension( __c_atomic__ ) && !defined _MSC_VER
+ #   define BOOST_SP_HAS_CLANG_C11_ATOMICS
+ # endif
+ #endif
+
+# C:/lo64/core/workdir/UnpackedTarball/boost/libs/thread/src/win32/thread.cpp(1006,36) :  error: dllimport cannot be applied to non-inline function definition
+#     BOOST_THREAD_DECL void __cdecl on_process_enter()
+#                                    ^
+--- boost/thread/detail/config.hpp
++++ boost/thread/detail/config.hpp
+@@ -396,7 +396,7 @@
+ #else //Use default
+ #   if defined(BOOST_THREAD_PLATFORM_WIN32)
+ #       if defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN) \
+-      || defined(__MINGW32__) || defined(MINGW32) || defined(BOOST_MINGW32)
++      || defined(__MINGW32__) || defined(MINGW32) || defined(BOOST_MINGW32) || defined __clang__
+       //For compilers supporting auto-tss cleanup
+             //with Boost.Threads lib, use Boost.Threads lib
+ #           define BOOST_THREAD_USE_LIB
commit 5d201bc4909698d276cc4764017b15faa9b5b7be
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Nov 12 18:16:17 2015 +0100

    Adapt to clang-cl
    
    Change-Id: I2f79e52da2aa0ad3a37aac07a36dbe14dfe401a9

diff --git a/include/rtl/stringutils.hxx b/include/rtl/stringutils.hxx
index d1b3cc4..c794f49 100644
--- a/include/rtl/stringutils.hxx
+++ b/include/rtl/stringutils.hxx
@@ -77,7 +77,8 @@ template<char C> struct SAL_WARN_UNUSED OUStringLiteral1_ {
         "non-ASCII character in OUStringLiteral1");
     char const c = C;
 };
-#if defined _MSC_VER && _MSC_VER <= 1900 // Visual Studio 2015
+#if defined _MSC_VER && _MSC_VER <= 1900 && !defined __clang__
+    // Visual Studio 2015
 template<char C> using OUStringLiteral1 = OUStringLiteral1_<C>;
 #pragma warning(disable: 4239)
 #else
commit 8e2f4c7817320354903d9d2c52d59403f37e22b5
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Nov 12 17:20:43 2015 +0100

    -Werror,-Wunused-const-variable
    
    Change-Id: I3ef314594b64a54aca389816fd9bf5ba0721b397

diff --git a/sal/qa/osl/file/osl_old_test_file.cxx b/sal/qa/osl/file/osl_old_test_file.cxx
index 6470832..8444baf 100644
--- a/sal/qa/osl/file/osl_old_test_file.cxx
+++ b/sal/qa/osl/file/osl_old_test_file.cxx
@@ -52,6 +52,7 @@ public:
     CPPUNIT_TEST_SUITE_END( );
 };
 
+#ifndef WIN32
 const char * const aSource1[] =
 {
     "a"    , "file:///" TEST_VOLUME "bla/a",
@@ -78,6 +79,7 @@ const char * const aSource2[ ] =
     "../../../a/b/c/d", "file:///" TEST_VOLUME "a/b/c/d",
     nullptr,nullptr
 };
+#endif
 
 using ::rtl::OUString;
 using ::rtl::OUStringToOString;
commit 2083761d19c91dc875a69f049f53fe91e421a9f0
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Nov 12 16:52:27 2015 +0100

    -Werror,-Wmicrosoft-enum-value
    
    Change-Id: Iafd6e5f899835303e421be923f70d1e3f42bf65e

diff --git a/include/rtl/byteseq.h b/include/rtl/byteseq.h
index 27011c2..3c05745 100644
--- a/include/rtl/byteseq.h
+++ b/include/rtl/byteseq.h
@@ -150,7 +150,11 @@ enum __ByteSequence_NoAcquire
     /** This enum value can be used to create a bytesequence from a C-Handle without
         acquiring the handle.
     */
-    BYTESEQ_NOACQUIRE = 0xcafebabe
+    BYTESEQ_NOACQUIRE =
+#if defined _MSC_VER
+        (int)
+#endif
+        0xcafebabe
 };
 
 /** C++ class representing a SAL byte sequence.


More information about the Libreoffice-commits mailing list