[Ecls-list] ecl 9.4.1 build trouble on Solaris 10/x86

Michael Abshoff michael.abshoff at googlemail.com
Sat May 16 00:33:50 UTC 2009


Hi list,

I have been having trouble to build ecl on Solaris 10/x86.  Everything
works pretty much out of the box on Solaris 10/Sparc.

A couple observations:

 * ecl.h does not include stdint.h on Sun:

#if !defined(_MSC_VER) && !defined(__sun)
#include <stdint.h>             /* int8_t and friends */
#define ecl_int8_t int8_t
#define ecl_uint8_t uint8_t
#else
#define ecl_uint8_t unsigned char
#define ecl_int8_t char
#define ecl_uint16_t unsigned short
#define ecl_int16_t short
#define ecl_uint32_t unsigned int
#define ecl_int32_t int
#endif
/* Microsoft VC++ does not have va_copy() */
#if defined(_MSC_VER) || !defined(va_copy)
#define va_copy(dst, src) \
   ((void) memcpy(&(dst), &(src), sizeof(va_list)))
#endif

  This is the correct thing to do on Solaris 9, but Solaris 10
provides such a header and there are loads of non-fatal "$FOO
redefined" methods.

* During the linking stage of ecl_min things blow up due to missing "isfinite"

if [ -f CROSS-COMPILER ]; then \
                touch ecl_min; \
        else \
                gcc
-L/home/mabshoff/build-3.4.2/sage-3.4.2-fulvia-gcc-4.3.3/local/lib  -o
ecl_min cinit.o c/all_symbols.o -L./ libeclmin.a  -ldl  -lm -lsocket
-lnsl -lintl -lgc -lgmp;\
        fi
libeclmin.a(print.o): In function `edit_double':
/home/mabshoff/build-3.4.2/sage-3.4.2-fulvia-gcc-4.3.3/ecl-9.4.1/src/src/c/print.d:513:
undefined reference to `isfinite'
libeclmin.a(number.o): In function `ecl_make_doublefloat':
/home/mabshoff/build-3.4.2/sage-3.4.2-fulvia-gcc-4.3.3/ecl-9.4.1/src/src/c/number.d:503:
undefined reference to `isfinite'
libeclmin.a(number.o): In function `ecl_make_singlefloat':
/home/mabshoff/build-3.4.2/sage-3.4.2-fulvia-gcc-4.3.3/ecl-9.4.1/src/src/c/number.d:480:
undefined reference to `isfinite'
collect2: ld returned 1 exit status


The following addition to ecl.h makes ecl_min link:

#if defined(__sun)
extern int      finite(double);
#define isfinite(x) (finite(x))
#endif

But then the following just hangs and consumes CPU cycles:

if [ -f CROSS-COMPILER ]; then \
                touch ecl_min; \
        else \
                gcc
-L/home/mabshoff/build-3.4.2/sage-3.4.2-fulvia-gcc-4.3.3/local/lib  -o
ecl_min cinit.o c/all_symbols.o -L./ libeclmin.a  -ldl  -lm -lsocket
-lnsl -lintl -lgc -lgmp;\
        fi
sed -e 's, at ecldir\\@,/home/mabshoff/build-3.4.2/sage-3.4.2-fulvia-gcc-4.3.3/local/lib/ecl-9.4.1/,g'
\
            -e 's, at libdir\\@,/home/mabshoff/build-3.4.2/sage-3.4.2-fulvia-gcc-4.3.3/local/lib/,g'
< compile.pre > compile.lsp
ln -s /home/mabshoff/build-3.4.2/sage-3.4.2-fulvia-gcc-4.3.3/ecl-9.4.1/src/src/cmp/sysfun.lsp
./
echo "#" `uname -a` > BUILD-STAMP
head -8 config.log | tail -6 >> BUILD-STAMP
cp /home/mabshoff/build-3.4.2/sage-3.4.2-fulvia-gcc-4.3.3/ecl-9.4.1/src/src/../contrib/unicode/ucd.dat
.
if [ -f CROSS-COMPILER ]; then \
                ./CROSS-COMPILER compile; \
        else \
                ECLDIR=`pwd`/ ./ecl_min compile; \
        fi
[HANG]

I tried various older releases, other gc releases with different
options, etc and nothing seems to work. In fact, older releases like
0.9l tend to crash quickly. Building with several different compilers,
"-O0", etc made no difference.

One thing I observed was that even on an x86 the following was logged
in the configure script:

<SNIP>
checking for architecture... I386
checking for software type... sun4sol2 /
checking for __thread local data... yes
<SNIP>

Juan: I can get you access to a fast Solaris 10/x86 box if you lack access.

Cheers,

Michael




More information about the ecl-devel mailing list