Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 49 additions & 11 deletions test/test_android.py
Original file line number Diff line number Diff line change
Expand Up @@ -619,24 +619,54 @@ def test_repair_error(
assert error in capfd.readouterr().err


# This also tests integration with pkgconf, because Meson uses it to find Python.
# This also tests integration with pkgconf, which Meson uses to find Python and
# OpenBLAS.
@needs_emulator
def test_meson(tmp_path: Path, capfd: pytest.CaptureFixture[str]) -> None:
# Alter spam.filter to return the value of a Fortran function.
new_meson_project(
spam_c_top_level_add="int fortran_func_();",
spam_c_function_add="sts = fortran_func_();",
project_args_add="'fortran',",
extension_args_add="'fortran.f90', link_language: 'fortran',",
extension_args_add=dedent(
"""\
'fortran.f90',
link_language: 'fortran',
dependencies: [dependency('openblas', method: 'pkg-config')],
"""
),
# Alter spam.filter to call an OpenBLAS function, and return the value of a
# Fortran function.
spam_c_top_level_add=dedent(
"""\
#include <cblas.h>
int fortran_func_();
"""
),
spam_c_function_add=dedent(
"""\
openblas_get_config();
sts = fortran_func_();
"""
),
).generate(tmp_path)

# TODO: remove once meson-python has a release with Android support.
pyproject_path = tmp_path / "pyproject.toml"
pyproject_path.write_text(
pyproject_path.read_text().replace(
"meson-python", "meson-python @ git+https://github.com/mesonbuild/meson-python@main"
# Add a before-build script to download OpenBLAS.
before_build = tmp_path / "cibw_before_build.sh"
before_build.write_text(
dedent(
"""\
#!/bin/sh
set -eu

openblas_dir=$(pwd)/openblas
rm -rf $openblas_dir
mkdir -p $openblas_dir
pip install \\
--target $openblas_dir \\
--index-url https://chaquo.com/pypi-upstream/ \\
chaquopy-openblas==0.3.33
"""
)
)
before_build.chmod(0o755)

# Add Fortran code.
(tmp_path / "fortran.f90").write_text(
Expand All @@ -652,7 +682,15 @@ def test_meson(tmp_path: Path, capfd: pytest.CaptureFixture[str]) -> None:
script = 'import spam; print(f"result: {spam.filter("")}")'
cibuildwheel_run(
tmp_path,
add_env={**cp313_env, "CIBW_TEST_COMMAND": f"python -c '{script}'"},
add_env={
**cp313_env,
"CIBW_BEFORE_BUILD": str(before_build),
"CIBW_ENVIRONMENT": (
'PKG_CONFIG_PATH="$(pwd)/openblas/chaquopy/lib/pkgconfig" '
'AUDITWHEEL_LD_LIBRARY_PATH="$(pwd)/openblas/chaquopy/lib"'
),
"CIBW_TEST_COMMAND": f"python -c '{script}'",
},
)
assert "result: 42" in capfd.readouterr().out

Expand Down
Loading