dep3_libs = []

# Permutate all combinations of shared and static libraries up to three levels
# executable -> shared -> static -> shared (etc)
foreach dep2 : ['sh', 'st']
  foreach dep1 : ['sh', 'st']
    foreach libtype : ['sh', 'st']
      name = libtype + dep1 + dep2
      if dep2 == 'sh'
        libret = 1
      elif dep2 == 'st'
        libret = 2
      else
        error('Unknown dep2 "@0@"'.format(dep2))
      endif

      if libtype == 'sh'
        target = 'shared_library'
        build_args = []
      elif libtype == 'st'
        target = 'static_library'
        build_args = ['-DMESON_STATIC_BUILD']
      else
        error('Unknown libtype "@0@"'.format(libtype))
      endif

      cdata = configuration_data()
      cdata.set('DEPENDENCY', dep1 + dep2)
      cdata.set('LIBTYPE', libtype)
      cdata.set('VALUE', libret)

      lib_c = configure_file(input : 'lib.c.in',
                             output : name + '-lib.c',
                             configuration : cdata)
      dep = get_variable(dep1 + dep2 + 'dep')
      dep3_lib = build_target(name, lib_c, link_with : dep,
                              target_type : target,
                              c_args : build_args)
      dep3_libs += [dep3_lib]

      main_c = configure_file(input : 'main.c.in',
                              output : name + '-main.c',
                              configuration : cdata)
      dep3_bin = executable(name, main_c, link_with : dep3_lib,
                            c_args : build_args)
      test(name + 'test', dep3_bin)
    endforeach
  endforeach
endforeach
