Package: libcfitsio2 Version: 2.510-1 Severity: normal Tags: upstream patch
The libfitsio2 library does not work on arm and mipsel. I discovered this from the buildd logs for the slcfitsio package: http://buildd.debian.org/fetch.php?&pkg=slcfitsio&ver=0.3.2b-4&arch=arm&stamp=1132249413&file=log&as=raw http://buildd.debian.org/fetch.php?&pkg=slcfitsio&ver=0.3.2b-4&arch=mipsel&stamp=1132283865&file=log&as=raw The simple test program attached below fails on vaughan.debian.org (a mipsel machine) with the following error message: [EMAIL PROTECTED]:~$ ./test !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Byteswapping is not being done correctly on this system. Check the MACHINE and BYTESWAPPED definitions in fitsio2.h Please report this problem to the author at [EMAIL PROTECTED] !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! fits_create_file returned status=1 [As this error message suggests, I am Cc:ing this bug report to the address mentioned above.] The following patch to the upstream source fixes the problem on vaughan: --- fitsio2.h 2005-11-18 16:51:07.000000000 +0000 +++ fitsio2.h-new 2005-11-18 16:49:57.000000000 +0000 @@ -132,6 +132,12 @@ #define MACHINE PC64BIT #define LONGSIZE 64 +#elif defined(MIPSEL) || defined(arm) + +/* mipsel and arm architectures */ +#define BYTESWAPPED TRUE +#define MACHINE NATIVE + #else /* assume machine uses the same IEEE formats as used in FITS files */ [Please, notice that I only tested the patch above on vaughan, a mipsel machine. There is currently no arm machine available to Debian developers.] -- System Information: Debian Release: testing/unstable APT prefers unstable APT policy: (500, 'unstable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/dash Kernel: Linux 2.6.8-1-686 Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1) Versions of packages libcfitsio2 depends on: ii libc6 2.3.5-6 GNU C Library: Shared libraries an libcfitsio2 recommends no packages. -- no debconf information
#include <stdio.h> #include <unistd.h> #include <fitsio.h> int main () { fitsfile *f; char *file = "/tmp/foo.fits"; int status = 0; (void) remove (file); fits_create_file (&f, file, &status); if (status) fprintf (stderr, "fits_create_file returned status=%d\n", status); if (f != NULL) { status = 0; fits_close_file (f, &status); } return 0; }