| 1 | # hints/solaris_2.sh |
| 2 | # Contributions by (in alphabetical order) Alan Burlison, Andy Dougherty, |
| 3 | # Dean Roehrich, Jarkko Hietaniemi, Lupe Christoph, Richard Soderberg and |
| 4 | # many others. |
| 5 | # |
| 6 | # See README.solaris for additional information. |
| 7 | # |
| 8 | # For consistency with gcc, we do not adopt Sun Marketing's |
| 9 | # removal of the '2.' prefix from the Solaris version number. |
| 10 | # (Configure tries to detect an old fixincludes and needs |
| 11 | # this information.) |
| 12 | |
| 13 | # If perl fails tests that involve dynamic loading of extensions, and |
| 14 | # you are using gcc, be sure that you are NOT using GNU as and ld. One |
| 15 | # way to do that is to invoke Configure with |
| 16 | # |
| 17 | # sh Configure -Dcc='gcc -B/usr/ccs/bin/' |
| 18 | # |
| 19 | # (Note that the trailing slash is *required*.) |
| 20 | # gcc will occasionally emit warnings about "unused prefix", but |
| 21 | # these ought to be harmless. See below for more details. |
| 22 | |
| 23 | # Solaris has secure SUID scripts |
| 24 | d_suidsafe=${d_suidsafe:-define} |
| 25 | |
| 26 | # Be paranoid about nm failing to find symbols |
| 27 | mistrustnm=${mistrustnm:-run} |
| 28 | |
| 29 | # Several people reported problems with perl's malloc, especially |
| 30 | # when use64bitall is defined or when using gcc. |
| 31 | # http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-01/msg01318.html |
| 32 | # http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-01/msg00465.html |
| 33 | usemymalloc=${usemymalloc:-false} |
| 34 | |
| 35 | # malloc wrap works |
| 36 | case "$usemallocwrap" in |
| 37 | '') usemallocwrap='define' ;; |
| 38 | esac |
| 39 | |
| 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 @ @'` |
| 43 | glibpth="$*" |
| 44 | |
| 45 | # Starting with Solaris 10, we don't want versioned shared libraries because |
| 46 | # those often indicate a private use only library. Especially badly that would |
| 47 | # break things with SUNWbdb (Berkeley DB) being installed, which brings in |
| 48 | # /usr/lib/libdb.so.1, but that is not really meant for public consumption. |
| 49 | # XXX Revisit after perl 5.10 -- should we apply this to older Solaris |
| 50 | # versions too? (A.D. 11/2007). |
| 51 | case "`$run uname -r`" in |
| 52 | 5.[0-9]) ;; |
| 53 | *) ignore_versioned_solibs=y ;; |
| 54 | esac |
| 55 | |
| 56 | # Remove unwanted libraries. -lucb contains incompatible routines. |
| 57 | # -lld and -lsec don't do anything useful. -lcrypt does not |
| 58 | # really provide anything we need over -lc, so we drop it, too. |
| 59 | # -lmalloc can cause a problem with GNU CC & Solaris. Specifically, |
| 60 | # libmalloc.a may allocate memory that is only 4 byte aligned, but |
| 61 | # GNU CC on the Sparc assumes that doubles are 8 byte aligned. |
| 62 | # Thanks to Hallvard B. Furuseth <h.b.furuseth@usit.uio.no> |
| 63 | set `echo " $libswanted " | sed -e 's@ ld @ @' -e 's@ malloc @ @' -e 's@ ucb @ @' -e 's@ sec @ @' -e 's@ crypt @ @'` |
| 64 | libswanted="$*" |
| 65 | |
| 66 | # Look for architecture name. We want to suggest a useful default. |
| 67 | case "$archname" in |
| 68 | '') |
| 69 | if test -f /usr/bin/arch; then |
| 70 | archname=`/usr/bin/arch` |
| 71 | archname="${archname}-${osname}" |
| 72 | elif test -f /usr/ucb/arch; then |
| 73 | archname=`/usr/ucb/arch` |
| 74 | archname="${archname}-${osname}" |
| 75 | fi |
| 76 | ;; |
| 77 | esac |
| 78 | |
| 79 | # |
| 80 | # This extracts the library directories that will be searched by the Sun |
| 81 | # Workshop compiler, given the command-line supplied in $tryworkshopcc. |
| 82 | # Use thusly: loclibpth="`$getworkshoplibs` $loclibpth" |
| 83 | # |
| 84 | getworkshoplibs=`cat <<'END' |
| 85 | eval $tryworkshopcc -### 2>&1 | \ |
| 86 | sed -n '/ -Y /s!.* -Y "P,\([^"]*\)".*!\1!p' | tr ':' ' ' | \ |
| 87 | sed -e 's!/usr/lib/sparcv9!!' -e 's!/usr/ccs/lib/sparcv9!!' \ |
| 88 | -e 's!/usr/lib!!g' -e 's!/usr/ccs/lib!!g' |
| 89 | END |
| 90 | ` |
| 91 | |
| 92 | case "$cc" in |
| 93 | '') for i in `ls -r /opt/solstudio*/bin/cc` /opt/SUNWspro/bin/cc |
| 94 | do |
| 95 | if test -f "$i"; then |
| 96 | cc=$i |
| 97 | cat <<EOF >&4 |
| 98 | |
| 99 | You specified no cc but you seem to have the Workshop compiler |
| 100 | ($cc) installed, using that. |
| 101 | If you want something else, specify that in the command line, |
| 102 | e.g. Configure -Dcc=gcc |
| 103 | |
| 104 | EOF |
| 105 | break |
| 106 | fi |
| 107 | done |
| 108 | ;; |
| 109 | esac |
| 110 | |
| 111 | ###################################################### |
| 112 | # General sanity testing. See below for excerpts from the Solaris FAQ. |
| 113 | # |
| 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 |
| 119 | # |
| 120 | # Here's another draft of the perl5/solaris/gcc sanity-checker. |
| 121 | |
| 122 | case `type ${cc:-cc}` in |
| 123 | */usr/ucb/cc*) cat <<END >&4 |
| 124 | |
| 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. |
| 128 | |
| 129 | END |
| 130 | ;; |
| 131 | esac |
| 132 | |
| 133 | |
| 134 | # Check that /dev/fd is mounted. If it is not mounted, let the |
| 135 | # user know that suid scripts may not work. |
| 136 | $run mount | grep '^/dev/fd ' 2>&1 > /dev/null |
| 137 | case $? in |
| 138 | 0) ;; |
| 139 | *) |
| 140 | cat <<END >&4 |
| 141 | |
| 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 |
| 144 | to mount /dev/fd. |
| 145 | |
| 146 | END |
| 147 | ;; |
| 148 | esac |
| 149 | |
| 150 | |
| 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 | found_libucb='' |
| 154 | case "$run" in |
| 155 | '') /usr/bin/ls /usr/lib/libucb* >/dev/null 2>&1 |
| 156 | found_libucb=$? |
| 157 | ;; |
| 158 | *) $run /usr/bin/ls '/usr/lib/libucb*' >/dev/null 2>&1 |
| 159 | found_libucb=$? |
| 160 | ;; |
| 161 | esac |
| 162 | |
| 163 | case $found_libucb in |
| 164 | 0) |
| 165 | cat <<END >&4 |
| 166 | |
| 167 | NOTE: libucb has been found in /usr/lib. libucb should reside in |
| 168 | /usr/ucblib. You may have trouble while building Perl extensions. |
| 169 | |
| 170 | END |
| 171 | ;; |
| 172 | esac |
| 173 | |
| 174 | # Use shell built-in 'type' command instead of /usr/bin/which to |
| 175 | # avoid possible csh start-up problems and also to use the same shell |
| 176 | # we'll be using to Configure and make perl. |
| 177 | # The path name is the last field in the output, but the type command |
| 178 | # has an annoying array of possible outputs, e.g.: |
| 179 | # make is hashed (/opt/gnu/bin/make) |
| 180 | # cc is /usr/ucb/cc |
| 181 | # foo not found |
| 182 | # use a command like type make | awk '{print $NF}' | sed 's/[()]//g' |
| 183 | |
| 184 | # See if make(1) is GNU make(1). |
| 185 | # If it is, make sure the setgid bit is not set. |
| 186 | make -v > make.vers 2>&1 |
| 187 | if grep GNU make.vers > /dev/null 2>&1; then |
| 188 | tmp=`type make | awk '{print $NF}' | sed 's/[()]//g'` |
| 189 | case "`${ls:-'/usr/bin/ls'} -lL $tmp`" in |
| 190 | ??????s*) |
| 191 | cat <<END >&2 |
| 192 | |
| 193 | NOTE: Your PATH points to GNU make, and your GNU make has the set-group-id |
| 194 | bit set. You must either rearrange your PATH to put /usr/ccs/bin before the |
| 195 | GNU utilities or you must ask your system administrator to disable the |
| 196 | set-group-id bit on GNU make. |
| 197 | |
| 198 | END |
| 199 | ;; |
| 200 | esac |
| 201 | fi |
| 202 | rm -f make.vers |
| 203 | |
| 204 | cat > UU/cc.cbu <<'EOCBU' |
| 205 | # This script UU/cc.cbu will get 'called-back' by Configure after it |
| 206 | # has prompted the user for the C compiler to use. |
| 207 | |
| 208 | # If the C compiler is gcc: |
| 209 | # - check the fixed-includes |
| 210 | # - check as(1) and ld(1), they should not be GNU |
| 211 | # (GNU as and ld 2.8.1 and later are reportedly ok, however.) |
| 212 | # If the C compiler is not gcc: |
| 213 | # - Check if it is the Workshop/Forte compiler. |
| 214 | # If it is, prepare for 64 bit and long doubles. |
| 215 | # - check as(1) and ld(1), they should not be GNU |
| 216 | # (GNU as and ld 2.8.1 and later are reportedly ok, however.) |
| 217 | # |
| 218 | # Watch out in case they have not set $cc. |
| 219 | |
| 220 | # Perl compiled with some combinations of GNU as and ld may not |
| 221 | # be able to perform dynamic loading of extensions. If you have a |
| 222 | # problem with dynamic loading, be sure that you are using the Solaris |
| 223 | # /usr/ccs/bin/as and /usr/ccs/bin/ld. You can do that with |
| 224 | # sh Configure -Dcc='gcc -B/usr/ccs/bin/' |
| 225 | # (note the trailing slash is required). |
| 226 | # Combinations that are known to work with the following hints: |
| 227 | # |
| 228 | # gcc-2.7.2, GNU as 2.7, GNU ld 2.7 |
| 229 | # egcs-1.0.3, GNU as 2.9.1 and GNU ld 2.9.1 |
| 230 | # --Andy Dougherty <doughera@lafayette.edu> |
| 231 | # Tue Apr 13 17:19:43 EDT 1999 |
| 232 | |
| 233 | # Get gcc to share its secrets. |
| 234 | echo 'int main() { return 0; }' > try.c |
| 235 | # Indent to avoid propagation to config.sh |
| 236 | verbose=`${cc:-cc} $ccflags -v -o try try.c 2>&1` |
| 237 | |
| 238 | # XXX TODO: 'specs' output changed from 'Reading specs from' in gcc-[23] to 'Using |
| 239 | # built-in specs' in gcc-4. Perhaps we should just use the same gcc test as |
| 240 | # in Configure to see if we're using gcc. |
| 241 | if echo "$verbose" | egrep '(Reading specs from)|(Using built-in specs)' >/dev/null 2>&1; then |
| 242 | # |
| 243 | # Using gcc. |
| 244 | # |
| 245 | cc_name='gcc' |
| 246 | |
| 247 | # See if as(1) is GNU as(1). GNU as(1) might not work for this job. |
| 248 | if echo "$verbose" | grep ' /usr/ccs/bin/as ' >/dev/null 2>&1; then |
| 249 | : |
| 250 | else |
| 251 | cat <<END >&2 |
| 252 | |
| 253 | NOTE: You are using GNU as(1). GNU as(1) might not build Perl. If you |
| 254 | have trouble, you can use /usr/ccs/bin/as by including -B/usr/ccs/bin/ |
| 255 | in your ${cc:-cc} command. (Note that the trailing "/" is required.) |
| 256 | |
| 257 | END |
| 258 | # Apparently not needed, at least for as 2.7 and later. |
| 259 | # cc="${cc:-cc} $ccflags -B/usr/ccs/bin/" |
| 260 | fi |
| 261 | |
| 262 | # See if ld(1) is GNU ld(1). GNU ld(1) might not work for this job. |
| 263 | # Recompute $verbose since we may have just changed $cc. |
| 264 | verbose=`${cc:-cc} $ccflags -v -o try try.c 2>&1 | grep ld 2>&1` |
| 265 | |
| 266 | if echo "$verbose" | grep ' /usr/ccs/bin/ld ' >/dev/null 2>&1; then |
| 267 | # Ok, gcc directly calls the Solaris /usr/ccs/bin/ld. |
| 268 | : |
| 269 | elif echo "$verbose" | grep "ld: Software Generation Utilities" >/dev/null 2>&1; then |
| 270 | # Hmm. gcc doesn't call /usr/ccs/bin/ld directly, but it |
| 271 | # does appear to be using it eventually. egcs-1.0.3's ld |
| 272 | # wrapper does this. |
| 273 | # Most Solaris versions of ld I've seen contain the magic |
| 274 | # string used in the grep. |
| 275 | : |
| 276 | elif echo "$verbose" | grep "Solaris Link Editors" >/dev/null 2>&1; then |
| 277 | # However some Solaris 8 versions prior to ld 5.8-1.286 contain |
| 278 | # this string instead. |
| 279 | : |
| 280 | else |
| 281 | # No evidence yet of /usr/ccs/bin/ld. Some versions |
| 282 | # of egcs's ld wrapper call /usr/ccs/bin/ld in turn but |
| 283 | # apparently don't reveal that unless you pass in -V. |
| 284 | # (This may all depend on local configurations too.) |
| 285 | |
| 286 | # Recompute verbose with -Wl,-v to find GNU ld if present |
| 287 | verbose=`${cc:-cc} $ccflags -Wl,-v -o try try.c 2>&1 | grep /ld 2>&1` |
| 288 | |
| 289 | myld=`echo $verbose | awk '/\/ld/ {print $1}'` |
| 290 | # This assumes that gcc's output will not change, and that |
| 291 | # /full/path/to/ld will be the first word of the output. |
| 292 | # Thus myld is something like /opt/gnu/sparc-sun-solaris2.5/bin/ld |
| 293 | |
| 294 | # Allow that $myld may be '', due to changes in gcc's output |
| 295 | if ${myld:-ld} -V 2>&1 | |
| 296 | grep "ld: Software Generation Utilities" >/dev/null 2>&1; then |
| 297 | # Ok, /usr/ccs/bin/ld eventually does get called. |
| 298 | : |
| 299 | elif ${myld:-ld} -V 2>&1 | |
| 300 | grep "Solaris Link Editors" >/dev/null 2>&1; then |
| 301 | # Ok, /usr/ccs/bin/ld eventually does get called. |
| 302 | : |
| 303 | else |
| 304 | echo "Found GNU ld='$myld'" >&4 |
| 305 | cat <<END >&2 |
| 306 | |
| 307 | NOTE: You are using GNU ld(1). GNU ld(1) might not build Perl. If you |
| 308 | have trouble, you can use /usr/ccs/bin/ld by including -B/usr/ccs/bin/ |
| 309 | in your ${cc:-cc} command. (Note that the trailing "/" is required.) |
| 310 | |
| 311 | I will try to use GNU ld by passing in the -Wl,-E flag, but if that |
| 312 | doesn't work, you should use -B/usr/ccs/bin/ instead. |
| 313 | |
| 314 | END |
| 315 | ccdlflags="$ccdlflags -Wl,-E" |
| 316 | lddlflags="$lddlflags -Wl,-E -shared" |
| 317 | fi |
| 318 | fi |
| 319 | |
| 320 | else |
| 321 | # |
| 322 | # Not using gcc. |
| 323 | # |
| 324 | cat > try.c << 'EOM' |
| 325 | #include <stdio.h> |
| 326 | int main() { |
| 327 | #if defined(__SUNPRO_C) |
| 328 | printf("workshop\n"); |
| 329 | #else |
| 330 | #if defined(__SUNPRO_CC) |
| 331 | printf("workshop CC\n"); |
| 332 | #else |
| 333 | printf("\n"); |
| 334 | #endif |
| 335 | #endif |
| 336 | return(0); |
| 337 | } |
| 338 | EOM |
| 339 | tryworkshopcc="${cc:-cc} $ccflags try.c -o try" |
| 340 | if $tryworkshopcc >/dev/null 2>&1; then |
| 341 | cc_name=`$run ./try` |
| 342 | if test "$cc_name" = "workshop"; then |
| 343 | ccversion="`${cc:-cc} -V 2>&1|sed -n -e '1s/^[Cc][Cc9]9*: //p'`" |
| 344 | fi |
| 345 | if test "$cc_name" = "workshop CC"; then |
| 346 | ccversion="`${cc:-CC} -V 2>&1|sed -n -e '1s/^[Cc][C]: //p'`" |
| 347 | fi |
| 348 | case "$cc_name" in |
| 349 | workshop*) |
| 350 | # Settings for either cc or CC |
| 351 | if test ! "$use64bitall_done"; then |
| 352 | loclibpth="/usr/lib /usr/ccs/lib `$getworkshoplibs` $loclibpth" |
| 353 | fi |
| 354 | # Sun CC/cc don't support gcc attributes |
| 355 | d_attribute_format='undef' |
| 356 | d_attribute_malloc='undef' |
| 357 | d_attribute_nonnull='undef' |
| 358 | d_attribute_noreturn='undef' |
| 359 | d_attribute_pure='undef' |
| 360 | d_attribute_unused='undef' |
| 361 | d_attribute_warn_unused_result='undef' |
| 362 | ;; |
| 363 | esac |
| 364 | fi |
| 365 | |
| 366 | # See if as(1) is GNU as(1). GNU might not work for this job. |
| 367 | case `as --version < /dev/null 2>&1` in |
| 368 | *GNU*) |
| 369 | cat <<END >&2 |
| 370 | |
| 371 | NOTE: You are using GNU as(1). GNU as(1) might not build Perl. |
| 372 | You must arrange to use /usr/ccs/bin/as, perhaps by adding /usr/ccs/bin |
| 373 | to the beginning of your PATH. |
| 374 | |
| 375 | END |
| 376 | ;; |
| 377 | esac |
| 378 | |
| 379 | # See if ld(1) is GNU ld(1). GNU ld(1) might not work for this job. |
| 380 | # ld --version doesn't properly report itself as a GNU tool, |
| 381 | # as of ld version 2.6, so we need to be more strict. TWP 9/5/96 |
| 382 | # Sun's ld always emits the "Software Generation Utilities" string. |
| 383 | if ld -V 2>&1 | grep "ld: Software Generation Utilities" >/dev/null 2>&1; then |
| 384 | # Ok, ld is /usr/ccs/bin/ld. |
| 385 | : |
| 386 | else |
| 387 | cat <<END >&2 |
| 388 | |
| 389 | NOTE: You are apparently using GNU ld(1). GNU ld(1) might not build Perl. |
| 390 | You should arrange to use /usr/ccs/bin/ld, perhaps by adding /usr/ccs/bin |
| 391 | to the beginning of your PATH. |
| 392 | |
| 393 | END |
| 394 | fi |
| 395 | fi |
| 396 | |
| 397 | # as --version or ld --version might dump core. |
| 398 | rm -f try try.c core |
| 399 | EOCBU |
| 400 | |
| 401 | cat > UU/usethreads.cbu <<'EOCBU' |
| 402 | # This script UU/usethreads.cbu will get 'called-back' by Configure |
| 403 | # after it has prompted the user for whether to use threads. |
| 404 | case "$usethreads" in |
| 405 | $define|true|[yY]*) |
| 406 | ccflags="-D_REENTRANT $ccflags" |
| 407 | |
| 408 | # -lpthread overrides some lib C functions, so put it before c. |
| 409 | set `echo X "$libswanted "| sed -e "s/ c / pthread c /"` |
| 410 | shift |
| 411 | libswanted="$*" |
| 412 | |
| 413 | # sched_yield is available in the -lrt library. However, |
| 414 | # we can also pick up the equivalent yield() function in the |
| 415 | # normal C library. To avoid pulling in unnecessary |
| 416 | # libraries, we'll normally avoid sched_yield()/-lrt and |
| 417 | # just use yield(). However, we'll honor a command-line |
| 418 | # override : "-Dsched_yield=sched_yield". |
| 419 | # If we end up using sched_yield, we're going to need -lrt. |
| 420 | sched_yield=${sched_yield:-yield} |
| 421 | if test "$sched_yield" = "sched_yield"; then |
| 422 | set `echo X "$libswanted "| sed -e "s/ pthread / rt pthread /"` |
| 423 | shift |
| 424 | libswanted="$*" |
| 425 | fi |
| 426 | |
| 427 | # On Solaris 2.6 x86 there is a bug with sigsetjmp() and siglongjmp() |
| 428 | # when linked with the threads library, such that whatever positive |
| 429 | # value you pass to siglongjmp(), sigsetjmp() returns 1. |
| 430 | # Thanks to Simon Parsons <S.Parsons@ftel.co.uk> for this report. |
| 431 | # Sun BugID is 4117946, "sigsetjmp always returns 1 when called by |
| 432 | # siglongjmp in a MT program". As of 19980622, there is no patch |
| 433 | # available. |
| 434 | cat >try.c <<'EOM' |
| 435 | /* Test for sig(set|long)jmp bug. */ |
| 436 | #include <setjmp.h> |
| 437 | |
| 438 | int main() |
| 439 | { |
| 440 | sigjmp_buf env; |
| 441 | int ret; |
| 442 | |
| 443 | ret = sigsetjmp(env, 1); |
| 444 | if (ret) { return ret == 2; } |
| 445 | siglongjmp(env, 2); |
| 446 | } |
| 447 | EOM |
| 448 | if test "`arch`" = i86pc -a `uname -r` = 5.6 && \ |
| 449 | ${cc:-cc} try.c -lpthread >/dev/null 2>&1 && ./a.out; then |
| 450 | d_sigsetjmp=$undef |
| 451 | fi |
| 452 | |
| 453 | # These prototypes should be visible since we using |
| 454 | # -D_REENTRANT, but that does not seem to work. |
| 455 | # It does seem to work for getnetbyaddr_r, weirdly enough, |
| 456 | # and other _r functions. (Solaris 8) |
| 457 | |
| 458 | d_ctermid_r_proto="$define" |
| 459 | d_gethostbyaddr_r_proto="$define" |
| 460 | d_gethostbyname_r_proto="$define" |
| 461 | d_getnetbyname_r_proto="$define" |
| 462 | d_getprotobyname_r_proto="$define" |
| 463 | d_getprotobynumber_r_proto="$define" |
| 464 | d_getservbyname_r_proto="$define" |
| 465 | d_getservbyport_r_proto="$define" |
| 466 | |
| 467 | # Ditto. (Solaris 7) |
| 468 | d_readdir_r_proto="$define" |
| 469 | d_readdir64_r_proto="$define" |
| 470 | d_tmpnam_r_proto="$define" |
| 471 | d_ttyname_r_proto="$define" |
| 472 | |
| 473 | ;; |
| 474 | esac |
| 475 | EOCBU |
| 476 | |
| 477 | cat > UU/uselargefiles.cbu <<'EOCBU' |
| 478 | # This script UU/uselargefiles.cbu will get 'called-back' by Configure |
| 479 | # after it has prompted the user for whether to use large files. |
| 480 | case "$uselargefiles" in |
| 481 | ''|$define|true|[yY]*) |
| 482 | |
| 483 | # Keep these in the left margin. |
| 484 | ccflags_uselargefiles="`$run getconf LFS_CFLAGS 2>/dev/null`" |
| 485 | ldflags_uselargefiles="`$run getconf LFS_LDFLAGS 2>/dev/null`" |
| 486 | libswanted_uselargefiles="`$run getconf LFS_LIBS 2>/dev/null|sed -e 's@^-l@@' -e 's@ -l@ @g'`" |
| 487 | |
| 488 | ccflags="$ccflags $ccflags_uselargefiles" |
| 489 | ldflags="$ldflags $ldflags_uselargefiles" |
| 490 | libswanted="$libswanted $libswanted_uselargefiles" |
| 491 | ;; |
| 492 | esac |
| 493 | EOCBU |
| 494 | |
| 495 | # This is truly a mess. |
| 496 | case "$usemorebits" in |
| 497 | "$define"|true|[yY]*) |
| 498 | use64bitint="$define" |
| 499 | uselongdouble="$define" |
| 500 | ;; |
| 501 | esac |
| 502 | |
| 503 | if test `$run uname -p` = i386; then |
| 504 | case "$use64bitint" in |
| 505 | "$define"|true|[yY]*) |
| 506 | ccflags="$ccflags -DPTR_IS_LONG" |
| 507 | ;; |
| 508 | esac |
| 509 | fi |
| 510 | |
| 511 | if test `$run uname -p` = sparc -o `$run uname -p` = i386; then |
| 512 | cat > UU/use64bitint.cbu <<'EOCBU' |
| 513 | # This script UU/use64bitint.cbu will get 'called-back' by Configure |
| 514 | # after it has prompted the user for whether to use 64 bit integers. |
| 515 | case "$use64bitint" in |
| 516 | "$define"|true|[yY]*) |
| 517 | case "`$run uname -r`" in |
| 518 | 5.[0-4]) |
| 519 | cat >&4 <<EOM |
| 520 | Solaris `uname -r|sed -e 's/^5\./2./'` does not support 64-bit integers. |
| 521 | You should upgrade to at least Solaris 2.5. |
| 522 | EOM |
| 523 | exit 1 |
| 524 | ;; |
| 525 | esac |
| 526 | |
| 527 | # gcc-2.8.1 on Solaris 8 with -Duse64bitint fails op/pat.t test 822 |
| 528 | # if we compile regexec.c with -O. Turn off optimization for that one |
| 529 | # file. See hints/README.hints , especially |
| 530 | # =head2 Propagating variables to config.sh, method 3. |
| 531 | # A. Dougherty May 24, 2002 |
| 532 | case "${gccversion}-${optimize}" in |
| 533 | 2.8*-O*) |
| 534 | # Honor a command-line override (rather unlikely) |
| 535 | case "$regexec_cflags" in |
| 536 | '') echo "Disabling optimization on regexec.c for gcc $gccversion" >&4 |
| 537 | regexec_cflags='optimize=' |
| 538 | echo "regexec_cflags='optimize=\"\"'" >> config.sh |
| 539 | ;; |
| 540 | esac |
| 541 | ;; |
| 542 | esac |
| 543 | ;; |
| 544 | esac |
| 545 | EOCBU |
| 546 | |
| 547 | cat > UU/use64bitall.cbu <<'EOCBU' |
| 548 | # This script UU/use64bitall.cbu will get 'called-back' by Configure |
| 549 | # after it has prompted the user for whether to be maximally 64 bitty. |
| 550 | case "$use64bitall-$use64bitall_done" in |
| 551 | "$define-"|true-|[yY]*-) |
| 552 | case "`$run uname -r`" in |
| 553 | 5.[0-6]) |
| 554 | cat >&4 <<EOM |
| 555 | Solaris `uname -r|sed -e 's/^5\./2./'` does not support 64-bit pointers. |
| 556 | You should upgrade to at least Solaris 2.7. |
| 557 | EOM |
| 558 | exit 1 |
| 559 | ;; |
| 560 | esac |
| 561 | processor=`$run uname -p`; |
| 562 | if test "$processor" = sparc; then |
| 563 | libc='/usr/lib/sparcv9/libc.so' |
| 564 | if test ! -f $libc; then |
| 565 | cat >&4 <<EOM |
| 566 | |
| 567 | I do not see the 64-bit libc, $libc. |
| 568 | Cannot continue, aborting. |
| 569 | |
| 570 | EOM |
| 571 | exit 1 |
| 572 | fi |
| 573 | fi |
| 574 | case "${cc:-cc} -v 2>/dev/null" in |
| 575 | *gcc*) |
| 576 | echo 'int main() { return 0; }' > try.c |
| 577 | case "`${cc:-cc} $ccflags -mcpu=v9 -m64 -S try.c 2>&1 | grep 'm64 is not supported by this configuration'`" in |
| 578 | *"m64 is not supported"*) |
| 579 | cat >&4 <<EOM |
| 580 | |
| 581 | Full 64-bit build is not supported by this gcc configuration. |
| 582 | Check http://gcc.gnu.org/ for the latest news of availability |
| 583 | of gcc for 64-bit Sparc. |
| 584 | |
| 585 | Cannot continue, aborting. |
| 586 | |
| 587 | EOM |
| 588 | exit 1 |
| 589 | ;; |
| 590 | esac |
| 591 | if test "$processor" = sparc; then |
| 592 | loclibpth="/usr/lib/sparcv9 $loclibpth" |
| 593 | ccflags="$ccflags -mcpu=v9" |
| 594 | fi |
| 595 | ccflags="$ccflags -m64" |
| 596 | |
| 597 | # This adds in -Wa,-xarch=v9. I suspect that's superfluous, |
| 598 | # since the -m64 above should do that already. Someone |
| 599 | # with gcc-3.x.x, please test with gcc -v. A.D. 20-Nov-2003 |
| 600 | # if test $processor = sparc -a X`$run getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null` != X; then |
| 601 | # ccflags="$ccflags -Wa,`$run getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`" |
| 602 | # fi |
| 603 | ldflags="$ldflags -m64" |
| 604 | |
| 605 | # See [perl #66604]: On Solaris 11, gcc -m64 on amd64 |
| 606 | # appears not to understand -G. (gcc -G has not caused |
| 607 | # problems on other platforms in the past.) gcc versions |
| 608 | # at least as old as 3.4.3 support -shared, so just |
| 609 | # use that with Solaris 11 and later, but keep |
| 610 | # the old behavior for older Solaris versions. |
| 611 | case "$osvers" in |
| 612 | 2.?|2.10) lddlflags="$lddlflags -G -m64" ;; |
| 613 | *) lddlflags="$lddlflags -shared -m64" ;; |
| 614 | esac |
| 615 | ;; |
| 616 | *) |
| 617 | getconfccflags="`$run getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`" |
| 618 | getconfldflags="`$run getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`" |
| 619 | getconflddlflags="`$run getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`" |
| 620 | echo "int main() { return(0); } " > try.c |
| 621 | case "`${cc:-cc} $getconfccflags try.c 2>&1 | grep 'deprecated'`" in |
| 622 | *" -xarch=generic64 is deprecated, use -m64 "*) |
| 623 | getconfccflags=`echo $getconfccflags | sed -e 's/xarch=generic64/m64/'` |
| 624 | getconfldflags=`echo $getconfldflags | sed -e 's/xarch=generic64/m64/'` |
| 625 | getconflddlflags=`echo $getconflddlflags | sed -e 's/xarch=generic64/m64/'` |
| 626 | ;; |
| 627 | esac |
| 628 | ccflags="$ccflags $getconfccflags" |
| 629 | ldflags="$ldflags $getconfldflags" |
| 630 | lddlflags="$lddlflags -G $getconflddlflags" |
| 631 | |
| 632 | echo "int main() { return(0); } " > try.c |
| 633 | tryworkshopcc="${cc:-cc} try.c -o try $ccflags" |
| 634 | if test "$processor" = sparc; then |
| 635 | loclibpth="/usr/lib/sparcv9 /usr/ccs/lib/sparcv9 $loclibpth" |
| 636 | fi |
| 637 | loclibpth="`$getworkshoplibs` $loclibpth" |
| 638 | ;; |
| 639 | esac |
| 640 | unset processor |
| 641 | use64bitall_done=yes |
| 642 | archname64=64 |
| 643 | ;; |
| 644 | esac |
| 645 | EOCBU |
| 646 | |
| 647 | # Actually, we want to run this already now, if so requested, |
| 648 | # because we need to fix up things right now. |
| 649 | case "$use64bitall" in |
| 650 | "$define"|true|[yY]*) |
| 651 | # CBUs expect to be run in UU |
| 652 | cd UU; . ./use64bitall.cbu; cd .. |
| 653 | ;; |
| 654 | esac |
| 655 | fi |
| 656 | |
| 657 | cat > UU/uselongdouble.cbu <<'EOCBU' |
| 658 | # This script UU/uselongdouble.cbu will get 'called-back' by Configure |
| 659 | # after it has prompted the user for whether to use long doubles. |
| 660 | case "$uselongdouble" in |
| 661 | "$define"|true|[yY]*) |
| 662 | if test "$cc_name" = "workshop"; then |
| 663 | cat > try.c << 'EOM' |
| 664 | #include <sunmath.h> |
| 665 | int main() { (void) powl(2, 256); return(0); } |
| 666 | EOM |
| 667 | if ${cc:-cc} try.c -lsunmath -o try > /dev/null 2>&1 && ./try; then |
| 668 | libswanted="$libswanted sunmath" |
| 669 | fi |
| 670 | else |
| 671 | cat >&4 <<EOM |
| 672 | |
| 673 | The Sun Workshop math library is either not available or not working, |
| 674 | so I do not know how to do long doubles, sorry. |
| 675 | I'm therefore disabling the use of long doubles. |
| 676 | EOM |
| 677 | uselongdouble="$undef" |
| 678 | fi |
| 679 | ;; |
| 680 | esac |
| 681 | EOCBU |
| 682 | |
| 683 | # |
| 684 | # If unsetenv is available, use it in conjunction with PERL_USE_SAFE_PUTENV to |
| 685 | # work around Sun bugid 6333830. Both unsetenv and 6333830 only appear in |
| 686 | # Solaris 10, so we don't need to probe explicitly for an OS version. We have |
| 687 | # to append this test to the end of config.over as it needs to run after |
| 688 | # Configure has probed for unsetenv, and this hints file is processed before |
| 689 | # that has happened. |
| 690 | # |
| 691 | cat >> config.over <<'EOOVER' |
| 692 | if test "$d_unsetenv" = "$define" -a \ |
| 693 | `expr "$ccflags" : '.*-DPERL_USE_SAFE_PUTENV'` -eq 0; then |
| 694 | ccflags="$ccflags -DPERL_USE_SAFE_PUTENV" |
| 695 | fi |
| 696 | EOOVER |
| 697 | |
| 698 | rm -f try.c try.o try a.out |
| 699 | |
| 700 | # If using C++, the Configure scan for dlopen() will fail in Solaris |
| 701 | # because one of the two (1) an extern "C" linkage definition is needed |
| 702 | # (2) #include <dlfcn.h> is needed, *and* a cast to (void*(*)()) |
| 703 | # is needed for the &dlopen. Adding any of these would require changing |
| 704 | # a delicate spot in Configure, so easier just to force our guess here |
| 705 | # for Solaris. Much the same goes for dlerror(). |
| 706 | case "$cc" in |
| 707 | *g++*|*CC*) |
| 708 | d_dlopen='define' |
| 709 | d_dlerror='define' |
| 710 | ;; |
| 711 | esac |
| 712 | |