diff --git a/libvisual-0.4.0-better-altivec-detection.patch b/libvisual-0.4.0-better-altivec-detection.patch new file mode 100644 index 0000000..4004ad9 --- /dev/null +++ b/libvisual-0.4.0-better-altivec-detection.patch @@ -0,0 +1,69 @@ +--- libvisual-0.4.0/libvisual/lv_cpu.c.orig 2006-01-22 13:23:37.000000000 +0000 ++++ libvisual-0.4.0/libvisual/lv_cpu.c 2008-03-11 16:00:56.000000000 +0000 +@@ -50,8 +50,19 @@ + #endif + + #if defined(VISUAL_OS_LINUX) ++#if defined(VISUAL_ARCH_POWERPC) ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#else /* VISUAL_ARCH_POWERPC */ + #include + #endif ++#endif + + #if defined(VISUAL_OS_WIN32) + #include +@@ -154,6 +165,46 @@ static void check_os_altivec_support( vo + if (err == 0) + if (has_vu != 0) + __lv_cpu_caps.hasAltiVec = 1; ++#elif defined (VISUAL_OS_LINUX) ++ static int available = -1; ++ int new_avail = 0; ++ char fname[64]; ++ unsigned long buf[64]; ++ ssize_t count; ++ pid_t pid; ++ int fd, i; ++ ++ if (available != -1) ++ return; ++ ++ pid = getpid(); ++ snprintf(fname, sizeof(fname)-1, "/proc/%d/auxv", pid); ++ ++ fd = open(fname, O_RDONLY); ++ if (fd < 0) ++ goto out; ++more: ++ count = read(fd, buf, sizeof(buf)); ++ if (count < 0) ++ goto out_close; ++ ++ for (i=0; i < (count / sizeof(unsigned long)); i += 2) { ++ if (buf[i] == AT_HWCAP) { ++ new_avail = !!(buf[i+1] & PPC_FEATURE_HAS_ALTIVEC); ++ goto out_close; ++ } else if (buf[i] == AT_NULL) { ++ goto out_close; ++ } ++ } ++ ++ if (count == sizeof(buf)) ++ goto more; ++out_close: ++ close(fd); ++out: ++ available = new_avail; ++ if (available) ++ __lv_cpu_caps.hasAltiVec = 1; + #else /* !VISUAL_OS_DARWIN */ + /* no Darwin, do it the brute-force way */ + /* this is borrowed from the libmpeg2 library */ diff --git a/libvisual.spec b/libvisual.spec index 6497a59..0c8e283 100644 --- a/libvisual.spec +++ b/libvisual.spec @@ -12,6 +12,9 @@ Source0: http://dl.sf.net/libvisual/libvisual-0.4.0.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: xorg-x11-proto-devel +# https://bugzilla.redhat.com/show_bug.cgi?id=435771 +Patch0: libvisual-0.4.0-better-altivec-detection.patch + %description Libvisual is an abstraction library that comes between applications and @@ -39,6 +42,7 @@ This package contains the files needed to build an application with libvisual. %prep %setup -q +%patch0 -p1 -b .altivec-detection %build %ifarch i386 @@ -80,6 +84,9 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Tue Mar 11 2008 - Bastien Nocera - 0.4.0-6 +- Better Altivec detection, code from David Woodhouse + * Mon Feb 18 2008 Fedora Release Engineering - 0.4.0-5 - Autorebuild for GCC 4.3