[libpeas] Port to meson build system



commit dabb83a2e217694220a55c2019a081365a4a1288
Author: Martin Blanchard <tchaik gmx com>
Date:   Sat Jun 2 17:45:30 2018 +0100

    Port to meson build system
    
    The meson build system focuses on speed an ease of use,
    which helps speeding up the software development.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=793916
    https://gitlab.gnome.org/GNOME/libpeas/issues/26
    
    Closes #26

 data/glade/meson.build                             |  28 +++
 data/icons/meson.build                             |  27 +++
 data/meson.build                                   |   5 +
 docs/meson.build                                   |   3 +
 docs/reference/meson.build                         |  99 ++++++++++
 libpeas-gtk/meson.build                            | 101 ++++++++++
 libpeas/meson.build                                | 132 +++++++++++++
 loaders/lua5.1/meson.build                         |  41 ++++
 loaders/lua5.1/resources/meson.build               |   5 +
 loaders/meson.build                                |  11 ++
 loaders/python/meson.build                         |  45 +++++
 loaders/python3/meson.build                        |  45 +++++
 meson.build                                        | 218 +++++++++++++++++++++
 meson_options.txt                                  |  32 +++
 peas-demo/meson.build                              |  23 +++
 peas-demo/plugins/helloworld/meson.build           |  31 +++
 peas-demo/plugins/luahello/meson.build             |  14 ++
 peas-demo/plugins/meson.build                      |  11 ++
 peas-demo/plugins/pythonhello/meson.build          |  14 ++
 peas-demo/plugins/secondtime/meson.build           |  30 +++
 po/meson.build                                     |   4 +
 tests/libpeas-gtk/meson.build                      |  33 ++++
 .../plugins/builtin-configurable/meson.build       |  37 ++++
 tests/libpeas-gtk/plugins/configurable/meson.build |  37 ++++
 tests/libpeas-gtk/plugins/meson.build              |  18 ++
 .../plugins/valid-custom-icon/meson.build          |  14 ++
 tests/libpeas-gtk/testing/meson.build              |  44 +++++
 tests/libpeas/introspection/meson.build            |  71 +++++++
 tests/libpeas/meson.build                          |  57 ++++++
 tests/libpeas/plugins/embedded/meson.build         |  52 +++++
 tests/libpeas/plugins/extension-c/meson.build      |  64 ++++++
 tests/libpeas/plugins/extension-lua/meson.build    |  15 ++
 tests/libpeas/plugins/extension-python/meson.build |  49 +++++
 tests/libpeas/plugins/meson.build                  |  33 ++++
 tests/libpeas/testing/meson.build                  |  46 +++++
 tests/meson.build                                  |   8 +
 tests/plugins/builtin/meson.build                  |  34 ++++
 tests/plugins/has-dep/meson.build                  |  35 ++++
 tests/plugins/loadable/meson.build                 |  34 ++++
 tests/plugins/meson.build                          |  20 ++
 tests/plugins/self-dep/meson.build                 |  34 ++++
 tests/testing-util/meson.build                     |  42 ++++
 42 files changed, 1696 insertions(+)
