diff --git a/pkgs/applications/audio/ensemble-chorus/default.nix b/pkgs/applications/audio/ensemble-chorus/default.nix index 7fcf412dd593..a83719a5e416 100644 --- a/pkgs/applications/audio/ensemble-chorus/default.nix +++ b/pkgs/applications/audio/ensemble-chorus/default.nix @@ -12,6 +12,11 @@ stdenv.mkDerivation rec { fetchSubmodules = true; }; + patches = [ + # fix compile error regarding packed attribute in 3rd party juice library + ./juice-cxx-packing-fix.diff + ]; + nativeBuildInputs = [ cmake pkg-config ]; buildInputs = [ diff --git a/pkgs/applications/audio/ensemble-chorus/juice-cxx-packing-fix.diff b/pkgs/applications/audio/ensemble-chorus/juice-cxx-packing-fix.diff new file mode 100644 index 000000000000..041f252a81e0 --- /dev/null +++ b/pkgs/applications/audio/ensemble-chorus/juice-cxx-packing-fix.diff @@ -0,0 +1,55 @@ +diff --git a/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h b/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h +index 69a66e4..3e50635 100644 +--- a/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h ++++ b/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h +@@ -111,18 +111,10 @@ 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. +@@ -336,21 +328,22 @@ private: + uint8 b, g, r, a; + #endif + #endif +- } JUCE_PACKED; ++ }; ++ ++ // structure must be packed but using the packed attribute causes compile ++ // failures with newer c++ compilers. Verify default packing produces same layout ++ static_assert(sizeof(Components) == 4, "Components struct is not packed"); + + union + { + 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 +- JUCE_PACKED +-#endif +-; ++}; ++ ++// class must be packed but using the packed attribute causes compile ++// failures with newer c++ compilers. Verify default packing produces same layout ++static_assert(sizeof(PixelARGB) == 4, "PixelARGB class is not packed"); + + + //============================================================================== diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 981162944ef7..1cc09265ab5a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -7823,7 +7823,7 @@ with pkgs; enscript = callPackage ../tools/text/enscript { }; - ensemble-chorus = callPackage ../applications/audio/ensemble-chorus { stdenv = gcc8Stdenv; }; + ensemble-chorus = callPackage ../applications/audio/ensemble-chorus { }; entr = callPackage ../tools/misc/entr { };