@@ -378,6 +378,48 @@ def test_archflags_envvar_parsing_invalid(package_purelib_and_platlib, monkeypat
378378 os .environ .pop ('_PYTHON_HOST_PLATFORM' , None )
379379
380380
381+ @pytest .mark .parametrize (
382+ ('cpu' , 'cpu_family' ),
383+ [
384+ ('aarch64' , 'aarch64' ),
385+ ('armv7l' , 'arm' ),
386+ ('armv8l' , 'arm' ),
387+ ('i686' , 'x86' ),
388+ ('x86_64' , 'x86_64' ),
389+ ],
390+ )
391+ @pytest .mark .parametrize ('cross' , [True , False ])
392+ def test_android_project (package_simple , monkeypatch , tmp_path , cpu , cpu_family , cross ):
393+ # Mock being on Android
394+ monkeypatch .setattr (sys , 'platform' , 'android' )
395+ monkeypatch .setattr (sys , 'byteorder' , 'little' )
396+ monkeypatch .setattr (platform , 'machine' , Mock (return_value = cpu ))
397+ monkeypatch .setattr (sysconfig , 'get_platform' , Mock (return_value = 'android-24' ))
398+ if cross :
399+ monkeypatch .setenv ('CIBW_HOST_TRIPLET' , f'{ cpu } -linux-android' )
400+ monkeypatch .setenv ('STRIP' , '/path/to/strip' )
401+
402+ # Create a project.
403+ project = mesonpy .Project (source_dir = package_simple , build_dir = tmp_path )
404+
405+ # When cross-compiling, a cross file should be generated and used.
406+ setup_args = project ._meson_args ['setup' ]
407+ cross_path = tmp_path / 'meson-python-cross-file.ini'
408+ if cross :
409+ assert setup_args [- 2 :] == ['--cross-file' , str (cross_path )]
410+ cross_config = cross_path .read_text ().splitlines ()
411+ assert "system = 'android'" in cross_config
412+ assert "subsystem = 'android'" in cross_config
413+ assert "kernel = 'linux'" in cross_config
414+ assert f"cpu_family = '{ cpu_family } '" in cross_config
415+ assert f"cpu = '{ cpu } '" in cross_config
416+ assert "endian = 'little'" in cross_config
417+ assert 'needs_exe_wrapper = true' in cross_config
418+ else :
419+ assert '--cross-file' not in setup_args
420+ assert not cross_path .exists ()
421+
422+
381423@pytest .mark .skipif (sys .version_info < (3 , 13 ), reason = 'requires Python 3.13 or higher' )
382424@pytest .mark .parametrize ('multiarch' , [
383425 'arm64-iphoneos' ,
0 commit comments