Whilst trying to build ponie-2 on Solaris 8, I came across the following
issue:  In order to use threads, both perl-5.[89].x and parrot need to
call some sort of yield() function.

In parrot, sched_yield is used; this function is available in the -lrt
library, so the solaris hints file adds that in.  There appears to be no
way to override this from the Configure.pl command line.

In perl, the plain yield() function is used; this function is available in
the standard C library, so -lrt is not used.  (Indeed, it's not even
mentioned in Configure.)  The hints/solaris_2.sh file unconditionally sets
sched_yield='yield' (bad hints file! I'll supply a patch for that
separately.)

Underneath it all, it doesn't matter -- both functions are the same on
Solaris -- but leaving things the way they are gives the following error
message for ponie-2:

cc -L/usr/lib -L/usr/ccs/lib -L/opt/SUNWspro/SC4.2/lib 
-L/home/doughera/src/parrot/ponie-andy/parrot/blib/lib -o miniperl \
    miniperlmain.o opmini.o libperl.a -lsocket -lnsl -ldl -lm -lpthread -lc -lparrot
Undefined                       first referenced
 symbol                             in file
sched_yield                         
/home/doughera/src/parrot/ponie-andy/parrot/blib/lib/libparrot.a(thread.o)

One fix for ponie may be to add rt to the $libswanted when it calls perl's
Configure (adding -A prepend:libswanted=rt should do the trick, but I
haven't tested it).

Longer term, it'd probably be good for parrot to have yield() vs.
sched_yield() set by some Configure.pl-time variable. For now, it would
likely be sufficient to simply key off of perl5's $Config{sched_yield}.

Similarly, perl's Configure/hints combination ought to be a bit more
flexible about yield() vs. sched_yield().  This would help make perl
slightly more flexible in adapting to being extended or embedded.

-- 
    Andy Dougherty              [EMAIL PROTECTED]

Reply via email to