Created attachment 11194 [details] ppc64le-support.patch I use self-compiled Ghostscript 9.15 on SUSE Linux. A colleague informed me that the endianness tests in lcms2.h cannot work without "include <endian.h>" (at least on Linux). The endianness tests in lcms2.h are in particular needed to make it work on PowerPC little endian machines. The following fixes it: ------------------------------------------------------------------------- --- ghostscript-9.15/lcms2/include/lcms2.h +++ ghostscript-9.15/lcms2/include/lcms2.h @@ -67,6 +67,7 @@ #include <limits.h> #include <time.h> #include <stddef.h> +#include <endian.h> #ifndef CMS_USE_CPP_API # ifdef __cplusplus ------------------------------------------------------------------------- By the way: LittleCMS 1.x in Ghostscript is not fixed for PowerPC little endian. Regardless that by default LittleCMS 2.x is now used, I think it should also work on PowerPC little endian machines in case of "configure --with-lcms". I attach our current ppc64le-support.patch for Ghostscript 9.15.
(In reply to jsmeix from comment #0) > By the way: > > LittleCMS 1.x in Ghostscript is not fixed for PowerPC little endian. > Regardless that by default LittleCMS 2.x is now used, I think it > should also work on PowerPC little endian machines in case of > "configure --with-lcms". We'll be removing LCMS 1.x before the next release.......
It seems in http://downloads.ghostscript.com/public/.release_candidate/ghostscript-9.16rc2.tar.gz the file lcms2/include/lcms2.h does still not contain #include <endian.h> Could you apply my "The following fixes it" from comment#0 to Ghostscript 9.16 so that no further patch is needed for ppc64le-support or could you explain why it cannot be applied.
Created attachment 11544 [details] My current ppc64le-support.patch for ghostscript-9.16rc2
I am not seeing anything in the tests of lcms2.h which would require that header file. I am passing to Chris to check with a PowerPC machine.
I bet endian.h sets __BYTE_ORDER and __LITTLE_ENDIAN. Possibly we want something like: #ifdef (__GNUC__) #include <endian.h> #endif to be added *within* the existing: #if defined(__powerpc__) || defined(__ppc__) || defined(TARGET_CPU_PPC) section?
Seems to me that there are two issues here. The first (and more significant for us) is that LCMS2's endiannes is *supposed* to be settable on the compiler command line, but lcms2.h will override that setting, and favor its own test results - I feel that is wrong. Second is the endian.h inclusion. I think the correct solution for that is to have configure check for the header, and have endian.h included if configure finds it is available.
Addressed with: http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=17ee8f21 and http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=30d3d658