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,
)

run_target('upload3',
  command : [fakeburner, 'x:@0@:y'.format(hex.full_path())],
  depends : hex[0],
)

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'])
