diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index db50f6adb..688149bb1 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1583,6 +1583,8 @@ int dummy; for ssrc in gen.get_outputs(): if isinstance(gen, GeneratedList): ssrc = os.path.join(self.get_target_private_dir(target) , ssrc) + else: + ssrc = os.path.join(gen.get_subdir(), ssrc) if ssrc.endswith('.pyx'): args = args.copy() output = os.path.join(self.get_target_private_dir(target), f'{ssrc}.c') diff --git a/test cases/cython/2 generated sources/libdir/gen.py b/test cases/cython/2 generated sources/libdir/gen.py new file mode 100644 index 000000000..5c0a82d56 --- /dev/null +++ b/test cases/cython/2 generated sources/libdir/gen.py @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import textwrap + +parser = argparse.ArgumentParser() +parser.add_argument('output') +args = parser.parse_args() + +with open(args.output, 'w') as f: + f.write(textwrap.dedent('''\ + cpdef func(): + return "Hello, World!" + ''')) diff --git a/test cases/cython/2 generated sources/libdir/meson.build b/test cases/cython/2 generated sources/libdir/meson.build new file mode 100644 index 000000000..e9259bdad --- /dev/null +++ b/test cases/cython/2 generated sources/libdir/meson.build @@ -0,0 +1,10 @@ +ct2 = custom_target( + 'ct2', + input : 'gen.py', + output : 'ct2.pyx', + command : [py3, '@INPUT@', '@OUTPUT@'], +) + +ct2_ext = py3.extension_module('ct2', ct2, dependencies : py3_dep) + +pydir = meson.current_build_dir() diff --git a/test cases/cython/2 generated sources/meson.build b/test cases/cython/2 generated sources/meson.build index c9a9b6a7d..89dacfa55 100644 --- a/test cases/cython/2 generated sources/meson.build +++ b/test cases/cython/2 generated sources/meson.build @@ -59,3 +59,12 @@ test( args : [files('test.py'), 'g'], env : ['PYTHONPATH=' + meson.current_build_dir()] ) + +subdir('libdir') + +test( + 'custom target in subdir', + py3, + args : [files('test.py'), 'ct2'], + env : ['PYTHONPATH=' + pydir] +)