<pre style='margin:0'>
Marcus Calhoun-Lopez (MarcusCalhoun-Lopez) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/f8a5bcf08c022b4d630e96630bfc29ce4662c545">https://github.com/macports/macports-ports/commit/f8a5bcf08c022b4d630e96630bfc29ce4662c545</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new f8a5bcf08c0 openexr: ensure struct is packed on PPC systems
</span>f8a5bcf08c0 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit f8a5bcf08c022b4d630e96630bfc29ce4662c545
</span>Author: Marcus Calhoun-Lopez <mcalhoun@macports.org>
AuthorDate: Mon May 29 09:00:16 2023 -0700

<span style='display:block; white-space:pre;color:#404040;'>    openexr: ensure struct is packed on PPC systems
</span>---
 graphics/openexr/Portfile                     |  9 +++-
 graphics/openexr/files/patch-ensure_pack.diff | 61 +++++++++++++++++++++++++++
 2 files changed, 69 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/graphics/openexr/Portfile b/graphics/openexr/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 7a749d77188..38dbf29431b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/graphics/openexr/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/graphics/openexr/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -6,7 +6,7 @@ PortGroup                       github 1.0
</span> PortGroup                       legacysupport 1.1
 
 github.setup                    AcademySoftwareFoundation openexr 3.1.7 v
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision                        3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision                        4
</span> 
 categories                      graphics
 license                         BSD
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -34,6 +34,13 @@ legacysupport.newest_darwin_requires_legacy 10
</span> patchfiles-append               patch-fix-endian.diff \
                                 patch-darwin-no-libdispatch.diff
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+if { (!(${universal_possible} && [variant_isset universal]) && ${configure.build_arch} eq "ppc")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ((${universal_possible} && [variant_isset universal]) && "ppc" in ${configure.universal_archs}) } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # see description in patch file; bug in GCC 7?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append           patch-ensure_pack.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> depends_build-append            port:pkgconfig
 depends_lib-append              port:imath \
                                 port:zlib
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/graphics/openexr/files/patch-ensure_pack.diff b/graphics/openexr/files/patch-ensure_pack.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..9a8e31e04a6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/graphics/openexr/files/patch-ensure_pack.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,61 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <iostream>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdint.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#pragma pack(push, 1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* struct from OpenEXR; should be packed with the pragma directive  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    uint32_t x_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    uint32_t y_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    uint8_t  level_and_round;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} exr_attr_tiledesc_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* same struct but reordered */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    uint8_t  level_and_round;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    uint32_t x_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    uint32_t y_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} new1_exr_attr_tiledesc_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* same as first struct but with packed forced */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    uint32_t x_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    uint32_t y_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    uint8_t  level_and_round;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} __attribute__((packed, aligned(1))) new2_exr_attr_tiledesc_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#pragma pack(pop)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int main() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    std::cout << sizeof(exr_attr_tiledesc_t) << " "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              << sizeof(new1_exr_attr_tiledesc_t) << " "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              << sizeof(new2_exr_attr_tiledesc_t) << "\n";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+On Mac OS X Leopart (10.5),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    `g++-mp-7 main.cxx && ./a.out` gives: 12 9 9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    `g++ main.cxx && ./a.out`      gives: 9  9 9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    `g++-mp-7 main.cxx && ./a.out` gives: 9  9 9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    `g++* -arch ppc64 && ./a.out`  gives: 9 9 9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+OpenEXR requires this struct to be packed, so 9 is the correct result.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+It not clear what effects there would be in reordering, so force packed with __attribute__.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/lib/OpenEXRCore/openexr_attr.h.orig        2023-03-28 08:25:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/lib/OpenEXRCore/openexr_attr.h     2023-05-13 06:48:03.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -274,7 +274,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     uint32_t x_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     uint32_t y_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     uint8_t  level_and_round;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} exr_attr_tiledesc_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} __attribute__((packed, aligned(1))) exr_attr_tiledesc_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /** @brief Macro to access type of tiling from packed structure. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define EXR_GET_TILE_LEVEL_MODE(tiledesc)                                      \
</span></pre><pre style='margin:0'>

</pre>