xref: /openbsd/gnu/usr.bin/perl/hints/netbsd.sh (revision 3d61058a)
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 >/dev/null 2>&1 &&
44   ${cc:-cc} --whole-archive $lddlflags try.o -otry.so >/dev/null 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
269cat >UU/uselongdouble.cbu <<'EOCBU'
270# This script UU/uselongdouble.cbu will get 'called-back' by Configure
271# after it has prompted the user for whether to use long doubles.
272#
273# See https://github.com/Perl/perl5/issues/17853 and https://github.com/Perl/perl5/issues/17854
274case "$uselongdouble" in
275$define|true|[yY]*)
276    cat >try.c <<\TRY
277#include <stdio.h>
278#include <math.h>
279
280long double x = 1.0;
281
282int main(int argc, char **argv) {
283    double e1 = exp(1.0);
284    /* as of NetBSD 9.0 expl() just calls exp(),
285       Fail here if they're equal. */
286    return expl(x) == (long double)e1;
287}
288TRY
289    if $cc -o try $ccflags $ldflags try.c -lm && $run ./try; then
290        echo "NetBSD seem to have fixed expl (and hopefully more)" >&4
291    else
292        cat <<EOM >&4
293
294Warning! NetBSD's long double support is limited enough that it will cause
295test failures, and possibly build failures, and this doesn't appear to have
296been fixed in the release you're running.
297
298EOM
299    fi
300;;
301esac
302EOCBU
303