pkgg = import('pkgconfig')

cargs = [
  '-DG_LOG_DOMAIN="As"',
]

deps = [
  gdkpixbuf,
  glib,
  libarchive,
  soup,
]

if platform_win32
  deps += [giowindows]
elif platform_osx
  deps += [giounix]
else
  deps += [giounix, uuid]
endif

if get_option('dep11')
  deps += yaml
endif

if get_option('rpm')
  deps += rpm
endif

if get_option('stemmer')
  deps += stemmer
endif

asresources = gnome.compile_resources(
  'as-resources', 'appstream-glib.gresource.xml',
  c_name : 'as'
)

configure_file(
  input : 'as-version.h.in',
  output : 'as-version.h',
  install_dir : join_paths(get_option('includedir'), 'libappstream-glib'),
  configuration : conf
)

headers = [
  'appstream-glib.h',
  'as-app-builder.h',
  'as-app.h',
  'as-bundle.h',
  'as-checksum.h',
  'as-content-rating.h',
  'as-enums.h',
  'as-format.h',
  'as-icon.h',
  'as-image.h',
  'as-launchable.h',
  'as-inf.h',
  'as-markup.h',
  'as-monitor.h',
  'as-node.h',
  'as-agreement.h',
  'as-agreement-section.h',
  'as-problem.h',
  'as-profile.h',
  'as-provide.h',
  'as-release.h',
  'as-require.h',
  'as-review.h',
  'as-screenshot.h',
  'as-store.h',
  'as-suggest.h',
  'as-tag.h',
  'as-translation.h',
  'as-utils.h',
]

sources = [
  'as-app-builder.c',
  'as-app.c',
  'as-app-desktop.c',
  'as-app-inf.c',
  'as-app-validate.c',
  'as-bundle.c',
  'as-bundle.c',
  'as-checksum.c',
  'as-content-rating.c',
  'as-enums.c',
  'as-format.c',
  'as-icon.c',
  'as-image.c',
  'as-inf.c',
  'as-launchable.c',
  'as-markup.c',
  'as-monitor.c',
  'as-monitor.c',
  'as-node.c',
  'as-agreement.c',
  'as-agreement-section.c',
  'as-problem.c',
  'as-profile.c',
  'as-provide.c',
  'as-ref-string.c',
  'as-release.c',
  'as-require.c',
  'as-review.c',
  'as-screenshot.c',
  'as-stemmer.c',
  'as-store.c',
  'as-store-cab.c',
  'as-suggest.c',
  'as-tag.c',
  'as-translation.c',
  'as-utils.c',
  'as-version.c',
  'as-yaml.c',
  asresources,
]

# gperf sources
astagpriv = custom_target(
  'gperf as-tag',
  output : 'as-tag-private.h',
  input : 'as-tag.gperf',
  command : [
    gperf,
    '@INPUT@',
    '--output-file',
    '@OUTPUT@'
  ]
)
sources = sources + [astagpriv]

install_headers(headers, subdir : 'libappstream-glib')

mapfile = 'appstream-glib.map'
if platform_osx
  mapfile = 'appstream-glib.map.osx-clang'
  vflag = '-Wl,-exported_symbols_list,@0@/@1@'.format(meson.current_source_dir(), mapfile)
else
  vflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)
endif

asglib = shared_library(
  'appstream-glib', sources,
  soversion : lt_current,
  version : lt_version,
  dependencies : deps,
  c_args : cargs,
  include_directories : include_directories('..'),
  link_args : vflag,
  link_depends : mapfile,
  install : true,
)
asglib_incdir = include_directories('.')

pkg_req_private = [
  'libarchive'
]

if not platform_win32
  pkg_req_private += ['uuid']
endif

pkgg.generate(
  version : as_version,
  libraries : asglib,
  requires : [
    'glib-2.0',
    'gobject-2.0',
    'gdk-pixbuf-2.0',
  ],
  requires_private : pkg_req_private,
  name : 'appstream-glib',
  description : 'Objects and helper methods to help reading and writing AppStream metadata',
  filebase : 'appstream-glib',
  subdirs : 'libappstream-glib',
)

selftest = executable(
  'as-self-test', 'as-self-test.c',
  include_directories : include_directories('..'),
  dependencies : deps,
  c_args : cargs + ['-DTESTDIRSRC="@0@/../data/tests"'.format(meson.current_source_dir())]
                 + ['-DTESTDIRBUILD="@0@/../data/tests"'.format(meson.current_build_dir())],
  link_with : asglib,
)
test('as-self-test', selftest)

introspection_sources = [
  'as-app.c',
  'as-app.h',
  'as-app-validate.c',
  'as-bundle.c',
  'as-bundle.h',
  'as-checksum.c',
  'as-checksum.h',
  'as-content-rating.c',
  'as-content-rating.h',
  'as-enums.c',
  'as-enums.h',
  'as-format.c',
  'as-format.h',
  'as-icon.c',
  'as-icon.h',
  'as-image.c',
  'as-image.h',
  'as-inf.c',
  'as-inf.h',
  'as-launchable.c',
  'as-launchable.h',
  'as-markup.c',
  'as-markup.h',
  'as-node.c',
  'as-node.h',
  'as-agreement.c',
  'as-agreement.h',
  'as-agreement-section.c',
  'as-agreement-section.h',
  'as-problem.c',
  'as-problem.h',
  'as-provide.c',
  'as-provide.h',
  'as-release.c',
  'as-release.h',
  'as-require.c',
  'as-require.h',
  'as-review.c',
  'as-review.h',
  'as-screenshot.c',
  'as-screenshot.h',
  'as-store.c',
  'as-store.h',
  'as-suggest.c',
  'as-suggest.h',
  'as-tag.c',
  'as-tag.h',
  'as-translation.c',
  'as-translation.h',
  'as-utils.c',
  'as-utils.h',
  'as-version.c',
]

if get_option('introspection')
  asglib_gir = gnome.generate_gir(asglib,
    sources : introspection_sources,
    nsversion : '1.0',
    namespace : 'AppStreamGlib',
    symbol_prefix : 'as_',
    identifier_prefix : 'As',
    export_packages : 'appstream-glib',
    dependencies : deps,
    includes : [
      'GObject-2.0',
      'Gio-2.0',
      'GdkPixbuf-2.0'
    ],
    extra_args : [
      '-DAS_COMPILATION',
    ],
    link_with : asglib,
    install : true,
  )
endif
