meson: Provide our Python tools for builds
Several of our tools are installed and are used by other projects to
generate code. However, there is no 'install' when projects use glib
as a subproject, so we needed some way for glib to 'provide' these
tools.
Starting from Meson 0.46, this can be done with the
meson.override_find_program() function. This also means that we can
use these tools ourselves via the GNOME module and don't need to
manually create command-lines.
diff --git a/gio/gdbus-2.0/codegen/meson.build b/gio/gdbus-2.0/codegen/meson.build
index 54a86b0..f0fd300 100644
--- a/gio/gdbus-2.0/codegen/meson.build
+++ b/gio/gdbus-2.0/codegen/meson.build
@@ -20,6 +20,9 @@
install_dir : get_option('bindir'),
configuration : gdbus_codegen_conf
)
+# Provide gdbus-codegen for us (GNOME module)
+# and for others when we're a subproject
+meson.override_find_program('gdbus-codegen', gdbus_codegen)
codegen_dir = join_paths(get_option('datadir'), 'glib-2.0/codegen')
diff --git a/gio/meson.build b/gio/meson.build
index f1faf0b..dca0e46 100644
--- a/gio/meson.build
+++ b/gio/meson.build
@@ -229,38 +229,24 @@
subdir('gdbus-2.0/codegen')
# Generate xdp-dbus.{c,h}
-xdp_dbus_generated = custom_target('xdp-dbus',
- input : ['org.freedesktop.portal.Documents.xml',
- 'org.freedesktop.portal.OpenURI.xml',
- 'org.freedesktop.portal.NetworkMonitor.xml',
- 'org.freedesktop.portal.ProxyResolver.xml'],
- output : ['xdp-dbus.h', 'xdp-dbus.c'],
- depend_files : gdbus_codegen_built_files,
- command : [python, gdbus_codegen,
- '--interface-prefix', 'org.freedesktop.portal.',
- '--output-directory', '@OUTDIR@',
- '--generate-c-code', 'xdp-dbus',
- '--c-namespace', 'GXdp',
- '--annotate', 'org.freedesktop.portal.Documents.Add()',
- 'org.gtk.GDBus.C.UnixFD', 'true',
- '--annotate', 'org.freedesktop.portal.Documents.AddNamed()',
- 'org.gtk.GDBus.C.UnixFD', 'true',
- '--annotate', 'org.freedesktop.portal.Documents.AddFull()',
- 'org.gtk.GDBus.C.UnixFD', 'true',
- '--annotate', 'org.freedesktop.portal.OpenURI.OpenFile()',
- 'org.gtk.GDBus.C.UnixFD', 'true',
- '@INPUT@'])
+xdp_dbus_generated = gnome.gdbus_codegen('xdp-dbus',
+ sources : ['org.freedesktop.portal.Documents.xml',
+ 'org.freedesktop.portal.OpenURI.xml',
+ 'org.freedesktop.portal.NetworkMonitor.xml',
+ 'org.freedesktop.portal.ProxyResolver.xml'],
+ interface_prefix : 'org.freedesktop.portal.',
+ namespace: 'GXdp',
+ annotations : [
+ ['org.freedesktop.portal.Documents.Add()', 'org.gtk.GDBus.C.UnixFD', 'true'],
+ ['org.freedesktop.portal.Documents.AddNamed()', 'org.gtk.GDBus.C.UnixFD', 'true'],
+ ['org.freedesktop.portal.Documents.AddFull()', 'org.gtk.GDBus.C.UnixFD', 'true'],
+ ['org.freedesktop.portal.OpenURI.OpenFile()', 'org.gtk.GDBus.C.UnixFD', 'true']])
# Generate gdbus-generated.{c,h}
-gdbus_daemon_generated = custom_target('gdbus-daemon-generated',
- input : ['dbus-daemon.xml'],
- output : ['gdbus-daemon-generated.h', 'gdbus-daemon-generated.c'],
- depend_files : gdbus_codegen_built_files,
- command : [python, gdbus_codegen,
- '--interface-prefix', 'org.',
- '--output-directory', '@OUTDIR@',
- '--generate-c-code', 'gdbus-daemon-generated',
- '--c-namespace', '_G', '@INPUT@'])
+gdbus_daemon_generated = gnome.gdbus_codegen('gdbus-daemon-generated',
+ 'dbus-daemon.xml',
+ interface_prefix: 'org.',
+ namespace: '_G')
settings_headers = files(
'gsettingsbackend.h',
@@ -714,27 +700,15 @@
gio_headers += gdbus_headers
install_headers(gio_headers, subdir : 'glib-2.0/gio/')
-# We can't use gnome.mkenums() because the GNOME module looks for glib-mkenums
-# in PATH, which means you can't bootstrap glib with its own glib-mkenums.
-gioenumtypes_h = custom_target('gioenumtypes_h',
- output : 'gioenumtypes.h',
- capture : true,
- input : gio_headers,
- install : true,
- install_dir : join_paths(get_option('includedir'), 'glib-2.0/gio'),
- command : [python, glib_mkenums,
- '--template', files('gioenumtypes.h.template'),
- '@INPUT@', gnetworking_h])
+gioenumtypes = gnome.mkenums('gioenumtypes',
+ sources : gio_headers,
+ h_template : 'gioenumtypes.h.template',
+ c_template : 'gioenumtypes.c.template',
+ install_header : true,
+ install_dir : join_paths(get_option('includedir'), 'glib-2.0/gio'))
-gioenumtypes_c = custom_target('gioenumtypes_c',
- output : 'gioenumtypes.c',
- capture : true,
- input : gio_headers,
- depends : [gioenumtypes_h],
- command : [python, glib_mkenums,
- '--template', files('gioenumtypes.c.template'),
- '@INPUT@', gnetworking_h])
-
+gioenumtypes_c = gioenumtypes[0]
+gioenumtypes_h = gioenumtypes[1]
gioenumtypes_dep = declare_dependency(sources : [gioenumtypes_h])
# inotify
diff --git a/gobject/meson.build b/gobject/meson.build
index 98e306d..dcf98aa 100644
--- a/gobject/meson.build
+++ b/gobject/meson.build
@@ -100,9 +100,10 @@
install : true,
install_dir : glib_bindir,
)
-
- # Set variables for later use
+ # Set variables for later use; by gio/tests/meson.build for example
set_variable(tool.underscorify(), tool_bin)
+ # Provide tools for us (GNOME module), and for others when we're a subproject
+ meson.override_find_program(tool, tool_bin)
endforeach
executable('gobject-query', 'gobject-query.c',
diff --git a/gobject/tests/meson.build b/gobject/tests/meson.build
index 88eba19..eaaeab3 100644
--- a/gobject/tests/meson.build
+++ b/gobject/tests/meson.build
@@ -44,33 +44,15 @@
test(test_name, exe, env : test_env)
endforeach
-marshalers_h = custom_target('marshalers_h',
- output : 'marshalers.h',
- input : 'marshalers.list',
- command : [
- python, glib_genmarshal,
- '--prefix=test',
- '--valist-marshallers',
- '--output=@OUTPUT@',
- '--quiet',
- '--header',
- '@INPUT@',
- ],
+marshalers = gnome.genmarshal('marshalers',
+ sources : 'marshalers.list',
+ prefix : 'test',
+ valist_marshallers : true,
+ extra_args : ['--quiet']
)
-marshalers_c = custom_target('marshalers_c',
- output : 'marshalers.c',
- input : 'marshalers.list',
- command : [
- python, glib_genmarshal,
- '--prefix=test',
- '--valist-marshallers',
- '--include-header=marshalers.h',
- '--output=@OUTPUT@',
- '--quiet',
- '--body',
- '@INPUT@',
- ],
-)
+
+marshalers_c = marshalers[0]
+marshalers_h = marshalers[1]
exe = executable('signals',
'signals.c', marshalers_h, marshalers_c,
diff --git a/meson.build b/meson.build
index 4974a51..37264a1 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
project('glib', 'c', 'cpp',
version : '2.57.0',
- meson_version : '>= 0.45.0',
+ meson_version : '>= 0.46.0',
default_options : [
'warning_level=1',
'c_std=gnu89'
@@ -1776,9 +1776,10 @@
enable_systemtap = true
endif
-
pkg = import('pkgconfig')
windows = import('windows')
+gnome = import('gnome')
+
subdir('glib')
subdir('gobject')
subdir('gthread')
@@ -1838,7 +1839,6 @@
man1_dir = get_option('mandir') + '/man1'
endif
-gnome = import('gnome')
subdir('docs/reference/glib')
subdir('docs/reference/gobject')
subdir('docs/reference/gio')