Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save leon-anavi/ed9acc03f8daacd7f566 to your computer and use it in GitHub Desktop.
Save leon-anavi/ed9acc03f8daacd7f566 to your computer and use it in GitHub Desktop.
0002-cargo_0.7.0.bb-fix-dbus-rs-build-for-ARM.patch
From 581e68553e7a4c724317fed79f943dcb467ed990 Mon Sep 17 00:00:00 2001
From: Leon Anavi <leon.anavi@konsulko.com>
Date: Thu, 25 Feb 2016 20:08:06 +0200
Subject: [PATCH 2/2] cargo_0.7.0.bb: fix dbus-rs build for ARM
Cast correctly c_char raw pointers to fix issues while
building version 0.1.2 of crate dbus-rs for ARM.
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
---
recipes-devtools/cargo/cargo_0.7.0.bb | 12 ++
.../cargo/files/dbus-rs/dbus-rs-arm.patch | 129 +++++++++++++++++++++
2 files changed, 141 insertions(+)
create mode 100644 recipes-devtools/cargo/files/dbus-rs/dbus-rs-arm.patch
diff --git a/recipes-devtools/cargo/cargo_0.7.0.bb b/recipes-devtools/cargo/cargo_0.7.0.bb
index 5dd94fc..0640288 100644
--- a/recipes-devtools/cargo/cargo_0.7.0.bb
+++ b/recipes-devtools/cargo/cargo_0.7.0.bb
@@ -55,3 +55,15 @@ SRCREV_git2-rs = "19b6873c1fad7dc93c9c2dac4cba339dacf16efa"
SRCREV_FORMAT .= "_git2-rs"
EXTRA_OECARGO_PATHS += "${WORKDIR}/git2-rs"
+
+## dbus-rs
+SRC_URI += "\
+ git://github.com/diwic/dbus-rs.git;protocol=https;name=dbus-rs;destsuffix=dbus-rs \
+ file://dbus-rs/dbus-rs-arm.patch;patchdir=../dbus-rs \
+"
+
+# 0.1.2
+SRCREV_dbus-rs = "c2c4c98adcf9949992ac5b0050bf17afe10868c9"
+
+SRCREV_FORMAT .= "_dbus-rs"
+EXTRA_OECARGO_PATHS += "${WORKDIR}/dbus-rs"
diff --git a/recipes-devtools/cargo/files/dbus-rs/dbus-rs-arm.patch b/recipes-devtools/cargo/files/dbus-rs/dbus-rs-arm.patch
new file mode 100644
index 0000000..625c62c
--- /dev/null
+++ b/recipes-devtools/cargo/files/dbus-rs/dbus-rs-arm.patch
@@ -0,0 +1,129 @@
+diff --git a/src/lib.rs b/src/lib.rs
+index aac9c0f..8134dc4 100644
+--- a/src/lib.rs
++++ b/src/lib.rs
+@@ -60,7 +60,7 @@ unsafe impl Send for Error {}
+
+ fn c_str_to_slice(c: & *const libc::c_char) -> Option<&str> {
+ if *c == ptr::null() { None }
+- else { std::str::from_utf8( unsafe { CStr::from_ptr(*c).to_bytes() }).ok() }
++ else { std::str::from_utf8( unsafe { CStr::from_ptr(*c as *const _).to_bytes() }).ok() }
+ }
+
+ fn to_c_str(n: &str) -> CString { CString::new(n.as_bytes()).unwrap() }
+@@ -72,7 +72,7 @@ impl Error {
+ let m = to_c_str(&message.replace("%","%%"));
+ let mut e = Error::empty();
+
+- unsafe { ffi::dbus_set_error(e.get_mut(), n.as_ptr(), m.as_ptr()) };
++ unsafe { ffi::dbus_set_error(e.get_mut(), n.as_ptr() as *const _, m.as_ptr() as *const _) };
+ e
+ }
+
+@@ -272,21 +272,21 @@ impl Connection {
+ };
+ let r = unsafe {
+ let user_data: *mut libc::c_void = std::mem::transmute(&*self.i);
+- ffi::dbus_connection_try_register_object_path(self.conn(), p.as_ptr(), &vtable, user_data, e.get_mut())
++ ffi::dbus_connection_try_register_object_path(self.conn(), p.as_ptr() as *const _, &vtable, user_data, e.get_mut())
+ };
+ if r == 0 { Err(e) } else { Ok(()) }
+ }
+
+ pub fn unregister_object_path(&self, path: &str) {
+ let p = to_c_str(path);
+- let r = unsafe { ffi::dbus_connection_unregister_object_path(self.conn(), p.as_ptr()) };
++ let r = unsafe { ffi::dbus_connection_unregister_object_path(self.conn(), p.as_ptr() as *const _) };
+ if r == 0 { panic!("Out of memory"); }
+ }
+
+ pub fn list_registered_object_paths(&self, path: &str) -> Vec<String> {
+ let p = to_c_str(path);
+ let mut clist: *mut *mut libc::c_char = ptr::null_mut();
+- let r = unsafe { ffi::dbus_connection_list_registered(self.conn(), p.as_ptr(), &mut clist) };
++ let r = unsafe { ffi::dbus_connection_list_registered(self.conn(), p.as_ptr() as *const _, &mut clist) };
+ if r == 0 { panic!("Out of memory"); }
+ let mut v = Vec::new();
+ let mut i = 0;
+@@ -306,28 +306,28 @@ impl Connection {
+ pub fn register_name(&self, name: &str, flags: u32) -> Result<RequestNameReply, Error> {
+ let mut e = Error::empty();
+ let n = to_c_str(name);
+- let r = unsafe { ffi::dbus_bus_request_name(self.conn(), n.as_ptr(), flags, e.get_mut()) };
++ let r = unsafe { ffi::dbus_bus_request_name(self.conn(), n.as_ptr() as *const _, flags, e.get_mut()) };
+ if r == -1 { Err(e) } else { Ok(unsafe { std::mem::transmute(r) }) }
+ }
+
+ pub fn release_name(&self, name: &str) -> Result<ReleaseNameReply, Error> {
+ let mut e = Error::empty();
+ let n = to_c_str(name);
+- let r = unsafe { ffi::dbus_bus_release_name(self.conn(), n.as_ptr(), e.get_mut()) };
++ let r = unsafe { ffi::dbus_bus_release_name(self.conn(), n.as_ptr() as *const _, e.get_mut()) };
+ if r == -1 { Err(e) } else { Ok(unsafe { std::mem::transmute(r) }) }
+ }
+
+ pub fn add_match(&self, rule: &str) -> Result<(), Error> {
+ let mut e = Error::empty();
+ let n = to_c_str(rule);
+- unsafe { ffi::dbus_bus_add_match(self.conn(), n.as_ptr(), e.get_mut()) };
++ unsafe { ffi::dbus_bus_add_match(self.conn(), n.as_ptr() as *const _, e.get_mut()) };
+ if e.name().is_some() { Err(e) } else { Ok(()) }
+ }
+
+ pub fn remove_match(&self, rule: &str) -> Result<(), Error> {
+ let mut e = Error::empty();
+ let n = to_c_str(rule);
+- unsafe { ffi::dbus_bus_remove_match(self.conn(), n.as_ptr(), e.get_mut()) };
++ unsafe { ffi::dbus_bus_remove_match(self.conn(), n.as_ptr() as *const _, e.get_mut()) };
+ if e.name().is_some() { Err(e) } else { Ok(()) }
+ }
+
+diff --git a/src/message.rs b/src/message.rs
+index 23871f8..e3dd021 100644
+--- a/src/message.rs
++++ b/src/message.rs
+@@ -126,7 +126,7 @@ fn iter_append_array(i: &mut ffi::DBusMessageIter, a: &[MessageItem], t: TypeSig
+ let mut subiter = new_dbus_message_iter();
+ let atype = to_c_str(&t);
+
+- assert!(unsafe { ffi::dbus_message_iter_open_container(i, ffi::DBUS_TYPE_ARRAY, atype.as_ptr(), &mut subiter) } != 0);
++ assert!(unsafe { ffi::dbus_message_iter_open_container(i, ffi::DBUS_TYPE_ARRAY, atype.as_ptr() as *const _, &mut subiter) } != 0);
+ for item in a.iter() {
+ // assert!(item.type_sig() == t);
+ item.iter_append(&mut subiter);
+@@ -148,7 +148,7 @@ fn iter_append_struct(i: &mut ffi::DBusMessageIter, a: &[MessageItem]) {
+ fn iter_append_variant(i: &mut ffi::DBusMessageIter, a: &MessageItem) {
+ let mut subiter = new_dbus_message_iter();
+ let atype = to_c_str(&format!("{}", a.array_type() as u8 as char));
+- assert!(unsafe { ffi::dbus_message_iter_open_container(i, ffi::DBUS_TYPE_VARIANT, atype.as_ptr(), &mut subiter) } != 0);
++ assert!(unsafe { ffi::dbus_message_iter_open_container(i, ffi::DBUS_TYPE_VARIANT, atype.as_ptr() as *const _, &mut subiter) } != 0);
+ a.iter_append(&mut subiter);
+ assert!(unsafe { ffi::dbus_message_iter_close_container(i, &mut subiter) } != 0);
+ }
+@@ -481,7 +481,7 @@ impl Message {
+ init_dbus();
+ let (d, p, i, m) = (to_c_str(destination), to_c_str(path), to_c_str(iface), to_c_str(method));
+ let ptr = unsafe {
+- ffi::dbus_message_new_method_call(d.as_ptr(), p.as_ptr(), i.as_ptr(), m.as_ptr())
++ ffi::dbus_message_new_method_call(d.as_ptr() as *const _, p.as_ptr() as *const _, i.as_ptr() as *const _, m.as_ptr() as *const _)
+ };
+ if ptr == ptr::null_mut() { None } else { Some(Message { msg: ptr} ) }
+ }
+@@ -490,7 +490,7 @@ impl Message {
+ init_dbus();
+ let (p, i, m) = (to_c_str(path), to_c_str(iface), to_c_str(method));
+ let ptr = unsafe {
+- ffi::dbus_message_new_signal(p.as_ptr(), i.as_ptr(), m.as_ptr())
++ ffi::dbus_message_new_signal(p.as_ptr() as *const _, i.as_ptr() as *const _, m.as_ptr() as *const _)
+ };
+ if ptr == ptr::null_mut() { None } else { Some(Message { msg: ptr} ) }
+ }
+@@ -502,7 +502,7 @@ impl Message {
+
+ pub fn new_error(m: &Message, error_name: &str, error_message: &str) -> Option<Message> {
+ let (en, em) = (to_c_str(error_name), to_c_str(error_message));
+- let ptr = unsafe { ffi::dbus_message_new_error(m.msg, en.as_ptr(), em.as_ptr()) };
++ let ptr = unsafe { ffi::dbus_message_new_error(m.msg, en.as_ptr() as *const _, em.as_ptr() as *const _) };
+ if ptr == ptr::null_mut() { None } else { Some(Message { msg: ptr} ) }
+ }
+
--
2.1.4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment