Date: prev next · Thread: first prev next last
2014 Archives by date, by thread · List index


As discussed previously (ESC meeting minutes <http://lists.freedesktop.org/archives/libreoffice/2014-May/061146.html> and <http://lists.freedesktop.org/archives/libreoffice/2014-May/061294.html>), we intended to start using at least some C++11 features unconditionally on master towards LO 4.4.

That implies new minimum requirements for the various toolchains, and we piggybacked on the research done by the LLVM team on this and settled on

  Clang 3.1
  GCC 4.7
  MSVC 2012

intended to offer a good subset of C++11, bringing both core and library improvements.

For the "official" TDF Linux baseline builds (CentOS 5, GCC 4.1) this requires building against the <http://people.centos.org/tru/devtools-2/> toolchain (GCC 4.8). Christian already took care of that.

For Mac OS X, this is achieved by abandoning the deprecated 32-bit builds requiring OS X 10.6 at a minimum (as announced at <https://wiki.documentfoundation.org/ReleaseNotes/4.3#Mac>) and only supporting 64-bit builds requiring OS X 10.8. (For C++11, it would suffice to require only 10.7, but there were other reasons that made us pick 10.8 as the minimum requirement for the 64-bit builds.)

Technically, our configure.ac currently still allows some GCC < 4.7, and some tinderboxes still make use of that (esp. the logerrit buildbot Linux machines), but I urge all tinderbox owners to upgrade to the above minimum compiler versions as soon as possible. (I disabled Markus' Linux-with-check@50 tinderbox until he is back from vacation, it is based on an old SUSE release with a too-old GCC rejected by configure.ac now.)

Two commits went into master over the last few days, <http://cgit.freedesktop.org/libreoffice/core/commit/?id=fcf015832466f4d902e8aeb1466309a1bc230475> "(Rudimentary) C++11 support is a hard requirement now" to require a compiler supporting C++11 (at least to some degree) in configure.ac, and <http://cgit.freedesktop.org/libreoffice/core/commit/?id=ea733ab5b632109d28bb8f1dc37116340b26229b> "Turn SfxItemState into a C++11 scoped enumeration" as a test balloon to actually unconditionally use a C++11 feature (scoped enumerations) in the code. Both of them pass the logerrit buildbots and the tinderboxes.

But, unfortunately, the minimum compiler versions still do not support the full C++11 Standard. <http://wiki.apache.org/stdcxx/C++0xCompilerSupport> gives a somewhat useful overview of what features (concentrating on core language, not standard library, though) are available in which compiler release (for MSVC, 11.0 means 2012), but at least the claim made there that MSVC 2012 supports variadic templates appears to be false.

So, when intending to use a new C++11 feature in our code base, check first whether it is actually supported by the various toolchains (by e.g. running it past the logerrit buildbots), and be prepared to fix up any tinderbox breakage it might cause.

And check out Scott Meyers' helpful "Effective Modern C++," <http://shop.oreilly.com/product/0636920033707.do>, if only to make you realize that C++ is still a baroque pile of gotchas.

Happy coding,
Stephan

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.