xref: /openbsd-src/gnu/usr.bin/perl/hints/netbsd.sh (revision 46035553bfdd96e63c94e32da0210227ec2e3cf1)
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="-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
49		rpathflag="-Wl,-rpath,"
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
65	elif test -f /usr/libexec/ld.so; then
66		# a.out
67		d_dlopen=$define
68		d_dlerror=$define
69		cccdlflags="-DPIC -fPIC $cccdlflags"
70		lddlflags="-Bshareable $lddlflags"
71		rpathflag="-R"
72	else
73		d_dlopen=$undef
74		rpathflag=
75	fi
76	;;
77esac
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.
84# netbsd fixed this in 1.3.2.
85case "$osvers" in
860.9*|1.[012]*|1.3|1.3.1)
87	d_setregid="$undef"
88	d_setreuid="$undef"
89	;;
90esac
91case "$osvers" in
920.8*)
93	;;
94*)
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"
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"
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"
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"
127	;;
128esac
129
130# These are obsolete in any netbsd.
131d_setrgid="$undef"
132d_setruid="$undef"
133
134# there's no problem with vfork.
135usevfork=true
136
137# This is there but in machine/ieeefp_h.
138ieeefp_h="define"
139
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]*)
145	lpthread=
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
151				break;
152			fi
153			zzz=$yyy/lib$xxx.so
154			if test -f "$zzz"; then
155				lpthread=$xxx
156				break;
157			fi
158			zzz=`ls $yyy/lib$xxx.so.* 2>/dev/null`
159			if test "X$zzz" != X; then
160				lpthread=$xxx
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
169		# Add -lpthread.
170		libswanted="$libswanted $lpthread"
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.
174	else
175		echo "$0: No POSIX threads library (-lpthread) found.  " \
176		     "You may want to install GNU pth.  Aborting." >&4
177		exit 1
178	fi
179	unset lpthread
180
181	# several reentrant functions are embedded in libc, but haven't
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
200EOCBU
201
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
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
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
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
257
258# NetBSD 6 defines the *at() functions in libc, but either doesn't
259# implement them, or implements them only for AT_FDCWD
260case "$osver" in
261[1-6].*)
262        d_unlinkat="$undef"
263        d_renameat="$undef"
264        d_linkat="$undef"
265        d_fchmodat="$undef"
266        ;;
267esac
268