summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeeshan Ali <zeeshanak@gnome.org>2019-03-30 18:04:26 +0100
committerZeeshan Ali <zeeshanak@gnome.org>2019-04-07 15:11:47 +0200
commitfd61e128ee3a5f288efa0951360305aacedea500 (patch)
tree8d95cc163a5583c1c87bf9aa45d2e0a369f72ecc
parente832e7b0640e520db31ffe98cf371d9794531c8b (diff)
downloadgeoclue-wip/rust.tar.gz
WIP: Generate Rust code for our D-Bus interfaceswip/rust
-rwxr-xr-xinterface/dbus-codegen-rust.py11
-rw-r--r--interface/meson.build38
2 files changed, 48 insertions, 1 deletions
diff --git a/interface/dbus-codegen-rust.py b/interface/dbus-codegen-rust.py
new file mode 100755
index 0000000..69d85a0
--- /dev/null
+++ b/interface/dbus-codegen-rust.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python3
+
+import sys
+import os
+
+if len(sys.argv) < 4:
+ print('Usage: CODEGEN_BINARY OUTPUT_FILE INPUT_FILE')
+
+ sys.exit(-1)
+
+os.system(sys.argv[1] + ">" + sys.argv[2] + "<" + sys.argv[3])
diff --git a/interface/meson.build b/interface/meson.build
index 9e230a7..e15e12b 100644
--- a/interface/meson.build
+++ b/interface/meson.build
@@ -1,6 +1,33 @@
dbus_interface_dir = join_paths(datadir, 'dbus-1', 'interfaces')
geoclue_iface_sources = []
+geoclue_iface_rust_sources = []
+
+# Fetch dbus-codegen-rust command
+cargo = find_program('cargo')
+dbus_codegen_rs_fetch_cmd = [
+ cargo,
+ 'install', 'dbus-codegen',
+ '--bin', 'dbus-codegen-rust',
+ '--root', meson.current_build_dir() ]
+dbus_codegen_rs_dep = custom_target(
+ 'dbus-codegen-rs-dep',
+ output: 'dbus-codegen-rs-dep.out',
+ capture: true,
+ command: dbus_codegen_rs_fetch_cmd)
+
+dbus_codegen_rs = join_paths(
+ meson.current_build_dir(),
+ 'bin',
+ 'dbus-codegen-rust')
+python = find_program('python3')
+dbus_codegen_rs_wrapper = find_program('dbus-codegen-rust.py')
+dbus_codegen_rs_cmd = [
+ python,
+ dbus_codegen_rs_wrapper,
+ dbus_codegen_rs,
+ '@OUTPUT@',
+ '@INPUT@']
# Client interface
client_interface_xml = 'org.freedesktop.GeoClue2.Client.xml'
@@ -10,6 +37,15 @@ geoclue_iface_sources += gnome.gdbus_codegen(
interface_prefix: 'org.freedesktop.GeoClue2.',
namespace: 'GClueDBus',
docbook: 'docs')
+geoclue_iface_rust_sources += custom_target(
+ 'gclue-client-interface',
+ input: client_interface_xml,
+ output: 'client-dbus.rs',
+ install: true,
+ install_dir: dbus_interface_dir,
+ depends: dbus_codegen_rs_dep,
+ command: dbus_codegen_rs_cmd)
+
# Location interface
location_interface_xml = 'org.freedesktop.GeoClue2.Location.xml'
geoclue_iface_sources += gnome.gdbus_codegen(
@@ -18,6 +54,7 @@ geoclue_iface_sources += gnome.gdbus_codegen(
interface_prefix: 'org.freedesktop.GeoClue2.',
namespace: 'GClueDBus',
docbook: 'docs')
+
# Manager interface
manager_interface_xml = 'org.freedesktop.GeoClue2.Manager.xml'
geoclue_iface_sources += gnome.gdbus_codegen(
@@ -81,7 +118,6 @@ interface_files = [ location_interface_xml,
# Provide a single interface file too for backwards compatiblity.
# At least gnome-settings-daemon currently relies on that.
unified_interface_xml = 'org.freedesktop.GeoClue2.xml'
-python = find_program('python3')
create_interface = find_program('create-unified-xml.py')
cmd = [python, create_interface, '@OUTPUT@', '@INPUT@' ]