Summary: | endianness tests in lcms2.h cannot work without include endian.h | ||
---|---|---|---|
Product: | Ghostscript | Reporter: | jsmeix |
Component: | Color Management | Assignee: | Chris Liddell (chrisl) <chris.liddell> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | chris.liddell, robin.watts |
Priority: | P4 | ||
Version: | 9.15 | ||
Hardware: | PC | ||
OS: | Linux | ||
Customer: | Word Size: | --- | |
Attachments: |
ppc64le-support.patch
My current ppc64le-support.patch for ghostscript-9.16rc2 |
(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. |
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.