1#! /bin/sh 2# Output a system dependent set of variables, describing how to set the 3# run time search path of shared libraries in an executable. 4# 5# Copyright 1996-2019 Free Software Foundation, Inc. 6# Taken from GNU libtool, 2001 7# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 8# 9# This file is free software; the Free Software Foundation gives 10# unlimited permission to copy and/or distribute it, with or without 11# modifications, as long as this notice is preserved. 12# 13# The first argument passed to this file is the canonical host specification, 14# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM 15# or 16# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM 17# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld 18# should be set by the caller. 19# 20# The set of defined variables is at the end of this script. 21 22# Known limitations: 23# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer 24# than 256 bytes, otherwise the compiler driver will dump core. The only 25# known workaround is to choose shorter directory names for the build 26# directory and/or the installation directory. 27 28# All known linkers require a '.a' archive for static linking (except MSVC, 29# which needs '.lib'). 30libext=a 31shrext=.so 32 33host="$1" 34host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` 35host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` 36host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` 37 38# Code taken from libtool.m4's _LT_CC_BASENAME. 39 40for cc_temp in $CC""; do 41 case $cc_temp in 42 compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; 43 distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; 44 \-*) ;; 45 *) break;; 46 esac 47done 48cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` 49 50# Code taken from libtool.m4's _LT_COMPILER_PIC. 51 52wl= 53if test "$GCC" = yes; then 54 wl='-Wl,' 55else 56 case "$host_os" in 57 aix*) 58 wl='-Wl,' 59 ;; 60 mingw* | cygwin* | pw32* | os2* | cegcc*) 61 ;; 62 hpux9* | hpux10* | hpux11*) 63 wl='-Wl,' 64 ;; 65 irix5* | irix6* | nonstopux*) 66 wl='-Wl,' 67 ;; 68 linux* | k*bsd*-gnu | kopensolaris*-gnu) 69 case $cc_basename in 70 ecc*) 71 wl='-Wl,' 72 ;; 73 icc* | ifort*) 74 wl='-Wl,' 75 ;; 76 lf95*) 77 wl='-Wl,' 78 ;; 79 nagfor*) 80 wl='-Wl,-Wl,,' 81 ;; 82 pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) 83 wl='-Wl,' 84 ;; 85 ccc*) 86 wl='-Wl,' 87 ;; 88 xl* | bgxl* | bgf* | mpixl*) 89 wl='-Wl,' 90 ;; 91 como) 92 wl='-lopt=' 93 ;; 94 *) 95 case `$CC -V 2>&1 | sed 5q` in 96 *Sun\ F* | *Sun*Fortran*) 97 wl= 98 ;; 99 *Sun\ C*) 100 wl='-Wl,' 101 ;; 102 esac 103 ;; 104 esac 105 ;; 106 newsos6) 107 ;; 108 *nto* | *qnx*) 109 ;; 110 osf3* | osf4* | osf5*) 111 wl='-Wl,' 112 ;; 113 rdos*) 114 ;; 115 solaris*) 116 case $cc_basename in 117 f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) 118 wl='-Qoption ld ' 119 ;; 120 *) 121 wl='-Wl,' 122 ;; 123 esac 124 ;; 125 sunos4*) 126 wl='-Qoption ld ' 127 ;; 128 sysv4 | sysv4.2uw2* | sysv4.3*) 129 wl='-Wl,' 130 ;; 131 sysv4*MP*) 132 ;; 133 sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) 134 wl='-Wl,' 135 ;; 136 unicos*) 137 wl='-Wl,' 138 ;; 139 uts4*) 140 ;; 141 esac 142fi 143 144# Code taken from libtool.m4's _LT_LINKER_SHLIBS. 145 146hardcode_libdir_flag_spec= 147hardcode_libdir_separator= 148hardcode_direct=no 149hardcode_minus_L=no 150 151case "$host_os" in 152 cygwin* | mingw* | pw32* | cegcc*) 153 # FIXME: the MSVC++ port hasn't been tested in a loooong time 154 # When not using gcc, we currently assume that we are using 155 # Microsoft Visual C++. 156 if test "$GCC" != yes; then 157 with_gnu_ld=no 158 fi 159 ;; 160 interix*) 161 # we just hope/assume this is gcc and not c89 (= MSVC++) 162 with_gnu_ld=yes 163 ;; 164 openbsd*) 165 with_gnu_ld=no 166 ;; 167esac 168 169ld_shlibs=yes 170if test "$with_gnu_ld" = yes; then 171 # Set some defaults for GNU ld with shared library support. These 172 # are reset later if shared libraries are not supported. Putting them 173 # here allows them to be overridden if necessary. 174 # Unlike libtool, we use -rpath here, not --rpath, since the documented 175 # option of GNU ld is called -rpath, not --rpath. 176 hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' 177 case "$host_os" in 178 aix[3-9]*) 179 # On AIX/PPC, the GNU linker is very broken 180 if test "$host_cpu" != ia64; then 181 ld_shlibs=no 182 fi 183 ;; 184 amigaos*) 185 case "$host_cpu" in 186 powerpc) 187 ;; 188 m68k) 189 hardcode_libdir_flag_spec='-L$libdir' 190 hardcode_minus_L=yes 191 ;; 192 esac 193 ;; 194 beos*) 195 if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then 196 : 197 else 198 ld_shlibs=no 199 fi 200 ;; 201 cygwin* | mingw* | pw32* | cegcc*) 202 # hardcode_libdir_flag_spec is actually meaningless, as there is 203 # no search path for DLLs. 204 hardcode_libdir_flag_spec='-L$libdir' 205 if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then 206 : 207 else 208 ld_shlibs=no 209 fi 210 ;; 211 haiku*) 212 ;; 213 interix[3-9]*) 214 hardcode_direct=no 215 hardcode_libdir_flag_spec='${wl}-rpath,$libdir' 216 ;; 217 gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) 218 if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then 219 : 220 else 221 ld_shlibs=no 222 fi 223 ;; 224 netbsd*) 225 ;; 226 solaris*) 227 if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then 228 ld_shlibs=no 229 elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then 230 : 231 else 232 ld_shlibs=no 233 fi 234 ;; 235 sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) 236 case `$LD -v 2>&1` in 237 *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) 238 ld_shlibs=no 239 ;; 240 *) 241 if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then 242 hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' 243 else 244 ld_shlibs=no 245 fi 246 ;; 247 esac 248 ;; 249 sunos4*) 250 hardcode_direct=yes 251 ;; 252 *) 253 if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then 254 : 255 else 256 ld_shlibs=no 257 fi 258 ;; 259 esac 260 if test "$ld_shlibs" = no; then 261 hardcode_libdir_flag_spec= 262 fi 263else 264 case "$host_os" in 265 aix3*) 266 # Note: this linker hardcodes the directories in LIBPATH if there 267 # are no directories specified by -L. 268 hardcode_minus_L=yes 269 if test "$GCC" = yes; then 270 # Neither direct hardcoding nor static linking is supported with a 271 # broken collect2. 272 hardcode_direct=unsupported 273 fi 274 ;; 275 aix[4-9]*) 276 if test "$host_cpu" = ia64; then 277 # On IA64, the linker does run time linking by default, so we don't 278 # have to do anything special. 279 aix_use_runtimelinking=no 280 else 281 aix_use_runtimelinking=no 282 # Test if we are trying to use run time linking or normal 283 # AIX style linking. If -brtl is somewhere in LDFLAGS, we 284 # need to do runtime linking. 285 case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) 286 for ld_flag in $LDFLAGS; do 287 if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then 288 aix_use_runtimelinking=yes 289 break 290 fi 291 done 292 ;; 293 esac 294 fi 295 hardcode_direct=yes 296 hardcode_libdir_separator=':' 297 if test "$GCC" = yes; then 298 case $host_os in aix4.[012]|aix4.[012].*) 299 collect2name=`${CC} -print-prog-name=collect2` 300 if test -f "$collect2name" && \ 301 strings "$collect2name" | grep resolve_lib_name >/dev/null 302 then 303 # We have reworked collect2 304 : 305 else 306 # We have old collect2 307 hardcode_direct=unsupported 308 hardcode_minus_L=yes 309 hardcode_libdir_flag_spec='-L$libdir' 310 hardcode_libdir_separator= 311 fi 312 ;; 313 esac 314 fi 315 # Begin _LT_AC_SYS_LIBPATH_AIX. 316 echo 'int main () { return 0; }' > conftest.c 317 ${CC} ${LDFLAGS} conftest.c -o conftest 318 aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } 319}'` 320 if test -z "$aix_libpath"; then 321 aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } 322}'` 323 fi 324 if test -z "$aix_libpath"; then 325 aix_libpath="/usr/lib:/lib" 326 fi 327 rm -f conftest.c conftest 328 # End _LT_AC_SYS_LIBPATH_AIX. 329 if test "$aix_use_runtimelinking" = yes; then 330 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" 331 else 332 if test "$host_cpu" = ia64; then 333 hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' 334 else 335 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" 336 fi 337 fi 338 ;; 339 amigaos*) 340 case "$host_cpu" in 341 powerpc) 342 ;; 343 m68k) 344 hardcode_libdir_flag_spec='-L$libdir' 345 hardcode_minus_L=yes 346 ;; 347 esac 348 ;; 349 bsdi[45]*) 350 ;; 351 cygwin* | mingw* | pw32* | cegcc*) 352 # When not using gcc, we currently assume that we are using 353 # Microsoft Visual C++. 354 # hardcode_libdir_flag_spec is actually meaningless, as there is 355 # no search path for DLLs. 356 hardcode_libdir_flag_spec=' ' 357 libext=lib 358 ;; 359 darwin* | rhapsody*) 360 hardcode_direct=no 361 if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then 362 : 363 else 364 ld_shlibs=no 365 fi 366 ;; 367 dgux*) 368 hardcode_libdir_flag_spec='-L$libdir' 369 ;; 370 freebsd2.[01]*) 371 hardcode_direct=yes 372 hardcode_minus_L=yes 373 ;; 374 freebsd* | dragonfly*) 375 hardcode_libdir_flag_spec='-R$libdir' 376 hardcode_direct=yes 377 ;; 378 hpux9*) 379 hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' 380 hardcode_libdir_separator=: 381 hardcode_direct=yes 382 # hardcode_minus_L: Not really in the search PATH, 383 # but as the default location of the library. 384 hardcode_minus_L=yes 385 ;; 386 hpux10*) 387 if test "$with_gnu_ld" = no; then 388 hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' 389 hardcode_libdir_separator=: 390 hardcode_direct=yes 391 # hardcode_minus_L: Not really in the search PATH, 392 # but as the default location of the library. 393 hardcode_minus_L=yes 394 fi 395 ;; 396 hpux11*) 397 if test "$with_gnu_ld" = no; then 398 hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' 399 hardcode_libdir_separator=: 400 case $host_cpu in 401 hppa*64*|ia64*) 402 hardcode_direct=no 403 ;; 404 *) 405 hardcode_direct=yes 406 # hardcode_minus_L: Not really in the search PATH, 407 # but as the default location of the library. 408 hardcode_minus_L=yes 409 ;; 410 esac 411 fi 412 ;; 413 irix5* | irix6* | nonstopux*) 414 hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' 415 hardcode_libdir_separator=: 416 ;; 417 netbsd*) 418 hardcode_libdir_flag_spec='-R$libdir' 419 hardcode_direct=yes 420 ;; 421 newsos6) 422 hardcode_direct=yes 423 hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' 424 hardcode_libdir_separator=: 425 ;; 426 *nto* | *qnx*) 427 ;; 428 openbsd*) 429 if test -f /usr/libexec/ld.so; then 430 hardcode_direct=yes 431 if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then 432 hardcode_libdir_flag_spec='${wl}-rpath,$libdir' 433 else 434 case "$host_os" in 435 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) 436 hardcode_libdir_flag_spec='-R$libdir' 437 ;; 438 *) 439 hardcode_libdir_flag_spec='${wl}-rpath,$libdir' 440 ;; 441 esac 442 fi 443 else 444 ld_shlibs=no 445 fi 446 ;; 447 os2*) 448 hardcode_libdir_flag_spec='-L$libdir' 449 hardcode_minus_L=yes 450 ;; 451 osf3*) 452 hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' 453 hardcode_libdir_separator=: 454 ;; 455 osf4* | osf5*) 456 if test "$GCC" = yes; then 457 hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' 458 else 459 # Both cc and cxx compiler support -rpath directly 460 hardcode_libdir_flag_spec='-rpath $libdir' 461 fi 462 hardcode_libdir_separator=: 463 ;; 464 solaris*) 465 hardcode_libdir_flag_spec='-R$libdir' 466 ;; 467 sunos4*) 468 hardcode_libdir_flag_spec='-L$libdir' 469 hardcode_direct=yes 470 hardcode_minus_L=yes 471 ;; 472 sysv4) 473 case $host_vendor in 474 sni) 475 hardcode_direct=yes # is this really true??? 476 ;; 477 siemens) 478 hardcode_direct=no 479 ;; 480 motorola) 481 hardcode_direct=no #Motorola manual says yes, but my tests say they lie 482 ;; 483 esac 484 ;; 485 sysv4.3*) 486 ;; 487 sysv4*MP*) 488 if test -d /usr/nec; then 489 ld_shlibs=yes 490 fi 491 ;; 492 sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) 493 ;; 494 sysv5* | sco3.2v5* | sco5v6*) 495 hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' 496 hardcode_libdir_separator=':' 497 ;; 498 uts4*) 499 hardcode_libdir_flag_spec='-L$libdir' 500 ;; 501 *) 502 ld_shlibs=no 503 ;; 504 esac 505fi 506 507# Check dynamic linker characteristics 508# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. 509# Unlike libtool.m4, here we don't care about _all_ names of the library, but 510# only about the one the linker finds when passed -lNAME. This is the last 511# element of library_names_spec in libtool.m4, or possibly two of them if the 512# linker has special search rules. 513library_names_spec= # the last element of library_names_spec in libtool.m4 514libname_spec='lib$name' 515case "$host_os" in 516 aix3*) 517 library_names_spec='$libname.a' 518 ;; 519 aix[4-9]*) 520 library_names_spec='$libname$shrext' 521 ;; 522 amigaos*) 523 case "$host_cpu" in 524 powerpc*) 525 library_names_spec='$libname$shrext' ;; 526 m68k) 527 library_names_spec='$libname.a' ;; 528 esac 529 ;; 530 beos*) 531 library_names_spec='$libname$shrext' 532 ;; 533 bsdi[45]*) 534 library_names_spec='$libname$shrext' 535 ;; 536 cygwin* | mingw* | pw32* | cegcc*) 537 shrext=.dll 538 library_names_spec='$libname.dll.a $libname.lib' 539 ;; 540 darwin* | rhapsody*) 541 shrext=.dylib 542 library_names_spec='$libname$shrext' 543 ;; 544 dgux*) 545 library_names_spec='$libname$shrext' 546 ;; 547 freebsd[23].*) 548 library_names_spec='$libname$shrext$versuffix' 549 ;; 550 freebsd* | dragonfly*) 551 library_names_spec='$libname$shrext' 552 ;; 553 gnu*) 554 library_names_spec='$libname$shrext' 555 ;; 556 haiku*) 557 library_names_spec='$libname$shrext' 558 ;; 559 hpux9* | hpux10* | hpux11*) 560 case $host_cpu in 561 ia64*) 562 shrext=.so 563 ;; 564 hppa*64*) 565 shrext=.sl 566 ;; 567 *) 568 shrext=.sl 569 ;; 570 esac 571 library_names_spec='$libname$shrext' 572 ;; 573 interix[3-9]*) 574 library_names_spec='$libname$shrext' 575 ;; 576 irix5* | irix6* | nonstopux*) 577 library_names_spec='$libname$shrext' 578 case "$host_os" in 579 irix5* | nonstopux*) 580 libsuff= shlibsuff= 581 ;; 582 *) 583 case $LD in 584 *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; 585 *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; 586 *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; 587 *) libsuff= shlibsuff= ;; 588 esac 589 ;; 590 esac 591 ;; 592 linux*oldld* | linux*aout* | linux*coff*) 593 ;; 594 linux* | k*bsd*-gnu | kopensolaris*-gnu) 595 library_names_spec='$libname$shrext' 596 ;; 597 knetbsd*-gnu) 598 library_names_spec='$libname$shrext' 599 ;; 600 netbsd*) 601 library_names_spec='$libname$shrext' 602 ;; 603 newsos6) 604 library_names_spec='$libname$shrext' 605 ;; 606 *nto* | *qnx*) 607 library_names_spec='$libname$shrext' 608 ;; 609 openbsd*) 610 library_names_spec='$libname$shrext$versuffix' 611 ;; 612 os2*) 613 libname_spec='$name' 614 shrext=.dll 615 library_names_spec='$libname.a' 616 ;; 617 osf3* | osf4* | osf5*) 618 library_names_spec='$libname$shrext' 619 ;; 620 rdos*) 621 ;; 622 solaris*) 623 library_names_spec='$libname$shrext' 624 ;; 625 sunos4*) 626 library_names_spec='$libname$shrext$versuffix' 627 ;; 628 sysv4 | sysv4.3*) 629 library_names_spec='$libname$shrext' 630 ;; 631 sysv4*MP*) 632 library_names_spec='$libname$shrext' 633 ;; 634 sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) 635 library_names_spec='$libname$shrext' 636 ;; 637 tpf*) 638 library_names_spec='$libname$shrext' 639 ;; 640 uts4*) 641 library_names_spec='$libname$shrext' 642 ;; 643esac 644 645sed_quote_subst='s/\(["`$\\]\)/\\\1/g' 646escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` 647shlibext=`echo "$shrext" | sed -e 's,^\.,,'` 648escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` 649escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` 650escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` 651 652LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF 653 654# How to pass a linker flag through the compiler. 655wl="$escaped_wl" 656 657# Static library suffix (normally "a"). 658libext="$libext" 659 660# Shared library suffix (normally "so"). 661shlibext="$shlibext" 662 663# Format of library name prefix. 664libname_spec="$escaped_libname_spec" 665 666# Library names that the linker finds when passed -lNAME. 667library_names_spec="$escaped_library_names_spec" 668 669# Flag to hardcode \$libdir into a binary during linking. 670# This must work even if \$libdir does not exist. 671hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" 672 673# Whether we need a single -rpath flag with a separated argument. 674hardcode_libdir_separator="$hardcode_libdir_separator" 675 676# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the 677# resulting binary. 678hardcode_direct="$hardcode_direct" 679 680# Set to yes if using the -LDIR flag during linking hardcodes DIR into the 681# resulting binary. 682hardcode_minus_L="$hardcode_minus_L" 683 684EOF 685