Package: xaralx Version: 0.7r1692-2 Followup-For: Bug #382658 Hi,
I have tested the patch provided in this bug. First of all, I had to modify debian/rules to build the package (see the attached debdiff). Basically, on Debian G5 machines running the powerpc port, uname -m report to be ppc64, which confuses the configure scripts. This can be a serious problem when the autobuilder is a G5 machine (This is not the case yet). After building the patched package, I managed to run xaralx. However, it systematically crashes when opening example files from xaralx-examples. (see the xml crash file). I did not try to do something else apart from opening a file. Hope this helps, -- Charles Plessy, Wako, Saitama, Japan. -- System Information: Debian Release: 4.0 APT prefers testing APT policy: (500, 'testing') Architecture: powerpc (ppc64) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.18-2-powerpc64 Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Versions of packages xaralx depends on: ii libc6 2.3.6.ds1-11 GNU C Library: Shared libraries ii libfreetype6 2.2.1-5 FreeType 2 font engine, shared lib ii libgcc1 1:4.1.1-21 GCC support library ii libglib2.0-0 2.12.4-2 The GLib library of C routines ii libgtk2.0-0 2.8.20-5 The GTK+ graphical user interface ii libjpeg62 6b-13 The Independent JPEG Group's JPEG ii libpango1.0-0 1.14.8-4 Layout and rendering of internatio ii libpng12-0 1.2.15~beta5-1 PNG library - runtime ii libstdc++6 4.1.1-21 The GNU Standard C++ Library v3 ii libwxbase2.6-0 2.6.3.2.1.5 wxBase library (runtime) - non-GUI ii libwxgtk2.6-0 2.6.3.2.1.5 wxWidgets Cross-platform C++ GUI t ii libxml2 2.6.27.dfsg-1 GNOME XML library Versions of packages xaralx recommends: ii imagemagick 7:6.2.4.5.dfsg1-0.14 Image manipulation programs ii xaralx-svg 0.7r1692-3 SVG (Scalable Vector Graphics) plu -- no debconf information
xaralx.xml
Description: application/xml
diff -u xaralx-0.7r1692/debian/patches/00list xaralx-0.7r1692/debian/patches/00list
--- xaralx-0.7r1692/debian/patches/00list
+++ xaralx-0.7r1692/debian/patches/00list
@@ -2,0 +3 @@
+30_powerpc_fixes.dpatch
diff -u xaralx-0.7r1692/debian/changelog xaralx-0.7r1692/debian/changelog
--- xaralx-0.7r1692/debian/changelog
+++ xaralx-0.7r1692/debian/changelog
@@ -1,3 +1,9 @@
+xaralx (0.7r1692-3) unstable; urgency=low
+
+ * Dpatched patch from bug 382658.
+
+ -- Charles Plessy <[EMAIL PROTECTED]> Sat, 24 Feb 2007 17:01:52 +0900
+
xaralx (0.7r1692-2) unstable; urgency=low
* List additional licenes in debian/copyright
diff -u xaralx-0.7r1692/debian/rules xaralx-0.7r1692/debian/rules
--- xaralx-0.7r1692/debian/rules
+++ xaralx-0.7r1692/debian/rules
@@ -9,6 +9,15 @@
CFLAGS = -Wall -g
AUTOMAKE = automake-1.9
+DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)
+ifeq ($(DEB_HOST_ARCH_CPU),powerpc)
+PLATFORM = powerpc
+else
+PLATFORM =
+endif
+
+
+
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
CFLAGS += -O0
else
@@ -20,7 +29,7 @@
dh_testdir
# Add here commands to configure the package.
#autoreconf -f # -i -s
- AUTOMAKE=/bin/true ACLOCAL=/bin/true AUTOCONF=/bin/true ./configure --enable-xarlib --enable-filters
+ AUTOMAKE=/bin/true ACLOCAL=/bin/true AUTOCONF=/bin/true ./configure $(PLATFORM) --enable-xarlib --enable-filters
touch configure-stamp
only in patch2:
unchanged:
--- xaralx-0.7r1692.orig/debian/patches/30_powerpc_fixes.dpatch
+++ xaralx-0.7r1692/debian/patches/30_powerpc_fixes.dpatch
@@ -0,0 +1,204 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 30_powerpc_fixes.dpatch by Charles Plessy <[EMAIL PROTECTED]>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch from bug 382658
+
[EMAIL PROTECTED]@
+
+Index: Kernel/cxfile.cpp
+===================================================================
+--- xaralx/Kernel/cxfile.cpp (revision 1694)
++++ xaralx/Kernel/cxfile.cpp (revision 1695)
+@@ -889,15 +889,17 @@
+
+ BOOL CXaraFile::Read(FLOAT* pf)
+ {
+- BOOL ok = (Read((BYTE*)pf,sizeof(FLOAT)));
+- *pf = LEtoNative(*pf);
++ FloatUnion f;
++ BOOL ok = (Read((BYTE*)&(f.u_INT32),sizeof(f.u_INT32)));
++ *pf = LEtoNative(f);
+ return ok;
+ }
+
+ BOOL CXaraFile::Read(double* pd)
+ {
+- BOOL ok = (Read((BYTE*)pd,sizeof(double)));
+- *pd = LEtoNative(*pd);
++ DoubleUnion f;
++ BOOL ok = (Read((BYTE*)&(f.u_INT64),sizeof(f.u_INT64)));
++ *pd = LEtoNative(f);
+ return ok;
+ }
+
+@@ -1088,12 +1090,14 @@
+
+ BOOL CXaraFile::Write(FLOAT f)
+ {
+- return (Write((BYTE*)&f,sizeof(FLOAT)));
++ FloatUnion u=NativetoLEU(f);
++ return (Write((BYTE*)&(u.u_INT32),sizeof(u.u_INT32)));
+ }
+
+ BOOL CXaraFile::Write(double d)
+ {
+- return (Write((BYTE*)&d,sizeof(double)));
++ DoubleUnion u=NativetoLEU(d);
++ return (Write((BYTE*)&(u.u_INT64),sizeof(u.u_INT64)));
+ }
+
+ BOOL CXaraFile::WriteWCHAR(WCHAR w)
+Index: Kernel/cxfrec.cpp
+===================================================================
+--- xaralx/Kernel/cxfrec.cpp (revision 1694)
++++ xaralx/Kernel/cxfrec.cpp (revision 1695)
+@@ -624,7 +624,8 @@
+ BOOL CXaraFileRecord::WriteFLOAT(FLOAT f)
+ {
+ ENTERWRITEFUNCTION(FTT_FLOAT);
+- BOOL ok = WriteBuffer((BYTE*)&f,sizeof(FLOAT));
++ FloatUnion u=NativetoLEU(f);
++ BOOL ok = WriteBuffer((BYTE*)&(u.u_INT32),sizeof(u.u_INT32));
+ LEAVEWRITEFUNCTION;
+ return (ok);
+ }
+@@ -668,7 +669,8 @@
+ BOOL CXaraFileRecord::WriteDOUBLE(double d)
+ {
+ ENTERWRITEFUNCTION(FTT_DOUBLE);
+- BOOL ok = WriteBuffer((BYTE*)&d,sizeof(double));
++ DoubleUnion u=NativetoLEU(d);
++ BOOL ok = WriteBuffer((BYTE*)&(u.u_INT64),sizeof(u.u_INT64));
+ LEAVEWRITEFUNCTION;
+ return (ok);
+ }
+@@ -1323,22 +1325,25 @@
+
+ BOOL CXaraFileRecord::ReadFLOAT(FLOAT* pf)
+ {
+- BOOL ok = ReadBuffer((BYTE*)pf,sizeof(FLOAT));
+- *pf = LEtoNative(*pf);
++ FloatUnion f;
++ BOOL ok = ReadBuffer((BYTE*)&(f.u_INT32),sizeof(f.u_INT32));
++ *pf = LEtoNative(f);
+ return ok;
+ }
+
+ BOOL CXaraFileRecord::ReadDOUBLE(double* pd)
+ {
+- BOOL ok = ReadBuffer((BYTE*)pd,sizeof(double));
+- *pd = LEtoNative(*pd);
++ DoubleUnion f;
++ BOOL ok = ReadBuffer((BYTE*)&(f.u_INT64),sizeof(f.u_INT64));
++ *pd = LEtoNative(f);
+ return ok;
+ }
+
+ BOOL CXaraFileRecord::ReadDOUBLEnoError(double* pd)
+ {
+- BOOL ok = ReadBuffernoError((BYTE*)pd,sizeof(double));
+- *pd = LEtoNative(*pd);
++ DoubleUnion f;
++ BOOL ok = ReadBuffernoError((BYTE*)&(f.u_INT64),sizeof(f.u_INT64));
++ *pd = LEtoNative(f);
+ return ok;
+ }
+
+Index: wxOil/hardwaremanager.h
+===================================================================
+--- xaralx/wxOil/hardwaremanager.h (revision 1694)
++++ xaralx/wxOil/hardwaremanager.h (revision 1695)
+@@ -115,6 +115,19 @@
+
+ namespace oilHardwareManager
+ {
++ // Avoid aliasing problems
++ union DoubleUnion
++ {
++ double u_double;
++ INT64 u_INT64;
++ };
++
++ union FloatUnion
++ {
++ float u_float;
++ INT32 u_INT32;
++ };
++
+ // Byte ordering functions
+ #if defined(WORDS_BIGENDIAN)
+ // __BIG_ENDIAN__
+@@ -158,16 +171,28 @@
+ static inline FIXED16 NativetoBE(FIXED16 n) {return n;}
+ static inline FIXED16 NativetoLE(FIXED16 n) {return FIXED16::FromRawLong(wxINT32_SWAP_ALWAYS(n.GetRawLong()));}
+
+- static inline float BEtoNative(float n) {return n;}
+- static inline float LEtoNative(float n) {return n;} //{return reinterpret_cast<float>(wxINT32_SWAP_ALWAYS(reinterpret_cast<INT32>(n)));}
+- static inline float NativetoBE(float n) {return n;}
+- static inline float NativetoLE(float n) {return n;} //{return reinterpret_cast<float>(wxINT32_SWAP_ALWAYS(reinterpret_cast<INT32>(n)));}
++ // AMB is not sure these are are a great idea as they rely on floats/doubles being set up with invalid data
++// static inline float BEtoNative(float n) {return n;}
++// static inline float LEtoNative(float n) {return n;} //{return reinterpret_cast<float>(wxINT32_SWAP_ALWAYS(reinterpret_cast<INT32>(n)));}
++// static inline float NativetoBE(float n) {return n;}
++// static inline float NativetoLE(float n) {return n;} //{return reinterpret_cast<float>(wxINT32_SWAP_ALWAYS(reinterpret_cast<INT32>(n)));}
+
+- static inline double BEtoNative(double n) {return n;}
+- static inline double LEtoNative(double n) {return n;} //{return reinterpret_cast<double>(wxINT64_SWAP_ALWAYS(reinterpret_cast<INT64>(n)));}
+- static inline double NativetoBE(double n) {return n;}
+- static inline double NativetoLE(double n) {return n;} //{return reinterpret_cast<double>(wxINT64_SWAP_ALWAYS(reinterpret_cast<INT64>(n)));}
++ // AMB is not sure these are are a great idea as they rely on floats/doubles being set up with invalid data
++// static inline double BEtoNative(double n) {return n;}
++// static inline double LEtoNative(double n) {return n;} //{return reinterpret_cast<double>(wxINT64_SWAP_ALWAYS(reinterpret_cast<INT64>(n)));}
++// static inline double NativetoBE(double n) {return n;}
++// static inline double NativetoLE(double n) {return n;} //{return reinterpret_cast<double>(wxINT64_SWAP_ALWAYS(reinterpret_cast<INT64>(n)));}
+
++ static inline float BEtoNative(FloatUnion n) {return n.u_float;}
++ static inline float LEtoNative(FloatUnion n) {n.u_INT32 = wxINT32_SWAP_ALWAYS(n.u_INT32); return n.u_float;}
++ static inline FloatUnion NativetoBEU(float n) {FloatUnion f; f.u_float=n; return f;}
++ static inline FloatUnion NativetoLEU(float n) {FloatUnion f; f.u_float=n; f.u_INT32 = wxINT32_SWAP_ALWAYS(f.u_INT32); return f;}
++
++ static inline double BEtoNative(DoubleUnion n) {return n.u_double;}
++ static inline double LEtoNative(DoubleUnion n) {n.u_INT64 = wxINT64_SWAP_ALWAYS(n.u_INT64); return n.u_double;}
++ static inline DoubleUnion NativetoBEU(double n) {DoubleUnion f; f.u_double=n; return f;}
++ static inline DoubleUnion NativetoLEU(double n) {DoubleUnion f; f.u_double=n; f.u_INT64 = wxINT64_SWAP_ALWAYS(f.u_INT64); return f;}
++
+ #else
+ // __LITTLE_ENDIAN__
+ // Little-Endian, signed
+@@ -210,16 +235,27 @@
+ static inline FIXED16 NativetoBE(FIXED16 n) {return FIXED16::FromRawLong(wxINT32_SWAP_ALWAYS(n.GetRawLong()));}
+ static inline FIXED16 NativetoLE(FIXED16 n) {return n;}
+
+- static inline float BEtoNative(float n) {return n;} //{return reinterpret_cast<float>(wxINT32_SWAP_ALWAYS(reinterpret_cast<INT32>(n)));}
+- static inline float LEtoNative(float n) {return n;}
+- static inline float NativetoBE(float n) {return n;} //{return reinterpret_cast<float>(wxINT32_SWAP_ALWAYS(reinterpret_cast<INT32>(n)));}
+- static inline float NativetoLE(float n) {return n;}
++ // AMB is not sure these are are a great idea as they rely on floats/doubles being set up with invalid data
++// static inline float BEtoNative(float n) {return n;} //{return reinterpret_cast<float>(wxINT32_SWAP_ALWAYS(reinterpret_cast<INT32>(n)));}
++// static inline float LEtoNative(float n) {return n;}
++// static inline float NativetoBE(float n) {return n;} //{return reinterpret_cast<float>(wxINT32_SWAP_ALWAYS(reinterpret_cast<INT32>(n)));}
++// static inline float NativetoLE(float n) {return n;}
+
+- static inline double BEtoNative(double n) {return n;} //{return reinterpret_cast<double>(wxINT64_SWAP_ALWAYS(reinterpret_cast<INT64>(n)));}
+- static inline double LEtoNative(double n) {return n;}
+- static inline double NativetoBE(double n) {return n;} //{return reinterpret_cast<double>(wxINT64_SWAP_ALWAYS(reinterpret_cast<INT64>(n)));}
+- static inline double NativetoLE(double n) {return n;}
++ // AMB is not sure these are are a great idea as they rely on floats/doubles being set up with invalid data
++// static inline double BEtoNative(double n) {return n;} //{return reinterpret_cast<double>(wxINT64_SWAP_ALWAYS(reinterpret_cast<INT64>(n)));}
++// static inline double LEtoNative(double n) {return n;}
++// static inline double NativetoBE(double n) {return n;} //{return reinterpret_cast<double>(wxINT64_SWAP_ALWAYS(reinterpret_cast<INT64>(n)));}
++// static inline double NativetoLE(double n) {return n;}
+
++ static inline float BEtoNative(FloatUnion n) {n.u_INT32 = wxINT32_SWAP_ALWAYS(n.u_INT32); return n.u_float;}
++ static inline float LEtoNative(FloatUnion n) {return n.u_float;}
++ static inline FloatUnion NativetoBEU(float n) {FloatUnion f; f.u_float=n; f.u_INT32 = wxINT32_SWAP_ALWAYS(f.u_INT32); return f;}
++ static inline FloatUnion NativetoLEU(float n) {FloatUnion f; f.u_float=n; return f;}
++
++ static inline double BEtoNative(DoubleUnion n) {n.u_INT64 = wxINT64_SWAP_ALWAYS(n.u_INT64); return n.u_double;}
++ static inline double LEtoNative(DoubleUnion n) {return n.u_double;}
++ static inline DoubleUnion NativetoBEU(double n) {DoubleUnion f; f.u_double=n; f.u_INT64 = wxINT64_SWAP_ALWAYS(f.u_INT64); return f;}
++ static inline DoubleUnion NativetoLEU(double n) {DoubleUnion f; f.u_double=n; return f;}
+ #endif
+
+ // -------------------------------------------------------------------------------

