2 # Last modified: Mon Jan 29 12:52:28 2001
3 # Lupe Christoph <lupe@lupe-christoph.de>
5 # Andy Dougherty <doughera@lafayette.edu>
6 # Which was based on input from lots of folks, especially
7 # Dean Roehrich <roehrich@ironwood-fddi.cray.com>
8 # Additional input from Alan Burlison, Jarkko Hietaniemi,
9 # and Richard Soderberg.
11 # See README.solaris for additional information.
13 # For consistency with gcc, we do not adopt Sun Marketing's
14 # removal of the '2.' prefix from the Solaris version number.
15 # (Configure tries to detect an old fixincludes and needs
18 # If perl fails tests that involve dynamic loading of extensions, and
19 # you are using gcc, be sure that you are NOT using GNU as and ld. One
20 # way to do that is to invoke Configure with
22 # sh Configure -Dcc='gcc -B/usr/ccs/bin/'
24 # (Note that the trailing slash is *required*.)
25 # gcc will occasionally emit warnings about "unused prefix", but
26 # these ought to be harmless. See below for more details.
29 usevfork=${usevfork:-false}
31 # Solaris has secure SUID scripts
32 d_suidsafe=${d_suidsafe:-define}
34 # Several people reported problems with perl's malloc, especially
35 # when use64bitall is defined or when using gcc.
36 # http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-01/msg01318.html
37 # http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-01/msg00465.html
38 usemymalloc=${usemymalloc:-false}
40 # Avoid all libraries in /usr/ucblib.
41 # /lib is just a symlink to /usr/lib
42 set `echo $glibpth | sed -e 's@/usr/ucblib@@' -e 's@ /lib @ @'`
45 # Remove unwanted libraries. -lucb contains incompatible routines.
46 # -lld and -lsec don't do anything useful. -lcrypt does not
47 # really provide anything we need over -lc, so we drop it, too.
48 # -lmalloc can cause a problem with GNU CC & Solaris. Specifically,
49 # libmalloc.a may allocate memory that is only 4 byte aligned, but
50 # GNU CC on the Sparc assumes that doubles are 8 byte aligned.
51 # Thanks to Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
52 set `echo " $libswanted " | sed -e 's@ ld @ @' -e 's@ malloc @ @' -e 's@ ucb @ @' -e 's@ sec @ @' -e 's@ crypt @ @'`
55 # Look for architecture name. We want to suggest a useful default.
58 if test -f /usr/bin/arch; then
59 archname=`/usr/bin/arch`
60 archname="${archname}-${osname}"
61 elif test -f /usr/ucb/arch; then
62 archname=`/usr/ucb/arch`
63 archname="${archname}-${osname}"
68 cat > UU/workshoplibpth.cbu << 'EOCBU'
69 # This script UU/workshoplibpth.cbu will get 'called-back'
70 # by other CBUs this script creates.
71 case "$workshoplibpth_done" in
72 '') if test `uname -p` = "sparc"; then
73 case "$use64bitall" in
75 # add SPARC-specific 64 bit libraries
76 loclibpth="$loclibpth /usr/lib/sparcv9"
77 if test -n "$workshoplibs"; then
78 loclibpth=`echo $loclibpth | sed -e "s% $workshoplibs%%" `
79 for lib in $workshoplibs; do
80 # Logically, it should be sparcv9.
81 # But the reality fights back, it's v9.
82 loclibpth="$loclibpth $lib/sparcv9 $lib/v9"
86 *) loclibpth="$loclibpth $workshoplibs"
90 loclibpth="$loclibpth $workshoplibs"
92 workshoplibpth_done="$define"
98 '') if test -f /opt/SUNWspro/bin/cc; then
101 You specified no cc but you seem to have the Workshop compiler installed,
102 using that. If you want something else, specify that in the command line,
103 e.g. Configure -Dcc=gcc
106 cc=/opt/SUNWspro/bin/cc
111 ######################################################
112 # General sanity testing. See below for excerpts from the Solaris FAQ.
114 # From roehrich@ironwood-fddi.cray.com Wed Sep 27 12:51:46 1995
115 # Date: Thu, 7 Sep 1995 16:31:40 -0500
116 # From: Dean Roehrich <roehrich@ironwood-fddi.cray.com>
117 # To: perl5-porters@africa.nicoh.com
118 # Subject: Re: On perl5/solaris/gcc
120 # Here's another draft of the perl5/solaris/gcc sanity-checker.
122 case `type ${cc:-cc}` in
123 */usr/ucb/cc*) cat <<END >&4
125 NOTE: Some people have reported problems with /usr/ucb/cc.
126 If you have difficulties, please make sure the directory
127 containing your C compiler is before /usr/ucb in your PATH.
134 # Check that /dev/fd is mounted. If it is not mounted, let the
135 # user know that suid scripts may not work.
136 df /dev/fd 2>&1 > /dev/null
142 NOTE: Your system does not have /dev/fd mounted. If you want to
143 be able to use set-uid scripts you must ask your system administrator
151 # See if libucb can be found in /usr/lib. If it is, warn the user
152 # that this may cause problems while building Perl extensions.
153 /usr/bin/ls /usr/lib/libucb* >/dev/null 2>&1
158 NOTE: libucb has been found in /usr/lib. libucb should reside in
159 /usr/ucblib. You may have trouble while building Perl extensions.
165 # Use shell built-in 'type' command instead of /usr/bin/which to
166 # avoid possible csh start-up problems and also to use the same shell
167 # we'll be using to Configure and make perl.
168 # The path name is the last field in the output, but the type command
169 # has an annoying array of possible outputs, e.g.:
170 # make is hashed (/opt/gnu/bin/make)
173 # use a command like type make | awk '{print $NF}' | sed 's/[()]//g'
175 # See if make(1) is GNU make(1).
176 # If it is, make sure the setgid bit is not set.
177 make -v > make.vers 2>&1
178 if grep GNU make.vers > /dev/null 2>&1; then
179 tmp=`type make | awk '{print $NF}' | sed 's/[()]//g'`
180 case "`/usr/bin/ls -lL $tmp`" in
184 NOTE: Your PATH points to GNU make, and your GNU make has the set-group-id
185 bit set. You must either rearrange your PATH to put /usr/ccs/bin before the
186 GNU utilities or you must ask your system administrator to disable the
187 set-group-id bit on GNU make.
195 cat > UU/cc.cbu <<'EOCBU'
196 # This script UU/cc.cbu will get 'called-back' by Configure after it
197 # has prompted the user for the C compiler to use.
199 # If the C compiler is gcc:
200 # - check the fixed-includes
201 # - check as(1) and ld(1), they should not be GNU
202 # (GNU as and ld 2.8.1 and later are reportedly ok, however.)
203 # If the C compiler is not gcc:
204 # - Check if it is the Workshop/Forte compiler.
205 # If it is, prepare for 64 bit and long doubles.
206 # - check as(1) and ld(1), they should not be GNU
207 # (GNU as and ld 2.8.1 and later are reportedly ok, however.)
209 # Watch out in case they have not set $cc.
211 # Perl compiled with some combinations of GNU as and ld may not
212 # be able to perform dynamic loading of extensions. If you have a
213 # problem with dynamic loading, be sure that you are using the Solaris
214 # /usr/ccs/bin/as and /usr/ccs/bin/ld. You can do that with
215 # sh Configure -Dcc='gcc -B/usr/ccs/bin/'
216 # (note the trailing slash is required).
217 # Combinations that are known to work with the following hints:
219 # gcc-2.7.2, GNU as 2.7, GNU ld 2.7
220 # egcs-1.0.3, GNU as 2.9.1 and GNU ld 2.9.1
221 # --Andy Dougherty <doughera@lafayette.edu>
222 # Tue Apr 13 17:19:43 EDT 1999
224 # Get gcc to share its secrets.
225 echo 'main() { return 0; }' > try.c
226 # Indent to avoid propagation to config.sh
227 verbose=`${cc:-cc} -v -o try try.c 2>&1`
229 if echo "$verbose" | grep '^Reading specs from' >/dev/null 2>&1; then
234 # See if as(1) is GNU as(1). GNU as(1) might not work for this job.
235 if echo "$verbose" | grep ' /usr/ccs/bin/as ' >/dev/null 2>&1; then
240 NOTE: You are using GNU as(1). GNU as(1) might not build Perl. If you
241 have trouble, you can use /usr/ccs/bin/as by including -B/usr/ccs/bin/
242 in your ${cc:-cc} command. (Note that the trailing "/" is required.)
245 # Apparently not needed, at least for as 2.7 and later.
246 # cc="${cc:-cc} -B/usr/ccs/bin/"
249 # See if ld(1) is GNU ld(1). GNU ld(1) might not work for this job.
250 # Recompute $verbose since we may have just changed $cc.
251 verbose=`${cc:-cc} -v -o try try.c 2>&1 | grep ld 2>&1`
253 if echo "$verbose" | grep ' /usr/ccs/bin/ld ' >/dev/null 2>&1; then
254 # Ok, gcc directly calls the Solaris /usr/ccs/bin/ld.
256 elif echo "$verbose" | grep "ld: Software Generation Utilities" >/dev/null 2>&1; then
257 # Hmm. gcc doesn't call /usr/ccs/bin/ld directly, but it
258 # does appear to be using it eventually. egcs-1.0.3's ld
260 # All Solaris versions of ld I've seen contain the magic
261 # string used in the grep.
264 # No evidence yet of /usr/ccs/bin/ld. Some versions
265 # of egcs's ld wrapper call /usr/ccs/bin/ld in turn but
266 # apparently don't reveal that unless you pass in -V.
267 # (This may all depend on local configurations too.)
269 # Recompute verbose with -Wl,-v to find GNU ld if present
270 verbose=`${cc:-cc} -v -Wl,-v -o try try.c 2>&1 | grep ld 2>&1`
272 myld=`echo $verbose| grep ld | awk '/\/ld/ {print $1}'`
273 # This assumes that gcc's output will not change, and that
274 # /full/path/to/ld will be the first word of the output.
275 # Thus myld is something like /opt/gnu/sparc-sun-solaris2.5/bin/ld
277 # Allow that $myld may be '', due to changes in gcc's output
278 if ${myld:-ld} -V 2>&1 |
279 grep "ld: Software Generation Utilities" >/dev/null 2>&1; then
280 # Ok, /usr/ccs/bin/ld eventually does get called.
283 echo "Found GNU ld='$myld'" >&4
286 NOTE: You are using GNU ld(1). GNU ld(1) might not build Perl. If you
287 have trouble, you can use /usr/ccs/bin/ld by including -B/usr/ccs/bin/
288 in your ${cc:-cc} command. (Note that the trailing "/" is required.)
290 I will try to use GNU ld by passing in the -Wl,-E flag, but if that
291 doesn't work, you should use -B/usr/ccs/bin/ instead.
294 ccdlflags="$ccdlflags -Wl,-E"
295 lddlflags="$lddlflags -Wl,-E -G"
304 ccversion="`${cc:-cc} -V 2>&1|sed -n -e '1s/^cc: //p'`"
306 *WorkShop*) ccname=workshop ;;
314 int main() { return(0); }
316 workshoplibs=`cc -### try.c -lsunmath -o try 2>&1|sed -n '/ -Y /s%.* -Y "P,\(.*\)".*%\1%p'|tr ':' '\n'|grep '/SUNWspro/'`
317 . ./workshoplibpth.cbu
321 # See if as(1) is GNU as(1). GNU might not work for this job.
322 case `as --version < /dev/null 2>&1` in
326 NOTE: You are using GNU as(1). GNU as(1) might not build Perl.
327 You must arrange to use /usr/ccs/bin/as, perhaps by adding /usr/ccs/bin
328 to the beginning of your PATH.
334 # See if ld(1) is GNU ld(1). GNU ld(1) might not work for this job.
335 # ld --version doesn't properly report itself as a GNU tool,
336 # as of ld version 2.6, so we need to be more strict. TWP 9/5/96
337 # Sun's ld always emits the "Software Generation Utilities" string.
338 if ld -V 2>&1 | grep "ld: Software Generation Utilities" >/dev/null 2>&1; then
339 # Ok, ld is /usr/ccs/bin/ld.
344 NOTE: You are apparently using GNU ld(1). GNU ld(1) might not build Perl.
345 You should arrange to use /usr/ccs/bin/ld, perhaps by adding /usr/ccs/bin
346 to the beginning of your PATH.
353 # as --version or ld --version might dump core.
360 cat > UU/usethreads.cbu <<'EOCBU'
361 # This script UU/usethreads.cbu will get 'called-back' by Configure
362 # after it has prompted the user for whether to use threads.
363 case "$usethreads" in
365 ccflags="-D_REENTRANT $ccflags"
367 # sched_yield is in -lposix4 up to Solaris 2.6, in -lrt starting with Solaris 2.7
369 5.[0-6] | 5.5.1) sched_yield_lib="posix4" ;;
370 *) sched_yield_lib="rt";
372 set `echo X "$libswanted "| sed -e "s/ c / $sched_yield_lib pthread c /"`
376 # On Solaris 2.6 x86 there is a bug with sigsetjmp() and siglongjmp()
377 # when linked with the threads library, such that whatever positive
378 # value you pass to siglongjmp(), sigsetjmp() returns 1.
379 # Thanks to Simon Parsons <S.Parsons@ftel.co.uk> for this report.
380 # Sun BugID is 4117946, "sigsetjmp always returns 1 when called by
381 # siglongjmp in a MT program". As of 19980622, there is no patch
384 /* Test for sig(set|long)jmp bug. */
392 ret = sigsetjmp(env, 1);
393 if (ret) { return ret == 2; }
397 if test "`arch`" = i86pc -a `uname -r` = 5.6 && \
398 ${cc:-cc} try.c -lpthread >/dev/null 2>&1 && ./a.out; then
402 You will see a *** WHOA THERE!!! *** message from Configure for
403 d_sigsetjmp. Keep the recommended value. See hints/solaris_2.sh
404 for more information.
409 # These prototypes should be visible since we using
410 # -D_REENTRANT, but that does not seem to work.
411 # It does seem to work for getnetbyaddr_r, weirdly enough,
412 # and other _r functions. (Solaris 8)
414 d_ctermid_r_proto="$define"
415 d_gethostbyaddr_r_proto="$define"
416 d_gethostbyname_r_proto="$define"
417 d_getnetbyname_r_proto="$define"
418 d_getprotobyname_r_proto="$define"
419 d_getprotobynumber_r_proto="$define"
420 d_getservbyname_r_proto="$define"
421 d_getservbyport_r_proto="$define"
424 d_readdir_r_proto="$define"
425 d_readdir64_r_proto="$define"
426 d_tmpnam_r_proto="$define"
427 d_ttyname_r_proto="$define"
433 cat > UU/uselargefiles.cbu <<'EOCBU'
434 # This script UU/uselargefiles.cbu will get 'called-back' by Configure
435 # after it has prompted the user for whether to use large files.
436 case "$uselargefiles" in
437 ''|$define|true|[yY]*)
439 # Keep these in the left margin.
440 ccflags_uselargefiles="`getconf LFS_CFLAGS 2>/dev/null`"
441 ldflags_uselargefiles="`getconf LFS_LDFLAGS 2>/dev/null`"
442 libswanted_uselargefiles="`getconf LFS_LIBS 2>/dev/null|sed -e 's@^-l@@' -e 's@ -l@ @g`"
444 ccflags="$ccflags $ccflags_uselargefiles"
445 ldflags="$ldflags $ldflags_uselargefiles"
446 libswanted="$libswanted $libswanted_uselargefiles"
451 # This is truly a mess.
452 case "$usemorebits" in
453 "$define"|true|[yY]*)
454 use64bitint="$define"
455 uselongdouble="$define"
459 if test `uname -p` = "sparc"; then
460 cat > UU/use64bitint.cbu <<'EOCBU'
461 # This script UU/use64bitint.cbu will get 'called-back' by Configure
462 # after it has prompted the user for whether to use 64 bit integers.
463 case "$use64bitint" in
464 "$define"|true|[yY]*)
468 Solaris `uname -r|sed -e 's/^5\./2./'` does not support 64-bit integers.
469 You should upgrade to at least Solaris 2.5.
478 cat > UU/use64bitall.cbu <<'EOCBU'
479 # This script UU/use64bitall.cbu will get 'called-back' by Configure
480 # after it has prompted the user for whether to be maximally 64 bitty.
481 case "$use64bitall-$use64bitall_done" in
482 "$define-"|true-|[yY]*-)
486 Solaris `uname -r|sed -e 's/^5\./2./'` does not support 64-bit pointers.
487 You should upgrade to at least Solaris 2.7.
492 libc='/usr/lib/sparcv9/libc.so'
493 if test ! -f $libc; then
496 I do not see the 64-bit libc, $libc.
497 Cannot continue, aborting.
502 . ./workshoplibpth.cbu
503 case "$cc -v 2>/dev/null" in
505 echo 'main() { return 0; }' > try.c
506 case "`${cc:-cc} -mcpu=v9 -m64 -S try.c 2>&1 | grep 'm64 is not supported by this configuration'`" in
507 *"m64 is not supported"*)
510 Full 64-bit build is not supported by this gcc configuration.
511 Check http://gcc.gnu.org/ for the latest news of availability
512 of gcc for 64-bit Sparc.
514 Cannot continue, aborting.
520 ccflags="$ccflags -mcpu=v9 -m64"
521 if test X`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null` != X; then
522 ccflags="$ccflags -Wa,`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
524 # no changes to ld flags, as (according to man ld):
526 # There is no specific option that tells ld to link 64-bit
527 # objects; the class of the first object that gets processed
528 # by ld determines whether it is to perform a 32-bit or a
532 ccflags="$ccflags `getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
533 ldflags="$ldflags `getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`"
534 lddlflags="$lddlflags -G `getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`"
537 libscheck='case "`/usr/bin/file $xxx`" in
538 *64-bit*|*SPARCV9*) ;;
539 *) xxx=/no/64-bit$xxx ;;
547 # Actually, we want to run this already now, if so requested,
548 # because we need to fix up things right now.
549 case "$use64bitall" in
550 "$define"|true|[yY]*)
551 # CBUs expect to be run in UU
552 cd UU; . ./use64bitall.cbu; cd ..
557 cat > UU/uselongdouble.cbu <<'EOCBU'
558 # This script UU/uselongdouble.cbu will get 'called-back' by Configure
559 # after it has prompted the user for whether to use long doubles.
560 case "$uselongdouble" in
561 "$define"|true|[yY]*)
562 if test -f /opt/SUNWspro/lib/libsunmath.so; then
563 # Unfortunately libpth has already been set and
564 # searched, so we need to add in everything manually.
565 libpth="$libpth /opt/SUNWspro/lib"
566 libs="$libs -lsunmath"
567 ldflags="$ldflags -L/opt/SUNWspro/lib -R/opt/SUNWspro/lib"
572 The Sun Workshop math library is not installed; therefore I do not
573 know how to do long doubles, sorry. I'm disabling the use of long
576 uselongdouble="$undef"
582 rm -f try.c try.o try a.out