Compare commits
No commits in common. "rawhide" and "f41" have entirely different histories.
20 changed files with 2004 additions and 70 deletions
12
.gitignore
vendored
12
.gitignore
vendored
|
|
@ -284,15 +284,3 @@
|
|||
/icecat-128.12.0-rh1.tar.bz2
|
||||
/icecat-128.13.0-langpacks.tar.gz
|
||||
/icecat-128.13.0-rh1.tar.bz2
|
||||
/icecat-128.14.0-langpacks.tar.gz
|
||||
/icecat-128.14.0-rh1.tar.bz2
|
||||
/icecat-140.3.0-langpacks.tar.gz
|
||||
/icecat-140.3.0-rh1.tar.bz2
|
||||
/icecat-140.4.0-langpacks.tar.gz
|
||||
/icecat-140.4.0-rh1.tar.bz2
|
||||
/icecat-140.5.0-langpacks.tar.gz
|
||||
/icecat-140.5.0-rh1.tar.bz2
|
||||
/icecat-140.6.0-langpacks.tar.gz
|
||||
/icecat-140.6.0-rh1.tar.bz2
|
||||
/icecat-140.7.0-langpacks.tar.gz
|
||||
/icecat-140.7.0-rh1.tar.bz2
|
||||
|
|
|
|||
36
build-aarch64-skia.patch
Normal file
36
build-aarch64-skia.patch
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
diff -up firefox-128.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h.aarch64-skia firefox-128.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h
|
||||
--- firefox-128.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h.aarch64-skia 2024-07-02 11:10:25.047099913 +0200
|
||||
+++ firefox-128.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h 2024-07-02 11:15:43.855410571 +0200
|
||||
@@ -151,7 +151,7 @@ SI U32 to_fixed(F f) { return (U32)cast
|
||||
|
||||
|
||||
SI F F_from_Half(U16 half) {
|
||||
-#if defined(USING_NEON_F16C)
|
||||
+#if 0 // defined(USING_NEON_F16C)
|
||||
return vcvt_f32_f16((float16x4_t)half);
|
||||
#elif defined(USING_AVX512F)
|
||||
return (F)_mm512_cvtph_ps((__m256i)half);
|
||||
@@ -178,7 +178,7 @@ SI F F_from_Half(U16 half) {
|
||||
__attribute__((no_sanitize("unsigned-integer-overflow")))
|
||||
#endif
|
||||
SI U16 Half_from_F(F f) {
|
||||
-#if defined(USING_NEON_F16C)
|
||||
+#if 0 //defined(USING_NEON_F16C)
|
||||
return (U16)vcvt_f16_f32(f);
|
||||
#elif defined(USING_AVX512F)
|
||||
return (U16)_mm512_cvtps_ph((__m512 )f, _MM_FROUND_CUR_DIRECTION );
|
||||
diff -up firefox-128.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia firefox-128.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h
|
||||
--- firefox-128.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia 2024-07-02 11:10:25.048099949 +0200
|
||||
+++ firefox-128.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h 2024-07-02 11:13:33.384783413 +0200
|
||||
@@ -1425,8 +1425,8 @@ SI F from_half(U16 h) {
|
||||
}
|
||||
|
||||
SI U16 to_half(F f) {
|
||||
-#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64)
|
||||
- return (U16)vcvt_f16_f32(f);
|
||||
+#if 0 //defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64)
|
||||
+ return (U16)vcvt_f16_f32(f);
|
||||
|
||||
#elif defined(JUMPER_IS_SKX)
|
||||
return (U16)_mm512_cvtps_ph(f, _MM_FROUND_CUR_DIRECTION);
|
||||
|
||||
12
build-arm-libopus.patch
Normal file
12
build-arm-libopus.patch
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
diff -up firefox-66.0/media/libopus/silk/arm/arm_silk_map.c.old firefox-66.0/media/libopus/silk/arm/arm_silk_map.c
|
||||
--- firefox-66.0/media/libopus/silk/arm/arm_silk_map.c.old 2019-03-12 21:07:35.356677522 +0100
|
||||
+++ firefox-66.0/media/libopus/silk/arm/arm_silk_map.c 2019-03-12 21:07:42.937693394 +0100
|
||||
@@ -28,7 +28,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
-#include "main_FIX.h"
|
||||
+#include "fixed/main_FIX.h"
|
||||
#include "NSQ.h"
|
||||
#include "SigProc_FIX.h"
|
||||
|
||||
12
firefox-nss-version.patch
Normal file
12
firefox-nss-version.patch
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
diff -up firefox-78.0/toolkit/moz.configure.nss-version firefox-78.0/toolkit/moz.configure
|
||||
--- firefox-78.0/toolkit/moz.configure.nss-version 2020-06-30 08:47:09.657501414 +0200
|
||||
+++ firefox-78.0/toolkit/moz.configure 2020-06-30 08:47:12.652510169 +0200
|
||||
@@ -2089,7 +2089,7 @@ option('--with-system-nss', help='Use sy
|
||||
|
||||
imply_option('--with-system-nspr', True, when='--with-system-nss')
|
||||
|
||||
-nss_pkg = pkg_check_modules('NSS', 'nss >= 3.53.1', when='--with-system-nss', config=False)
|
||||
+nss_pkg = pkg_check_modules('NSS', 'nss >= 3.53.0', when='--with-system-nss', config=False)
|
||||
|
||||
set_config('MOZ_SYSTEM_NSS', True, when='--with-system-nss')
|
||||
|
||||
392
icecat-115.19.0-fix_mz1917964.patch
Normal file
392
icecat-115.19.0-fix_mz1917964.patch
Normal file
|
|
@ -0,0 +1,392 @@
|
|||
|
||||
# HG changeset patch
|
||||
# User Sam James <sam@cmpct.info>
|
||||
# Date 1726081531 0
|
||||
# Node ID 0249085453e0d5c8378a1a053b94753fd52c956c
|
||||
# Parent 3fca72d15659808d8f453b44a13320d4f6ceca86
|
||||
Bug 1917964 - Fix swgl build with GCC 15. r=gfx-reviewers,lsalzman
|
||||
|
||||
Fix broken specialisations which are exposed by a recent change in GCC trunk.
|
||||
|
||||
See https://gcc.gnu.org/PR116666.
|
||||
|
||||
Differential Revision: https://phabricator.services.mozilla.com/D221744
|
||||
|
||||
diff --git a/gfx/wr/swgl/src/vector_type.h b/gfx/wr/swgl/src/vector_type.h
|
||||
--- a/gfx/wr/swgl/src/vector_type.h
|
||||
+++ b/gfx/wr/swgl/src/vector_type.h
|
||||
@@ -235,33 +235,33 @@ struct VectorType {
|
||||
data /= x.data;
|
||||
return *this;
|
||||
}
|
||||
VectorType& operator%=(int x) {
|
||||
data %= x;
|
||||
return *this;
|
||||
}
|
||||
|
||||
- VectorType<mask_type, N> operator==(VectorType x) const {
|
||||
- return VectorType<mask_type, N>::wrap(data == x.data);
|
||||
+ VectorType<mask_index, N> operator==(VectorType x) const {
|
||||
+ return VectorType<mask_index, N>::wrap(data == x.data);
|
||||
}
|
||||
- VectorType<mask_type, N> operator!=(VectorType x) const {
|
||||
- return VectorType<mask_type, N>::wrap(data != x.data);
|
||||
+ VectorType<mask_index, N> operator!=(VectorType x) const {
|
||||
+ return VectorType<mask_index, N>::wrap(data != x.data);
|
||||
}
|
||||
- VectorType<mask_type, N> operator<(VectorType x) const {
|
||||
- return VectorType<mask_type, N>::wrap(data < x.data);
|
||||
+ VectorType<mask_index, N> operator<(VectorType x) const {
|
||||
+ return VectorType<mask_index, N>::wrap(data < x.data);
|
||||
}
|
||||
- VectorType<mask_type, N> operator>(VectorType x) const {
|
||||
- return VectorType<mask_type, N>::wrap(data > x.data);
|
||||
+ VectorType<mask_index, N> operator>(VectorType x) const {
|
||||
+ return VectorType<mask_index, N>::wrap(data > x.data);
|
||||
}
|
||||
- VectorType<mask_type, N> operator<=(VectorType x) const {
|
||||
- return VectorType<mask_type, N>::wrap(data <= x.data);
|
||||
+ VectorType<mask_index, N> operator<=(VectorType x) const {
|
||||
+ return VectorType<mask_index, N>::wrap(data <= x.data);
|
||||
}
|
||||
- VectorType<mask_type, N> operator>=(VectorType x) const {
|
||||
- return VectorType<mask_type, N>::wrap(data >= x.data);
|
||||
+ VectorType<mask_index, N> operator>=(VectorType x) const {
|
||||
+ return VectorType<mask_index, N>::wrap(data >= x.data);
|
||||
}
|
||||
|
||||
VectorType operator!() const { return wrap(!data); }
|
||||
VectorType operator&&(VectorType x) const { return wrap(data & x.data); }
|
||||
VectorType operator||(VectorType x) const { return wrap(data | x.data); }
|
||||
|
||||
VectorType& operator=(VectorType x) {
|
||||
data = x.data;
|
||||
|
||||
|
||||
# HG changeset patch
|
||||
# User Lee Salzman <lsalzman@mozilla.com>
|
||||
# Date 1726239330 0
|
||||
# Node ID d36ca9941b2f90d910854e38293875e32c49796b
|
||||
# Parent 156543617de576c07a7914dd20d13692ddb0845a
|
||||
Bug 1917964 - Use __builtin_convertvector and __builtin_shufflevector on GCC when available. r=aosmond
|
||||
|
||||
GCC upstream recommends we use __builtin_convertvector and __builtin_shufflevector instead of __builtin_shuffle
|
||||
for better code generation.
|
||||
|
||||
See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116666#c7
|
||||
|
||||
Differential Revision: https://phabricator.services.mozilla.com/D222067
|
||||
|
||||
diff --git a/gfx/wr/swgl/src/vector_type.h b/gfx/wr/swgl/src/vector_type.h
|
||||
--- a/gfx/wr/swgl/src/vector_type.h
|
||||
+++ b/gfx/wr/swgl/src/vector_type.h
|
||||
@@ -89,16 +89,25 @@ template <>
|
||||
struct VectorMask<uint8_t> {
|
||||
typedef int8_t type;
|
||||
};
|
||||
template <>
|
||||
struct VectorMask<float> {
|
||||
typedef int type;
|
||||
};
|
||||
|
||||
+# ifdef __has_builtin
|
||||
+# if __has_builtin(__builtin_convertvector)
|
||||
+# define HAS_BUILTIN_CONVERTVECTOR
|
||||
+# endif
|
||||
+# if __has_builtin(__builtin_shufflevector)
|
||||
+# define HAS_BUILTIN_SHUFFLEVECTOR
|
||||
+# endif
|
||||
+# endif
|
||||
+
|
||||
template <typename T, int N>
|
||||
struct VectorType {
|
||||
enum { SIZE = N };
|
||||
|
||||
typedef T data_type __attribute__((vector_size(sizeof(T) * N)));
|
||||
typedef typename VectorMask<T>::type mask_index;
|
||||
typedef mask_index mask_type
|
||||
__attribute__((vector_size(sizeof(mask_index) * N)));
|
||||
@@ -131,16 +140,23 @@ struct VectorType {
|
||||
VectorType v;
|
||||
v.data = data;
|
||||
return v;
|
||||
}
|
||||
|
||||
T& operator[](size_t i) { return elements[i]; }
|
||||
T operator[](size_t i) const { return elements[i]; }
|
||||
|
||||
+# ifdef HAS_BUILTIN_CONVERTVECTOR
|
||||
+ template <typename U, int M>
|
||||
+ operator VectorType<U, M>() const {
|
||||
+ return VectorType<U, M>::wrap(
|
||||
+ __builtin_convertvector(data, typename VectorType<U, M>::data_type));
|
||||
+ }
|
||||
+# else
|
||||
template <typename U>
|
||||
operator VectorType<U, 2>() const {
|
||||
return VectorType<U, 2>::wrap(
|
||||
(typename VectorType<U, N>::data_type){U(x), U(y)});
|
||||
}
|
||||
template <typename U>
|
||||
operator VectorType<U, 4>() const {
|
||||
return VectorType<U, 4>::wrap(
|
||||
@@ -168,16 +184,17 @@ struct VectorType {
|
||||
U(elements[10]),
|
||||
U(elements[11]),
|
||||
U(elements[12]),
|
||||
U(elements[13]),
|
||||
U(elements[14]),
|
||||
U(elements[15]),
|
||||
});
|
||||
}
|
||||
+# endif
|
||||
|
||||
VectorType operator-() const { return wrap(-data); }
|
||||
VectorType operator~() const { return wrap(~data); }
|
||||
|
||||
VectorType operator&(VectorType x) const { return wrap(data & x.data); }
|
||||
VectorType operator&(T x) const { return wrap(data & x); }
|
||||
VectorType operator|(VectorType x) const { return wrap(data | x.data); }
|
||||
VectorType operator|(T x) const { return wrap(data | x); }
|
||||
@@ -263,110 +280,107 @@ struct VectorType {
|
||||
VectorType operator&&(VectorType x) const { return wrap(data & x.data); }
|
||||
VectorType operator||(VectorType x) const { return wrap(data | x.data); }
|
||||
|
||||
VectorType& operator=(VectorType x) {
|
||||
data = x.data;
|
||||
return *this;
|
||||
}
|
||||
|
||||
- VectorType<T, 4> shuffle(VectorType b, mask_index x, mask_index y,
|
||||
- mask_index z, mask_index w) const {
|
||||
- return VectorType<T, 4>::wrap(__builtin_shuffle(
|
||||
- data, b.data, (typename VectorType<T, 4>::mask_type){x, y, z, w}));
|
||||
- }
|
||||
- VectorType<T, 8> shuffle(VectorType b, mask_index x, mask_index y,
|
||||
- mask_index z, mask_index w, mask_index s,
|
||||
- mask_index t, mask_index u, mask_index v) const {
|
||||
- return VectorType<T, 8>::wrap(__builtin_shuffle(
|
||||
- data, b.data,
|
||||
- (typename VectorType<T, 8>::mask_type){x, y, z, w, s, t, u, v}));
|
||||
- }
|
||||
- VectorType<T, 16> shuffle(VectorType b, mask_index x, mask_index y,
|
||||
- mask_index z, mask_index w, mask_index s,
|
||||
- mask_index t, mask_index u, mask_index v,
|
||||
- mask_index i, mask_index j, mask_index k,
|
||||
- mask_index l, mask_index m, mask_index n,
|
||||
- mask_index o, mask_index p) const {
|
||||
- return VectorType<T, 16>::wrap(
|
||||
- __builtin_shuffle(data, b.data,
|
||||
- (typename VectorType<T, 16>::mask_type){
|
||||
- x, y, z, w, s, t, u, v, i, j, k, l, m, n, o, p}));
|
||||
- }
|
||||
-
|
||||
- VectorType<T, 4> swizzle(mask_index x, mask_index y, mask_index z,
|
||||
- mask_index w) const {
|
||||
- return VectorType<T, 4>::wrap(__builtin_shuffle(
|
||||
- data, (typename VectorType<T, 4>::mask_type){x, y, z, w}));
|
||||
- }
|
||||
- VectorType<T, 8> swizzle(mask_index x, mask_index y, mask_index z,
|
||||
- mask_index w, mask_index s, mask_index t,
|
||||
- mask_index u, mask_index v) const {
|
||||
- return VectorType<T, 8>::wrap(__builtin_shuffle(
|
||||
- data, (typename VectorType<T, 8>::mask_type){x, y, z, w, s, t, u, v}));
|
||||
- }
|
||||
-
|
||||
SI VectorType wrap(half_type low, half_type high) {
|
||||
VectorType v;
|
||||
v.low_half = low;
|
||||
v.high_half = high;
|
||||
return v;
|
||||
}
|
||||
|
||||
VectorType<T, N * 2> combine(VectorType high) const {
|
||||
return VectorType<T, N * 2>::wrap(data, high.data);
|
||||
}
|
||||
|
||||
-# define xxxx swizzle(0, 0, 0, 0)
|
||||
-# define yyyy swizzle(1, 1, 1, 1)
|
||||
-# define zzzz swizzle(2, 2, 2, 2)
|
||||
-# define wwww swizzle(3, 3, 3, 3)
|
||||
-# define xxyy swizzle(0, 0, 1, 1)
|
||||
-# define xxzz swizzle(0, 0, 2, 2)
|
||||
-# define yyww swizzle(1, 1, 3, 3)
|
||||
-# define zzww swizzle(2, 2, 3, 3)
|
||||
-# define xyxy swizzle(0, 1, 0, 1)
|
||||
-# define xzxz swizzle(0, 2, 0, 2)
|
||||
-# define ywyw swizzle(1, 3, 1, 3)
|
||||
-# define zwzw swizzle(2, 3, 2, 3)
|
||||
-# define zwxy swizzle(2, 3, 0, 1)
|
||||
-# define zyxw swizzle(2, 1, 0, 3)
|
||||
-# define xxyz swizzle(0, 0, 1, 2)
|
||||
-# define xyyz swizzle(0, 1, 1, 2)
|
||||
-# define xyzz swizzle(0, 1, 2, 2)
|
||||
-# define xzyw swizzle(0, 2, 1, 3)
|
||||
-# define yzwx swizzle(1, 2, 3, 0)
|
||||
-# define wxyz swizzle(3, 0, 1, 2)
|
||||
-# define wzyx swizzle(3, 2, 1, 0)
|
||||
-# define xxxxyyyy XXXXYYYY()
|
||||
- VectorType<T, 8> XXXXYYYY() const {
|
||||
- return swizzle(0, 0, 0, 0).combine(swizzle(1, 1, 1, 1));
|
||||
+# ifdef HAS_BUILTIN_SHUFFLEVECTOR
|
||||
+ template <mask_index... INDEXES, int M = sizeof...(INDEXES)>
|
||||
+ VectorType<T, M> shuffle(VectorType b) const {
|
||||
+ return VectorType<T, M>::wrap(
|
||||
+ __builtin_shufflevector(data, b.data, INDEXES...));
|
||||
+ }
|
||||
+
|
||||
+ template <mask_index... INDEXES, int M = sizeof...(INDEXES)>
|
||||
+ VectorType<T, M> swizzle() const {
|
||||
+ return VectorType<T, M>::wrap(
|
||||
+ __builtin_shufflevector(data, data, INDEXES...));
|
||||
+ }
|
||||
+# else
|
||||
+ template <mask_index... INDEXES, int M = sizeof...(INDEXES)>
|
||||
+ VectorType<T, M> shuffle(VectorType<T, M> b) const {
|
||||
+ return VectorType<T, M>::wrap(__builtin_shuffle(
|
||||
+ data, b.data, (typename VectorType<T, M>::mask_type){INDEXES...}));
|
||||
+ }
|
||||
+
|
||||
+ template <mask_index A, mask_index B, mask_index C, mask_index D,
|
||||
+ mask_index E, mask_index F, mask_index G, mask_index H>
|
||||
+ VectorType<T, 8> shuffle(VectorType<T, 4> b) const {
|
||||
+ return shuffle<A, B, C, D>(b).combine(shuffle<E, F, G, H>(b));
|
||||
+ }
|
||||
+
|
||||
+ template <mask_index A, mask_index B, mask_index C, mask_index D,
|
||||
+ mask_index E, mask_index F, mask_index G, mask_index H,
|
||||
+ mask_index I, mask_index J, mask_index K, mask_index L,
|
||||
+ mask_index W, mask_index X, mask_index Y, mask_index Z>
|
||||
+ VectorType<T, 16> shuffle(VectorType<T, 4> b) const {
|
||||
+ return shuffle<A, B, C, D, E, F, G, H>(b).combine(
|
||||
+ shuffle<I, J, K, L, W, X, Y, Z>(b));
|
||||
}
|
||||
-# define zzzzwwww ZZZZWWWW()
|
||||
- VectorType<T, 8> ZZZZWWWW() const {
|
||||
- return swizzle(2, 2, 2, 2).combine(swizzle(3, 3, 3, 3));
|
||||
+
|
||||
+ template <mask_index A, mask_index B, mask_index C, mask_index D,
|
||||
+ mask_index E, mask_index F, mask_index G, mask_index H,
|
||||
+ mask_index I, mask_index J, mask_index K, mask_index L,
|
||||
+ mask_index W, mask_index X, mask_index Y, mask_index Z>
|
||||
+ VectorType<T, 16> shuffle(VectorType<T, 8> b) const {
|
||||
+ return shuffle<A, B, C, D, E, F, G, H>(b).combine(
|
||||
+ shuffle<I, J, K, L, W, X, Y, Z>(b));
|
||||
}
|
||||
-# define xyzwxyzw XYZWXYZW()
|
||||
- VectorType<T, 8> XYZWXYZW() const { return combine(*this); }
|
||||
-# define xyxyxyxy XYXYXYXY()
|
||||
- VectorType<T, 8> XYXYXYXY() const {
|
||||
- return swizzle(0, 1, 0, 1).combine(swizzle(0, 1, 0, 1));
|
||||
+
|
||||
+ template <mask_index... INDEXES, int M = sizeof...(INDEXES)>
|
||||
+ VectorType<T, M> swizzle() const {
|
||||
+ return shuffle<INDEXES...>(*this);
|
||||
}
|
||||
-# define zwzwzwzw ZWZWZWZW()
|
||||
- VectorType<T, 8> ZWZWZWZW() const {
|
||||
- return swizzle(2, 3, 2, 3).combine(swizzle(2, 3, 2, 3));
|
||||
- }
|
||||
-# define xxyyzzww XXYYZZWW()
|
||||
- VectorType<T, 8> XXYYZZWW() const {
|
||||
- return swizzle(0, 0, 1, 1).combine(swizzle(2, 2, 3, 3));
|
||||
- }
|
||||
-# define xxxxyyyyzzzzwwww XXXXYYYYZZZZWWWW()
|
||||
- VectorType<T, 16> XXXXYYYYZZZZWWWW() {
|
||||
- return XXXXYYYY().combine(ZZZZWWWW());
|
||||
- }
|
||||
+# endif
|
||||
+
|
||||
+# define SWIZZLE(...) template swizzle<__VA_ARGS__>()
|
||||
+
|
||||
+# define xxxx SWIZZLE(0, 0, 0, 0)
|
||||
+# define yyyy SWIZZLE(1, 1, 1, 1)
|
||||
+# define zzzz SWIZZLE(2, 2, 2, 2)
|
||||
+# define wwww SWIZZLE(3, 3, 3, 3)
|
||||
+# define xxyy SWIZZLE(0, 0, 1, 1)
|
||||
+# define xxzz SWIZZLE(0, 0, 2, 2)
|
||||
+# define yyww SWIZZLE(1, 1, 3, 3)
|
||||
+# define zzww SWIZZLE(2, 2, 3, 3)
|
||||
+# define xyxy SWIZZLE(0, 1, 0, 1)
|
||||
+# define xzxz SWIZZLE(0, 2, 0, 2)
|
||||
+# define ywyw SWIZZLE(1, 3, 1, 3)
|
||||
+# define zwzw SWIZZLE(2, 3, 2, 3)
|
||||
+# define zwxy SWIZZLE(2, 3, 0, 1)
|
||||
+# define zyxw SWIZZLE(2, 1, 0, 3)
|
||||
+# define xxyz SWIZZLE(0, 0, 1, 2)
|
||||
+# define xyyz SWIZZLE(0, 1, 1, 2)
|
||||
+# define xyzz SWIZZLE(0, 1, 2, 2)
|
||||
+# define xzyw SWIZZLE(0, 2, 1, 3)
|
||||
+# define yzwx SWIZZLE(1, 2, 3, 0)
|
||||
+# define wxyz SWIZZLE(3, 0, 1, 2)
|
||||
+# define wzyx SWIZZLE(3, 2, 1, 0)
|
||||
+# define xxxxyyyy SWIZZLE(0, 0, 0, 0, 1, 1, 1, 1)
|
||||
+# define zzzzwwww SWIZZLE(2, 2, 2, 2, 3, 3, 3, 3)
|
||||
+# define xyzwxyzw SWIZZLE(0, 1, 2, 3, 0, 1, 2, 3)
|
||||
+# define xyxyxyxy SWIZZLE(0, 1, 0, 1, 0, 1, 0, 1)
|
||||
+# define zwzwzwzw SWIZZLE(2, 3, 2, 3, 2, 3, 2, 3)
|
||||
+# define xxyyzzww SWIZZLE(0, 0, 1, 1, 2, 2, 3, 3)
|
||||
+# define xxxxyyyyzzzzwwww \
|
||||
+ SWIZZLE(0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct VectorType<T, 2> {
|
||||
typedef T data_type __attribute__((vector_size(sizeof(T) * 2)));
|
||||
union {
|
||||
data_type data;
|
||||
struct {
|
||||
@@ -383,17 +397,17 @@ struct VectorType<T, 2> {
|
||||
|
||||
VectorType operator&(VectorType x) const { return wrap(data & x.data); }
|
||||
VectorType operator&(T x) const { return wrap(data & x); }
|
||||
VectorType operator|(VectorType x) const { return wrap(data | x.data); }
|
||||
VectorType operator|(T x) const { return wrap(data | x); }
|
||||
};
|
||||
|
||||
# define CONVERT(vector, type) ((type)(vector))
|
||||
-# define SHUFFLE(a, b, ...) a.shuffle(b, __VA_ARGS__)
|
||||
+# define SHUFFLE(a, b, ...) ((a).template shuffle<__VA_ARGS__>(b))
|
||||
|
||||
template <typename T, int N>
|
||||
SI VectorType<T, N * 2> combine(VectorType<T, N> a, VectorType<T, N> b) {
|
||||
return VectorType<T, N * 2>::wrap(a.data, b.data);
|
||||
}
|
||||
|
||||
template <typename T, int N>
|
||||
SI VectorType<T, N / 2> lowHalf(VectorType<T, N> a) {
|
||||
@@ -473,32 +487,25 @@ SI VectorType<T, 8> zip2Low(VectorType<T
|
||||
return SHUFFLE(a, b, 0, 1, 8, 9, 2, 3, 10, 11);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
SI VectorType<T, 8> zip2High(VectorType<T, 8> a, VectorType<T, 8> b) {
|
||||
return SHUFFLE(a, b, 4, 5, 12, 13, 6, 7, 14, 15);
|
||||
}
|
||||
|
||||
-#ifdef __clang__
|
||||
template <typename T>
|
||||
SI VectorType<T, 8> zip(VectorType<T, 4> a, VectorType<T, 4> b) {
|
||||
return SHUFFLE(a, b, 0, 4, 1, 5, 2, 6, 3, 7);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
SI VectorType<T, 16> zip(VectorType<T, 8> a, VectorType<T, 8> b) {
|
||||
return SHUFFLE(a, b, 0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15);
|
||||
}
|
||||
-#else
|
||||
-template <typename T, int N>
|
||||
-SI VectorType<T, N * 2> zip(VectorType<T, N> a, VectorType<T, N> b) {
|
||||
- return combine(zipLow(a, b), zipHigh(a, b));
|
||||
-}
|
||||
-#endif
|
||||
|
||||
template <typename T>
|
||||
struct Unaligned {
|
||||
template <typename P>
|
||||
SI T load(const P* p) {
|
||||
T v;
|
||||
memcpy(&v, p, sizeof(v));
|
||||
return v;
|
||||
|
||||
|
||||
425
icecat-1742849.patch
Normal file
425
icecat-1742849.patch
Normal file
|
|
@ -0,0 +1,425 @@
|
|||
|
||||
# HG changeset patch
|
||||
# User Alexandre Lissy <lissyx+mozillians@lissyx.dyndns.org>
|
||||
# Date 1639046833 0
|
||||
# Node ID 33f81fb07d792be30dcd1008b21b187ca24f21e6
|
||||
# Parent 3382e4da79289240c4c2fe718b461f7a58bce553
|
||||
Bug 1742849 - Parsing CCache 4.4+ stats output r=mhentges
|
||||
|
||||
Statistics output changed after 4.4 and requires different parsing, as
|
||||
well as an extra --verbose to get the same informations as before.
|
||||
|
||||
See https://github.com/ccache/ccache/commit/8892814e8a790d615e44262c0005513d6d49f9e1
|
||||
|
||||
Differential Revision: https://phabricator.services.mozilla.com/D133086
|
||||
|
||||
diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py
|
||||
--- a/python/mozbuild/mozbuild/controller/building.py
|
||||
+++ b/python/mozbuild/mozbuild/controller/building.py
|
||||
@@ -5,16 +5,17 @@
|
||||
from __future__ import absolute_import, print_function, unicode_literals
|
||||
|
||||
import errno
|
||||
import getpass
|
||||
import io
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
+import re
|
||||
import shutil
|
||||
import six
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
from collections import (
|
||||
Counter,
|
||||
@@ -583,21 +584,24 @@ class BuildMonitor(MozbuildObject):
|
||||
"Swap in/out (MB): {sin}/{sout}",
|
||||
)
|
||||
|
||||
def ccache_stats(self):
|
||||
ccache_stats = None
|
||||
|
||||
ccache = mozfile.which("ccache")
|
||||
if ccache:
|
||||
+ # With CCache v4.4+ statistics might require --verbose
|
||||
+ is_version_4_4_or_newer = CCacheStats.check_version_4_4_or_newer(ccache)
|
||||
try:
|
||||
output = subprocess.check_output(
|
||||
- [ccache, "-s"], universal_newlines=True
|
||||
+ [ccache, "-s" if not is_version_4_4_or_newer else "-sv"],
|
||||
+ universal_newlines=True,
|
||||
)
|
||||
- ccache_stats = CCacheStats(output)
|
||||
+ ccache_stats = CCacheStats(output, is_version_4_4_or_newer)
|
||||
except ValueError as e:
|
||||
self.log(logging.WARNING, "ccache", {"msg": str(e)}, "{msg}")
|
||||
return ccache_stats
|
||||
|
||||
|
||||
class TerminalLoggingHandler(logging.Handler):
|
||||
"""Custom logging handler that works with terminal window dressing.
|
||||
|
||||
@@ -883,33 +887,154 @@ class CCacheStats(object):
|
||||
("cache_files", "files in cache"),
|
||||
("cache_size", "cache size"),
|
||||
("cache_max_size", "max cache size"),
|
||||
]
|
||||
|
||||
DIRECTORY_DESCRIPTION = "cache directory"
|
||||
PRIMARY_CONFIG_DESCRIPTION = "primary config"
|
||||
SECONDARY_CONFIG_DESCRIPTION = "secondary config"
|
||||
+
|
||||
+ STATS_KEYS_4_4 = [
|
||||
+ ("stats_updated", "Summary/Stats updated"),
|
||||
+ (
|
||||
+ "cache_hit_rate",
|
||||
+ "Summary/Hits",
|
||||
+ lambda x: next(iter(re.findall(r"\((.*) %\)", x)), "0.00 %"),
|
||||
+ ),
|
||||
+ (
|
||||
+ "cache_hit_direct",
|
||||
+ "Summary/Hits/Direct",
|
||||
+ lambda x: next(iter(re.findall(r"(\d+)\s+/\s+\d+\s+\(", x)), "0"),
|
||||
+ ),
|
||||
+ (
|
||||
+ "cache_hit_preprocessed",
|
||||
+ "Summary/Hits/Preprocessed",
|
||||
+ lambda x: next(iter(re.findall(r"(\d+)\s+/\s+\d+\s+\(", x)), "0"),
|
||||
+ ),
|
||||
+ ("cache_miss", "Summary/Misses"),
|
||||
+ ("error", "Summary/Errors"),
|
||||
+ ("linking", "Uncacheable/Called for linking"),
|
||||
+ ("preprocessing", "Uncacheable/Called for preprocessing"),
|
||||
+ ("failed", "Uncacheable/Compilation failed"),
|
||||
+ ("preprocessor_error", "Uncacheable/Preprocessing failed"),
|
||||
+ ("cache_file_missing", "Errors/Missing cache file"),
|
||||
+ ("bad_args", "Uncacheable/Bad compiler arguments"),
|
||||
+ ("autoconf", "Uncacheable/Autoconf compile/link"),
|
||||
+ ("no_input", "Uncacheable/No input file"),
|
||||
+ ("num_cleanups", "Primary storage/Cleanups"),
|
||||
+ ("cache_files", "Primary storage/Files"),
|
||||
+ # Cache size is reported in GB, see
|
||||
+ # https://github.com/ccache/ccache/commit/8892814e8a790d615e44262c0005513d6d49f9e1#diff-30ec2bbfafe4c3842c8e35179ef0d3253a66dcc054812e50049d0ca3b10e317fR274
|
||||
+ (
|
||||
+ "cache_size",
|
||||
+ "Primary storage/Cache size (GB)",
|
||||
+ lambda x: str(
|
||||
+ float(next(iter(re.findall(r"(.*)\s+/\s+.*\s+\(", x)), "0"))
|
||||
+ * CCacheStats.GiB
|
||||
+ ),
|
||||
+ True, # Allow to continue evaluation for the next value
|
||||
+ ),
|
||||
+ (
|
||||
+ "cache_max_size",
|
||||
+ "Primary storage/Cache size (GB)",
|
||||
+ lambda x: str(
|
||||
+ float(next(iter(re.findall(r".*\s+/\s+(.*)\s+\(", x)), "0"))
|
||||
+ * CCacheStats.GiB
|
||||
+ ),
|
||||
+ ),
|
||||
+ ]
|
||||
+
|
||||
+ SKIP_KEYS_4_4 = [
|
||||
+ "Summary/Uncacheable",
|
||||
+ "Summary/Misses/Direct",
|
||||
+ "Summary/Misses/Preprocessed",
|
||||
+ "Primary storage/Hits",
|
||||
+ "Primary storage/Misses",
|
||||
+ ]
|
||||
+
|
||||
+ DIRECTORY_DESCRIPTION_4_4 = "Summary/Cache directory"
|
||||
+ PRIMARY_CONFIG_DESCRIPTION_4_4 = "Summary/Primary config"
|
||||
+ SECONDARY_CONFIG_DESCRIPTION_4_4 = "Summary/Secondary config"
|
||||
+
|
||||
ABSOLUTE_KEYS = {"cache_files", "cache_size", "cache_max_size"}
|
||||
FORMAT_KEYS = {"cache_size", "cache_max_size"}
|
||||
|
||||
GiB = 1024 ** 3
|
||||
MiB = 1024 ** 2
|
||||
KiB = 1024
|
||||
|
||||
- def __init__(self, output=None):
|
||||
+ def __init__(self, output=None, is_version_4_4_or_newer=False):
|
||||
"""Construct an instance from the output of ccache -s."""
|
||||
self._values = {}
|
||||
self.cache_dir = ""
|
||||
self.primary_config = ""
|
||||
self.secondary_config = ""
|
||||
|
||||
if not output:
|
||||
return
|
||||
|
||||
+ if is_version_4_4_or_newer:
|
||||
+ self._parse_human_format_4_4_plus(output)
|
||||
+ else:
|
||||
+ self._parse_human_format(output)
|
||||
+
|
||||
+ def _parse_human_format_4_4_plus(self, content):
|
||||
+ head = ""
|
||||
+ subhead = ""
|
||||
+
|
||||
+ for line in content.splitlines():
|
||||
+ name = ""
|
||||
+ if not line:
|
||||
+ continue
|
||||
+ if line.startswith(" "):
|
||||
+ if not line.startswith(" "):
|
||||
+ subhead = line.strip().split(":")[0]
|
||||
+ name = line.strip().split(":")[0]
|
||||
+ raw_value = ":".join(line.split(":")[1:]).strip()
|
||||
+ if raw_value:
|
||||
+ key = head
|
||||
+ if subhead != name:
|
||||
+ key += "/{}".format(subhead)
|
||||
+ key += "/{}".format(name)
|
||||
+ self._parse_line_4_4_plus(key, raw_value)
|
||||
+ else:
|
||||
+ head = line.strip(":")
|
||||
+ subhead = ""
|
||||
+
|
||||
+ def _parse_line_4_4_plus(self, key, value):
|
||||
+ if key.startswith(self.DIRECTORY_DESCRIPTION_4_4):
|
||||
+ self.cache_dir = value
|
||||
+ elif key.startswith(self.PRIMARY_CONFIG_DESCRIPTION_4_4):
|
||||
+ self.primary_config = value
|
||||
+ elif key.startswith(self.SECONDARY_CONFIG_DESCRIPTION_4_4):
|
||||
+ self.secondary_config = value
|
||||
+ else:
|
||||
+ for seq in self.STATS_KEYS_4_4:
|
||||
+ stat_key = seq[0]
|
||||
+ stat_description = seq[1]
|
||||
+ raw_value = value
|
||||
+ if len(seq) > 2:
|
||||
+ raw_value = seq[2](value)
|
||||
+ if stat_key not in self._values and key == stat_description:
|
||||
+ self._values[stat_key] = self._parse_value(raw_value)
|
||||
+
|
||||
+ # We dont want to break when we need to extract two infos
|
||||
+ # from the same line
|
||||
+ if len(seq) < 4:
|
||||
+ break
|
||||
+ else:
|
||||
+ if key not in self.SKIP_KEYS_4_4:
|
||||
+ raise ValueError(
|
||||
+ "Failed to parse ccache stats output: '{}' '{}'".format(
|
||||
+ key, value
|
||||
+ )
|
||||
+ )
|
||||
+
|
||||
+ def _parse_human_format(self, output):
|
||||
for line in output.splitlines():
|
||||
line = line.strip()
|
||||
if line:
|
||||
self._parse_line(line)
|
||||
|
||||
def _parse_line(self, line):
|
||||
line = six.ensure_text(line)
|
||||
if line.startswith(self.DIRECTORY_DESCRIPTION):
|
||||
@@ -1050,6 +1175,29 @@
|
||||
else:
|
||||
return "%.1f Kbytes" % (float(v) / CCacheStats.KiB)
|
||||
|
||||
+ @staticmethod
|
||||
+ def check_version_4_4_or_newer(ccache):
|
||||
+ output_version = subprocess.check_output(
|
||||
+ [ccache, "--version"], universal_newlines=True
|
||||
+ )
|
||||
+ return CCacheStats._is_version_4_4_or_newer(output_version)
|
||||
+
|
||||
+ @staticmethod
|
||||
+ def _is_version_4_4_or_newer(output):
|
||||
+ if "ccache version" not in output:
|
||||
+ return False
|
||||
+
|
||||
+ major = 0
|
||||
+ minor = 0
|
||||
+
|
||||
+ for line in output.splitlines():
|
||||
+ version = re.search(r"ccache version (\d+).(\d+).*", line)
|
||||
+ if version:
|
||||
+ major = int(version.group(1))
|
||||
+ minor = int(version.group(2))
|
||||
+ break
|
||||
+
|
||||
+ return ((major << 8) + minor) >= ((4 << 8) + 4)
|
||||
|
||||
class BuildDriver(MozbuildObject):
|
||||
"""Provides a high-level API for build actions."""
|
||||
diff --git a/python/mozbuild/mozbuild/test/controller/test_ccachestats.py b/python/mozbuild/mozbuild/test/controller/test_ccachestats.py
|
||||
--- a/python/mozbuild/mozbuild/test/controller/test_ccachestats.py
|
||||
+++ b/python/mozbuild/mozbuild/test/controller/test_ccachestats.py
|
||||
@@ -223,16 +223,143 @@ class TestCcacheStats(unittest.TestCase)
|
||||
cleanups performed 3154
|
||||
files in cache 18525
|
||||
cache size 13.4 GB
|
||||
max cache size 15.0 GB
|
||||
""".format(
|
||||
timestamp=time.strftime("%c"), timestamp2=time.strftime("%c")
|
||||
)
|
||||
|
||||
+ VERSION_3_5_GIT = """
|
||||
+ ccache version 3.5.1+2_gf5309092_dirty
|
||||
+
|
||||
+ Copyright (C) 2002-2007 Andrew Tridgell
|
||||
+ Copyright (C) 2009-2019 Joel Rosdahl
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify it under
|
||||
+ the terms of the GNU General Public License as published by the Free Software
|
||||
+ Foundation; either version 3 of the License, or (at your option) any later
|
||||
+ version.
|
||||
+ """
|
||||
+
|
||||
+ VERSION_4_2 = """
|
||||
+ ccache version 4.2.1
|
||||
+
|
||||
+ Copyright (C) 2002-2007 Andrew Tridgell
|
||||
+ Copyright (C) 2009-2021 Joel Rosdahl and other contributors
|
||||
+
|
||||
+ See <https://ccache.dev/credits.html> for a complete list of contributors.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify it under
|
||||
+ the terms of the GNU General Public License as published by the Free Software
|
||||
+ Foundation; either version 3 of the License, or (at your option) any later
|
||||
+ version.
|
||||
+ """
|
||||
+
|
||||
+ VERSION_4_4 = """
|
||||
+ ccache version 4.4
|
||||
+ Features: file-storage http-storage
|
||||
+
|
||||
+ Copyright (C) 2002-2007 Andrew Tridgell
|
||||
+ Copyright (C) 2009-2021 Joel Rosdahl and other contributors
|
||||
+
|
||||
+ See <https://ccache.dev/credits.html> for a complete list of contributors.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify it under
|
||||
+ the terms of the GNU General Public License as published by the Free Software
|
||||
+ Foundation; either version 3 of the License, or (at your option) any later
|
||||
+ version.
|
||||
+ """
|
||||
+
|
||||
+ VERSION_4_4_2 = """
|
||||
+ ccache version 4.4.2
|
||||
+ Features: file-storage http-storage
|
||||
+
|
||||
+ Copyright (C) 2002-2007 Andrew Tridgell
|
||||
+ Copyright (C) 2009-2021 Joel Rosdahl and other contributors
|
||||
+
|
||||
+ See <https://ccache.dev/credits.html> for a complete list of contributors.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify it under
|
||||
+ the terms of the GNU General Public License as published by the Free Software
|
||||
+ Foundation; either version 3 of the License, or (at your option) any later
|
||||
+ version.
|
||||
+ """
|
||||
+
|
||||
+ VERSION_4_5 = """
|
||||
+ ccache version 4.5.1
|
||||
+ Features: file-storage http-storage redis-storage
|
||||
+
|
||||
+ Copyright (C) 2002-2007 Andrew Tridgell
|
||||
+ Copyright (C) 2009-2021 Joel Rosdahl and other contributors
|
||||
+
|
||||
+ See <https://ccache.dev/credits.html> for a complete list of contributors.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify it under
|
||||
+ the terms of the GNU General Public License as published by the Free Software
|
||||
+ Foundation; either version 3 of the License, or (at your option) any later
|
||||
+ version.
|
||||
+ """
|
||||
+
|
||||
+ STAT10 = """
|
||||
+Summary:
|
||||
+ Cache directory: /home/suer/.ccache
|
||||
+ Primary config: /home/suer/.ccache/ccache.conf
|
||||
+ Secondary config: /etc/ccache.conf
|
||||
+ Stats updated: {timestamp}
|
||||
+ Hits: 916 / 9343 (9.80 %)
|
||||
+ Direct: 197 / 197 (100.0 %)
|
||||
+ Preprocessed: 719 / 719 (100.0 %)
|
||||
+ Misses: 8427
|
||||
+ Direct: 0
|
||||
+ Preprocessed: 0
|
||||
+ Errors: 1
|
||||
+ Uncacheable: 1251
|
||||
+Primary storage:
|
||||
+ Hits: 0 / 0
|
||||
+ Misses: 0
|
||||
+ Cache size (GB): 4.41 / 5.00 (88.27 %)
|
||||
+ Files: 4425
|
||||
+ Cleanups: 161
|
||||
+Errors:
|
||||
+ Missing cache file: 1
|
||||
+Uncacheable:
|
||||
+ Autoconf compile/link: 418
|
||||
+ Bad compiler arguments: 6
|
||||
+ Called for linking: 569
|
||||
+ Called for preprocessing: 110
|
||||
+ Compilation failed: 49
|
||||
+ No input file: 9
|
||||
+ Preprocessing failed: 90
|
||||
+ """.format(
|
||||
+ timestamp=time.strftime("%c")
|
||||
+ )
|
||||
+
|
||||
+ STAT11 = """
|
||||
+Summary:
|
||||
+ Cache directory: /home/suer/.ccache
|
||||
+ Primary config: /home/suer/.ccache/ccache.conf
|
||||
+ Secondary config: /etc/ccache.conf
|
||||
+ Stats updated: {timestamp}
|
||||
+ Hits: 0 / 0
|
||||
+ Direct: 0 / 0
|
||||
+ Preprocessed: 0 / 0
|
||||
+ Misses: 0
|
||||
+ Direct: 0
|
||||
+ Preprocessed: 0
|
||||
+Primary storage:
|
||||
+ Hits: 0 / 0
|
||||
+ Misses: 0
|
||||
+ Cache size (GB): 0.00 / 5.00 (0.00 %)
|
||||
+ Files: 0
|
||||
+ Cleanups: 16
|
||||
+ """.format(
|
||||
+ timestamp=time.strftime("%c")
|
||||
+ )
|
||||
+
|
||||
def test_parse_garbage_stats_message(self):
|
||||
self.assertRaises(ValueError, CCacheStats, self.STAT_GARBAGE)
|
||||
|
||||
def test_parse_zero_stats_message(self):
|
||||
stats = CCacheStats(self.STAT0)
|
||||
self.assertEqual(stats.cache_dir, "/home/tlin/.ccache")
|
||||
self.assertEqual(stats.hit_rates(), (0, 0, 0))
|
||||
|
||||
@@ -290,11 +417,26 @@ class TestCcacheStats(unittest.TestCase)
|
||||
stat8 = CCacheStats(self.STAT8)
|
||||
self.assertTrue(stat8)
|
||||
|
||||
def test_stats_version35(self):
|
||||
# Test parsing 3.5 output.
|
||||
stat9 = CCacheStats(self.STAT9)
|
||||
self.assertTrue(stat9)
|
||||
|
||||
+ def test_stats_version44(self):
|
||||
+ # verify version checks
|
||||
+ self.assertFalse(CCacheStats._is_version_4_4_or_newer(self.VERSION_3_5_GIT))
|
||||
+ self.assertFalse(CCacheStats._is_version_4_4_or_newer(self.VERSION_4_2))
|
||||
+ self.assertTrue(CCacheStats._is_version_4_4_or_newer(self.VERSION_4_4))
|
||||
+ self.assertTrue(CCacheStats._is_version_4_4_or_newer(self.VERSION_4_4_2))
|
||||
+ self.assertTrue(CCacheStats._is_version_4_4_or_newer(self.VERSION_4_5))
|
||||
+
|
||||
+ # Test parsing 4.4+ output.
|
||||
+ stat10 = CCacheStats(self.STAT10, True)
|
||||
+ self.assertTrue(stat10)
|
||||
+
|
||||
+ stat11 = CCacheStats(self.STAT11, True)
|
||||
+ self.assertTrue(stat11)
|
||||
+
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
|
||||
76
icecat-commasplit.patch
Normal file
76
icecat-commasplit.patch
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
--- firefox-111.0.1/build/moz.configure/rust.configure 2023-03-21 06:16:03.000000000 -0700
|
||||
+++ firefox-111.0.1/build/moz.configure/rust.configure.new 2023-04-05 08:57:29.403219120 -0700
|
||||
@@ -593,7 +593,7 @@
|
||||
|
||||
# ==============================================================
|
||||
|
||||
-option(env="RUSTFLAGS", nargs=1, help="Rust compiler flags")
|
||||
+option(env="RUSTFLAGS", nargs=1, help="Rust compiler flags", comma_split=False)
|
||||
set_config("RUSTFLAGS", depends("RUSTFLAGS")(lambda flags: flags))
|
||||
|
||||
|
||||
--- firefox-111.0.1/python/mozbuild/mozbuild/configure/options.py 2023-03-21 06:16:09.000000000 -0700
|
||||
+++ firefox-111.0.1/python/mozbuild/mozbuild/configure/options.py.new 2023-04-05 08:57:31.270193468 -0700
|
||||
@@ -191,6 +191,10 @@
|
||||
to instantiate an option indirectly. Set this to a positive integer to
|
||||
force the script to look into a deeper stack frame when inferring the
|
||||
`category`.
|
||||
+ - `comma_split` specifies whether the value string should be split on
|
||||
+ commas. The default is True. Setting it False is necessary for things
|
||||
+ like compiler flags which should be a single string that may contain
|
||||
+ commas.
|
||||
"""
|
||||
|
||||
__slots__ = (
|
||||
@@ -205,6 +209,7 @@
|
||||
"possible_origins",
|
||||
"category",
|
||||
"define_depth",
|
||||
+ "comma_split",
|
||||
)
|
||||
|
||||
def __init__(
|
||||
@@ -218,6 +223,7 @@
|
||||
category=None,
|
||||
help=None,
|
||||
define_depth=0,
|
||||
+ comma_split=True,
|
||||
):
|
||||
if not name and not env:
|
||||
raise InvalidOptionError(
|
||||
@@ -335,9 +341,10 @@
|
||||
self.choices = choices
|
||||
self.help = help
|
||||
self.category = category or _infer_option_category(define_depth)
|
||||
+ self.comma_split = comma_split
|
||||
|
||||
@staticmethod
|
||||
- def split_option(option):
|
||||
+ def split_option(option, comma_split=True):
|
||||
"""Split a flag or variable into a prefix, a name and values
|
||||
|
||||
Variables come in the form NAME=values (no prefix).
|
||||
@@ -350,7 +357,13 @@
|
||||
|
||||
elements = option.split("=", 1)
|
||||
name = elements[0]
|
||||
- values = tuple(elements[1].split(",")) if len(elements) == 2 else ()
|
||||
+ if len(elements) == 2:
|
||||
+ if comma_split:
|
||||
+ values = tuple(elements[1].split(","))
|
||||
+ else:
|
||||
+ values = (elements[1],)
|
||||
+ else:
|
||||
+ values = ()
|
||||
if name.startswith("--"):
|
||||
name = name[2:]
|
||||
if not name.islower():
|
||||
@@ -426,7 +439,7 @@
|
||||
% (option, origin, ", ".join(self.possible_origins))
|
||||
)
|
||||
|
||||
- prefix, name, values = self.split_option(option)
|
||||
+ prefix, name, values = self.split_option(option, self.comma_split)
|
||||
option = self._join_option(prefix, name)
|
||||
|
||||
assert name in (self.name, self.env)
|
||||
62
icecat-glibc-dynstack.patch
Normal file
62
icecat-glibc-dynstack.patch
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
diff -ur a/js/xpconnect/src/XPCJSContext.cpp b/js/xpconnect/src/XPCJSContext.cpp
|
||||
--- a/js/xpconnect/src/XPCJSContext.cpp 2021-07-05 21:16:02.000000000 +0200
|
||||
+++ b/js/xpconnect/src/XPCJSContext.cpp 2021-07-19 15:01:24.083460460 +0200
|
||||
@@ -81,14 +81,6 @@
|
||||
using namespace JS;
|
||||
using mozilla::dom::AutoEntryScript;
|
||||
|
||||
-// The watchdog thread loop is pretty trivial, and should not require much stack
|
||||
-// space to do its job. So only give it 32KiB or the platform minimum.
|
||||
-#if !defined(PTHREAD_STACK_MIN)
|
||||
-# define PTHREAD_STACK_MIN 0
|
||||
-#endif
|
||||
-static constexpr size_t kWatchdogStackSize =
|
||||
- PTHREAD_STACK_MIN < 32 * 1024 ? 32 * 1024 : PTHREAD_STACK_MIN;
|
||||
-
|
||||
static void WatchdogMain(void* arg);
|
||||
class Watchdog;
|
||||
class WatchdogManager;
|
||||
@@ -161,7 +153,7 @@
|
||||
// watchdog, we need to join it on shutdown.
|
||||
mThread = PR_CreateThread(PR_USER_THREAD, WatchdogMain, this,
|
||||
PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD,
|
||||
- PR_JOINABLE_THREAD, kWatchdogStackSize);
|
||||
+ PR_JOINABLE_THREAD, 0);
|
||||
if (!mThread) {
|
||||
MOZ_CRASH("PR_CreateThread failed!");
|
||||
}
|
||||
diff -ur a/security/sandbox/linux/launch/SandboxLaunch.cpp b/security/sandbox/linux/launch/SandboxLaunch.cpp
|
||||
--- a/security/sandbox/linux/launch/SandboxLaunch.cpp 2021-07-05 18:20:36.000000000 +0200
|
||||
+++ b/security/sandbox/linux/launch/SandboxLaunch.cpp 2021-07-20 08:39:17.272136982 +0200
|
||||
@@ -489,7 +489,8 @@ static int CloneCallee(void* aPtr) {
|
||||
// we don't currently support sandboxing under valgrind.
|
||||
MOZ_NEVER_INLINE MOZ_ASAN_BLACKLIST static pid_t DoClone(int aFlags,
|
||||
jmp_buf* aCtx) {
|
||||
- uint8_t miniStack[PTHREAD_STACK_MIN];
|
||||
+ static constexpr size_t kStackAlignment = 16;
|
||||
+ uint8_t miniStack[4096] __attribute__((aligned(kStackAlignment)));
|
||||
#ifdef __hppa__
|
||||
void* stackPtr = miniStack;
|
||||
#else
|
||||
@@ -510,13 +511,19 @@ static pid_t ForkWithFlags(int aFlags) {
|
||||
CLONE_CHILD_CLEARTID;
|
||||
MOZ_RELEASE_ASSERT((aFlags & kBadFlags) == 0);
|
||||
|
||||
+ // Block signals due to small stack in DoClone.
|
||||
+ sigset_t oldSigs;
|
||||
+ BlockAllSignals(&oldSigs);
|
||||
+
|
||||
+ int ret = 0;
|
||||
jmp_buf ctx;
|
||||
if (setjmp(ctx) == 0) {
|
||||
// In the parent and just called setjmp:
|
||||
- return DoClone(aFlags | SIGCHLD, &ctx);
|
||||
+ ret = DoClone(aFlags | SIGCHLD, &ctx);
|
||||
}
|
||||
+ RestoreSignals(&oldSigs);
|
||||
// In the child and have longjmp'ed:
|
||||
- return 0;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static bool WriteStringToFile(const char* aPath, const char* aStr,
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
VERSION=140.7.0
|
||||
VERSION=128.13.0
|
||||
URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/
|
||||
|
||||
for u in $URL; do
|
||||
|
|
|
|||
93
icecat-python3.11-open-U.patch
Normal file
93
icecat-python3.11-open-U.patch
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
--- a/dom/base/usecounters.py.python-open-U 2022-06-28 04:37:00.000000000 +0200
|
||||
+++ b/dom/base/usecounters.py 2022-07-11 19:17:46.266517761 +0200
|
||||
@@ -8,7 +8,7 @@ import re
|
||||
|
||||
def read_conf(conf_filename):
|
||||
# Can't read/write from a single StringIO, so make a new one for reading.
|
||||
- stream = open(conf_filename, "rU")
|
||||
+ stream = open(conf_filename, "r")
|
||||
|
||||
def parse_counters(stream):
|
||||
for line_num, line in enumerate(stream):
|
||||
--- a/python/mozbuild/mozbuild/action/process_define_files.py.python-open-U 2022-06-28 04:37:39.000000000 +0200
|
||||
+++ b/python/mozbuild/mozbuild/action/process_define_files.py 2022-07-11 19:18:24.056417112 +0200
|
||||
@@ -36,7 +36,7 @@ def process_define_file(output, input):
|
||||
) and not config.substs.get("JS_STANDALONE"):
|
||||
config = PartialConfigEnvironment(mozpath.join(topobjdir, "js", "src"))
|
||||
|
||||
- with open(path, "rU") as input:
|
||||
+ with open(path, "r") as input:
|
||||
r = re.compile(
|
||||
"^\s*#\s*(?P<cmd>[a-z]+)(?:\s+(?P<name>\S+)(?:\s+(?P<value>\S+))?)?", re.U
|
||||
)
|
||||
--- a/python/mozbuild/mozbuild/backend/base.py.python-open-U 2022-06-28 04:37:39.000000000 +0200
|
||||
+++ b/python/mozbuild/mozbuild/backend/base.py 2022-07-11 19:18:34.165390187 +0200
|
||||
@@ -272,7 +272,7 @@ class BuildBackend(LoggingMixin):
|
||||
return status
|
||||
|
||||
@contextmanager
|
||||
- def _write_file(self, path=None, fh=None, readmode="rU"):
|
||||
+ def _write_file(self, path=None, fh=None, readmode="r"):
|
||||
"""Context manager to write a file.
|
||||
|
||||
This is a glorified wrapper around FileAvoidWrite with integration to
|
||||
--- a/python/mozbuild/mozbuild/preprocessor.py.python-open-U 2022-06-28 04:37:20.000000000 +0200
|
||||
+++ b/python/mozbuild/mozbuild/preprocessor.py 2022-07-11 19:19:30.677239685 +0200
|
||||
@@ -531,7 +531,7 @@ class Preprocessor:
|
||||
|
||||
if args:
|
||||
for f in args:
|
||||
- with io.open(f, "rU", encoding="utf-8") as input:
|
||||
+ with io.open(f, "r", encoding="utf-8") as input:
|
||||
self.processFile(input=input, output=out)
|
||||
if depfile:
|
||||
mk = Makefile()
|
||||
@@ -860,7 +860,7 @@ class Preprocessor:
|
||||
args = self.applyFilters(args)
|
||||
if not os.path.isabs(args):
|
||||
args = os.path.join(self.curdir, args)
|
||||
- args = io.open(args, "rU", encoding="utf-8")
|
||||
+ args = io.open(args, "r", encoding="utf-8")
|
||||
except Preprocessor.Error:
|
||||
raise
|
||||
except Exception:
|
||||
@@ -914,7 +914,7 @@ class Preprocessor:
|
||||
def preprocess(includes=[sys.stdin], defines={}, output=sys.stdout, marker="#"):
|
||||
pp = Preprocessor(defines=defines, marker=marker)
|
||||
for f in includes:
|
||||
- with io.open(f, "rU", encoding="utf-8") as input:
|
||||
+ with io.open(f, "r", encoding="utf-8") as input:
|
||||
pp.processFile(input=input, output=output)
|
||||
return pp.includes
|
||||
|
||||
--- a/python/mozbuild/mozbuild/util.py.python-open-U 2022-06-28 04:37:40.000000000 +0200
|
||||
+++ b/python/mozbuild/mozbuild/util.py 2022-07-11 19:19:19.903268374 +0200
|
||||
@@ -225,7 +225,7 @@ class FileAvoidWrite(BytesIO):
|
||||
still occur, as well as diff capture if requested.
|
||||
"""
|
||||
|
||||
- def __init__(self, filename, capture_diff=False, dry_run=False, readmode="rU"):
|
||||
+ def __init__(self, filename, capture_diff=False, dry_run=False, readmode="r"):
|
||||
BytesIO.__init__(self)
|
||||
self.name = filename
|
||||
assert type(capture_diff) == bool
|
||||
--- a/python/mozbuild/mozpack/files.py.python-open-U 2022-06-28 04:37:40.000000000 +0200
|
||||
+++ b/python/mozbuild/mozpack/files.py 2022-07-11 19:19:40.372213866 +0200
|
||||
@@ -574,7 +574,7 @@ class PreprocessedFile(BaseFile):
|
||||
pp = Preprocessor(defines=self.defines, marker=self.marker)
|
||||
pp.setSilenceDirectiveWarnings(self.silence_missing_directive_warnings)
|
||||
|
||||
- with _open(self.path, "rU") as input:
|
||||
+ with _open(self.path, "r") as input:
|
||||
with _open(os.devnull, "w") as output:
|
||||
pp.processFile(input=input, output=output)
|
||||
|
||||
@@ -631,7 +631,7 @@ class PreprocessedFile(BaseFile):
|
||||
pp = Preprocessor(defines=self.defines, marker=self.marker)
|
||||
pp.setSilenceDirectiveWarnings(self.silence_missing_directive_warnings)
|
||||
|
||||
- with _open(self.path, "rU") as input:
|
||||
+ with _open(self.path, "r") as input:
|
||||
pp.processFile(input=input, output=dest, depfile=deps_out)
|
||||
|
||||
dest.close()
|
||||
27
icecat-python3.11-regex-inline-flags.patch
Normal file
27
icecat-python3.11-regex-inline-flags.patch
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
--- thunderbird-91.11.0/xpcom/idl-parser/xpidl/xpidl.py.python-inline-flags 2022-06-28 04:39:56.000000000 +0200
|
||||
+++ thunderbird-91.11.0/xpcom/idl-parser/xpidl/xpidl.py 2022-07-11 21:55:05.287553042 +0200
|
||||
@@ -1563,13 +1563,13 @@ class IDLParser(object):
|
||||
t_ignore = " \t"
|
||||
|
||||
def t_multilinecomment(self, t):
|
||||
- r"/\*(?s).*?\*/"
|
||||
+ r"/\*(?s:.*?)\*/"
|
||||
t.lexer.lineno += t.value.count("\n")
|
||||
if t.value.startswith("/**"):
|
||||
self._doccomments.append(t.value)
|
||||
|
||||
def t_singlelinecomment(self, t):
|
||||
- r"(?m)//.*?$"
|
||||
+ r"(?m://.*?$)"
|
||||
|
||||
def t_IID(self, t):
|
||||
return t
|
||||
@@ -1582,7 +1582,7 @@ class IDLParser(object):
|
||||
return t
|
||||
|
||||
def t_LCDATA(self, t):
|
||||
- r"(?s)%\{[ ]*C\+\+[ ]*\n(?P<cdata>.*?\n?)%\}[ ]*(C\+\+)?"
|
||||
+ r"(?s:%\{[ ]*C\+\+[ ]*\n(?P<cdata>.*?\n?)%\}[ ]*(C\+\+)?)"
|
||||
t.type = "CDATA"
|
||||
t.value = t.lexer.lexmatch.group("cdata")
|
||||
t.lexer.lineno += t.value.count("\n")
|
||||
137
icecat.spec
137
icecat.spec
|
|
@ -20,19 +20,25 @@ ExcludeArch: %{ix86} %{arm}
|
|||
# Downgrade optimization
|
||||
%global less_optbuild 0
|
||||
|
||||
# Build PGO+LTO on x86_64 and aarch64 only
|
||||
%ifarch x86_64 %{arm64}
|
||||
# Build PGO+LTO on x86_64 and aarch64 only due to build issues
|
||||
# on other arches.
|
||||
%ifarch x86_64
|
||||
%if 0%{?release_build}
|
||||
%global build_with_pgo 1
|
||||
%global pgo_wayland 1
|
||||
%global launch_wayland_compositor 1
|
||||
%global build_with_pgo 0
|
||||
%global pgo_wayland 0
|
||||
%else
|
||||
%global build_with_pgo 0
|
||||
%global pgo_wayland 0
|
||||
%global launch_wayland_compositor 0
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%global launch_wayland_compositor 0
|
||||
%if 0%{?build_with_pgo}
|
||||
%global launch_wayland_compositor 1
|
||||
%endif
|
||||
|
||||
# Disable LTO to work around rhbz#1883904
|
||||
%define _lto_cflags %{nil}
|
||||
####################
|
||||
|
||||
# Active/Deactive language files handling
|
||||
|
|
@ -93,17 +99,17 @@ ExcludeArch: %{ix86} %{arm}
|
|||
%global __requires_exclude ^(%%(find %{buildroot}%{icecatappdir} -name '*.so' | xargs -n1 basename | sort -u | paste -s -d '|' -))
|
||||
|
||||
Name: icecat
|
||||
Epoch: 4
|
||||
Version: 140.7.0
|
||||
Epoch: 3
|
||||
Version: 128.13.0
|
||||
Release: %autorelease -e %{redhat_ver}
|
||||
Summary: GNU version of Firefox browser
|
||||
|
||||
# Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included
|
||||
License: (MPL-1.1 OR GPL-2.0-or-later OR LGPL-2.1-or-later) AND GPL-3.0-or-later AND MIT AND BSD-4-Clause-UC AND ISC AND Apache-2.0 AND MPL-2.0
|
||||
URL: http://www.gnu.org/software/gnuzilla/
|
||||
URL: http://www.gnu.org/software/gnuzilla/
|
||||
|
||||
## Source archive created by scripts based on Gnuzilla files.
|
||||
## All modified files are hosted in a dedicated fork repository:
|
||||
## Modified files are hosted in a dedicated fork repository:
|
||||
## https://gitlab.com/anto.trande/icecat
|
||||
Source0: %{name}-%{version}-%{redhat_ver}.tar.bz2
|
||||
|
||||
|
|
@ -131,15 +137,45 @@ Source14: %{name}.desktop
|
|||
# cbingen
|
||||
Source17: cbindgen-vendor.tar.xz
|
||||
Source18: node-stdout-nonblocking-wrapper
|
||||
|
||||
Source19: run-wayland-compositor
|
||||
|
||||
# Build patches
|
||||
# Fixes installation of those addons which don't have ID on IceCat ("Cannot find id for addon" error).
|
||||
Patch2: %{name}-commasplit.patch
|
||||
|
||||
# With clang LLVM 16 rust-bindgen 0.56.0 is too old, combined
|
||||
# https://github.com/rust-lang/rust-bindgen/pull/2319
|
||||
# https://github.com/rust-lang/rust-bindgen/pull/2339
|
||||
Patch7: rust-bindgen-2319-2339.patch
|
||||
|
||||
# Needed with rust 1.70
|
||||
# https://github.com/mozilla/mp4parse-rust/commit/8b5b652d38e007e736bb442ccd5aa5ed699db100
|
||||
Patch8: mp4parse-rust-8b5b652d38e007e736bb442ccd5aa5ed699db100.patch
|
||||
|
||||
Patch40: build-aarch64-skia.patch
|
||||
Patch44: build-arm-libopus.patch
|
||||
|
||||
# Fedora specific patches
|
||||
Patch219: rhbz-1173156.patch
|
||||
Patch220: firefox-nss-version.patch
|
||||
Patch221: firefox-nss-addon-hack.patch
|
||||
Patch223: %{name}-glibc-dynstack.patch
|
||||
Patch224: %{name}-GLIBCXX-fix-for-GCC-12.patch
|
||||
|
||||
# ARM run-time patch
|
||||
Patch226: rhbz-1354671.patch
|
||||
|
||||
# Upstream patches
|
||||
Patch401: icecat-1742849.patch
|
||||
Patch402: mozilla-1196777.patch
|
||||
Patch403: icecat-python3.11-open-U.patch
|
||||
Patch404: icecat-python3.11-regex-inline-flags.patch
|
||||
Patch412: mozilla-1337988.patch
|
||||
Patch422: mozilla-1580174-webrtc-popup.patch
|
||||
# Patch for GCC-15
|
||||
Patch426: icecat-115.19.0-fix_mz1917964.patch
|
||||
|
||||
# Fix crash on ppc64le (mozilla#1512162)
|
||||
Patch423: mozilla-1512162.patch
|
||||
|
||||
|
|
@ -209,7 +245,6 @@ BuildRequires: pipewire-devel
|
|||
BuildRequires: python3-devel
|
||||
BuildRequires: python3-setuptools
|
||||
BuildRequires: python3.11-devel
|
||||
BuildRequires: python3-orjson
|
||||
BuildRequires: perl-interpreter
|
||||
BuildRequires: pkgconfig(xrender)
|
||||
BuildRequires: pkgconfig(libstartup-notification-1.0)
|
||||
|
|
@ -218,36 +253,32 @@ BuildRequires: pkgconfig(libcurl)
|
|||
%if %{with pulseaudio}
|
||||
BuildRequires: pulseaudio-libs-devel
|
||||
%endif
|
||||
BuildRequires: yasm
|
||||
BuildRequires: llvm
|
||||
%if 0%{?fedora} >= 42 || 0%{?rhel} >= 10
|
||||
BuildRequires: clang19
|
||||
BuildRequires: clang19-libs
|
||||
BuildRequires: llvm19-devel
|
||||
BuildRequires: compiler-rt19
|
||||
%global llvm_suffix -19
|
||||
%else
|
||||
%if 0%{?fedora} >= 40 || 0%{?rhel} >= 10
|
||||
BuildRequires: clang17
|
||||
BuildRequires: clang17-libs
|
||||
BuildRequires: llvm17-devel
|
||||
BuildRequires: compiler-rt17
|
||||
%global llvm_suffix -17
|
||||
%else
|
||||
BuildRequires: clang
|
||||
BuildRequires: clang-libs
|
||||
BuildRequires: llvm-devel
|
||||
%endif
|
||||
%if "%toolchain" == "clang"
|
||||
BuildRequires: lld
|
||||
%endif
|
||||
BuildRequires: rust
|
||||
BuildRequires: rustfmt
|
||||
|
||||
%if 0%{?pgo_wayland}
|
||||
BuildRequires: xorg-x11-server-Xvfb
|
||||
BuildRequires: mutter
|
||||
BuildRequires: gsettings-desktop-schemas
|
||||
BuildRequires: gnome-settings-daemon
|
||||
BuildRequires: mesa-dri-drivers
|
||||
BuildRequires: mesa-libEGL
|
||||
BuildRequires: xorg-x11-server-Xwayland
|
||||
BuildRequires: dbus-x11
|
||||
BuildRequires: gnome-keyring
|
||||
%endif
|
||||
%if 0%{?build_with_pgo}
|
||||
BuildRequires: xorg-x11-server-Xvfb
|
||||
%endif
|
||||
|
||||
%if 0%{?big_endian}
|
||||
|
|
@ -271,6 +302,11 @@ Requires: fedora-bookmarks
|
|||
Suggests: mozilla-ublock-origin
|
||||
Provides: webclient
|
||||
|
||||
%if 0%{?fedora} >= 40
|
||||
Obsoletes: icecat-wayland < 3:128.12.0-1
|
||||
Obsoletes: icecat-x11 < 3:128.12.0-1
|
||||
%endif
|
||||
|
||||
%description
|
||||
GNU IceCat is the GNU version of the Firefox ESR browser.
|
||||
Extensions included to this version of IceCat:
|
||||
|
|
@ -299,7 +335,7 @@ Extensions included to this version of IceCat:
|
|||
%if %{with langpacks_subpkg}
|
||||
%package langpacks
|
||||
Summary: IceCat langpacks
|
||||
Requires: %{name} = 4:%{version}-%{release}
|
||||
Requires: %{name} = 3:%{version}-%{release}
|
||||
%description langpacks
|
||||
The icecat-langpacks package contains all the localization
|
||||
and translations langpack add-ons.
|
||||
|
|
@ -313,7 +349,10 @@ and translations langpack add-ons.
|
|||
# Copy license files
|
||||
tar -xf %{SOURCE5}
|
||||
|
||||
%patch -P 2 -p 1 -b .commasplit
|
||||
|
||||
# Fedora patches
|
||||
%patch -P 219 -p 1 -b .rhbz-1173156
|
||||
%if 0%{?fedora}
|
||||
%patch -P 221 -p 1 -b .firefox-nss-addon-hack
|
||||
%endif
|
||||
|
|
@ -321,12 +360,15 @@ tar -xf %{SOURCE5}
|
|||
|
||||
# ARM64
|
||||
%ifarch %{arm64}
|
||||
%patch -P 40 -p 1 -b .aarch64-skia
|
||||
%patch -P 226 -p 1 -b .1354671
|
||||
%endif
|
||||
|
||||
%patch -P 402 -p 1 -b .1196777
|
||||
%ifarch %{power64}
|
||||
%patch -P 423 -p 1 -b .1512162
|
||||
%endif
|
||||
%patch -P 426 -p 1 -b .1917964
|
||||
%patch -P 603 -p1 -b .inline
|
||||
|
||||
# Remove default configuration and copy the customized one
|
||||
|
|
@ -388,6 +430,9 @@ echo "ac_add_options --disable-optimize" >> .mozconfig
|
|||
echo "ac_add_options --enable-rust-debug" >> .mozconfig
|
||||
%else
|
||||
%global optimize_flags "none"
|
||||
%ifarch s390x
|
||||
%define optimize_flags " -fno-schedule-insns"
|
||||
%endif
|
||||
%if %{?optimize_flags} != "none"
|
||||
echo 'ac_add_options --enable-optimize=%{?optimize_flags}' >> .mozconfig
|
||||
%else
|
||||
|
|
@ -407,6 +452,7 @@ echo "ac_add_options --with-l10n-base=$PWD/l10n" >> .mozconfig
|
|||
|
||||
%if "%toolchain" == "clang"
|
||||
echo "ac_add_options --with-libclang-path=`llvm-config%{?llvm_suffix} --libdir`" >> .mozconfig
|
||||
#echo "ac_add_options --with-clang-path=%%{_bindir}/clang%%{?llvm_suffix}" >> .mozconfig
|
||||
%endif
|
||||
|
||||
%ifarch s390x %{arm64}
|
||||
|
|
@ -537,33 +583,56 @@ echo "ac_add_options MOZ_PGO=1" >> .mozconfig
|
|||
export CCACHE_DISABLE=1
|
||||
%endif
|
||||
|
||||
# Require 4 GB of RAM per CPU core
|
||||
%global _smp_tasksize_proc 4096
|
||||
%if %{?less_optbuild}
|
||||
echo "mk_add_options MOZ_MAKE_FLAGS=\"-j1\"" >> .mozconfig
|
||||
MOZ_SMP_FLAGS=-j1
|
||||
%else
|
||||
echo "mk_add_options MOZ_MAKE_FLAGS=\"-j%{_smp_build_ncpus}\"" >> .mozconfig
|
||||
MOZ_SMP_FLAGS=-j1
|
||||
# On x86_64 architectures, Mozilla can build up to 4 jobs at once in parallel,
|
||||
# however builds tend to fail on other arches when building in parallel.
|
||||
%ifarch s390x %{arm64}
|
||||
[ -z "$RPM_BUILD_NCPUS" ] && \
|
||||
RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"
|
||||
[ "$RPM_BUILD_NCPUS" -ge 2 ] && MOZ_SMP_FLAGS=-j2
|
||||
%endif
|
||||
%ifarch x86_64 %{power64}
|
||||
[ -z "$RPM_BUILD_NCPUS" ] && \
|
||||
RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"
|
||||
[ "$RPM_BUILD_NCPUS" -ge 2 ] && MOZ_SMP_FLAGS=-j2
|
||||
[ "$RPM_BUILD_NCPUS" -ge 4 ] && MOZ_SMP_FLAGS=-j4
|
||||
[ "$RPM_BUILD_NCPUS" -ge 8 ] && MOZ_SMP_FLAGS=-j8
|
||||
[ "$RPM_BUILD_NCPUS" -ge 16 ] && MOZ_SMP_FLAGS=-j16
|
||||
[ "$RPM_BUILD_NCPUS" -ge 24 ] && MOZ_SMP_FLAGS=-j24
|
||||
[ "$RPM_BUILD_NCPUS" -ge 32 ] && MOZ_SMP_FLAGS=-j32
|
||||
[ "$RPM_BUILD_NCPUS" -ge 64 ] && MOZ_SMP_FLAGS=-j64
|
||||
%endif
|
||||
%endif
|
||||
|
||||
echo "mk_add_options MOZ_MAKE_FLAGS=\"$MOZ_SMP_FLAGS\"" >> .mozconfig
|
||||
echo "mk_add_options MOZ_SERVICES_SYNC=1" >> .mozconfig
|
||||
echo "export STRIP=/bin/true" >> .mozconfig
|
||||
|
||||
%if 0%{?launch_wayland_compositor}
|
||||
cp -p %{SOURCE19} .
|
||||
. ./run-wayland-compositor
|
||||
. ./run-wayland-compositor
|
||||
%endif
|
||||
|
||||
%if %{?debug_build}
|
||||
export CARGO_PROFILE_RELEASE_BUILD_OVERRIDE_DEBUG=true
|
||||
%endif
|
||||
|
||||
|
||||
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
|
||||
#Use python 3.11 for mach
|
||||
sed -i -e 's|#!/usr/bin/env python3|#!/usr/bin/env python3.11|' mach
|
||||
|
||||
./mach build -v 2>&1 | cat - || exit 1
|
||||
|
||||
%if 0%{?build_with_pgo}
|
||||
kill $MUTTER_PID
|
||||
%if 0%{?pgo_wayland}
|
||||
env | grep "WAYLAND"
|
||||
MOZ_ENABLE_WAYLAND=1 ./mach build -v 2>&1 | cat - && exit 1
|
||||
%else
|
||||
xvfb-run ./mach build 2>&1 | cat - || exit 1
|
||||
%endif
|
||||
%else
|
||||
./mach build -v 2>&1 | cat - || exit 1
|
||||
%endif
|
||||
|
||||
%install
|
||||
|
|
|
|||
14
mozilla-1196777.patch
Normal file
14
mozilla-1196777.patch
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
diff -up firefox-100.0/widget/gtk/nsWindow.cpp.1196777 firefox-100.0/widget/gtk/nsWindow.cpp
|
||||
--- firefox-100.0/widget/gtk/nsWindow.cpp.1196777 2022-05-02 11:29:06.763325015 +0200
|
||||
+++ firefox-100.0/widget/gtk/nsWindow.cpp 2022-05-02 11:30:49.100717334 +0200
|
||||
@@ -163,7 +163,8 @@ const gint kEvents = GDK_TOUCHPAD_GESTUR
|
||||
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK |
|
||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
||||
GDK_SMOOTH_SCROLL_MASK | GDK_TOUCH_MASK | GDK_SCROLL_MASK |
|
||||
- GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK;
|
||||
+ GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK |
|
||||
+ GDK_FOCUS_CHANGE_MASK;
|
||||
|
||||
/* utility functions */
|
||||
static bool is_mouse_in_window(GdkWindow* aWindow, gdouble aMouseX,
|
||||
|
||||
496
mozilla-1337988.patch
Normal file
496
mozilla-1337988.patch
Normal file
|
|
@ -0,0 +1,496 @@
|
|||
diff -up firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp.1337988 firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp
|
||||
--- firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp.1337988 2017-09-14 22:15:56.000000000 +0200
|
||||
+++ firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp 2017-09-25 10:34:11.205611698 +0200
|
||||
@@ -1719,7 +1719,7 @@ NPObjWrapper_ObjectMoved(JSObject *obj,
|
||||
auto entry =
|
||||
static_cast<NPObjWrapperHashEntry*>(sNPObjWrappers->Search(npobj));
|
||||
MOZ_ASSERT(entry && entry->mJSObj);
|
||||
- MOZ_ASSERT(entry->mJSObj == old);
|
||||
+ MOZ_ASSERT(entry->mJSObj.unbarrieredGetPtr() == old);
|
||||
entry->mJSObj = obj;
|
||||
}
|
||||
|
||||
diff -up firefox-56.0/js/ipc/JavaScriptShared.cpp.1337988 firefox-56.0/js/ipc/JavaScriptShared.cpp
|
||||
--- firefox-56.0/js/ipc/JavaScriptShared.cpp.1337988 2017-07-31 18:20:47.000000000 +0200
|
||||
+++ firefox-56.0/js/ipc/JavaScriptShared.cpp 2017-09-25 10:34:11.205611698 +0200
|
||||
@@ -101,7 +101,7 @@ IdToObjectMap::has(const ObjectId& id, c
|
||||
auto p = table_.lookup(id);
|
||||
if (!p)
|
||||
return false;
|
||||
- return p->value() == obj;
|
||||
+ return p->value().unbarrieredGet() == obj;
|
||||
}
|
||||
#endif
|
||||
|
||||
diff -up firefox-56.0/js/public/RootingAPI.h.1337988 firefox-56.0/js/public/RootingAPI.h
|
||||
--- firefox-56.0/js/public/RootingAPI.h.1337988 2017-07-31 18:20:47.000000000 +0200
|
||||
+++ firefox-56.0/js/public/RootingAPI.h 2017-09-25 10:34:11.206611695 +0200
|
||||
@@ -148,6 +148,10 @@ template<typename T>
|
||||
struct PersistentRootedMarker;
|
||||
} /* namespace gc */
|
||||
|
||||
+#define DECLARE_POINTER_COMPARISON_OPS(T) \
|
||||
+ bool operator==(const T& other) const { return get() == other; } \
|
||||
+ bool operator!=(const T& other) const { return get() != other; }
|
||||
+
|
||||
// Important: Return a reference so passing a Rooted<T>, etc. to
|
||||
// something that takes a |const T&| is not a GC hazard.
|
||||
#define DECLARE_POINTER_CONSTREF_OPS(T) \
|
||||
@@ -237,8 +241,6 @@ class Heap : public js::HeapBase<T, Heap
|
||||
static_assert(js::IsHeapConstructibleType<T>::value,
|
||||
"Type T must be a public GC pointer type");
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
Heap() {
|
||||
static_assert(sizeof(T) == sizeof(Heap<T>),
|
||||
"Heap<T> must be binary compatible with T.");
|
||||
@@ -385,8 +387,6 @@ template <typename T>
|
||||
class TenuredHeap : public js::HeapBase<T, TenuredHeap<T>>
|
||||
{
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
TenuredHeap() : bits(0) {
|
||||
static_assert(sizeof(T) == sizeof(TenuredHeap<T>),
|
||||
"TenuredHeap<T> must be binary compatible with T.");
|
||||
@@ -394,6 +394,9 @@ class TenuredHeap : public js::HeapBase<
|
||||
explicit TenuredHeap(T p) : bits(0) { setPtr(p); }
|
||||
explicit TenuredHeap(const TenuredHeap<T>& p) : bits(0) { setPtr(p.getPtr()); }
|
||||
|
||||
+ bool operator==(const TenuredHeap<T>& other) { return bits == other.bits; }
|
||||
+ bool operator!=(const TenuredHeap<T>& other) { return bits != other.bits; }
|
||||
+
|
||||
void setPtr(T newPtr) {
|
||||
MOZ_ASSERT((reinterpret_cast<uintptr_t>(newPtr) & flagsMask) == 0);
|
||||
if (newPtr)
|
||||
@@ -470,8 +473,6 @@ class MOZ_NONHEAP_CLASS Handle : public
|
||||
friend class JS::MutableHandle<T>;
|
||||
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
/* Creates a handle from a handle of a type convertible to T. */
|
||||
template <typename S>
|
||||
MOZ_IMPLICIT Handle(Handle<S> handle,
|
||||
@@ -533,6 +534,7 @@ class MOZ_NONHEAP_CLASS Handle : public
|
||||
MOZ_IMPLICIT Handle(MutableHandle<S>& root,
|
||||
typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy = 0);
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
DECLARE_NONPOINTER_ACCESSOR_METHODS(*ptr);
|
||||
|
||||
@@ -559,8 +561,6 @@ template <typename T>
|
||||
class MOZ_STACK_CLASS MutableHandle : public js::MutableHandleBase<T, MutableHandle<T>>
|
||||
{
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
inline MOZ_IMPLICIT MutableHandle(Rooted<T>* root);
|
||||
inline MOZ_IMPLICIT MutableHandle(PersistentRooted<T>* root);
|
||||
|
||||
@@ -589,6 +589,7 @@ class MOZ_STACK_CLASS MutableHandle : pu
|
||||
return h;
|
||||
}
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
DECLARE_NONPOINTER_ACCESSOR_METHODS(*ptr);
|
||||
DECLARE_NONPOINTER_MUTABLE_ACCESSOR_METHODS(*ptr);
|
||||
@@ -805,8 +806,6 @@ class MOZ_RAII Rooted : public js::Roote
|
||||
}
|
||||
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
template <typename RootingContext>
|
||||
explicit Rooted(const RootingContext& cx)
|
||||
: ptr(GCPolicy<T>::initial())
|
||||
@@ -839,6 +838,7 @@ class MOZ_RAII Rooted : public js::Roote
|
||||
ptr = mozilla::Move(value);
|
||||
}
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
DECLARE_POINTER_ASSIGN_OPS(Rooted, T);
|
||||
DECLARE_NONPOINTER_ACCESSOR_METHODS(ptr);
|
||||
@@ -903,14 +903,13 @@ template <typename T>
|
||||
class MOZ_RAII FakeRooted : public RootedBase<T, FakeRooted<T>>
|
||||
{
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
template <typename CX>
|
||||
explicit FakeRooted(CX* cx) : ptr(JS::GCPolicy<T>::initial()) {}
|
||||
|
||||
template <typename CX>
|
||||
FakeRooted(CX* cx, T initial) : ptr(initial) {}
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
DECLARE_POINTER_ASSIGN_OPS(FakeRooted, T);
|
||||
DECLARE_NONPOINTER_ACCESSOR_METHODS(ptr);
|
||||
@@ -931,8 +930,6 @@ template <typename T>
|
||||
class FakeMutableHandle : public js::MutableHandleBase<T, FakeMutableHandle<T>>
|
||||
{
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
MOZ_IMPLICIT FakeMutableHandle(T* t) {
|
||||
ptr = t;
|
||||
}
|
||||
@@ -1124,8 +1121,6 @@ class PersistentRooted : public js::Root
|
||||
}
|
||||
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
PersistentRooted() : ptr(GCPolicy<T>::initial()) {}
|
||||
|
||||
explicit PersistentRooted(RootingContext* cx)
|
||||
@@ -1203,6 +1198,7 @@ class PersistentRooted : public js::Root
|
||||
}
|
||||
}
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
DECLARE_POINTER_ASSIGN_OPS(PersistentRooted, T);
|
||||
DECLARE_NONPOINTER_ACCESSOR_METHODS(ptr);
|
||||
@@ -1234,8 +1230,6 @@ class JS_PUBLIC_API(ObjectPtr)
|
||||
Heap<JSObject*> value;
|
||||
|
||||
public:
|
||||
- using ElementType = JSObject*;
|
||||
-
|
||||
ObjectPtr() : value(nullptr) {}
|
||||
|
||||
explicit ObjectPtr(JSObject* obj) : value(obj) {}
|
||||
@@ -1342,177 +1336,6 @@ Swap(JS::TenuredHeap<T>& aX, JS::Tenured
|
||||
|
||||
} /* namespace mozilla */
|
||||
|
||||
-namespace js {
|
||||
-namespace detail {
|
||||
-
|
||||
-// DefineComparisonOps is a trait which selects which wrapper classes to define
|
||||
-// operator== and operator!= for. It supplies a getter function to extract the
|
||||
-// value to compare. This is used to avoid triggering the automatic read
|
||||
-// barriers where appropriate.
|
||||
-//
|
||||
-// If DefineComparisonOps is not specialized for a particular wrapper you may
|
||||
-// get errors such as 'invalid operands to binary expression' or 'no match for
|
||||
-// operator==' when trying to compare against instances of the wrapper.
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps : mozilla::FalseType {};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::Heap<T>> : mozilla::TrueType {
|
||||
- static const T& get(const JS::Heap<T>& v) { return v.unbarrieredGet(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::TenuredHeap<T>> : mozilla::TrueType {
|
||||
- static const T get(const JS::TenuredHeap<T>& v) { return v.unbarrieredGetPtr(); }
|
||||
-};
|
||||
-
|
||||
-template <>
|
||||
-struct DefineComparisonOps<JS::ObjectPtr> : mozilla::TrueType {
|
||||
- static const JSObject* get(const JS::ObjectPtr& v) { return v.unbarrieredGet(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::Rooted<T>> : mozilla::TrueType {
|
||||
- static const T& get(const JS::Rooted<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::Handle<T>> : mozilla::TrueType {
|
||||
- static const T& get(const JS::Handle<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::MutableHandle<T>> : mozilla::TrueType {
|
||||
- static const T& get(const JS::MutableHandle<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::PersistentRooted<T>> : mozilla::TrueType {
|
||||
- static const T& get(const JS::PersistentRooted<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<js::FakeRooted<T>> : mozilla::TrueType {
|
||||
- static const T& get(const js::FakeRooted<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<js::FakeMutableHandle<T>> : mozilla::TrueType {
|
||||
- static const T& get(const js::FakeMutableHandle<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-} /* namespace detail */
|
||||
-} /* namespace js */
|
||||
-
|
||||
-// Overload operator== and operator!= for all types with the DefineComparisonOps
|
||||
-// trait using the supplied getter.
|
||||
-//
|
||||
-// There are four cases:
|
||||
-
|
||||
-// Case 1: comparison between two wrapper objects.
|
||||
-
|
||||
-template <typename T, typename U>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- js::detail::DefineComparisonOps<U>::value, bool>::Type
|
||||
-operator==(const T& a, const U& b) {
|
||||
- return js::detail::DefineComparisonOps<T>::get(a) == js::detail::DefineComparisonOps<U>::get(b);
|
||||
-}
|
||||
-
|
||||
-template <typename T, typename U>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- js::detail::DefineComparisonOps<U>::value, bool>::Type
|
||||
-operator!=(const T& a, const U& b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-// Case 2: comparison between a wrapper object and its unwrapped element type.
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
|
||||
-operator==(const T& a, const typename T::ElementType& b) {
|
||||
- return js::detail::DefineComparisonOps<T>::get(a) == b;
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
|
||||
-operator!=(const T& a, const typename T::ElementType& b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
|
||||
-operator==(const typename T::ElementType& a, const T& b) {
|
||||
- return a == js::detail::DefineComparisonOps<T>::get(b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
|
||||
-operator!=(const typename T::ElementType& a, const T& b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-// Case 3: For pointer wrappers, comparison between the wrapper and a const
|
||||
-// element pointer.
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator==(const typename mozilla::RemovePointer<typename T::ElementType>::Type* a, const T& b) {
|
||||
- return a == js::detail::DefineComparisonOps<T>::get(b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator!=(const typename mozilla::RemovePointer<typename T::ElementType>::Type* a, const T& b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator==(const T& a, const typename mozilla::RemovePointer<typename T::ElementType>::Type* b) {
|
||||
- return js::detail::DefineComparisonOps<T>::get(a) == b;
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator!=(const T& a, const typename mozilla::RemovePointer<typename T::ElementType>::Type* b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-// Case 4: For pointer wrappers, comparison between the wrapper and nullptr.
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator==(std::nullptr_t a, const T& b) {
|
||||
- return a == js::detail::DefineComparisonOps<T>::get(b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator!=(std::nullptr_t a, const T& b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator==(const T& a, std::nullptr_t b) {
|
||||
- return js::detail::DefineComparisonOps<T>::get(a) == b;
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator!=(const T& a, std::nullptr_t b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
#undef DELETE_ASSIGNMENT_OPS
|
||||
|
||||
#endif /* js_RootingAPI_h */
|
||||
diff -up firefox-56.0/js/src/gc/Barrier.h.1337988 firefox-56.0/js/src/gc/Barrier.h
|
||||
--- firefox-56.0/js/src/gc/Barrier.h.1337988 2017-09-14 22:16:01.000000000 +0200
|
||||
+++ firefox-56.0/js/src/gc/Barrier.h 2017-09-25 10:34:11.206611695 +0200
|
||||
@@ -353,8 +353,8 @@ class WriteBarrieredBase : public Barrie
|
||||
explicit WriteBarrieredBase(const T& v) : BarrieredBase<T>(v) {}
|
||||
|
||||
public:
|
||||
- using ElementType = T;
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
|
||||
// Use this if the automatic coercion to T isn't working.
|
||||
@@ -612,13 +612,14 @@ class ReadBarriered : public ReadBarrier
|
||||
return *this;
|
||||
}
|
||||
|
||||
- const T& get() const {
|
||||
- if (InternalBarrierMethods<T>::isMarkable(this->value))
|
||||
- this->read();
|
||||
+ const T get() const {
|
||||
+ if (!InternalBarrierMethods<T>::isMarkable(this->value))
|
||||
+ return JS::GCPolicy<T>::initial();
|
||||
+ this->read();
|
||||
return this->value;
|
||||
}
|
||||
|
||||
- const T& unbarrieredGet() const {
|
||||
+ const T unbarrieredGet() const {
|
||||
return this->value;
|
||||
}
|
||||
|
||||
@@ -626,9 +627,9 @@ class ReadBarriered : public ReadBarrier
|
||||
return bool(this->value);
|
||||
}
|
||||
|
||||
- operator const T&() const { return get(); }
|
||||
+ operator const T() const { return get(); }
|
||||
|
||||
- const T& operator->() const { return get(); }
|
||||
+ const T operator->() const { return get(); }
|
||||
|
||||
T* unsafeGet() { return &this->value; }
|
||||
T const* unsafeGet() const { return &this->value; }
|
||||
@@ -955,35 +956,6 @@ typedef ReadBarriered<WasmTableObject*>
|
||||
|
||||
typedef ReadBarriered<Value> ReadBarrieredValue;
|
||||
|
||||
-namespace detail {
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<PreBarriered<T>> : mozilla::TrueType {
|
||||
- static const T& get(const PreBarriered<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<GCPtr<T>> : mozilla::TrueType {
|
||||
- static const T& get(const GCPtr<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<HeapPtr<T>> : mozilla::TrueType {
|
||||
- static const T& get(const HeapPtr<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<ReadBarriered<T>> : mozilla::TrueType {
|
||||
- static const T& get(const ReadBarriered<T>& v) { return v.unbarrieredGet(); }
|
||||
-};
|
||||
-
|
||||
-template <>
|
||||
-struct DefineComparisonOps<HeapSlot> : mozilla::TrueType {
|
||||
- static const Value& get(const HeapSlot& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-} /* namespace detail */
|
||||
-
|
||||
} /* namespace js */
|
||||
|
||||
#endif /* gc_Barrier_h */
|
||||
diff -up firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp.1337988 firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp
|
||||
--- firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp.1337988 2017-09-14 22:16:02.000000000 +0200
|
||||
+++ firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp 2017-09-25 10:34:11.206611695 +0200
|
||||
@@ -5,7 +5,6 @@
|
||||
* 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/. */
|
||||
|
||||
-#include "mozilla/TypeTraits.h"
|
||||
#include "mozilla/UniquePtr.h"
|
||||
|
||||
#include "js/RootingAPI.h"
|
||||
diff -up firefox-56.0/js/src/vm/SharedMem.h.1337988 firefox-56.0/js/src/vm/SharedMem.h
|
||||
--- firefox-56.0/js/src/vm/SharedMem.h.1337988 2017-06-15 22:52:29.000000000 +0200
|
||||
+++ firefox-56.0/js/src/vm/SharedMem.h 2017-09-25 10:34:11.206611695 +0200
|
||||
@@ -12,8 +12,8 @@
|
||||
template<typename T>
|
||||
class SharedMem
|
||||
{
|
||||
- // static_assert(mozilla::IsPointer<T>::value,
|
||||
- // "SharedMem encapsulates pointer types");
|
||||
+ static_assert(mozilla::IsPointer<T>::value,
|
||||
+ "SharedMem encapsulates pointer types");
|
||||
|
||||
enum Sharedness {
|
||||
IsUnshared,
|
||||
diff -up firefox-56.0/js/xpconnect/src/XPCInlines.h.1337988 firefox-56.0/js/xpconnect/src/XPCInlines.h
|
||||
--- firefox-56.0/js/xpconnect/src/XPCInlines.h.1337988 2017-09-14 22:16:03.000000000 +0200
|
||||
+++ firefox-56.0/js/xpconnect/src/XPCInlines.h 2017-09-25 10:34:11.206611695 +0200
|
||||
@@ -465,7 +465,7 @@ inline
|
||||
void XPCWrappedNativeTearOff::JSObjectMoved(JSObject* obj, const JSObject* old)
|
||||
{
|
||||
MOZ_ASSERT(!IsMarked());
|
||||
- MOZ_ASSERT(mJSObject == old);
|
||||
+ MOZ_ASSERT(mJSObject.unbarrieredGetPtr() == old);
|
||||
mJSObject = obj;
|
||||
}
|
||||
|
||||
diff -up firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp.1337988 firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp
|
||||
--- firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp.1337988 2017-09-14 22:16:03.000000000 +0200
|
||||
+++ firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp 2017-09-25 10:34:11.207611692 +0200
|
||||
@@ -874,7 +874,7 @@ void
|
||||
XPCWrappedNative::FlatJSObjectMoved(JSObject* obj, const JSObject* old)
|
||||
{
|
||||
JS::AutoAssertGCCallback inCallback;
|
||||
- MOZ_ASSERT(mFlatJSObject == old);
|
||||
+ MOZ_ASSERT(mFlatJSObject.unbarrieredGetPtr() == old);
|
||||
|
||||
nsWrapperCache* cache = nullptr;
|
||||
CallQueryInterface(mIdentity, &cache);
|
||||
diff -up firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp.1337988 firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp
|
||||
--- firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp.1337988 2017-07-31 18:20:47.000000000 +0200
|
||||
+++ firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp 2017-09-25 10:34:11.207611692 +0200
|
||||
@@ -101,7 +101,7 @@ XPCWrappedNativeProto::CallPostCreatePro
|
||||
void
|
||||
XPCWrappedNativeProto::JSProtoObjectFinalized(js::FreeOp* fop, JSObject* obj)
|
||||
{
|
||||
- MOZ_ASSERT(obj == mJSProtoObject, "huh?");
|
||||
+ MOZ_ASSERT(obj == mJSProtoObject.unbarrieredGet(), "huh?");
|
||||
|
||||
#ifdef DEBUG
|
||||
// Check that this object has already been swept from the map.
|
||||
@@ -117,7 +117,7 @@ XPCWrappedNativeProto::JSProtoObjectFina
|
||||
void
|
||||
XPCWrappedNativeProto::JSProtoObjectMoved(JSObject* obj, const JSObject* old)
|
||||
{
|
||||
- MOZ_ASSERT(mJSProtoObject == old);
|
||||
+ MOZ_ASSERT(mJSProtoObject.unbarrieredGet() == old);
|
||||
mJSProtoObject.init(obj); // Update without triggering barriers.
|
||||
}
|
||||
|
||||
51
mozilla-1580174-webrtc-popup.patch
Normal file
51
mozilla-1580174-webrtc-popup.patch
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
|
||||
--- a/widget/gtk/nsWindow.cpp
|
||||
+++ b/widget/gtk/nsWindow.cpp
|
||||
@@ -1155,6 +1155,28 @@
|
||||
}
|
||||
}
|
||||
|
||||
+bool IsPopupWithoutToplevelParent(nsMenuPopupFrame* aMenuPopupFrame) {
|
||||
+ // Check if the popup is autocomplete (like tags autocomplete
|
||||
+ // in the bookmark edit popup).
|
||||
+ nsAtom* popupId = aMenuPopupFrame->GetContent()->GetID();
|
||||
+ if (popupId && popupId->Equals(NS_LITERAL_STRING("PopupAutoComplete"))) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ // Check if the popup is in popupnotificationcontent (like choosing capture
|
||||
+ // device when starting webrtc session).
|
||||
+ nsIFrame* parentFrame = aMenuPopupFrame->GetParent();
|
||||
+ if (!parentFrame) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ parentFrame = parentFrame->GetParent();
|
||||
+ if (parentFrame && parentFrame->GetContent()->NodeName().EqualsLiteral(
|
||||
+ "popupnotificationcontent")) {
|
||||
+ return true;
|
||||
+ }
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
// Wayland keeps strong popup window hierarchy. We need to track active
|
||||
// (visible) popup windows and make sure we hide popup on the same level
|
||||
// before we open another one on that level. It means that every open
|
||||
@@ -1211,10 +1233,14 @@
|
||||
LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
|
||||
|
||||
// If the popup is a regular menu but GetParentMenuWidget() returns
|
||||
- // nullptr which means it's connected non-menu parent
|
||||
- // (bookmark toolbar for instance).
|
||||
+ // nullptr which means is not a submenu of any other menu.
|
||||
// In this case use a parent given at nsWindow::Create().
|
||||
- if (!parentWindow && !menuPopupFrame->IsContextMenu()) {
|
||||
+ // But we have to avoid using mToplevelParentWindow in case the popup
|
||||
+ // is in 'popupnotificationcontent' element or autocomplete popup,
|
||||
+ // otherwise the popupnotification would disappear when for
|
||||
+ // example opening a popup with microphone selection.
|
||||
+ if (!parentWindow && !menuPopupFrame->IsContextMenu() &&
|
||||
+ !IsPopupWithoutToplevelParent(menuPopupFrame)) {
|
||||
parentWindow =
|
||||
get_window_for_gtk_widget(GTK_WIDGET(mToplevelParentWindow));
|
||||
}
|
||||
|
||||
25
mp4parse-rust-8b5b652d38e007e736bb442ccd5aa5ed699db100.patch
Normal file
25
mp4parse-rust-8b5b652d38e007e736bb442ccd5aa5ed699db100.patch
Normal file
File diff suppressed because one or more lines are too long
12
rhbz-1173156.patch
Normal file
12
rhbz-1173156.patch
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
diff -up a/extensions/auth/nsAuthSambaNTLM.cpp.old b/extensions/auth/nsAuthSambaNTLM.cpp
|
||||
--- a/extensions/auth/nsAuthSambaNTLM.cpp.old 2014-11-25 12:23:22.000000000 +0100
|
||||
+++ b/extensions/auth/nsAuthSambaNTLM.cpp 2014-12-23 15:26:36.606674625 +0100
|
||||
@@ -161,7 +161,7 @@
|
||||
const char* username = PR_GetEnv("USER");
|
||||
if (!username) return NS_ERROR_FAILURE;
|
||||
|
||||
- const char* const args[] = {"ntlm_auth",
|
||||
+ const char* const args[] = {"/usr/bin/ntlm_auth",
|
||||
"--helper-protocol",
|
||||
"ntlmssp-client-1",
|
||||
"--use-cached-creds",
|
||||
|
|
@ -20,24 +20,21 @@ if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
|
|||
# if not found, launch a new one
|
||||
eval `dbus-launch --sh-syntax`
|
||||
fi
|
||||
eval `echo '' | /usr/bin/gnome-keyring-daemon -r -d --unlock --components=secrets`
|
||||
|
||||
if [ -z "$XDG_RUNTIME_DIR" ]; then
|
||||
export XDG_RUNTIME_DIR=$HOME
|
||||
fi
|
||||
|
||||
export WAYLAND_DISPLAY=icecat-pgo-wayland-0
|
||||
if [ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ]; then
|
||||
rm -f $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY
|
||||
rm -f $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY.lock
|
||||
. xvfb-run -s "-screen 0 1600x1200x24" -n 80 mutter --display=:80 --wayland --nested &
|
||||
export DISPLAY=:80
|
||||
|
||||
if [ -z "$WAYLAND_DISPLAY" ] ; then
|
||||
export WAYLAND_DISPLAY=wayland-0
|
||||
else
|
||||
export WAYLAND_DISPLAY=wayland-1
|
||||
fi
|
||||
|
||||
echo "Launch mutter for $WAYLAND_DISPLAY"
|
||||
mutter --headless --virtual-monitor 1920x1080 --wayland-display=$WAYLAND_DISPLAY --no-x11 & MUTTER_PID=$!
|
||||
export MUTTER_PID
|
||||
echo "Mutter PID $MUTTER_PID"
|
||||
|
||||
echo "Waiting for mutter to start..."
|
||||
sleep 5
|
||||
sleep 10
|
||||
retry_count=0
|
||||
max_retries=5
|
||||
until [ $retry_count -gt $max_retries ]; do
|
||||
|
|
@ -50,11 +47,4 @@ until [ $retry_count -gt $max_retries ]; do
|
|||
fi
|
||||
done
|
||||
|
||||
if [ ! -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ]; then
|
||||
echo "Mutter failed to start!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Mutter is running, $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY is here."
|
||||
|
||||
|
||||
env | grep "DISPLAY"
|
||||
|
|
|
|||
154
rust-bindgen-2319-2339.patch
Normal file
154
rust-bindgen-2319-2339.patch
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
--- thunderbird-102.11.1/third_party/rust/bindgen/.cargo-checksum.json.rust-bindgen-2319-2339 2023-05-24 00:50:52.000000000 +0200
|
||||
+++ thunderbird-102.11.1/third_party/rust/bindgen/.cargo-checksum.json 2023-06-07 01:11:35.838302019 +0200
|
||||
@@ -1 +1 @@
|
||||
-{"files":{"Cargo.lock":"836e8f8431bd4ebdac9b1251676f6afa755757e401455259fe659e7280be8230","Cargo.toml":"3a585a6e27a177f08dedcb21f7d555e9db58fa158203273b228db91ebee4e6b3","LICENSE":"c23953d9deb0a3312dbeaf6c128a657f3591acee45067612fa68405eaa4525db","README.md":"29fe30d7a2729922b13a578bc8f5eedc808fd0f2ef67a3f12017548baf8f293a","build.rs":"3fe1e534c99df4ee207606794f133fb187c0948e055389f74c904994ecaed38a","csmith-fuzzing/README.md":"7107b70fedb0c0a0cadb3c439a49c1bd0119a6d38dc63b1aecc74d1942256ef2","src/callbacks.rs":"1e5a118b94977938751758ac0495b1d41ce5e280c066614a4a7cbd930f326350","src/clang.rs":"aa0644278a8319506be08904c0f6706fbcdcd72eb1e85564b8c7488bd810e126","src/codegen/bitfield_unit.rs":"a8fb1a2d97a99685106fcaac87d2013f79d2690d6a46ff05ad1e3629b6075664","src/codegen/bitfield_unit_tests.rs":"dd252134118450800b516e375c872e17b4c1aee63a7b8adbe5b2cd53434bbc7e","src/codegen/dyngen.rs":"15149bc927e5b2706f93e52a6b26ef55384b3baf40bfc9bc4343e9820479f26b","src/codegen/error.rs":"5e308b8c54b68511fc8ea2ad15ddac510172c4ff460a80a265336440b0c9653d","src/codegen/helpers.rs":"ea83104addb8af31736aaeb850e10c694cd434befe7ffaaa206208f722d72c58","src/codegen/impl_debug.rs":"1ff9ec754b610c98c757b114c6509473ead0e1a9375e9089a7fa40a41a753709","src/codegen/impl_partialeq.rs":"5e526fd88dd15dd1f04addd3c6ecea1d3da92293fadf04346d6c716791f436f9","src/codegen/mod.rs":"19fd11feefab0ff9ecaf8a01583583008269adce805508fb61b9a8acc49da586","src/codegen/struct_layout.rs":"b62c3569dcfb011daa4d09f1aa9eb732da69546c3deb9f247fa8ce7114dbc7b9","src/extra_assertions.rs":"494534bd4f18b80d89b180c8a93733e6617edcf7deac413e9a73fd6e7bc9ced7","src/features.rs":"fafb85510b1dfc9a41ed71f7d765fca49b236deb4ee567e00204e751362aaf23","src/ir/analysis/derive.rs":"ff4821d810961696008a57ae496f95ebcdc14b4c439fe87d78a84817442fa759","src/ir/analysis/has_destructor.rs":"d9a3a24bd4cabc87cddb0c76d27da1691f8f37ffb8eadf5b5975a1c44dea99c2","src/ir/analysis/has_float.rs":"5242cc07ec4d4bdf5a792e1f8ee5758a87838314917d42dbb9dcfc19620520ce","src/ir/analysis/has_type_param_in_array.rs":"ec3fb67f782abb4c866da91bce3f7ee6f8e2310c47a54065282431b909233f7d","src/ir/analysis/has_vtable.rs":"63e2d0f62171811893615c11453bc7b39438d0d83c3eb444dec2346140d86efe","src/ir/analysis/mod.rs":"2c54f0cd6f3d86cf3fcb07d9d0be06cde839cab4170671c80d806a3f27820faf","src/ir/analysis/sizedness.rs":"17f1f2b6affd025f73853b9b5a76b3f157b5f9e563e9eaa374735fcb84c13308","src/ir/analysis/template_params.rs":"da949976a7fd04d6fc564ea6a77dfdbf4f5bf05db64687ed7a0616cba598a42d","src/ir/annotations.rs":"1c931d7bbba1e1613e9cccaab58d14f75e79b831b5c881e41f5b5257a9cbced7","src/ir/comment.rs":"31d64a49ae3d9c3c348fa2539e03306ca3a23fae429cab452e42b31ecf632145","src/ir/comp.rs":"abaa90e27dc6416f1b8db003f87888e7651d5b46c4d4526153980e5621612e54","src/ir/context.rs":"3a76458a5aa74075a60a5cd752ed59ad3943054f55b017700389f78072935215","src/ir/derive.rs":"e5581852eec87918901a129284b4965aefc8a19394187a8095779a084f28fabe","src/ir/dot.rs":"e25ff72ac174a798894c9673d81bdfb86fa9f4228b34a14ce0dc741a186a52bd","src/ir/enum_ty.rs":"e49e3c6ffc0289584e2f836fe56a4b7ebf6ca3f8b602248141d67b9f533770cc","src/ir/function.rs":"aa454ace56bda8074b2865933282aa124624310c8bc0c994d454f5799f4e88be","src/ir/int.rs":"68a86182743ec338d58e42203364dc7c8970cb7ec3550433ca92f0c9489b4442","src/ir/item.rs":"a71bdacc7419ec86d52ac534158cf4bfa4600e9cbc214c0075766700f5b053b0","src/ir/item_kind.rs":"7666a1ff1b8260978b790a08b4139ab56b5c65714a5652bbcec7faa7443adc36","src/ir/layout.rs":"755e3787c262de434a53a8c326f0e825f95415ed6b0f925c1cddf208ca8e3bc4","src/ir/mod.rs":"713cd537434567003197a123cbae679602c715e976d22f7b23dafd0826ea4c70","src/ir/module.rs":"70cf6ddfeabe6cdc13fdc767c783216c073404848d827e85fc6c2de3a19b5c3f","src/ir/objc.rs":"195fb2a3e4371b90244f3a8f295fd80cc77e0f2daf8fd27e3d8e5b78bd6b55d6","src/ir/template.rs":"44bd7214cf1e7f70e60694115082aac5b8a6c1687fff584cd08cdcfadabc5734","src/ir/traversal.rs":"5ac088277f4dfe2918d81b9294aaee41fd83db8e46def66a05f89de078bf4c49","src/ir/ty.rs":"8f2b970da76850685c4d334289af6dede7742862d7a81f2236115afaa1a92fa9","src/ir/var.rs":"86e9f19403fb9231ba60dec0a04e5b56fe28a37c7a5e6f676c978789c9d93c5a","src/lib.rs":"ed2d0aeb48b28b4a96b8e76a10e00b10cb6cc32c0a686d536f9021463b7ee0e8","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"74e582c37b146090332b1496f5b4bca02c7629d03a4ae40302cb4a723f08e445","src/options.rs":"119358b741601dafc13560856f6e4b4f78b6cd2b19067893c2672ba8f5dc6de1","src/parse.rs":"4ffc54415eadb622ee488603862788c78361ef2c889de25259441a340c2a010f","src/regex_set.rs":"6c46357fb1ee68250e5e017cbf691f340041489ae78599eee7a5665a6ddce27f","src/time.rs":"8efe317e7c6b5ba8e0865ce7b49ca775ee8a02590f4241ef62f647fa3c22b68e"},"package":"2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239"}
|
||||
\ No newline at end of file
|
||||
+{"files":{"Cargo.lock":"836e8f8431bd4ebdac9b1251676f6afa755757e401455259fe659e7280be8230","Cargo.toml":"3a585a6e27a177f08dedcb21f7d555e9db58fa158203273b228db91ebee4e6b3","LICENSE":"c23953d9deb0a3312dbeaf6c128a657f3591acee45067612fa68405eaa4525db","README.md":"29fe30d7a2729922b13a578bc8f5eedc808fd0f2ef67a3f12017548baf8f293a","build.rs":"3fe1e534c99df4ee207606794f133fb187c0948e055389f74c904994ecaed38a","csmith-fuzzing/README.md":"7107b70fedb0c0a0cadb3c439a49c1bd0119a6d38dc63b1aecc74d1942256ef2","src/callbacks.rs":"1e5a118b94977938751758ac0495b1d41ce5e280c066614a4a7cbd930f326350","src/clang.rs":"30fdc473ff70dcbc394927d6fb674d70a62c1a3847e855becd988dc476997815","src/codegen/bitfield_unit.rs":"a8fb1a2d97a99685106fcaac87d2013f79d2690d6a46ff05ad1e3629b6075664","src/codegen/bitfield_unit_tests.rs":"dd252134118450800b516e375c872e17b4c1aee63a7b8adbe5b2cd53434bbc7e","src/codegen/dyngen.rs":"15149bc927e5b2706f93e52a6b26ef55384b3baf40bfc9bc4343e9820479f26b","src/codegen/error.rs":"5e308b8c54b68511fc8ea2ad15ddac510172c4ff460a80a265336440b0c9653d","src/codegen/helpers.rs":"ea83104addb8af31736aaeb850e10c694cd434befe7ffaaa206208f722d72c58","src/codegen/impl_debug.rs":"1ff9ec754b610c98c757b114c6509473ead0e1a9375e9089a7fa40a41a753709","src/codegen/impl_partialeq.rs":"5e526fd88dd15dd1f04addd3c6ecea1d3da92293fadf04346d6c716791f436f9","src/codegen/mod.rs":"19fd11feefab0ff9ecaf8a01583583008269adce805508fb61b9a8acc49da586","src/codegen/struct_layout.rs":"b62c3569dcfb011daa4d09f1aa9eb732da69546c3deb9f247fa8ce7114dbc7b9","src/extra_assertions.rs":"494534bd4f18b80d89b180c8a93733e6617edcf7deac413e9a73fd6e7bc9ced7","src/features.rs":"fafb85510b1dfc9a41ed71f7d765fca49b236deb4ee567e00204e751362aaf23","src/ir/analysis/derive.rs":"ff4821d810961696008a57ae496f95ebcdc14b4c439fe87d78a84817442fa759","src/ir/analysis/has_destructor.rs":"d9a3a24bd4cabc87cddb0c76d27da1691f8f37ffb8eadf5b5975a1c44dea99c2","src/ir/analysis/has_float.rs":"5242cc07ec4d4bdf5a792e1f8ee5758a87838314917d42dbb9dcfc19620520ce","src/ir/analysis/has_type_param_in_array.rs":"ec3fb67f782abb4c866da91bce3f7ee6f8e2310c47a54065282431b909233f7d","src/ir/analysis/has_vtable.rs":"63e2d0f62171811893615c11453bc7b39438d0d83c3eb444dec2346140d86efe","src/ir/analysis/mod.rs":"2c54f0cd6f3d86cf3fcb07d9d0be06cde839cab4170671c80d806a3f27820faf","src/ir/analysis/sizedness.rs":"17f1f2b6affd025f73853b9b5a76b3f157b5f9e563e9eaa374735fcb84c13308","src/ir/analysis/template_params.rs":"da949976a7fd04d6fc564ea6a77dfdbf4f5bf05db64687ed7a0616cba598a42d","src/ir/annotations.rs":"1c931d7bbba1e1613e9cccaab58d14f75e79b831b5c881e41f5b5257a9cbced7","src/ir/comment.rs":"31d64a49ae3d9c3c348fa2539e03306ca3a23fae429cab452e42b31ecf632145","src/ir/comp.rs":"232300be66abbbc3d7ef948c24f000dd8a50d78e72aa0e4b2cc43ffd4f800226","src/ir/context.rs":"3a76458a5aa74075a60a5cd752ed59ad3943054f55b017700389f78072935215","src/ir/derive.rs":"e5581852eec87918901a129284b4965aefc8a19394187a8095779a084f28fabe","src/ir/dot.rs":"e25ff72ac174a798894c9673d81bdfb86fa9f4228b34a14ce0dc741a186a52bd","src/ir/enum_ty.rs":"e49e3c6ffc0289584e2f836fe56a4b7ebf6ca3f8b602248141d67b9f533770cc","src/ir/function.rs":"aa454ace56bda8074b2865933282aa124624310c8bc0c994d454f5799f4e88be","src/ir/int.rs":"68a86182743ec338d58e42203364dc7c8970cb7ec3550433ca92f0c9489b4442","src/ir/item.rs":"a71bdacc7419ec86d52ac534158cf4bfa4600e9cbc214c0075766700f5b053b0","src/ir/item_kind.rs":"7666a1ff1b8260978b790a08b4139ab56b5c65714a5652bbcec7faa7443adc36","src/ir/layout.rs":"755e3787c262de434a53a8c326f0e825f95415ed6b0f925c1cddf208ca8e3bc4","src/ir/mod.rs":"713cd537434567003197a123cbae679602c715e976d22f7b23dafd0826ea4c70","src/ir/module.rs":"70cf6ddfeabe6cdc13fdc767c783216c073404848d827e85fc6c2de3a19b5c3f","src/ir/objc.rs":"195fb2a3e4371b90244f3a8f295fd80cc77e0f2daf8fd27e3d8e5b78bd6b55d6","src/ir/template.rs":"44bd7214cf1e7f70e60694115082aac5b8a6c1687fff584cd08cdcfadabc5734","src/ir/traversal.rs":"5ac088277f4dfe2918d81b9294aaee41fd83db8e46def66a05f89de078bf4c49","src/ir/ty.rs":"8d7e7883316245c54e5dfa2fd150df1be2dc559c7df0828da736dd6b18d2165b","src/ir/var.rs":"1e7be8eedba72effa995b48c581504e61e407867d8794a8528975688742b0420","src/lib.rs":"ed2d0aeb48b28b4a96b8e76a10e00b10cb6cc32c0a686d536f9021463b7ee0e8","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"74e582c37b146090332b1496f5b4bca02c7629d03a4ae40302cb4a723f08e445","src/options.rs":"119358b741601dafc13560856f6e4b4f78b6cd2b19067893c2672ba8f5dc6de1","src/parse.rs":"4ffc54415eadb622ee488603862788c78361ef2c889de25259441a340c2a010f","src/regex_set.rs":"6c46357fb1ee68250e5e017cbf691f340041489ae78599eee7a5665a6ddce27f","src/time.rs":"8efe317e7c6b5ba8e0865ce7b49ca775ee8a02590f4241ef62f647fa3c22b68e"},"package":"2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239"}
|
||||
\ No newline at end of file
|
||||
--- thunderbird-102.11.1/third_party/rust/bindgen/src/clang.rs.rust-bindgen-2319-2339 2023-05-24 00:50:51.000000000 +0200
|
||||
+++ thunderbird-102.11.1/third_party/rust/bindgen/src/clang.rs 2023-06-07 00:59:18.845709213 +0200
|
||||
@@ -54,6 +54,11 @@ impl Cursor {
|
||||
unsafe { clang_isDeclaration(self.kind()) != 0 }
|
||||
}
|
||||
|
||||
+ /// Is this cursor's referent an anonymous record or so?
|
||||
+ pub fn is_anonymous(&self) -> bool {
|
||||
+ unsafe { clang_Cursor_isAnonymous(self.x) != 0 }
|
||||
+ }
|
||||
+
|
||||
/// Get this cursor's referent's spelling.
|
||||
pub fn spelling(&self) -> String {
|
||||
unsafe { cxstring_into_string(clang_getCursorSpelling(self.x)) }
|
||||
--- thunderbird-102.11.1/third_party/rust/bindgen/src/ir/comp.rs.rust-bindgen-2319-2339 2023-05-24 00:50:52.000000000 +0200
|
||||
+++ thunderbird-102.11.1/third_party/rust/bindgen/src/ir/comp.rs 2023-06-07 00:59:18.846709211 +0200
|
||||
@@ -1372,8 +1372,7 @@ impl CompInfo {
|
||||
|
||||
// A declaration of an union or a struct without name could
|
||||
// also be an unnamed field, unfortunately.
|
||||
- if cur.spelling().is_empty() &&
|
||||
- cur.kind() != CXCursor_EnumDecl
|
||||
+ if cur.is_anonymous() && cur.kind() != CXCursor_EnumDecl
|
||||
{
|
||||
let ty = cur.cur_type();
|
||||
let offset = cur.offset_of_field().ok();
|
||||
--- thunderbird-102.11.1/third_party/rust/bindgen/src/ir/ty.rs.rust-bindgen-2319-2339 2023-05-24 00:50:52.000000000 +0200
|
||||
+++ thunderbird-102.11.1/third_party/rust/bindgen/src/ir/ty.rs 2023-06-07 00:59:18.847709209 +0200
|
||||
@@ -737,7 +737,12 @@ impl Type {
|
||||
|
||||
let layout = ty.fallible_layout(ctx).ok();
|
||||
let cursor = ty.declaration();
|
||||
- let mut name = cursor.spelling();
|
||||
+ let is_anonymous = cursor.is_anonymous();
|
||||
+ let mut name = if is_anonymous {
|
||||
+ None
|
||||
+ } else {
|
||||
+ Some(cursor.spelling()).filter(|n| !n.is_empty())
|
||||
+ };
|
||||
|
||||
debug!(
|
||||
"from_clang_ty: {:?}, ty: {:?}, loc: {:?}",
|
||||
@@ -771,7 +776,7 @@ impl Type {
|
||||
if is_canonical_objcpointer && is_template_type_param {
|
||||
// Objective-C generics are just ids with fancy name.
|
||||
// To keep it simple, just name them ids
|
||||
- name = "id".to_owned();
|
||||
+ name = Some("id".to_owned());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -900,7 +905,7 @@ impl Type {
|
||||
return Err(ParseError::Recurse);
|
||||
}
|
||||
} else {
|
||||
- name = location.spelling();
|
||||
+ name = Some(location.spelling());
|
||||
}
|
||||
|
||||
let complex = CompInfo::from_ty(
|
||||
@@ -942,7 +947,7 @@ impl Type {
|
||||
CXType_Typedef
|
||||
);
|
||||
|
||||
- name = current.spelling();
|
||||
+ name = Some(location.spelling());
|
||||
|
||||
let inner_ty = cur
|
||||
.typedef_type()
|
||||
@@ -1126,10 +1131,10 @@ impl Type {
|
||||
CXType_Enum => {
|
||||
let enum_ = Enum::from_ty(ty, ctx).expect("Not an enum?");
|
||||
|
||||
- if name.is_empty() {
|
||||
+ if !is_anonymous {
|
||||
let pretty_name = ty.spelling();
|
||||
if clang::is_valid_identifier(&pretty_name) {
|
||||
- name = pretty_name;
|
||||
+ name = Some(pretty_name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1144,12 +1149,12 @@ impl Type {
|
||||
)
|
||||
.expect("Not a complex type?");
|
||||
|
||||
- if name.is_empty() {
|
||||
+ if !is_anonymous {
|
||||
// The pretty-printed name may contain typedefed name,
|
||||
// but may also be "struct (anonymous at .h:1)"
|
||||
let pretty_name = ty.spelling();
|
||||
if clang::is_valid_identifier(&pretty_name) {
|
||||
- name = pretty_name;
|
||||
+ name = Some(pretty_name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1189,7 +1194,9 @@ impl Type {
|
||||
CXType_ObjCClass | CXType_ObjCInterface => {
|
||||
let interface = ObjCInterface::from_ty(&location, ctx)
|
||||
.expect("Not a valid objc interface?");
|
||||
- name = interface.rust_name();
|
||||
+ if !is_anonymous {
|
||||
+ name = Some(interface.rust_name());
|
||||
+ }
|
||||
TypeKind::ObjCInterface(interface)
|
||||
}
|
||||
CXType_Dependent => {
|
||||
@@ -1207,7 +1214,7 @@ impl Type {
|
||||
}
|
||||
};
|
||||
|
||||
- let name = if name.is_empty() { None } else { Some(name) };
|
||||
+ name = name.filter(|n| !n.is_empty());
|
||||
|
||||
let is_const = ty.is_const() ||
|
||||
(ty.kind() == CXType_ConstantArray &&
|
||||
--- thunderbird-102.11.1/third_party/rust/bindgen/src/ir/ty.rs.rust-bindgen-2319-2339
|
||||
+++ thunderbird-102.11.1/third_party/rust/bindgen/src/ir/ty.rs
|
||||
@@ -1145,8 +1145,7 @@ impl Type {
|
||||
location,
|
||||
None,
|
||||
ctx,
|
||||
- )
|
||||
- .expect("Not able to resolve vector element?");
|
||||
+ )?;
|
||||
TypeKind::Vector(inner, ty.num_elements().unwrap())
|
||||
}
|
||||
CXType_ConstantArray => {
|
||||
--- thunderbird-102.11.1/third_party/rust/bindgen/src/ir/var.rs.rust-bindgen-2319-2339
|
||||
+++ thunderbird-102.11.1/third_party/rust/bindgen/src/ir/var.rs
|
||||
@@ -293,11 +293,11 @@ impl ClangSubItemParser for Var {
|
||||
let ty = match Item::from_ty(&ty, cursor, None, ctx) {
|
||||
Ok(ty) => ty,
|
||||
Err(e) => {
|
||||
- assert_eq!(
|
||||
- ty.kind(),
|
||||
- CXType_Auto,
|
||||
+ assert!(
|
||||
+ matches!(ty.kind(), CXType_Auto | CXType_Unexposed),
|
||||
"Couldn't resolve constant type, and it \
|
||||
- wasn't an nondeductible auto type!"
|
||||
+ wasn't an nondeductible auto type or unexposed \
|
||||
+ type!"
|
||||
);
|
||||
return Err(e);
|
||||
}
|
||||
6
sources
6
sources
|
|
@ -1,5 +1,5 @@
|
|||
SHA512 (cbindgen-vendor.tar.xz) = 647dcadf3507bd05262613d03ff18a8c876bcbb4e83ce59f911128ae020ac16695298987c6c14f8b7a7aee5bb096740c6885c0a854d8b26431fc9a8ff864c369
|
||||
SHA512 (icecat-140.7.0-langpacks.tar.gz) = a4618e3272b48be4307c79222bdd55f321aefb6d6ba08beb10178d0b95530bc4130cf86901d0906e714bd75106ad8513957fe3ad335431c8faf5b2d9767e17de
|
||||
SHA512 (icecat-140.7.0-rh1.tar.bz2) = 7a19f7928322bea905828e6a4e981395687f1b649e37518a8000bcfcb29446b424ee592f708d0c7c93ebeb901820752785f883a937e9361e9f172a0a9bacb603
|
||||
SHA512 (cbindgen-vendor.tar.xz) = 6d354d65674395b8171f262ae9aa08f656fdd83b6d29d70bd1ad2f13c4a52db81df780cfdf6ac86e9d1f16426c9ab3cdc0160f0785a0909ad7525fd8a9bc3b25
|
||||
SHA512 (icecat-128.13.0-langpacks.tar.gz) = b0d4ac1f6014f23d587e9168689b292c29139794bf5c9f24ef0ab296add4d3198403eddfd7c8c67ae493ce533e1294b3e74e977e418a3455510f6219e2391d87
|
||||
SHA512 (icecat-128.13.0-rh1.tar.bz2) = f16c8a329db890be32f8024a5852667500d8a2a8a8cedcbbb9e473c7a65f8ef90002210388ccb84716463d10e5f56048abdf27fb479d669b489be502cf4cadcf
|
||||
SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c
|
||||
SHA512 (icecat.png) = a3cec16cb15a27c3c91b53e2c534e78b07911011ff1331e450c0baf8e13b76da7cea2a90e5d75191fa88cfbfd40a0a7f3e553e92b64d0043dadd5ad5edfdf81c
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue