@@ -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
#
@@ -1292,18 +1294,18 @@ def check_compiler(o):
1292
1294
o ['variables' ]['openssl_no_asm' ] = 1
1293
1295
return
1294
1296
1295
- 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++' )
1296
1298
o ['variables' ]['clang' ] = B (is_clang )
1297
1299
version_str = "." .join (map (str , clang_version if is_clang else gcc_version ))
1298
- 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 } " )
1299
1301
if not ok :
1300
1302
warn (f'failed to autodetect C++ compiler version (CXX={ CXX } )' )
1301
- elif clang_version < (19 , 1 , 0 ) if is_clang else gcc_version < (12 , 2 , 0 ):
1302
- 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' )
1303
1305
1304
- 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' )
1305
1307
version_str = "." .join (map (str , clang_version if is_clang else gcc_version ))
1306
- 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 } " )
1307
1309
if not ok :
1308
1310
warn (f'failed to autodetect C compiler version (CC={ CC } )' )
1309
1311
elif not is_clang and gcc_version < (4 , 2 , 0 ):
@@ -1481,7 +1483,7 @@ def configure_zos(o):
1481
1483
1482
1484
def clang_version_ge (version_checked ):
1483
1485
for compiler in [(CC , 'c' ), (CXX , 'c++' )]:
1484
- _ , is_clang , clang_version , _1 = (
1486
+ _ , is_clang , clang_version , _1 , _2 = (
1485
1487
try_check_compiler (compiler [0 ], compiler [1 ])
1486
1488
)
1487
1489
if is_clang and clang_version >= version_checked :
@@ -1490,7 +1492,7 @@ def clang_version_ge(version_checked):
1490
1492
1491
1493
def gcc_version_ge (version_checked ):
1492
1494
for compiler in [(CC , 'c' ), (CXX , 'c++' )]:
1493
- _ , is_clang , _1 , gcc_version = (
1495
+ _ , is_clang , _1 , gcc_version , _2 = (
1494
1496
try_check_compiler (compiler [0 ], compiler [1 ])
1495
1497
)
1496
1498
if is_clang or gcc_version < version_checked :
0 commit comments