From cfbb5b926d0a5d6278554174aca3237d642bee97 Mon Sep 17 00:00:00 2001 From: Pierre Langlois Date: Sat, 20 Nov 2021 14:51:13 +0000 Subject: [PATCH] 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. --- gnu/local.mk | 1 + gnu/packages/music.scm | 4 +- .../patches/helm-fix-gcc-9-build.patch | 140 ++++++++++++++++++ 3 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/helm-fix-gcc-9-build.patch diff --git a/gnu/local.mk b/gnu/local.mk index a2a8c4a9e5..21b8c70e4d 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1243,6 +1243,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 \ diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index 28dbf1b624..6d04aae59c 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -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 diff --git a/gnu/packages/patches/helm-fix-gcc-9-build.patch b/gnu/packages/patches/helm-fix-gcc-9-build.patch new file mode 100644 index 0000000000..f623fef203 --- /dev/null +++ b/gnu/packages/patches/helm-fix-gcc-9-build.patch @@ -0,0 +1,140 @@ +From cb611a80bd5a36d31bfc31212ebbf79aa86c6f08 Mon Sep 17 00:00:00 2001 +From: jikstra +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 (filler); +- +- while (width > 8 && (((pointer_sized_int) dest) & 7) != 0) +- { +- dest->set (colour); +- ++dest; +- --width; +- } +- +- while (width > 4) +- { +- int* d = reinterpret_cast (dest); +- *d++ = intFiller[0]; +- *d++ = intFiller[1]; +- *d++ = intFiller[2]; +- dest = reinterpret_cast (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)) -- 2.34.0