Skip to content

Commit 954d3f4

Browse files
targosnodejs-github-bot
authored andcommitted
build: check Apple clang version in configure script
Apple clang version number is not the same as the actual LLVM version PR-URL: #59358 Reviewed-By: Chengzhong Wu <[email protected]> Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: Richard Lau <[email protected]> Reviewed-By: Luigi Pinca <[email protected]>
1 parent 0309806 commit 954d3f4

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

configure.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,18 +1117,20 @@ def try_check_compiler(cc, lang):
11171117

11181118
with proc:
11191119
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__')
11211122

11221123
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]
11241125
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]
11261127

11271128
is_clang = values[0] == '1'
11281129
gcc_version = tuple(map(int, values[1:1+3]))
11291130
clang_version = tuple(map(int, values[4:4+3])) if is_clang else None
1131+
is_apple = values[7] == '1'
11301132

1131-
return (True, is_clang, clang_version, gcc_version)
1133+
return (True, is_clang, clang_version, gcc_version, is_apple)
11321134

11331135

11341136
#
@@ -1292,18 +1294,18 @@ def check_compiler(o):
12921294
o['variables']['openssl_no_asm'] = 1
12931295
return
12941296

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++')
12961298
o['variables']['clang'] = B(is_clang)
12971299
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}")
12991301
if not ok:
13001302
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')
13031305

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')
13051307
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}")
13071309
if not ok:
13081310
warn(f'failed to autodetect C compiler version (CC={CC})')
13091311
elif not is_clang and gcc_version < (4, 2, 0):
@@ -1481,7 +1483,7 @@ def configure_zos(o):
14811483

14821484
def clang_version_ge(version_checked):
14831485
for compiler in [(CC, 'c'), (CXX, 'c++')]:
1484-
_, is_clang, clang_version, _1 = (
1486+
_, is_clang, clang_version, _1, _2 = (
14851487
try_check_compiler(compiler[0], compiler[1])
14861488
)
14871489
if is_clang and clang_version >= version_checked:
@@ -1490,7 +1492,7 @@ def clang_version_ge(version_checked):
14901492

14911493
def gcc_version_ge(version_checked):
14921494
for compiler in [(CC, 'c'), (CXX, 'c++')]:
1493-
_, is_clang, _1, gcc_version = (
1495+
_, is_clang, _1, gcc_version, _2 = (
14941496
try_check_compiler(compiler[0], compiler[1])
14951497
)
14961498
if is_clang or gcc_version < version_checked:

0 commit comments

Comments
 (0)