[gegl/wip/nielsdg/meson] Port the build system to Meson.



commit dde9ac4872d4b0a40fb8fae9ed4b8e1a98d38de9
Author: Niels De Graef <nielsdegraef gmail com>
Date:   Sat Oct 14 12:59:37 2017 +0200

    Port the build system to Meson.

 bin/meson.build                                   |   30 +++
 docs/meson.build                                  |  101 ++++++++++
 examples/meson.build                              |   27 +++
 gcut/meson.build                                  |   30 +++
 gegl/buffer/meson.build                           |   39 ++++
 gegl/graph/meson.build                            |   13 ++
 gegl/meson.build                                  |  147 +++++++++++++++
 gegl/module/meson.build                           |   11 +
 gegl/opencl/meson.build                           |   13 ++
 gegl/operation/meson.build                        |   30 +++
 gegl/process/meson.build                          |   13 ++
 gegl/property-types/meson.build                   |   13 ++
 libs/meson.build                                  |    2 +
 libs/npd/meson.build                              |   19 ++
 libs/poly2tri-c/meson.build                       |    3 +
 libs/poly2tri-c/poly2tri-c/meson.build            |   39 ++++
 libs/poly2tri-c/poly2tri-c/p2t/common/meson.build |   10 +
 libs/poly2tri-c/poly2tri-c/p2t/meson.build        |   13 ++
 libs/poly2tri-c/poly2tri-c/p2t/sweep/meson.build  |   12 ++
 libs/poly2tri-c/poly2tri-c/refine/meson.build     |   28 +++
 libs/poly2tri-c/poly2tri-c/render/meson.build     |   10 +
 libs/rgbe/meson.build                             |    9 +
 meson.build                                       |  207 +++++++++++++++++++++
 meson_options.txt                                 |   17 ++
 opencl/meson.build                                |   51 +++++
 operations/common-gpl3+/meson.build               |   76 ++++++++
 operations/common/meson.build                     |  132 +++++++++++++
 operations/core/meson.build                       |   37 ++++
 operations/external/meson.build                   |   32 ++++
 operations/generated/meson.build                  |   57 ++++++
 operations/json/meson.build                       |    7 +
 operations/meson.build                            |   14 ++
 operations/transform/meson.build                  |   23 +++
 operations/workshop/external/meson.build          |   59 ++++++
 operations/workshop/generated/meson.build         |   23 +++
 operations/workshop/meson.build                   |   36 ++++
 perf/meson.build                                  |   31 +++
 po/meson.build                                    |    3 +
 seamless-clone/meson.build                        |   18 ++
 tests/compositions/meson.build                    |    1 +
 tests/meson.build                                 |   15 ++
 tests/mipmap/meson.build                          |   14 ++
 tests/python/meson.build                          |   13 ++
 tests/simple/meson.build                          |   41 ++++
 tests/xml/meson.build                             |   16 ++
 tools/meson.build                                 |   35 ++++
 46 files changed, 1570 insertions(+), 0 deletions(-)
