@@ -1117,18 +1117,20 @@ def try_check_compiler(cc, lang):
1117
1117
1118
1118
with proc :
1119
1119
proc .stdin .write (b'__clang__ __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__ '
1120
- b'__clang_major__ __clang_minor__ __clang_patchlevel__' )
1120
+ b'__clang_major__ __clang_minor__ __clang_patchlevel__ '
1121
+ b'__APPLE__' )
1121
1122
1122
1123
if sys .platform == 'zos' :
1123
- values = (to_utf8 (proc .communicate ()[0 ]).split ('\n ' )[- 2 ].split () + ['0' ] * 7 )[0 :7 ]
1124
+ values = (to_utf8 (proc .communicate ()[0 ]).split ('\n ' )[- 2 ].split () + ['0' ] * 7 )[0 :8 ]
1124
1125
else :
1125
- values = (to_utf8 (proc .communicate ()[0 ]).split () + ['0' ] * 7 )[0 :7 ]
1126
+ values = (to_utf8 (proc .communicate ()[0 ]).split () + ['0' ] * 7 )[0 :8 ]
1126
1127
1127
1128
is_clang = values [0 ] == '1'
1128
1129
gcc_version = tuple (map (int , values [1 :1 + 3 ]))
1129
1130
clang_version = tuple (map (int , values [4 :4 + 3 ])) if is_clang else None
1131
+ is_apple = values [7 ] == '1'
1130
1132
1131
- return (True , is_clang , clang_version , gcc_version )
1133
+ return (True , is_clang , clang_version , gcc_version , is_apple )
1132
1134
1133
1135
1134
1136
#
@@ -1205,7 +1207,7 @@ def get_gas_version(cc):
1205
1207
warn (f'Could not recognize `gas`: { gas_ret } ' )
1206
1208
return '0.0'
1207
1209
1208
- def get_openssl_version ():
1210
+ def get_openssl_version (o ):
1209
1211
"""Parse OpenSSL version from opensslv.h header file.
1210
1212
1211
1213
Returns the version as a number matching OPENSSL_VERSION_NUMBER format:
@@ -1219,6 +1221,9 @@ def get_openssl_version():
1219
1221
args = ['-I' , 'deps/openssl/openssl/include' ] + args
1220
1222
elif options .shared_openssl_includes :
1221
1223
args = ['-I' , options .shared_openssl_includes ] + args
1224
+ else :
1225
+ for dir in o ['include_dirs' ]:
1226
+ args = ['-I' , dir ] + args
1222
1227
1223
1228
proc = subprocess .Popen (
1224
1229
shlex .split (CC ) + args ,
@@ -1289,18 +1294,18 @@ def check_compiler(o):
1289
1294
o ['variables' ]['openssl_no_asm' ] = 1
1290
1295
return
1291
1296
1292
- ok , is_clang , clang_version , gcc_version = try_check_compiler (CXX , 'c++' )
1297
+ ok , is_clang , clang_version , gcc_version , is_apple = try_check_compiler (CXX , 'c++' )
1293
1298
o ['variables' ]['clang' ] = B (is_clang )
1294
1299
version_str = "." .join (map (str , clang_version if is_clang else gcc_version ))
1295
- print_verbose (f"Detected { 'clang ' if is_clang else '' } C++ compiler (CXX={ CXX } ) version: { version_str } " )
1300
+ print_verbose (f"Detected { 'Apple ' if is_apple else '' } { ' clang ' if is_clang else '' } C++ compiler (CXX={ CXX } ) version: { version_str } " )
1296
1301
if not ok :
1297
1302
warn (f'failed to autodetect C++ compiler version (CXX={ CXX } )' )
1298
- elif clang_version < (19 , 1 , 0 ) if is_clang else gcc_version < (12 , 2 , 0 ):
1299
- warn (f'C++ compiler (CXX={ CXX } , { version_str } ) too old, need g++ 12.2.0 or clang++ 19.1.0' )
1303
+ elif ( is_apple and clang_version < (17 , 0 , 0 ) or not is_apple and clang_version < ( 19 , 1 , 0 ) ) if is_clang else gcc_version < (12 , 2 , 0 ):
1304
+ warn (f'C++ compiler (CXX={ CXX } , { version_str } ) too old, need g++ 12.2.0, clang++ 19.1.0, or Apple clang++ 17.0 .0' )
1300
1305
1301
- ok , is_clang , clang_version , gcc_version = try_check_compiler (CC , 'c' )
1306
+ ok , is_clang , clang_version , gcc_version , is_apple = try_check_compiler (CC , 'c' )
1302
1307
version_str = "." .join (map (str , clang_version if is_clang else gcc_version ))
1303
- print_verbose (f"Detected { 'clang ' if is_clang else '' } C compiler (CC={ CC } ) version: { version_str } " )
1308
+ print_verbose (f"Detected { 'Apple ' if is_apple else '' } { ' clang ' if is_clang else '' } C compiler (CC={ CC } ) version: { version_str } " )
1304
1309
if not ok :
1305
1310
warn (f'failed to autodetect C compiler version (CC={ CC } )' )
1306
1311
elif not is_clang and gcc_version < (4 , 2 , 0 ):
@@ -1478,7 +1483,7 @@ def configure_zos(o):
1478
1483
1479
1484
def clang_version_ge (version_checked ):
1480
1485
for compiler in [(CC , 'c' ), (CXX , 'c++' )]:
1481
- _ , is_clang , clang_version , _1 = (
1486
+ _ , is_clang , clang_version , _1 , _2 = (
1482
1487
try_check_compiler (compiler [0 ], compiler [1 ])
1483
1488
)
1484
1489
if is_clang and clang_version >= version_checked :
@@ -1487,7 +1492,7 @@ def clang_version_ge(version_checked):
1487
1492
1488
1493
def gcc_version_ge (version_checked ):
1489
1494
for compiler in [(CC , 'c' ), (CXX , 'c++' )]:
1490
- _ , is_clang , _1 , gcc_version = (
1495
+ _ , is_clang , _1 , gcc_version , _2 = (
1491
1496
try_check_compiler (compiler [0 ], compiler [1 ])
1492
1497
)
1493
1498
if is_clang or gcc_version < version_checked :
@@ -1887,10 +1892,10 @@ def without_ssl_error(option):
1887
1892
if options .quic :
1888
1893
o ['defines' ] += ['NODE_OPENSSL_HAS_QUIC' ]
1889
1894
1890
- o ['variables' ]['openssl_version' ] = get_openssl_version ()
1891
-
1892
1895
configure_library ('openssl' , o )
1893
1896
1897
+ o ['variables' ]['openssl_version' ] = get_openssl_version (o )
1898
+
1894
1899
def configure_sqlite (o ):
1895
1900
o ['variables' ]['node_use_sqlite' ] = b (not options .without_sqlite )
1896
1901
if options .without_sqlite :
0 commit comments