This looks even better.

/Erik


On 2018-07-06 10:06, Phil Race 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.




Reply via email to