I've just built opendx 4.3.0, from the tar ball David Thompson provided,
on a Solaris 8 Sun Blade machine and an IRIX64 sgi Onyx 300.
The libtool method seemed to work reasonably, with tweaks similar to the
previous version required to fully build.

I used the 'configure' script supplied in the tar and did not regenerate
it.
Both systems warned about macro RAND_MAX being re-declared in a standard
library and in dxconfig.h.

Please see my OTHER BUGS bit at the end too.

Here's a summary:
Solaris 8
Sun WorkShop 6 update 2 C 5.3 2001/05/15
I used gnu make (Sun make didn't work). This is not too surprising.
The link of dxui failed:
CC -g -I/usr/openwin/include -o dxui [LONG FILE LIST CUT]

ild: (undefined symbol)
AllocatorDictionary<StandIn,StandIn*(*)(WorkSpace*,Node*)>::__descr --
referenced in the data segment of
../dxuilib/libDXUI.a(SIAllocatorDictionary.o)
[Hint: static member
AllocatorDictionary<StandIn,StandIn*(*)(WorkSpace*,Node*)>::__descr must
be defined in the program]

(Six similar messages)

The problem seems to be to do with the macro NO_CC_TEMPLATES

Here's a sample from base/UIConfig.h : 
/*
// Define NO_CC_TEMPLATES if the C++ compiler cannot handle 3.0
templates.
*/
#if defined(intelnt) || defined(aviion) || defined(solaris) ||
defined(WIN32)
#define NO_CC_TEMPLATES
#endif

So with 'solaris' defined we also have NO_CC_TEMPLATES . BUT UIConfig.h
is not included in these headers which test for NO_CC_TEMPLATES:
./src/uipp/dxuilib/NDAllocatorDictionary.h
./src/uipp/dxuilib/CDBAllocatorDictionary.h 
./src/uipp/dxuilib/SIAllocatorDictionary.h

So I added the following line to the start of them.
#include "../base/UIConfig.h" 

IRIX64:
setenv LIBS "-ldf -lz -ljpeg -lnetcdf"
setenv CC "cc"
setenv CXX "CC"
setenv CFLAGS "-64 -O -mips4 -OPT:Olimit=0"
setenv CXXFLAGS "-64 -O -mips4 -LANG:std -OPT:Olimit=0"
setenv LDFLAGS "-64 -mips4"
setenv SGI_ABI "-64"
./configure --prefix=/tmp/opendx4.3.0 --with-large-arenas=yes

An error came up in these files:
cc-1168 CC: ERROR File = DXWindow.C, Line = 821
cc-1168 CC: ERROR File = ResourceManager.C, Line = 37
cc-1168 CC: ERROR File = ResourceManager.C, Line = 147
cc-1168 CC: ERROR File = ResourceManager.C, Line = 163
cc-1168 CC: ERROR File = ResourceManager.C, Line = 176
cc-1168 CC: ERROR File = ToolSelector.C, Line = 239

All have the same error:
  The indicated type conversion is invalid.
        while (s=(Symbol)iter.getNext()) {

The problem is that Symbol is of type int: (SymbolManager.h:typedef int
Symbol;) so the cast from 64-bit pointer to int fails. Replacing with
the following sorts it out:
        while (s=*(Symbol*)iter.getNext()) {
(But is this what is intended?)

OTHER BUGS:
How about sorting out some other bugs before 4.3 is released : See my
bug report on isosurface.c in the bug reporting system (#100), also
Describe crashes dxexec if a 4-D variable with 'Invalid positions' is
used (example net attached). The bug is in line 600 of
src/exec/libdx/box.c. The following:
done:

    if (ich)
        DXFreeInvalidComponentHandle(ich);

    if (box && !_copyout(box, m, box_array))
        goto null_return;

    return (Object) f;

null_return:

    if (ich)
        DXFreeInvalidComponentHandle(ich);
    
    return NULL;

Should be replaced with:

done:

    if (ich){
        DXFreeInvalidComponentHandle(ich);
        ich = NULL;
    }

    if (box && !_copyout(box, m, box_array))
        goto null_return;

    return (Object) f;

null_return:

    if (ich)
        DXFreeInvalidComponentHandle(ich);
    
    return NULL;

The problem is that _copyout fails with 4-D data (which is a pain), then
it tries to free ich again in null_return.

Thanks,

John

Attachment: crash_describe.net
Description: Binary data

Reply via email to