@@ -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#
@@ -1205,7 +1207,7 @@ def get_gas_version(cc):
12051207 warn (f'Could not recognize `gas`: { gas_ret } ' )
12061208 return '0.0'
12071209
1208- def get_openssl_version ():
1210+ def get_openssl_version (o ):
12091211 """Parse OpenSSL version from opensslv.h header file.
12101212
12111213 Returns the version as a number matching OPENSSL_VERSION_NUMBER format:
@@ -1219,6 +1221,9 @@ def get_openssl_version():
12191221 args = ['-I' , 'deps/openssl/openssl/include' ] + args
12201222 elif options .shared_openssl_includes :
12211223 args = ['-I' , options .shared_openssl_includes ] + args
1224+ else :
1225+ for dir in o ['include_dirs' ]:
1226+ args = ['-I' , dir ] + args
12221227
12231228 proc = subprocess .Popen (
12241229 shlex .split (CC ) + args ,
@@ -1289,18 +1294,18 @@ def check_compiler(o):
12891294 o ['variables' ]['openssl_no_asm' ] = 1
12901295 return
12911296
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++' )
12931298 o ['variables' ]['clang' ] = B (is_clang )
12941299 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 } " )
12961301 if not ok :
12971302 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' )
13001305
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' )
13021307 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 } " )
13041309 if not ok :
13051310 warn (f'failed to autodetect C compiler version (CC={ CC } )' )
13061311 elif not is_clang and gcc_version < (4 , 2 , 0 ):
@@ -1478,7 +1483,7 @@ def configure_zos(o):
14781483
14791484def clang_version_ge (version_checked ):
14801485 for compiler in [(CC , 'c' ), (CXX , 'c++' )]:
1481- _ , is_clang , clang_version , _1 = (
1486+ _ , is_clang , clang_version , _1 , _2 = (
14821487 try_check_compiler (compiler [0 ], compiler [1 ])
14831488 )
14841489 if is_clang and clang_version >= version_checked :
@@ -1487,7 +1492,7 @@ def clang_version_ge(version_checked):
14871492
14881493def gcc_version_ge (version_checked ):
14891494 for compiler in [(CC , 'c' ), (CXX , 'c++' )]:
1490- _ , is_clang , _1 , gcc_version = (
1495+ _ , is_clang , _1 , gcc_version , _2 = (
14911496 try_check_compiler (compiler [0 ], compiler [1 ])
14921497 )
14931498 if is_clang or gcc_version < version_checked :
@@ -1887,10 +1892,10 @@ def without_ssl_error(option):
18871892 if options .quic :
18881893 o ['defines' ] += ['NODE_OPENSSL_HAS_QUIC' ]
18891894
1890- o ['variables' ]['openssl_version' ] = get_openssl_version ()
1891-
18921895 configure_library ('openssl' , o )
18931896
1897+ o ['variables' ]['openssl_version' ] = get_openssl_version (o )
1898+
18941899def configure_sqlite (o ):
18951900 o ['variables' ]['node_use_sqlite' ] = b (not options .without_sqlite )
18961901 if options .without_sqlite :
0 commit comments