@@ -378,6 +378,34 @@ def test_archflags_envvar_parsing_invalid(package_purelib_and_platlib, monkeypat
378378 os .environ .pop ('_PYTHON_HOST_PLATFORM' , None )
379379
380380
381+ def test_android_project (package_simple , monkeypatch , tmp_path ):
382+ # Mock being on Android
383+ monkeypatch .setattr (sys , 'platform' , 'android' )
384+ monkeypatch .setattr (sys , 'byteorder' , 'little' )
385+ monkeypatch .setattr (platform , 'machine' , Mock (return_value = 'aarch64' ))
386+ monkeypatch .setattr (sysconfig , 'get_platform' , Mock (return_value = 'android-24-arm64_v8a' ))
387+ monkeypatch .setenv ('STRIP' , '/path/to/strip' )
388+
389+ # Create a project.
390+ project = mesonpy .Project (source_dir = package_simple , build_dir = tmp_path )
391+
392+ # Meson configuration points at the cross file
393+ assert project ._meson_args ['setup' ][- 2 :] == ['--cross-file' , os .fspath (tmp_path / 'meson-python-cross-file.ini' )]
394+
395+ # Meson config files exist, and have some relevant keys
396+ assert (tmp_path / 'meson-python-native-file.ini' ).exists ()
397+ assert (tmp_path / 'meson-python-cross-file.ini' ).exists ()
398+
399+ cross_config = (tmp_path / 'meson-python-cross-file.ini' ).read_text ().splitlines ()
400+ assert "system = 'android'" in cross_config
401+ assert "subsystem = 'android'" in cross_config
402+ assert "kernel = 'linux'" in cross_config
403+ assert "cpu = 'aarch64'" in cross_config
404+ assert "cpu_family = 'aarch64'" in cross_config
405+ assert "endian = 'little'" in cross_config
406+ assert 'needs_exe_wrapper = true' in cross_config
407+
408+
381409@pytest .mark .skipif (sys .version_info < (3 , 13 ), reason = 'requires Python 3.13 or higher' )
382410@pytest .mark .parametrize ('multiarch' , [
383411 'arm64-iphoneos' ,
0 commit comments