@@ -32,6 +32,12 @@ use crate::{
32
32
/// Minimum Python version PyO3 supports.
33
33
const MINIMUM_SUPPORTED_VERSION : PythonVersion = PythonVersion { major : 3 , minor : 7 } ;
34
34
35
+ /// GraalPy may implement the same CPython version over multiple releases.
36
+ const MINIMUM_SUPPORTED_VERSION_GRAALPY : PythonVersion = PythonVersion {
37
+ major : 24 ,
38
+ minor : 0 ,
39
+ } ;
40
+
35
41
/// Maximum Python version that can be used as minimum required Python version with abi3.
36
42
const ABI3_MAX_MINOR : u8 = 12 ;
37
43
@@ -204,6 +210,11 @@ from sysconfig import get_config_var, get_platform
204
210
PYPY = platform.python_implementation() == "PyPy"
205
211
GRAALPY = platform.python_implementation() == "GraalVM"
206
212
213
+ if GRAALPY:
214
+ graalpy_ver = map(int, __graalpython__.get_graalvm_version().split('.'));
215
+ print("graalpy_major", next(graalpy_ver))
216
+ print("graalpy_minor", next(graalpy_ver))
217
+
207
218
# sys.base_prefix is missing on Python versions older than 3.3; this allows the script to continue
208
219
# so that the version mismatch can be reported in a nicer way later.
209
220
base_prefix = getattr(sys, "base_prefix", None)
@@ -250,6 +261,26 @@ print("ext_suffix", get_config_var("EXT_SUFFIX"))
250
261
interpreter. as_ref( ) . display( )
251
262
) ;
252
263
264
+ match map. get ( "graalpy_major" ) {
265
+ Some ( value) => {
266
+ let graalpy_version = PythonVersion {
267
+ major : value
268
+ . parse ( )
269
+ . context ( "failed to parse GraalPy major version" ) ?,
270
+ minor : map[ "graalpy_minor" ]
271
+ . parse ( )
272
+ . context ( "failed to parse GraalPy minor version" ) ?,
273
+ } ;
274
+ ensure ! (
275
+ graalpy_version >= MINIMUM_SUPPORTED_VERSION_GRAALPY ,
276
+ "At least GraalPy version {} needed, got {}" ,
277
+ MINIMUM_SUPPORTED_VERSION_GRAALPY ,
278
+ graalpy_version
279
+ ) ;
280
+ }
281
+ None => ( ) ,
282
+ } ;
283
+
253
284
let shared = map[ "shared" ] . as_str ( ) == "True" ;
254
285
255
286
let version = PythonVersion {
0 commit comments