From 1bafbd462df6e0a249b70349cc1b96930f917b0b Mon Sep 17 00:00:00 2001 From: Jakub Bogusz Date: Mon, 5 Oct 2020 20:19:52 +0200 Subject: [PATCH] - enhanced x32 patch (adjust thin-slice package to support x86_64-x32 ABI) - more cross rust related hacks --- librsvg.spec | 2 +- x32.patch | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+), 1 deletion(-) diff --git a/librsvg.spec b/librsvg.spec index 082f1d3..34376eb 100644 --- a/librsvg.spec +++ b/librsvg.spec @@ -184,7 +184,7 @@ echo 'AC_DEFUN([GTK_DOC_CHECK],[])' >> acinclude.m4 %endif %ifarch x32 -%{__sed} -i -e '/CROSS_COMPILING/ s/test \$cross_compiling = yes/true/' configure.ac +%{__sed} -i -e 's/test "\?x\?\$cross_compiling"\? = "\?x\?yes"\?/true/' configure.ac %endif %build diff --git a/x32.patch b/x32.patch index 49be958..55a8929 100644 --- a/x32.patch +++ b/x32.patch @@ -9,3 +9,195 @@ if test "x$GDK_PIXBUF_QUERYLOADERS" = "xnone"; then AC_MSG_ERROR([gdk-pixbuf-query-loaders not found in path]) +--- librsvg-2.50.1/vendor/thin-slice/src/lib.rs.orig 2020-10-02 20:35:05.000000000 +0200 ++++ librsvg-2.50.1/vendor/thin-slice/src/lib.rs 2020-10-05 19:39:01.153324928 +0200 +@@ -29,14 +29,14 @@ + use std::cmp::Ordering; + use std::fmt; + use std::hash::{Hash, Hasher}; +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + use std::marker::PhantomData; +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + use std::mem; + use std::ops::{Deref, DerefMut}; +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + use std::ptr::NonNull; +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + use std::slice; + + /// An owned slice that tries to use only one word of storage. +@@ -56,38 +56,38 @@ + /// + /// If len >= 0xffff, then the top 16 bits of data will be 0xffff, and + /// the lower 48 bits will be a pointer to a heap allocated `Box<[T]>`. +- #[cfg(target_arch = "x86_64")] ++ #[cfg(target_pointer_size = "64")] + data: NonNull<()>, + +- #[cfg(not(target_arch = "x86_64"))] ++ #[cfg(not(target_pointer_size = "64"))] + data: Box<[T]>, + +- #[cfg(target_arch = "x86_64")] ++ #[cfg(target_pointer_size = "64")] + _phantom: PhantomData>, + } + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + const TAG_MASK: usize = 0xffff000000000000; + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + const PTR_MASK: usize = 0x0000ffffffffffff; + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + const PTR_HIGH: usize = 0x0000800000000000; + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + const TAG_SHIFT: usize = 48; + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + const TAG_LIMIT: usize = TAG_MASK >> TAG_SHIFT; + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + enum Storage { + Inline(*mut T, usize), + Spilled(*mut Box<[T]>), + } + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + impl ThinBoxedSlice { + /// Constructs a `ThinBoxedSlice` from a raw pointer. + /// +@@ -203,7 +203,7 @@ + } + } + +-#[cfg(not(target_arch = "x86_64"))] ++#[cfg(not(target_pointer_size = "64"))] + impl ThinBoxedSlice { + /// Constructs a `ThinBoxedSlice` from a raw pointer. + /// +@@ -284,7 +284,7 @@ + } + } + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + impl Storage { + #[inline] + fn from_data(data: NonNull<()>) -> Storage { +@@ -343,7 +343,7 @@ + unsafe impl Send for ThinBoxedSlice {} + unsafe impl Sync for ThinBoxedSlice {} + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + impl Drop for ThinBoxedSlice { + fn drop(&mut self) { + let _ = Into::>::into( +@@ -356,7 +356,7 @@ + } + + impl Clone for ThinBoxedSlice { +- #[cfg(target_arch = "x86_64")] ++ #[cfg(target_pointer_size = "64")] + fn clone(&self) -> Self { + unsafe { + match self.storage() { +@@ -373,7 +373,7 @@ + } + } + +- #[cfg(not(target_arch = "x86_64"))] ++ #[cfg(not(target_pointer_size = "64"))] + fn clone(&self) -> Self { + ThinBoxedSlice { + data: self.data.clone(), +@@ -396,7 +396,7 @@ + impl Deref for ThinBoxedSlice { + type Target = [T]; + +- #[cfg(target_arch = "x86_64")] ++ #[cfg(target_pointer_size = "64")] + fn deref(&self) -> &[T] { + unsafe { + match self.storage() { +@@ -410,14 +410,14 @@ + } + } + +- #[cfg(not(target_arch = "x86_64"))] ++ #[cfg(not(target_pointer_size = "64"))] + fn deref(&self) -> &[T] { + &*self.data + } + } + + impl DerefMut for ThinBoxedSlice { +- #[cfg(target_arch = "x86_64")] ++ #[cfg(target_pointer_size = "64")] + fn deref_mut(&mut self) -> &mut [T] { + unsafe { + match self.storage() { +@@ -431,7 +431,7 @@ + } + } + +- #[cfg(not(target_arch = "x86_64"))] ++ #[cfg(not(target_pointer_size = "64"))] + fn deref_mut(&mut self) -> &mut [T] { + &mut *self.data + } +@@ -498,7 +498,7 @@ + } + } + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + #[test] + fn test_spilled_storage() { + let x = ThinBoxedSlice::from(vec![0; TAG_LIMIT - 1].into_boxed_slice()); +@@ -508,7 +508,7 @@ + assert!(x.spilled_storage().is_some()); + } + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + #[test] + fn test_from_raw_large() { + let mut vec = vec![0; TAG_LIMIT]; +@@ -519,7 +519,7 @@ + assert_eq!(x[123], 456); + } + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + #[test] + fn test_into_raw_large() { + let mut vec = vec![0; TAG_LIMIT]; +@@ -531,7 +531,7 @@ + assert_eq!(y[123], 456); + } + +-#[cfg(target_arch = "x86_64")] ++#[cfg(target_pointer_size = "64")] + #[test] + fn test_leak_large() { + let mut vec = vec![0; TAG_LIMIT]; +--- librsvg-2.50.1/vendor/thin-slice/.cargo-checksum.json.orig 2020-10-02 20:35:05.000000000 +0200 ++++ librsvg-2.50.1/vendor/thin-slice/.cargo-checksum.json 2020-10-05 19:53:04.436621362 +0200 +@@ -1 +1 @@ +-{"files":{"Cargo.toml":"bc648e7794ea9bf0b7b520a0ba079ef65226158dc6ece1e617beadc52456e1b7","README.md":"4a83c0adbfdd3ae8047fe4fd26536d27b4e8db813f9926ee8ab09b784294e50f","src/lib.rs":"5b1f2bfc9edfc6036a8880cde88f862931eec5036e6cf63690f82921053b29fe"},"package":"8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"} +\ No newline at end of file ++{"files":{"Cargo.toml":"bc648e7794ea9bf0b7b520a0ba079ef65226158dc6ece1e617beadc52456e1b7","README.md":"4a83c0adbfdd3ae8047fe4fd26536d27b4e8db813f9926ee8ab09b784294e50f","src/lib.rs":"7d3aa7f2963fd8c758bf51aae7c7929ceda19a1f6fd178782a34011d985a7319"},"package":"8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"} -- 2.44.0