Package: simgear
Version: 1.0.0-1
Severity: serious

simgear is now failing to build on alpha, hppa, and s390 with the following
error:

if gcc -DHAVE_CONFIG_H -I. -I. -I../../simgear -I../..  -fPIC -pipe  -g -O2 
-D_REENTRANT -MT bitslib.o -MD -MP -MF ".deps/bitslib.Tpo" -c -o bitslib.o 
bitslib.c; \
        then mv -f ".deps/bitslib.Tpo" ".deps/bitslib.Po"; else rm -f
".deps/bitslib.Tpo"; exit 1; fi
In file included from nasal.h:7,
                 from data.h:4,
                 from bitslib.c:2:
naref.h:20:3: error: #error Unrecognized CPU architecture
[...]

A full build log can be found at
<http://buildd.debian.org/fetch.cgi?pkg=simgear&arch=alpha&ver=1.0.0-1&stamp=1198415406&file=log&as=raw>.

The reason for this is the following code in naref.h:

/* Rather than play elaborate and complicated games with
 * platform-dependent endianness headers, just detect the platforms we
 * support.  This list is simpler and smaller, yet still quite
 * complete. */
#if (defined(__x86_64) && defined(__linux__)) || defined(__sparcv9) || \
    defined(__powerpc64__)
/* Win64 and Irix should work with this too, but have not been
 * tested */
#   define NASAL_NAN64
#elif defined(_M_IX86)   || defined(i386)    || defined(__x86_64) || \
      defined(__ia64__) || defined(_M_IA64) || defined(__ARMEL__) 
# define NASAL_LE
#elif defined(__sparc) || defined(__ppc__) ||defined(__PPC) || \
      defined(__mips) || defined(__ARMEB__)
# define NASAL_BE
#else
# error Unrecognized CPU architecture
#endif

... which is a cop-out, and a serious regression because the old code built
and ran fine on all architectures.

The above code should have __alpha__ added to the NASAL_LE list, and
__hppa__, __s390__, and __s390x__ added to the NASAL_BE list.

BTW, according to data.h, the NASAL_NAN64 option exists to support stupid
union tricks:

// On 64 bit systems, Nasal non-numeric references are stored with a
// bitmask that sets the top 16 bits.  As a double, this is a
// signalling NaN that cannot itself be produced by normal numerics
// code.  The pointer value can be reconstructed if (and only if) we
// are guaranteed that all memory that can be pointed to by a naRef
// (i.e. all memory returned by naAlloc) lives in the bottom 48 bits
// of memory.  Linux on x86_64, Win64, Solaris and Irix all have such
// policies with address spaces:

[...]  Linux doesn't document this rigorously, but testing
// shows that it allows 47 bits of address space (and current x86_64
// implementations are limited to 48 bits of virtual space anyway). So
// we choose 48 as the conservative compromise.

So this assumes the kernel will never expose more than 48bits of address
space to userspace processes --  a short-sighted and groundless assumption,
the reason Linux hasn't "documented this rigorously" is because there is no
such guarantee.  The NASAL_NAN64 option should be thrown out for all Linux
variants.

-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
Ubuntu Developer                                    http://www.debian.org/
[EMAIL PROTECTED]                                     [EMAIL PROTECTED]



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to