[racket] help with building racket on Solaris-Sparc

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Sun May 6 19:53:34 EDT 2012

I think FD_SET(), etc., are adding casts on some platforms, which is
this next mismatch hasn't shown up before.

Does it fix the problem to change the definitions in "scheme.h" at line
2001 to the following?

 # define MZ_FD_ZERO(p) FD_ZERO((fd_set *)(p))
 # define MZ_FD_SET(n, p) FD_SET(n, (fd_set *)(p))
 # define MZ_FD_CLR(n, p) FD_CLR(n, (fd_set *)(p))
 # define MZ_FD_ISSET(n, p) FD_ISSET(n, (fd_set *)(p))


At Sun, 6 May 2012 16:02:26 -0400 (EDT), HP Wei wrote:
> 
> Thank you for taking the time to track that error.
> I modified port.c from your suggestions.
> And then I got below error messages.
> 
> in racket/src/thread.c
> in lines 3527, 3528, 3529, 3561, 3562, 3596, 3597, 3805, 3814, 3818
> all give this:
>    warning: dereferencing 'void*' pointer
>    error: request for member 'fds_bits' in something not a structure or
>           union
> 
> 
> --hp
> 
> 
> On Wed, 2 May 2012, Matthew Flatt wrote:
> 
> > Sorry for the delay. I've finally had a chance to look into this
> > problem, and I see two problems:
> >
> >  * Line 792 of "port.c" should be
> >
> >      scheme_semaphore_fd_set = (struct mz_fd_set *)scheme_malloc_atomic(3 * 
> sizeof(fd_set));
> >
> >    That is, `3 * sizeof(fd_set)' should replace `sizeof(struct mz_fd_set)'.
> >
> > * Lines 1257-1261 of "port.c" should be bracketed as follows:
> >
> >    # ifdef STORED_ACTUAL_FDSET_LIMIT
> >        if (FDSET_LIMIT(sp) > FDSET_LIMIT(p)) {
> >           i = FDSET_LIMIT(sp);
> >           FDSET_LIMIT(p) = i;
> >        }
> >    # endif
> >
> >
> >
> > At Mon, 23 Apr 2012 10:54:47 -0400 (EDT), HP Wei wrote:
> >>
> >> On the Solaris-Sparc machine,
> >> I tried 'configure with --enable-sgc' and was stuck when make
> >> was compiling racket/src/port.c:
> >>
> >> gcc -I....  -DUSE_SENORA_GC -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
> >>      -DMZ_USES_SHARED_LIB  -fPIC -DPIC
> >>
> >> port.c:792  error: invalid application of 'sizeof' to incomplete type
> >>                     'struct mz_fd_set'
> >>
> >> port.c:1259 error: lvalue required as left operand of assignment
> >>
> >> -----------------------
> >>
> >> In comparison,  I did try to make racket in a linux machine (Suse)
> >> with gcc version 4.5.1
> >> [ I did not invoke --enable-sgc  during configure step on this machine. ]
> >> And it finished without any issue.
> >>
> >>
> >> --hp
> >>
> >>

Posted on the users mailing list.