rpms/pixman/devel pixman-0.11.4-altivec.patch, NONE, 1.1 pixman.spec, 1.15, 1.16

David Woodhouse (dwmw2) fedora-extras-commits at redhat.com
Tue Jun 17 18:17:40 UTC 2008


Author: dwmw2

Update of /cvs/pkgs/rpms/pixman/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv29904

Modified Files:
	pixman.spec 
Added Files:
	pixman-0.11.4-altivec.patch 
Log Message:
fix Altivec detection

pixman-0.11.4-altivec.patch:

--- NEW FILE pixman-0.11.4-altivec.patch ---
--- pixman-0.11.4/pixman/pixman-pict.c~	2008-06-09 06:56:34.000000000 +0100
+++ pixman-0.11.4/pixman/pixman-pict.c	2008-06-17 18:38:34.000000000 +0100
@@ -1920,7 +1920,59 @@ pixman_bool_t pixman_have_vmx (void) {
     return have_vmx;
 }
 
-#else
+#elif defined (__linux__)
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <linux/auxvec.h>
+#include <asm/cputable.h>
+
+pixman_bool_t pixman_have_vmx (void)
+{
+    if (!initialized) {
+	char fname[64];
+	unsigned long buf[64];
+	ssize_t count = 0;
+	pid_t pid;
+	int fd, i;
+
+	pid = getpid();
+	snprintf(fname, sizeof(fname)-1, "/proc/%d/auxv", pid);
+
+	fd = open(fname, O_RDONLY);
+	if (fd >= 0) {
+	    for (i = 0; i <= (count / sizeof(unsigned long)); i += 2) {
+		/* Read more if buf is empty... */
+		if (i == (count / sizeof(unsigned long))) {
+		    count = read(fd, buf, sizeof(buf));
+		    if (count <= 0)
+			break;
+		    i = 0;
+		}
+		
+		if (buf[i] == AT_HWCAP) {
+		    have_vmx = !!(buf[i+1] & PPC_FEATURE_HAS_ALTIVEC);
+		    initialized = 1;
+		    break;
+		} else if (buf[i] == AT_NULL) {
+		    break;
+		}
+	    }
+	    close(fd);
+	}
+    }
+    if (!initialized) {
+	/* Something went wrong. Assume 'no' rather than playing 
+	   fragile tricks with catching SIGILL. */
+	have_vmx = FALSE;
+	initialized = 1;
+    }
+       
+    return have_vmx;
+}
+#else /* !__APPLE__ && !__linux__ */
 #include <signal.h>
 
 static void vmx_test(int sig, siginfo_t *si, void *unused) {


Index: pixman.spec
===================================================================
RCS file: /cvs/pkgs/rpms/pixman/devel/pixman.spec,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- pixman.spec	13 Jun 2008 20:01:24 -0000	1.15
+++ pixman.spec	17 Jun 2008 18:16:54 -0000	1.16
@@ -3,7 +3,7 @@
 
 Name:           pixman
 Version:        0.11.4
-Release:        2%{?dist}
+Release:        3%{?dist}
 Summary:        Pixel manipulation library
 
 Group:          System Environment/Libraries
@@ -17,6 +17,7 @@
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 Patch0:		leakfix.patch
+Patch1:		pixman-0.11.4-altivec.patch
 
 # BuildRequires:  automake autoconf libtool pkgconfig
 
@@ -35,6 +36,7 @@
 %prep
 %setup -q
 %patch0 -p1 -b .leakfix
+%patch1 -p1 -b .altivec
 
 %build
 %configure --disable-static
@@ -64,6 +66,9 @@
 %{_libdir}/pkgconfig/pixman-1.pc
 
 %changelog
+* Tue Jun 17 2008 David Woodhouse <dwmw2 at infradead.org> 0.11.4-3
+- Fix Altivec detection breakage (#451831)
+
 * Fri Jun 13 2008 Soren Sandmann <sandmann at redhat.com> 0.11.4-2
 - Plug bad leak (cherrypicked from master)
 




More information about the fedora-extras-commits mailing list