-
Bug
-
Resolution: Unresolved
-
P3
-
17, 21
-
x86_64
-
os_x
ADDITIONAL SYSTEM INFORMATION :
macOS 10.14.6 18G9323 x86_64
Xcode 11.3.1 11C505
openjdk17, openjdk21
A DESCRIPTION OF THE PROBLEM :
JDK-8266242 fix for openjdk22 support for macOS 11.00 and later introducing build failure regression on earlier openjdk versions that still support building on macOS 10.12 - 10.15.
New if {} clause added to src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m includes identifier not defined in the macOS SDKs prior to version 11.00.
...
static BOOL isValidDisplayMode(CGDisplayModeRef mode) {
// Workaround for apple bug FB13261205, since it only affects arm based macs
// and arm support started with macOS 11 ignore the workaround for previous versions
if (@available(macOS 11, *)) {
if (architecture == -1) {
architecture = [[NSRunningApplication currentApplication] executableArchitecture];
}
if (architecture == NSBundleExecutableArchitectureARM64) {
return (CGDisplayModeGetPixelWidth(mode) >= 800);
}
}
return (1 < CGDisplayModeGetWidth(mode) && 1 < CGDisplayModeGetHeight(mode));
}
...
The @availability directive included does not prevent the compiler from checking the enclosed code symbols are defined. Some mechanism/directive is needed to prevent this code section from causing a fatal build error.
REGRESSION : Last worked in version 11.0.24
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
bash configure
make images
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Successful build
ACTUAL -
...
src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m:69:29: error: use of undeclared identifier 'NSBundleExecutableArchitectureARM64'; did you mean 'NSBundleExecutableArchitecturePPC64'?
if (architecture == NSBundleExecutableArchitectureARM64) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NSBundleExecutableArchitecturePPC64
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h:123:5: note: 'NSBundleExecutableArchitecturePPC64' declared here
NSBundleExecutableArchitecturePPC64 = 0x01000012
^
1 error generated.
CUSTOMER SUBMITTED WORKAROUND :
Can build successfully when #if guard is added to enclose the new code block, viz. (e.g. for openjdk17, almost identical patch applies to openjdk21):
--- src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m.orig 2024-10-08 18:09:38
+++ src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m 2024-10-08 18:09:16
@@ -60,6 +60,9 @@
}
static BOOL isValidDisplayMode(CGDisplayModeRef mode) {
+ // https://trac.macports.org/ticket/71049: temporary additional guard for undef'd NSBun..ARM64
+ // Should be reported/fixed upstream at openjdk.org.
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 110000
// Workaround for apple bug FB13261205, since it only affects arm based macs
// and arm support started with macOS 11 ignore the workaround for previous versions
if (@available(macOS 11, *)) {
@@ -70,6 +73,7 @@
return (CGDisplayModeGetPixelWidth(mode) >= 800);
}
}
+#endif
return (1 < CGDisplayModeGetWidth(mode) && 1 < CGDisplayModeGetHeight(mode));
}
FREQUENCY : often
macOS 10.14.6 18G9323 x86_64
Xcode 11.3.1 11C505
openjdk17, openjdk21
A DESCRIPTION OF THE PROBLEM :
New if {} clause added to src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m includes identifier not defined in the macOS SDKs prior to version 11.00.
...
static BOOL isValidDisplayMode(CGDisplayModeRef mode) {
// Workaround for apple bug FB13261205, since it only affects arm based macs
// and arm support started with macOS 11 ignore the workaround for previous versions
if (@available(macOS 11, *)) {
if (architecture == -1) {
architecture = [[NSRunningApplication currentApplication] executableArchitecture];
}
if (architecture == NSBundleExecutableArchitectureARM64) {
return (CGDisplayModeGetPixelWidth(mode) >= 800);
}
}
return (1 < CGDisplayModeGetWidth(mode) && 1 < CGDisplayModeGetHeight(mode));
}
...
The @availability directive included does not prevent the compiler from checking the enclosed code symbols are defined. Some mechanism/directive is needed to prevent this code section from causing a fatal build error.
REGRESSION : Last worked in version 11.0.24
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
bash configure
make images
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Successful build
ACTUAL -
...
src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m:69:29: error: use of undeclared identifier 'NSBundleExecutableArchitectureARM64'; did you mean 'NSBundleExecutableArchitecturePPC64'?
if (architecture == NSBundleExecutableArchitectureARM64) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NSBundleExecutableArchitecturePPC64
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h:123:5: note: 'NSBundleExecutableArchitecturePPC64' declared here
NSBundleExecutableArchitecturePPC64 = 0x01000012
^
1 error generated.
CUSTOMER SUBMITTED WORKAROUND :
Can build successfully when #if guard is added to enclose the new code block, viz. (e.g. for openjdk17, almost identical patch applies to openjdk21):
--- src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m.orig 2024-10-08 18:09:38
+++ src/java.desktop/macosx/native/libawt_lwawt/awt/CGraphicsDevice.m 2024-10-08 18:09:16
@@ -60,6 +60,9 @@
}
static BOOL isValidDisplayMode(CGDisplayModeRef mode) {
+ // https://trac.macports.org/ticket/71049: temporary additional guard for undef'd NSBun..ARM64
+ // Should be reported/fixed upstream at openjdk.org.
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 110000
// Workaround for apple bug FB13261205, since it only affects arm based macs
// and arm support started with macOS 11 ignore the workaround for previous versions
if (@available(macOS 11, *)) {
@@ -70,6 +73,7 @@
return (CGDisplayModeGetPixelWidth(mode) >= 800);
}
}
+#endif
return (1 < CGDisplayModeGetWidth(mode) && 1 < CGDisplayModeGetHeight(mode));
}
FREQUENCY : often