---
diff --git a/bin/meson.build b/bin/meson.build
new file mode 100644
index 0000000..fc5446e
--- /dev/null
+++ b/bin/meson.build
@@ -0,0 +1,30 @@
+gegl_sources = [
+  'gegl.c',
+  'gegl-options.c',
+  'gegl-path-smooth.c',
+]
+
+gegl_dependencies = [
+  babl,
+  libpng,
+  mrg,
+  gexiv2,
+  libmath,
+  libgegl_dep,
+]
+
+if mrg_support and gexiv2_support and sdl_support
+  gegl_sources += 'ui.c'
+  gegl_dependencies += sdl
+endif
+
+if spiro_support
+  gegl_sources += 'gegl-path-spiro.c'
+  gegl_dependencies += spiro
+endif
+
+gegl_bin = executable('gegl',
+  gegl_sources,
+  dependencies: gegl_dependencies,
+  install: true,
+)
diff --git a/docs/meson.build b/docs/meson.build
new file mode 100644
index 0000000..2d79a3a
--- /dev/null
+++ b/docs/meson.build
@@ -0,0 +1,101 @@
+index_txt = configure_file(
+  input: 'index.txt.in',
+  output: 'index.txt',
+  configuration: conf,
+)
+helloworld_txt = configure_file(
+  input: 'hello-world.txt.in',
+  output: 'hello-world.txt',
+  configuration: conf,
+)
+
+asciidoc_files = [
+  index_txt,
+  'abyss_policy.txt',
+  'bugzilla.txt',
+  'build.txt',
+  'commandline.txt',
+  'contribute.txt',
+  'copyright.txt',
+  'development.txt',
+  'editor.txt',
+  'environment.txt',
+  'features.txt',
+  'gcut.txt',
+  'gegl-chain.txt',
+  'glossary.txt',
+  helloworld_txt,
+  'journal.txt',
+  'NEWS.txt',
+  'operation-api.txt',
+  'source-overview.txt',
+]
+
+foreach file: asciidoc_files
+  rendered_file = custom_target('@0@.html'.format(file).underscorify(),
+    output: '@BASENAME@.html',
+    input: file,
+    command: [ asciidoc,
+      '--unsafe',
+      '-o', '@OUTPUT@',
+      '-a', 'stylesheet="@0@"'.format(join_paths(meson.source_root(), 'gegl.css')),
+      '-a', 'quirks!',
+      '@INPUT@',
+    ],
+  )
+endforeach
+
+if ruby.found() and dot.found()
+  inheritance_temp = custom_target('inheritance.dot',
+    input: meson.source_root(),
+    output: 'inheritance.dot',
+    command: [ gobj2dot,
+      '@INPUT@',
+    ],
+    capture: true,
+    build_by_default: true,
+  )
+
+  inheritance_img = custom_target('inheritance.png',
+    input: inheritance_temp,
+    output: 'inheritance.png',
+    command: [ dot,
+      '-Tpng',
+    ],
+    capture: true,
+    build_by_default: true,
+  )
+endif
+
+enscript_files = [
+  join_paths(meson.source_root(), 'gegl', 'gegl.h'),
+  join_paths(meson.source_root(), 'gegl', 'gegl-plugin.h'),
+  join_paths(meson.source_root(), 'operations', 'common', 'brightness-contrast.c'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation.h'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation-composer.h'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation-area-filter.h'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation-filter.h'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation-meta.h'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation-point-composer.h'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation-temporal.h'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation-point-filter.h'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation-point-render.h'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation-sink.h'),
+  join_paths(meson.source_root(), 'gegl', 'operation', 'gegl-operation-source.h'),
+]
+
+foreach file: enscript_files
+  path = file.split('/')
+  basename = path[path.length() - 1]
+  rendered_file = custom_target('@0@.html'.format(file).underscorify(),
+    input: file,
+    output: '@0@.html'.format(basename),
+    command: [ enscript,
+      '-E',
+      '--color',
+      '--language=html',
+      '-p', '@OUTPUT@',
+      '@INPUT@',
+    ],
+  )
+endforeach
diff --git a/examples/meson.build b/examples/meson.build
new file mode 100644
index 0000000..484a1c3
--- /dev/null
+++ b/examples/meson.build
@@ -0,0 +1,27 @@
+examples = [
+  '2geglbuffer',
+  'gegl-convert',
+  'gegl-slicer',
+  'video-invert',
+  'geglbuffer-add-image',
+  'geglbuffer-clock',
+  'frame-counter',
+  'hello-world',
+]
+
+example_dependencies = [
+  common_deps,
+  babl,
+  sdl,
+  libmath,
+  libgegl_dep,
+]
+
+foreach example: examples
+  executable(example,
+    '@0@.c'.format(example),
+    dependencies: example_dependencies,
+  )
+endforeach
+
+# sdl and gegl examples
diff --git a/gcut/meson.build b/gcut/meson.build
new file mode 100644
index 0000000..92ae611
--- /dev/null
+++ b/gcut/meson.build
@@ -0,0 +1,30 @@
+gcut_sources = [
+  'clip.c',
+  'gcut-util.c',
+  'gcut.c',
+  'iconographer.c',
+]
+
+gcut_dependencies = [
+  common_deps,
+  babl,
+  libpng,
+  spiro,
+  libmath,
+  mrg,
+  gexiv2,
+  libgegl_dep,
+]
+
+# XXX
+# if mrg_support and sdl_support
+#   gcut_sources += 'gcut-ui.c'
+#   gcut_dependencies += libsdl
+# endif
+
+gcut = executable('gcut',
+  gcut_sources,
+  dependencies: gcut_dependencies,
+  include_directories: config_h_dir,
+  install: true,
+)
diff --git a/gegl/buffer/meson.build b/gegl/buffer/meson.build
new file mode 100644
index 0000000..caa851e
--- /dev/null
+++ b/gegl/buffer/meson.build
@@ -0,0 +1,39 @@
+libbuffer_sources = [
+  'gegl-buffer.c',
+  'gegl-buffer-access.c',
+  'gegl-buffer-index.h',
+  'gegl-buffer-iterator.c',
+  'gegl-buffer-cl-iterator.c',
+  'gegl-buffer-cl-cache.c',
+  'gegl-buffer-linear.c',
+  'gegl-buffer-load.c',
+  'gegl-buffer-save.c',
+  'gegl-cache.c',
+  'gegl-sampler.c',
+  'gegl-sampler-cubic.c',
+  'gegl-sampler-linear.c',
+  'gegl-sampler-nearest.c',
+  'gegl-sampler-nohalo.c',
+  'gegl-sampler-lohalo.c',
+  'gegl-region-generic.c',
+  'gegl-tile.c',
+  'gegl-tile-source.c',
+  'gegl-tile-storage.c',
+  'gegl-tile-backend.c',
+  'gegl-tile-backend-file-async.c',
+  'gegl-tile-backend-ram.c',
+  'gegl-tile-backend-swap.c',
+  'gegl-tile-handler.c',
+  'gegl-tile-handler-private.h',
+  'gegl-tile-handler-cache.c',
+  'gegl-tile-handler-chain.c',
+  'gegl-tile-handler-empty.c',
+  'gegl-tile-handler-log.c',
+  'gegl-tile-handler-zoom.c',
+]
+
+libbuffer = static_library('buffer',
+  libbuffer_sources,
+  include_directories: libgegl_common_includes,
+  dependencies: libgegl_common_dependencies,
+)
diff --git a/gegl/graph/meson.build b/gegl/graph/meson.build
new file mode 100644
index 0000000..182428a
--- /dev/null
+++ b/gegl/graph/meson.build
@@ -0,0 +1,13 @@
+libgraph_sources = [
+  'gegl-connection.c',
+  'gegl-node.c',
+  'gegl-pad.c',
+  'gegl-visitable.c',
+  'gegl-visitor.c',
+]
+
+libgraph = static_library('graph',
+  libgraph_sources,
+  include_directories: libgegl_common_includes,
+  dependencies: libgegl_common_dependencies,
+)
diff --git a/gegl/meson.build b/gegl/meson.build
new file mode 100644
index 0000000..5b89f51
--- /dev/null
+++ b/gegl/meson.build
@@ -0,0 +1,147 @@
+# Version header
+libgegl_version_conf = configuration_data()
+libgegl_version_conf.set('GEGL_MAJOR_VERSION', gegl_major_version)
+libgegl_version_conf.set('GEGL_MINOR_VERSION', gegl_minor_version)
+libgegl_version_conf.set('GEGL_MICRO_VERSION', gegl_micro_version)
+libgegl_version_header = configure_file(
+  input: 'gegl-version.h.in',
+  output: 'gegl-version.h',
+  configuration: libgegl_version_conf,
+)
+
+# Common includes
+libgegl_common_includes = [
+  config_h_dir,
+  include_directories('.'),
+  include_directories('buffer'),
+  include_directories('graph'),
+  include_directories('module'),
+  include_directories('opencl'),
+  include_directories('operation'),
+  include_directories('process'),
+  include_directories('property-types'),
+]
+
+# Common dependencies
+libgegl_common_dependencies = [
+  common_deps,
+  libmath,
+  babl,
+]
+
+# XXX G_LOG_DOMAIN
+
+# Subdirectory
+subdir('buffer')
+subdir('graph')
+subdir('module')
+subdir('operation')
+subdir('process')
+subdir('property-types')
+subdir('opencl')
+
+# libgegl
+libgegl_sources = [
+  'gegl-algorithms.c',
+  'gegl-apply.c',
+  'gegl-config.c',
+  'gegl-cpuaccel.c',
+  'gegl-dot-visitor.c',
+  'gegl-dot.c',
+  'gegl-enums.c',
+  'gegl-gio.c',
+  'gegl-init.c',
+  'gegl-instrument.c',
+  'gegl-introspection-support.c',
+  'gegl-lookup.c',
+  'gegl-matrix.c',
+  'gegl-random.c',
+  'gegl-serialize.c',
+  'gegl-utils.c',
+  'gegl-xml.c',
+]
+
+libgegl_linkedlibs = [
+  libbuffer,
+  libmodule,
+  liboperation,
+  libgraph,
+  libprocess,
+  libpropertytypes,
+  libcl,
+]
+
+libgegl = library('gegl-@0@'.format(gegl_api_version),
+  libgegl_sources,
+  include_directories: libgegl_common_includes,
+  dependencies: libgegl_common_dependencies,
+  link_with: libgegl_linkedlibs,
+  install: true,
+)
+
+libgegl_dep = declare_dependency(
+  link_with: [ libgegl, libgegl_linkedlibs ],
+  dependencies: libgegl_common_dependencies,
+  include_directories: libgegl_common_includes,
+)
+
+
+# Introspection
+libgegl_introspectable_headers = [
+  libgegl_version_header,
+
+  'gegl-apply.h',
+  'gegl-enums.h',
+  'gegl-init.h',
+  'gegl-lookup.h',
+  'gegl-matrix.h',
+  'gegl-random.h',
+  'gegl-types.h',
+  'gegl-utils.h',
+  'gegl.h',
+
+  'buffer/gegl-buffer-backend.h',
+  'buffer/gegl-buffer-iterator.h',
+  'buffer/gegl-buffer.h',
+  'buffer/gegl-tile-backend.h',
+  'buffer/gegl-tile-handler.h',
+  'buffer/gegl-tile-source.h',
+
+  'graph/gegl-node.h',
+
+  'process/gegl-graph-debug.h',
+  'process/gegl-processor.h',
+
+  'property-types/gegl-audio-fragment.h',
+  'property-types/gegl-color.h',
+  'property-types/gegl-curve.h',
+  'property-types/gegl-paramspecs.h',
+  'property-types/gegl-path.h',
+]
+
+libgegl_gir_sources = [
+  libgegl_introspectable_headers,
+  'gegl-introspection-support.h',
+  'opencl/gegl-cl-introspection-support.h',
+]
+
+libgegl_gir_includes = [
+  'GObject-2.0',
+  'GLib-2.0',
+]
+
+libgegl_gir = gnome.generate_gir(libgegl,
+  namespace: 'Gegl',
+  nsversion: gegl_api_version,
+  sources: libgegl_gir_sources,
+  includes: libgegl_gir_includes,
+  install: true,
+)
+
+
+# VAPI
+libgegl_vapi = gnome.generate_vapi('Gegl-@0@'.format(gegl_api_version),
+  sources: libgegl_gir[0],
+  metadata_dirs: [ '.' ],
+  install: true,
+)
diff --git a/gegl/module/meson.build b/gegl/module/meson.build
new file mode 100644
index 0000000..905d13c
--- /dev/null
+++ b/gegl/module/meson.build
@@ -0,0 +1,11 @@
+libmodule_sources = [
+  'gegldatafiles.c',
+  'geglmodule.c',
+  'geglmoduledb.c',
+]
+
+libmodule = static_library('module',
+  libmodule_sources,
+  include_directories: libgegl_common_includes,
+  dependencies: libgegl_common_dependencies,
+)
diff --git a/gegl/opencl/meson.build b/gegl/opencl/meson.build
new file mode 100644
index 0000000..6074e15
--- /dev/null
+++ b/gegl/opencl/meson.build
@@ -0,0 +1,13 @@
+libcl_sources = [
+  'gegl-cl.c',
+  'gegl-cl-init.c',
+  'gegl-cl-color.c',
+  'gegl-cl-introspection-support.h',
+  'gegl-cl-random.c',
+]
+
+libcl = static_library('cl',
+  libcl_sources,
+  include_directories: libgegl_common_includes,
+  dependencies: libgegl_common_dependencies,
+)
diff --git a/gegl/operation/meson.build b/gegl/operation/meson.build
new file mode 100644
index 0000000..d9d915a
--- /dev/null
+++ b/gegl/operation/meson.build
@@ -0,0 +1,30 @@
+liboperation_sources = [
+  'gegl-extension-handler.c',
+  'gegl-operation.c',
+  'gegl-operation-area-filter.c',
+  'gegl-operation-composer.c',
+  'gegl-operation-composer3.c',
+  'gegl-operation-filter.c',
+  'gegl-operation-handlers.c',
+  'gegl-operation-handlers-private.h',
+  'gegl-operation-meta.c',
+  'gegl-operation-meta-json.c',
+  'gegl-operation-point-composer.c',
+  'gegl-operation-point-composer3.c',
+  'gegl-operation-point-filter.c',
+  'gegl-operation-point-render.c',
+  'gegl-operation-property-keys.c',
+  'gegl-operation-sink.c',
+  'gegl-operation-source.c',
+  'gegl-operation-temporal.c',
+  'gegl-operation-context.c',
+  'gegl-operation-context-private.h',
+  'gegl-operations.c',
+  'gegl-operations.h',
+]
+
+liboperation = static_library('operation',
+  liboperation_sources,
+  include_directories: libgegl_common_includes,
+  dependencies: libgegl_common_dependencies,
+)
diff --git a/gegl/process/meson.build b/gegl/process/meson.build
new file mode 100644
index 0000000..44cd257
--- /dev/null
+++ b/gegl/process/meson.build
@@ -0,0 +1,13 @@
+libprocess_sources = [
+  'gegl-eval-manager.c',
+  'gegl-graph-traversal.c',
+  'gegl-graph-traversal-debug.c',
+  'gegl-list-visitor.c',
+  'gegl-processor.c',
+]
+
+libprocess = static_library('process',
+  libprocess_sources,
+  include_directories: libgegl_common_includes,
+  dependencies: libgegl_common_dependencies,
+)
diff --git a/gegl/property-types/meson.build b/gegl/property-types/meson.build
new file mode 100644
index 0000000..18eeafa
--- /dev/null
+++ b/gegl/property-types/meson.build
@@ -0,0 +1,13 @@
+libpropertytypes_sources = [
+  'gegl-audio-fragment.c',
+  'gegl-color.c',
+  'gegl-curve.c',
+  'gegl-path.c',
+  'gegl-paramspecs.c',
+]
+
+libpropertytypes = static_library('propertytypes',
+  libpropertytypes_sources,
+  include_directories: libgegl_common_includes,
+  dependencies: libgegl_common_dependencies,
+)
diff --git a/libs/meson.build b/libs/meson.build
new file mode 100644
index 0000000..be7f84a
--- /dev/null
+++ b/libs/meson.build
@@ -0,0 +1,2 @@
+subdir('poly2tri-c')
+subdir('rgbe')
diff --git a/libs/npd/meson.build b/libs/npd/meson.build
new file mode 100644
index 0000000..c9465bb
--- /dev/null
+++ b/libs/npd/meson.build
@@ -0,0 +1,19 @@
+libgegl_npd_sources = [
+  'npd_common.c',
+  'deformation.c',
+  'npd_math.c',
+  'graphics.c',
+  'lattice_cut.c',
+  'npd_debug.c',
+  'npd_gegl.c',
+]
+
+libgegl_npd_dependencies = [
+  common_deps,
+  libgegl_dep,
+]
+
+libgegl_npd = library('gegl-npd-@0@'.format(gegl_api_version),
+  libgegl_npd_sources,
+  dependencies: libgegl_npd_dependencies,
+)
diff --git a/libs/poly2tri-c/meson.build b/libs/poly2tri-c/meson.build
new file mode 100644
index 0000000..d778c33
--- /dev/null
+++ b/libs/poly2tri-c/meson.build
@@ -0,0 +1,3 @@
+if not poly2tri_c.found()
+  subdir('poly2tri-c')
+endif
diff --git a/libs/poly2tri-c/poly2tri-c/meson.build b/libs/poly2tri-c/poly2tri-c/meson.build
new file mode 100644
index 0000000..2c2a85e
--- /dev/null
+++ b/libs/poly2tri-c/poly2tri-c/meson.build
@@ -0,0 +1,39 @@
+# Common dependencies
+libpoly2tri_c_common_dependencies = [
+  glib,
+  gobject,
+  gmodule,
+  json_glib,
+  gthread,
+  gio,
+  gio_os,
+  libmath,
+]
+
+# Common includes
+libpoly2tri_c_common_includes = [
+  include_directories('..'),
+]
+
+
+subdir('p2t')
+subdir('refine')
+subdir('render')
+
+libpoly2tri_c_linkedlibs = [
+  libp2tc,
+  libp2tc_refine,
+  libp2tc_render,
+]
+
+libpoly2tri_c = static_library('poly2tri-c',
+  [],
+  link_with: libpoly2tri_c_linkedlibs,
+  include_directories: libpoly2tri_c_common_includes,
+)
+
+# Use the compiled internal library as the poly2tri_c dependency
+poly2tri_c = declare_dependency(
+  link_with: [ libpoly2tri_c, libp2tc_linkedlibs ],
+  include_directories: libpoly2tri_c_common_includes,
+)
diff --git a/libs/poly2tri-c/poly2tri-c/p2t/common/meson.build 
b/libs/poly2tri-c/poly2tri-c/p2t/common/meson.build
new file mode 100644
index 0000000..30fb5ae
--- /dev/null
+++ b/libs/poly2tri-c/poly2tri-c/p2t/common/meson.build
@@ -0,0 +1,10 @@
+libp2tc_common_sources = [
+  'shapes.c',
+  'utils.c',
+]
+
+libp2tc_common = static_library('p2tc-common',
+  libp2tc_common_sources,
+  dependencies: libpoly2tri_c_common_dependencies,
+  include_directories: libpoly2tri_c_common_includes,
+)
diff --git a/libs/poly2tri-c/poly2tri-c/p2t/meson.build b/libs/poly2tri-c/poly2tri-c/p2t/meson.build
new file mode 100644
index 0000000..a403505
--- /dev/null
+++ b/libs/poly2tri-c/poly2tri-c/p2t/meson.build
@@ -0,0 +1,13 @@
+subdir('sweep')
+subdir('common')
+
+libp2tc_linkedlibs = [
+  libp2tc_sweep,
+  libp2tc_common,
+]
+
+libp2tc = library('pt2c',
+  'poly2tri.h',
+  link_with: libp2tc_linkedlibs,
+  include_directories: libpoly2tri_c_common_includes,
+)
diff --git a/libs/poly2tri-c/poly2tri-c/p2t/sweep/meson.build 
b/libs/poly2tri-c/poly2tri-c/p2t/sweep/meson.build
new file mode 100644
index 0000000..1574b92
--- /dev/null
+++ b/libs/poly2tri-c/poly2tri-c/p2t/sweep/meson.build
@@ -0,0 +1,12 @@
+libp2tc_sweep_sources = [
+  'advancing_front.c',
+  'cdt.c',
+  'sweep.c',
+  'sweep_context.c',
+]
+
+libp2tc_sweep = static_library('p2tc-sweep',
+  libp2tc_sweep_sources,
+  dependencies: libpoly2tri_c_common_dependencies,
+  include_directories: libpoly2tri_c_common_includes,
+)
diff --git a/libs/poly2tri-c/poly2tri-c/refine/meson.build b/libs/poly2tri-c/poly2tri-c/refine/meson.build
new file mode 100644
index 0000000..114f69b
--- /dev/null
+++ b/libs/poly2tri-c/poly2tri-c/refine/meson.build
@@ -0,0 +1,28 @@
+libp2tc_refine_sources = [
+  'bounded-line.c',
+  'cdt-flipfix.c',
+  'cdt.c',
+  'circle.c',
+  'cluster.c',
+  'delaunay-terminator.c',
+  'edge.c',
+  'line.c',
+  'mesh-action.c',
+  'mesh.c',
+  'point.c',
+  'pslg.c',
+  'refiner.c',
+  'rmath.c',
+  'triangle.c',
+  'utils.c',
+  'vector2.c',
+  'vedge.c',
+  'visibility.c',
+  'vtriangle.c',
+]
+
+libp2tc_refine = static_library('p2tc-refine',
+  libp2tc_refine_sources,
+  dependencies: libpoly2tri_c_common_dependencies,
+  include_directories: libpoly2tri_c_common_includes,
+)
diff --git a/libs/poly2tri-c/poly2tri-c/render/meson.build b/libs/poly2tri-c/poly2tri-c/render/meson.build
new file mode 100644
index 0000000..24f1171
--- /dev/null
+++ b/libs/poly2tri-c/poly2tri-c/render/meson.build
@@ -0,0 +1,10 @@
+libp2tc_render_sources = [
+  'mesh-render.c',
+  'svg-plot.c',
+]
+
+libp2tc_render = static_library('p2tc-render',
+  libp2tc_render_sources,
+  dependencies: libpoly2tri_c_common_dependencies,
+  include_directories: libpoly2tri_c_common_includes,
+)
diff --git a/libs/rgbe/meson.build b/libs/rgbe/meson.build
new file mode 100644
index 0000000..21bda4f
--- /dev/null
+++ b/libs/rgbe/meson.build
@@ -0,0 +1,9 @@
+rgbe_sources = [
+  'rgbe.c',
+]
+
+librgbe = library('rgbe',
+  rgbe_sources,
+  dependencies: common_deps,
+  include_directories: config_h_dir,
+)
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..92f7bca
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,207 @@
+project('gegl', 'c',
+  version: '0.3.21',
+  license: 'GPL3+',
+  meson_version: '>= 0.43',
+)
+
+i18n = import('i18n')
+gnome = import('gnome')
+
+# Versioning
+gegl_version_split = meson.project_version().split('.')
+gegl_major_version = gegl_version_split[0]
+gegl_minor_version = gegl_version_split[1]
+gegl_micro_version = gegl_version_split[2]
+gegl_api_version = '.'.join([gegl_major_version, gegl_minor_version])
+
+# Options (for more info, see meson_options.txt)
+docs_enabled = get_option('docs')
+workshop_enabled = get_option('workshop')
+gexiv2_support = get_option('gexiv2')
+mrg_support = get_option('mrg')
+cairo_support = get_option('cairo')
+pango_support = get_option('pango')
+pangocairo_support = get_option('pangocairo')
+gdk_pixbuf_support = get_option('gdk-pixbuf')
+lensfun_support = get_option('lensfun')
+libpng_support = get_option('libpng')
+librsvg_support = get_option('librsvg')
+libv4l2_support = get_option('libv4l2')
+openexr_support = get_option('openexr')
+sdl_support = get_option('sdl')
+spiro_support = get_option('spiro')
+lua_support = get_option('lua')
+
+# Some variables
+prefix = get_option('prefix')
+config_h_dir = include_directories('.')
+locale_dir = join_paths(prefix, get_option('localedir'))
+pkgdatadir = join_paths(get_option('datadir'), meson.project_name())
+libdir = get_option('libdir')
+po_dir = join_paths(meson.source_root(), 'po')
+
+# Dependencies
+cc = meson.get_compiler('c')
+
+libmath = cc.find_library('m')
+babl = dependency('babl', version: '>= 0.1.34')
+# glib packages
+glib = dependency('glib-2.0', version: '>= 2.44')
+gobject = dependency('gobject-2.0')
+gmodule = dependency('gmodule-2.0')
+json_glib = dependency('json-glib-1.0')
+gthread = dependency('gthread-2.0')
+gio = dependency('gio-2.0')
+if target_machine.system() == 'windows'
+  gio_os = dependency('gio-windows-2.0')
+else
+  gio_os = dependency('gio-unix-2.0')
+endif
+
+pango = dependency('pango', version: '>= 1.38.0')
+perl = find_program('perl5', 'perl', 'perl5.005', 'perl5.004')
+ruby = find_program('ruby', required: false)
+if not ruby.found()
+  warning('Could not find Ruby interpreter. The HTML API reference will not be updated.')
+endif
+enscript = find_program('enscript', required: false)
+asciidoc = find_program('asciidoc', required: false)
+dot = find_program('dot', required: false)
+w3m = find_program('w3m', required: false)
+python = find_program('python2.5', required: false) # used for introspection unittests
+# XXX pygobject
+poly2tri_c = dependency('poly2tri-c', version: '>= 0.0.0', required: false)
+if not poly2tri_c.found()
+  message('Couldn\'t find poly2tri-c, falling back to internal version')
+endif
+
+if gexiv2_support
+  gexiv2 = dependency('gexiv2')
+endif
+if mrg_support
+  mrg = dependency('mrg', required: false) # XXX normally required: true I think?
+endif
+if cairo_support
+  cairo = dependency('cairo', version: '>= 1.1.12')
+endif
+if pango_support
+  pango = dependency('pango', version: '>= 1.38.0')
+endif
+if pangocairo_support
+  pangocairo = dependency('pangocairo', version: '>= 1.38.0')
+endif
+if gdk_pixbuf_support
+  gdk_pixbuf = dependency('gdk-pixbuf-2.0', version: '>= 2.32.0')
+endif
+if lensfun_support
+  lensfun = dependency('lensfun', version: '>= 0.2.5')
+endif
+# XXX jpeg
+if libpng_support
+  libpng = dependency('libpng')
+endif
+if librsvg_support
+  librsvg = dependency('librsvg-2.0', version: '>= 2.40.6')
+endif
+if libv4l2_support
+  if not cc.has_header('linux/videodev2.h')
+    error('Couln\'t find header file <linux/videodev2.h>, needed for libv4l2 support.')
+  endif
+  libv4l2 = dependency('libv4l2', version: '>= 1.0.1')
+endif
+if openexr_support
+  openexr = dependency('OpenEXR', version: '>= 1.6.1')
+endif
+if sdl_support
+  sdl = dependency('sdl') # XXX correct? autoconf uses sdl-config
+  # XXX something with running sdl-config to get the right flags?
+endif
+# XXX libraw
+# XXX jasper
+# XXX graphviz
+if lua_support
+  lua_min_version = '5.1.0'
+  lua = dependency('lua', version: '>= '+lua_min_version, required: false)
+  if not lua.found()
+    lua = dependency('lua5.1', version: '>= '+lua_min_version, required: false)
+    if not lua.found()
+      lua = dependency('luajit', version: '>= 2.0.4')
+    endif
+  endif
+endif
+# XXX libavformat
+# XXX lib4l
+# XXX lcms
+if spiro_support
+  spiro = cc.find_library('spiro')
+endif
+# XXX exiv2
+# XXX umfpack
+# XXX webp
+# XXX mmx
+
+# Configuration
+conf = configuration_data()
+conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
+conf.set_quoted('GEGL_LOCALEDIR', locale_dir)
+conf.set_quoted('GEGL_LIBRARY', '@0@-@1@'.format(meson.project_name(), gegl_api_version))
+conf.set_quoted('LIBDIR', libdir)
+conf.set_quoted('top_srcdir', meson.source_root())
+conf.set_quoted('GEGL_VERSION', meson.project_version())
+configure_file(output: 'config.h', configuration: conf)
+
+# Custom stuff
+# custom_target('NEWS',
+#   build_by_default: true,
+#   output: join_paths('docs', 'NEWS.html'),
+#   command: [ w3m,
+#     '-cols', '72',
+#     '-dump', '@OUTPUT@', # XXX isn't this @OUTPUT@ ?
+#   ],
+# )
+
+# Common dependencies
+common_deps = [
+  glib,
+  gobject,
+  gmodule,
+  gio,
+  gio_os,
+  json_glib,
+  gthread,
+]
+
+# Pkg-conf
+pkg_conf = configuration_data()
+pkg_conf.set_quoted('prefix', prefix)
+# pkg_conf.set_quoted('exec_prefix', )
+pkg_conf.set_quoted('libdir', libdir)
+# pkg_conf.set_quoted('includedir', includedir)
+pkg_conf.set_quoted('PACKAGE_NAME', meson.project_name())
+pkg_conf.set_quoted('GEGL_API_VERSION', gegl_api_version)
+pkg_conf.set_quoted('GEGL_REAL_VERSION', meson.project_version())
+pkg_conf.set_quoted('GLIB_PACKAGES', 'gobject-2.0 gmodule-2.0 gio-2.0 json-glib-1.0') # XXX add gio-unix or 
gio-windows
+pkg_conf.set_quoted('MATH_LIB', '-lm')
+configure_file(
+  input: 'gegl.pc.in',
+  output: 'gegl.pc',
+  configuration: pkg_conf,
+)
+
+# Subfolders
+subdir('libs')
+subdir('opencl')
+subdir('gegl')
+subdir('libs/npd') # depends on gegl
+subdir('seamless-clone')
+subdir('bin')
+subdir('gcut')
+subdir('tools')
+subdir('operations')
+subdir('examples')
+subdir('tests')
+subdir('perf')
+subdir('po')
+if docs_enabled
+  subdir('docs')
+endif
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..6df01e2
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,17 @@
+option('docs', type: 'boolean', value: true, description: 'enable docs generation')
+option('workshop', type: 'boolean', value: false, description: 'enable build of workshop operations')
+# Build support
+option('gexiv2', type: 'boolean', value: true, description: 'build with gexiv2 support')
+option('mrg', type: 'boolean', value: true, description: 'build with mrg support')
+option('cairo', type: 'boolean', value: true, description: 'build with cairo support')
+option('pango', type: 'boolean', value: true, description: 'build with pango support')
+option('pangocairo', type: 'boolean', value: true, description: 'build with pangocairo support')
+option('gdk-pixbuf', type: 'boolean', value: true, description: 'build with gdk-pixbuf support')
+option('lensfun', type: 'boolean', value: true, description: 'build with lensfun support')
+option('libpng', type: 'boolean', value: true, description: 'build with libpng support')
+option('librsvg', type: 'boolean', value: true, description: 'build with librsvg support')
+option('libv4l2', type: 'boolean', value: true, description: 'build with v4l2 support')
+option('openexr', type: 'boolean', value: true, description: 'build with OpenEXR support')
+option('sdl', type: 'boolean', value: true, description: 'build with SDL support')
+option('spiro', type: 'boolean', value: true, description: 'build with spiro support')
+option('lua', type: 'boolean', value: true, description: 'build with lua support')
diff --git a/opencl/meson.build b/opencl/meson.build
new file mode 100644
index 0000000..7ab4bd8
--- /dev/null
+++ b/opencl/meson.build
@@ -0,0 +1,51 @@
+opencl_sources = [
+  'alien-map.cl',
+  'bilateral-filter-fast.cl',
+  'bilateral-filter.cl',
+  'box-blur.cl',
+  'box-max.cl',
+  'box-min.cl',
+  'brightness-contrast.cl',
+  'c2g.cl',
+  'checkerboard.cl',
+  'color-exchange.cl',
+  'color-temperature.cl',
+  'color-to-alpha.cl',
+  'colors-8bit-lut.cl',
+  'colors.cl',
+  'contrast-curve.cl',
+  'diffraction-patterns.cl',
+  'edge-laplace.cl',
+  'edge-sobel.cl',
+  'gaussian-blur-selective.cl',
+  'gblur-1d.cl',
+  'hue-chroma.cl',
+  'invert-linear.cl',
+  'levels.cl',
+  'mono-mixer.cl',
+  'motion-blur-circular.cl',
+  'motion-blur-linear.cl',
+  'noise-cell.cl',
+  'noise-hsv.cl',
+  'noise-hurl.cl',
+  'noise-reduction.cl',
+  'noise-simplex.cl',
+  'oilify.cl',
+  'opacity.cl',
+  'pixelize.cl',
+  'posterize.cl',
+  'random.cl',
+  'red-eye-removal.cl',
+  'shadows-highlights-correction.cl',
+  'snn-mean.cl',
+  'stretch-contrast.cl',
+  'svg-src-over.cl',
+  'texturize-canvas.cl',
+  'threshold.cl',
+  'value-invert.cl',
+  'video-degradation.cl',
+  'vignette.cl',
+  'weighted-blend.cl',
+]
+
+# XXX
diff --git a/operations/common-gpl3+/meson.build b/operations/common-gpl3+/meson.build
new file mode 100644
index 0000000..27a3654
--- /dev/null
+++ b/operations/common-gpl3+/meson.build
@@ -0,0 +1,76 @@
+operations_common_gpl3_c_sources = [
+  'antialias.c',
+  'apply-lens.c',
+  'bump-map.c',
+  'cartoon.c',
+  'channel-mixer.c',
+  'color-exchange.c',
+  'color-to-alpha.c',
+  'cubism.c',
+  'deinterlace.c',
+  'diffraction-patterns.c',
+  'displace.c',
+  'edge-laplace.c',
+  'edge.c',
+  'emboss.c',
+  'engrave.c',
+  'fractal-explorer.c',
+  'fractal-trace.c',
+  'gaussian-blur-selective.c',
+  'illusion.c',
+  'lens-distortion.c',
+  'lens-flare.c',
+  'maze.c',
+  'mosaic.c',
+  'motion-blur-circular.c',
+  'motion-blur-zoom.c',
+  'noise-slur.c',
+  'noise-solid.c',
+  'oilify.c',
+  'photocopy.c',
+  'plasma.c',
+  'polar-coordinates.c',
+  'red-eye-removal.c',
+  'ripple.c',
+  'shift.c',
+  'sinus.c',
+  'softglow.c',
+  'spiral.c',
+  'supernova.c',
+  'texturize-canvas.c',
+  'tile-glass.c',
+  'tile-paper.c',
+  'value-propagate.c',
+  'video-degradation.c',
+  'waves.c',
+  'whirl-pinch.c',
+  'wind.c',
+]
+
+# module.c (autogenerated)
+operations_common_gpl3_module_c = custom_target('operations-common-gpl3-module.c',
+  input: operations_common_gpl3_c_sources,
+  output: 'module.c',
+  command: [ gen_loader_sh,
+    '@INPUT@',
+  ],
+  capture: true,
+)
+
+operations_common_gpl3_sources = [
+  operations_common_gpl3_c_sources,
+  operations_common_gpl3_module_c,
+]
+
+operations_common_gpl3_cflags = [
+  '-DGEGL_OP_BUNDLE',
+]
+
+operations_common_gpl3 = library('gegl-common-gpl3',
+  operations_common_gpl3_sources,
+  c_args: operations_common_gpl3_cflags,
+  include_directories: config_h_dir,
+  dependencies: libgegl_dep,
+  install: true,
+  install_dir: operations_ext_dir,
+)
diff --git a/operations/common/meson.build b/operations/common/meson.build
new file mode 100644
index 0000000..f9d8b11
--- /dev/null
+++ b/operations/common/meson.build
@@ -0,0 +1,132 @@
+operations_common_c_sources = [
+  'alien-map.c',
+  'bilateral-filter.c',
+  'box-blur.c',
+  'brightness-contrast.c',
+  'buffer-sink.c',
+  'buffer-source.c',
+  'c2g.c',
+  'checkerboard.c',
+  'dither.c',
+  'color-enhance.c',
+  'color-rotate.c',
+  'color-temperature.c',
+  'color-warp.c',
+  'color.c',
+  'component-extract.c',
+  'contrast-curve.c',
+  'convolution-matrix.c',
+  'copy-buffer.c',
+  'difference-of-gaussians.c',
+  'display.c',
+  'distance-transform.c',
+  'dropshadow.c',
+  'edge-neon.c',
+  'edge-sobel.c',
+  'exp-combine.c',
+  'exposure.c',
+  'fattal02.c',
+  'gaussian-blur.c',
+  'gblur-1d.c',
+  'gegl-buffer-load-op.c',
+  'gegl-buffer-save-op.c',
+  'gegl.c',
+  'grey.c',
+  'grid.c',
+  'high-pass.c',
+  'hue-chroma.c',
+  'image-compare.c',
+  'image-gradient.c',
+  'introspect.c',
+  'invert-gamma.c',
+  'invert-linear.c',
+  'layer.c',
+  'levels.c',
+  'linear-gradient.c',
+  'magick-load.c',
+  'mantiuk06.c',
+  'map-absolute.c',
+  'map-relative.c',
+  'matting-global.c',
+  'mblur.c',
+  'mirrors.c',
+  'mix.c',
+  'mono-mixer.c',
+  'motion-blur-linear.c',
+  'newsprint.c',
+  'noise-cie-lch.c',
+  'noise-hsv.c',
+  'noise-hurl.c',
+  'noise-perlin.c',
+  'noise-pick.c',
+  'noise-reduction.c',
+  'noise-rgb.c',
+  'noise-simplex.c',
+  'noise-spread.c',
+  'noise-cell.c',
+  'opacity.c',
+  'open-buffer.c',
+  'over.c',
+  'panorama-projection.c',
+  'pixelize.c',
+  'posterize.c',
+  'radial-gradient.c',
+  'rectangle.c',
+  'reinhard05.c',
+  'remap.c',
+  'rgb-clip.c',
+  'saturation.c',
+  'save.c',
+  'sepia.c',
+  'slic.c',
+  'snn-mean.c',
+  'stress.c',
+  'stretch-contrast-hsv.c',
+  'stretch-contrast.c',
+  'svg-huerotate.c',
+  'svg-luminancetoalpha.c',
+  'svg-matrix.c',
+  'svg-saturate.c',
+  'threshold.c',
+  'tile.c',
+  'tile-seamless.c',
+  'unsharp-mask.c',
+  'unpremultiply.c',
+  'value-invert.c',
+  'vignette.c',
+  'warp.c',
+  'waterpixels.c',
+  'watershed-transform.c',
+  'wavelet-blur-1d.c',
+  'wavelet-blur.c',
+  'weighted-blend.c',
+  'write-buffer.c',
+]
+
+# module.c (autogenerated)
+operations_common_module_c = custom_target('operations-common-module.c',
+  input: operations_common_c_sources,
+  output: 'module.c',
+  command: [ gen_loader_sh,
+    '@INPUT@',
+  ],
+  capture: true,
+)
+
+operations_common_sources = [
+  operations_common_c_sources,
+  operations_common_module_c,
+]
+
+operations_common_cflags = [
+  '-DGEGL_OP_BUNDLE',
+]
+
+operations_common = library('gegl-common',
+  operations_common_sources,
+  c_args: operations_common_cflags,
+  include_directories: config_h_dir,
+  dependencies: libgegl_dep,
+  install: true,
+  install_dir: operations_ext_dir,
+)
diff --git a/operations/core/meson.build b/operations/core/meson.build
new file mode 100644
index 0000000..9c3d274
--- /dev/null
+++ b/operations/core/meson.build
@@ -0,0 +1,37 @@
+operations_core_c_sources = [
+  'cache.c',
+  'load.c',
+  'clone.c',
+  'cast-format.c',
+  'crop.c',
+  'json.c',
+  'nop.c',
+]
+
+# module.c (autogenerated)
+operations_core_module_c = custom_target('operations-core-module.c',
+  input: operations_core_c_sources,
+  output: 'module.c',
+  command: [ gen_loader_sh,
+    '@INPUT@',
+  ],
+  capture: true,
+)
+
+operations_core_sources = [
+  operations_core_c_sources,
+  operations_core_module_c,
+]
+
+operations_core_cflags = [
+  '-DGEGL_OP_BUNDLE',
+]
+
+operations_core = library('gegl-core',
+  operations_core_sources,
+  c_args: operations_core_cflags,
+  include_directories: config_h_dir,
+  dependencies: libgegl_dep,
+  install: true,
+  install_dir: operations_ext_dir,
+)
diff --git a/operations/external/meson.build b/operations/external/meson.build
new file mode 100644
index 0000000..9d63dda
--- /dev/null
+++ b/operations/external/meson.build
@@ -0,0 +1,32 @@
+
+if pangocairo_support
+  library('text',
+    'text.c',
+    dependencies: [ libgegl_dep, pangocairo ],
+    install: true,
+    install_dir: operations_ext_dir,
+  )
+endif
+
+if cairo_support
+  library('path',
+    'path.c',
+    dependencies: [ libgegl_dep, cairo ],
+    install: true,
+    install_dir: operations_ext_dir,
+  )
+  library('vector-fill',
+    'vector-fill.c',
+    dependencies: [ libgegl_dep, cairo ],
+    install: true,
+    install_dir: operations_ext_dir,
+  )
+  library('vector-stroke',
+    'vector-stroke.c',
+    dependencies: [ libgegl_dep, cairo ],
+    install: true,
+    install_dir: operations_ext_dir,
+  )
+endif
+
+# XXX the rest
diff --git a/operations/generated/meson.build b/operations/generated/meson.build
new file mode 100644
index 0000000..7e9d35b
--- /dev/null
+++ b/operations/generated/meson.build
@@ -0,0 +1,57 @@
+operations_generated_c_sources = [
+  'add.c',
+  'clear.c',
+  'color-burn.c',
+  'color-dodge.c',
+  'darken.c',
+  'difference.c',
+  'divide.c',
+  'dst-atop.c',
+  'dst-in.c',
+  'dst-out.c',
+  'dst-over.c',
+  'dst.c',
+  'exclusion.c',
+  'gamma.c',
+  'hard-light.c',
+  'lighten.c',
+  'multiply.c',
+  'overlay.c',
+  'plus.c',
+  'screen.c',
+  'soft-light.c',
+  'src-atop.c',
+  'src-in.c',
+  'src-out.c',
+  'src.c',
+  'subtract.c',
+  'xor.c',
+]
+
+# module.c (autogenerated)
+operations_generated_module_c = custom_target('operations-generated-module.c',
+  input: operations_generated_c_sources,
+  output: 'module.c',
+  command: [ gen_loader_sh,
+    '@INPUT@',
+  ],
+  capture: true,
+)
+
+operations_generated_sources = [
+  operations_generated_c_sources,
+  operations_generated_module_c,
+]
+
+operations_generated_cflags = [
+  '-DGEGL_OP_BUNDLE',
+]
+
+operations_generated = library('gegl-generated',
+  operations_generated_sources,
+  c_args: operations_generated_cflags,
+  include_directories: config_h_dir,
+  dependencies: libgegl_dep,
+  install: true,
+  install_dir: operations_ext_dir,
+)
diff --git a/operations/json/meson.build b/operations/json/meson.build
new file mode 100644
index 0000000..4026695
--- /dev/null
+++ b/operations/json/meson.build
@@ -0,0 +1,7 @@
+json_operations = [
+  'grey2.json',
+]
+
+install_data(json_operations,
+  install_dir: operations_ext_dir,
+)
diff --git a/operations/meson.build b/operations/meson.build
new file mode 100644
index 0000000..5c5af19
--- /dev/null
+++ b/operations/meson.build
@@ -0,0 +1,14 @@
+operations_ext_dir = join_paths(libdir, 'gegl-@0@'.format(gegl_api_version))
+
+subdir('core')
+subdir('common')
+subdir('common-gpl3+')
+subdir('generated')
+# subdir('seamless-clone')
+subdir('transform')
+subdir('json')
+subdir('external')
+
+if workshop_enabled
+  subdir('workshop')
+endif
diff --git a/operations/transform/meson.build b/operations/transform/meson.build
new file mode 100644
index 0000000..e6cd9ec
--- /dev/null
+++ b/operations/transform/meson.build
@@ -0,0 +1,23 @@
+operations_transform_sources = [
+  'transform-core.c',
+  'transform-core.h',
+  'module.c',
+  'module.h',
+  'reflect.c',
+  'rotate.c',
+  'rotate-on-center.c',
+  'scale-ratio.c',
+  'scale-size.c',
+  'scale-size-keepaspect.c',
+  'shear.c',
+  'transform.c',
+  'translate.c',
+]
+
+operations_transform = library('gegl-transform',
+  operations_transform_sources,
+  include_directories: config_h_dir,
+  dependencies: libgegl_dep,
+  install: true,
+  install_dir: operations_ext_dir,
+)
diff --git a/operations/workshop/external/meson.build b/operations/workshop/external/meson.build
new file mode 100644
index 0000000..6e37b56
--- /dev/null
+++ b/operations/workshop/external/meson.build
@@ -0,0 +1,59 @@
+
+if cairo_support
+  line_profile_dependencies = [
+    common_deps,
+    libgegl_dep,
+    cairo,
+    pango,
+    babl,
+  ]
+
+  line_profile_op = library('line-profile',
+    'line-profile.c',
+    dependencies: line_profile_dependencies,
+    include_directories: config_h_dir,
+  )
+endif
+
+if lua_support
+  gluas_dependencies = [
+    common_deps,
+    libgegl_dep,
+    lua,
+    babl,
+  ]
+
+  gluas_op = library('gluas',
+    'gluas.c',
+    dependencies: gluas_dependencies,
+    include_directories: config_h_dir,
+  )
+endif
+
+if lensfun_support
+  lens_correct_op_dependencies = [
+    common_deps,
+    libgegl_dep,
+    lensfun,
+  ]
+
+  lens_correct_op = library('lens-correct',
+    'lens-correct.c',
+    dependencies: lens_correct_op_dependencies,
+    include_directories: config_h_dir,
+  )
+endif
+
+if libv4l2_support
+  v4l2_op_dependencies = [
+    common_deps,
+    libgegl_dep,
+    libv4l2,
+  ]
+
+  v4l2_op = library('v4l2',
+    'v4l2.c',
+    dependencies: v4l2_op_dependencies,
+    include_directories: config_h_dir,
+  )
+endif
diff --git a/operations/workshop/generated/meson.build b/operations/workshop/generated/meson.build
new file mode 100644
index 0000000..6be1591
--- /dev/null
+++ b/operations/workshop/generated/meson.build
@@ -0,0 +1,23 @@
+workshop_generated_ops = [
+  'average',
+  'blend-reflect',
+  'negation',
+  'soft-burn',
+  'soft-dodge',
+  'subtractive',
+]
+
+workshop_generated_ops_deps = [
+  common_deps,
+  libgegl_dep,
+]
+
+foreach op: workshop_generated_ops
+  library(op,
+    '@0@.c'.format(op),
+    dependencies: workshop_generated_ops_deps ,
+    include_directories: config_h_dir,
+    install: true,
+    install_dir: operations_ext_dir,
+  )
+endforeach
diff --git a/operations/workshop/meson.build b/operations/workshop/meson.build
new file mode 100644
index 0000000..0621c91
--- /dev/null
+++ b/operations/workshop/meson.build
@@ -0,0 +1,36 @@
+subdir('generated')
+subdir('external')
+
+workshop_ops = [
+  'bayer-matrix',
+  'bilateral-filter-fast',
+  'demosaic-bimedian',
+  'demosaic-simple',
+  'ditto',
+  'gradient-map',
+  'hstack',
+  'integral-image',
+  'kuwahara',
+  'linear-sinusoid',
+  'median-blur',
+  'rawbayer-load',
+  'segment-kmeans',
+  'shadows-highlights',
+  'shadows-highlights-correction',
+  'spherize',
+]
+
+workshop_ops_dependencies = [
+  common_deps,
+  libgegl_dep,
+]
+
+foreach op: workshop_ops
+  library(op,
+    '@0@.c'.format(op),
+    dependencies: workshop_ops_dependencies,
+    include_directories: config_h_dir,
+    install: true,
+    install_dir: operations_ext_dir,
+  )
+endforeach
diff --git a/perf/meson.build b/perf/meson.build
new file mode 100644
index 0000000..5f3070a
--- /dev/null
+++ b/perf/meson.build
@@ -0,0 +1,31 @@
+perf_tests = [
+  'test-blur',
+  'test-bcontrast',
+  'test-bcontrast-minichunk',
+  'test-unsharpmask',
+  'test-bcontrast-4x',
+  'test-init',
+  'test-gegl-buffer-access',
+  'test-samplers',
+  'test-rotate',
+  'test-saturation',
+  'test-scale',
+  'test-translate',
+]
+
+perf_tests_cflags = [
+  '-DG_DISABLE_SINGLE_INCLUDES',
+  '-DGLIB_DISABLE_DEPRECATION_WARNINGS',
+  '-DCLUTTER_DISABLE_DEPRECATION_WARNINGS',
+  '-DTESTS_DATA_DIR="@0@"'.format(join_paths(meson.source_root(), 'tests', 'data')),
+]
+
+foreach _test: perf_tests
+  test_bin = executable(_test,
+    '@0@.c'.format(_test),
+    dependencies: libgegl_dep,
+    c_args: perf_tests_cflags,
+  )
+
+  test(_test, test_bin)
+endforeach
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 0000000..f904cde
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1,3 @@
+i18n.gettext(meson.project_name(),
+  preset: 'glib'
+)
diff --git a/seamless-clone/meson.build b/seamless-clone/meson.build
new file mode 100644
index 0000000..81e1ebc
--- /dev/null
+++ b/seamless-clone/meson.build
@@ -0,0 +1,18 @@
+libgegl_sc_sources = [
+  'sc-context.c',
+  'sc-outline.c',
+  'sc-sample.c',
+]
+
+libgegl_sc_dependencies = [
+  common_deps,
+  libgegl_dep,
+  poly2tri_c,
+]
+
+libgegl_sc = library('gegl-sc-@0@'.format(gegl_api_version),
+  libgegl_sc_sources,
+  dependencies: libgegl_sc_dependencies,
+)
+
+# XXX pkg-config file
diff --git a/tests/compositions/meson.build b/tests/compositions/meson.build
new file mode 100644
index 0000000..dedff2b
--- /dev/null
+++ b/tests/compositions/meson.build
@@ -0,0 +1 @@
+run_compositions = find_program('run-compositions.py')
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..3839689
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,15 @@
+test_env = environment()
+test_env.set('ABS_TOP_BUILDDIR', meson.build_root())
+test_env.set('ABS_TOP_SOURCEDIR', meson.source_root())
+test_env.set('GEGL_SWAP', 'RAM')
+test_env.set('GEGL_PATH', join_paths(meson.build_root(), 'operations'))
+# test_env.append('LD_LIBRARY_PATH', join_paths(meson.build_root(), 'gegl', '.libs'))
+test_env.append('GI_TYPELIB_PATH', join_paths(meson.build_root(), 'gegl'))
+
+# subdir('buffer')
+subdir('mipmap')
+# subdir('compositions')
+subdir('simple')
+subdir('xml')
+# subdir('ff-load-save')
+subdir('python')
diff --git a/tests/mipmap/meson.build b/tests/mipmap/meson.build
new file mode 100644
index 0000000..f2497c2
--- /dev/null
+++ b/tests/mipmap/meson.build
@@ -0,0 +1,14 @@
+mipmap_tests = [
+  'invert.sh',
+  'invert-crop.sh',
+  'unsharp-crop.sh',
+  'unsharp.sh',
+  'rotate.sh',
+  'rotate-crop.sh',
+]
+
+foreach _test: mipmap_tests
+  test(_test, find_program(_test),
+    env: test_env,
+  )
+endforeach
diff --git a/tests/python/meson.build b/tests/python/meson.build
new file mode 100644
index 0000000..9986ba8
--- /dev/null
+++ b/tests/python/meson.build
@@ -0,0 +1,13 @@
+python_tests = [
+  'test-gegl.py',
+  'test-gegl-node.py',
+  'test-gegl-color.py',
+  'test-gegl-buffer.py',
+  'test-gegl-format.py',
+]
+
+foreach _test: python_tests
+  test(_test, find_program(_test),
+    env: test_env,
+  )
+endforeach
diff --git a/tests/simple/meson.build b/tests/simple/meson.build
new file mode 100644
index 0000000..ae84aa4
--- /dev/null
+++ b/tests/simple/meson.build
@@ -0,0 +1,41 @@
+simple_tests = [
+  'test-backend-file',
+  'test-buffer-cast',
+  'test-buffer-changes',
+  'test-buffer-extract',
+  'test-buffer-hot-tile',
+  'test-buffer-sharing',
+  'test-buffer-tile-voiding',
+  'test-change-processor-rect',
+  'test-convert-format',
+  'test-color-op',
+  'test-empty-tile',
+  'test-format-sensing',
+  'test-gegl-rectangle',
+  'test-gegl-color',
+  'test-gegl-tile',
+  'test-image-compare',
+  'test-license-check',
+  'test-misc',
+  'test-node-connections',
+  'test-node-passthrough',
+  'test-node-properties',
+  'test-object-forked',
+  'test-opencl-colors',
+  'test-serialize',
+  'test-path',
+  'test-proxynop-processing',
+  'test-scaled-blit',
+  'test-svg-abyss',
+]
+
+foreach _test: simple_tests
+  test_bin = executable(_test,
+    '@0@.c'.format(_test),
+    dependencies: libgegl_dep,
+  )
+
+  test(_test, test_bin,
+    env: test_env,
+  )
+endforeach
diff --git a/tests/xml/meson.build b/tests/xml/meson.build
new file mode 100644
index 0000000..70e080d
--- /dev/null
+++ b/tests/xml/meson.build
@@ -0,0 +1,16 @@
+xml_tests = [
+  'test-save',
+  'test-load',
+  'test-roundtrip',
+]
+
+foreach _test: xml_tests
+  test_bin = executable(_test,
+    '@0@.c'.format(_test),
+    dependencies: libgegl_dep,
+  )
+
+  test(_test, test_bin,
+    env: test_env,
+  )
+endforeach
diff --git a/tools/meson.build b/tools/meson.build
new file mode 100644
index 0000000..0c7f364
--- /dev/null
+++ b/tools/meson.build
@@ -0,0 +1,35 @@
+# gen-loader.sh
+gen_loader_sh = find_program('gen-loader.sh')
+gobj2dot = find_program('gobj2dot.rb')
+
+# Compiled tools
+tools = [
+  'introspect',
+  'operation_reference',
+  'detect_opencl',
+  'gegl-tester',
+  'operations_html',
+]
+
+tools_cflags = [
+  '-DTOP_SRCDIR="@0@"'.format(meson.source_root()),
+]
+
+# Special case: gegl-imgcmp needs to be installed
+gegl_imgcmp = executable('gegl-imgcmp',
+  'gegl-imgcmp.c',
+  c_args: tools_cflags,
+  dependencies: libgegl_dep,
+  install: true,
+)
+
+foreach tool: tools
+  executable(tool,
+    '@0@.c'.format(tool),
+    c_args: tools_cflags,
+    dependencies: libgegl_dep,
+  )
+endforeach
+
+
+# TODO exp_combine



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