Hello ports list,

BE_ARCHS can't build graphics/freeimage, because its big-endian code
gives errors like,

Source/FreeImage/PluginBMP.cpp:1422:14: error: use of undeclared identifier 'bpp
'
                } else if (bpp == 16) {
                           ^

This diff, from an upstream commit, fixes the build for me on
big-endian powerpc and powerpc64.  It unblocks some other packages,
at least graphics/imv (an image viewer).  I tried to run imv on
powerpc, but it got stuck on the cpu and failed to show any image.
I can view images with imv on little-endian amd64, after I built
freeimage with this diff.

ok to commit this diff?

Index: Makefile
===================================================================
RCS file: /cvs/ports/graphics/freeimage/Makefile,v
retrieving revision 1.20
diff -u -p -r1.20 Makefile
--- Makefile    4 Aug 2022 19:03:14 -0000       1.20
+++ Makefile    7 Aug 2022 21:27:51 -0000
@@ -3,7 +3,7 @@ COMMENT=                c++ library for common image f
 DISTNAME=              FreeImage3180
 PKGNAME=               freeimage-3.18.0
 CATEGORIES=            graphics
-REVISION=              0
+REVISION=              1
 
 SHARED_LIBS+=          freeimage       3.0
 
Index: patches/patch-Source_FreeImage_PluginBMP_cpp
===================================================================
RCS file: patches/patch-Source_FreeImage_PluginBMP_cpp
diff -N patches/patch-Source_FreeImage_PluginBMP_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-Source_FreeImage_PluginBMP_cpp        7 Aug 2022 21:27:51 
-0000
@@ -0,0 +1,43 @@
+fixed PluginBMP, PluginDDS for compilation under Big Endian OS (see
+FREEIMAGE_BIGENDIAN)
+https://sourceforge.net/p/freeimage/svn/1809/
+
+Index: Source/FreeImage/PluginBMP.cpp
+--- Source/FreeImage/PluginBMP.cpp.orig
++++ Source/FreeImage/PluginBMP.cpp
+@@ -518,7 +518,7 @@ LoadWindowsBMP(FreeImageIO *io, fi_handle handle, int 
+                               io->read_proc(FreeImage_GetPalette(dib), 
used_colors * sizeof(RGBQUAD), 1, handle);
+ #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB
+                               RGBQUAD *pal = FreeImage_GetPalette(dib);
+-                              for(int i = 0; i < used_colors; i++) {
++                              for(unsigned i = 0; i < used_colors; i++) {
+                                       INPLACESWAP(pal[i].rgbRed, 
pal[i].rgbBlue);
+                               }
+ #endif
+@@ -1419,7 +1419,7 @@ Save(FreeImageIO *io, FIBITMAP *dib, fi_handle handle,
+ 
+                       free(buffer);
+ #ifdef FREEIMAGE_BIGENDIAN
+-              } else if (bpp == 16) {
++              } else if (dst_bpp == 16) {
+                       int padding = dst_pitch - dst_width * sizeof(WORD);
+                       WORD pad = 0;
+                       WORD pixel;
+@@ -1440,7 +1440,7 @@ Save(FreeImageIO *io, FIBITMAP *dib, fi_handle handle,
+                       }
+ #endif
+ #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB
+-              } else if (bpp == 24) {
++              } else if (dst_bpp == 24) {
+                       int padding = dst_pitch - dst_width * sizeof(FILE_BGR);
+                       DWORD pad = 0;
+                       FILE_BGR bgr;
+@@ -1461,7 +1461,7 @@ Save(FreeImageIO *io, FIBITMAP *dib, fi_handle handle,
+                                       }
+                               }
+                       }
+-              } else if (bpp == 32) {
++              } else if (dst_bpp == 32) {
+                       FILE_BGRA bgra;
+                       for(unsigned y = 0; y < dst_height; y++) {
+                               BYTE *line = FreeImage_GetScanLine(dib, y);
Index: patches/patch-Source_FreeImage_PluginDDS_cpp
===================================================================
RCS file: patches/patch-Source_FreeImage_PluginDDS_cpp
diff -N patches/patch-Source_FreeImage_PluginDDS_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-Source_FreeImage_PluginDDS_cpp        7 Aug 2022 21:27:51 
-0000
@@ -0,0 +1,22 @@
+fixed PluginBMP, PluginDDS for compilation under Big Endian OS (see
+FREEIMAGE_BIGENDIAN)
+https://sourceforge.net/p/freeimage/svn/1809/
+
+Index: Source/FreeImage/PluginDDS.cpp
+--- Source/FreeImage/PluginDDS.cpp.orig
++++ Source/FreeImage/PluginDDS.cpp
+@@ -356,14 +356,6 @@ SwapHeader(DDSHEADER *header) {
+       for(int i=0; i<11; i++) {
+               SwapLong(&header->surfaceDesc.dwReserved1[i]);
+       }
+-      SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwSize);
+-      SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwFlags);
+-      SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwFourCC);
+-      SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRGBBitCount);
+-      SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRBitMask);
+-      SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwGBitMask);
+-      SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwBBitMask);
+-      SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRGBAlphaBitMask);
+       SwapLong(&header->surfaceDesc.ddsCaps.dwCaps1);
+       SwapLong(&header->surfaceDesc.ddsCaps.dwCaps2);
+       SwapLong(&header->surfaceDesc.ddsCaps.dwReserved[0]);

Reply via email to