FWIW, macOS is clang, llvm, etc... it only pretends to be gcc :)

> On Nov 5, 2019, at 1:44 AM, Peter Kovacs <pe...@apache.org> wrote:
> 
> what if we require LLVM as build requirement and build OpenOffice only
> with LLVM instead of preinstalled gcc?
> 
> the project provides packages for Windows, Linux (And here RHEL 7.4) and
> mac. Cygwin offers Version 8.01
> 
> Debian offers also LLVM as Version 8.
> 
> It would just work around the issue we currently face, while increasing
> the build requirements only by little.
> 
> We have to drop CentOS6 support completely, as a price, but I think this
> is already decided.
> 
> I could not figure out if OS/2 can use LLVM. @Yuri do you think that
> would be fine for the OS/2 development?
> 
> It would simplify things a lot, and we can jump up the standard requirement.
> 
> 
> Maybe I miss some cave eats. Sorry for this.
> 
> On 05.11.19 02:19, Don Lewis wrote:
>> On  3 Nov, Don Lewis wrote:
>>> For much of our history, until fairly recently, the versions of gcc that
>>> we used defaulted to -std=gnu++98 when compiiling C++ code.
>>> 
>>> When FreeBSD on i386 and amd64 switched from gcc to clang, it also
>>> defaulted to -std=gnu++98.  Clang has been C++11 compliant from version
>>> 3.3 onwards.  Around the time of the switch, I added the
>>> -DHAVE_STL_INCLUDE_PATH compiler flag so that clang would use it's own
>>> STL include files instead of the boost TR1 includes.  Clang was
>>> perfectly happy using its own STL include files even though they were
>>> not part of C++98, only C++11.
>>> 
>>> Later on, when clang 6 changed the default to gnu++14, the build
>>> generated tons warning and some number of errors.  To work around this,
>>> I added the -std=gnu++98 compiler flag to force the old mode.
>>> 
>>> FreeBSD on powerpc still uses gcc and it recently came to my attention
>>> that the build was broken there.  The FreeBSD port of AOO to powerpc
>>> does not use -DHAVE_STL_INCLUDE_PATH, so it was falling back to the
>>> boost TR1 headers.  The FreeBSD port uses the system boost, and recent
>>> versions of boost have dropped TR1 support.  To work around that, I
>>> tried enabling -DHAVE_STL_INCLUDE_PATH to use the gcc C++ headers.  This
>>> failed badly because the gcc STL headers check to see if the compilation
>>> mode is C++11 or better and immediately error out of this is not the
>>> case.  Switching the compilation mode to c++11 results in the warning
>>> and error spew mentioned above.  I tried modifying the stlport headers
>>> to include the gcc TR1 headers in gnu++98 mode.  That worked better, but
>>> I still got some mysterious C++ errors that I was not able to figure
>>> out.  My next attempt will be to try the boost non-TR1 headers.
>>> 
>>> Turning to Linux as a stepping stone, I've notice the build warning
>>> spewage on recent Linux distributions, such as Debian 9, that have newer
>>> versions of gcc.  By using the patch below, I was able to reduce the
>>> size of the build log for trunk from 1354815 lines to 359998 lines.  I
>>> think the extra compiler defines are required because the compiler
>>> detection code in our bundled version of boost is too old to figure out
>>> what to do with new gcc in gnu++98 mode.
>>> 
>>> One of the largest contributors to the warnings is std::auto_ptr.  This
>>> is deprecated in C++11 and is totally removed in C++17.  The new way is
>>> to use std::unique_ptr, but that wasn't available before C++11.  We
>>> can't fix our code for this until we are totally off the old toolchains,
>>> which means after we have abandoned CentOS 6 and earlier as well as
>>> Visual Studio earlier than 2015.
>>> 
>>> Once our code has been converted to C++11, then I think we might be able
>>> to deorbit the boost and stlport modules and just use the compiler
>>> includes directly.
>>> 
>>> diff --git a/main/solenv/gbuild/platform/linux.mk 
>>> b/main/solenv/gbuild/platform/linux.mk
>>> index 3f35f2a3ce..0ffaf1a84f 100644
>>> --- a/main/solenv/gbuild/platform/linux.mk
>>> +++ b/main/solenv/gbuild/platform/linux.mk
>>> @@ -89,6 +89,10 @@ gb_CXXFLAGS := \
>>>     -fuse-cxa-atexit \
>>>     -fvisibility-inlines-hidden \
>>>     -fvisibility=hidden \
>>> +   -std=gnu++98 \
>>> +   -DBOOST_NO_CXX11_VARIADIC_TEMPLATES \
>>> +   -DBOOST_NO_CXX11_RVALUE_REFERENCES \
>>> +   -DBOOST_NO_CXX11_STATIC_ASSERT \
>>>     -pipe \
>>> 
>>> ifneq ($(EXTERNAL_WARNINGS_NOT_ERRORS),TRUE)
>>> diff --git a/main/solenv/inc/unxlng.mk b/main/solenv/inc/unxlng.mk
>>> index afaa50a0e5..060ee5976c 100644
>>> --- a/main/solenv/inc/unxlng.mk
>>> +++ b/main/solenv/inc/unxlng.mk
>>> @@ -77,7 +77,7 @@ CFLAGSENABLESYMBOLS=-g # was temporarily commented out, 
>>> reenabled before Beta
>>> .ENDIF
>>> 
>>> # flags for the C++ Compiler
>>> -CFLAGSCC= -pipe $(ARCH_FLAGS)
>>> +CFLAGSCC= -pipe $(ARCH_FLAGS) -std=gnu++98 
>>> -DBOOST_NO_CXX11_VARIADIC_TEMPLATES -DBOOST_NO_CXX11_RVALUE_REFERENCES 
>>> -DBOOST_NO_CXX11_STATIC_ASSERT
>>> # Flags for enabling exception handling
>>> .IF "$(COM)"=="CLANG"
>>> CFLAGSEXCEPTIONS=-fexceptions
>> If I fix the compiler feature detection code in boost, then the changes
>> needed to always build in gnu++98 mode on Linux are pretty trivial:
>> 
>> diff --git a/main/boost/boost_1_55_0.patch b/main/boost/boost_1_55_0.patch
>> index 6cec7bb358..df9b8ec8e0 100644
>> --- a/main/boost/boost_1_55_0.patch
>> +++ b/main/boost/boost_1_55_0.patch
>> @@ -328,22 +328,34 @@ diff -ur 
>> misc/boost_1_55_0/boost/unordered/detail/unique.hpp misc/build/boost_1_
>>          
>> ////////////////////////////////////////////////////////////////////////
>> diff -ur misc/boost_1_55_0/boost/config/compiler/gcc.hpp 
>> misc/build/boost_1_55_0/boost/config/compiler/gcc.hpp
>> --- misc/boost_1_55_0/boost/config/compiler/gcc.hpp  2013-09-17 
>> 09:55:51.000000000 -0700
>> -+++ misc/build/boost_1_55_0/boost/config/compiler/gcc.hpp   2016-09-02 
>> 19:15:48.775411000 -0700
>> -@@ -137,7 +137,7 @@
>> ++++ misc/build/boost_1_55_0/boost/config/compiler/gcc.hpp   2019-11-04 
>> 09:59:20.741944674 -0800
>> +@@ -137,14 +137,18 @@
>> 
>>  // C++0x features in 4.3.n and later
>>  //
>> -#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)) && 
>> defined(__GXX_EXPERIMENTAL_CXX0X__)
>> -+#if ((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)) && 
>> defined(__GXX_EXPERIMENTAL_CXX0X__)) || (__GNUC__ > 6) || (__GNUC__ == 6 && 
>> __GNUC_MINOR__ > 0)
>> ++#if ((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)) && 
>> defined(__GXX_EXPERIMENTAL_CXX0X__)) || (__cplusplus >= 201103L)
>>  // C++0x features are only enabled when -std=c++0x or -std=gnu++0x are
>>  // passed on the command line, which in turn defines
>>  // __GXX_EXPERIMENTAL_CXX0X__.
>> -@@ -153,7 +153,7 @@
>> + #  define BOOST_HAS_DECLTYPE
>> + #  define BOOST_HAS_RVALUE_REFS
>> + #  define BOOST_HAS_STATIC_ASSERT
>> +-#  define BOOST_HAS_VARIADIC_TMPL
>> ++#  if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4))
>> ++#    define BOOST_HAS_VARIADIC_TMPL
>> ++#  else
>> ++#    define BOOST_NO_CXX11_VARIADIC_TEMPLATES
>> ++#  endif
>> + #else
>> + #  define BOOST_NO_CXX11_DECLTYPE
>> + #  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
>> +@@ -153,7 +157,7 @@
>> 
>>  // Variadic templates compiler:
>>  //   http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html
>> -#  if defined(__VARIADIC_TEMPLATES) || (__GNUC__ > 4) || ((__GNUC__ == 4) 
>> && (__GNUC_MINOR__ >= 4) && defined(__GXX_EXPERIMENTAL_CXX0X__))
>> -+#  if defined(__VARIADIC_TEMPLATES) || ((__GNUC__ > 4 || (__GNUC__ == 4 && 
>> __GNUC_MINOR__ > 2)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || (__GNUC__ > 
>> 6) || (__GNUC__ == 6 && __GNUC_MINOR__ > 0)
>> ++#  if defined(__VARIADIC_TEMPLATES)
>>  #    define BOOST_HAS_VARIADIC_TMPL
>>  #  else
>>  #    define BOOST_NO_CXX11_VARIADIC_TEMPLATES
>> diff --git a/main/solenv/gbuild/platform/linux.mk 
>> b/main/solenv/gbuild/platform/linux.mk
>> index 3f35f2a3ce..02b8830a39 100644
>> --- a/main/solenv/gbuild/platform/linux.mk
>> +++ b/main/solenv/gbuild/platform/linux.mk
>> @@ -89,6 +89,7 @@ gb_CXXFLAGS := \
>>      -fuse-cxa-atexit \
>>      -fvisibility-inlines-hidden \
>>      -fvisibility=hidden \
>> +    -std=gnu++98 \
>>      -pipe \
>> 
>> ifneq ($(EXTERNAL_WARNINGS_NOT_ERRORS),TRUE)
>> diff --git a/main/solenv/inc/unxlng.mk b/main/solenv/inc/unxlng.mk
>> index afaa50a0e5..32b88bc91d 100644
>> --- a/main/solenv/inc/unxlng.mk
>> +++ b/main/solenv/inc/unxlng.mk
>> @@ -77,7 +77,7 @@ CFLAGSENABLESYMBOLS=-g # was temporarily commented out, 
>> reenabled before Beta
>> .ENDIF
>> 
>> # flags for the C++ Compiler
>> -CFLAGSCC= -pipe $(ARCH_FLAGS)
>> +CFLAGSCC= -pipe $(ARCH_FLAGS) -std=gnu++98
>> # Flags for enabling exception handling
>> .IF "$(COM)"=="CLANG"
>> CFLAGSEXCEPTIONS=-fexceptions
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@openoffice.apache.org
>> For additional commands, e-mail: dev-h...@openoffice.apache.org
>> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@openoffice.apache.org
> For additional commands, e-mail: dev-h...@openoffice.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@openoffice.apache.org
For additional commands, e-mail: dev-h...@openoffice.apache.org

Reply via email to