gnu: helm: Fix build with GCC 9 and later.

* gnu/packages/music.scm (helm)[origin]: Add patch.
* gnu/packages/patches/helm-fix-gcc-9-build.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
This commit is contained in:
Pierre Langlois 2021-12-06 20:41:18 +00:00
parent 8662057130
commit 4afacd4546
No known key found for this signature in database
GPG key ID: A8FC9E447F4F7D54
3 changed files with 144 additions and 1 deletions

View file

@ -1245,6 +1245,7 @@ dist_patch_DATA = \
%D%/packages/patches/hdf-eos5-fix-szip.patch \
%D%/packages/patches/hdf-eos5-fortrantests.patch \
%D%/packages/patches/hedgewars-network-bsd.patch \
%D%/packages/patches/helm-fix-gcc-9-build.patch \
%D%/packages/patches/http-parser-CVE-2020-8287.patch \
%D%/packages/patches/hubbub-sort-entities.patch \
%D%/packages/patches/hurd-cross.patch \

View file

@ -6396,7 +6396,9 @@ (define-public helm
(file-name (git-file-name name version))
(sha256
(base32
"17ys2vvhncx9i3ydg3xwgz1d3gqv4yr5mqi7vr0i0ca6nad6x3d4"))))
"17ys2vvhncx9i3ydg3xwgz1d3gqv4yr5mqi7vr0i0ca6nad6x3d4"))
;; Apply GCC 9 fixes from https://github.com/mtytel/helm/pull/233
(patches (search-patches "helm-fix-gcc-9-build.patch"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; no "check" target

View file

@ -0,0 +1,140 @@
From cb611a80bd5a36d31bfc31212ebbf79aa86c6f08 Mon Sep 17 00:00:00 2001
From: jikstra <jikstra@disroot.org>
Date: Tue, 20 Aug 2019 03:00:51 +0200
Subject: [PATCH] Backport
https://github.com/WeAreROLI/JUCE/commit/4e0adb2af8b424c43d22bd431011c9a6c57d36b6
to the bundled JUCE framework to make helm compile on gcc 9.1 again
---
.../juce_graphics/colour/juce_PixelFormats.h | 25 +---------
.../native/juce_RenderingHelpers.h | 48 +------------------
2 files changed, 4 insertions(+), 69 deletions(-)
diff --git a/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h b/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
index 9be9ba09c..3535eab80 100644
--- a/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
+++ b/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
@@ -105,23 +105,9 @@ class JUCE_API PixelARGB
//==============================================================================
forcedinline uint8 getAlpha() const noexcept { return components.a; }
- forcedinline uint8 getRed() const noexcept { return components.r; }
+ forcedinline uint8 getRed() const noexcept { return components.r; }
forcedinline uint8 getGreen() const noexcept { return components.g; }
- forcedinline uint8 getBlue() const noexcept { return components.b; }
-
- #if JUCE_GCC
- // NB these are here as a workaround because GCC refuses to bind to packed values.
- forcedinline uint8& getAlpha() noexcept { return comps [indexA]; }
- forcedinline uint8& getRed() noexcept { return comps [indexR]; }
- forcedinline uint8& getGreen() noexcept { return comps [indexG]; }
- forcedinline uint8& getBlue() noexcept { return comps [indexB]; }
- #else
- forcedinline uint8& getAlpha() noexcept { return components.a; }
- forcedinline uint8& getRed() noexcept { return components.r; }
- forcedinline uint8& getGreen() noexcept { return components.g; }
- forcedinline uint8& getBlue() noexcept { return components.b; }
- #endif
-
+ forcedinline uint8 getBlue() const noexcept { return components.b; }
//==============================================================================
/** Copies another pixel colour over this one.
@@ -340,9 +326,6 @@ class JUCE_API PixelARGB
{
uint32 internal;
Components components;
- #if JUCE_GCC
- uint8 comps[4]; // helper struct needed because gcc does not allow references to packed union members
- #endif
};
}
#ifndef DOXYGEN
@@ -429,10 +412,6 @@ class JUCE_API PixelRGB
forcedinline uint8 getGreen() const noexcept { return g; }
forcedinline uint8 getBlue() const noexcept { return b; }
- forcedinline uint8& getRed() noexcept { return r; }
- forcedinline uint8& getGreen() noexcept { return g; }
- forcedinline uint8& getBlue() noexcept { return b; }
-
//==============================================================================
/** Copies another pixel colour over this one.
diff --git a/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h b/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
index 1c4cd31ef..29519cb5a 100644
--- a/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
+++ b/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
@@ -581,18 +581,10 @@ namespace EdgeTableFillers
: destData (image), sourceColour (colour)
{
if (sizeof (PixelType) == 3 && destData.pixelStride == sizeof (PixelType))
- {
areRGBComponentsEqual = sourceColour.getRed() == sourceColour.getGreen()
&& sourceColour.getGreen() == sourceColour.getBlue();
- filler[0].set (sourceColour);
- filler[1].set (sourceColour);
- filler[2].set (sourceColour);
- filler[3].set (sourceColour);
- }
else
- {
areRGBComponentsEqual = false;
- }
}
forcedinline void setEdgeTableYPos (const int y) noexcept
@@ -643,7 +635,6 @@ namespace EdgeTableFillers
const Image::BitmapData& destData;
PixelType* linePixels;
PixelARGB sourceColour;
- PixelRGB filler [4];
bool areRGBComponentsEqual;
forcedinline PixelType* getPixel (const int x) const noexcept
@@ -658,43 +649,8 @@ namespace EdgeTableFillers
forcedinline void replaceLine (PixelRGB* dest, const PixelARGB colour, int width) const noexcept
{
- if (destData.pixelStride == sizeof (*dest))
- {
- if (areRGBComponentsEqual) // if all the component values are the same, we can cheat..
- {
- memset (dest, colour.getRed(), (size_t) width * 3);
- }
- else
- {
- if (width >> 5)
- {
- const int* const intFiller = reinterpret_cast<const int*> (filler);
-
- while (width > 8 && (((pointer_sized_int) dest) & 7) != 0)
- {
- dest->set (colour);
- ++dest;
- --width;
- }
-
- while (width > 4)
- {
- int* d = reinterpret_cast<int*> (dest);
- *d++ = intFiller[0];
- *d++ = intFiller[1];
- *d++ = intFiller[2];
- dest = reinterpret_cast<PixelRGB*> (d);
- width -= 4;
- }
- }
-
- while (--width >= 0)
- {
- dest->set (colour);
- ++dest;
- }
- }
- }
+ if ((size_t) destData.pixelStride == sizeof (*dest) && areRGBComponentsEqual)
+ memset ((void*) dest, colour.getRed(), (size_t) width * 3); // if all the component values are the same, we can cheat..
else
{
JUCE_PERFORM_PIXEL_OP_LOOP (set (colour))