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