---
diff --git a/data/glade/meson.build b/data/glade/meson.build
new file mode 100644
index 0000000..301c2ab
--- /dev/null
+++ b/data/glade/meson.build
@@ -0,0 +1,28 @@
+glade_catalog_xml = configuration_data()
+glade_catalog_xml.set('GETTEXT_PACKAGE', package_string)
+
+peas_glade_catalog = configure_file(
+  input: 'libpeas-gtk.xml.in',
+  output: 'libpeas-gtk.xml',
+  configuration: glade_catalog_xml,
+  install: true,
+  install_dir: catalogdir,
+)
+
+if xmllint_prg.found()
+  glade_catalog_dtd_path = join_paths(
+    gladeui_dep.get_pkgconfig_variable('catalogdir'),
+   'glade-catalog.dtd'
+  )
+
+  test(
+    'Validate Glade catalogue',
+    xmllint_prg,
+    args: [
+      '--dtdvalid',
+      glade_catalog_dtd_path,
+      peas_glade_catalog,
+      '--noout',
+    ]
+  )
+endif
diff --git a/data/icons/meson.build b/data/icons/meson.build
new file mode 100644
index 0000000..726dae8
--- /dev/null
+++ b/data/icons/meson.build
@@ -0,0 +1,27 @@
+icon_sizes = [
+  '16x16',
+  '22x22',
+  '32x32',
+]
+
+foreach size: icon_sizes
+  install_data(
+    join_paths(size, 'libpeas-plugin.png'),
+    install_dir: join_paths(
+      iconsdir,
+      'hicolor',
+      size,
+      'actions'
+    )
+  )
+endforeach
+
+install_data(
+  join_paths('scalable', 'libpeas-plugin.svg'),
+  install_dir: join_paths(
+    iconsdir,
+    'hicolor',
+    'scalable',
+    'actions'
+  )
+)
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..59295ae
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,5 @@
+if install_glade_catalog == true
+  subdir('glade')
+endif
+
+subdir('icons')
diff --git a/docs/meson.build b/docs/meson.build
new file mode 100644
index 0000000..c662ff0
--- /dev/null
+++ b/docs/meson.build
@@ -0,0 +1,3 @@
+if build_gtk_doc == true
+  subdir('reference')
+endif
diff --git a/docs/reference/meson.build b/docs/reference/meson.build
new file mode 100644
index 0000000..1e114d4
--- /dev/null
+++ b/docs/reference/meson.build
@@ -0,0 +1,99 @@
+glib_prefix = glib_dep.get_pkgconfig_variable('prefix')
+glib_docpath = join_paths(glib_prefix, 'share', 'gtk-doc', 'html')
+
+gtk_prefix = gtk_dep.get_pkgconfig_variable('prefix')
+gtk_docpath = join_paths(gtk_prefix, 'share', 'gtk-doc', 'html')
+
+libpeas_reference_ignored_h = [
+  'peas-debug.h',
+  'peas-dirs.h',
+  'peas-engine-priv.h',
+  'peas-i18n.h',
+  'peas-introspection.h',
+  'peas-marshal.h',
+  'peas-plugin-info-priv.h',
+  'peas-plugin-loader.h',
+  'peas-plugin-loader-c.h',
+  'peas-utils.h',
+]
+
+libpeas_reference_html_images = [
+]
+
+libpeas_reference_srcdirs = [
+  libpeas_srcdir,
+]
+
+if build_gtk_widgetry == true
+  libpeas_reference_ignored_h += [
+    'peas-gtk-disable-plugins-dialog.h',
+    'peas-gtk-plugin-manager-store.h',
+  ]
+
+  libpeas_reference_html_images += [
+    join_paths('images', 'peas-gtk-plugin-manager.png'),
+  ]
+
+  libpeas_reference_srcdirs += [
+    libpeas_gtk_srcdir,
+  ]
+endif
+
+version_xml = configuration_data()
+version_xml.set('PEAS_VERSION', version)
+
+configure_file(
+  input: 'version.xml.in',
+  output: 'version.xml',
+  configuration: version_xml,
+)
+
+libpeas_reference_deps = [
+  libpeas_dep,
+]
+
+libpeas_reference_scan_args = [
+  '--rebuild-types',
+  '--deprecated-guards="PEAS_DISABLE_DEPRECATED"',
+  '--ignore-headers=' + ' '.join(libpeas_reference_ignored_h),
+]
+
+libpeas_reference_fixxref_args = [
+  '--extra-dir=@0@'.format(join_paths(glib_docpath, 'glib')),
+  '--extra-dir=@0@'.format(join_paths(glib_docpath, 'gobject')),
+  '--extra-dir=@0@'.format(join_paths(glib_docpath, 'gmodule')),
+  '--extra-dir=@0@'.format(join_paths(glib_docpath, 'gio')),
+]
+
+libpeas_reference_mkdb_args = [
+  '--sgml-mode',
+  '--output-format=xml',
+]
+
+if build_gtk_widgetry == true
+  libpeas_reference_deps += [
+    libpeas_gtk_dep,
+  ]
+
+  libpeas_reference_fixxref_args += [
+    '--extra-dir=@0@'.format(join_paths(gtk_docpath, 'gtk')),
+  ]
+endif
+
+gnome.gtkdoc(
+  package_name,
+  main_sgml: 'libpeas-docs.sgml',
+  gobject_typesfile: 'libpeas.types',
+  src_dir: libpeas_reference_srcdirs,
+  html_assets: libpeas_reference_html_images,
+  dependencies: libpeas_reference_deps,
+  scan_args: libpeas_reference_scan_args,
+  fixxref_args: libpeas_reference_fixxref_args,
+  mkdb_args: libpeas_reference_mkdb_args,
+  install: true,
+  install_dir: join_paths(
+    gtkdocdir,
+    'html',
+    package_name,
+  )
+)
diff --git a/libpeas-gtk/meson.build b/libpeas-gtk/meson.build
new file mode 100644
index 0000000..3becc7e
--- /dev/null
+++ b/libpeas-gtk/meson.build
@@ -0,0 +1,101 @@
+libpeas_gtk_srcdir = include_directories('.')
+
+libpeas_gtk_public_h = files(
+  'peas-gtk-autocleanups.h',
+  'peas-gtk-configurable.h',
+  'peas-gtk-plugin-manager.h',
+  'peas-gtk-plugin-manager-view.h',
+  'peas-gtk.h',
+)
+
+libpeas_gtk_c = files(
+  'peas-gtk-configurable.c',
+  'peas-gtk-disable-plugins-dialog.c',
+  'peas-gtk-plugin-manager.c',
+  'peas-gtk-plugin-manager-store.c',
+  'peas-gtk-plugin-manager-view.c',
+)
+
+libpeas_gtk_deps = [
+  glib_dep,
+  gobject_dep,
+  introspection_dep,
+  gtk_dep,
+  libpeas_dep,
+]
+
+libpeas_gtk_c_args = [
+  '-DHAVE_CONFIG_H',
+  '-DG_LOG_DOMAIN="libpeas-gtk"',
+]
+
+libpeas_gtk_link_args = [
+]
+
+install_headers(
+  libpeas_gtk_public_h,
+  install_dir: join_paths(
+    pkgincludedir,
+    package_gtk_name,
+  )
+)
+
+libpeas_gtk_sha = library(
+  package_gtk_string.strip('lib'),
+  libpeas_gtk_c,
+  version: lib_version,
+  include_directories: rootdir,
+  dependencies: libpeas_gtk_deps,
+  c_args: libpeas_gtk_c_args,
+  link_args: libpeas_gtk_link_args,
+  install: true,
+  install_dir: libdir,
+)
+
+libpeas_gtk_dep_sources = []
+
+if generate_gir == true
+  libpeas_gtk_gir_includes = [
+    'GObject-2.0',
+    'Gtk-3.0',
+    libpeas_gir.get(0)
+  ]
+
+  libpeas_gtk_gir = gnome.generate_gir(
+    libpeas_gtk_sha,
+    sources: libpeas_gtk_c + libpeas_gtk_public_h,
+    nsversion: api_version,
+    namespace: 'PeasGtk',
+    symbol_prefix: 'peas_gtk',
+    identifier_prefix: 'PeasGtk',
+    header: 'libpeas-gtk/peas-gtk.h',
+    export_packages: [package_gtk_string],
+    includes: libpeas_gtk_gir_includes,
+    link_with: [libpeas_sha, libpeas_gtk_sha],
+    install: true,
+    install_dir_gir: girdir,
+    install_dir_typelib: typelibdir,
+    extra_args: [
+      '--warn-all',
+    ],
+  )
+
+  libpeas_gtk_dep_sources += [
+    libpeas_gtk_gir,
+  ]
+endif
+
+libpeas_gtk_dep = declare_dependency(
+  link_with: libpeas_gtk_sha,
+  dependencies: libpeas_gtk_deps,
+  include_directories: rootdir,
+  sources: libpeas_gtk_dep_sources,
+)
+
+libpeas_gtk_pc = pkg.generate(
+  libpeas_gtk_sha,
+  name: package_gtk_string,
+  description: 'GObject plugins library widgetery',
+  subdirs: package_gtk_string,
+  install_dir: pkgconfigdir,
+)
diff --git a/libpeas/meson.build b/libpeas/meson.build
new file mode 100644
index 0000000..5af2016
--- /dev/null
+++ b/libpeas/meson.build
@@ -0,0 +1,132 @@
+libpeas_srcdir = include_directories('.')
+
+libpeas_public_h = files(
+  'peas-activatable.h',
+  'peas-autocleanups.h',
+  'peas-engine.h',
+  'peas-extension.h',
+  'peas-extension-base.h',
+  'peas-extension-set.h',
+  'peas-object-module.h',
+  'peas-plugin-info.h',
+  'peas.h',
+)
+
+libpeas_sources = files(
+  'peas-activatable.c',
+  'peas-debug.c',
+  'peas-dirs.c',
+  'peas-engine.c',
+  'peas-extension.c',
+  'peas-extension-base.c',
+  'peas-extension-set.c',
+  'peas-i18n.c',
+  'peas-introspection.c',
+  'peas-object-module.c',
+  'peas-plugin-info.c',
+  'peas-plugin-loader.c',
+  'peas-plugin-loader-c.c',
+  'peas-utils.c',
+)
+
+libpeas_deps = [
+  glib_dep,
+  gobject_dep,
+  gmodule_dep,
+  gio_dep,
+  introspection_dep,
+]
+
+libpeas_c_args = [
+  '-DHAVE_CONFIG_H',
+  '-DG_LOG_DOMAIN="libpeas"',
+  '-DDATADIR="@0@"'.format(datadir),
+  '-DLIBDIR="@0@"'.format(libdir),
+]
+
+libpeas_link_args = [
+]
+
+libpeas_marshal = gnome.genmarshal(
+  'peas-marshal',
+  sources: 'peas-marshal.list',
+  prefix: 'peas_cclosure_marshal',
+  install_header: false,
+)
+
+libpeas_marshals_h = libpeas_marshal.get(1)
+
+libpeas_sources += [
+  libpeas_marshal,
+]
+
+install_headers(
+  libpeas_public_h,
+  install_dir: join_paths(
+    pkgincludedir,
+    package_name,
+  ),
+)
+
+libpeas_sha = library(
+  package_string.strip('lib'),
+  libpeas_sources,
+  version: lib_version,
+  include_directories: rootdir,
+  dependencies: libpeas_deps,
+  c_args: libpeas_c_args,
+  link_args: libpeas_link_args,
+  install: true,
+  install_dir: libdir,
+)
+
+libpeas_dep_sources = [
+  libpeas_marshals_h,
+]
+
+if generate_gir == true
+  libpeas_gir_includes = [
+    'GObject-2.0',
+    'GModule-2.0',
+    'Gio-2.0',
+    'GIRepository-2.0'
+  ]
+
+  libpeas_gir = gnome.generate_gir(
+    libpeas_sha,
+    sources: libpeas_sources + libpeas_public_h,
+    nsversion: api_version,
+    namespace: 'Peas',
+    symbol_prefix: 'peas',
+    identifier_prefix: 'Peas',
+    header: 'libpeas/peas.h',
+    export_packages: [package_string],
+    includes: libpeas_gir_includes,
+    link_with: libpeas_sha,
+    install: true,
+    install_dir_gir: girdir,
+    install_dir_typelib: typelibdir,
+    extra_args: [
+      '--warn-all',
+    ],
+  )
+
+  libpeas_dep_sources += [
+    libpeas_gir,
+  ]
+endif
+
+libpeas_dep = declare_dependency(
+  link_with: libpeas_sha,
+  include_directories: rootdir,
+  dependencies: libpeas_deps,
+  sources: libpeas_dep_sources,
+)
+
+libpeas_pc = pkg.generate(
+  libpeas_sha,
+  name: package_string,
+  description: 'GObject plugins library',
+  subdirs: package_string,
+  install_dir: pkgconfigdir,
+)
diff --git a/loaders/lua5.1/meson.build b/loaders/lua5.1/meson.build
new file mode 100644
index 0000000..9dfe010
--- /dev/null
+++ b/loaders/lua5.1/meson.build
@@ -0,0 +1,41 @@
+lua51_loader_name = 'lua51loader'
+
+lua51_lgi_version = lua51_lgi_dep.version()
+lua51_lgi_version_arr = lua51_lgi_version.split('.')
+lua51_lgi_version_major = lua51_lgi_version_arr[0].to_int()
+lua51_lgi_version_minor = lua51_lgi_version_arr[1].to_int()
+lua51_lgi_version_micro = lua51_lgi_version_arr[2].to_int()
+
+lua51_loader_c = files(
+  'peas-lua-internal.c',
+  'peas-lua-utils.c',
+  'peas-plugin-loader-lua.c',
+)
+
+subdir('resources') # Declares 'lua51_loader_res'
+
+lua51_loader_deps = [
+  libpeas_dep,
+  lua51_dep,
+  lua51_lgi_dep,
+]
+
+lua51_loader_c_args = [
+  '-DHAVE_CONFIG_H',
+  '-DLGI_MAJOR_VERSION=@0@'.format(lua51_lgi_version_major),
+  '-DLGI_MINOR_VERSION=@0@'.format(lua51_lgi_version_minor),
+  '-DLGI_MICRO_VERSION=@0@'.format(lua51_lgi_version_micro),
+]
+
+lua51_loader_sha = shared_library(
+  lua51_loader_name,
+  lua51_loader_c + lua51_loader_res,
+  include_directories: rootdir,
+  dependencies: lua51_loader_deps,
+  c_args: lua51_loader_c_args,
+  install: true,
+  install_dir: join_paths(
+    pkglibdir,
+    'loaders',
+  )
+)
diff --git a/loaders/lua5.1/resources/meson.build b/loaders/lua5.1/resources/meson.build
new file mode 100644
index 0000000..8f7f6c6
--- /dev/null
+++ b/loaders/lua5.1/resources/meson.build
@@ -0,0 +1,5 @@
+lua51_loader_res = gnome.compile_resources(
+  'peas-lua-resources',
+  'peas-lua.gresource.xml',
+  export: true,
+)
diff --git a/loaders/meson.build b/loaders/meson.build
new file mode 100644
index 0000000..7b9ce98
--- /dev/null
+++ b/loaders/meson.build
@@ -0,0 +1,11 @@
+if build_lua51_loader == true
+  subdir('lua5.1')
+endif
+
+if build_python3_loader == true
+  subdir('python')
+endif
+
+if build_python3_loader == true
+  subdir('python3')
+endif
diff --git a/loaders/python/meson.build b/loaders/python/meson.build
new file mode 100644
index 0000000..89346a2
--- /dev/null
+++ b/loaders/python/meson.build
@@ -0,0 +1,45 @@
+python2_loader_name = 'python2loader'
+
+pygobject_version = pygobject_dep.version()
+pygobject_version_arr = pygobject_version.split('.')
+pygobject_version_major = pygobject_version_arr[0].to_int()
+pygobject_version_minor = pygobject_version_arr[1].to_int()
+pygobject_version_micro = pygobject_version_arr[2].to_int()
+
+python2_loader_c = files(
+  'peas-plugin-loader-python.c',
+  'peas-python-internal.c',
+)
+
+python2_loader_res = gnome.compile_resources(
+  'peas-python-resources',
+  'peas-python.gresource.xml',
+  export: true,
+)
+
+python2_loader_deps = [
+  libpeas_dep,
+  python2_dep,
+  pygobject_dep,
+]
+
+python2_loader_c_args = [
+  '-DHAVE_CONFIG_H',
+  '-DPEAS_LOCALEDIR="@0@"'.format(localedir),
+  '-DPYGOBJECT_MAJOR_VERSION=@0@'.format(pygobject_version_major),
+  '-DPYGOBJECT_MINOR_VERSION=@0@'.format(pygobject_version_minor),
+  '-DPYGOBJECT_MICRO_VERSION=@0@'.format(pygobject_version_micro),
+]
+
+python2_loader_sha = shared_library(
+  python2_loader_name,
+  python2_loader_c + python2_loader_res,
+  include_directories: rootdir,
+  dependencies: python2_loader_deps,
+  c_args: python2_loader_c_args,
+  install: true,
+  install_dir: join_paths(
+    pkglibdir,
+    'loaders',
+  )
+)
diff --git a/loaders/python3/meson.build b/loaders/python3/meson.build
new file mode 100644
index 0000000..5b350a0
--- /dev/null
+++ b/loaders/python3/meson.build
@@ -0,0 +1,45 @@
+python3_loader_name = 'python3loader'
+
+pygobject_version = pygobject_dep.version()
+pygobject_version_arr = pygobject_version.split('.')
+pygobject_version_major = pygobject_version_arr[0].to_int()
+pygobject_version_minor = pygobject_version_arr[1].to_int()
+pygobject_version_micro = pygobject_version_arr[2].to_int()
+
+python3_loader_c = files(
+  '../python/peas-plugin-loader-python.c',
+  '../python/peas-python-internal.c',
+)
+
+python3_loader_res = gnome.compile_resources(
+  'peas-python2-resources',
+  'peas-python3.gresource.xml',
+  export: true,
+)
+
+python3_loader_deps = [
+  libpeas_dep,
+  python3_dep,
+  pygobject_dep,
+]
+
+python3_loader_c_args = [
+  '-DHAVE_CONFIG_H',
+  '-DPEAS_LOCALEDIR="@0@"'.format(localedir),
+  '-DPYGOBJECT_MAJOR_VERSION=@0@'.format(pygobject_version_major),
+  '-DPYGOBJECT_MINOR_VERSION=@0@'.format(pygobject_version_minor),
+  '-DPYGOBJECT_MICRO_VERSION=@0@'.format(pygobject_version_micro),
+]
+
+python3_loader_sha = shared_library(
+  python3_loader_name,
+  python3_loader_c + python3_loader_res,
+  include_directories: rootdir,
+  dependencies: python3_loader_deps,
+  c_args: python3_loader_c_args,
+  install: true,
+  install_dir: join_paths(
+    pkglibdir,
+    'loaders',
+  )
+)
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..50abace
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,218 @@
+project(
+  'libpeas', 'c',
+  version: '1.22.0',
+  license: 'LGPLv2.1+',
+  meson_version: '>= 0.49.0',
+  default_options: [
+    'buildtype=debugoptimized',
+  ]
+)
+
+gnome = import('gnome')
+i18n = import('i18n')
+pkg = import('pkgconfig')
+
+# Versioning
+version = meson.project_version()
+version_arr = version.split('.')
+version_major = version_arr[0].to_int()
+version_minor = version_arr[1].to_int()
+version_micro = version_arr[2].to_int()
+
+api_version = '@0@.0'.format(version_major)
+
+if version_minor.is_odd()
+  interface_age = 0
+else
+  interface_age = version_micro
+endif
+
+# Compatibility with libtool versioning:
+#  current = minor * 100 + micro - interface
+#  revision = interface
+lib_version_soversion = version_major
+lib_version_current = version_minor * 100 + version_micro - interface_age
+lib_version_revision = interface_age
+lib_version = '@0@.@1@.@2@'.format(
+  lib_version_soversion,
+  lib_version_current,
+  lib_version_revision
+)
+
+package_name = meson.project_name()
+package_string = '@0@-@1@'.format(package_name, api_version)
+package_long_string = '@0@-@1@'.format(package_name, version)
+package_gtk_name = '@0@-gtk'.format(meson.project_name())
+package_gtk_string = '@0@-@1@'.format(package_gtk_name, api_version)
+
+# Paths
+rootdir = include_directories('.')
+srcdir = meson.current_source_dir()
+builddir = meson.current_build_dir()
+
+prefix = get_option('prefix')
+
+includedir = join_paths(prefix, get_option('includedir'))
+libdir = join_paths(prefix, get_option('libdir'))
+datadir = join_paths(prefix, get_option('datadir'))
+localedir = join_paths(prefix, get_option('localedir'))
+
+pkgincludedir = join_paths(includedir, package_string)
+pkglibdir = join_paths(libdir, package_string)
+pkgdatadir = join_paths(datadir, package_string)
+
+girdir = join_paths(datadir, 'gir-1.0')
+gtkdocdir = join_paths(datadir, 'gtk-doc')
+iconsdir = join_paths(datadir, 'icons')
+pkgconfigdir = join_paths(libdir, 'pkgconfig')
+typelibdir = join_paths(libdir, 'girepository-1.0')
+
+# Configurations
+config_h = configuration_data()
+config_h.set_quoted('PACKAGE', package_name)
+config_h.set_quoted('PACKAGE_BUGREPORT', 'http://bugzilla.gnome.org/enter_bug.cgi?product=libpeas')
+config_h.set_quoted('PACKAGE_NAME', package_name)
+config_h.set_quoted('PACKAGE_STRING', package_long_string)
+config_h.set_quoted('PACKAGE_URL', 'https://wiki.gnome.org/Projects/Libpeas')
+config_h.set_quoted('PACKAGE_URL', 'https://wiki.gnome.org/Projects/Libpeas')
+config_h.set_quoted('PACKAGE_VERSION', version)
+config_h.set_quoted('VERSION', version)
+
+config_h.set_quoted('GETTEXT_PACKAGE', package_string)
+
+# Dependencies
+cc = meson.get_compiler('c')
+
+glib_req = '>= 2.38.0'
+introspection_req = '>= 1.39.0'
+gtk_req = '>= 3.0.0'
+gtk_doc_req = '>= 1.11'
+python2_req = '>= 2.5.2'
+python3_req = '>= 3.2.0'
+pygobject_req = '>= 3.2.0'
+lua_req = '>= 5.1.0'
+lua_lgi_req = '>= 0.9.0'
+luajit_req = '>= 2.0'
+
+glib_dep = dependency('glib-2.0', version: glib_req)
+gobject_dep = dependency('gobject-2.0', version: glib_req)
+gmodule_dep = dependency('gmodule-2.0', version: glib_req)
+gio_dep = dependency('gio-2.0', version: glib_req)
+introspection_dep = dependency('gobject-introspection-1.0', version: introspection_req)
+gtk_dep = dependency('gtk+-3.0', version: gtk_req, required: false)
+
+gtk_doc_dep = dependency('gtk-doc', version: gtk_doc_req, required: false)
+gladeui_dep = dependency('gladeui-2.0', required: false)
+
+python2_dep = dependency('python2', version: python2_req, required: false)
+python3_dep = dependency('python3', version: python3_req, required: false)
+pygobject_dep = dependency('pygobject-3.0', version: pygobject_req, required: false)
+lua51_dep = dependency('lua5.1', version: lua_req, required: false)
+lua51_lgi_dep = dependency('lua5.1-lgi', version: lua_lgi_req, required: false)
+luajit_dep = dependency('luajit', version: luajit_req, required: false)
+
+luajit_prg = find_program('luajit', required: false)
+xmllint_prg = find_program('xmllint', required: false)
+
+if build_machine.system() == 'darwin'
+  config_h.set_quoted('OS_OSX', 1)
+endif
+
+configure_file(
+  output: 'config.h',
+  configuration: config_h
+)
+
+# Options
+build_gtk_doc = get_option('gtk_doc')
+if build_gtk_doc and not gtk_doc_dep.found()
+  build_gtk_doc = false
+endif
+
+install_glade_catalog = get_option('glade_catalog')
+if install_glade_catalog and not gladeui_dep.found()
+  install_glade_catalog = false
+elif install_glade_catalog == true
+  catalogdir = join_paths(datadir, 'glade', 'catalogs')
+# FIXME: In gladeui-2.0.pc, catalogdir should be relative to datadir:
+# https://gitlab.gnome.org/GNOME/glade/issues/353
+#   catalogdir = gladeui_dep.get_pkgconfig_variable(
+#     'catalogdir',
+#     define_variable: [
+#       'datadir', datadir,
+#     ]
+#   )
+endif
+
+build_gtk_widgetry = get_option('widgetry')
+if build_gtk_widgetry and not gtk_dep.found()
+  build_gtk_widgetry = false
+endif
+
+build_demos = get_option('widgetry')
+if build_demos and not build_gtk_widgetry
+  build_demos = false
+endif
+
+generate_gir = get_option('introspection')
+if generate_gir and not introspection_dep.found()
+  generate_gir = false
+endif
+
+build_lua51_loader = get_option('lua51')
+lua51_found = lua51_dep.found() and lua51_lgi_dep.found()
+if build_lua51_loader and not lua51_found
+  build_lua51_loader = false
+endif
+
+build_python2_loader = get_option('python2')
+python2_found = python2_dep.found() and pygobject_dep.found()
+if build_python2_loader and not python2_found
+  build_python2_loader = false
+endif
+
+build_python3_loader = get_option('python2')
+python3_found = python3_dep.found() and pygobject_dep.found()
+if build_python3_loader and not python3_found
+  build_python3_loader = false
+endif
+
+subdir('libpeas')
+if build_gtk_widgetry == true
+  subdir('libpeas-gtk')
+endif
+
+subdir('docs')
+subdir('data')
+subdir('po')
+
+subdir('loaders')
+
+if build_demos == true
+  subdir('peas-demo')
+endif
+subdir('tests')
+
+summary = [
+  '',
+  '------',
+  'libpeas @0@ (@1@)'.format(version, api_version),
+  '',
+  '             Demos: @0@'.format(build_demos),
+  '     Documentation: @0@'.format(build_gtk_doc),
+  '     Glade catalog: @0@'.format(install_glade_catalog),
+  '     GTK+ widgetry: @0@'.format(build_gtk_widgetry),
+  '     Introspection: @0@'.format(generate_gir),
+  '   Lua 5.1 support: @0@'.format(build_lua51_loader),
+  '  Python 2 support: @0@'.format(build_python2_loader),
+  '  Python 3 support: @0@'.format(build_python3_loader),
+  '',
+  'Directories:',
+  '            prefix: @0@'.format(prefix),
+  '        includedir: @0@'.format(includedir),
+  '            libdir: @0@'.format(libdir),
+  '           datadir: @0@'.format(datadir),
+  '------',
+]
+
+message('\n'.join(summary))
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..18e1779
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,32 @@
+option('lua51',
+       type: 'boolean', value: true,
+       description: 'Enable Lua 5.1 support (requires lua-lgi)')
+
+option('python2',
+       type: 'boolean', value: false,
+       description: 'Enable Python 2 support (requires pygobject)')
+option('python3',
+       type: 'boolean', value: true,
+       description: 'Enable Python 3 support (requires pygobject)')
+
+option('introspection',
+       type: 'boolean', value: true,
+       description: 'Generate introspection data (requires gobject-introspection)')
+option('vapi',
+       type: 'boolean', value: false,
+       description: 'Generate vapi data (requires vapigen)')
+
+option('widgetry',
+       type: 'boolean', value: true,
+       description: 'Build GTK+ widgetry (requires gtk+)')
+option('glade_catalog',
+       type: 'boolean', value: true,
+       description: 'Install Glade catalog (requires gladeui)')
+
+option('demos',
+       type: 'boolean', value: true,
+       description: 'Build demo programs')
+
+option('gtk_doc',
+       type: 'boolean', value: false,
+       description: 'Build reference manual (requires gtk-doc)')
diff --git a/peas-demo/meson.build b/peas-demo/meson.build
new file mode 100644
index 0000000..8441999
--- /dev/null
+++ b/peas-demo/meson.build
@@ -0,0 +1,23 @@
+peas_demo_name = 'peas-demo'
+peas_demo_string = '@0@-@1@'.format(peas_demo_name, api_version)
+
+peas_demo_c = [
+  'peas-demo-window.c',
+  'peas-demo.c',
+]
+
+peas_demo_c_args = [
+  '-DHAVE_CONFIG_H',
+  '-DPEAS_BUILDDIR="@0@"'.format(builddir),
+  '-DPEAS_PREFIX="@0@"'.format(prefix),
+  '-DPEAS_LIBDIR="@0@"'.format(libdir),
+]
+
+executable(
+  peas_demo_string,
+  peas_demo_c,
+  c_args: peas_demo_c_args,
+  dependencies: [libpeas_gtk_dep],
+)
+
+subdir('plugins')
diff --git a/peas-demo/plugins/helloworld/meson.build b/peas-demo/plugins/helloworld/meson.build
new file mode 100644
index 0000000..6d2ea95
--- /dev/null
+++ b/peas-demo/plugins/helloworld/meson.build
@@ -0,0 +1,31 @@
+libhelloworld_name = 'helloworld'
+
+libhelloworld_c = [
+  'peasdemo-hello-world-configurable.c',
+  'peasdemo-hello-world-plugin.c',
+]
+
+libhelloworld_plugin_data = [
+  'helloworld.plugin',
+]
+
+libhelloworld_c_args = [
+  '-DHAVE_CONFIG_H',
+]
+
+libhelloworld_lib = shared_library(
+  libhelloworld_name,
+  libhelloworld_c,
+  include_directories: rootdir,
+  dependencies: [gtk_dep, libpeas_gtk_dep],
+  c_args: libhelloworld_c_args,
+  install: false,
+)
+
+custom_target(
+  'lib@0@-data'.format(libhelloworld_name),
+  input: libhelloworld_plugin_data,
+  output: libhelloworld_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/peas-demo/plugins/luahello/meson.build b/peas-demo/plugins/luahello/meson.build
new file mode 100644
index 0000000..72d90cc
--- /dev/null
+++ b/peas-demo/plugins/luahello/meson.build
@@ -0,0 +1,14 @@
+luahello_name = 'luahello'
+
+luahello_plugin_data = [
+  'luahello.lua',
+  'luahello.plugin',
+]
+
+custom_target(
+  '@0@-data'.format(luahello_name),
+  input: luahello_plugin_data,
+  output: luahello_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/peas-demo/plugins/meson.build b/peas-demo/plugins/meson.build
new file mode 100644
index 0000000..c2c343f
--- /dev/null
+++ b/peas-demo/plugins/meson.build
@@ -0,0 +1,11 @@
+subdir('helloworld')
+
+if build_lua51_loader == true
+  subdir('luahello')
+endif
+
+if build_python3_loader == true
+  subdir('pythonhello')
+endif
+
+subdir('secondtime')
diff --git a/peas-demo/plugins/pythonhello/meson.build b/peas-demo/plugins/pythonhello/meson.build
new file mode 100644
index 0000000..d3fbf1d
--- /dev/null
+++ b/peas-demo/plugins/pythonhello/meson.build
@@ -0,0 +1,14 @@
+pythonhello_name = 'pythonhello'
+
+pythonhello_plugin_data = [
+  'pythonhello.py',
+  'pythonhello.plugin',
+]
+
+custom_target(
+  '@0@-data'.format(pythonhello_name),
+  input: pythonhello_plugin_data,
+  output: pythonhello_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/peas-demo/plugins/secondtime/meson.build b/peas-demo/plugins/secondtime/meson.build
new file mode 100644
index 0000000..6d4716e
--- /dev/null
+++ b/peas-demo/plugins/secondtime/meson.build
@@ -0,0 +1,30 @@
+libsecondtime_name = 'secondtime'
+
+libsecondtime_c = [
+  'second-time.c',
+]
+
+libsecondtime_plugin_data = [
+  'secondtime.plugin',
+]
+
+libsecondtime_c_args = [
+  '-DHAVE_CONFIG_H',
+]
+
+libsecondtime_lib = shared_library(
+  libsecondtime_name,
+  libsecondtime_c,
+  include_directories: rootdir,
+  dependencies: [gtk_dep, libpeas_dep],
+  c_args: libsecondtime_c_args,
+  install: false,
+)
+
+custom_target(
+  'lib@0@-data'.format(libsecondtime_name),
+  input: libsecondtime_plugin_data,
+  output: libsecondtime_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 0000000..9aca128
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1,4 @@
+i18n.gettext(
+  package_string,
+  preset: 'glib',
+)
diff --git a/tests/libpeas-gtk/meson.build b/tests/libpeas-gtk/meson.build
new file mode 100644
index 0000000..1faafa6
--- /dev/null
+++ b/tests/libpeas-gtk/meson.build
@@ -0,0 +1,33 @@
+
+libpeas_gtk_tests_sources = [
+  ['plugin-manager'],
+  ['plugin-manager-store'],
+  ['plugin-manager-view'],
+]
+
+subdir('testing')
+
+subdir('plugins')
+
+libpeas_gtk_tests_deps = [
+  glib_dep,
+  gtk_dep,
+  libpeas_dep,
+  libpeas_gtk_dep,
+
+  libtesting_util_dep,
+  libpeas_gtk_testing_dep,
+]
+
+foreach test: libpeas_gtk_tests_sources
+  test_name = test.get(0)
+  test_sources = ['@0@.c'.format(test_name)]
+
+  test_exe = executable(
+    test_name,
+    test_sources,
+    dependencies: libpeas_gtk_tests_deps
+  )
+
+  test('test-@0@'.format(test_name), test_exe)
+endforeach
diff --git a/tests/libpeas-gtk/plugins/builtin-configurable/meson.build 
b/tests/libpeas-gtk/plugins/builtin-configurable/meson.build
new file mode 100644
index 0000000..c967f5d
--- /dev/null
+++ b/tests/libpeas-gtk/plugins/builtin-configurable/meson.build
@@ -0,0 +1,37 @@
+libbuiltin_configurable_name = 'builtin-configurable'
+
+libbuiltin_configurable_public_h = [
+  'builtin-configurable.h',
+]
+
+libbuiltin_configurable_c = [
+  'builtin-configurable.c',
+]
+
+libbuiltin_configurable_plugin_data = [
+  'builtin-configurable.plugin',
+]
+
+libbuiltin_configurable_deps = [
+  glib_dep,
+  gobject_dep,
+  gmodule_dep,
+  libpeas_dep,
+  libpeas_gtk_dep,
+]
+
+libbuiltin_configurable_lib = shared_library(
+  libbuiltin_configurable_name,
+  libbuiltin_configurable_c,
+  include_directories: rootdir,
+  dependencies: libbuiltin_configurable_deps,
+  install: false,
+)
+
+custom_target(
+  'lib@0@-data'.format(libbuiltin_configurable_name),
+  input: libbuiltin_configurable_plugin_data,
+  output: libbuiltin_configurable_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/tests/libpeas-gtk/plugins/configurable/meson.build 
b/tests/libpeas-gtk/plugins/configurable/meson.build
new file mode 100644
index 0000000..553066b
--- /dev/null
+++ b/tests/libpeas-gtk/plugins/configurable/meson.build
@@ -0,0 +1,37 @@
+libconfigurable_name = 'configurable'
+
+libconfigurable_public_h = [
+  'configurable-plugin.h',
+]
+
+libconfigurable_c = [
+  'configurable-plugin.c',
+]
+
+libconfigurable_plugin_data = [
+  'configurable.plugin',
+]
+
+libconfigurable_deps = [
+  glib_dep,
+  gobject_dep,
+  gmodule_dep,
+  libpeas_dep,
+  libpeas_gtk_dep,
+]
+
+libconfigurable_lib = shared_library(
+  libconfigurable_name,
+  libconfigurable_c,
+  include_directories: rootdir,
+  dependencies: libconfigurable_deps,
+  install: false,
+)
+
+custom_target(
+  'lib@0@-data'.format(libconfigurable_name),
+  input: libconfigurable_plugin_data,
+  output: libconfigurable_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/tests/libpeas-gtk/plugins/meson.build b/tests/libpeas-gtk/plugins/meson.build
new file mode 100644
index 0000000..432607f
--- /dev/null
+++ b/tests/libpeas-gtk/plugins/meson.build
@@ -0,0 +1,18 @@
+libpeas_gtk_plugins_data = [
+  'hidden.plugin',
+  'invalid-custom-icon.plugin',
+  'invalid-stock-icon.plugin',
+  'valid-stock-icon.plugin',
+]
+
+custom_target(
+  'libpeas-gtk-test-data',
+  input: libpeas_gtk_plugins_data,
+  output: libpeas_gtk_plugins_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
+
+subdir('builtin-configurable')
+subdir('configurable')
+subdir('valid-custom-icon')
diff --git a/tests/libpeas-gtk/plugins/valid-custom-icon/meson.build 
b/tests/libpeas-gtk/plugins/valid-custom-icon/meson.build
new file mode 100644
index 0000000..b5ec576
--- /dev/null
+++ b/tests/libpeas-gtk/plugins/valid-custom-icon/meson.build
@@ -0,0 +1,14 @@
+valid_custom_icon_name = 'valid-custom-icon'
+
+valid_custom_icon_plugin_data = [
+  'exists.png',
+  'valid-custom-icon.plugin',
+]
+
+custom_target(
+  '@0@-data'.format(valid_custom_icon_name),
+  input: valid_custom_icon_plugin_data,
+  output: valid_custom_icon_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/tests/libpeas-gtk/testing/meson.build b/tests/libpeas-gtk/testing/meson.build
new file mode 100644
index 0000000..62fd54d
--- /dev/null
+++ b/tests/libpeas-gtk/testing/meson.build
@@ -0,0 +1,44 @@
+libpeas_gtk_testing_name = 'libpeas-gtk-testing'
+libpeas_gtk_testing_string = '@0@-@1@'.format(libpeas_gtk_testing_name, api_version)
+
+libpeas_gtk_testing_public_h = [
+  'testing.h',
+]
+
+libpeas_gtk_testing_c = [
+  'testing.c',
+]
+
+libpeas_gtk_testing_deps = [
+  glib_dep,
+  introspection_dep,
+  libpeas_dep,
+  libpeas_gtk_dep,
+  libtesting_util_dep,
+]
+
+libpeas_gtk_testing_c_args = [
+  '-DHAVE_CONFIG_H',
+  '-DBUILDDIR="@0@"'.format(builddir),
+  '-DSRCDIR="@0@"'.format(srcdir),
+]
+
+libpeas_gtk_testing_link_args = [
+  '-export-dynamic',
+]
+
+libpeas_gtk_testing_lib = library(
+  libpeas_gtk_testing_string,
+  libpeas_gtk_testing_c,
+  include_directories: rootdir,
+  dependencies: libpeas_gtk_testing_deps,
+  c_args: libpeas_gtk_testing_c_args,
+  link_args: libpeas_gtk_testing_link_args,
+  install: false,
+)
+
+libpeas_gtk_testing_dep = declare_dependency(
+  link_with: libpeas_gtk_testing_lib,
+  include_directories: include_directories('.'),
+  dependencies: libpeas_gtk_testing_deps,
+)
diff --git a/tests/libpeas/introspection/meson.build b/tests/libpeas/introspection/meson.build
new file mode 100644
index 0000000..2cb4628
--- /dev/null
+++ b/tests/libpeas/introspection/meson.build
@@ -0,0 +1,71 @@
+libintrospection_name = 'introspection'
+libintrospection_string = '@0@-@1@'.format(libintrospection_name, api_version)
+
+libintrospection_public_h = [
+  'introspection-abstract.h',
+  'introspection-base.h',
+  'introspection-callable.h',
+  'introspection-has-prerequisite.h',
+  'introspection-prerequisite.h',
+  'introspection-unimplemented.h',
+]
+
+libintrospection_c = [
+  'introspection-abstract.c',
+  'introspection-base.c',
+  'introspection-callable.c',
+  'introspection-has-prerequisite.c',
+  'introspection-prerequisite.c',
+  'introspection-unimplemented.c',
+]
+
+libintrospection_deps = [
+  glib_dep,
+  gobject_dep,
+  libpeas_dep,
+]
+
+libintrospection_c_args = [
+  '-DHAVE_CONFIG_H',
+]
+
+libintrospection_link_args = [
+  '-export-dynamic',
+]
+
+libintrospection_lib = library(
+  libintrospection_string,
+  libintrospection_c,
+  include_directories: rootdir,
+  dependencies: libintrospection_deps,
+  c_args: libintrospection_c_args,
+  link_args: libintrospection_link_args,
+  install: false,
+)
+
+libintrospection_dep = declare_dependency(
+  link_with: libintrospection_lib,
+  include_directories: include_directories('.'),
+  dependencies: libintrospection_deps,
+)
+
+libintrospection_gir = gnome.generate_gir(
+  libintrospection_lib,
+  sources: libintrospection_c + libintrospection_public_h,
+  nsversion: api_version,
+  namespace: 'Introspection',
+  symbol_prefix: 'introspection',
+  identifier_prefix: 'Introspection',
+  dependencies: [libintrospection_dep],
+  export_packages: [libintrospection_string],
+  link_with: libintrospection_lib,
+  includes: ['GObject-2.0', libpeas_gir.get(0)],
+  install: false,
+  extra_args: [
+    '--warn-all',
+  ],
+)
+
+libintrospection_gir_dep = declare_dependency(
+  sources: libintrospection_gir
+)
diff --git a/tests/libpeas/meson.build b/tests/libpeas/meson.build
new file mode 100644
index 0000000..0c82d80
--- /dev/null
+++ b/tests/libpeas/meson.build
@@ -0,0 +1,57 @@
+
+libpeas_tests_sources = [
+  ['engine'],
+  ['extension-c'],
+  ['extension-set'],
+  ['plugin-info'],
+]
+
+libpeas_tests_c_args = []
+
+if build_lua51_loader == true
+  libpeas_tests_sources += [['extension-lua', [lua51_dep]]]
+endif
+
+if build_python3_loader == true
+  libpeas_tests_sources += [['extension-py', [python3_dep, pygobject_dep]]]
+
+  libpeas_tests_c_args += [
+    '-DPYGOBJECT_MAJOR_VERSION=@0@'.format(pygobject_version_major),
+    '-DPYGOBJECT_MINOR_VERSION=@0@'.format(pygobject_version_minor),
+    '-DPYGOBJECT_MICRO_VERSION=@0@'.format(pygobject_version_micro),
+  ]
+endif
+
+subdir('introspection')
+subdir('testing')
+
+subdir('plugins')
+
+libpeas_tests_deps = [
+  glib_dep,
+  libpeas_dep,
+  libintrospection_dep,
+  libintrospection_gir_dep,
+  libtesting_util_dep,
+  libpeas_testing_dep,
+  libembedded_dep,
+]
+
+foreach test: libpeas_tests_sources
+  test_name = test.get(0)
+  test_sources = ['@0@.c'.format(test_name)]
+  test_deps = libpeas_tests_deps
+
+  if test.length() > 1
+    test_deps += test.get(1)
+  endif
+
+  test_exe = executable(
+    test_name,
+    test_sources,
+    dependencies: test_deps,
+    c_args: libpeas_tests_c_args,
+  )
+
+  test('test-@0@'.format(test_name), test_exe)
+endforeach
diff --git a/tests/libpeas/plugins/embedded/meson.build b/tests/libpeas/plugins/embedded/meson.build
new file mode 100644
index 0000000..b56c0c9
--- /dev/null
+++ b/tests/libpeas/plugins/embedded/meson.build
@@ -0,0 +1,52 @@
+libembedded_name = 'embedded'
+
+libembedded_public_h = [
+  'embedded-plugin.h',
+]
+
+libembedded_c = [
+  'embedded-plugin.c',
+]
+
+libembedded_plugin_data = [
+  'embedded.gresource.xml',
+  'embedded.plugin',
+  'embedded-invalid-loader.plugin',
+  'embedded-missing-symbol.plugin',
+]
+
+libembedded_res = gnome.compile_resources(
+  'embedded-resources',
+  'embedded.gresource.xml',
+  export: true,
+  extra_args: [
+    '--manual-register',
+  ],
+)
+
+libembedded_deps = [
+  glib_dep,
+  libpeas_dep,
+]
+
+libembedded_lib = shared_library(
+  libembedded_name,
+  libembedded_c + libembedded_res,
+  include_directories: rootdir,
+  dependencies: libembedded_deps,
+  install: false,
+)
+
+libembedded_dep = declare_dependency(
+  link_with: libembedded_lib,
+  include_directories: include_directories('.'),
+  dependencies: libembedded_deps,
+)
+
+custom_target(
+  '@0@-data'.format(libembedded_name),
+  input: libembedded_plugin_data,
+  output: libembedded_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/tests/libpeas/plugins/extension-c/meson.build b/tests/libpeas/plugins/extension-c/meson.build
new file mode 100644
index 0000000..ab03c4c
--- /dev/null
+++ b/tests/libpeas/plugins/extension-c/meson.build
@@ -0,0 +1,64 @@
+libextension_c_name = 'extension-c'
+libextension_c_missing_name = 'extension-c-missing-symbol'
+
+libextension_c_public_h = [
+  'extension-c-abstract.h',
+  'extension-c-plugin.h',
+]
+
+libextension_c_c = [
+  'extension-c-abstract.c',
+  'extension-c-plugin.c',
+]
+
+libextension_c_plugin_data = [
+  'extension-c.gschema.xml',
+  'extension-c.plugin',
+]
+
+libextension_c_deps = [
+  glib_dep,
+  gmodule_dep,
+  libpeas_dep,
+  libintrospection_dep,
+]
+
+libextension_c_lib = shared_library(
+  libextension_c_name,
+  libextension_c_c,
+  include_directories: rootdir,
+  dependencies: libextension_c_deps,
+  install: false,
+)
+
+custom_target(
+  'lib@0@-data'.format(libextension_c_name),
+  input: libextension_c_plugin_data,
+  output: libextension_c_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
+
+libextension_c_missing_c = [
+  'extension-c-missing-symbol-plugin.c',
+]
+
+libextension_c_missing_plugin_data = [
+  'extension-c-missing-symbol.plugin',
+]
+
+libextension_c_missing_lib = shared_library(
+  libextension_c_missing_name,
+  libextension_c_missing_c,
+  include_directories: rootdir,
+  dependencies: libextension_c_deps,
+  install: false,
+)
+
+custom_target(
+  'lib@0@-data'.format(libextension_c_missing_name),
+  input: libextension_c_missing_plugin_data,
+  output: libextension_c_missing_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/tests/libpeas/plugins/extension-lua/meson.build b/tests/libpeas/plugins/extension-lua/meson.build
new file mode 100644
index 0000000..f113a39
--- /dev/null
+++ b/tests/libpeas/plugins/extension-lua/meson.build
@@ -0,0 +1,15 @@
+extension_lua_name = 'extension-lua'
+
+extension_lua_plugin_data = [
+  'extension-lua51.gschema.xml',
+  'extension-lua51.lua',
+  'extension-lua51.plugin',
+]
+
+custom_target(
+  '@0@-data'.format(extension_lua_name),
+  input: extension_lua_plugin_data,
+  output: extension_lua_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/tests/libpeas/plugins/extension-python/meson.build 
b/tests/libpeas/plugins/extension-python/meson.build
new file mode 100644
index 0000000..16e29fd
--- /dev/null
+++ b/tests/libpeas/plugins/extension-python/meson.build
@@ -0,0 +1,49 @@
+extension_python_name = 'extension-python'
+
+python2_in = configuration_data()
+python2_in.set('PY_LOADER', 'python')
+
+configure_file(
+  input: 'extension-py.gschema.xml.in',
+  output: 'extension-python.gschema.xml',
+  configuration: python2_in,
+  install: false,
+)
+
+configure_file(
+  input: 'extension-py.plugin.in',
+  output: 'extension-python.plugin',
+  configuration: python2_in,
+  install: false,
+)
+
+configure_file(
+  input: 'extension-py.py.in',
+  output: 'extension-python.py',
+  configuration: python2_in,
+  install: false,
+)
+
+python3_in = configuration_data()
+python3_in.set('PY_LOADER', 'python3')
+
+configure_file(
+  input: 'extension-py.gschema.xml.in',
+  output: 'extension-python3.gschema.xml',
+  configuration: python3_in,
+  install: false,
+)
+
+configure_file(
+  input: 'extension-py.plugin.in',
+  output: 'extension-python3.plugin',
+  configuration: python3_in,
+  install: false,
+)
+
+configure_file(
+  input: 'extension-py.py.in',
+  output: 'extension-python3.py',
+  configuration: python3_in,
+  install: false,
+)
diff --git a/tests/libpeas/plugins/meson.build b/tests/libpeas/plugins/meson.build
new file mode 100644
index 0000000..babe693
--- /dev/null
+++ b/tests/libpeas/plugins/meson.build
@@ -0,0 +1,33 @@
+libpeas_plugins_data = [
+  'extension-c-nonexistent.plugin',
+  'extension-lua51-nonexistent.plugin',
+  'extension-python-nonexistent.plugin',
+  'extension-python3-nonexistent.plugin',
+  'info-missing-module.plugin',
+  'info-missing-name.plugin',
+  'invalid.plugin',
+  'nonexistent-dep.plugin',
+  'not-loadable.plugin',
+  'os-dependant-help.plugin',
+  'two-deps.plugin',
+  'unkown-loader.plugin',
+]
+
+custom_target(
+  'libpeas-test-data',
+  input: libpeas_plugins_data,
+  output: libpeas_plugins_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
+
+subdir('embedded')
+subdir('extension-c')
+
+if build_lua51_loader == true
+  subdir('extension-lua')
+endif
+
+if build_python3_loader == true
+  subdir('extension-python')
+endif
diff --git a/tests/libpeas/testing/meson.build b/tests/libpeas/testing/meson.build
new file mode 100644
index 0000000..2dd3d7b
--- /dev/null
+++ b/tests/libpeas/testing/meson.build
@@ -0,0 +1,46 @@
+libpeas_testing_name = 'libpeas-testing'
+libpeas_testing_string = '@0@-@1@'.format(libpeas_testing_name, api_version)
+
+libpeas_testing_public_h = [
+  'testing.h',
+  'testing-extension.h',
+]
+
+libpeas_testing_c = [
+  'testing.c',
+  'testing-extension.c',
+]
+
+libpeas_testing_deps = [
+  glib_dep,
+  introspection_dep,
+  libpeas_dep,
+  libtesting_util_dep,
+  libintrospection_dep,
+]
+
+libpeas_testing_c_args = [
+  '-DHAVE_CONFIG_H',
+  '-DBUILDDIR="@0@"'.format(builddir),
+  '-DSRCDIR="@0@"'.format(srcdir),
+]
+
+libpeas_testing_link_args = [
+  '-export-dynamic',
+]
+
+libpeas_testing_lib = library(
+  libpeas_testing_string,
+  libpeas_testing_c,
+  include_directories: rootdir,
+  dependencies: libpeas_testing_deps,
+  c_args: libpeas_testing_c_args,
+  link_args: libpeas_testing_link_args,
+  install: false,
+)
+
+libpeas_testing_dep = declare_dependency(
+  link_with: libpeas_testing_lib,
+  include_directories: include_directories('.'),
+  dependencies: libpeas_testing_deps,
+)
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..18e4e2f
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,8 @@
+subdir('testing-util')
+
+subdir('libpeas')
+if build_gtk_widgetry == true
+  subdir('libpeas-gtk')
+endif
+
+subdir('plugins')
diff --git a/tests/plugins/builtin/meson.build b/tests/plugins/builtin/meson.build
new file mode 100644
index 0000000..2a46254
--- /dev/null
+++ b/tests/plugins/builtin/meson.build
@@ -0,0 +1,34 @@
+libbuiltin_name = 'builtin'
+
+libbuiltin_public_h = [
+  'builtin-plugin.h',
+]
+
+libbuiltin_c = [
+  'builtin-plugin.c',
+]
+
+libbuiltin_plugin_data = [
+  'builtin.plugin',
+]
+
+libbuiltin_plugin_deps = [
+  glib_dep,
+  gobject_dep,
+  libpeas_dep,
+]
+
+libbuiltin_lib = shared_library(
+  libbuiltin_name,
+  libbuiltin_c,
+  dependencies: libbuiltin_plugin_deps,
+  install: false,
+)
+
+custom_target(
+  'lib@0@-data'.format(libbuiltin_name),
+  input: libbuiltin_plugin_data,
+  output: libbuiltin_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/tests/plugins/has-dep/meson.build b/tests/plugins/has-dep/meson.build
new file mode 100644
index 0000000..eddef12
--- /dev/null
+++ b/tests/plugins/has-dep/meson.build
@@ -0,0 +1,35 @@
+libhas_dep_name = 'has-dep'
+
+libhas_dep_public_h = [
+  'has-dep-plugin.h',
+]
+
+libhas_dep_c = [
+  'has-dep-plugin.c',
+]
+
+libhas_dep_plugin_data = [
+  'has-dep.plugin',
+]
+
+libhas_dep_plugin_deps = [
+  glib_dep,
+  gobject_dep,
+  gmodule_dep,
+  libpeas_dep,
+]
+
+libhas_dep_lib = shared_library(
+  libhas_dep_name,
+  libhas_dep_c,
+  dependencies: libhas_dep_plugin_deps,
+  install: false,
+)
+
+custom_target(
+  'lib@0@-data'.format(libhas_dep_name),
+  input: libhas_dep_plugin_data,
+  output: libhas_dep_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/tests/plugins/loadable/meson.build b/tests/plugins/loadable/meson.build
new file mode 100644
index 0000000..522959a
--- /dev/null
+++ b/tests/plugins/loadable/meson.build
@@ -0,0 +1,34 @@
+libloadable_name = 'loadable'
+
+libloadable_public_h = [
+  'loadable-plugin.h',
+]
+
+libloadable_c = [
+  'loadable-plugin.c',
+]
+
+libloadable_plugin_data = [
+  'loadable.plugin',
+]
+
+libloadable_plugin_deps = [
+  glib_dep,
+  gobject_dep,
+  libpeas_dep,
+]
+
+libloadable_lib = shared_library(
+  libloadable_name,
+  libloadable_c,
+  dependencies: libloadable_plugin_deps,
+  install: false,
+)
+
+custom_target(
+  'lib@0@-data'.format(libloadable_name),
+  input: libloadable_plugin_data,
+  output: libloadable_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
diff --git a/tests/plugins/meson.build b/tests/plugins/meson.build
new file mode 100644
index 0000000..c19a8fb
--- /dev/null
+++ b/tests/plugins/meson.build
@@ -0,0 +1,20 @@
+generic_name = 'generic'
+
+generic_plugins_data = [
+  'full-info.plugin',
+  'min-info.plugin',
+  'unavailable.plugin',
+]
+
+custom_target(
+  '@0@-data'.format(generic_name),
+  input: generic_plugins_data,
+  output: generic_plugins_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
+
+subdir('builtin')
+subdir('has-dep')
+subdir('loadable')
+subdir('self-dep')
diff --git a/tests/plugins/self-dep/meson.build b/tests/plugins/self-dep/meson.build
new file mode 100644
index 0000000..4cf0471
--- /dev/null
+++ b/tests/plugins/self-dep/meson.build
@@ -0,0 +1,34 @@
+libself_dep_name = 'self-dep'
+
+libself_dep_public_h = [
+  'self-dep-plugin.h',
+]
+
+libself_dep_c = [
+  'self-dep-plugin.c',
+]
+
+libself_dep_plugin_data = [
+  'self-dep.plugin',
+]
+
+libself_dep_plugin_deps = [
+  glib_dep,
+  gobject_dep,
+  libpeas_dep,
+]
+
+libself_dep_lib = shared_library(
+  libself_dep_name,
+  libself_dep_c,
+  dependencies: libself_dep_plugin_deps,
+  install: false,
+)
+
+custom_target(
+  'lib@0@-data'.format(libself_dep_name),
+  input: libself_dep_plugin_data,
+  output: libself_dep_plugin_data,
+  command: ['cp', '@INPUT@', '@OUTDIR@'],
+  build_by_default: true,
+)
\ No newline at end of file
diff --git a/tests/testing-util/meson.build b/tests/testing-util/meson.build
new file mode 100644
index 0000000..890ddb8
--- /dev/null
+++ b/tests/testing-util/meson.build
@@ -0,0 +1,42 @@
+libtesting_util_name = 'testing-util'
+libtesting_util_string = '@0@-@1@'.format(libtesting_util_name, api_version)
+
+libtesting_util_public_h = [
+  'testing-util.h',
+]
+
+libtesting_util_c = [
+  'testing-util.c',
+]
+
+libtesting_util_deps = [
+  glib_dep,
+  introspection_dep,
+  libpeas_dep,
+]
+
+libtesting_util_c_args = [
+  '-DHAVE_CONFIG_H',
+  '-DBUILDDIR="@0@"'.format(builddir),
+  '-DSRCDIR="@0@"'.format(srcdir),
+]
+
+libtesting_util_link_args = [
+  '-export-dynamic',
+]
+
+libtesting_util_lib = library(
+  libtesting_util_string,
+  libtesting_util_c,
+  include_directories: rootdir,
+  dependencies: libtesting_util_deps,
+  c_args: libtesting_util_c_args,
+  link_args: libtesting_util_link_args,
+  install: false,
+)
+
+libtesting_util_dep = declare_dependency(
+  link_with: libtesting_util_lib,
+  include_directories: include_directories('.'),
+  dependencies: libtesting_util_deps,
+)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]