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