Looks good! Thanks, Volker
On Fri, Jul 6, 2018 at 7:06 PM, Phil Race <philip.r...@oracle.com> wrote: > Updated suggested fix : > > --- a/src/java.desktop/unix/native/common/awt/CUPSfuncs.c > +++ b/src/java.desktop/unix/native/common/awt/CUPSfuncs.c > @@ -29,6 +29,16 @@ > #include <dlfcn.h> > #include <cups/cups.h> > #include <cups/ppd.h> > +/* > + * CUPS #define's __attribute__(x) to be empty unless __GNUC__ is defined. > + * However OpenJDK officially uses the SunStudio compiler on Solaris. > + * We need to #undef this else it breaks use of this keyword used by > JNIEXPORT. > + * See: https://github.com/apple/cups/issues/5349 > + */ > +#ifdef __SUNPRO_C > +#undef __attribute__ > +#endif > + > > > Since cups upstream has this issue even today, I suspect this workaround is > going to be > needed for a long time. > > -phil. > > > On 07/06/2018 09:29 AM, Phil Race wrote: >> >> I was trying to account for there being other OSes - or more accurately, >> compilers, >> that would be broken by this. For example Oracle Studio has a Linux >> version ! >> >> If we are to limit it, I suggest that we do >> >> #ifdef __SUNPRO_C >> ... >> >> https://docs.oracle.com/cd/E19205-01/820-4155/c++_faq.html#Vers6 >> >> -phil. >> >> On 07/06/2018 01:24 AM, Volker Simonis wrote: >>> >>> Hi Phil, >>> >>> I've actually thought about the same trick yesterday in the evening >>> and just wanted to try it out when I saw your mail. It indeed works >>> quite nicely and I can confirm that it solves the problem on our side >>> as well. I've also opened an issue in the CUPS bug tracker: >>> https://github.com/apple/cups/issues/5349 >>> >>> I'f you don't mind, I'd suggest to wrap this workaround into "#ifdef >>> __solaris__" to not affect any other platforms at all. I also suggest >>> to slightly change the comment to "unless __GNUC__ is defined" because >>> there are compilers like Clang which are not GNU C but define >>> "__GNUC__". Finally, I'd also put a link to the CUPS issue into the >>> comment: >>> >>> diff -r 93043d28f8fa src/java.desktop/unix/native/common/awt/CUPSfuncs.c >>> --- a/src/java.desktop/unix/native/common/awt/CUPSfuncs.c Tue >>> Jun 12 13:00:50 2018 +0530 >>> +++ b/src/java.desktop/unix/native/common/awt/CUPSfuncs.c Fri >>> Jul 06 10:17:39 2018 +0200 >>> @@ -30,6 +30,15 @@ >>> #include <cups/cups.h> >>> #include <cups/ppd.h> >>> >>> +#ifdef __solaris__ >>> + /* >>> + * CUPS #define's __attribute__(x) to be empty unless __GNUC__ is >>> defined. >>> + * We need to #undef this else it breaks use of this keyword used >>> by JNIEXPORT. >>> + * See: https://github.com/apple/cups/issues/5349 >>> + */ >>> + #undef __attribute__ >>> +#endif >>> + >>> //#define CUPS_DEBUG >>> >>> #ifdef CUPS_DEBUG >>> >>> Thank you and best regards, >>> Volker >>> >>> >>> On Thu, Jul 5, 2018 at 11:09 PM, Erik Joelsson <erik.joels...@oracle.com> >>> wrote: >>>> >>>> Looks good to me. >>>> >>>> I would have thought __attribute__ was a macro originally, but since >>>> it's >>>> not, this looks like a very simple solution. Would be nice if Volker >>>> could >>>> verify this as well. >>>> >>>> /Erik >>>> >>>> >>>> >>>> On 2018-07-05 14:06, Phil Race wrote: >>>>> >>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8206106 >>>>> >>>>> Current CUPS include files are defining __attribute__ to be empty >>>>> We need to undo that to build. Details in the bug report. >>>>> built + tested on Solaris, Linux, Mac. >>>>> >>>>> fix : >>>>> hg diff src/java.desktop/unix/native/common/awt/CUPSfuncs.c >>>>> diff --git a/src/java.desktop/unix/native/common/awt/CUPSfuncs.c >>>>> b/src/java.desktop/unix/native/common/awt/CUPSfuncs.c >>>>> --- a/src/java.desktop/unix/native/common/awt/CUPSfuncs.c >>>>> +++ b/src/java.desktop/unix/native/common/awt/CUPSfuncs.c >>>>> @@ -29,6 +29,12 @@ >>>>> #include <dlfcn.h> >>>>> #include <cups/cups.h> >>>>> #include <cups/ppd.h> >>>>> +/* >>>>> + * CUPS #define's __attribute__(x) to be empty unless the compiler is >>>>> GNU >>>>> C. >>>>> + * We need to #undef this else it breaks use of this keyword used by >>>>> JNIEXPORT. >>>>> + */ >>>>> +#undef __attribute__ >>>>> + >>>>> >>>>> -phil. >>>> >>>> >> >