# SPDX-License-Identifier: Apache-2.0
# Copyright © 2021-2024 Intel Corporation

project(
  'rustmod bindgen',
  ['c', 'cpp', 'rust'],
  meson_version : '>= 0.63',
  default_options : ['cpp_std=c++17'])

prog_bindgen = find_program('bindgen', required : false)
if not prog_bindgen.found()
  error('MESON_SKIP_TEST bindgen not found')
endif

cc_id = meson.get_compiler('c').get_id()
compiler_specific_args = []
if cc_id == 'gcc'
  compiler_specific_args = ['-fipa-pta']
elif cc_id == 'msvc'
  compiler_specific_args = ['/fp:fast']
endif

add_project_arguments(['-DPROJECT_ARG', compiler_specific_args], language : 'c')
add_global_arguments(['-DGLOBAL_ARG', compiler_specific_args], language : 'c')

# This seems to happen on windows when libclang.dll is not in path or is not
# valid. We must try to process a header file for this to work.
#
# See https://github.com/rust-lang/rust-bindgen/issues/1797
result = run_command(prog_bindgen, 'include/other.h', check: false)
if result.returncode() != 0
  error('MESON_SKIP_TEST bindgen does not seem to work')
endif

rust = import('unstable-rust')

# Check version, this case is obviously impossible
testcase expect_error('Program \'bindgen\' not found or not executable')
  rust.bindgen(input : 'include/other.h', output : 'other.rs', bindgen_version : ['< 0.1', '> 10000'])
endtestcase

# This is to test the include_directories argument to bindgen
inc = include_directories('include')

c_lib = static_library('clib', 'src/source.c', include_directories : inc)

gen = rust.bindgen(
  input : 'src/header.h',
  output : 'header.rs',
  include_directories : 'include',
)

# see: https://github.com/mesonbuild/meson/issues/8160
f = configure_file(
  input : 'src/main.rs',
  output : 'main.rs',
  copy : true,
)

rust_bin = executable(
  'rust_bin',
  [f, gen],
  link_with : c_lib,
)

test('main', rust_bin)

# Test a generated header
subdir('gen')
gen_rs = rust.bindgen(
  input : [gen_h, gen2_h],
  output : 'gen.rs',
)

f = configure_file(
  input : 'src/main2.rs',
  output : 'main2.rs',
  copy : true,
)

rust_bin2 = executable(
  'rust_bin2',
  [f, gen_rs],
  link_with : c_lib,
)

test('generated header', rust_bin2)

if prog_bindgen.version().version_compare('>= 0.65')
  # Test generating a static inline wrapper
  gen3 = rust.bindgen(
    input : 'src/header3.h',
    output : 'header3.rs',
    output_inline_wrapper : 'header3.c',
    include_directories : inc,
  )
  c_inline_wrapper = static_library('c_wrapper', gen3[1], include_directories: inc)

  f = configure_file(
    input : 'src/main3.rs',
    output : 'main3.rs',
    copy : true,
  )

  rust_bin3 = executable(
    'rust_bin3',
    [f, gen3[0]],
    link_with : [
      c_lib,
      c_inline_wrapper,
    ],
  )

  test('static inline wrapper', rust_bin3)
endif

subdir('sub')
subdir('dependencies')

gp = rust.bindgen(
  input : 'src/global-project.h',
  output : 'global-project.rs',
)

gp_lib = static_library('gp_lib', 'src/global.c')

gp_exe = executable(
  'gp_exe',
  structured_sources(['src/global.rs', gp]),
  link_with : gp_lib,
)

test('global and project arguments', gp_exe)

cpp_lib_sources = files('src/impl.cpp')
cpp_lib = both_libraries('cpplib', cpp_lib_sources)
cpp_lib_static = static_library('cpplib-static', cpp_lib_sources)

cpp_bind = rust.bindgen(
  input : 'src/header.hpp',
  output : 'generated-cpp.rs',
)

# test passing various kinds of objects as dependencies

rust.bindgen(
  input : ['src/header2.hpp', cpp_lib.get_static_lib()],
  output : 'generated-cpp-static.rs')
rust.bindgen(
  input : ['src/header3.hpp', cpp_lib_static.extract_objects(cpp_lib_sources)],
  output : 'generated-cpp-objs.rs')
rust.bindgen(
  input : ['src/header4.hpp', cpp_lib],
  output : 'generated-cpp-both.rs')

cpp_exe = executable(
  'cpp_exe',
  structured_sources(['src/cpp.rs', cpp_bind]),
  link_with : cpp_lib_static,
)
test('cpp', cpp_exe)
