diff --git a/srcpkgs/cabbage/patches/gcc9.patch b/srcpkgs/cabbage/patches/gcc9.patch new file mode 100644 index 00000000000..0ee949257c4 --- /dev/null +++ b/srcpkgs/cabbage/patches/gcc9.patch @@ -0,0 +1,134 @@ +commit 1d53d416b47aee20b0d093e319b7bc9131b85adc +Author: q66 +Date: Sat Jan 4 23:52:36 2020 +0100 + + fix build with gcc9, adapted from upstream + +diff --git JUCE-5.3.2/modules/juce_graphics/colour/juce_PixelFormats.h JUCE-5.3.2/modules/juce_graphics/colour/juce_PixelFormats.h +index 4b1ba87..f77b885 100644 +--- JUCE-5.3.2/modules/juce_graphics/colour/juce_PixelFormats.h ++++ JUCE-5.3.2/modules/juce_graphics/colour/juce_PixelFormats.h +@@ -111,19 +111,6 @@ public: + 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 +- + //============================================================================== + /** Copies another pixel colour over this one. + +@@ -342,9 +329,6 @@ private: + { + 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 +@@ -433,10 +417,6 @@ public: + 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. + +@@ -652,7 +632,6 @@ public: + + //============================================================================== + forcedinline uint8 getAlpha() const noexcept { return a; } +- forcedinline uint8& getAlpha() noexcept { return a; } + + forcedinline uint8 getRed() const noexcept { return 0; } + forcedinline uint8 getGreen() const noexcept { return 0; } +diff --git JUCE-5.3.2/modules/juce_graphics/native/juce_RenderingHelpers.h JUCE-5.3.2/modules/juce_graphics/native/juce_RenderingHelpers.h +index 9ac3ae2..9f41084 100644 +--- JUCE-5.3.2/modules/juce_graphics/native/juce_RenderingHelpers.h ++++ JUCE-5.3.2/modules/juce_graphics/native/juce_RenderingHelpers.h +@@ -585,10 +585,6 @@ namespace EdgeTableFillers + { + 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 + { +@@ -675,7 +671,6 @@ namespace EdgeTableFillers + const Image::BitmapData& destData; + PixelType* linePixels; + PixelARGB sourceColour; +- PixelRGB filler[4]; + bool areRGBComponentsEqual; + + forcedinline PixelType* getPixel (int x) const noexcept +@@ -690,47 +685,10 @@ namespace EdgeTableFillers + + forcedinline void replaceLine (PixelRGB* dest, 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) +- { +- auto intFiller = reinterpret_cast (filler); +- +- while (width > 8 && (((pointer_sized_int) dest) & 7) != 0) +- { +- dest->set (colour); +- ++dest; +- --width; +- } +- +- while (width > 4) +- { +- auto 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; +- } +- } +- } +- else +- { +- JUCE_PERFORM_PIXEL_OP_LOOP (set (colour)) +- } ++ 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)); + } + + forcedinline void replaceLine (PixelAlpha* dest, const PixelARGB colour, int width) const noexcept diff --git a/srcpkgs/cabbage/template b/srcpkgs/cabbage/template index 42892e333eb..feb3808203b 100644 --- a/srcpkgs/cabbage/template +++ b/srcpkgs/cabbage/template @@ -20,6 +20,7 @@ distfiles="https://github.com/WeAreROLI/JUCE/archive/${_jucever}.tar.gz checksum="b7c604bb6a7f9752934f89d72133713f7a65e82478bba80ccb4709d0edb58033 80f36d010a1f9bb14469fba70e12a5df7e24e92bec511c7157d5a1e90c0314d3 5e8f1058177472f6dd3b5c1e7f8e0e76f37c5f751fed65936e04ff2441ce831a" +broken="undefined reference to ComponentLayoutEditor::..." # without TARGET_ARCH, the build system will assume -march=native, # which is wrong as we're building a generic package and -march does