This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upstream a patch from pkgsrc for NetBSD hints
[perl5.git] / hints / netbsd.sh
CommitLineData
a0d0e21e 1# hints/netbsd.sh
4633a7c4 2#
068ac78d
JH
3# Please check with packages@netbsd.org before making modifications
4# to this file.
c9ef717e
MG
5
6case "$archname" in
7'')
8 archname=`uname -m`-${osname}
9 ;;
10esac
11
068ac78d
JH
12# NetBSD keeps dynamic loading dl*() functions in /usr/lib/crt0.o,
13# so Configure doesn't find them (unless you abandon the nm scan).
14# Also, NetBSD 0.9a was the first release to introduce shared
15# libraries.
16#
a0d0e21e 17case "$osvers" in
4633a7c4 180.9|0.8*)
a0d0e21e
LW
19 usedl="$undef"
20 ;;
c9ef717e 21*)
068ac78d
JH
22 case `uname -m` in
23 pmax)
24 # NetBSD 1.3 and 1.3.1 on pmax shipped an `old' ld.so,
25 # which will not work.
26 case "$osvers" in
27 1.3|1.3.1)
28 d_dlopen=$undef
29 ;;
30 esac
31 ;;
32 esac
6195bde2 33 if test -f /usr/libexec/ld.elf_so; then
068ac78d 34 # ELF
099685bc
JH
35 d_dlopen=$define
36 d_dlerror=$define
068ac78d 37 cccdlflags="-DPIC -fPIC $cccdlflags"
e2a47f80
TC
38 lddlflags="-shared $lddlflags"
39 cat >UU/cc.cbu <<'EOCBU'
40# gcc 4.6 doesn't support --whole-archive, but it's required for the
41# system gcc to build correctly, so check for it
42echo 'int f(void) { return 0; }' >try.c
43if ${cc:-cc} $cccdlflags -c try.c -otry.o 2>&1 &&
44 ${cc:-cc} --whole-archive $lddlflags try.o -otry.so 2>&1 ; then
45 lddlflags="--whole-archive $lddlflags"
46fi
47rm try.c try.o try.so 2>/dev/null
48EOCBU
068ac78d 49 rpathflag="-Wl,-rpath,"
e36eebf2
JH
50 case "$osvers" in
51 1.[0-5]*)
52 #
53 # Include the whole libgcc.a into the perl executable
54 # so that certain symbols needed by loadable modules
55 # built as C++ objects (__eh_alloc, __pure_virtual,
56 # etc.) will always be defined.
57 #
58 ccdlflags="-Wl,-whole-archive -lgcc \
59 -Wl,-no-whole-archive -Wl,-E $ccdlflags"
60 ;;
61 *)
62 ccdlflags="-Wl,-E $ccdlflags"
63 ;;
64 esac
6195bde2 65 elif test -f /usr/libexec/ld.so; then
068ac78d 66 # a.out
c9ef717e
MG
67 d_dlopen=$define
68 d_dlerror=$define
c9ef717e 69 cccdlflags="-DPIC -fPIC $cccdlflags"
9f060c84 70 lddlflags="-Bshareable $lddlflags"
068ac78d 71 rpathflag="-R"
099685bc
JH
72 else
73 d_dlopen=$undef
068ac78d 74 rpathflag=
099685bc 75 fi
491527d0
GS
76 ;;
77esac
c9ef717e
MG
78
79# netbsd had these but they don't really work as advertised, in the
80# versions listed below. if they are defined, then there isn't a
81# way to make perl call setuid() or setgid(). if they aren't, then
82# ($<, $>) = ($u, $u); will work (same for $(/$)). this is because
83# you can not change the real userid of a process under 4.4BSD.
099685bc 84# netbsd fixed this in 1.3.2.
229e211d 85case "$osvers" in
099685bc 860.9*|1.[012]*|1.3|1.3.1)
4633a7c4
LW
87 d_setregid="$undef"
88 d_setreuid="$undef"
a0d0e21e
LW
89 ;;
90esac
a22def3b 91case "$osvers" in
54db7d57
CBW
920.8*)
93 ;;
94*)
a22def3b
MB
95 d_getprotoent_r="$undef"
96 d_getprotobyname_r="$undef"
97 d_getprotobynumber_r="$undef"
98 d_setprotoent_r="$undef"
99 d_endprotoent_r="$undef"
100 d_getservent_r="$undef"
101 d_getservbyname_r="$undef"
102 d_getservbyport_r="$undef"
103 d_setservent_r="$undef"
104 d_endservent_r="$undef"
54db7d57
CBW
105 d_gethostbyname_r="$undef"
106 d_gethostbyaddr2_r="$undef"
107 d_gethostbyaddr_r="$undef"
108 d_sethostent_r="$undef"
109 d_gethostent_r="$undef"
110 d_endhostent_r="$undef"
84f2efb4
RGS
111 d_getprotoent_r_proto="0"
112 d_getprotobyname_r_proto="0"
113 d_getprotobynumber_r_proto="0"
114 d_setprotoent_r_proto="0"
115 d_endprotoent_r_proto="0"
116 d_getservent_r_proto="0"
117 d_getservbyname_r_proto="0"
118 d_getservbyport_r_proto="0"
119 d_setservent_r_proto="0"
120 d_endservent_r_proto="0"
54db7d57
CBW
121 d_gethostbyname_r_proto="0"
122 d_gethostbyaddr2_r_proto="0"
123 d_gethostbyaddr_r_proto="0"
124 d_sethostent_r_proto="0"
125 d_endhostent_r_proto="0"
126 d_gethostent_r_proto="0"
a22def3b
MB
127 ;;
128esac
c4f23d77 129
434e0566
JH
130# These are obsolete in any netbsd.
131d_setrgid="$undef"
132d_setruid="$undef"
133
099685bc 134# there's no problem with vfork.
900cf02d
JH
135usevfork=true
136
9a368ae6
JH
137# This is there but in machine/ieeefp_h.
138ieeefp_h="define"
139
a22def3b
MB
140# This script UU/usethreads.cbu will get 'called-back' by Configure
141# after it has prompted the user for whether to use threads.
142cat > UU/usethreads.cbu <<'EOCBU'
143case "$usethreads" in
144$define|true|[yY]*)
6195bde2 145 lpthread=
068ac78d
JH
146 for xxx in pthread; do
147 for yyy in $loclibpth $plibpth $glibpth dummy; do
148 zzz=$yyy/lib$xxx.a
149 if test -f "$zzz"; then
150 lpthread=$xxx
6195bde2
JH
151 break;
152 fi
068ac78d
JH
153 zzz=$yyy/lib$xxx.so
154 if test -f "$zzz"; then
155 lpthread=$xxx
6195bde2
JH
156 break;
157 fi
068ac78d
JH
158 zzz=`ls $yyy/lib$xxx.so.* 2>/dev/null`
159 if test "X$zzz" != X; then
160 lpthread=$xxx
6195bde2
JH
161 break;
162 fi
163 done
164 if test "X$lpthread" != X; then
165 break;
166 fi
167 done
168 if test "X$lpthread" != X; then
a22def3b
MB
169 # Add -lpthread.
170 libswanted="$libswanted $lpthread"
6195bde2
JH
171 # There is no libc_r as of NetBSD 1.5.2, so no c -> c_r.
172 # This will be revisited when NetBSD gains a native pthreads
173 # implementation.
a22def3b 174 else
6195bde2 175 echo "$0: No POSIX threads library (-lpthread) found. " \
a22def3b
MB
176 "You may want to install GNU pth. Aborting." >&4
177 exit 1
178 fi
6195bde2 179 unset lpthread
5d0b7876 180
dca46f05 181 # several reentrant functions are embedded in libc, but haven't
a22def3b
MB
182 # been added to the header files yet. Let's hold off on using
183 # them until they are a valid part of the API
184 case "$osvers" in
185 [012].*|3.[0-1])
186 d_getprotobyname_r=$undef
187 d_getprotobynumber_r=$undef
188 d_getprotoent_r=$undef
189 d_getservbyname_r=$undef
190 d_getservbyport_r=$undef
191 d_getservent_r=$undef
192 d_setprotoent_r=$undef
193 d_setservent_r=$undef
194 d_endprotoent_r=$undef
195 d_endservent_r=$undef ;;
196 esac
197 ;;
198
199esac
0b196741 200EOCBU
7b938c21 201
068ac78d
JH
202# Set sensible defaults for NetBSD: look for local software in
203# /usr/pkg (NetBSD Packages Collection) and in /usr/local.
204#
205loclibpth="/usr/pkg/lib /usr/local/lib"
206locincpth="/usr/pkg/include /usr/local/include"
207case "$rpathflag" in
208'')
209 ldflags=
210 ;;
211*)
212 ldflags=
213 for yyy in $loclibpth; do
214 ldflags="$ldflags $rpathflag$yyy"
215 done
216 ;;
217esac
f42e9f90
JH
218
219case `uname -m` in
220alpha)
221 echo 'int main() {}' > try.c
222 gcc=`${cc:-cc} -v -c try.c 2>&1|grep 'gcc version egcs-2'`
223 case "$gcc" in
224 '' | "gcc version egcs-2.95."[3-9]*) ;; # 2.95.3 or better okay
225 *) cat >&4 <<EOF
226***
227*** Your gcc ($gcc) is known to be
228*** too buggy on netbsd/alpha to compile Perl with optimization.
229*** It is suggested you install the lang/gcc package which should
230*** have at least gcc 2.95.3 which should work okay: use for example
231*** Configure -Dcc=/usr/pkg/gcc-2.95.3/bin/cc. You could also
232*** Configure -Doptimize=-O0 to compile Perl without any optimization
233*** but that is not recommended.
234***
235EOF
236 exit 1
237 ;;
238 esac
239 rm -f try.*
240 ;;
241esac
242
3332bd48
JH
243# NetBSD/sparc 1.5.3/1.6.1 dumps core in the semid_ds test of Configure.
244case `uname -m` in
245sparc) d_semctl_semid_ds=undef ;;
246esac
247
ceac08d3
CBW
248# malloc wrap works
249case "$usemallocwrap" in
250'') usemallocwrap='define' ;;
251esac
252
253# don't use perl malloc by default
254case "$usemymalloc" in
255'') usemymalloc=n ;;
256esac