1# hints/linux.sh 2# Original version by rsanders 3# Additional support by Kenneth Albanowski <kjahds@kjahds.com> 4# 5# ELF support by H.J. Lu <hjl@nynexst.com> 6# Additional info from Nigel Head <nhead@ESOC.bitnet> 7# and Kenneth Albanowski <kjahds@kjahds.com> 8# 9# Consolidated by Andy Dougherty <doughera@lafayette.edu> 10# 11# Updated Thu Feb 8 11:56:10 EST 1996 12 13# Updated Thu May 30 10:50:22 EDT 1996 by <doughera@lafayette.edu> 14 15# Updated Fri Jun 21 11:07:54 EDT 1996 16# NDBM support for ELF renabled by <kjahds@kjahds.com> 17 18# No version of Linux supports setuid scripts. 19d_suidsafe='undef' 20 21# Debian and Red Hat, and perhaps other vendors, provide both runtime and 22# development packages for some libraries. The runtime packages contain shared 23# libraries with version information in their names (e.g., libgdbm.so.1.7.3); 24# the development packages supplement this with versionless shared libraries 25# (e.g., libgdbm.so). 26# 27# If you want to link against such a library, you must install the development 28# version of the package. 29# 30# These packages use a -dev naming convention in both Debian and Red Hat: 31# libgdbmg1 (non-development version of GNU libc 2-linked GDBM library) 32# libgdbmg1-dev (development version of GNU libc 2-linked GDBM library) 33# So make sure that for any libraries you wish to link Perl with under 34# Debian or Red Hat you have the -dev packages installed. 35# 36# Some operating systems (e.g., Solaris 2.6) will link to a versioned shared 37# library implicitly. For example, on Solaris, `ld foo.o -lgdbm' will find an 38# appropriate version of libgdbm, if one is available; Linux, however, doesn't 39# do the implicit mapping. 40ignore_versioned_solibs='y' 41 42# BSD compatability library no longer needed 43# 'kaffe' has a /usr/lib/libnet.so which is not at all relevent for perl. 44set `echo X "$libswanted "| sed -e 's/ bsd / /' -e 's/ net / /'` 45shift 46libswanted="$*" 47 48# If you have glibc, then report the version for ./myconfig bug reporting. 49# (Configure doesn't need to know the specific version since it just uses 50# gcc to load the library for all tests.) 51# We don't use __GLIBC__ and __GLIBC_MINOR__ because they 52# are insufficiently precise to distinguish things like 53# libc-2.0.6 and libc-2.0.7. 54if test -L /lib/libc.so.6; then 55 libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` 56 libc=/lib/$libc 57fi 58 59# Configure may fail to find lstat() since it's a static/inline 60# function in <sys/stat.h>. 61d_lstat=define 62 63# The system malloc() is about as fast and as frugal as perl's. 64# Since the system malloc() has been the default since at least 65# 5.001, we might as well leave it that way. --AD 10 Jan 2002 66case "$usemymalloc" in 67'') usemymalloc='n' ;; 68esac 69 70# Check if we're about to use Intel's ICC compiler 71case "`${cc:-cc} -V 2>&1`" in 72*"Intel(R) C++ Compiler"*) 73 # This is needed for Configure's prototype checks to work correctly 74 ccflags="-we147 $ccflags" 75 # If we're using ICC, we usually want the best performance 76 case "$optimize" in 77 '') optimize='-O3' ;; 78 esac 79 ;; 80esac 81 82case "$optimize" in 83'') # If we have modern enough gcc and well-supported enough CPU, 84 # crank up the optimization level. 85 case "`${cc:-gcc} -v 2>&1`" in 86 *"gcc version 2.95"*|*"gcc version 3."*) 87 case "`arch 2>&1`" in 88 i?86|ppc) optimize='-O3' ;; 89 esac 90 ;; 91 esac 92 case "$optimize" in 93 '') optimize='-O2' ;; 94 esac 95 ;; 96esac 97 98# Are we using ELF? Thanks to Kenneth Albanowski <kjahds@kjahds.com> 99# for this test. 100cat >try.c <<'EOM' 101/* Test for whether ELF binaries are produced */ 102#include <fcntl.h> 103#include <stdlib.h> 104main() { 105 char buffer[4]; 106 int i=open("a.out",O_RDONLY); 107 if(i==-1) 108 exit(1); /* fail */ 109 if(read(i,&buffer[0],4)<4) 110 exit(1); /* fail */ 111 if(buffer[0] != 127 || buffer[1] != 'E' || 112 buffer[2] != 'L' || buffer[3] != 'F') 113 exit(1); /* fail */ 114 exit(0); /* succeed (yes, it's ELF) */ 115} 116EOM 117if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then 118 cat <<'EOM' >&4 119 120You appear to have ELF support. I'll try to use it for dynamic loading. 121If dynamic loading doesn't work, read hints/linux.sh for further information. 122EOM 123 124else 125 cat <<'EOM' >&4 126 127You don't have an ELF gcc. I will use dld if possible. If you are 128using a version of DLD earlier than 3.2.6, or don't have it at all, you 129should probably upgrade. If you are forced to use 3.2.4, you should 130uncomment a couple of lines in hints/linux.sh and restart Configure so 131that shared libraries will be disallowed. 132 133EOM 134 lddlflags="-r $lddlflags" 135 # These empty values are so that Configure doesn't put in the 136 # Linux ELF values. 137 ccdlflags=' ' 138 cccdlflags=' ' 139 ccflags="-DOVR_DBL_DIG=14 $ccflags" 140 so='sa' 141 dlext='o' 142 nm_so_opt=' ' 143 ## If you are using DLD 3.2.4 which does not support shared libs, 144 ## uncomment the next two lines: 145 #ldflags="-static" 146 #so='none' 147 148 # In addition, on some systems there is a problem with perl and NDBM 149 # which causes AnyDBM and NDBM_File to lock up. This is evidenced 150 # in the tests as AnyDBM just freezing. Apparently, this only 151 # happens on a.out systems, so we disable NDBM for all a.out linux 152 # systems. If someone can suggest a more robust test 153 # that would be appreciated. 154 # 155 # More info: 156 # Date: Wed, 7 Feb 1996 03:21:04 +0900 157 # From: Jeffrey Friedl <jfriedl@nff.ncl.omron.co.jp> 158 # 159 # I tried compiling with DBM support and sure enough things locked up 160 # just as advertised. Checking into it, I found that the lockup was 161 # during the call to dbm_open. Not *in* dbm_open -- but between the call 162 # to and the jump into. 163 # 164 # To make a long story short, making sure that the *.a and *.sa pairs of 165 # /usr/lib/lib{m,db,gdbm}.{a,sa} 166 # were perfectly in sync took care of it. 167 # 168 # This will generate a harmless Whoa There! message 169 case "$d_dbm_open" in 170 '') cat <<'EOM' >&4 171 172Disabling ndbm. This will generate a Whoa There message in Configure. 173Read hints/linux.sh for further information. 174EOM 175 # You can override this with Configure -Dd_dbm_open 176 d_dbm_open=undef 177 ;; 178 esac 179fi 180 181rm -f try.c a.out 182 183if /bin/sh -c exit; then 184 echo '' 185 echo 'You appear to have a working bash. Good.' 186else 187 cat << 'EOM' >&4 188 189*********************** Warning! ********************* 190It would appear you have a defective bash shell installed. This is likely to 191give you a failure of op/exec test #5 during the test phase of the build, 192Upgrading to a recent version (1.14.4 or later) should fix the problem. 193****************************************************** 194EOM 195 196fi 197 198# On SPARClinux, 199# The following csh consistently coredumped in the test directory 200# "/home/mikedlr/perl5.003_94/t", though not most other directories. 201 202#Name : csh Distribution: Red Hat Linux (Rembrandt) 203#Version : 5.2.6 Vendor: Red Hat Software 204#Release : 3 Build Date: Fri May 24 19:42:14 1996 205#Install date: Thu Jul 11 16:20:14 1996 Build Host: itchy.redhat.com 206#Group : Shells Source RPM: csh-5.2.6-3.src.rpm 207#Size : 184417 208#Description : BSD c-shell 209 210# For this reason I suggest using the much bug-fixed tcsh for globbing 211# where available. 212 213# November 2001: That warning's pretty old now and probably not so 214# relevant, especially since perl now uses File::Glob for globbing. 215# We'll still look for tcsh, but tone down the warnings. 216# Andy Dougherty, Nov. 6, 2001 217if $csh -c 'echo $version' >/dev/null 2>&1; then 218 echo 'Your csh is really tcsh. Good.' 219else 220 if xxx=`./UU/loc tcsh blurfl $pth`; $test -f "$xxx"; then 221 echo "Found tcsh. I'll use it for globbing." 222 # We can't change Configure's setting of $csh, due to the way 223 # Configure handles $d_portable and commands found in $loclist. 224 # We can set the value for CSH in config.h by setting full_csh. 225 full_csh=$xxx 226 elif [ -f "$csh" ]; then 227 echo "Couldn't find tcsh. Csh-based globbing might be broken." 228 fi 229fi 230 231# Shimpei Yamashita <shimpei@socrates.patnet.caltech.edu> 232# Message-Id: <33EF1634.B36B6500@pobox.com> 233# 234# The DR2 of MkLinux (osname=linux,archname=ppc-linux) may need 235# special flags passed in order for dynamic loading to work. 236# instead of the recommended: 237# 238# ccdlflags='-rdynamic' 239# 240# it should be: 241# ccdlflags='-Wl,-E' 242# 243# So if your DR2 (DR3 came out summer 1998, consider upgrading) 244# has problems with dynamic loading, uncomment the 245# following three lines, make distclean, and re-Configure: 246#case "`uname -r | sed 's/^[0-9.-]*//'``arch`" in 247#'osfmach3ppc') ccdlflags='-Wl,-E' ;; 248#esac 249 250case "`uname -m`" in 251sparc*) 252 case "$cccdlflags" in 253 *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; 254 *) cccdlflags="$cccdlflags -fPIC" ;; 255 esac 256 ;; 257esac 258 259# SuSE8.2 has /usr/lib/libndbm* which are ld scripts rather than 260# true libraries. The scripts cause binding against static 261# version of -lgdbm which is a bad idea. So if we have 'nm' 262# make sure it can read the file 263# NI-S 2003/08/07 264if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then 265 if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then 266 echo 'Your shared -lndbm seems to be a real library.' 267 else 268 echo 'Your shared -lndbm is not a real library.' 269 set `echo X "$libswanted "| sed -e 's/ ndbm / /'` 270 shift 271 libswanted="$*" 272 fi 273fi 274 275 276# This script UU/usethreads.cbu will get 'called-back' by Configure 277# after it has prompted the user for whether to use threads. 278cat > UU/usethreads.cbu <<'EOCBU' 279case "$usethreads" in 280$define|true|[yY]*) 281 ccflags="-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS $ccflags" 282 set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` 283 shift 284 libswanted="$*" 285 286 # Somehow at least in Debian 2.2 these manage to escape 287 # the #define forest of <features.h> and <time.h> so that 288 # the hasproto macro of Configure doesn't see these protos, 289 # even with the -D_GNU_SOURCE. 290 291 d_asctime_r_proto="$define" 292 d_crypt_r_proto="$define" 293 d_ctime_r_proto="$define" 294 d_gmtime_r_proto="$define" 295 d_localtime_r_proto="$define" 296 d_random_r_proto="$define" 297 298 ;; 299esac 300EOCBU 301 302cat > UU/uselargefiles.cbu <<'EOCBU' 303# This script UU/uselargefiles.cbu will get 'called-back' by Configure 304# after it has prompted the user for whether to use large files. 305case "$uselargefiles" in 306''|$define|true|[yY]*) 307# Keep this in the left margin. 308ccflags_uselargefiles="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" 309 310 ccflags="$ccflags $ccflags_uselargefiles" 311 ;; 312esac 313EOCBU 314