Date: Sun, 18 Sep 2016 18:38:21 +0000 (UTC) From: Jan Beich <jbeich@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r422403 - in head: mail/thunderbird mail/thunderbird/files www/firefox-esr www/firefox-esr/files www/libxul www/libxul/files www/seamonkey www/seamonkey/files Message-ID: <201609181838.u8IIcLUA047432@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jbeich Date: Sun Sep 18 18:38:21 2016 New Revision: 422403 URL: https://svnweb.freebsd.org/changeset/ports/422403 Log: gecko: apply r421523 to the rest Bump PORTREVISION to get a clear regression window. PR: 212431 Added: head/mail/thunderbird/files/patch-bug1245076 - copied, changed from r421523, head/www/firefox/files/patch-bug1245076 head/mail/thunderbird/files/patch-bug1268816 - copied, changed from r421523, head/www/firefox/files/patch-bug1268816 head/mail/thunderbird/files/patch-bug1269171 - copied, changed from r421523, head/www/firefox/files/patch-bug1269171 head/www/firefox-esr/files/patch-bug1245076 - copied unchanged from r421523, head/www/firefox/files/patch-bug1245076 head/www/firefox-esr/files/patch-bug1268816 - copied, changed from r421523, head/www/firefox/files/patch-bug1268816 head/www/firefox-esr/files/patch-bug1269171 - copied unchanged from r421523, head/www/firefox/files/patch-bug1269171 head/www/libxul/files/patch-bug1245076 - copied unchanged from r421523, head/www/firefox/files/patch-bug1245076 head/www/libxul/files/patch-bug1268816 - copied, changed from r421523, head/www/firefox/files/patch-bug1268816 head/www/libxul/files/patch-bug1269171 - copied unchanged from r421523, head/www/firefox/files/patch-bug1269171 head/www/seamonkey/files/patch-bug1245076 - copied, changed from r421523, head/www/firefox/files/patch-bug1245076 head/www/seamonkey/files/patch-bug1268816 - copied, changed from r421523, head/www/firefox/files/patch-bug1268816 head/www/seamonkey/files/patch-bug1269171 - copied, changed from r421523, head/www/firefox/files/patch-bug1269171 Modified: head/mail/thunderbird/Makefile head/www/firefox-esr/Makefile head/www/libxul/Makefile head/www/seamonkey/Makefile Modified: head/mail/thunderbird/Makefile ============================================================================== --- head/mail/thunderbird/Makefile Sun Sep 18 18:18:35 2016 (r422402) +++ head/mail/thunderbird/Makefile Sun Sep 18 18:38:21 2016 (r422403) @@ -3,6 +3,7 @@ PORTNAME= thunderbird DISTVERSION= 45.3.0 +PORTREVISION= 1 CATEGORIES= mail news net-im ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source Copied and modified: head/mail/thunderbird/files/patch-bug1245076 (from r421523, head/www/firefox/files/patch-bug1245076) ============================================================================== --- head/www/firefox/files/patch-bug1245076 Wed Sep 7 21:47:23 2016 (r421523, copy source) +++ head/mail/thunderbird/files/patch-bug1245076 Sun Sep 18 18:38:21 2016 (r422403) @@ -24,8 +24,8 @@ including mozalloc.h. diff --git config/gcc-stl-wrapper.template.h config/gcc-stl-wrapper.template.h ---- config/gcc-stl-wrapper.template.h -+++ config/gcc-stl-wrapper.template.h +--- mozilla/config/gcc-stl-wrapper.template.h ++++ mozilla/config/gcc-stl-wrapper.template.h @@ -12,33 +12,40 @@ // compiling ObjC. #if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS) Copied and modified: head/mail/thunderbird/files/patch-bug1268816 (from r421523, head/www/firefox/files/patch-bug1268816) ============================================================================== --- head/www/firefox/files/patch-bug1268816 Wed Sep 7 21:47:23 2016 (r421523, copy source) +++ head/mail/thunderbird/files/patch-bug1268816 Sun Sep 18 18:38:21 2016 (r422403) @@ -7,8 +7,8 @@ Bug 1268816 - allow Skia to use C++11 features on platforms that have them. r=froydnj diff --git config/stl-headers config/stl-headers ---- config/stl-headers -+++ config/stl-headers +--- mozilla/config/stl-headers ++++ mozilla/config/stl-headers @@ -29,16 +29,17 @@ iterator limits list @@ -28,8 +28,8 @@ diff --git config/stl-headers config/stl cstdio cstdlib diff --git config/system-headers config/system-headers ---- config/system-headers -+++ config/system-headers +--- mozilla/config/system-headers ++++ mozilla/config/system-headers @@ -1109,16 +1109,17 @@ ThreadManagerTests.h Threads.h time.h @@ -48,104 +48,3 @@ diff --git config/system-headers config/ ucontext.h uconv.h UCursor.h -diff --git gfx/skia/skia/include/config/SkUserConfig.h gfx/skia/skia/include/config/SkUserConfig.h ---- gfx/skia/skia/include/config/SkUserConfig.h -+++ gfx/skia/skia/include/config/SkUserConfig.h -@@ -159,9 +159,20 @@ - #ifndef MOZ_IMPLICIT - # ifdef MOZ_CLANG_PLUGIN - # define MOZ_IMPLICIT __attribute__((annotate("moz_implicit"))) - # else - # define MOZ_IMPLICIT - # endif - #endif - -+/* Check if building with either MSVC, libc++, or a sufficiently recent version of libstdc++. -++ * On platforms like OS X 10.6 or older Android SDKs, we need to work around a lack of certain -++ * C++11 features. -++ */ -+#include "mozilla/Compiler.h" -+#if MOZ_IS_MSVC || MOZ_USING_LIBCXX || MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 8, 0) -+# define MOZ_SKIA_AVOID_CXX11 0 -+#else -+# define MOZ_SKIA_AVOID_CXX11 1 - #endif -+ -+#endif -diff --git gfx/skia/skia/include/private/SkTLogic.h gfx/skia/skia/include/private/SkTLogic.h ---- gfx/skia/skia/include/private/SkTLogic.h -+++ gfx/skia/skia/include/private/SkTLogic.h -@@ -24,7 +24,7 @@ - #include <algorithm> - #endif - --#ifdef MOZ_SKIA -+#if MOZ_SKIA_AVOID_CXX11 - #include "mozilla/Move.h" - #include "mozilla/TypeTraits.h" - -@@ -32,23 +32,9 @@ - #include "mozilla/Function.h" - #endif - --// In libc++, symbols such as std::forward may be defined in std::__1. --// The _LIBCPP_BEGIN_NAMESPACE_STD and _LIBCPP_END_NAMESPACE_STD macros --// will expand to the correct namespace. --#ifdef _LIBCPP_BEGIN_NAMESPACE_STD --#define MOZ_BEGIN_STD_NAMESPACE _LIBCPP_BEGIN_NAMESPACE_STD --#define MOZ_END_STD_NAMESPACE _LIBCPP_END_NAMESPACE_STD --#else --#define MOZ_BEGIN_STD_NAMESPACE namespace std { --#define MOZ_END_STD_NAMESPACE } --#endif -- --MOZ_BEGIN_STD_NAMESPACE -+namespace std { - using mozilla::Forward; - #define forward Forward --MOZ_END_STD_NAMESPACE -- --namespace std { - #if SKIA_IMPLEMENTATION - using mozilla::IntegralConstant; - using mozilla::IsEmpty; -@@ -73,7 +59,7 @@ template <bool B, typename T = void> usi - - } - --#else /* !MOZ_SKIA */ -+#else /* !MOZ_SKIA_AVOID_CXX11 */ - - #include <type_traits> - #include <functional> -@@ -178,7 +164,7 @@ template <typename D, typename S> using - - } // namespace sknonstd - --#endif /* MOZ_SKIA */ -+#endif /* MOZ_SKIA_AVOID_CXX11 */ - - // Just a pithier wrapper for enable_if_t. - #define SK_WHEN(condition, T) skstd::enable_if_t<!!(condition), T> -diff --git gfx/skia/skia/include/private/SkUniquePtr.h gfx/skia/skia/include/private/SkUniquePtr.h ---- gfx/skia/skia/include/private/SkUniquePtr.h -+++ gfx/skia/skia/include/private/SkUniquePtr.h -@@ -7,17 +7,17 @@ - - #ifndef SkUniquePtr_DEFINED - #define SkUniquePtr_DEFINED - - #include "SkTLogic.h" - #include <cstddef> - #include <utility> - --#ifdef MOZ_SKIA -+#if MOZ_SKIA_AVOID_CXX11 - #include "mozilla/UniquePtr.h" - - namespace std { - using mozilla::DefaultDelete; - using mozilla::UniquePtr; - } - - namespace skstd { Copied and modified: head/mail/thunderbird/files/patch-bug1269171 (from r421523, head/www/firefox/files/patch-bug1269171) ============================================================================== --- head/www/firefox/files/patch-bug1269171 Wed Sep 7 21:47:23 2016 (r421523, copy source) +++ head/mail/thunderbird/files/patch-bug1269171 Sun Sep 18 18:38:21 2016 (r422403) @@ -30,8 +30,8 @@ have been included). diff --git config/gcc-stl-wrapper.template.h config/gcc-stl-wrapper.template.h ---- config/gcc-stl-wrapper.template.h -+++ config/gcc-stl-wrapper.template.h +--- mozilla/config/gcc-stl-wrapper.template.h ++++ mozilla/config/gcc-stl-wrapper.template.h @@ -12,56 +12,54 @@ // compiling ObjC. #if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS) @@ -114,8 +114,8 @@ diff --git config/gcc-stl-wrapper.templa // __throw_*(). #ifndef mozilla_throw_gcc_h diff --git config/make-stl-wrappers.py config/make-stl-wrappers.py ---- config/make-stl-wrappers.py -+++ config/make-stl-wrappers.py +--- mozilla/config/make-stl-wrappers.py ++++ mozilla/config/make-stl-wrappers.py @@ -25,28 +25,26 @@ def header_path(header, compiler): def is_comment(line): return re.match(r'\s*#.*', line) @@ -147,8 +147,8 @@ diff --git config/make-stl-wrappers.py c """.format(sys.argv[0]), file=sys.stderr) sys.exit(1) diff --git config/msvc-stl-wrapper.template.h config/msvc-stl-wrapper.template.h ---- config/msvc-stl-wrapper.template.h -+++ config/msvc-stl-wrapper.template.h +--- mozilla/config/msvc-stl-wrapper.template.h ++++ mozilla/config/msvc-stl-wrapper.template.h @@ -3,45 +3,33 @@ */ /* This Source Code Form is subject to the terms of the Mozilla Public @@ -224,8 +224,8 @@ diff --git config/msvc-stl-wrapper.templ + #endif // if mozilla_${HEADER}_h diff --git memory/mozalloc/mozalloc.h memory/mozalloc/mozalloc.h ---- memory/mozalloc/mozalloc.h -+++ memory/mozalloc/mozalloc.h +--- mozilla/memory/mozalloc/mozalloc.h ++++ mozilla/memory/mozalloc/mozalloc.h @@ -7,20 +7,27 @@ #ifndef mozilla_mozalloc_h Modified: head/www/firefox-esr/Makefile ============================================================================== --- head/www/firefox-esr/Makefile Sun Sep 18 18:18:35 2016 (r422402) +++ head/www/firefox-esr/Makefile Sun Sep 18 18:38:21 2016 (r422403) @@ -4,7 +4,7 @@ PORTNAME= firefox DISTVERSION= 45.4.0 DISTVERSIONSUFFIX=esr.source -PORTREVISION= 1 +PORTREVISION= 2 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}esr/source \ Copied: head/www/firefox-esr/files/patch-bug1245076 (from r421523, head/www/firefox/files/patch-bug1245076) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/firefox-esr/files/patch-bug1245076 Sun Sep 18 18:38:21 2016 (r422403, copy of r421523, head/www/firefox/files/patch-bug1245076) @@ -0,0 +1,74 @@ + +# HG changeset patch +# User Mike Hommey <mh+mozilla@glandium.org> +# Date 1457596445 -32400 +# Node ID 55212130f19da3079167a6b0a5a0ed6689c9a71d +# Parent 27c94617d7064d566c24a42e11cd4c7ef725923d +Bug 1245076 - Don't include mozalloc.h from the cstdlib wrapper. r=froydnj + +Our STL wrappers do various different things, one of which is including +mozalloc.h for infallible operator new. mozalloc.h includes stdlib.h, +which, in libstdc++ >= 6 is now itself a wrapper around cstdlib, which +circles back to our STL wrapper. + +But of the things our STL wrappers do, including mozalloc.h is not one +that is necessary for cstdlib. So skip including mozalloc.h in our +cstdlib wrapper. + +Additionally, some C++ sources (in media/mtransport) are including +headers in an extern "C" block, which end up including stdlib.h, which +ends up including cstdlib because really, this is all C++, and our +wrapper pre-includes <new> for mozalloc.h, which fails because templates +don't work inside extern "C". So, don't pre-include <new> when we're not +including mozalloc.h. + + +diff --git config/gcc-stl-wrapper.template.h config/gcc-stl-wrapper.template.h +--- config/gcc-stl-wrapper.template.h ++++ config/gcc-stl-wrapper.template.h +@@ -12,33 +12,40 @@ + // compiling ObjC. + #if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS) + # error "STL code can only be used with -fno-exceptions" + #endif + + // Silence "warning: #include_next is a GCC extension" + #pragma GCC system_header + ++// Don't include mozalloc for cstdlib. See bug 1245076. ++#ifndef moz_dont_include_mozalloc_for_cstdlib ++# define moz_dont_include_mozalloc_for_cstdlib ++#endif ++#ifndef moz_dont_include_mozalloc_for_${HEADER} + // mozalloc.h wants <new>; break the cycle by always explicitly + // including <new> here. NB: this is a tad sneaky. Sez the gcc docs: + // + // `#include_next' does not distinguish between <file> and "file" + // inclusion, nor does it check that the file you specify has the + // same name as the current file. It simply looks for the file + // named, starting with the directory in the search path after the + // one where the current file was found. +-#include_next <new> ++# include_next <new> + + // See if we're in code that can use mozalloc. NB: this duplicates + // code in nscore.h because nscore.h pulls in prtypes.h, and chromium + // can't build with that being included before base/basictypes.h. +-#if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) +-# include "mozilla/mozalloc.h" +-#else +-# error "STL code can only be used with infallible ::operator new()" ++# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) ++# include "mozilla/mozalloc.h" ++# else ++# error "STL code can only be used with infallible ::operator new()" ++# endif ++ + #endif + + #if defined(DEBUG) && !defined(_GLIBCXX_DEBUG) + // Enable checked iterators and other goodies + // + // FIXME/bug 551254: gcc's debug STL implementation requires -frtti. + // Figure out how to resolve this with -fno-rtti. Maybe build with + // -frtti in DEBUG builds? Copied and modified: head/www/firefox-esr/files/patch-bug1268816 (from r421523, head/www/firefox/files/patch-bug1268816) ============================================================================== --- head/www/firefox/files/patch-bug1268816 Wed Sep 7 21:47:23 2016 (r421523, copy source) +++ head/www/firefox-esr/files/patch-bug1268816 Sun Sep 18 18:38:21 2016 (r422403) @@ -48,104 +48,3 @@ diff --git config/system-headers config/ ucontext.h uconv.h UCursor.h -diff --git gfx/skia/skia/include/config/SkUserConfig.h gfx/skia/skia/include/config/SkUserConfig.h ---- gfx/skia/skia/include/config/SkUserConfig.h -+++ gfx/skia/skia/include/config/SkUserConfig.h -@@ -159,9 +159,20 @@ - #ifndef MOZ_IMPLICIT - # ifdef MOZ_CLANG_PLUGIN - # define MOZ_IMPLICIT __attribute__((annotate("moz_implicit"))) - # else - # define MOZ_IMPLICIT - # endif - #endif - -+/* Check if building with either MSVC, libc++, or a sufficiently recent version of libstdc++. -++ * On platforms like OS X 10.6 or older Android SDKs, we need to work around a lack of certain -++ * C++11 features. -++ */ -+#include "mozilla/Compiler.h" -+#if MOZ_IS_MSVC || MOZ_USING_LIBCXX || MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 8, 0) -+# define MOZ_SKIA_AVOID_CXX11 0 -+#else -+# define MOZ_SKIA_AVOID_CXX11 1 - #endif -+ -+#endif -diff --git gfx/skia/skia/include/private/SkTLogic.h gfx/skia/skia/include/private/SkTLogic.h ---- gfx/skia/skia/include/private/SkTLogic.h -+++ gfx/skia/skia/include/private/SkTLogic.h -@@ -24,7 +24,7 @@ - #include <algorithm> - #endif - --#ifdef MOZ_SKIA -+#if MOZ_SKIA_AVOID_CXX11 - #include "mozilla/Move.h" - #include "mozilla/TypeTraits.h" - -@@ -32,23 +32,9 @@ - #include "mozilla/Function.h" - #endif - --// In libc++, symbols such as std::forward may be defined in std::__1. --// The _LIBCPP_BEGIN_NAMESPACE_STD and _LIBCPP_END_NAMESPACE_STD macros --// will expand to the correct namespace. --#ifdef _LIBCPP_BEGIN_NAMESPACE_STD --#define MOZ_BEGIN_STD_NAMESPACE _LIBCPP_BEGIN_NAMESPACE_STD --#define MOZ_END_STD_NAMESPACE _LIBCPP_END_NAMESPACE_STD --#else --#define MOZ_BEGIN_STD_NAMESPACE namespace std { --#define MOZ_END_STD_NAMESPACE } --#endif -- --MOZ_BEGIN_STD_NAMESPACE -+namespace std { - using mozilla::Forward; - #define forward Forward --MOZ_END_STD_NAMESPACE -- --namespace std { - #if SKIA_IMPLEMENTATION - using mozilla::IntegralConstant; - using mozilla::IsEmpty; -@@ -73,7 +59,7 @@ template <bool B, typename T = void> usi - - } - --#else /* !MOZ_SKIA */ -+#else /* !MOZ_SKIA_AVOID_CXX11 */ - - #include <type_traits> - #include <functional> -@@ -178,7 +164,7 @@ template <typename D, typename S> using - - } // namespace sknonstd - --#endif /* MOZ_SKIA */ -+#endif /* MOZ_SKIA_AVOID_CXX11 */ - - // Just a pithier wrapper for enable_if_t. - #define SK_WHEN(condition, T) skstd::enable_if_t<!!(condition), T> -diff --git gfx/skia/skia/include/private/SkUniquePtr.h gfx/skia/skia/include/private/SkUniquePtr.h ---- gfx/skia/skia/include/private/SkUniquePtr.h -+++ gfx/skia/skia/include/private/SkUniquePtr.h -@@ -7,17 +7,17 @@ - - #ifndef SkUniquePtr_DEFINED - #define SkUniquePtr_DEFINED - - #include "SkTLogic.h" - #include <cstddef> - #include <utility> - --#ifdef MOZ_SKIA -+#if MOZ_SKIA_AVOID_CXX11 - #include "mozilla/UniquePtr.h" - - namespace std { - using mozilla::DefaultDelete; - using mozilla::UniquePtr; - } - - namespace skstd { Copied: head/www/firefox-esr/files/patch-bug1269171 (from r421523, head/www/firefox/files/patch-bug1269171) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/firefox-esr/files/patch-bug1269171 Sun Sep 18 18:38:21 2016 (r422403, copy of r421523, head/www/firefox/files/patch-bug1269171) @@ -0,0 +1,258 @@ + +# HG changeset patch +# User Mike Hommey <mh+mozilla@glandium.org> +# Date 1463557039 -32400 +# Node ID 68da139d0866977c0ada86319fa94388f2255446 +# Parent a640e6fa8ab9977fb6c5bcf63dc4daca6699477b +Bug 1269171 - Change how mozalloc.h is hooked in STL wrappers. r=froydnj + +Since the introduction of the STL wrappers, they have included +mozalloc.h, and multiple times, we've hit header reentrancy problems, +and worked around them as best as we could. + +Taking a step back, all mozalloc.h does is: +- declare moz_* allocator functions. +- define inline implementations of various operator new/delete variants. + +The first only requires the functions to be declared before they are used, +so mozalloc.h only needs to be included before anything that would use +those functions. + +The second doesn't actually require a specific order, as long as the +declaration for those functions comes before their use, and they are +either declared in <new> or implicitly by the C++ compiler. + +So all in all, it doesn't matter that mozalloc.h is included before the +wrapped STL headers. What matters is that it's included when STL headers +are included. So arrange things such that mozalloc.h is included after +the first wrapped STL header is fully preprocessed (and all its includes +have been included). + + +diff --git config/gcc-stl-wrapper.template.h config/gcc-stl-wrapper.template.h +--- config/gcc-stl-wrapper.template.h ++++ config/gcc-stl-wrapper.template.h +@@ -12,56 +12,54 @@ + // compiling ObjC. + #if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS) + # error "STL code can only be used with -fno-exceptions" + #endif + + // Silence "warning: #include_next is a GCC extension" + #pragma GCC system_header + +-// Don't include mozalloc for cstdlib. See bug 1245076. +-#ifndef moz_dont_include_mozalloc_for_cstdlib +-# define moz_dont_include_mozalloc_for_cstdlib +-#endif +-#ifndef moz_dont_include_mozalloc_for_${HEADER} +-// mozalloc.h wants <new>; break the cycle by always explicitly +-// including <new> here. NB: this is a tad sneaky. Sez the gcc docs: +-// +-// `#include_next' does not distinguish between <file> and "file" +-// inclusion, nor does it check that the file you specify has the +-// same name as the current file. It simply looks for the file +-// named, starting with the directory in the search path after the +-// one where the current file was found. +-# include_next <new> +- +-// See if we're in code that can use mozalloc. NB: this duplicates +-// code in nscore.h because nscore.h pulls in prtypes.h, and chromium +-// can't build with that being included before base/basictypes.h. +-# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) +-# include "mozilla/mozalloc.h" +-# else +-# error "STL code can only be used with infallible ::operator new()" +-# endif +- +-#endif +- + #if defined(DEBUG) && !defined(_GLIBCXX_DEBUG) + // Enable checked iterators and other goodies + // + // FIXME/bug 551254: gcc's debug STL implementation requires -frtti. + // Figure out how to resolve this with -fno-rtti. Maybe build with + // -frtti in DEBUG builds? + // + // # define _GLIBCXX_DEBUG 1 + #endif + ++// Don't include mozalloc for cstdlib. See bug 1245076. ++#ifndef moz_dont_include_mozalloc_for_cstdlib ++# define moz_dont_include_mozalloc_for_cstdlib ++#endif ++ ++// Include mozalloc after the STL header and all other headers it includes ++// have been preprocessed. ++#if !defined(MOZ_INCLUDE_MOZALLOC_H) && \ ++ !defined(moz_dont_include_mozalloc_for_${HEADER}) ++# define MOZ_INCLUDE_MOZALLOC_H ++# define MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER} ++#endif ++ + #pragma GCC visibility push(default) + #include_next <${HEADER}> + #pragma GCC visibility pop + ++#ifdef MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER} ++// See if we're in code that can use mozalloc. NB: this duplicates ++// code in nscore.h because nscore.h pulls in prtypes.h, and chromium ++// can't build with that being included before base/basictypes.h. ++# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) ++# include "mozilla/mozalloc.h" ++# else ++# error "STL code can only be used with infallible ::operator new()" ++# endif ++#endif ++ + // gcc calls a __throw_*() function from bits/functexcept.h when it + // wants to "throw an exception". functexcept exists nominally to + // support -fno-exceptions, but since we'll always use the system + // libstdc++, and it's compiled with exceptions, then in practice + // these __throw_*() functions will always throw exceptions (shades of + // -fshort-wchar). We don't want that and so define our own inlined + // __throw_*(). + #ifndef mozilla_throw_gcc_h +diff --git config/make-stl-wrappers.py config/make-stl-wrappers.py +--- config/make-stl-wrappers.py ++++ config/make-stl-wrappers.py +@@ -25,28 +25,26 @@ def header_path(header, compiler): + def is_comment(line): + return re.match(r'\s*#.*', line) + + def main(outdir, compiler, template_file, header_list_file): + if not os.path.isdir(outdir): + os.mkdir(outdir) + + template = open(template_file, 'r').read() +- path_to_new = header_path('new', compiler) + + for header in open(header_list_file, 'r'): + header = header.rstrip() + if 0 == len(header) or is_comment(header): + continue + + path = header_path(header, compiler) + with FileAvoidWrite(os.path.join(outdir, header)) as f: + f.write(string.Template(template).substitute(HEADER=header, +- HEADER_PATH=path, +- NEW_HEADER_PATH=path_to_new)) ++ HEADER_PATH=path)) + + + if __name__ == '__main__': + if 5 != len(sys.argv): + print("""Usage: + python {0} OUT_DIR ('msvc'|'gcc') TEMPLATE_FILE HEADER_LIST_FILE + """.format(sys.argv[0]), file=sys.stderr) + sys.exit(1) +diff --git config/msvc-stl-wrapper.template.h config/msvc-stl-wrapper.template.h +--- config/msvc-stl-wrapper.template.h ++++ config/msvc-stl-wrapper.template.h +@@ -3,45 +3,33 @@ + */ + /* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + #ifndef mozilla_${HEADER}_h + #define mozilla_${HEADER}_h + +-#ifndef MOZ_HAVE_INCLUDED_ALLOC +-#define MOZ_HAVE_INCLUDED_ALLOC +- + #if _HAS_EXCEPTIONS + # error "STL code can only be used with -fno-exceptions" + #endif + ++// Include mozalloc after the STL header and all other headers it includes ++// have been preprocessed. ++#if !defined(MOZ_INCLUDE_MOZALLOC_H) ++# define MOZ_INCLUDE_MOZALLOC_H ++# define MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER} ++#endif ++ + // Code built with !_HAS_EXCEPTIONS calls std::_Throw(), but the win2k + // CRT doesn't export std::_Throw(). So we define it. + #ifndef mozilla_Throw_h + # include "mozilla/throw_msvc.h" + #endif + +-// Code might include <new> before other wrapped headers, but <new> +-// includes <exception> and so we want to wrap it. But mozalloc.h +-// wants <new> also, so we break the cycle by always explicitly +-// including <new> here. +-#include <${NEW_HEADER_PATH}> +- +-// See if we're in code that can use mozalloc. NB: this duplicates +-// code in nscore.h because nscore.h pulls in prtypes.h, and chromium +-// can't build with that being included before base/basictypes.h. +-#if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) +-# include "mozilla/mozalloc.h" +-#else +-# error "STL code can only be used with infallible ::operator new()" +-#endif +-#endif /* MOZ_HAVE_INCLUDED_ALLOC */ +- + #ifdef _DEBUG + // From + // http://msdn.microsoft.com/en-us/library/aa985982%28VS.80%29.aspx + // and + // http://msdn.microsoft.com/en-us/library/aa985965%28VS.80%29.aspx + // there appear to be two types of STL container checking. The + // former is enabled by -D_DEBUG (which is implied by -MDd or -MTd), and + // looks to be full generation/mutation checked iterators as done by +@@ -70,9 +58,20 @@ + // but that's OK because we're not throwing them. + #pragma warning( push ) + #pragma warning( disable : 4275 4530 ) + + #include <${HEADER_PATH}> + + #pragma warning( pop ) + ++#ifdef MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER} ++// See if we're in code that can use mozalloc. NB: this duplicates ++// code in nscore.h because nscore.h pulls in prtypes.h, and chromium ++// can't build with that being included before base/basictypes.h. ++# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) ++# include "mozilla/mozalloc.h" ++# else ++# error "STL code can only be used with infallible ::operator new()" ++# endif ++#endif ++ + #endif // if mozilla_${HEADER}_h +diff --git memory/mozalloc/mozalloc.h memory/mozalloc/mozalloc.h +--- memory/mozalloc/mozalloc.h ++++ memory/mozalloc/mozalloc.h +@@ -7,20 +7,27 @@ + + #ifndef mozilla_mozalloc_h + #define mozilla_mozalloc_h + + /* + * https://bugzilla.mozilla.org/show_bug.cgi?id=427099 + */ + +-#include <stdlib.h> +-#include <string.h> + #if defined(__cplusplus) + # include <new> ++// Since libstdc++ 6, including the C headers (e.g. stdlib.h) instead of the ++// corresponding C++ header (e.g. cstdlib) can cause confusion in C++ code ++// using things defined there. Specifically, with stdlib.h, the use of abs() ++// in gfx/graphite2/src/inc/UtfCodec.h somehow ends up picking the wrong abs() ++# include <cstdlib> ++# include <cstring> ++#else ++# include <stdlib.h> ++# include <string.h> + #endif + + #if defined(__cplusplus) + #include "mozilla/fallible.h" + #include "mozilla/TemplateLib.h" + #endif + #include "mozilla/Attributes.h" + #include "mozilla/Types.h" Modified: head/www/libxul/Makefile ============================================================================== --- head/www/libxul/Makefile Sun Sep 18 18:18:35 2016 (r422402) +++ head/www/libxul/Makefile Sun Sep 18 18:38:21 2016 (r422403) @@ -3,7 +3,7 @@ PORTNAME= libxul DISTVERSION= 45.4.0 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES?= www devel MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source \ MOZILLA/firefox/candidates/${DISTVERSION}esr-candidates/build2/source Copied: head/www/libxul/files/patch-bug1245076 (from r421523, head/www/firefox/files/patch-bug1245076) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/libxul/files/patch-bug1245076 Sun Sep 18 18:38:21 2016 (r422403, copy of r421523, head/www/firefox/files/patch-bug1245076) @@ -0,0 +1,74 @@ + +# HG changeset patch +# User Mike Hommey <mh+mozilla@glandium.org> +# Date 1457596445 -32400 +# Node ID 55212130f19da3079167a6b0a5a0ed6689c9a71d +# Parent 27c94617d7064d566c24a42e11cd4c7ef725923d +Bug 1245076 - Don't include mozalloc.h from the cstdlib wrapper. r=froydnj + +Our STL wrappers do various different things, one of which is including +mozalloc.h for infallible operator new. mozalloc.h includes stdlib.h, +which, in libstdc++ >= 6 is now itself a wrapper around cstdlib, which +circles back to our STL wrapper. + +But of the things our STL wrappers do, including mozalloc.h is not one +that is necessary for cstdlib. So skip including mozalloc.h in our +cstdlib wrapper. + +Additionally, some C++ sources (in media/mtransport) are including +headers in an extern "C" block, which end up including stdlib.h, which +ends up including cstdlib because really, this is all C++, and our +wrapper pre-includes <new> for mozalloc.h, which fails because templates +don't work inside extern "C". So, don't pre-include <new> when we're not +including mozalloc.h. + + +diff --git config/gcc-stl-wrapper.template.h config/gcc-stl-wrapper.template.h +--- config/gcc-stl-wrapper.template.h ++++ config/gcc-stl-wrapper.template.h +@@ -12,33 +12,40 @@ + // compiling ObjC. + #if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS) + # error "STL code can only be used with -fno-exceptions" + #endif + + // Silence "warning: #include_next is a GCC extension" + #pragma GCC system_header + ++// Don't include mozalloc for cstdlib. See bug 1245076. ++#ifndef moz_dont_include_mozalloc_for_cstdlib ++# define moz_dont_include_mozalloc_for_cstdlib ++#endif ++#ifndef moz_dont_include_mozalloc_for_${HEADER} + // mozalloc.h wants <new>; break the cycle by always explicitly + // including <new> here. NB: this is a tad sneaky. Sez the gcc docs: + // + // `#include_next' does not distinguish between <file> and "file" + // inclusion, nor does it check that the file you specify has the + // same name as the current file. It simply looks for the file + // named, starting with the directory in the search path after the + // one where the current file was found. +-#include_next <new> ++# include_next <new> + + // See if we're in code that can use mozalloc. NB: this duplicates + // code in nscore.h because nscore.h pulls in prtypes.h, and chromium + // can't build with that being included before base/basictypes.h. +-#if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) +-# include "mozilla/mozalloc.h" +-#else +-# error "STL code can only be used with infallible ::operator new()" ++# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) ++# include "mozilla/mozalloc.h" ++# else ++# error "STL code can only be used with infallible ::operator new()" ++# endif ++ + #endif + + #if defined(DEBUG) && !defined(_GLIBCXX_DEBUG) + // Enable checked iterators and other goodies + // + // FIXME/bug 551254: gcc's debug STL implementation requires -frtti. + // Figure out how to resolve this with -fno-rtti. Maybe build with + // -frtti in DEBUG builds? Copied and modified: head/www/libxul/files/patch-bug1268816 (from r421523, head/www/firefox/files/patch-bug1268816) ============================================================================== --- head/www/firefox/files/patch-bug1268816 Wed Sep 7 21:47:23 2016 (r421523, copy source) +++ head/www/libxul/files/patch-bug1268816 Sun Sep 18 18:38:21 2016 (r422403) @@ -48,104 +48,3 @@ diff --git config/system-headers config/ ucontext.h uconv.h UCursor.h -diff --git gfx/skia/skia/include/config/SkUserConfig.h gfx/skia/skia/include/config/SkUserConfig.h ---- gfx/skia/skia/include/config/SkUserConfig.h -+++ gfx/skia/skia/include/config/SkUserConfig.h -@@ -159,9 +159,20 @@ - #ifndef MOZ_IMPLICIT - # ifdef MOZ_CLANG_PLUGIN - # define MOZ_IMPLICIT __attribute__((annotate("moz_implicit"))) - # else - # define MOZ_IMPLICIT - # endif - #endif - -+/* Check if building with either MSVC, libc++, or a sufficiently recent version of libstdc++. -++ * On platforms like OS X 10.6 or older Android SDKs, we need to work around a lack of certain -++ * C++11 features. -++ */ -+#include "mozilla/Compiler.h" -+#if MOZ_IS_MSVC || MOZ_USING_LIBCXX || MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 8, 0) -+# define MOZ_SKIA_AVOID_CXX11 0 -+#else -+# define MOZ_SKIA_AVOID_CXX11 1 - #endif -+ -+#endif -diff --git gfx/skia/skia/include/private/SkTLogic.h gfx/skia/skia/include/private/SkTLogic.h ---- gfx/skia/skia/include/private/SkTLogic.h -+++ gfx/skia/skia/include/private/SkTLogic.h -@@ -24,7 +24,7 @@ - #include <algorithm> - #endif - --#ifdef MOZ_SKIA -+#if MOZ_SKIA_AVOID_CXX11 - #include "mozilla/Move.h" - #include "mozilla/TypeTraits.h" - -@@ -32,23 +32,9 @@ - #include "mozilla/Function.h" - #endif - --// In libc++, symbols such as std::forward may be defined in std::__1. --// The _LIBCPP_BEGIN_NAMESPACE_STD and _LIBCPP_END_NAMESPACE_STD macros --// will expand to the correct namespace. --#ifdef _LIBCPP_BEGIN_NAMESPACE_STD --#define MOZ_BEGIN_STD_NAMESPACE _LIBCPP_BEGIN_NAMESPACE_STD --#define MOZ_END_STD_NAMESPACE _LIBCPP_END_NAMESPACE_STD --#else --#define MOZ_BEGIN_STD_NAMESPACE namespace std { --#define MOZ_END_STD_NAMESPACE } --#endif -- --MOZ_BEGIN_STD_NAMESPACE -+namespace std { - using mozilla::Forward; - #define forward Forward --MOZ_END_STD_NAMESPACE -- --namespace std { - #if SKIA_IMPLEMENTATION - using mozilla::IntegralConstant; - using mozilla::IsEmpty; -@@ -73,7 +59,7 @@ template <bool B, typename T = void> usi - - } - --#else /* !MOZ_SKIA */ -+#else /* !MOZ_SKIA_AVOID_CXX11 */ - - #include <type_traits> - #include <functional> -@@ -178,7 +164,7 @@ template <typename D, typename S> using - - } // namespace sknonstd - --#endif /* MOZ_SKIA */ -+#endif /* MOZ_SKIA_AVOID_CXX11 */ - - // Just a pithier wrapper for enable_if_t. - #define SK_WHEN(condition, T) skstd::enable_if_t<!!(condition), T> -diff --git gfx/skia/skia/include/private/SkUniquePtr.h gfx/skia/skia/include/private/SkUniquePtr.h ---- gfx/skia/skia/include/private/SkUniquePtr.h -+++ gfx/skia/skia/include/private/SkUniquePtr.h -@@ -7,17 +7,17 @@ - - #ifndef SkUniquePtr_DEFINED - #define SkUniquePtr_DEFINED - - #include "SkTLogic.h" - #include <cstddef> - #include <utility> - --#ifdef MOZ_SKIA -+#if MOZ_SKIA_AVOID_CXX11 - #include "mozilla/UniquePtr.h" - - namespace std { - using mozilla::DefaultDelete; - using mozilla::UniquePtr; - } - - namespace skstd { Copied: head/www/libxul/files/patch-bug1269171 (from r421523, head/www/firefox/files/patch-bug1269171) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/libxul/files/patch-bug1269171 Sun Sep 18 18:38:21 2016 (r422403, copy of r421523, head/www/firefox/files/patch-bug1269171) @@ -0,0 +1,258 @@ + +# HG changeset patch +# User Mike Hommey <mh+mozilla@glandium.org> +# Date 1463557039 -32400 +# Node ID 68da139d0866977c0ada86319fa94388f2255446 +# Parent a640e6fa8ab9977fb6c5bcf63dc4daca6699477b +Bug 1269171 - Change how mozalloc.h is hooked in STL wrappers. r=froydnj + +Since the introduction of the STL wrappers, they have included +mozalloc.h, and multiple times, we've hit header reentrancy problems, +and worked around them as best as we could. + +Taking a step back, all mozalloc.h does is: +- declare moz_* allocator functions. +- define inline implementations of various operator new/delete variants. + +The first only requires the functions to be declared before they are used, +so mozalloc.h only needs to be included before anything that would use +those functions. + +The second doesn't actually require a specific order, as long as the +declaration for those functions comes before their use, and they are +either declared in <new> or implicitly by the C++ compiler. + +So all in all, it doesn't matter that mozalloc.h is included before the +wrapped STL headers. What matters is that it's included when STL headers +are included. So arrange things such that mozalloc.h is included after +the first wrapped STL header is fully preprocessed (and all its includes +have been included). + + +diff --git config/gcc-stl-wrapper.template.h config/gcc-stl-wrapper.template.h +--- config/gcc-stl-wrapper.template.h ++++ config/gcc-stl-wrapper.template.h +@@ -12,56 +12,54 @@ + // compiling ObjC. + #if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS) + # error "STL code can only be used with -fno-exceptions" + #endif + + // Silence "warning: #include_next is a GCC extension" + #pragma GCC system_header + +-// Don't include mozalloc for cstdlib. See bug 1245076. +-#ifndef moz_dont_include_mozalloc_for_cstdlib +-# define moz_dont_include_mozalloc_for_cstdlib +-#endif +-#ifndef moz_dont_include_mozalloc_for_${HEADER} +-// mozalloc.h wants <new>; break the cycle by always explicitly +-// including <new> here. NB: this is a tad sneaky. Sez the gcc docs: +-// +-// `#include_next' does not distinguish between <file> and "file" +-// inclusion, nor does it check that the file you specify has the +-// same name as the current file. It simply looks for the file +-// named, starting with the directory in the search path after the +-// one where the current file was found. +-# include_next <new> +- +-// See if we're in code that can use mozalloc. NB: this duplicates +-// code in nscore.h because nscore.h pulls in prtypes.h, and chromium +-// can't build with that being included before base/basictypes.h. +-# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) +-# include "mozilla/mozalloc.h" +-# else +-# error "STL code can only be used with infallible ::operator new()" +-# endif +- +-#endif +- + #if defined(DEBUG) && !defined(_GLIBCXX_DEBUG) + // Enable checked iterators and other goodies + // + // FIXME/bug 551254: gcc's debug STL implementation requires -frtti. + // Figure out how to resolve this with -fno-rtti. Maybe build with + // -frtti in DEBUG builds? + // + // # define _GLIBCXX_DEBUG 1 + #endif + ++// Don't include mozalloc for cstdlib. See bug 1245076. ++#ifndef moz_dont_include_mozalloc_for_cstdlib ++# define moz_dont_include_mozalloc_for_cstdlib ++#endif ++ ++// Include mozalloc after the STL header and all other headers it includes ++// have been preprocessed. ++#if !defined(MOZ_INCLUDE_MOZALLOC_H) && \ ++ !defined(moz_dont_include_mozalloc_for_${HEADER}) ++# define MOZ_INCLUDE_MOZALLOC_H ++# define MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER} ++#endif ++ + #pragma GCC visibility push(default) + #include_next <${HEADER}> + #pragma GCC visibility pop + ++#ifdef MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER} ++// See if we're in code that can use mozalloc. NB: this duplicates ++// code in nscore.h because nscore.h pulls in prtypes.h, and chromium ++// can't build with that being included before base/basictypes.h. ++# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC) ++# include "mozilla/mozalloc.h" ++# else ++# error "STL code can only be used with infallible ::operator new()" ++# endif ++#endif ++ + // gcc calls a __throw_*() function from bits/functexcept.h when it + // wants to "throw an exception". functexcept exists nominally to + // support -fno-exceptions, but since we'll always use the system + // libstdc++, and it's compiled with exceptions, then in practice + // these __throw_*() functions will always throw exceptions (shades of + // -fshort-wchar). We don't want that and so define our own inlined + // __throw_*(). + #ifndef mozilla_throw_gcc_h +diff --git config/make-stl-wrappers.py config/make-stl-wrappers.py +--- config/make-stl-wrappers.py ++++ config/make-stl-wrappers.py +@@ -25,28 +25,26 @@ def header_path(header, compiler): + def is_comment(line): + return re.match(r'\s*#.*', line) + + def main(outdir, compiler, template_file, header_list_file): + if not os.path.isdir(outdir): + os.mkdir(outdir) + + template = open(template_file, 'r').read() +- path_to_new = header_path('new', compiler) + + for header in open(header_list_file, 'r'): + header = header.rstrip() + if 0 == len(header) or is_comment(header): + continue + + path = header_path(header, compiler) + with FileAvoidWrite(os.path.join(outdir, header)) as f: + f.write(string.Template(template).substitute(HEADER=header, +- HEADER_PATH=path, +- NEW_HEADER_PATH=path_to_new)) ++ HEADER_PATH=path)) + + + if __name__ == '__main__': + if 5 != len(sys.argv): + print("""Usage: + python {0} OUT_DIR ('msvc'|'gcc') TEMPLATE_FILE HEADER_LIST_FILE + """.format(sys.argv[0]), file=sys.stderr) + sys.exit(1) *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201609181838.u8IIcLUA047432>