xref: /openbsd/gnu/usr.bin/perl/hints/netbsd.sh (revision 404b540a)
1# hints/netbsd.sh
2#
3# Please check with packages@netbsd.org before making modifications
4# to this file.
5
6case "$archname" in
7'')
8    archname=`uname -m`-${osname}
9    ;;
10esac
11
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#
17case "$osvers" in
180.9|0.8*)
19	usedl="$undef"
20	;;
21*)
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
33	if test -f /usr/libexec/ld.elf_so; then
34		# ELF
35		d_dlopen=$define
36		d_dlerror=$define
37		cccdlflags="-DPIC -fPIC $cccdlflags"
38		lddlflags="--whole-archive -shared $lddlflags"
39		rpathflag="-Wl,-rpath,"
40		case "$osvers" in
41		1.[0-5]*)
42			#
43			# Include the whole libgcc.a into the perl executable
44			# so that certain symbols needed by loadable modules
45			# built as C++ objects (__eh_alloc, __pure_virtual,
46			# etc.) will always be defined.
47			#
48			ccdlflags="-Wl,-whole-archive -lgcc \
49				-Wl,-no-whole-archive -Wl,-E $ccdlflags"
50			;;
51		*)
52			ccdlflags="-Wl,-E $ccdlflags"
53			;;
54		esac
55	elif test -f /usr/libexec/ld.so; then
56		# a.out
57		d_dlopen=$define
58		d_dlerror=$define
59		cccdlflags="-DPIC -fPIC $cccdlflags"
60		lddlflags="-Bshareable $lddlflags"
61		rpathflag="-R"
62	else
63		d_dlopen=$undef
64		rpathflag=
65	fi
66	;;
67esac
68
69# netbsd had these but they don't really work as advertised, in the
70# versions listed below.  if they are defined, then there isn't a
71# way to make perl call setuid() or setgid().  if they aren't, then
72# ($<, $>) = ($u, $u); will work (same for $(/$)).  this is because
73# you can not change the real userid of a process under 4.4BSD.
74# netbsd fixed this in 1.3.2.
75case "$osvers" in
760.9*|1.[012]*|1.3|1.3.1)
77	d_setregid="$undef"
78	d_setreuid="$undef"
79	;;
80esac
81case "$osvers" in
820.9*|1.*|2.*|3.*|4.*|5.*)
83	d_getprotoent_r="$undef"
84	d_getprotobyname_r="$undef"
85	d_getprotobynumber_r="$undef"
86	d_setprotoent_r="$undef"
87	d_endprotoent_r="$undef"
88	d_getservent_r="$undef"
89	d_getservbyname_r="$undef"
90	d_getservbyport_r="$undef"
91	d_setservent_r="$undef"
92	d_endservent_r="$undef"
93	d_getprotoent_r_proto="0"
94	d_getprotobyname_r_proto="0"
95	d_getprotobynumber_r_proto="0"
96	d_setprotoent_r_proto="0"
97	d_endprotoent_r_proto="0"
98	d_getservent_r_proto="0"
99	d_getservbyname_r_proto="0"
100	d_getservbyport_r_proto="0"
101	d_setservent_r_proto="0"
102	d_endservent_r_proto="0"
103	;;
104esac
105
106# These are obsolete in any netbsd.
107d_setrgid="$undef"
108d_setruid="$undef"
109
110# there's no problem with vfork.
111usevfork=true
112
113# This is there but in machine/ieeefp_h.
114ieeefp_h="define"
115
116# This script UU/usethreads.cbu will get 'called-back' by Configure
117# after it has prompted the user for whether to use threads.
118cat > UU/usethreads.cbu <<'EOCBU'
119case "$usethreads" in
120$define|true|[yY]*)
121	lpthread=
122	for xxx in pthread; do
123		for yyy in $loclibpth $plibpth $glibpth dummy; do
124			zzz=$yyy/lib$xxx.a
125			if test -f "$zzz"; then
126				lpthread=$xxx
127				break;
128			fi
129			zzz=$yyy/lib$xxx.so
130			if test -f "$zzz"; then
131				lpthread=$xxx
132				break;
133			fi
134			zzz=`ls $yyy/lib$xxx.so.* 2>/dev/null`
135			if test "X$zzz" != X; then
136				lpthread=$xxx
137				break;
138			fi
139		done
140		if test "X$lpthread" != X; then
141			break;
142		fi
143	done
144	if test "X$lpthread" != X; then
145		# Add -lpthread.
146		libswanted="$libswanted $lpthread"
147		# There is no libc_r as of NetBSD 1.5.2, so no c -> c_r.
148		# This will be revisited when NetBSD gains a native pthreads
149		# implementation.
150	else
151		echo "$0: No POSIX threads library (-lpthread) found.  " \
152		     "You may want to install GNU pth.  Aborting." >&4
153		exit 1
154	fi
155	unset lpthread
156
157	# several reentrant functions are embeded in libc, but haven't
158	# been added to the header files yet.  Let's hold off on using
159	# them until they are a valid part of the API
160	case "$osvers" in
161	[012].*|3.[0-1])
162		d_getprotobyname_r=$undef
163		d_getprotobynumber_r=$undef
164		d_getprotoent_r=$undef
165		d_getservbyname_r=$undef
166		d_getservbyport_r=$undef
167		d_getservent_r=$undef
168		d_setprotoent_r=$undef
169		d_setservent_r=$undef
170		d_endprotoent_r=$undef
171		d_endservent_r=$undef ;;
172	esac
173	;;
174
175esac
176EOCBU
177
178# Set sensible defaults for NetBSD: look for local software in
179# /usr/pkg (NetBSD Packages Collection) and in /usr/local.
180#
181loclibpth="/usr/pkg/lib /usr/local/lib"
182locincpth="/usr/pkg/include /usr/local/include"
183case "$rpathflag" in
184'')
185	ldflags=
186	;;
187*)
188	ldflags=
189	for yyy in $loclibpth; do
190		ldflags="$ldflags $rpathflag$yyy"
191	done
192	;;
193esac
194
195case `uname -m` in
196alpha)
197    echo 'int main() {}' > try.c
198    gcc=`${cc:-cc} -v -c try.c 2>&1|grep 'gcc version egcs-2'`
199    case "$gcc" in
200    '' | "gcc version egcs-2.95."[3-9]*) ;; # 2.95.3 or better okay
201    *)	cat >&4 <<EOF
202***
203*** Your gcc ($gcc) is known to be
204*** too buggy on netbsd/alpha to compile Perl with optimization.
205*** It is suggested you install the lang/gcc package which should
206*** have at least gcc 2.95.3 which should work okay: use for example
207*** Configure -Dcc=/usr/pkg/gcc-2.95.3/bin/cc.  You could also
208*** Configure -Doptimize=-O0 to compile Perl without any optimization
209*** but that is not recommended.
210***
211EOF
212	exit 1
213	;;
214    esac
215    rm -f try.*
216    ;;
217esac
218
219# NetBSD/sparc 1.5.3/1.6.1 dumps core in the semid_ds test of Configure.
220case `uname -m` in
221sparc) d_semctl_semid_ds=undef ;;
222esac
223
224