summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorPierre Langlois <pierre.langlois@gmx.com>2021-12-06 20:41:18 +0000
committerPierre Langlois <pierre.langlois@gmx.com>2021-12-06 20:41:18 +0000
commit4afacd45460241f58508d037d6ed2b3c5ee0973b (patch)
tree6199c57b61644fd213fe6987b47137492679ec4b /gnu
parent8662057130f061170ebb21c8f51c1e7ed72965ff (diff)
downloadguix-4afacd45460241f58508d037d6ed2b3c5ee0973b.tar.gz
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.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/music.scm4
-rw-r--r--gnu/packages/patches/helm-fix-gcc-9-build.patch140
3 files changed, 144 insertions, 1 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 50ca9b6178..5c19919f2e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -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				\
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 @@ MIDI drums and comes as two separate drumkits: Black Pearl and Red Zeppelin.")
         (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 <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))