project('Python extension module', 'c',
  default_options : ['buildtype=release', 'python.bytecompile=-1'])
# Because Windows Python ships only with optimized libs,
# we must build this project the same way.

if meson.backend() != 'ninja'
  error('MESON_SKIP_TEST: Ninja backend required')
endif
if not add_languages('rust', required: false, native: false)
  error('MESON_SKIP_TEST: Rust compiler required')
endif

py_mod = import('python')
py = py_mod.find_installation()
py_dep = py.dependency(required: false)

if not py_dep.found()
  error('MESON_SKIP_TEST: Python libraries not found.')
endif

# Rust code cannot rely on #define PyModule_Create, so it calls
# PyModule_Create2.  But it is also not possible to use has_function()
# because the function is in the Python executable, so just check
# for PyPy.
if run_command(py, '-c', 'import sys; sys.exit("__pypy__" in sys.builtin_module_names)',
               check: false).returncode() == 1
  error('MESON_SKIP_TEST: Limited API not supported (PyPy?)')
endif

subdir('ext')

src = files('blaster.py')
test('extmod',
  py,
  args : src,
  env : ['PYTHONPATH=' + pypathdir])
