project('linker script', 'c', default_options : {'prefix': '/tmp'})

# Solaris 11.4 ld supports --version-script only when you also specify
# -z gnu-version-script-compat
if meson.get_compiler('c').get_linker_id() == 'ld.solaris'
  add_project_link_arguments('-Wl,-z,gnu-version-script-compat', language: 'C')
endif

# Static map file
mapfile = 'bob.map'
vflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)

l = shared_library('bob', 'bob.c', link_args : vflag, link_depends : mapfile)
e = executable('prog', 'prog.c', link_with : l)
test('core', e)

# configure_file
conf = configuration_data()
conf.set('in', 'bobMcBob')
m = configure_file(
  input : 'bob.map.in',
  output : 'bob-conf.map',
  configuration : conf,
)
vflag = '-Wl,--version-script,@0@'.format(meson.current_build_dir() / 'bob-conf.map')

l = shared_library('bob-conf', 'bob.c', link_args : vflag, link_depends : m)
e = executable('prog-conf', 'prog.c', link_with : l)
test('core', e)

# custom_target
python = find_program('python3')
m = custom_target(
  'bob-ct.map',
  command : [python, '@INPUT0@', '@INPUT1@', 'bob-ct.map'],
  input : ['copy.py', 'bob.map'],
  output : 'bob-ct.map',
  depend_files : 'bob.map',
)
vflag = '-Wl,--version-script,@0@'.format(m.full_path())

l = shared_library('bob-ct', ['bob.c', m], link_args : vflag, link_depends : m)
e = executable('prog-ct', 'prog.c', link_with : l)
test('core', e)

subdir('sub')

# With map file in subdir
mapfile = 'sub/foo.map'
vflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)

l = shared_library('bar', 'bob.c', link_args : vflag, link_depends : mapfile)
e = executable('prog-bar', 'prog.c', link_with : l)
test('core', e)
