< prev index next >
src/java.desktop/unix/native/libawt_xawt/java2d/x11/XRBackendNative.c
Print this page
rev 14298 : 8155236: AIX: fix dectection of Xrender extension
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -70,12 +70,12 @@
} XRadialGradient;
#endif
#include <dlfcn.h>
-#if defined(__solaris__) || defined(_AIX)
-/* Solaris 10 and AIX will not have these symbols at runtime */
+#if defined(__solaris__)
+/* Solaris 10 will not have these symbols at compile time */
typedef Picture (*XRenderCreateLinearGradientFuncType)
(Display *dpy,
const XLinearGradient *gradient,
const XFixed *stops,
@@ -145,11 +145,26 @@
if (!XQueryExtension(awt_display, "RENDER",
&major_opcode, &first_event, &first_error)) {
return JNI_FALSE;
}
-#if defined(__solaris__) || defined(_AIX)
+#if defined(_AIX)
+ // On AIX we have to use a special syntax because the shared libraries are packed in
+ // multi-architecture archives. We first try to load the system default libXrender
+ // which is contained in the 'X11.base.lib' fileset starting with AIX 6.1
+ xrenderlib = dlopen("libXrender.a(shr_64.o)", RTLD_GLOBAL | RTLD_LAZY | RTLD_MEMBER);
+ if (xrenderlib == NULL) {
+ // If the latter wasn't successful, we also try to load the version under /opt/freeware
+ // This may be downloaded from the "AIX Toolbox for Linux Applications" even for AIX 5.3
+ xrenderlib = dlopen("libXrender.a(libXrender.so.0)", RTLD_GLOBAL | RTLD_LAZY | RTLD_MEMBER);
+ }
+ if (xrenderlib != NULL) {
+ dlclose(xrenderlib);
+ } else {
+ available = JNI_FALSE;
+ }
+#elif defined(__solaris__)
xrenderlib = dlopen("libXrender.so",RTLD_GLOBAL|RTLD_LAZY);
if (xrenderlib != NULL) {
XRenderCreateLinearGradientFunc =
(XRenderCreateLinearGradientFuncType)
< prev index next >