From d895b6172822e8b31e83c3a8cc578db954f70dbd Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Wed, 16 Aug 2023 22:52:58 +0200 Subject: [PATCH] fixed chromium FTBFS on RHEL7, error: undefined symbol: unsigned long cc::PaintOpWriter::SerializedSize --- chromium-116-constexpr.patch | 65 ++++++++++++++++++++++++++++++++++++ chromium.spec | 2 ++ 2 files changed, 67 insertions(+) create mode 100644 chromium-116-constexpr.patch diff --git a/chromium-116-constexpr.patch b/chromium-116-constexpr.patch new file mode 100644 index 00000000..08b5930a --- /dev/null +++ b/chromium-116-constexpr.patch @@ -0,0 +1,65 @@ +diff -up chromium-116.0.5845.96/cc/paint/paint_op_writer.h.me chromium-116.0.5845.96/cc/paint/paint_op_writer.h +--- chromium-116.0.5845.96/cc/paint/paint_op_writer.h.me 2023-08-16 19:09:48.998173285 +0200 ++++ chromium-116.0.5845.96/cc/paint/paint_op_writer.h 2023-08-16 21:13:44.442431527 +0200 +@@ -104,7 +104,16 @@ class CC_PAINT_EXPORT PaintOpWriter { + + private: + template +- static constexpr size_t SerializedSizeSimple(); ++ static constexpr size_t SerializedSizeSimple() { ++ static_assert(!std::is_pointer_v); ++ return base::bits::AlignUp(sizeof(T), kDefaultAlignment); ++ } ++ // size_t is always serialized as uint64_t to make the serialized result ++ // portable between 32bit and 64bit processes. ++ template <> ++ constexpr size_t SerializedSizeSimple() { ++ return base::bits::AlignUp(sizeof(uint64_t), kDefaultAlignment); ++ } + + public: + // SerializedSize() returns the maximum serialized size of the given type or +@@ -115,7 +124,10 @@ class CC_PAINT_EXPORT PaintOpWriter { + // deserialization, and make it possible to allow dynamic sizing for some + // data types (see the specialized/overloaded functions). + template +- static constexpr size_t SerializedSize(); ++ static constexpr size_t SerializedSize() { ++ static_assert(std::is_arithmetic_v || std::is_enum_v); ++ return SerializedSizeSimple(); ++ } + template + static constexpr size_t SerializedSize(const T& data); + static size_t SerializedSize(const PaintImage& image); +@@ -360,19 +372,6 @@ class CC_PAINT_EXPORT PaintOpWriter { + const bool enable_security_constraints_; + }; + +-template +-constexpr size_t PaintOpWriter::SerializedSizeSimple() { +- static_assert(!std::is_pointer_v); +- return base::bits::AlignUp(sizeof(T), kDefaultAlignment); +-} +- +-// size_t is always serialized as two uint32_ts to make the serialized result +-// portable between 32bit and 64bit processes. +-template <> +-constexpr size_t PaintOpWriter::SerializedSizeSimple() { +- return base::bits::AlignUp(2 * sizeof(uint32_t), kDefaultAlignment); +-} +- + template <> + constexpr size_t PaintOpWriter::SerializedSize() { + return SerializedSizeSimple() + // fGainmapRatioMin +@@ -386,11 +385,6 @@ constexpr size_t PaintOpWriter::Serializ + } + + template +-constexpr size_t PaintOpWriter::SerializedSize() { +- static_assert(std::is_arithmetic_v || std::is_enum_v); +- return SerializedSizeSimple(); +-} +-template + constexpr size_t PaintOpWriter::SerializedSize(const T& data) { + return SerializedSizeSimple(); + } diff --git a/chromium.spec b/chromium.spec index a23f4238..875cb73e 100644 --- a/chromium.spec +++ b/chromium.spec @@ -324,6 +324,7 @@ Patch107: chromium-99.0.4844.51-el7-extra-operator.patch # workaround for clang bug on el7 Patch109: chromium-114-wireless-el7.patch Patch110: chromium-115-buildflag-el7.patch +Patch111: chromium-116-constexpr.patch # system ffmpeg Patch114: chromium-107-ffmpeg-duration.patch @@ -947,6 +948,7 @@ udev. %patch -P107 -p1 -b .el7-extra-operator-equalequal %patch -P109 -p1 -b .wireless %patch -P110 -p1 -b .buildflag-el7 +%patch -P111 -p1 -b .constexpr %endif %if 0%{?rhel} == 9