Subject: Perl summary and questions.
To: None <port-pmax@NetBSD.ORG>
From: Leo Bicknell <bicknell@ufp.org>
List: port-pmax
Date: 05/07/1998 09:10:59
	I recently returned to the NetBSD camp installing 1.3.1 on my
5000/25.  One of the required bits of software was perl, so I set about
making 5.004_04 work.  After a few abortative attempts I finally got it
to compile.  Compiling is now easy, see below where I attached my copy
of the hints/netbsd.sh file from perl modified to compile on pmax out
of the box.

	Here's the problem though, the shared library loading isn't
working.  An example from 'make test':

lib/anydbm........Can't load '../lib/auto/Fcntl/Fcntl.so' for module Fcntl: (null) at
../lib/DynaLoader.pm line 166.

 at ./lib/anydbm.t line 11
BEGIN failed--compilation aborted at ./lib/anydbm.t line 11.

	I was hoping that shared libraries were now working well enough
for this to happen. :-(  I'd be happy to try and trace this further, but
I'm no shared library expert.  So, has anyone made shared libraries work
with perl?  Does anyone have any hints?

-- 
Leo Bicknell - bicknell@ufp.org
Systems Engineer - Internetworking Engineer - CCIE 3440
Read TMBG List - tmbg-list-request@tmbg.org, www.tmbg.org

#hints/netbsd.sh
#
# talk to mrg@eterna.com.au if you want to change this file.
#
# netbsd keeps dynamic loading dl*() functions in /usr/lib/crt0.o,
# so Configure doesn't find them (unless you abandon the nm scan).
# this should be *just* 0.9 below as netbsd 0.9a was the first to
# introduce shared libraries.  however, they don't work/build on
# pmax, powerpc and alpha ports correctly, yet.

case "$archname" in
'')
    archname=`uname -m`-${osname}
    ;;
esac

case "$osvers" in
0.9|0.8*)
        usedl="$undef"
        ;;
*)
        case `uname -m` in
        alpha|powerpc)
                d_dlopen=$undef
                ;;
# this doesn't work (yet).
#       alpha)
#               d_dlopen=$define
#               d_dlerror=$define
#               cccdlflags="-DPIC -fPIC $cccdlflags"
#               lddlflags="-shared $lddlflags"
#               ;;
        pmax)
                d_dlopen=$define
                d_dlerror=$define
# we use -fPIC here because -fpic is *NOT* enough for some of the
# extensions like Tk on some netbsd platforms (the sparc is one)
                cccdlflags="-DPIC -fPIC $cccdlflags"
#
# 'cc' is picked incorrectly for ld, it can't create shared libs (at least,
# with standard looking arguments, I suppose it may be able to).
#
                ld='ld'
#
# The -Bforcearchive flag doesn't exist on pmax, I don't understand this.
#
                lddlflags="-Bshareable $lddlflags"
                ;;
        *)
                d_dlopen=$define
                d_dlerror=$define
# we use -fPIC here because -fpic is *NOT* enough for some of the
# extensions like Tk on some netbsd platforms (the sparc is one)
                cccdlflags="-DPIC -fPIC $cccdlflags"
                lddlflags="-Bforcearchive -Bshareable $lddlflags"
                ;;
        esac
        ;;
esac

# netbsd had these but they don't really work as advertised, in the
# versions listed below.  if they are defined, then there isn't a
# way to make perl call setuid() or setgid().  if they aren't, then
# ($<, $>) = ($u, $u); will work (same for $(/$)).  this is because
# you can not change the real userid of a process under 4.4BSD.
# netbsd fixed this in 1.2A.
case "$osvers" in
0.9*|1.0*|1.1*|1.2_*|1.2|1.2.*)
        d_setregid="$undef"
        d_setreuid="$undef"
        d_setrgid="$undef"
        d_setruid="$undef"
        ;;
esac

# Avoid telldir prototype conflict in pp_sys.c  (NetBSD uses const DIR *)
# Configure should test for this.  Volunteers?
pp_sys_cflags='ccflags="$ccflags -DHAS_TELLDIR_PROTOTYPE"'