From 5b9a0bfd89c6b7c054884d963e4164d11fd01ac6 Mon Sep 17 00:00:00 2001 From: q66 Date: Mon, 23 Dec 2019 18:32:50 +0100 Subject: [PATCH] libopenshot-audio: use a minimal patch for gcc9 builds This reverts commit fbb65f4884c886ff2b3b573399381ec68608cb90. This should also fix the atomic failures. --- .../patches/fix-std_isfinite.patch | 23 +++ srcpkgs/libopenshot-audio/patches/gcc9.patch | 136 ++++++++++++++++++ srcpkgs/libopenshot-audio/template | 12 +- 3 files changed, 162 insertions(+), 9 deletions(-) create mode 100644 srcpkgs/libopenshot-audio/patches/fix-std_isfinite.patch create mode 100644 srcpkgs/libopenshot-audio/patches/gcc9.patch diff --git a/srcpkgs/libopenshot-audio/patches/fix-std_isfinite.patch b/srcpkgs/libopenshot-audio/patches/fix-std_isfinite.patch new file mode 100644 index 0000000000..231f183d5a --- /dev/null +++ b/srcpkgs/libopenshot-audio/patches/fix-std_isfinite.patch @@ -0,0 +1,23 @@ +Fix for gcc6 which does not have std::isfinite() but suggests +to use std::finite() instead. + +--- JuceLibraryCode/modules/juce_core/maths/juce_MathsFunctions.h 2016-08-30 06:24:27.000000000 +0200 ++++ JuceLibraryCode/modules/juce_core/maths/juce_MathsFunctions.h 2016-12-12 14:33:29.170005576 +0100 +@@ -381,7 +381,7 @@ + #if JUCE_WINDOWS && !JUCE_MINGW + return _finite (value) != 0; + #else +- return std::isfinite (value); ++ return finite (value); + #endif + } + +@@ -391,7 +391,7 @@ + #if JUCE_WINDOWS && !JUCE_MINGW + return _finite (value) != 0; + #else +- return std::isfinite (value); ++ return finite (value); + #endif + } + diff --git a/srcpkgs/libopenshot-audio/patches/gcc9.patch b/srcpkgs/libopenshot-audio/patches/gcc9.patch new file mode 100644 index 0000000000..d2acbd292c --- /dev/null +++ b/srcpkgs/libopenshot-audio/patches/gcc9.patch @@ -0,0 +1,136 @@ +commit fa0e4ef1c4969ac1f6c54d306e66b27a31da5b87 +Author: q66 +Date: Mon Dec 23 18:23:28 2019 +0100 + + fix build with gcc9 + + Adapted from upstream. + +diff --git JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h +index 0df5987..ea2e990 100644 +--- JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h ++++ JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h +@@ -108,19 +108,6 @@ public: + forcedinline uint8 getGreen() const noexcept { return components.g; } + forcedinline uint8 getBlue() const noexcept { return components.b; } + +- #if JUCE_GCC && ! JUCE_CLANG +- // 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. + +@@ -339,9 +326,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 +@@ -428,10 +412,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. + +@@ -645,7 +625,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 JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h +index cd8cd36..87bf33e 100644 +--- JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h ++++ JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h +@@ -583,10 +583,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 + { +@@ -642,7 +638,6 @@ namespace EdgeTableFillers + const Image::BitmapData& destData; + PixelType* linePixels; + PixelARGB sourceColour; +- PixelRGB filler [4]; + bool areRGBComponentsEqual; + + forcedinline PixelType* getPixel (const int x) const noexcept +@@ -657,47 +652,10 @@ 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; +- } +- } +- } +- 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/libopenshot-audio/template b/srcpkgs/libopenshot-audio/template index 32724ecd9f..7975050fc4 100644 --- a/srcpkgs/libopenshot-audio/template +++ b/srcpkgs/libopenshot-audio/template @@ -1,7 +1,7 @@ # Template file for 'libopenshot-audio' pkgname=libopenshot-audio version=0.1.8 -revision=2 +revision=3 build_style=cmake hostmakedepends="doxygen" makedepends="alsa-lib-devel libXcursor-devel libXinerama-devel libXrandr-devel @@ -10,17 +10,11 @@ short_desc="OpenShot audio library" maintainer="Spencer Hill " license="GPL-3.0-or-later" homepage="https://github.com/OpenShot/libopenshot-audio" -distfiles="https://github.com/OpenShot/libopenshot-audio/archive/v${version}.tar.gz - https://patch-diff.githubusercontent.com/raw/OpenShot/libopenshot-audio/pull/39.patch" -checksum="384d0ef39c78f16d77048de3c96152321724084f978dc622675dd6bb16e15e19 - ae784a96730f7cf09ba7bf29d06704ba6a0eca662d242d786b0a86a4343e9dc9" +distfiles="https://github.com/OpenShot/libopenshot-audio/archive/v${version}.tar.gz" +checksum=384d0ef39c78f16d77048de3c96152321724084f978dc622675dd6bb16e15e19 CXXFLAGS="-I${XBPS_CROSS_BASE}/usr/include/freetype2" -post_extract() { - patch -p1 <../39.patch -} - libopenshot-audio-devel_package() { short_desc+=" - development files" depends+=" ${sourcepkg}>=${version}_${revision}"