project('run target', 'c') # Make it possible to run built programs. # In cross builds exe_wrapper should be added if it exists. exe = executable('helloprinter', 'helloprinter.c') if not meson.is_cross_build() or meson.can_run_host_binaries() run_target('runhello', command : [exe, 'argument']) endif converter = find_program('converter.py') hex = custom_target('exe.hex', input : exe, output : 'exe.hex', command : [converter, '@INPUT@', '@OUTPUT@', ], ) fakeburner = find_program('fakeburner.py') # These emulates the Arduino flasher application. It sandwiches the filename inside # a packed argument. Thus we need to declare it manually. run_target('upload', command : [fakeburner, 'x:@0@:y'.format(exe.full_path())], depends : exe, ) run_target('upload2', command : [fakeburner, 'x:@0@:y'.format(hex.full_path())], depends : hex, ) python3 = find_program('python3', required : false) if not python3.found() python3 = find_program('python') endif run_target('py3hi', command : [python3, '-c', 'print("I am Python3.")']) run_target('check_exists', command : [find_program('check_exists.py'), files('helloprinter.c')]) run_target('check_exists', command : [find_program('check_exists.py'), files('helloprinter.c')], depends : disabler(), ) run_target('check_exists', command : [disabler(), files('helloprinter.c')]) # What if the output of a custom_target is the command to # execute. Obviously this will not work as hex is not an # executable but test that the output is generated correctly. run_target('donotrunme', command : hex) # Ensure configure files can be passed conf = configure_file( input: 'configure.in', output: 'configure', configuration: configuration_data() ) run_target('configure_script', command : conf ) custom_target('configure_script_ct', command: conf, output: 'dummy.txt', capture: true) # Target names that clash with potential builtin functionality. run_target('ctags', command : converter) clangf = run_target('clang-format', command : [converter, files('.clang-format'), meson.current_build_dir() / 'clang-format']) custom_target('clang-tidy', input: '.clang-tidy', output: 'clang-tidy', command : [converter, '@INPUT@', '@OUTPUT@']) alias_target('clang-format-check', clangf) # Check we can pass env to the program. Also check some string substitutions # that were added in 0.57.0 but not documented. This is documented behaviour # since 0.57.1. run_target('check-env', command: [find_program('check-env.py'), '@SOURCE_ROOT@', '@BUILD_ROOT@', '@CURRENT_SOURCE_DIR@'], env: {'MY_ENV': '1'}, ) # Check some string substitutions that has always been done but never documented. # Some projects have been relying on this implementation detail. This is # documented behaviour since 0.57.1. custom_target('check-env-ct', command: [find_program('check-env.py'), '@SOURCE_ROOT@', '@BUILD_ROOT@', '@CURRENT_SOURCE_DIR@'], env: {'MESON_SOURCE_ROOT': meson.source_root(), 'MESON_BUILD_ROOT': meson.build_root(), 'MESON_SUBDIR': meson.current_source_dir(), 'MESONINTROSPECT': 'fake value', 'MY_ENV': '1'}, output: 'check-env-ct', ) run_target('textprinter', command: ['subdir/textprinter.py'])