version_script = '-Wl,--version-script=@0@'.format(meson.current_source_dir() / 'version.lds')
if not cc.has_link_argument(version_script)
  version_script = []
endif

sources = files(
  'fdt.c',
  'fdt_addresses.c',
  'fdt_check.c',
  'fdt_empty_tree.c',
  'fdt_overlay.c',
  'fdt_ro.c',
  'fdt_rw.c',
  'fdt_strerror.c',
  'fdt_sw.c',
  'fdt_wip.c',
)

link_args = []
if cc.has_link_argument('-Wl,--no-undefined')
    link_args += '-Wl,--no-undefined'
else
    # -undefined error is the equivalent of --no-undefined for the macOS linker,
    # but -undefined would also be understood as a valid argument for GNU ld!
    link_args += cc.get_supported_link_arguments('-Wl,-undefined,error')
endif

link_args += version_script
libfdt = library(
  'fdt', sources,
  version: '1.6.0',
  link_args: link_args,
  link_depends: 'version.lds',
  install: true,
)

libfdt_a = static_library(
  'fdt', sources,
  install: true,
)

libfdt_inc = include_directories('.')

if static_build
  link_with = libfdt_a
else
  link_with = libfdt
endif

libfdt_dep = declare_dependency(
  include_directories: libfdt_inc,
  link_with: link_with,
)

install_headers(
  files(
    'fdt.h',
    'libfdt.h',
    'libfdt_env.h',
  )
)

pkgconfig = import('pkgconfig')

pkgconfig.generate(
  libraries: libfdt,
  version: meson.project_version(),
  filebase: 'libfdt',
  name: 'libfdt',
  description: 'Flat Device Tree manipulation',
)
