| project('Python extension module', 'c', | |
| default_options : ['buildtype=release']) | |
| # 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 | |
| py_mod = import('python') | |
| py3 = py_mod.find_installation() | |
| py3_dep = py3.dependency(required : false) | |
| cc = meson.get_compiler('c') | |
| if not py3_dep.found() | |
| error('MESON_SKIP_TEST: Python3 libraries not found, skipping test.') | |
| endif | |
| # Copy to the builddir so that blaster.py can find the built tachyon module | |
| # FIXME: We should automatically detect this case and append the correct paths | |
| # to PYTHONLIBDIR | |
| blaster_py = configure_file(input : 'blaster.py', | |
| output : 'blaster.py', | |
| copy : true) | |
| check_exists = ''' | |
| import os, sys | |
| with open(sys.argv[1], 'rb') as f: | |
| assert(f.read() == b'success') | |
| ''' | |
| message('Detected Python version: ' + py3_dep.version()) | |
| if py3_dep.version().version_compare('>=3.8') and cc.get_id() == 'msvc' and cc.version().version_compare('<=19.00.24215.1') | |
| error('MESON_SKIP_TEST: Python modules do not work with Python 3.8 and VS2015 or earlier.') | |
| endif | |
| subdir('ext') | |
| out_txt = custom_target('tachyon flux', | |
| input : blaster_py, | |
| output : 'out.txt', | |
| command : [py3, '@INPUT@', '-o', '@OUTPUT@'], | |
| depends : pylib, | |
| build_by_default: true) | |
| test('flux', py3, args : ['-c', check_exists, out_txt]) |