1*735d6239SKiyoung Kim 2*735d6239SKiyoung Kim# libtool (GNU libtool) 2.4 3*735d6239SKiyoung Kim# Written by Gordon Matzigkeit <[email protected]>, 1996 4*735d6239SKiyoung Kim 5*735d6239SKiyoung Kim# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 6*735d6239SKiyoung Kim# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 7*735d6239SKiyoung Kim# This is free software; see the source for copying conditions. There is NO 8*735d6239SKiyoung Kim# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9*735d6239SKiyoung Kim 10*735d6239SKiyoung Kim# GNU Libtool is free software; you can redistribute it and/or modify 11*735d6239SKiyoung Kim# it under the terms of the GNU General Public License as published by 12*735d6239SKiyoung Kim# the Free Software Foundation; either version 2 of the License, or 13*735d6239SKiyoung Kim# (at your option) any later version. 14*735d6239SKiyoung Kim# 15*735d6239SKiyoung Kim# As a special exception to the GNU General Public License, 16*735d6239SKiyoung Kim# if you distribute this file as part of a program or library that 17*735d6239SKiyoung Kim# is built using GNU Libtool, you may include this file under the 18*735d6239SKiyoung Kim# same distribution terms that you use for the rest of that program. 19*735d6239SKiyoung Kim# 20*735d6239SKiyoung Kim# GNU Libtool is distributed in the hope that it will be useful, but 21*735d6239SKiyoung Kim# WITHOUT ANY WARRANTY; without even the implied warranty of 22*735d6239SKiyoung Kim# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23*735d6239SKiyoung Kim# General Public License for more details. 24*735d6239SKiyoung Kim# 25*735d6239SKiyoung Kim# You should have received a copy of the GNU General Public License 26*735d6239SKiyoung Kim# along with GNU Libtool; see the file COPYING. If not, a copy 27*735d6239SKiyoung Kim# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28*735d6239SKiyoung Kim# or obtained by writing to the Free Software Foundation, Inc., 29*735d6239SKiyoung Kim# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30*735d6239SKiyoung Kim 31*735d6239SKiyoung Kim# Usage: $progname [OPTION]... [MODE-ARG]... 32*735d6239SKiyoung Kim# 33*735d6239SKiyoung Kim# Provide generalized library-building support services. 34*735d6239SKiyoung Kim# 35*735d6239SKiyoung Kim# --config show all configuration variables 36*735d6239SKiyoung Kim# --debug enable verbose shell tracing 37*735d6239SKiyoung Kim# -n, --dry-run display commands without modifying any files 38*735d6239SKiyoung Kim# --features display basic configuration information and exit 39*735d6239SKiyoung Kim# --mode=MODE use operation mode MODE 40*735d6239SKiyoung Kim# --preserve-dup-deps don't remove duplicate dependency libraries 41*735d6239SKiyoung Kim# --quiet, --silent don't print informational messages 42*735d6239SKiyoung Kim# --no-quiet, --no-silent 43*735d6239SKiyoung Kim# print informational messages (default) 44*735d6239SKiyoung Kim# --tag=TAG use configuration variables from tag TAG 45*735d6239SKiyoung Kim# -v, --verbose print more informational messages than default 46*735d6239SKiyoung Kim# --no-verbose don't print the extra informational messages 47*735d6239SKiyoung Kim# --version print version information 48*735d6239SKiyoung Kim# -h, --help, --help-all print short, long, or detailed help message 49*735d6239SKiyoung Kim# 50*735d6239SKiyoung Kim# MODE must be one of the following: 51*735d6239SKiyoung Kim# 52*735d6239SKiyoung Kim# clean remove files from the build directory 53*735d6239SKiyoung Kim# compile compile a source file into a libtool object 54*735d6239SKiyoung Kim# execute automatically set library path, then run a program 55*735d6239SKiyoung Kim# finish complete the installation of libtool libraries 56*735d6239SKiyoung Kim# install install libraries or executables 57*735d6239SKiyoung Kim# link create a library or an executable 58*735d6239SKiyoung Kim# uninstall remove libraries from an installed directory 59*735d6239SKiyoung Kim# 60*735d6239SKiyoung Kim# MODE-ARGS vary depending on the MODE. When passed as first option, 61*735d6239SKiyoung Kim# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 62*735d6239SKiyoung Kim# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 63*735d6239SKiyoung Kim# 64*735d6239SKiyoung Kim# When reporting a bug, please describe a test case to reproduce it and 65*735d6239SKiyoung Kim# include the following information: 66*735d6239SKiyoung Kim# 67*735d6239SKiyoung Kim# host-triplet: $host 68*735d6239SKiyoung Kim# shell: $SHELL 69*735d6239SKiyoung Kim# compiler: $LTCC 70*735d6239SKiyoung Kim# compiler flags: $LTCFLAGS 71*735d6239SKiyoung Kim# linker: $LD (gnu? $with_gnu_ld) 72*735d6239SKiyoung Kim# $progname: (GNU libtool) 2.4 73*735d6239SKiyoung Kim# automake: $automake_version 74*735d6239SKiyoung Kim# autoconf: $autoconf_version 75*735d6239SKiyoung Kim# 76*735d6239SKiyoung Kim# Report bugs to <[email protected]>. 77*735d6239SKiyoung Kim# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 78*735d6239SKiyoung Kim# General help using GNU software: <http://www.gnu.org/gethelp/>. 79*735d6239SKiyoung Kim 80*735d6239SKiyoung KimPROGRAM=libtool 81*735d6239SKiyoung KimPACKAGE=libtool 82*735d6239SKiyoung KimVERSION=2.4 83*735d6239SKiyoung KimTIMESTAMP="" 84*735d6239SKiyoung Kimpackage_revision=1.3293 85*735d6239SKiyoung Kim 86*735d6239SKiyoung Kim# define SED for historic ltconfig's generated by Libtool 1.3 87*735d6239SKiyoung Kimtest -z "$SED" && SED=sed 88*735d6239SKiyoung Kim 89*735d6239SKiyoung Kim# Be Bourne compatible 90*735d6239SKiyoung Kimif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 91*735d6239SKiyoung Kim emulate sh 92*735d6239SKiyoung Kim NULLCMD=: 93*735d6239SKiyoung Kim # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 94*735d6239SKiyoung Kim # is contrary to our usage. Disable this feature. 95*735d6239SKiyoung Kim alias -g '${1+"$@"}'='"$@"' 96*735d6239SKiyoung Kim setopt NO_GLOB_SUBST 97*735d6239SKiyoung Kimelse 98*735d6239SKiyoung Kim case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 99*735d6239SKiyoung Kimfi 100*735d6239SKiyoung KimBIN_SH=xpg4; export BIN_SH # for Tru64 101*735d6239SKiyoung KimDUALCASE=1; export DUALCASE # for MKS sh 102*735d6239SKiyoung Kim 103*735d6239SKiyoung Kim# A function that is used when there is no print builtin or printf. 104*735d6239SKiyoung Kimfunc_fallback_echo () 105*735d6239SKiyoung Kim{ 106*735d6239SKiyoung Kim eval 'cat <<_LTECHO_EOF 107*735d6239SKiyoung Kim$1 108*735d6239SKiyoung Kim_LTECHO_EOF' 109*735d6239SKiyoung Kim} 110*735d6239SKiyoung Kim 111*735d6239SKiyoung Kim# NLS nuisances: We save the old values to restore during execute mode. 112*735d6239SKiyoung Kimlt_user_locale= 113*735d6239SKiyoung Kimlt_safe_locale= 114*735d6239SKiyoung Kimfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 115*735d6239SKiyoung Kimdo 116*735d6239SKiyoung Kim eval "if test \"\${$lt_var+set}\" = set; then 117*735d6239SKiyoung Kim save_$lt_var=\$$lt_var 118*735d6239SKiyoung Kim $lt_var=C 119*735d6239SKiyoung Kim export $lt_var 120*735d6239SKiyoung Kim lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 121*735d6239SKiyoung Kim lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 122*735d6239SKiyoung Kim fi" 123*735d6239SKiyoung Kimdone 124*735d6239SKiyoung KimLC_ALL=C 125*735d6239SKiyoung KimLANGUAGE=C 126*735d6239SKiyoung Kimexport LANGUAGE LC_ALL 127*735d6239SKiyoung Kim 128*735d6239SKiyoung Kim$lt_unset CDPATH 129*735d6239SKiyoung Kim 130*735d6239SKiyoung Kim 131*735d6239SKiyoung Kim# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 132*735d6239SKiyoung Kim# is ksh but when the shell is invoked as "sh" and the current value of 133*735d6239SKiyoung Kim# the _XPG environment variable is not equal to 1 (one), the special 134*735d6239SKiyoung Kim# positional parameter $0, within a function call, is the name of the 135*735d6239SKiyoung Kim# function. 136*735d6239SKiyoung Kimprogpath="$0" 137*735d6239SKiyoung Kim 138*735d6239SKiyoung Kim 139*735d6239SKiyoung Kim 140*735d6239SKiyoung Kim: ${CP="cp -f"} 141*735d6239SKiyoung Kimtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 142*735d6239SKiyoung Kim: ${EGREP="/bin/grep -E"} 143*735d6239SKiyoung Kim: ${FGREP="/bin/grep -F"} 144*735d6239SKiyoung Kim: ${GREP="/bin/grep"} 145*735d6239SKiyoung Kim: ${LN_S="ln -s"} 146*735d6239SKiyoung Kim: ${MAKE="make"} 147*735d6239SKiyoung Kim: ${MKDIR="mkdir"} 148*735d6239SKiyoung Kim: ${MV="mv -f"} 149*735d6239SKiyoung Kim: ${RM="rm -f"} 150*735d6239SKiyoung Kim: ${SED="/bin/sed"} 151*735d6239SKiyoung Kim: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 152*735d6239SKiyoung Kim: ${Xsed="$SED -e 1s/^X//"} 153*735d6239SKiyoung Kim 154*735d6239SKiyoung Kim# Global variables: 155*735d6239SKiyoung KimEXIT_SUCCESS=0 156*735d6239SKiyoung KimEXIT_FAILURE=1 157*735d6239SKiyoung KimEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 158*735d6239SKiyoung KimEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 159*735d6239SKiyoung Kim 160*735d6239SKiyoung Kimexit_status=$EXIT_SUCCESS 161*735d6239SKiyoung Kim 162*735d6239SKiyoung Kim# Make sure IFS has a sensible default 163*735d6239SKiyoung Kimlt_nl=' 164*735d6239SKiyoung Kim' 165*735d6239SKiyoung KimIFS=" $lt_nl" 166*735d6239SKiyoung Kim 167*735d6239SKiyoung Kimdirname="s,/[^/]*$,," 168*735d6239SKiyoung Kimbasename="s,^.*/,," 169*735d6239SKiyoung Kim 170*735d6239SKiyoung Kim# func_dirname file append nondir_replacement 171*735d6239SKiyoung Kim# Compute the dirname of FILE. If nonempty, add APPEND to the result, 172*735d6239SKiyoung Kim# otherwise set result to NONDIR_REPLACEMENT. 173*735d6239SKiyoung Kimfunc_dirname () 174*735d6239SKiyoung Kim{ 175*735d6239SKiyoung Kim func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 176*735d6239SKiyoung Kim if test "X$func_dirname_result" = "X${1}"; then 177*735d6239SKiyoung Kim func_dirname_result="${3}" 178*735d6239SKiyoung Kim else 179*735d6239SKiyoung Kim func_dirname_result="$func_dirname_result${2}" 180*735d6239SKiyoung Kim fi 181*735d6239SKiyoung Kim} # func_dirname may be replaced by extended shell implementation 182*735d6239SKiyoung Kim 183*735d6239SKiyoung Kim 184*735d6239SKiyoung Kim# func_basename file 185*735d6239SKiyoung Kimfunc_basename () 186*735d6239SKiyoung Kim{ 187*735d6239SKiyoung Kim func_basename_result=`$ECHO "${1}" | $SED "$basename"` 188*735d6239SKiyoung Kim} # func_basename may be replaced by extended shell implementation 189*735d6239SKiyoung Kim 190*735d6239SKiyoung Kim 191*735d6239SKiyoung Kim# func_dirname_and_basename file append nondir_replacement 192*735d6239SKiyoung Kim# perform func_basename and func_dirname in a single function 193*735d6239SKiyoung Kim# call: 194*735d6239SKiyoung Kim# dirname: Compute the dirname of FILE. If nonempty, 195*735d6239SKiyoung Kim# add APPEND to the result, otherwise set result 196*735d6239SKiyoung Kim# to NONDIR_REPLACEMENT. 197*735d6239SKiyoung Kim# value returned in "$func_dirname_result" 198*735d6239SKiyoung Kim# basename: Compute filename of FILE. 199*735d6239SKiyoung Kim# value retuned in "$func_basename_result" 200*735d6239SKiyoung Kim# Implementation must be kept synchronized with func_dirname 201*735d6239SKiyoung Kim# and func_basename. For efficiency, we do not delegate to 202*735d6239SKiyoung Kim# those functions but instead duplicate the functionality here. 203*735d6239SKiyoung Kimfunc_dirname_and_basename () 204*735d6239SKiyoung Kim{ 205*735d6239SKiyoung Kim # Extract subdirectory from the argument. 206*735d6239SKiyoung Kim func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 207*735d6239SKiyoung Kim if test "X$func_dirname_result" = "X${1}"; then 208*735d6239SKiyoung Kim func_dirname_result="${3}" 209*735d6239SKiyoung Kim else 210*735d6239SKiyoung Kim func_dirname_result="$func_dirname_result${2}" 211*735d6239SKiyoung Kim fi 212*735d6239SKiyoung Kim func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 213*735d6239SKiyoung Kim} # func_dirname_and_basename may be replaced by extended shell implementation 214*735d6239SKiyoung Kim 215*735d6239SKiyoung Kim 216*735d6239SKiyoung Kim# func_stripname prefix suffix name 217*735d6239SKiyoung Kim# strip PREFIX and SUFFIX off of NAME. 218*735d6239SKiyoung Kim# PREFIX and SUFFIX must not contain globbing or regex special 219*735d6239SKiyoung Kim# characters, hashes, percent signs, but SUFFIX may contain a leading 220*735d6239SKiyoung Kim# dot (in which case that matches only a dot). 221*735d6239SKiyoung Kim# func_strip_suffix prefix name 222*735d6239SKiyoung Kimfunc_stripname () 223*735d6239SKiyoung Kim{ 224*735d6239SKiyoung Kim case ${2} in 225*735d6239SKiyoung Kim .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 226*735d6239SKiyoung Kim *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 227*735d6239SKiyoung Kim esac 228*735d6239SKiyoung Kim} # func_stripname may be replaced by extended shell implementation 229*735d6239SKiyoung Kim 230*735d6239SKiyoung Kim 231*735d6239SKiyoung Kim# These SED scripts presuppose an absolute path with a trailing slash. 232*735d6239SKiyoung Kimpathcar='s,^/\([^/]*\).*$,\1,' 233*735d6239SKiyoung Kimpathcdr='s,^/[^/]*,,' 234*735d6239SKiyoung Kimremovedotparts=':dotsl 235*735d6239SKiyoung Kim s@/\./@/@g 236*735d6239SKiyoung Kim t dotsl 237*735d6239SKiyoung Kim s,/\.$,/,' 238*735d6239SKiyoung Kimcollapseslashes='s@/\{1,\}@/@g' 239*735d6239SKiyoung Kimfinalslash='s,/*$,/,' 240*735d6239SKiyoung Kim 241*735d6239SKiyoung Kim# func_normal_abspath PATH 242*735d6239SKiyoung Kim# Remove doubled-up and trailing slashes, "." path components, 243*735d6239SKiyoung Kim# and cancel out any ".." path components in PATH after making 244*735d6239SKiyoung Kim# it an absolute path. 245*735d6239SKiyoung Kim# value returned in "$func_normal_abspath_result" 246*735d6239SKiyoung Kimfunc_normal_abspath () 247*735d6239SKiyoung Kim{ 248*735d6239SKiyoung Kim # Start from root dir and reassemble the path. 249*735d6239SKiyoung Kim func_normal_abspath_result= 250*735d6239SKiyoung Kim func_normal_abspath_tpath=$1 251*735d6239SKiyoung Kim func_normal_abspath_altnamespace= 252*735d6239SKiyoung Kim case $func_normal_abspath_tpath in 253*735d6239SKiyoung Kim "") 254*735d6239SKiyoung Kim # Empty path, that just means $cwd. 255*735d6239SKiyoung Kim func_stripname '' '/' "`pwd`" 256*735d6239SKiyoung Kim func_normal_abspath_result=$func_stripname_result 257*735d6239SKiyoung Kim return 258*735d6239SKiyoung Kim ;; 259*735d6239SKiyoung Kim # The next three entries are used to spot a run of precisely 260*735d6239SKiyoung Kim # two leading slashes without using negated character classes; 261*735d6239SKiyoung Kim # we take advantage of case's first-match behaviour. 262*735d6239SKiyoung Kim ///*) 263*735d6239SKiyoung Kim # Unusual form of absolute path, do nothing. 264*735d6239SKiyoung Kim ;; 265*735d6239SKiyoung Kim //*) 266*735d6239SKiyoung Kim # Not necessarily an ordinary path; POSIX reserves leading '//' 267*735d6239SKiyoung Kim # and for example Cygwin uses it to access remote file shares 268*735d6239SKiyoung Kim # over CIFS/SMB, so we conserve a leading double slash if found. 269*735d6239SKiyoung Kim func_normal_abspath_altnamespace=/ 270*735d6239SKiyoung Kim ;; 271*735d6239SKiyoung Kim /*) 272*735d6239SKiyoung Kim # Absolute path, do nothing. 273*735d6239SKiyoung Kim ;; 274*735d6239SKiyoung Kim *) 275*735d6239SKiyoung Kim # Relative path, prepend $cwd. 276*735d6239SKiyoung Kim func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 277*735d6239SKiyoung Kim ;; 278*735d6239SKiyoung Kim esac 279*735d6239SKiyoung Kim # Cancel out all the simple stuff to save iterations. We also want 280*735d6239SKiyoung Kim # the path to end with a slash for ease of parsing, so make sure 281*735d6239SKiyoung Kim # there is one (and only one) here. 282*735d6239SKiyoung Kim func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 283*735d6239SKiyoung Kim -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 284*735d6239SKiyoung Kim while :; do 285*735d6239SKiyoung Kim # Processed it all yet? 286*735d6239SKiyoung Kim if test "$func_normal_abspath_tpath" = / ; then 287*735d6239SKiyoung Kim # If we ascended to the root using ".." the result may be empty now. 288*735d6239SKiyoung Kim if test -z "$func_normal_abspath_result" ; then 289*735d6239SKiyoung Kim func_normal_abspath_result=/ 290*735d6239SKiyoung Kim fi 291*735d6239SKiyoung Kim break 292*735d6239SKiyoung Kim fi 293*735d6239SKiyoung Kim func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 294*735d6239SKiyoung Kim -e "$pathcar"` 295*735d6239SKiyoung Kim func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 296*735d6239SKiyoung Kim -e "$pathcdr"` 297*735d6239SKiyoung Kim # Figure out what to do with it 298*735d6239SKiyoung Kim case $func_normal_abspath_tcomponent in 299*735d6239SKiyoung Kim "") 300*735d6239SKiyoung Kim # Trailing empty path component, ignore it. 301*735d6239SKiyoung Kim ;; 302*735d6239SKiyoung Kim ..) 303*735d6239SKiyoung Kim # Parent dir; strip last assembled component from result. 304*735d6239SKiyoung Kim func_dirname "$func_normal_abspath_result" 305*735d6239SKiyoung Kim func_normal_abspath_result=$func_dirname_result 306*735d6239SKiyoung Kim ;; 307*735d6239SKiyoung Kim *) 308*735d6239SKiyoung Kim # Actual path component, append it. 309*735d6239SKiyoung Kim func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 310*735d6239SKiyoung Kim ;; 311*735d6239SKiyoung Kim esac 312*735d6239SKiyoung Kim done 313*735d6239SKiyoung Kim # Restore leading double-slash if one was found on entry. 314*735d6239SKiyoung Kim func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 315*735d6239SKiyoung Kim} 316*735d6239SKiyoung Kim 317*735d6239SKiyoung Kim# func_relative_path SRCDIR DSTDIR 318*735d6239SKiyoung Kim# generates a relative path from SRCDIR to DSTDIR, with a trailing 319*735d6239SKiyoung Kim# slash if non-empty, suitable for immediately appending a filename 320*735d6239SKiyoung Kim# without needing to append a separator. 321*735d6239SKiyoung Kim# value returned in "$func_relative_path_result" 322*735d6239SKiyoung Kimfunc_relative_path () 323*735d6239SKiyoung Kim{ 324*735d6239SKiyoung Kim func_relative_path_result= 325*735d6239SKiyoung Kim func_normal_abspath "$1" 326*735d6239SKiyoung Kim func_relative_path_tlibdir=$func_normal_abspath_result 327*735d6239SKiyoung Kim func_normal_abspath "$2" 328*735d6239SKiyoung Kim func_relative_path_tbindir=$func_normal_abspath_result 329*735d6239SKiyoung Kim 330*735d6239SKiyoung Kim # Ascend the tree starting from libdir 331*735d6239SKiyoung Kim while :; do 332*735d6239SKiyoung Kim # check if we have found a prefix of bindir 333*735d6239SKiyoung Kim case $func_relative_path_tbindir in 334*735d6239SKiyoung Kim $func_relative_path_tlibdir) 335*735d6239SKiyoung Kim # found an exact match 336*735d6239SKiyoung Kim func_relative_path_tcancelled= 337*735d6239SKiyoung Kim break 338*735d6239SKiyoung Kim ;; 339*735d6239SKiyoung Kim $func_relative_path_tlibdir*) 340*735d6239SKiyoung Kim # found a matching prefix 341*735d6239SKiyoung Kim func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 342*735d6239SKiyoung Kim func_relative_path_tcancelled=$func_stripname_result 343*735d6239SKiyoung Kim if test -z "$func_relative_path_result"; then 344*735d6239SKiyoung Kim func_relative_path_result=. 345*735d6239SKiyoung Kim fi 346*735d6239SKiyoung Kim break 347*735d6239SKiyoung Kim ;; 348*735d6239SKiyoung Kim *) 349*735d6239SKiyoung Kim func_dirname $func_relative_path_tlibdir 350*735d6239SKiyoung Kim func_relative_path_tlibdir=${func_dirname_result} 351*735d6239SKiyoung Kim if test "x$func_relative_path_tlibdir" = x ; then 352*735d6239SKiyoung Kim # Have to descend all the way to the root! 353*735d6239SKiyoung Kim func_relative_path_result=../$func_relative_path_result 354*735d6239SKiyoung Kim func_relative_path_tcancelled=$func_relative_path_tbindir 355*735d6239SKiyoung Kim break 356*735d6239SKiyoung Kim fi 357*735d6239SKiyoung Kim func_relative_path_result=../$func_relative_path_result 358*735d6239SKiyoung Kim ;; 359*735d6239SKiyoung Kim esac 360*735d6239SKiyoung Kim done 361*735d6239SKiyoung Kim 362*735d6239SKiyoung Kim # Now calculate path; take care to avoid doubling-up slashes. 363*735d6239SKiyoung Kim func_stripname '' '/' "$func_relative_path_result" 364*735d6239SKiyoung Kim func_relative_path_result=$func_stripname_result 365*735d6239SKiyoung Kim func_stripname '/' '/' "$func_relative_path_tcancelled" 366*735d6239SKiyoung Kim if test "x$func_stripname_result" != x ; then 367*735d6239SKiyoung Kim func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 368*735d6239SKiyoung Kim fi 369*735d6239SKiyoung Kim 370*735d6239SKiyoung Kim # Normalisation. If bindir is libdir, return empty string, 371*735d6239SKiyoung Kim # else relative path ending with a slash; either way, target 372*735d6239SKiyoung Kim # file name can be directly appended. 373*735d6239SKiyoung Kim if test ! -z "$func_relative_path_result"; then 374*735d6239SKiyoung Kim func_stripname './' '' "$func_relative_path_result/" 375*735d6239SKiyoung Kim func_relative_path_result=$func_stripname_result 376*735d6239SKiyoung Kim fi 377*735d6239SKiyoung Kim} 378*735d6239SKiyoung Kim 379*735d6239SKiyoung Kim# The name of this program: 380*735d6239SKiyoung Kimfunc_dirname_and_basename "$progpath" 381*735d6239SKiyoung Kimprogname=$func_basename_result 382*735d6239SKiyoung Kim 383*735d6239SKiyoung Kim# Make sure we have an absolute path for reexecution: 384*735d6239SKiyoung Kimcase $progpath in 385*735d6239SKiyoung Kim [\\/]*|[A-Za-z]:\\*) ;; 386*735d6239SKiyoung Kim *[\\/]*) 387*735d6239SKiyoung Kim progdir=$func_dirname_result 388*735d6239SKiyoung Kim progdir=`cd "$progdir" && pwd` 389*735d6239SKiyoung Kim progpath="$progdir/$progname" 390*735d6239SKiyoung Kim ;; 391*735d6239SKiyoung Kim *) 392*735d6239SKiyoung Kim save_IFS="$IFS" 393*735d6239SKiyoung Kim IFS=: 394*735d6239SKiyoung Kim for progdir in $PATH; do 395*735d6239SKiyoung Kim IFS="$save_IFS" 396*735d6239SKiyoung Kim test -x "$progdir/$progname" && break 397*735d6239SKiyoung Kim done 398*735d6239SKiyoung Kim IFS="$save_IFS" 399*735d6239SKiyoung Kim test -n "$progdir" || progdir=`pwd` 400*735d6239SKiyoung Kim progpath="$progdir/$progname" 401*735d6239SKiyoung Kim ;; 402*735d6239SKiyoung Kimesac 403*735d6239SKiyoung Kim 404*735d6239SKiyoung Kim# Sed substitution that helps us do robust quoting. It backslashifies 405*735d6239SKiyoung Kim# metacharacters that are still active within double-quoted strings. 406*735d6239SKiyoung KimXsed="${SED}"' -e 1s/^X//' 407*735d6239SKiyoung Kimsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 408*735d6239SKiyoung Kim 409*735d6239SKiyoung Kim# Same as above, but do not quote variable references. 410*735d6239SKiyoung Kimdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 411*735d6239SKiyoung Kim 412*735d6239SKiyoung Kim# Sed substitution that turns a string into a regex matching for the 413*735d6239SKiyoung Kim# string literally. 414*735d6239SKiyoung Kimsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 415*735d6239SKiyoung Kim 416*735d6239SKiyoung Kim# Sed substitution that converts a w32 file name or path 417*735d6239SKiyoung Kim# which contains forward slashes, into one that contains 418*735d6239SKiyoung Kim# (escaped) backslashes. A very naive implementation. 419*735d6239SKiyoung Kimlt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 420*735d6239SKiyoung Kim 421*735d6239SKiyoung Kim# Re-`\' parameter expansions in output of double_quote_subst that were 422*735d6239SKiyoung Kim# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 423*735d6239SKiyoung Kim# in input to double_quote_subst, that '$' was protected from expansion. 424*735d6239SKiyoung Kim# Since each input `\' is now two `\'s, look for any number of runs of 425*735d6239SKiyoung Kim# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 426*735d6239SKiyoung Kimbs='\\' 427*735d6239SKiyoung Kimbs2='\\\\' 428*735d6239SKiyoung Kimbs4='\\\\\\\\' 429*735d6239SKiyoung Kimdollar='\$' 430*735d6239SKiyoung Kimsed_double_backslash="\ 431*735d6239SKiyoung Kim s/$bs4/&\\ 432*735d6239SKiyoung Kim/g 433*735d6239SKiyoung Kim s/^$bs2$dollar/$bs&/ 434*735d6239SKiyoung Kim s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 435*735d6239SKiyoung Kim s/\n//g" 436*735d6239SKiyoung Kim 437*735d6239SKiyoung Kim# Standard options: 438*735d6239SKiyoung Kimopt_dry_run=false 439*735d6239SKiyoung Kimopt_help=false 440*735d6239SKiyoung Kimopt_quiet=false 441*735d6239SKiyoung Kimopt_verbose=false 442*735d6239SKiyoung Kimopt_warning=: 443*735d6239SKiyoung Kim 444*735d6239SKiyoung Kim# func_echo arg... 445*735d6239SKiyoung Kim# Echo program name prefixed message, along with the current mode 446*735d6239SKiyoung Kim# name if it has been set yet. 447*735d6239SKiyoung Kimfunc_echo () 448*735d6239SKiyoung Kim{ 449*735d6239SKiyoung Kim $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 450*735d6239SKiyoung Kim} 451*735d6239SKiyoung Kim 452*735d6239SKiyoung Kim# func_verbose arg... 453*735d6239SKiyoung Kim# Echo program name prefixed message in verbose mode only. 454*735d6239SKiyoung Kimfunc_verbose () 455*735d6239SKiyoung Kim{ 456*735d6239SKiyoung Kim $opt_verbose && func_echo ${1+"$@"} 457*735d6239SKiyoung Kim 458*735d6239SKiyoung Kim # A bug in bash halts the script if the last line of a function 459*735d6239SKiyoung Kim # fails when set -e is in force, so we need another command to 460*735d6239SKiyoung Kim # work around that: 461*735d6239SKiyoung Kim : 462*735d6239SKiyoung Kim} 463*735d6239SKiyoung Kim 464*735d6239SKiyoung Kim# func_echo_all arg... 465*735d6239SKiyoung Kim# Invoke $ECHO with all args, space-separated. 466*735d6239SKiyoung Kimfunc_echo_all () 467*735d6239SKiyoung Kim{ 468*735d6239SKiyoung Kim $ECHO "$*" 469*735d6239SKiyoung Kim} 470*735d6239SKiyoung Kim 471*735d6239SKiyoung Kim# func_error arg... 472*735d6239SKiyoung Kim# Echo program name prefixed message to standard error. 473*735d6239SKiyoung Kimfunc_error () 474*735d6239SKiyoung Kim{ 475*735d6239SKiyoung Kim $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 476*735d6239SKiyoung Kim} 477*735d6239SKiyoung Kim 478*735d6239SKiyoung Kim# func_warning arg... 479*735d6239SKiyoung Kim# Echo program name prefixed warning message to standard error. 480*735d6239SKiyoung Kimfunc_warning () 481*735d6239SKiyoung Kim{ 482*735d6239SKiyoung Kim $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 483*735d6239SKiyoung Kim 484*735d6239SKiyoung Kim # bash bug again: 485*735d6239SKiyoung Kim : 486*735d6239SKiyoung Kim} 487*735d6239SKiyoung Kim 488*735d6239SKiyoung Kim# func_fatal_error arg... 489*735d6239SKiyoung Kim# Echo program name prefixed message to standard error, and exit. 490*735d6239SKiyoung Kimfunc_fatal_error () 491*735d6239SKiyoung Kim{ 492*735d6239SKiyoung Kim func_error ${1+"$@"} 493*735d6239SKiyoung Kim exit $EXIT_FAILURE 494*735d6239SKiyoung Kim} 495*735d6239SKiyoung Kim 496*735d6239SKiyoung Kim# func_fatal_help arg... 497*735d6239SKiyoung Kim# Echo program name prefixed message to standard error, followed by 498*735d6239SKiyoung Kim# a help hint, and exit. 499*735d6239SKiyoung Kimfunc_fatal_help () 500*735d6239SKiyoung Kim{ 501*735d6239SKiyoung Kim func_error ${1+"$@"} 502*735d6239SKiyoung Kim func_fatal_error "$help" 503*735d6239SKiyoung Kim} 504*735d6239SKiyoung Kimhelp="Try \`$progname --help' for more information." ## default 505*735d6239SKiyoung Kim 506*735d6239SKiyoung Kim 507*735d6239SKiyoung Kim# func_grep expression filename 508*735d6239SKiyoung Kim# Check whether EXPRESSION matches any line of FILENAME, without output. 509*735d6239SKiyoung Kimfunc_grep () 510*735d6239SKiyoung Kim{ 511*735d6239SKiyoung Kim $GREP "$1" "$2" >/dev/null 2>&1 512*735d6239SKiyoung Kim} 513*735d6239SKiyoung Kim 514*735d6239SKiyoung Kim 515*735d6239SKiyoung Kim# func_mkdir_p directory-path 516*735d6239SKiyoung Kim# Make sure the entire path to DIRECTORY-PATH is available. 517*735d6239SKiyoung Kimfunc_mkdir_p () 518*735d6239SKiyoung Kim{ 519*735d6239SKiyoung Kim my_directory_path="$1" 520*735d6239SKiyoung Kim my_dir_list= 521*735d6239SKiyoung Kim 522*735d6239SKiyoung Kim if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 523*735d6239SKiyoung Kim 524*735d6239SKiyoung Kim # Protect directory names starting with `-' 525*735d6239SKiyoung Kim case $my_directory_path in 526*735d6239SKiyoung Kim -*) my_directory_path="./$my_directory_path" ;; 527*735d6239SKiyoung Kim esac 528*735d6239SKiyoung Kim 529*735d6239SKiyoung Kim # While some portion of DIR does not yet exist... 530*735d6239SKiyoung Kim while test ! -d "$my_directory_path"; do 531*735d6239SKiyoung Kim # ...make a list in topmost first order. Use a colon delimited 532*735d6239SKiyoung Kim # list incase some portion of path contains whitespace. 533*735d6239SKiyoung Kim my_dir_list="$my_directory_path:$my_dir_list" 534*735d6239SKiyoung Kim 535*735d6239SKiyoung Kim # If the last portion added has no slash in it, the list is done 536*735d6239SKiyoung Kim case $my_directory_path in */*) ;; *) break ;; esac 537*735d6239SKiyoung Kim 538*735d6239SKiyoung Kim # ...otherwise throw away the child directory and loop 539*735d6239SKiyoung Kim my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 540*735d6239SKiyoung Kim done 541*735d6239SKiyoung Kim my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 542*735d6239SKiyoung Kim 543*735d6239SKiyoung Kim save_mkdir_p_IFS="$IFS"; IFS=':' 544*735d6239SKiyoung Kim for my_dir in $my_dir_list; do 545*735d6239SKiyoung Kim IFS="$save_mkdir_p_IFS" 546*735d6239SKiyoung Kim # mkdir can fail with a `File exist' error if two processes 547*735d6239SKiyoung Kim # try to create one of the directories concurrently. Don't 548*735d6239SKiyoung Kim # stop in that case! 549*735d6239SKiyoung Kim $MKDIR "$my_dir" 2>/dev/null || : 550*735d6239SKiyoung Kim done 551*735d6239SKiyoung Kim IFS="$save_mkdir_p_IFS" 552*735d6239SKiyoung Kim 553*735d6239SKiyoung Kim # Bail out if we (or some other process) failed to create a directory. 554*735d6239SKiyoung Kim test -d "$my_directory_path" || \ 555*735d6239SKiyoung Kim func_fatal_error "Failed to create \`$1'" 556*735d6239SKiyoung Kim fi 557*735d6239SKiyoung Kim} 558*735d6239SKiyoung Kim 559*735d6239SKiyoung Kim 560*735d6239SKiyoung Kim# func_mktempdir [string] 561*735d6239SKiyoung Kim# Make a temporary directory that won't clash with other running 562*735d6239SKiyoung Kim# libtool processes, and avoids race conditions if possible. If 563*735d6239SKiyoung Kim# given, STRING is the basename for that directory. 564*735d6239SKiyoung Kimfunc_mktempdir () 565*735d6239SKiyoung Kim{ 566*735d6239SKiyoung Kim my_template="${TMPDIR-/tmp}/${1-$progname}" 567*735d6239SKiyoung Kim 568*735d6239SKiyoung Kim if test "$opt_dry_run" = ":"; then 569*735d6239SKiyoung Kim # Return a directory name, but don't create it in dry-run mode 570*735d6239SKiyoung Kim my_tmpdir="${my_template}-$$" 571*735d6239SKiyoung Kim else 572*735d6239SKiyoung Kim 573*735d6239SKiyoung Kim # If mktemp works, use that first and foremost 574*735d6239SKiyoung Kim my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 575*735d6239SKiyoung Kim 576*735d6239SKiyoung Kim if test ! -d "$my_tmpdir"; then 577*735d6239SKiyoung Kim # Failing that, at least try and use $RANDOM to avoid a race 578*735d6239SKiyoung Kim my_tmpdir="${my_template}-${RANDOM-0}$$" 579*735d6239SKiyoung Kim 580*735d6239SKiyoung Kim save_mktempdir_umask=`umask` 581*735d6239SKiyoung Kim umask 0077 582*735d6239SKiyoung Kim $MKDIR "$my_tmpdir" 583*735d6239SKiyoung Kim umask $save_mktempdir_umask 584*735d6239SKiyoung Kim fi 585*735d6239SKiyoung Kim 586*735d6239SKiyoung Kim # If we're not in dry-run mode, bomb out on failure 587*735d6239SKiyoung Kim test -d "$my_tmpdir" || \ 588*735d6239SKiyoung Kim func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 589*735d6239SKiyoung Kim fi 590*735d6239SKiyoung Kim 591*735d6239SKiyoung Kim $ECHO "$my_tmpdir" 592*735d6239SKiyoung Kim} 593*735d6239SKiyoung Kim 594*735d6239SKiyoung Kim 595*735d6239SKiyoung Kim# func_quote_for_eval arg 596*735d6239SKiyoung Kim# Aesthetically quote ARG to be evaled later. 597*735d6239SKiyoung Kim# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 598*735d6239SKiyoung Kim# is double-quoted, suitable for a subsequent eval, whereas 599*735d6239SKiyoung Kim# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 600*735d6239SKiyoung Kim# which are still active within double quotes backslashified. 601*735d6239SKiyoung Kimfunc_quote_for_eval () 602*735d6239SKiyoung Kim{ 603*735d6239SKiyoung Kim case $1 in 604*735d6239SKiyoung Kim *[\\\`\"\$]*) 605*735d6239SKiyoung Kim func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 606*735d6239SKiyoung Kim *) 607*735d6239SKiyoung Kim func_quote_for_eval_unquoted_result="$1" ;; 608*735d6239SKiyoung Kim esac 609*735d6239SKiyoung Kim 610*735d6239SKiyoung Kim case $func_quote_for_eval_unquoted_result in 611*735d6239SKiyoung Kim # Double-quote args containing shell metacharacters to delay 612*735d6239SKiyoung Kim # word splitting, command substitution and and variable 613*735d6239SKiyoung Kim # expansion for a subsequent eval. 614*735d6239SKiyoung Kim # Many Bourne shells cannot handle close brackets correctly 615*735d6239SKiyoung Kim # in scan sets, so we specify it separately. 616*735d6239SKiyoung Kim *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 617*735d6239SKiyoung Kim func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 618*735d6239SKiyoung Kim ;; 619*735d6239SKiyoung Kim *) 620*735d6239SKiyoung Kim func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 621*735d6239SKiyoung Kim esac 622*735d6239SKiyoung Kim} 623*735d6239SKiyoung Kim 624*735d6239SKiyoung Kim 625*735d6239SKiyoung Kim# func_quote_for_expand arg 626*735d6239SKiyoung Kim# Aesthetically quote ARG to be evaled later; same as above, 627*735d6239SKiyoung Kim# but do not quote variable references. 628*735d6239SKiyoung Kimfunc_quote_for_expand () 629*735d6239SKiyoung Kim{ 630*735d6239SKiyoung Kim case $1 in 631*735d6239SKiyoung Kim *[\\\`\"]*) 632*735d6239SKiyoung Kim my_arg=`$ECHO "$1" | $SED \ 633*735d6239SKiyoung Kim -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 634*735d6239SKiyoung Kim *) 635*735d6239SKiyoung Kim my_arg="$1" ;; 636*735d6239SKiyoung Kim esac 637*735d6239SKiyoung Kim 638*735d6239SKiyoung Kim case $my_arg in 639*735d6239SKiyoung Kim # Double-quote args containing shell metacharacters to delay 640*735d6239SKiyoung Kim # word splitting and command substitution for a subsequent eval. 641*735d6239SKiyoung Kim # Many Bourne shells cannot handle close brackets correctly 642*735d6239SKiyoung Kim # in scan sets, so we specify it separately. 643*735d6239SKiyoung Kim *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 644*735d6239SKiyoung Kim my_arg="\"$my_arg\"" 645*735d6239SKiyoung Kim ;; 646*735d6239SKiyoung Kim esac 647*735d6239SKiyoung Kim 648*735d6239SKiyoung Kim func_quote_for_expand_result="$my_arg" 649*735d6239SKiyoung Kim} 650*735d6239SKiyoung Kim 651*735d6239SKiyoung Kim 652*735d6239SKiyoung Kim# func_show_eval cmd [fail_exp] 653*735d6239SKiyoung Kim# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 654*735d6239SKiyoung Kim# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 655*735d6239SKiyoung Kim# is given, then evaluate it. 656*735d6239SKiyoung Kimfunc_show_eval () 657*735d6239SKiyoung Kim{ 658*735d6239SKiyoung Kim my_cmd="$1" 659*735d6239SKiyoung Kim my_fail_exp="${2-:}" 660*735d6239SKiyoung Kim 661*735d6239SKiyoung Kim ${opt_silent-false} || { 662*735d6239SKiyoung Kim func_quote_for_expand "$my_cmd" 663*735d6239SKiyoung Kim eval "func_echo $func_quote_for_expand_result" 664*735d6239SKiyoung Kim } 665*735d6239SKiyoung Kim 666*735d6239SKiyoung Kim if ${opt_dry_run-false}; then :; else 667*735d6239SKiyoung Kim eval "$my_cmd" 668*735d6239SKiyoung Kim my_status=$? 669*735d6239SKiyoung Kim if test "$my_status" -eq 0; then :; else 670*735d6239SKiyoung Kim eval "(exit $my_status); $my_fail_exp" 671*735d6239SKiyoung Kim fi 672*735d6239SKiyoung Kim fi 673*735d6239SKiyoung Kim} 674*735d6239SKiyoung Kim 675*735d6239SKiyoung Kim 676*735d6239SKiyoung Kim# func_show_eval_locale cmd [fail_exp] 677*735d6239SKiyoung Kim# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 678*735d6239SKiyoung Kim# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 679*735d6239SKiyoung Kim# is given, then evaluate it. Use the saved locale for evaluation. 680*735d6239SKiyoung Kimfunc_show_eval_locale () 681*735d6239SKiyoung Kim{ 682*735d6239SKiyoung Kim my_cmd="$1" 683*735d6239SKiyoung Kim my_fail_exp="${2-:}" 684*735d6239SKiyoung Kim 685*735d6239SKiyoung Kim ${opt_silent-false} || { 686*735d6239SKiyoung Kim func_quote_for_expand "$my_cmd" 687*735d6239SKiyoung Kim eval "func_echo $func_quote_for_expand_result" 688*735d6239SKiyoung Kim } 689*735d6239SKiyoung Kim 690*735d6239SKiyoung Kim if ${opt_dry_run-false}; then :; else 691*735d6239SKiyoung Kim eval "$lt_user_locale 692*735d6239SKiyoung Kim $my_cmd" 693*735d6239SKiyoung Kim my_status=$? 694*735d6239SKiyoung Kim eval "$lt_safe_locale" 695*735d6239SKiyoung Kim if test "$my_status" -eq 0; then :; else 696*735d6239SKiyoung Kim eval "(exit $my_status); $my_fail_exp" 697*735d6239SKiyoung Kim fi 698*735d6239SKiyoung Kim fi 699*735d6239SKiyoung Kim} 700*735d6239SKiyoung Kim 701*735d6239SKiyoung Kim# func_tr_sh 702*735d6239SKiyoung Kim# Turn $1 into a string suitable for a shell variable name. 703*735d6239SKiyoung Kim# Result is stored in $func_tr_sh_result. All characters 704*735d6239SKiyoung Kim# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 705*735d6239SKiyoung Kim# if $1 begins with a digit, a '_' is prepended as well. 706*735d6239SKiyoung Kimfunc_tr_sh () 707*735d6239SKiyoung Kim{ 708*735d6239SKiyoung Kim case $1 in 709*735d6239SKiyoung Kim [0-9]* | *[!a-zA-Z0-9_]*) 710*735d6239SKiyoung Kim func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 711*735d6239SKiyoung Kim ;; 712*735d6239SKiyoung Kim * ) 713*735d6239SKiyoung Kim func_tr_sh_result=$1 714*735d6239SKiyoung Kim ;; 715*735d6239SKiyoung Kim esac 716*735d6239SKiyoung Kim} 717*735d6239SKiyoung Kim 718*735d6239SKiyoung Kim 719*735d6239SKiyoung Kim# func_version 720*735d6239SKiyoung Kim# Echo version message to standard output and exit. 721*735d6239SKiyoung Kimfunc_version () 722*735d6239SKiyoung Kim{ 723*735d6239SKiyoung Kim $opt_debug 724*735d6239SKiyoung Kim 725*735d6239SKiyoung Kim $SED -n '/(C)/!b go 726*735d6239SKiyoung Kim :more 727*735d6239SKiyoung Kim /\./!{ 728*735d6239SKiyoung Kim N 729*735d6239SKiyoung Kim s/\n# / / 730*735d6239SKiyoung Kim b more 731*735d6239SKiyoung Kim } 732*735d6239SKiyoung Kim :go 733*735d6239SKiyoung Kim /^# '$PROGRAM' (GNU /,/# warranty; / { 734*735d6239SKiyoung Kim s/^# // 735*735d6239SKiyoung Kim s/^# *$// 736*735d6239SKiyoung Kim s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 737*735d6239SKiyoung Kim p 738*735d6239SKiyoung Kim }' < "$progpath" 739*735d6239SKiyoung Kim exit $? 740*735d6239SKiyoung Kim} 741*735d6239SKiyoung Kim 742*735d6239SKiyoung Kim# func_usage 743*735d6239SKiyoung Kim# Echo short help message to standard output and exit. 744*735d6239SKiyoung Kimfunc_usage () 745*735d6239SKiyoung Kim{ 746*735d6239SKiyoung Kim $opt_debug 747*735d6239SKiyoung Kim 748*735d6239SKiyoung Kim $SED -n '/^# Usage:/,/^# *.*--help/ { 749*735d6239SKiyoung Kim s/^# // 750*735d6239SKiyoung Kim s/^# *$// 751*735d6239SKiyoung Kim s/\$progname/'$progname'/ 752*735d6239SKiyoung Kim p 753*735d6239SKiyoung Kim }' < "$progpath" 754*735d6239SKiyoung Kim echo 755*735d6239SKiyoung Kim $ECHO "run \`$progname --help | more' for full usage" 756*735d6239SKiyoung Kim exit $? 757*735d6239SKiyoung Kim} 758*735d6239SKiyoung Kim 759*735d6239SKiyoung Kim# func_help [NOEXIT] 760*735d6239SKiyoung Kim# Echo long help message to standard output and exit, 761*735d6239SKiyoung Kim# unless 'noexit' is passed as argument. 762*735d6239SKiyoung Kimfunc_help () 763*735d6239SKiyoung Kim{ 764*735d6239SKiyoung Kim $opt_debug 765*735d6239SKiyoung Kim 766*735d6239SKiyoung Kim $SED -n '/^# Usage:/,/# Report bugs to/ { 767*735d6239SKiyoung Kim :print 768*735d6239SKiyoung Kim s/^# // 769*735d6239SKiyoung Kim s/^# *$// 770*735d6239SKiyoung Kim s*\$progname*'$progname'* 771*735d6239SKiyoung Kim s*\$host*'"$host"'* 772*735d6239SKiyoung Kim s*\$SHELL*'"$SHELL"'* 773*735d6239SKiyoung Kim s*\$LTCC*'"$LTCC"'* 774*735d6239SKiyoung Kim s*\$LTCFLAGS*'"$LTCFLAGS"'* 775*735d6239SKiyoung Kim s*\$LD*'"$LD"'* 776*735d6239SKiyoung Kim s/\$with_gnu_ld/'"$with_gnu_ld"'/ 777*735d6239SKiyoung Kim s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 778*735d6239SKiyoung Kim s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 779*735d6239SKiyoung Kim p 780*735d6239SKiyoung Kim d 781*735d6239SKiyoung Kim } 782*735d6239SKiyoung Kim /^# .* home page:/b print 783*735d6239SKiyoung Kim /^# General help using/b print 784*735d6239SKiyoung Kim ' < "$progpath" 785*735d6239SKiyoung Kim ret=$? 786*735d6239SKiyoung Kim if test -z "$1"; then 787*735d6239SKiyoung Kim exit $ret 788*735d6239SKiyoung Kim fi 789*735d6239SKiyoung Kim} 790*735d6239SKiyoung Kim 791*735d6239SKiyoung Kim# func_missing_arg argname 792*735d6239SKiyoung Kim# Echo program name prefixed message to standard error and set global 793*735d6239SKiyoung Kim# exit_cmd. 794*735d6239SKiyoung Kimfunc_missing_arg () 795*735d6239SKiyoung Kim{ 796*735d6239SKiyoung Kim $opt_debug 797*735d6239SKiyoung Kim 798*735d6239SKiyoung Kim func_error "missing argument for $1." 799*735d6239SKiyoung Kim exit_cmd=exit 800*735d6239SKiyoung Kim} 801*735d6239SKiyoung Kim 802*735d6239SKiyoung Kim 803*735d6239SKiyoung Kim# func_split_short_opt shortopt 804*735d6239SKiyoung Kim# Set func_split_short_opt_name and func_split_short_opt_arg shell 805*735d6239SKiyoung Kim# variables after splitting SHORTOPT after the 2nd character. 806*735d6239SKiyoung Kimfunc_split_short_opt () 807*735d6239SKiyoung Kim{ 808*735d6239SKiyoung Kim my_sed_short_opt='1s/^\(..\).*$/\1/;q' 809*735d6239SKiyoung Kim my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 810*735d6239SKiyoung Kim 811*735d6239SKiyoung Kim func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 812*735d6239SKiyoung Kim func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 813*735d6239SKiyoung Kim} # func_split_short_opt may be replaced by extended shell implementation 814*735d6239SKiyoung Kim 815*735d6239SKiyoung Kim 816*735d6239SKiyoung Kim# func_split_long_opt longopt 817*735d6239SKiyoung Kim# Set func_split_long_opt_name and func_split_long_opt_arg shell 818*735d6239SKiyoung Kim# variables after splitting LONGOPT at the `=' sign. 819*735d6239SKiyoung Kimfunc_split_long_opt () 820*735d6239SKiyoung Kim{ 821*735d6239SKiyoung Kim my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 822*735d6239SKiyoung Kim my_sed_long_arg='1s/^--[^=]*=//' 823*735d6239SKiyoung Kim 824*735d6239SKiyoung Kim func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 825*735d6239SKiyoung Kim func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 826*735d6239SKiyoung Kim} # func_split_long_opt may be replaced by extended shell implementation 827*735d6239SKiyoung Kim 828*735d6239SKiyoung Kimexit_cmd=: 829*735d6239SKiyoung Kim 830*735d6239SKiyoung Kim 831*735d6239SKiyoung Kim 832*735d6239SKiyoung Kim 833*735d6239SKiyoung Kim 834*735d6239SKiyoung Kimmagic="%%%MAGIC variable%%%" 835*735d6239SKiyoung Kimmagic_exe="%%%MAGIC EXE variable%%%" 836*735d6239SKiyoung Kim 837*735d6239SKiyoung Kim# Global variables. 838*735d6239SKiyoung Kimnonopt= 839*735d6239SKiyoung Kimpreserve_args= 840*735d6239SKiyoung Kimlo2o="s/\\.lo\$/.${objext}/" 841*735d6239SKiyoung Kimo2lo="s/\\.${objext}\$/.lo/" 842*735d6239SKiyoung Kimextracted_archives= 843*735d6239SKiyoung Kimextracted_serial=0 844*735d6239SKiyoung Kim 845*735d6239SKiyoung Kim# If this variable is set in any of the actions, the command in it 846*735d6239SKiyoung Kim# will be execed at the end. This prevents here-documents from being 847*735d6239SKiyoung Kim# left over by shells. 848*735d6239SKiyoung Kimexec_cmd= 849*735d6239SKiyoung Kim 850*735d6239SKiyoung Kim# func_append var value 851*735d6239SKiyoung Kim# Append VALUE to the end of shell variable VAR. 852*735d6239SKiyoung Kimfunc_append () 853*735d6239SKiyoung Kim{ 854*735d6239SKiyoung Kim eval "${1}=\$${1}\${2}" 855*735d6239SKiyoung Kim} # func_append may be replaced by extended shell implementation 856*735d6239SKiyoung Kim 857*735d6239SKiyoung Kim# func_append_quoted var value 858*735d6239SKiyoung Kim# Quote VALUE and append to the end of shell variable VAR, separated 859*735d6239SKiyoung Kim# by a space. 860*735d6239SKiyoung Kimfunc_append_quoted () 861*735d6239SKiyoung Kim{ 862*735d6239SKiyoung Kim func_quote_for_eval "${2}" 863*735d6239SKiyoung Kim eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 864*735d6239SKiyoung Kim} # func_append_quoted may be replaced by extended shell implementation 865*735d6239SKiyoung Kim 866*735d6239SKiyoung Kim 867*735d6239SKiyoung Kim# func_arith arithmetic-term... 868*735d6239SKiyoung Kimfunc_arith () 869*735d6239SKiyoung Kim{ 870*735d6239SKiyoung Kim func_arith_result=`expr "${@}"` 871*735d6239SKiyoung Kim} # func_arith may be replaced by extended shell implementation 872*735d6239SKiyoung Kim 873*735d6239SKiyoung Kim 874*735d6239SKiyoung Kim# func_len string 875*735d6239SKiyoung Kim# STRING may not start with a hyphen. 876*735d6239SKiyoung Kimfunc_len () 877*735d6239SKiyoung Kim{ 878*735d6239SKiyoung Kim func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 879*735d6239SKiyoung Kim} # func_len may be replaced by extended shell implementation 880*735d6239SKiyoung Kim 881*735d6239SKiyoung Kim 882*735d6239SKiyoung Kim# func_lo2o object 883*735d6239SKiyoung Kimfunc_lo2o () 884*735d6239SKiyoung Kim{ 885*735d6239SKiyoung Kim func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 886*735d6239SKiyoung Kim} # func_lo2o may be replaced by extended shell implementation 887*735d6239SKiyoung Kim 888*735d6239SKiyoung Kim 889*735d6239SKiyoung Kim# func_xform libobj-or-source 890*735d6239SKiyoung Kimfunc_xform () 891*735d6239SKiyoung Kim{ 892*735d6239SKiyoung Kim func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 893*735d6239SKiyoung Kim} # func_xform may be replaced by extended shell implementation 894*735d6239SKiyoung Kim 895*735d6239SKiyoung Kim 896*735d6239SKiyoung Kim# func_fatal_configuration arg... 897*735d6239SKiyoung Kim# Echo program name prefixed message to standard error, followed by 898*735d6239SKiyoung Kim# a configuration failure hint, and exit. 899*735d6239SKiyoung Kimfunc_fatal_configuration () 900*735d6239SKiyoung Kim{ 901*735d6239SKiyoung Kim func_error ${1+"$@"} 902*735d6239SKiyoung Kim func_error "See the $PACKAGE documentation for more information." 903*735d6239SKiyoung Kim func_fatal_error "Fatal configuration error." 904*735d6239SKiyoung Kim} 905*735d6239SKiyoung Kim 906*735d6239SKiyoung Kim 907*735d6239SKiyoung Kim# func_config 908*735d6239SKiyoung Kim# Display the configuration for all the tags in this script. 909*735d6239SKiyoung Kimfunc_config () 910*735d6239SKiyoung Kim{ 911*735d6239SKiyoung Kim re_begincf='^# ### BEGIN LIBTOOL' 912*735d6239SKiyoung Kim re_endcf='^# ### END LIBTOOL' 913*735d6239SKiyoung Kim 914*735d6239SKiyoung Kim # Default configuration. 915*735d6239SKiyoung Kim $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 916*735d6239SKiyoung Kim 917*735d6239SKiyoung Kim # Now print the configurations for the tags. 918*735d6239SKiyoung Kim for tagname in $taglist; do 919*735d6239SKiyoung Kim $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 920*735d6239SKiyoung Kim done 921*735d6239SKiyoung Kim 922*735d6239SKiyoung Kim exit $? 923*735d6239SKiyoung Kim} 924*735d6239SKiyoung Kim 925*735d6239SKiyoung Kim# func_features 926*735d6239SKiyoung Kim# Display the features supported by this script. 927*735d6239SKiyoung Kimfunc_features () 928*735d6239SKiyoung Kim{ 929*735d6239SKiyoung Kim echo "host: $host" 930*735d6239SKiyoung Kim if test "$build_libtool_libs" = yes; then 931*735d6239SKiyoung Kim echo "enable shared libraries" 932*735d6239SKiyoung Kim else 933*735d6239SKiyoung Kim echo "disable shared libraries" 934*735d6239SKiyoung Kim fi 935*735d6239SKiyoung Kim if test "$build_old_libs" = yes; then 936*735d6239SKiyoung Kim echo "enable static libraries" 937*735d6239SKiyoung Kim else 938*735d6239SKiyoung Kim echo "disable static libraries" 939*735d6239SKiyoung Kim fi 940*735d6239SKiyoung Kim 941*735d6239SKiyoung Kim exit $? 942*735d6239SKiyoung Kim} 943*735d6239SKiyoung Kim 944*735d6239SKiyoung Kim# func_enable_tag tagname 945*735d6239SKiyoung Kim# Verify that TAGNAME is valid, and either flag an error and exit, or 946*735d6239SKiyoung Kim# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 947*735d6239SKiyoung Kim# variable here. 948*735d6239SKiyoung Kimfunc_enable_tag () 949*735d6239SKiyoung Kim{ 950*735d6239SKiyoung Kim # Global variable: 951*735d6239SKiyoung Kim tagname="$1" 952*735d6239SKiyoung Kim 953*735d6239SKiyoung Kim re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 954*735d6239SKiyoung Kim re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 955*735d6239SKiyoung Kim sed_extractcf="/$re_begincf/,/$re_endcf/p" 956*735d6239SKiyoung Kim 957*735d6239SKiyoung Kim # Validate tagname. 958*735d6239SKiyoung Kim case $tagname in 959*735d6239SKiyoung Kim *[!-_A-Za-z0-9,/]*) 960*735d6239SKiyoung Kim func_fatal_error "invalid tag name: $tagname" 961*735d6239SKiyoung Kim ;; 962*735d6239SKiyoung Kim esac 963*735d6239SKiyoung Kim 964*735d6239SKiyoung Kim # Don't test for the "default" C tag, as we know it's 965*735d6239SKiyoung Kim # there but not specially marked. 966*735d6239SKiyoung Kim case $tagname in 967*735d6239SKiyoung Kim CC) ;; 968*735d6239SKiyoung Kim *) 969*735d6239SKiyoung Kim if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 970*735d6239SKiyoung Kim taglist="$taglist $tagname" 971*735d6239SKiyoung Kim 972*735d6239SKiyoung Kim # Evaluate the configuration. Be careful to quote the path 973*735d6239SKiyoung Kim # and the sed script, to avoid splitting on whitespace, but 974*735d6239SKiyoung Kim # also don't use non-portable quotes within backquotes within 975*735d6239SKiyoung Kim # quotes we have to do it in 2 steps: 976*735d6239SKiyoung Kim extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 977*735d6239SKiyoung Kim eval "$extractedcf" 978*735d6239SKiyoung Kim else 979*735d6239SKiyoung Kim func_error "ignoring unknown tag $tagname" 980*735d6239SKiyoung Kim fi 981*735d6239SKiyoung Kim ;; 982*735d6239SKiyoung Kim esac 983*735d6239SKiyoung Kim} 984*735d6239SKiyoung Kim 985*735d6239SKiyoung Kim# func_check_version_match 986*735d6239SKiyoung Kim# Ensure that we are using m4 macros, and libtool script from the same 987*735d6239SKiyoung Kim# release of libtool. 988*735d6239SKiyoung Kimfunc_check_version_match () 989*735d6239SKiyoung Kim{ 990*735d6239SKiyoung Kim if test "$package_revision" != "$macro_revision"; then 991*735d6239SKiyoung Kim if test "$VERSION" != "$macro_version"; then 992*735d6239SKiyoung Kim if test -z "$macro_version"; then 993*735d6239SKiyoung Kim cat >&2 <<_LT_EOF 994*735d6239SKiyoung Kim$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 995*735d6239SKiyoung Kim$progname: definition of this LT_INIT comes from an older release. 996*735d6239SKiyoung Kim$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 997*735d6239SKiyoung Kim$progname: and run autoconf again. 998*735d6239SKiyoung Kim_LT_EOF 999*735d6239SKiyoung Kim else 1000*735d6239SKiyoung Kim cat >&2 <<_LT_EOF 1001*735d6239SKiyoung Kim$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 1002*735d6239SKiyoung Kim$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 1003*735d6239SKiyoung Kim$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 1004*735d6239SKiyoung Kim$progname: and run autoconf again. 1005*735d6239SKiyoung Kim_LT_EOF 1006*735d6239SKiyoung Kim fi 1007*735d6239SKiyoung Kim else 1008*735d6239SKiyoung Kim cat >&2 <<_LT_EOF 1009*735d6239SKiyoung Kim$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1010*735d6239SKiyoung Kim$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1011*735d6239SKiyoung Kim$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1012*735d6239SKiyoung Kim$progname: of $PACKAGE $VERSION and run autoconf again. 1013*735d6239SKiyoung Kim_LT_EOF 1014*735d6239SKiyoung Kim fi 1015*735d6239SKiyoung Kim 1016*735d6239SKiyoung Kim exit $EXIT_MISMATCH 1017*735d6239SKiyoung Kim fi 1018*735d6239SKiyoung Kim} 1019*735d6239SKiyoung Kim 1020*735d6239SKiyoung Kim 1021*735d6239SKiyoung Kim# Shorthand for --mode=foo, only valid as the first argument 1022*735d6239SKiyoung Kimcase $1 in 1023*735d6239SKiyoung Kimclean|clea|cle|cl) 1024*735d6239SKiyoung Kim shift; set dummy --mode clean ${1+"$@"}; shift 1025*735d6239SKiyoung Kim ;; 1026*735d6239SKiyoung Kimcompile|compil|compi|comp|com|co|c) 1027*735d6239SKiyoung Kim shift; set dummy --mode compile ${1+"$@"}; shift 1028*735d6239SKiyoung Kim ;; 1029*735d6239SKiyoung Kimexecute|execut|execu|exec|exe|ex|e) 1030*735d6239SKiyoung Kim shift; set dummy --mode execute ${1+"$@"}; shift 1031*735d6239SKiyoung Kim ;; 1032*735d6239SKiyoung Kimfinish|finis|fini|fin|fi|f) 1033*735d6239SKiyoung Kim shift; set dummy --mode finish ${1+"$@"}; shift 1034*735d6239SKiyoung Kim ;; 1035*735d6239SKiyoung Kiminstall|instal|insta|inst|ins|in|i) 1036*735d6239SKiyoung Kim shift; set dummy --mode install ${1+"$@"}; shift 1037*735d6239SKiyoung Kim ;; 1038*735d6239SKiyoung Kimlink|lin|li|l) 1039*735d6239SKiyoung Kim shift; set dummy --mode link ${1+"$@"}; shift 1040*735d6239SKiyoung Kim ;; 1041*735d6239SKiyoung Kimuninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 1042*735d6239SKiyoung Kim shift; set dummy --mode uninstall ${1+"$@"}; shift 1043*735d6239SKiyoung Kim ;; 1044*735d6239SKiyoung Kimesac 1045*735d6239SKiyoung Kim 1046*735d6239SKiyoung Kim 1047*735d6239SKiyoung Kim 1048*735d6239SKiyoung Kim# Option defaults: 1049*735d6239SKiyoung Kimopt_debug=: 1050*735d6239SKiyoung Kimopt_dry_run=false 1051*735d6239SKiyoung Kimopt_config=false 1052*735d6239SKiyoung Kimopt_preserve_dup_deps=false 1053*735d6239SKiyoung Kimopt_features=false 1054*735d6239SKiyoung Kimopt_finish=false 1055*735d6239SKiyoung Kimopt_help=false 1056*735d6239SKiyoung Kimopt_help_all=false 1057*735d6239SKiyoung Kimopt_silent=: 1058*735d6239SKiyoung Kimopt_verbose=: 1059*735d6239SKiyoung Kimopt_silent=false 1060*735d6239SKiyoung Kimopt_verbose=false 1061*735d6239SKiyoung Kim 1062*735d6239SKiyoung Kim 1063*735d6239SKiyoung Kim# Parse options once, thoroughly. This comes as soon as possible in the 1064*735d6239SKiyoung Kim# script to make things like `--version' happen as quickly as we can. 1065*735d6239SKiyoung Kim{ 1066*735d6239SKiyoung Kim # this just eases exit handling 1067*735d6239SKiyoung Kim while test $# -gt 0; do 1068*735d6239SKiyoung Kim opt="$1" 1069*735d6239SKiyoung Kim shift 1070*735d6239SKiyoung Kim case $opt in 1071*735d6239SKiyoung Kim --debug|-x) opt_debug='set -x' 1072*735d6239SKiyoung Kim func_echo "enabling shell trace mode" 1073*735d6239SKiyoung Kim $opt_debug 1074*735d6239SKiyoung Kim ;; 1075*735d6239SKiyoung Kim --dry-run|--dryrun|-n) 1076*735d6239SKiyoung Kim opt_dry_run=: 1077*735d6239SKiyoung Kim ;; 1078*735d6239SKiyoung Kim --config) 1079*735d6239SKiyoung Kim opt_config=: 1080*735d6239SKiyoung Kimfunc_config 1081*735d6239SKiyoung Kim ;; 1082*735d6239SKiyoung Kim --dlopen|-dlopen) 1083*735d6239SKiyoung Kim optarg="$1" 1084*735d6239SKiyoung Kim opt_dlopen="${opt_dlopen+$opt_dlopen 1085*735d6239SKiyoung Kim}$optarg" 1086*735d6239SKiyoung Kim shift 1087*735d6239SKiyoung Kim ;; 1088*735d6239SKiyoung Kim --preserve-dup-deps) 1089*735d6239SKiyoung Kim opt_preserve_dup_deps=: 1090*735d6239SKiyoung Kim ;; 1091*735d6239SKiyoung Kim --features) 1092*735d6239SKiyoung Kim opt_features=: 1093*735d6239SKiyoung Kimfunc_features 1094*735d6239SKiyoung Kim ;; 1095*735d6239SKiyoung Kim --finish) 1096*735d6239SKiyoung Kim opt_finish=: 1097*735d6239SKiyoung Kimset dummy --mode finish ${1+"$@"}; shift 1098*735d6239SKiyoung Kim ;; 1099*735d6239SKiyoung Kim --help) 1100*735d6239SKiyoung Kim opt_help=: 1101*735d6239SKiyoung Kim ;; 1102*735d6239SKiyoung Kim --help-all) 1103*735d6239SKiyoung Kim opt_help_all=: 1104*735d6239SKiyoung Kimopt_help=': help-all' 1105*735d6239SKiyoung Kim ;; 1106*735d6239SKiyoung Kim --mode) 1107*735d6239SKiyoung Kim test $# = 0 && func_missing_arg $opt && break 1108*735d6239SKiyoung Kim optarg="$1" 1109*735d6239SKiyoung Kim opt_mode="$optarg" 1110*735d6239SKiyoung Kimcase $optarg in 1111*735d6239SKiyoung Kim # Valid mode arguments: 1112*735d6239SKiyoung Kim clean|compile|execute|finish|install|link|relink|uninstall) ;; 1113*735d6239SKiyoung Kim 1114*735d6239SKiyoung Kim # Catch anything else as an error 1115*735d6239SKiyoung Kim *) func_error "invalid argument for $opt" 1116*735d6239SKiyoung Kim exit_cmd=exit 1117*735d6239SKiyoung Kim break 1118*735d6239SKiyoung Kim ;; 1119*735d6239SKiyoung Kimesac 1120*735d6239SKiyoung Kim shift 1121*735d6239SKiyoung Kim ;; 1122*735d6239SKiyoung Kim --no-silent|--no-quiet) 1123*735d6239SKiyoung Kim opt_silent=false 1124*735d6239SKiyoung Kimfunc_append preserve_args " $opt" 1125*735d6239SKiyoung Kim ;; 1126*735d6239SKiyoung Kim --no-verbose) 1127*735d6239SKiyoung Kim opt_verbose=false 1128*735d6239SKiyoung Kimfunc_append preserve_args " $opt" 1129*735d6239SKiyoung Kim ;; 1130*735d6239SKiyoung Kim --silent|--quiet) 1131*735d6239SKiyoung Kim opt_silent=: 1132*735d6239SKiyoung Kimfunc_append preserve_args " $opt" 1133*735d6239SKiyoung Kim opt_verbose=false 1134*735d6239SKiyoung Kim ;; 1135*735d6239SKiyoung Kim --verbose|-v) 1136*735d6239SKiyoung Kim opt_verbose=: 1137*735d6239SKiyoung Kimfunc_append preserve_args " $opt" 1138*735d6239SKiyoung Kimopt_silent=false 1139*735d6239SKiyoung Kim ;; 1140*735d6239SKiyoung Kim --tag) 1141*735d6239SKiyoung Kim test $# = 0 && func_missing_arg $opt && break 1142*735d6239SKiyoung Kim optarg="$1" 1143*735d6239SKiyoung Kim opt_tag="$optarg" 1144*735d6239SKiyoung Kimfunc_append preserve_args " $opt $optarg" 1145*735d6239SKiyoung Kimfunc_enable_tag "$optarg" 1146*735d6239SKiyoung Kim shift 1147*735d6239SKiyoung Kim ;; 1148*735d6239SKiyoung Kim 1149*735d6239SKiyoung Kim -\?|-h) func_usage ;; 1150*735d6239SKiyoung Kim --help) func_help ;; 1151*735d6239SKiyoung Kim --version) func_version ;; 1152*735d6239SKiyoung Kim 1153*735d6239SKiyoung Kim # Separate optargs to long options: 1154*735d6239SKiyoung Kim --*=*) 1155*735d6239SKiyoung Kim func_split_long_opt "$opt" 1156*735d6239SKiyoung Kim set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1157*735d6239SKiyoung Kim shift 1158*735d6239SKiyoung Kim ;; 1159*735d6239SKiyoung Kim 1160*735d6239SKiyoung Kim # Separate non-argument short options: 1161*735d6239SKiyoung Kim -\?*|-h*|-n*|-v*) 1162*735d6239SKiyoung Kim func_split_short_opt "$opt" 1163*735d6239SKiyoung Kim set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 1164*735d6239SKiyoung Kim shift 1165*735d6239SKiyoung Kim ;; 1166*735d6239SKiyoung Kim 1167*735d6239SKiyoung Kim --) break ;; 1168*735d6239SKiyoung Kim -*) func_fatal_help "unrecognized option \`$opt'" ;; 1169*735d6239SKiyoung Kim *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1170*735d6239SKiyoung Kim esac 1171*735d6239SKiyoung Kim done 1172*735d6239SKiyoung Kim 1173*735d6239SKiyoung Kim # Validate options: 1174*735d6239SKiyoung Kim 1175*735d6239SKiyoung Kim # save first non-option argument 1176*735d6239SKiyoung Kim if test "$#" -gt 0; then 1177*735d6239SKiyoung Kim nonopt="$opt" 1178*735d6239SKiyoung Kim shift 1179*735d6239SKiyoung Kim fi 1180*735d6239SKiyoung Kim 1181*735d6239SKiyoung Kim # preserve --debug 1182*735d6239SKiyoung Kim test "$opt_debug" = : || func_append preserve_args " --debug" 1183*735d6239SKiyoung Kim 1184*735d6239SKiyoung Kim case $host in 1185*735d6239SKiyoung Kim *cygwin* | *mingw* | *pw32* | *cegcc*) 1186*735d6239SKiyoung Kim # don't eliminate duplications in $postdeps and $predeps 1187*735d6239SKiyoung Kim opt_duplicate_compiler_generated_deps=: 1188*735d6239SKiyoung Kim ;; 1189*735d6239SKiyoung Kim *) 1190*735d6239SKiyoung Kim opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1191*735d6239SKiyoung Kim ;; 1192*735d6239SKiyoung Kim esac 1193*735d6239SKiyoung Kim 1194*735d6239SKiyoung Kim $opt_help || { 1195*735d6239SKiyoung Kim # Sanity checks first: 1196*735d6239SKiyoung Kim func_check_version_match 1197*735d6239SKiyoung Kim 1198*735d6239SKiyoung Kim if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1199*735d6239SKiyoung Kim func_fatal_configuration "not configured to build any kind of library" 1200*735d6239SKiyoung Kim fi 1201*735d6239SKiyoung Kim 1202*735d6239SKiyoung Kim # Darwin sucks 1203*735d6239SKiyoung Kim eval std_shrext=\"$shrext_cmds\" 1204*735d6239SKiyoung Kim 1205*735d6239SKiyoung Kim # Only execute mode is allowed to have -dlopen flags. 1206*735d6239SKiyoung Kim if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 1207*735d6239SKiyoung Kim func_error "unrecognized option \`-dlopen'" 1208*735d6239SKiyoung Kim $ECHO "$help" 1>&2 1209*735d6239SKiyoung Kim exit $EXIT_FAILURE 1210*735d6239SKiyoung Kim fi 1211*735d6239SKiyoung Kim 1212*735d6239SKiyoung Kim # Change the help message to a mode-specific one. 1213*735d6239SKiyoung Kim generic_help="$help" 1214*735d6239SKiyoung Kim help="Try \`$progname --help --mode=$opt_mode' for more information." 1215*735d6239SKiyoung Kim } 1216*735d6239SKiyoung Kim 1217*735d6239SKiyoung Kim 1218*735d6239SKiyoung Kim # Bail if the options were screwed 1219*735d6239SKiyoung Kim $exit_cmd $EXIT_FAILURE 1220*735d6239SKiyoung Kim} 1221*735d6239SKiyoung Kim 1222*735d6239SKiyoung Kim 1223*735d6239SKiyoung Kim 1224*735d6239SKiyoung Kim 1225*735d6239SKiyoung Kim## ----------- ## 1226*735d6239SKiyoung Kim## Main. ## 1227*735d6239SKiyoung Kim## ----------- ## 1228*735d6239SKiyoung Kim 1229*735d6239SKiyoung Kim# func_lalib_p file 1230*735d6239SKiyoung Kim# True iff FILE is a libtool `.la' library or `.lo' object file. 1231*735d6239SKiyoung Kim# This function is only a basic sanity check; it will hardly flush out 1232*735d6239SKiyoung Kim# determined imposters. 1233*735d6239SKiyoung Kimfunc_lalib_p () 1234*735d6239SKiyoung Kim{ 1235*735d6239SKiyoung Kim test -f "$1" && 1236*735d6239SKiyoung Kim $SED -e 4q "$1" 2>/dev/null \ 1237*735d6239SKiyoung Kim | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1238*735d6239SKiyoung Kim} 1239*735d6239SKiyoung Kim 1240*735d6239SKiyoung Kim# func_lalib_unsafe_p file 1241*735d6239SKiyoung Kim# True iff FILE is a libtool `.la' library or `.lo' object file. 1242*735d6239SKiyoung Kim# This function implements the same check as func_lalib_p without 1243*735d6239SKiyoung Kim# resorting to external programs. To this end, it redirects stdin and 1244*735d6239SKiyoung Kim# closes it afterwards, without saving the original file descriptor. 1245*735d6239SKiyoung Kim# As a safety measure, use it only where a negative result would be 1246*735d6239SKiyoung Kim# fatal anyway. Works if `file' does not exist. 1247*735d6239SKiyoung Kimfunc_lalib_unsafe_p () 1248*735d6239SKiyoung Kim{ 1249*735d6239SKiyoung Kim lalib_p=no 1250*735d6239SKiyoung Kim if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1251*735d6239SKiyoung Kim for lalib_p_l in 1 2 3 4 1252*735d6239SKiyoung Kim do 1253*735d6239SKiyoung Kim read lalib_p_line 1254*735d6239SKiyoung Kim case "$lalib_p_line" in 1255*735d6239SKiyoung Kim \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1256*735d6239SKiyoung Kim esac 1257*735d6239SKiyoung Kim done 1258*735d6239SKiyoung Kim exec 0<&5 5<&- 1259*735d6239SKiyoung Kim fi 1260*735d6239SKiyoung Kim test "$lalib_p" = yes 1261*735d6239SKiyoung Kim} 1262*735d6239SKiyoung Kim 1263*735d6239SKiyoung Kim# func_ltwrapper_script_p file 1264*735d6239SKiyoung Kim# True iff FILE is a libtool wrapper script 1265*735d6239SKiyoung Kim# This function is only a basic sanity check; it will hardly flush out 1266*735d6239SKiyoung Kim# determined imposters. 1267*735d6239SKiyoung Kimfunc_ltwrapper_script_p () 1268*735d6239SKiyoung Kim{ 1269*735d6239SKiyoung Kim func_lalib_p "$1" 1270*735d6239SKiyoung Kim} 1271*735d6239SKiyoung Kim 1272*735d6239SKiyoung Kim# func_ltwrapper_executable_p file 1273*735d6239SKiyoung Kim# True iff FILE is a libtool wrapper executable 1274*735d6239SKiyoung Kim# This function is only a basic sanity check; it will hardly flush out 1275*735d6239SKiyoung Kim# determined imposters. 1276*735d6239SKiyoung Kimfunc_ltwrapper_executable_p () 1277*735d6239SKiyoung Kim{ 1278*735d6239SKiyoung Kim func_ltwrapper_exec_suffix= 1279*735d6239SKiyoung Kim case $1 in 1280*735d6239SKiyoung Kim *.exe) ;; 1281*735d6239SKiyoung Kim *) func_ltwrapper_exec_suffix=.exe ;; 1282*735d6239SKiyoung Kim esac 1283*735d6239SKiyoung Kim $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1284*735d6239SKiyoung Kim} 1285*735d6239SKiyoung Kim 1286*735d6239SKiyoung Kim# func_ltwrapper_scriptname file 1287*735d6239SKiyoung Kim# Assumes file is an ltwrapper_executable 1288*735d6239SKiyoung Kim# uses $file to determine the appropriate filename for a 1289*735d6239SKiyoung Kim# temporary ltwrapper_script. 1290*735d6239SKiyoung Kimfunc_ltwrapper_scriptname () 1291*735d6239SKiyoung Kim{ 1292*735d6239SKiyoung Kim func_dirname_and_basename "$1" "" "." 1293*735d6239SKiyoung Kim func_stripname '' '.exe' "$func_basename_result" 1294*735d6239SKiyoung Kim func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1295*735d6239SKiyoung Kim} 1296*735d6239SKiyoung Kim 1297*735d6239SKiyoung Kim# func_ltwrapper_p file 1298*735d6239SKiyoung Kim# True iff FILE is a libtool wrapper script or wrapper executable 1299*735d6239SKiyoung Kim# This function is only a basic sanity check; it will hardly flush out 1300*735d6239SKiyoung Kim# determined imposters. 1301*735d6239SKiyoung Kimfunc_ltwrapper_p () 1302*735d6239SKiyoung Kim{ 1303*735d6239SKiyoung Kim func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1304*735d6239SKiyoung Kim} 1305*735d6239SKiyoung Kim 1306*735d6239SKiyoung Kim 1307*735d6239SKiyoung Kim# func_execute_cmds commands fail_cmd 1308*735d6239SKiyoung Kim# Execute tilde-delimited COMMANDS. 1309*735d6239SKiyoung Kim# If FAIL_CMD is given, eval that upon failure. 1310*735d6239SKiyoung Kim# FAIL_CMD may read-access the current command in variable CMD! 1311*735d6239SKiyoung Kimfunc_execute_cmds () 1312*735d6239SKiyoung Kim{ 1313*735d6239SKiyoung Kim $opt_debug 1314*735d6239SKiyoung Kim save_ifs=$IFS; IFS='~' 1315*735d6239SKiyoung Kim for cmd in $1; do 1316*735d6239SKiyoung Kim IFS=$save_ifs 1317*735d6239SKiyoung Kim eval cmd=\"$cmd\" 1318*735d6239SKiyoung Kim func_show_eval "$cmd" "${2-:}" 1319*735d6239SKiyoung Kim done 1320*735d6239SKiyoung Kim IFS=$save_ifs 1321*735d6239SKiyoung Kim} 1322*735d6239SKiyoung Kim 1323*735d6239SKiyoung Kim 1324*735d6239SKiyoung Kim# func_source file 1325*735d6239SKiyoung Kim# Source FILE, adding directory component if necessary. 1326*735d6239SKiyoung Kim# Note that it is not necessary on cygwin/mingw to append a dot to 1327*735d6239SKiyoung Kim# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1328*735d6239SKiyoung Kim# behavior happens only for exec(3), not for open(2)! Also, sourcing 1329*735d6239SKiyoung Kim# `FILE.' does not work on cygwin managed mounts. 1330*735d6239SKiyoung Kimfunc_source () 1331*735d6239SKiyoung Kim{ 1332*735d6239SKiyoung Kim $opt_debug 1333*735d6239SKiyoung Kim case $1 in 1334*735d6239SKiyoung Kim */* | *\\*) . "$1" ;; 1335*735d6239SKiyoung Kim *) . "./$1" ;; 1336*735d6239SKiyoung Kim esac 1337*735d6239SKiyoung Kim} 1338*735d6239SKiyoung Kim 1339*735d6239SKiyoung Kim 1340*735d6239SKiyoung Kim# func_resolve_sysroot PATH 1341*735d6239SKiyoung Kim# Replace a leading = in PATH with a sysroot. Store the result into 1342*735d6239SKiyoung Kim# func_resolve_sysroot_result 1343*735d6239SKiyoung Kimfunc_resolve_sysroot () 1344*735d6239SKiyoung Kim{ 1345*735d6239SKiyoung Kim func_resolve_sysroot_result=$1 1346*735d6239SKiyoung Kim case $func_resolve_sysroot_result in 1347*735d6239SKiyoung Kim =*) 1348*735d6239SKiyoung Kim func_stripname '=' '' "$func_resolve_sysroot_result" 1349*735d6239SKiyoung Kim func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 1350*735d6239SKiyoung Kim ;; 1351*735d6239SKiyoung Kim esac 1352*735d6239SKiyoung Kim} 1353*735d6239SKiyoung Kim 1354*735d6239SKiyoung Kim# func_replace_sysroot PATH 1355*735d6239SKiyoung Kim# If PATH begins with the sysroot, replace it with = and 1356*735d6239SKiyoung Kim# store the result into func_replace_sysroot_result. 1357*735d6239SKiyoung Kimfunc_replace_sysroot () 1358*735d6239SKiyoung Kim{ 1359*735d6239SKiyoung Kim case "$lt_sysroot:$1" in 1360*735d6239SKiyoung Kim ?*:"$lt_sysroot"*) 1361*735d6239SKiyoung Kim func_stripname "$lt_sysroot" '' "$1" 1362*735d6239SKiyoung Kim func_replace_sysroot_result="=$func_stripname_result" 1363*735d6239SKiyoung Kim ;; 1364*735d6239SKiyoung Kim *) 1365*735d6239SKiyoung Kim # Including no sysroot. 1366*735d6239SKiyoung Kim func_replace_sysroot_result=$1 1367*735d6239SKiyoung Kim ;; 1368*735d6239SKiyoung Kim esac 1369*735d6239SKiyoung Kim} 1370*735d6239SKiyoung Kim 1371*735d6239SKiyoung Kim# func_infer_tag arg 1372*735d6239SKiyoung Kim# Infer tagged configuration to use if any are available and 1373*735d6239SKiyoung Kim# if one wasn't chosen via the "--tag" command line option. 1374*735d6239SKiyoung Kim# Only attempt this if the compiler in the base compile 1375*735d6239SKiyoung Kim# command doesn't match the default compiler. 1376*735d6239SKiyoung Kim# arg is usually of the form 'gcc ...' 1377*735d6239SKiyoung Kimfunc_infer_tag () 1378*735d6239SKiyoung Kim{ 1379*735d6239SKiyoung Kim $opt_debug 1380*735d6239SKiyoung Kim if test -n "$available_tags" && test -z "$tagname"; then 1381*735d6239SKiyoung Kim CC_quoted= 1382*735d6239SKiyoung Kim for arg in $CC; do 1383*735d6239SKiyoung Kim func_append_quoted CC_quoted "$arg" 1384*735d6239SKiyoung Kim done 1385*735d6239SKiyoung Kim CC_expanded=`func_echo_all $CC` 1386*735d6239SKiyoung Kim CC_quoted_expanded=`func_echo_all $CC_quoted` 1387*735d6239SKiyoung Kim case $@ in 1388*735d6239SKiyoung Kim # Blanks in the command may have been stripped by the calling shell, 1389*735d6239SKiyoung Kim # but not from the CC environment variable when configure was run. 1390*735d6239SKiyoung Kim " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1391*735d6239SKiyoung Kim " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1392*735d6239SKiyoung Kim # Blanks at the start of $base_compile will cause this to fail 1393*735d6239SKiyoung Kim # if we don't check for them as well. 1394*735d6239SKiyoung Kim *) 1395*735d6239SKiyoung Kim for z in $available_tags; do 1396*735d6239SKiyoung Kim if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1397*735d6239SKiyoung Kim # Evaluate the configuration. 1398*735d6239SKiyoung Kim eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1399*735d6239SKiyoung Kim CC_quoted= 1400*735d6239SKiyoung Kim for arg in $CC; do 1401*735d6239SKiyoung Kim # Double-quote args containing other shell metacharacters. 1402*735d6239SKiyoung Kim func_append_quoted CC_quoted "$arg" 1403*735d6239SKiyoung Kim done 1404*735d6239SKiyoung Kim CC_expanded=`func_echo_all $CC` 1405*735d6239SKiyoung Kim CC_quoted_expanded=`func_echo_all $CC_quoted` 1406*735d6239SKiyoung Kim case "$@ " in 1407*735d6239SKiyoung Kim " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1408*735d6239SKiyoung Kim " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1409*735d6239SKiyoung Kim # The compiler in the base compile command matches 1410*735d6239SKiyoung Kim # the one in the tagged configuration. 1411*735d6239SKiyoung Kim # Assume this is the tagged configuration we want. 1412*735d6239SKiyoung Kim tagname=$z 1413*735d6239SKiyoung Kim break 1414*735d6239SKiyoung Kim ;; 1415*735d6239SKiyoung Kim esac 1416*735d6239SKiyoung Kim fi 1417*735d6239SKiyoung Kim done 1418*735d6239SKiyoung Kim # If $tagname still isn't set, then no tagged configuration 1419*735d6239SKiyoung Kim # was found and let the user know that the "--tag" command 1420*735d6239SKiyoung Kim # line option must be used. 1421*735d6239SKiyoung Kim if test -z "$tagname"; then 1422*735d6239SKiyoung Kim func_echo "unable to infer tagged configuration" 1423*735d6239SKiyoung Kim func_fatal_error "specify a tag with \`--tag'" 1424*735d6239SKiyoung Kim# else 1425*735d6239SKiyoung Kim# func_verbose "using $tagname tagged configuration" 1426*735d6239SKiyoung Kim fi 1427*735d6239SKiyoung Kim ;; 1428*735d6239SKiyoung Kim esac 1429*735d6239SKiyoung Kim fi 1430*735d6239SKiyoung Kim} 1431*735d6239SKiyoung Kim 1432*735d6239SKiyoung Kim 1433*735d6239SKiyoung Kim 1434*735d6239SKiyoung Kim# func_write_libtool_object output_name pic_name nonpic_name 1435*735d6239SKiyoung Kim# Create a libtool object file (analogous to a ".la" file), 1436*735d6239SKiyoung Kim# but don't create it if we're doing a dry run. 1437*735d6239SKiyoung Kimfunc_write_libtool_object () 1438*735d6239SKiyoung Kim{ 1439*735d6239SKiyoung Kim write_libobj=${1} 1440*735d6239SKiyoung Kim if test "$build_libtool_libs" = yes; then 1441*735d6239SKiyoung Kim write_lobj=\'${2}\' 1442*735d6239SKiyoung Kim else 1443*735d6239SKiyoung Kim write_lobj=none 1444*735d6239SKiyoung Kim fi 1445*735d6239SKiyoung Kim 1446*735d6239SKiyoung Kim if test "$build_old_libs" = yes; then 1447*735d6239SKiyoung Kim write_oldobj=\'${3}\' 1448*735d6239SKiyoung Kim else 1449*735d6239SKiyoung Kim write_oldobj=none 1450*735d6239SKiyoung Kim fi 1451*735d6239SKiyoung Kim 1452*735d6239SKiyoung Kim $opt_dry_run || { 1453*735d6239SKiyoung Kim cat >${write_libobj}T <<EOF 1454*735d6239SKiyoung Kim# $write_libobj - a libtool object file 1455*735d6239SKiyoung Kim# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1456*735d6239SKiyoung Kim# 1457*735d6239SKiyoung Kim# Please DO NOT delete this file! 1458*735d6239SKiyoung Kim# It is necessary for linking the library. 1459*735d6239SKiyoung Kim 1460*735d6239SKiyoung Kim# Name of the PIC object. 1461*735d6239SKiyoung Kimpic_object=$write_lobj 1462*735d6239SKiyoung Kim 1463*735d6239SKiyoung Kim# Name of the non-PIC object 1464*735d6239SKiyoung Kimnon_pic_object=$write_oldobj 1465*735d6239SKiyoung Kim 1466*735d6239SKiyoung KimEOF 1467*735d6239SKiyoung Kim $MV "${write_libobj}T" "${write_libobj}" 1468*735d6239SKiyoung Kim } 1469*735d6239SKiyoung Kim} 1470*735d6239SKiyoung Kim 1471*735d6239SKiyoung Kim 1472*735d6239SKiyoung Kim################################################## 1473*735d6239SKiyoung Kim# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 1474*735d6239SKiyoung Kim################################################## 1475*735d6239SKiyoung Kim 1476*735d6239SKiyoung Kim# func_convert_core_file_wine_to_w32 ARG 1477*735d6239SKiyoung Kim# Helper function used by file name conversion functions when $build is *nix, 1478*735d6239SKiyoung Kim# and $host is mingw, cygwin, or some other w32 environment. Relies on a 1479*735d6239SKiyoung Kim# correctly configured wine environment available, with the winepath program 1480*735d6239SKiyoung Kim# in $build's $PATH. 1481*735d6239SKiyoung Kim# 1482*735d6239SKiyoung Kim# ARG is the $build file name to be converted to w32 format. 1483*735d6239SKiyoung Kim# Result is available in $func_convert_core_file_wine_to_w32_result, and will 1484*735d6239SKiyoung Kim# be empty on error (or when ARG is empty) 1485*735d6239SKiyoung Kimfunc_convert_core_file_wine_to_w32 () 1486*735d6239SKiyoung Kim{ 1487*735d6239SKiyoung Kim $opt_debug 1488*735d6239SKiyoung Kim func_convert_core_file_wine_to_w32_result="$1" 1489*735d6239SKiyoung Kim if test -n "$1"; then 1490*735d6239SKiyoung Kim # Unfortunately, winepath does not exit with a non-zero error code, so we 1491*735d6239SKiyoung Kim # are forced to check the contents of stdout. On the other hand, if the 1492*735d6239SKiyoung Kim # command is not found, the shell will set an exit code of 127 and print 1493*735d6239SKiyoung Kim # *an error message* to stdout. So we must check for both error code of 1494*735d6239SKiyoung Kim # zero AND non-empty stdout, which explains the odd construction: 1495*735d6239SKiyoung Kim func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 1496*735d6239SKiyoung Kim if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 1497*735d6239SKiyoung Kim func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 1498*735d6239SKiyoung Kim $SED -e "$lt_sed_naive_backslashify"` 1499*735d6239SKiyoung Kim else 1500*735d6239SKiyoung Kim func_convert_core_file_wine_to_w32_result= 1501*735d6239SKiyoung Kim fi 1502*735d6239SKiyoung Kim fi 1503*735d6239SKiyoung Kim} 1504*735d6239SKiyoung Kim# end: func_convert_core_file_wine_to_w32 1505*735d6239SKiyoung Kim 1506*735d6239SKiyoung Kim 1507*735d6239SKiyoung Kim# func_convert_core_path_wine_to_w32 ARG 1508*735d6239SKiyoung Kim# Helper function used by path conversion functions when $build is *nix, and 1509*735d6239SKiyoung Kim# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 1510*735d6239SKiyoung Kim# configured wine environment available, with the winepath program in $build's 1511*735d6239SKiyoung Kim# $PATH. Assumes ARG has no leading or trailing path separator characters. 1512*735d6239SKiyoung Kim# 1513*735d6239SKiyoung Kim# ARG is path to be converted from $build format to win32. 1514*735d6239SKiyoung Kim# Result is available in $func_convert_core_path_wine_to_w32_result. 1515*735d6239SKiyoung Kim# Unconvertible file (directory) names in ARG are skipped; if no directory names 1516*735d6239SKiyoung Kim# are convertible, then the result may be empty. 1517*735d6239SKiyoung Kimfunc_convert_core_path_wine_to_w32 () 1518*735d6239SKiyoung Kim{ 1519*735d6239SKiyoung Kim $opt_debug 1520*735d6239SKiyoung Kim # unfortunately, winepath doesn't convert paths, only file names 1521*735d6239SKiyoung Kim func_convert_core_path_wine_to_w32_result="" 1522*735d6239SKiyoung Kim if test -n "$1"; then 1523*735d6239SKiyoung Kim oldIFS=$IFS 1524*735d6239SKiyoung Kim IFS=: 1525*735d6239SKiyoung Kim for func_convert_core_path_wine_to_w32_f in $1; do 1526*735d6239SKiyoung Kim IFS=$oldIFS 1527*735d6239SKiyoung Kim func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 1528*735d6239SKiyoung Kim if test -n "$func_convert_core_file_wine_to_w32_result" ; then 1529*735d6239SKiyoung Kim if test -z "$func_convert_core_path_wine_to_w32_result"; then 1530*735d6239SKiyoung Kim func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 1531*735d6239SKiyoung Kim else 1532*735d6239SKiyoung Kim func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 1533*735d6239SKiyoung Kim fi 1534*735d6239SKiyoung Kim fi 1535*735d6239SKiyoung Kim done 1536*735d6239SKiyoung Kim IFS=$oldIFS 1537*735d6239SKiyoung Kim fi 1538*735d6239SKiyoung Kim} 1539*735d6239SKiyoung Kim# end: func_convert_core_path_wine_to_w32 1540*735d6239SKiyoung Kim 1541*735d6239SKiyoung Kim 1542*735d6239SKiyoung Kim# func_cygpath ARGS... 1543*735d6239SKiyoung Kim# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 1544*735d6239SKiyoung Kim# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 1545*735d6239SKiyoung Kim# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 1546*735d6239SKiyoung Kim# (2), returns the Cygwin file name or path in func_cygpath_result (input 1547*735d6239SKiyoung Kim# file name or path is assumed to be in w32 format, as previously converted 1548*735d6239SKiyoung Kim# from $build's *nix or MSYS format). In case (3), returns the w32 file name 1549*735d6239SKiyoung Kim# or path in func_cygpath_result (input file name or path is assumed to be in 1550*735d6239SKiyoung Kim# Cygwin format). Returns an empty string on error. 1551*735d6239SKiyoung Kim# 1552*735d6239SKiyoung Kim# ARGS are passed to cygpath, with the last one being the file name or path to 1553*735d6239SKiyoung Kim# be converted. 1554*735d6239SKiyoung Kim# 1555*735d6239SKiyoung Kim# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 1556*735d6239SKiyoung Kim# environment variable; do not put it in $PATH. 1557*735d6239SKiyoung Kimfunc_cygpath () 1558*735d6239SKiyoung Kim{ 1559*735d6239SKiyoung Kim $opt_debug 1560*735d6239SKiyoung Kim if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 1561*735d6239SKiyoung Kim func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 1562*735d6239SKiyoung Kim if test "$?" -ne 0; then 1563*735d6239SKiyoung Kim # on failure, ensure result is empty 1564*735d6239SKiyoung Kim func_cygpath_result= 1565*735d6239SKiyoung Kim fi 1566*735d6239SKiyoung Kim else 1567*735d6239SKiyoung Kim func_cygpath_result= 1568*735d6239SKiyoung Kim func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 1569*735d6239SKiyoung Kim fi 1570*735d6239SKiyoung Kim} 1571*735d6239SKiyoung Kim#end: func_cygpath 1572*735d6239SKiyoung Kim 1573*735d6239SKiyoung Kim 1574*735d6239SKiyoung Kim# func_convert_core_msys_to_w32 ARG 1575*735d6239SKiyoung Kim# Convert file name or path ARG from MSYS format to w32 format. Return 1576*735d6239SKiyoung Kim# result in func_convert_core_msys_to_w32_result. 1577*735d6239SKiyoung Kimfunc_convert_core_msys_to_w32 () 1578*735d6239SKiyoung Kim{ 1579*735d6239SKiyoung Kim $opt_debug 1580*735d6239SKiyoung Kim # awkward: cmd appends spaces to result 1581*735d6239SKiyoung Kim func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 1582*735d6239SKiyoung Kim $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 1583*735d6239SKiyoung Kim} 1584*735d6239SKiyoung Kim#end: func_convert_core_msys_to_w32 1585*735d6239SKiyoung Kim 1586*735d6239SKiyoung Kim 1587*735d6239SKiyoung Kim# func_convert_file_check ARG1 ARG2 1588*735d6239SKiyoung Kim# Verify that ARG1 (a file name in $build format) was converted to $host 1589*735d6239SKiyoung Kim# format in ARG2. Otherwise, emit an error message, but continue (resetting 1590*735d6239SKiyoung Kim# func_to_host_file_result to ARG1). 1591*735d6239SKiyoung Kimfunc_convert_file_check () 1592*735d6239SKiyoung Kim{ 1593*735d6239SKiyoung Kim $opt_debug 1594*735d6239SKiyoung Kim if test -z "$2" && test -n "$1" ; then 1595*735d6239SKiyoung Kim func_error "Could not determine host file name corresponding to" 1596*735d6239SKiyoung Kim func_error " \`$1'" 1597*735d6239SKiyoung Kim func_error "Continuing, but uninstalled executables may not work." 1598*735d6239SKiyoung Kim # Fallback: 1599*735d6239SKiyoung Kim func_to_host_file_result="$1" 1600*735d6239SKiyoung Kim fi 1601*735d6239SKiyoung Kim} 1602*735d6239SKiyoung Kim# end func_convert_file_check 1603*735d6239SKiyoung Kim 1604*735d6239SKiyoung Kim 1605*735d6239SKiyoung Kim# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 1606*735d6239SKiyoung Kim# Verify that FROM_PATH (a path in $build format) was converted to $host 1607*735d6239SKiyoung Kim# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 1608*735d6239SKiyoung Kim# func_to_host_file_result to a simplistic fallback value (see below). 1609*735d6239SKiyoung Kimfunc_convert_path_check () 1610*735d6239SKiyoung Kim{ 1611*735d6239SKiyoung Kim $opt_debug 1612*735d6239SKiyoung Kim if test -z "$4" && test -n "$3"; then 1613*735d6239SKiyoung Kim func_error "Could not determine the host path corresponding to" 1614*735d6239SKiyoung Kim func_error " \`$3'" 1615*735d6239SKiyoung Kim func_error "Continuing, but uninstalled executables may not work." 1616*735d6239SKiyoung Kim # Fallback. This is a deliberately simplistic "conversion" and 1617*735d6239SKiyoung Kim # should not be "improved". See libtool.info. 1618*735d6239SKiyoung Kim if test "x$1" != "x$2"; then 1619*735d6239SKiyoung Kim lt_replace_pathsep_chars="s|$1|$2|g" 1620*735d6239SKiyoung Kim func_to_host_path_result=`echo "$3" | 1621*735d6239SKiyoung Kim $SED -e "$lt_replace_pathsep_chars"` 1622*735d6239SKiyoung Kim else 1623*735d6239SKiyoung Kim func_to_host_path_result="$3" 1624*735d6239SKiyoung Kim fi 1625*735d6239SKiyoung Kim fi 1626*735d6239SKiyoung Kim} 1627*735d6239SKiyoung Kim# end func_convert_path_check 1628*735d6239SKiyoung Kim 1629*735d6239SKiyoung Kim 1630*735d6239SKiyoung Kim# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 1631*735d6239SKiyoung Kim# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 1632*735d6239SKiyoung Kim# and appending REPL if ORIG matches BACKPAT. 1633*735d6239SKiyoung Kimfunc_convert_path_front_back_pathsep () 1634*735d6239SKiyoung Kim{ 1635*735d6239SKiyoung Kim $opt_debug 1636*735d6239SKiyoung Kim case $4 in 1637*735d6239SKiyoung Kim $1 ) func_to_host_path_result="$3$func_to_host_path_result" 1638*735d6239SKiyoung Kim ;; 1639*735d6239SKiyoung Kim esac 1640*735d6239SKiyoung Kim case $4 in 1641*735d6239SKiyoung Kim $2 ) func_append func_to_host_path_result "$3" 1642*735d6239SKiyoung Kim ;; 1643*735d6239SKiyoung Kim esac 1644*735d6239SKiyoung Kim} 1645*735d6239SKiyoung Kim# end func_convert_path_front_back_pathsep 1646*735d6239SKiyoung Kim 1647*735d6239SKiyoung Kim 1648*735d6239SKiyoung Kim################################################## 1649*735d6239SKiyoung Kim# $build to $host FILE NAME CONVERSION FUNCTIONS # 1650*735d6239SKiyoung Kim################################################## 1651*735d6239SKiyoung Kim# invoked via `$to_host_file_cmd ARG' 1652*735d6239SKiyoung Kim# 1653*735d6239SKiyoung Kim# In each case, ARG is the path to be converted from $build to $host format. 1654*735d6239SKiyoung Kim# Result will be available in $func_to_host_file_result. 1655*735d6239SKiyoung Kim 1656*735d6239SKiyoung Kim 1657*735d6239SKiyoung Kim# func_to_host_file ARG 1658*735d6239SKiyoung Kim# Converts the file name ARG from $build format to $host format. Return result 1659*735d6239SKiyoung Kim# in func_to_host_file_result. 1660*735d6239SKiyoung Kimfunc_to_host_file () 1661*735d6239SKiyoung Kim{ 1662*735d6239SKiyoung Kim $opt_debug 1663*735d6239SKiyoung Kim $to_host_file_cmd "$1" 1664*735d6239SKiyoung Kim} 1665*735d6239SKiyoung Kim# end func_to_host_file 1666*735d6239SKiyoung Kim 1667*735d6239SKiyoung Kim 1668*735d6239SKiyoung Kim# func_to_tool_file ARG LAZY 1669*735d6239SKiyoung Kim# converts the file name ARG from $build format to toolchain format. Return 1670*735d6239SKiyoung Kim# result in func_to_tool_file_result. If the conversion in use is listed 1671*735d6239SKiyoung Kim# in (the comma separated) LAZY, no conversion takes place. 1672*735d6239SKiyoung Kimfunc_to_tool_file () 1673*735d6239SKiyoung Kim{ 1674*735d6239SKiyoung Kim $opt_debug 1675*735d6239SKiyoung Kim case ,$2, in 1676*735d6239SKiyoung Kim *,"$to_tool_file_cmd",*) 1677*735d6239SKiyoung Kim func_to_tool_file_result=$1 1678*735d6239SKiyoung Kim ;; 1679*735d6239SKiyoung Kim *) 1680*735d6239SKiyoung Kim $to_tool_file_cmd "$1" 1681*735d6239SKiyoung Kim func_to_tool_file_result=$func_to_host_file_result 1682*735d6239SKiyoung Kim ;; 1683*735d6239SKiyoung Kim esac 1684*735d6239SKiyoung Kim} 1685*735d6239SKiyoung Kim# end func_to_tool_file 1686*735d6239SKiyoung Kim 1687*735d6239SKiyoung Kim 1688*735d6239SKiyoung Kim# func_convert_file_noop ARG 1689*735d6239SKiyoung Kim# Copy ARG to func_to_host_file_result. 1690*735d6239SKiyoung Kimfunc_convert_file_noop () 1691*735d6239SKiyoung Kim{ 1692*735d6239SKiyoung Kim func_to_host_file_result="$1" 1693*735d6239SKiyoung Kim} 1694*735d6239SKiyoung Kim# end func_convert_file_noop 1695*735d6239SKiyoung Kim 1696*735d6239SKiyoung Kim 1697*735d6239SKiyoung Kim# func_convert_file_msys_to_w32 ARG 1698*735d6239SKiyoung Kim# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 1699*735d6239SKiyoung Kim# conversion to w32 is not available inside the cwrapper. Returns result in 1700*735d6239SKiyoung Kim# func_to_host_file_result. 1701*735d6239SKiyoung Kimfunc_convert_file_msys_to_w32 () 1702*735d6239SKiyoung Kim{ 1703*735d6239SKiyoung Kim $opt_debug 1704*735d6239SKiyoung Kim func_to_host_file_result="$1" 1705*735d6239SKiyoung Kim if test -n "$1"; then 1706*735d6239SKiyoung Kim func_convert_core_msys_to_w32 "$1" 1707*735d6239SKiyoung Kim func_to_host_file_result="$func_convert_core_msys_to_w32_result" 1708*735d6239SKiyoung Kim fi 1709*735d6239SKiyoung Kim func_convert_file_check "$1" "$func_to_host_file_result" 1710*735d6239SKiyoung Kim} 1711*735d6239SKiyoung Kim# end func_convert_file_msys_to_w32 1712*735d6239SKiyoung Kim 1713*735d6239SKiyoung Kim 1714*735d6239SKiyoung Kim# func_convert_file_cygwin_to_w32 ARG 1715*735d6239SKiyoung Kim# Convert file name ARG from Cygwin to w32 format. Returns result in 1716*735d6239SKiyoung Kim# func_to_host_file_result. 1717*735d6239SKiyoung Kimfunc_convert_file_cygwin_to_w32 () 1718*735d6239SKiyoung Kim{ 1719*735d6239SKiyoung Kim $opt_debug 1720*735d6239SKiyoung Kim func_to_host_file_result="$1" 1721*735d6239SKiyoung Kim if test -n "$1"; then 1722*735d6239SKiyoung Kim # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 1723*735d6239SKiyoung Kim # LT_CYGPATH in this case. 1724*735d6239SKiyoung Kim func_to_host_file_result=`cygpath -m "$1"` 1725*735d6239SKiyoung Kim fi 1726*735d6239SKiyoung Kim func_convert_file_check "$1" "$func_to_host_file_result" 1727*735d6239SKiyoung Kim} 1728*735d6239SKiyoung Kim# end func_convert_file_cygwin_to_w32 1729*735d6239SKiyoung Kim 1730*735d6239SKiyoung Kim 1731*735d6239SKiyoung Kim# func_convert_file_nix_to_w32 ARG 1732*735d6239SKiyoung Kim# Convert file name ARG from *nix to w32 format. Requires a wine environment 1733*735d6239SKiyoung Kim# and a working winepath. Returns result in func_to_host_file_result. 1734*735d6239SKiyoung Kimfunc_convert_file_nix_to_w32 () 1735*735d6239SKiyoung Kim{ 1736*735d6239SKiyoung Kim $opt_debug 1737*735d6239SKiyoung Kim func_to_host_file_result="$1" 1738*735d6239SKiyoung Kim if test -n "$1"; then 1739*735d6239SKiyoung Kim func_convert_core_file_wine_to_w32 "$1" 1740*735d6239SKiyoung Kim func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 1741*735d6239SKiyoung Kim fi 1742*735d6239SKiyoung Kim func_convert_file_check "$1" "$func_to_host_file_result" 1743*735d6239SKiyoung Kim} 1744*735d6239SKiyoung Kim# end func_convert_file_nix_to_w32 1745*735d6239SKiyoung Kim 1746*735d6239SKiyoung Kim 1747*735d6239SKiyoung Kim# func_convert_file_msys_to_cygwin ARG 1748*735d6239SKiyoung Kim# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1749*735d6239SKiyoung Kim# Returns result in func_to_host_file_result. 1750*735d6239SKiyoung Kimfunc_convert_file_msys_to_cygwin () 1751*735d6239SKiyoung Kim{ 1752*735d6239SKiyoung Kim $opt_debug 1753*735d6239SKiyoung Kim func_to_host_file_result="$1" 1754*735d6239SKiyoung Kim if test -n "$1"; then 1755*735d6239SKiyoung Kim func_convert_core_msys_to_w32 "$1" 1756*735d6239SKiyoung Kim func_cygpath -u "$func_convert_core_msys_to_w32_result" 1757*735d6239SKiyoung Kim func_to_host_file_result="$func_cygpath_result" 1758*735d6239SKiyoung Kim fi 1759*735d6239SKiyoung Kim func_convert_file_check "$1" "$func_to_host_file_result" 1760*735d6239SKiyoung Kim} 1761*735d6239SKiyoung Kim# end func_convert_file_msys_to_cygwin 1762*735d6239SKiyoung Kim 1763*735d6239SKiyoung Kim 1764*735d6239SKiyoung Kim# func_convert_file_nix_to_cygwin ARG 1765*735d6239SKiyoung Kim# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 1766*735d6239SKiyoung Kim# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 1767*735d6239SKiyoung Kim# in func_to_host_file_result. 1768*735d6239SKiyoung Kimfunc_convert_file_nix_to_cygwin () 1769*735d6239SKiyoung Kim{ 1770*735d6239SKiyoung Kim $opt_debug 1771*735d6239SKiyoung Kim func_to_host_file_result="$1" 1772*735d6239SKiyoung Kim if test -n "$1"; then 1773*735d6239SKiyoung Kim # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 1774*735d6239SKiyoung Kim func_convert_core_file_wine_to_w32 "$1" 1775*735d6239SKiyoung Kim func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 1776*735d6239SKiyoung Kim func_to_host_file_result="$func_cygpath_result" 1777*735d6239SKiyoung Kim fi 1778*735d6239SKiyoung Kim func_convert_file_check "$1" "$func_to_host_file_result" 1779*735d6239SKiyoung Kim} 1780*735d6239SKiyoung Kim# end func_convert_file_nix_to_cygwin 1781*735d6239SKiyoung Kim 1782*735d6239SKiyoung Kim 1783*735d6239SKiyoung Kim############################################# 1784*735d6239SKiyoung Kim# $build to $host PATH CONVERSION FUNCTIONS # 1785*735d6239SKiyoung Kim############################################# 1786*735d6239SKiyoung Kim# invoked via `$to_host_path_cmd ARG' 1787*735d6239SKiyoung Kim# 1788*735d6239SKiyoung Kim# In each case, ARG is the path to be converted from $build to $host format. 1789*735d6239SKiyoung Kim# The result will be available in $func_to_host_path_result. 1790*735d6239SKiyoung Kim# 1791*735d6239SKiyoung Kim# Path separators are also converted from $build format to $host format. If 1792*735d6239SKiyoung Kim# ARG begins or ends with a path separator character, it is preserved (but 1793*735d6239SKiyoung Kim# converted to $host format) on output. 1794*735d6239SKiyoung Kim# 1795*735d6239SKiyoung Kim# All path conversion functions are named using the following convention: 1796*735d6239SKiyoung Kim# file name conversion function : func_convert_file_X_to_Y () 1797*735d6239SKiyoung Kim# path conversion function : func_convert_path_X_to_Y () 1798*735d6239SKiyoung Kim# where, for any given $build/$host combination the 'X_to_Y' value is the 1799*735d6239SKiyoung Kim# same. If conversion functions are added for new $build/$host combinations, 1800*735d6239SKiyoung Kim# the two new functions must follow this pattern, or func_init_to_host_path_cmd 1801*735d6239SKiyoung Kim# will break. 1802*735d6239SKiyoung Kim 1803*735d6239SKiyoung Kim 1804*735d6239SKiyoung Kim# func_init_to_host_path_cmd 1805*735d6239SKiyoung Kim# Ensures that function "pointer" variable $to_host_path_cmd is set to the 1806*735d6239SKiyoung Kim# appropriate value, based on the value of $to_host_file_cmd. 1807*735d6239SKiyoung Kimto_host_path_cmd= 1808*735d6239SKiyoung Kimfunc_init_to_host_path_cmd () 1809*735d6239SKiyoung Kim{ 1810*735d6239SKiyoung Kim $opt_debug 1811*735d6239SKiyoung Kim if test -z "$to_host_path_cmd"; then 1812*735d6239SKiyoung Kim func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 1813*735d6239SKiyoung Kim to_host_path_cmd="func_convert_path_${func_stripname_result}" 1814*735d6239SKiyoung Kim fi 1815*735d6239SKiyoung Kim} 1816*735d6239SKiyoung Kim 1817*735d6239SKiyoung Kim 1818*735d6239SKiyoung Kim# func_to_host_path ARG 1819*735d6239SKiyoung Kim# Converts the path ARG from $build format to $host format. Return result 1820*735d6239SKiyoung Kim# in func_to_host_path_result. 1821*735d6239SKiyoung Kimfunc_to_host_path () 1822*735d6239SKiyoung Kim{ 1823*735d6239SKiyoung Kim $opt_debug 1824*735d6239SKiyoung Kim func_init_to_host_path_cmd 1825*735d6239SKiyoung Kim $to_host_path_cmd "$1" 1826*735d6239SKiyoung Kim} 1827*735d6239SKiyoung Kim# end func_to_host_path 1828*735d6239SKiyoung Kim 1829*735d6239SKiyoung Kim 1830*735d6239SKiyoung Kim# func_convert_path_noop ARG 1831*735d6239SKiyoung Kim# Copy ARG to func_to_host_path_result. 1832*735d6239SKiyoung Kimfunc_convert_path_noop () 1833*735d6239SKiyoung Kim{ 1834*735d6239SKiyoung Kim func_to_host_path_result="$1" 1835*735d6239SKiyoung Kim} 1836*735d6239SKiyoung Kim# end func_convert_path_noop 1837*735d6239SKiyoung Kim 1838*735d6239SKiyoung Kim 1839*735d6239SKiyoung Kim# func_convert_path_msys_to_w32 ARG 1840*735d6239SKiyoung Kim# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 1841*735d6239SKiyoung Kim# conversion to w32 is not available inside the cwrapper. Returns result in 1842*735d6239SKiyoung Kim# func_to_host_path_result. 1843*735d6239SKiyoung Kimfunc_convert_path_msys_to_w32 () 1844*735d6239SKiyoung Kim{ 1845*735d6239SKiyoung Kim $opt_debug 1846*735d6239SKiyoung Kim func_to_host_path_result="$1" 1847*735d6239SKiyoung Kim if test -n "$1"; then 1848*735d6239SKiyoung Kim # Remove leading and trailing path separator characters from ARG. MSYS 1849*735d6239SKiyoung Kim # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 1850*735d6239SKiyoung Kim # and winepath ignores them completely. 1851*735d6239SKiyoung Kim func_stripname : : "$1" 1852*735d6239SKiyoung Kim func_to_host_path_tmp1=$func_stripname_result 1853*735d6239SKiyoung Kim func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1854*735d6239SKiyoung Kim func_to_host_path_result="$func_convert_core_msys_to_w32_result" 1855*735d6239SKiyoung Kim func_convert_path_check : ";" \ 1856*735d6239SKiyoung Kim "$func_to_host_path_tmp1" "$func_to_host_path_result" 1857*735d6239SKiyoung Kim func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1858*735d6239SKiyoung Kim fi 1859*735d6239SKiyoung Kim} 1860*735d6239SKiyoung Kim# end func_convert_path_msys_to_w32 1861*735d6239SKiyoung Kim 1862*735d6239SKiyoung Kim 1863*735d6239SKiyoung Kim# func_convert_path_cygwin_to_w32 ARG 1864*735d6239SKiyoung Kim# Convert path ARG from Cygwin to w32 format. Returns result in 1865*735d6239SKiyoung Kim# func_to_host_file_result. 1866*735d6239SKiyoung Kimfunc_convert_path_cygwin_to_w32 () 1867*735d6239SKiyoung Kim{ 1868*735d6239SKiyoung Kim $opt_debug 1869*735d6239SKiyoung Kim func_to_host_path_result="$1" 1870*735d6239SKiyoung Kim if test -n "$1"; then 1871*735d6239SKiyoung Kim # See func_convert_path_msys_to_w32: 1872*735d6239SKiyoung Kim func_stripname : : "$1" 1873*735d6239SKiyoung Kim func_to_host_path_tmp1=$func_stripname_result 1874*735d6239SKiyoung Kim func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 1875*735d6239SKiyoung Kim func_convert_path_check : ";" \ 1876*735d6239SKiyoung Kim "$func_to_host_path_tmp1" "$func_to_host_path_result" 1877*735d6239SKiyoung Kim func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1878*735d6239SKiyoung Kim fi 1879*735d6239SKiyoung Kim} 1880*735d6239SKiyoung Kim# end func_convert_path_cygwin_to_w32 1881*735d6239SKiyoung Kim 1882*735d6239SKiyoung Kim 1883*735d6239SKiyoung Kim# func_convert_path_nix_to_w32 ARG 1884*735d6239SKiyoung Kim# Convert path ARG from *nix to w32 format. Requires a wine environment and 1885*735d6239SKiyoung Kim# a working winepath. Returns result in func_to_host_file_result. 1886*735d6239SKiyoung Kimfunc_convert_path_nix_to_w32 () 1887*735d6239SKiyoung Kim{ 1888*735d6239SKiyoung Kim $opt_debug 1889*735d6239SKiyoung Kim func_to_host_path_result="$1" 1890*735d6239SKiyoung Kim if test -n "$1"; then 1891*735d6239SKiyoung Kim # See func_convert_path_msys_to_w32: 1892*735d6239SKiyoung Kim func_stripname : : "$1" 1893*735d6239SKiyoung Kim func_to_host_path_tmp1=$func_stripname_result 1894*735d6239SKiyoung Kim func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1895*735d6239SKiyoung Kim func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 1896*735d6239SKiyoung Kim func_convert_path_check : ";" \ 1897*735d6239SKiyoung Kim "$func_to_host_path_tmp1" "$func_to_host_path_result" 1898*735d6239SKiyoung Kim func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1899*735d6239SKiyoung Kim fi 1900*735d6239SKiyoung Kim} 1901*735d6239SKiyoung Kim# end func_convert_path_nix_to_w32 1902*735d6239SKiyoung Kim 1903*735d6239SKiyoung Kim 1904*735d6239SKiyoung Kim# func_convert_path_msys_to_cygwin ARG 1905*735d6239SKiyoung Kim# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1906*735d6239SKiyoung Kim# Returns result in func_to_host_file_result. 1907*735d6239SKiyoung Kimfunc_convert_path_msys_to_cygwin () 1908*735d6239SKiyoung Kim{ 1909*735d6239SKiyoung Kim $opt_debug 1910*735d6239SKiyoung Kim func_to_host_path_result="$1" 1911*735d6239SKiyoung Kim if test -n "$1"; then 1912*735d6239SKiyoung Kim # See func_convert_path_msys_to_w32: 1913*735d6239SKiyoung Kim func_stripname : : "$1" 1914*735d6239SKiyoung Kim func_to_host_path_tmp1=$func_stripname_result 1915*735d6239SKiyoung Kim func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1916*735d6239SKiyoung Kim func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 1917*735d6239SKiyoung Kim func_to_host_path_result="$func_cygpath_result" 1918*735d6239SKiyoung Kim func_convert_path_check : : \ 1919*735d6239SKiyoung Kim "$func_to_host_path_tmp1" "$func_to_host_path_result" 1920*735d6239SKiyoung Kim func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1921*735d6239SKiyoung Kim fi 1922*735d6239SKiyoung Kim} 1923*735d6239SKiyoung Kim# end func_convert_path_msys_to_cygwin 1924*735d6239SKiyoung Kim 1925*735d6239SKiyoung Kim 1926*735d6239SKiyoung Kim# func_convert_path_nix_to_cygwin ARG 1927*735d6239SKiyoung Kim# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 1928*735d6239SKiyoung Kim# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 1929*735d6239SKiyoung Kim# func_to_host_file_result. 1930*735d6239SKiyoung Kimfunc_convert_path_nix_to_cygwin () 1931*735d6239SKiyoung Kim{ 1932*735d6239SKiyoung Kim $opt_debug 1933*735d6239SKiyoung Kim func_to_host_path_result="$1" 1934*735d6239SKiyoung Kim if test -n "$1"; then 1935*735d6239SKiyoung Kim # Remove leading and trailing path separator characters from 1936*735d6239SKiyoung Kim # ARG. msys behavior is inconsistent here, cygpath turns them 1937*735d6239SKiyoung Kim # into '.;' and ';.', and winepath ignores them completely. 1938*735d6239SKiyoung Kim func_stripname : : "$1" 1939*735d6239SKiyoung Kim func_to_host_path_tmp1=$func_stripname_result 1940*735d6239SKiyoung Kim func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1941*735d6239SKiyoung Kim func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 1942*735d6239SKiyoung Kim func_to_host_path_result="$func_cygpath_result" 1943*735d6239SKiyoung Kim func_convert_path_check : : \ 1944*735d6239SKiyoung Kim "$func_to_host_path_tmp1" "$func_to_host_path_result" 1945*735d6239SKiyoung Kim func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1946*735d6239SKiyoung Kim fi 1947*735d6239SKiyoung Kim} 1948*735d6239SKiyoung Kim# end func_convert_path_nix_to_cygwin 1949*735d6239SKiyoung Kim 1950*735d6239SKiyoung Kim 1951*735d6239SKiyoung Kim# func_mode_compile arg... 1952*735d6239SKiyoung Kimfunc_mode_compile () 1953*735d6239SKiyoung Kim{ 1954*735d6239SKiyoung Kim $opt_debug 1955*735d6239SKiyoung Kim # Get the compilation command and the source file. 1956*735d6239SKiyoung Kim base_compile= 1957*735d6239SKiyoung Kim srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1958*735d6239SKiyoung Kim suppress_opt=yes 1959*735d6239SKiyoung Kim suppress_output= 1960*735d6239SKiyoung Kim arg_mode=normal 1961*735d6239SKiyoung Kim libobj= 1962*735d6239SKiyoung Kim later= 1963*735d6239SKiyoung Kim pie_flag= 1964*735d6239SKiyoung Kim 1965*735d6239SKiyoung Kim for arg 1966*735d6239SKiyoung Kim do 1967*735d6239SKiyoung Kim case $arg_mode in 1968*735d6239SKiyoung Kim arg ) 1969*735d6239SKiyoung Kim # do not "continue". Instead, add this to base_compile 1970*735d6239SKiyoung Kim lastarg="$arg" 1971*735d6239SKiyoung Kim arg_mode=normal 1972*735d6239SKiyoung Kim ;; 1973*735d6239SKiyoung Kim 1974*735d6239SKiyoung Kim target ) 1975*735d6239SKiyoung Kim libobj="$arg" 1976*735d6239SKiyoung Kim arg_mode=normal 1977*735d6239SKiyoung Kim continue 1978*735d6239SKiyoung Kim ;; 1979*735d6239SKiyoung Kim 1980*735d6239SKiyoung Kim normal ) 1981*735d6239SKiyoung Kim # Accept any command-line options. 1982*735d6239SKiyoung Kim case $arg in 1983*735d6239SKiyoung Kim -o) 1984*735d6239SKiyoung Kim test -n "$libobj" && \ 1985*735d6239SKiyoung Kim func_fatal_error "you cannot specify \`-o' more than once" 1986*735d6239SKiyoung Kim arg_mode=target 1987*735d6239SKiyoung Kim continue 1988*735d6239SKiyoung Kim ;; 1989*735d6239SKiyoung Kim 1990*735d6239SKiyoung Kim -pie | -fpie | -fPIE) 1991*735d6239SKiyoung Kim func_append pie_flag " $arg" 1992*735d6239SKiyoung Kim continue 1993*735d6239SKiyoung Kim ;; 1994*735d6239SKiyoung Kim 1995*735d6239SKiyoung Kim -shared | -static | -prefer-pic | -prefer-non-pic) 1996*735d6239SKiyoung Kim func_append later " $arg" 1997*735d6239SKiyoung Kim continue 1998*735d6239SKiyoung Kim ;; 1999*735d6239SKiyoung Kim 2000*735d6239SKiyoung Kim -no-suppress) 2001*735d6239SKiyoung Kim suppress_opt=no 2002*735d6239SKiyoung Kim continue 2003*735d6239SKiyoung Kim ;; 2004*735d6239SKiyoung Kim 2005*735d6239SKiyoung Kim -Xcompiler) 2006*735d6239SKiyoung Kim arg_mode=arg # the next one goes into the "base_compile" arg list 2007*735d6239SKiyoung Kim continue # The current "srcfile" will either be retained or 2008*735d6239SKiyoung Kim ;; # replaced later. I would guess that would be a bug. 2009*735d6239SKiyoung Kim 2010*735d6239SKiyoung Kim -Wc,*) 2011*735d6239SKiyoung Kim func_stripname '-Wc,' '' "$arg" 2012*735d6239SKiyoung Kim args=$func_stripname_result 2013*735d6239SKiyoung Kim lastarg= 2014*735d6239SKiyoung Kim save_ifs="$IFS"; IFS=',' 2015*735d6239SKiyoung Kim for arg in $args; do 2016*735d6239SKiyoung Kim IFS="$save_ifs" 2017*735d6239SKiyoung Kim func_append_quoted lastarg "$arg" 2018*735d6239SKiyoung Kim done 2019*735d6239SKiyoung Kim IFS="$save_ifs" 2020*735d6239SKiyoung Kim func_stripname ' ' '' "$lastarg" 2021*735d6239SKiyoung Kim lastarg=$func_stripname_result 2022*735d6239SKiyoung Kim 2023*735d6239SKiyoung Kim # Add the arguments to base_compile. 2024*735d6239SKiyoung Kim func_append base_compile " $lastarg" 2025*735d6239SKiyoung Kim continue 2026*735d6239SKiyoung Kim ;; 2027*735d6239SKiyoung Kim 2028*735d6239SKiyoung Kim *) 2029*735d6239SKiyoung Kim # Accept the current argument as the source file. 2030*735d6239SKiyoung Kim # The previous "srcfile" becomes the current argument. 2031*735d6239SKiyoung Kim # 2032*735d6239SKiyoung Kim lastarg="$srcfile" 2033*735d6239SKiyoung Kim srcfile="$arg" 2034*735d6239SKiyoung Kim ;; 2035*735d6239SKiyoung Kim esac # case $arg 2036*735d6239SKiyoung Kim ;; 2037*735d6239SKiyoung Kim esac # case $arg_mode 2038*735d6239SKiyoung Kim 2039*735d6239SKiyoung Kim # Aesthetically quote the previous argument. 2040*735d6239SKiyoung Kim func_append_quoted base_compile "$lastarg" 2041*735d6239SKiyoung Kim done # for arg 2042*735d6239SKiyoung Kim 2043*735d6239SKiyoung Kim case $arg_mode in 2044*735d6239SKiyoung Kim arg) 2045*735d6239SKiyoung Kim func_fatal_error "you must specify an argument for -Xcompile" 2046*735d6239SKiyoung Kim ;; 2047*735d6239SKiyoung Kim target) 2048*735d6239SKiyoung Kim func_fatal_error "you must specify a target with \`-o'" 2049*735d6239SKiyoung Kim ;; 2050*735d6239SKiyoung Kim *) 2051*735d6239SKiyoung Kim # Get the name of the library object. 2052*735d6239SKiyoung Kim test -z "$libobj" && { 2053*735d6239SKiyoung Kim func_basename "$srcfile" 2054*735d6239SKiyoung Kim libobj="$func_basename_result" 2055*735d6239SKiyoung Kim } 2056*735d6239SKiyoung Kim ;; 2057*735d6239SKiyoung Kim esac 2058*735d6239SKiyoung Kim 2059*735d6239SKiyoung Kim # Recognize several different file suffixes. 2060*735d6239SKiyoung Kim # If the user specifies -o file.o, it is replaced with file.lo 2061*735d6239SKiyoung Kim case $libobj in 2062*735d6239SKiyoung Kim *.[cCFSifmso] | \ 2063*735d6239SKiyoung Kim *.ada | *.adb | *.ads | *.asm | \ 2064*735d6239SKiyoung Kim *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2065*735d6239SKiyoung Kim *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) 2066*735d6239SKiyoung Kim func_xform "$libobj" 2067*735d6239SKiyoung Kim libobj=$func_xform_result 2068*735d6239SKiyoung Kim ;; 2069*735d6239SKiyoung Kim esac 2070*735d6239SKiyoung Kim 2071*735d6239SKiyoung Kim case $libobj in 2072*735d6239SKiyoung Kim *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2073*735d6239SKiyoung Kim *) 2074*735d6239SKiyoung Kim func_fatal_error "cannot determine name of library object from \`$libobj'" 2075*735d6239SKiyoung Kim ;; 2076*735d6239SKiyoung Kim esac 2077*735d6239SKiyoung Kim 2078*735d6239SKiyoung Kim func_infer_tag $base_compile 2079*735d6239SKiyoung Kim 2080*735d6239SKiyoung Kim for arg in $later; do 2081*735d6239SKiyoung Kim case $arg in 2082*735d6239SKiyoung Kim -shared) 2083*735d6239SKiyoung Kim test "$build_libtool_libs" != yes && \ 2084*735d6239SKiyoung Kim func_fatal_configuration "can not build a shared library" 2085*735d6239SKiyoung Kim build_old_libs=no 2086*735d6239SKiyoung Kim continue 2087*735d6239SKiyoung Kim ;; 2088*735d6239SKiyoung Kim 2089*735d6239SKiyoung Kim -static) 2090*735d6239SKiyoung Kim build_libtool_libs=no 2091*735d6239SKiyoung Kim build_old_libs=yes 2092*735d6239SKiyoung Kim continue 2093*735d6239SKiyoung Kim ;; 2094*735d6239SKiyoung Kim 2095*735d6239SKiyoung Kim -prefer-pic) 2096*735d6239SKiyoung Kim pic_mode=yes 2097*735d6239SKiyoung Kim continue 2098*735d6239SKiyoung Kim ;; 2099*735d6239SKiyoung Kim 2100*735d6239SKiyoung Kim -prefer-non-pic) 2101*735d6239SKiyoung Kim pic_mode=no 2102*735d6239SKiyoung Kim continue 2103*735d6239SKiyoung Kim ;; 2104*735d6239SKiyoung Kim esac 2105*735d6239SKiyoung Kim done 2106*735d6239SKiyoung Kim 2107*735d6239SKiyoung Kim func_quote_for_eval "$libobj" 2108*735d6239SKiyoung Kim test "X$libobj" != "X$func_quote_for_eval_result" \ 2109*735d6239SKiyoung Kim && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2110*735d6239SKiyoung Kim && func_warning "libobj name \`$libobj' may not contain shell special characters." 2111*735d6239SKiyoung Kim func_dirname_and_basename "$obj" "/" "" 2112*735d6239SKiyoung Kim objname="$func_basename_result" 2113*735d6239SKiyoung Kim xdir="$func_dirname_result" 2114*735d6239SKiyoung Kim lobj=${xdir}$objdir/$objname 2115*735d6239SKiyoung Kim 2116*735d6239SKiyoung Kim test -z "$base_compile" && \ 2117*735d6239SKiyoung Kim func_fatal_help "you must specify a compilation command" 2118*735d6239SKiyoung Kim 2119*735d6239SKiyoung Kim # Delete any leftover library objects. 2120*735d6239SKiyoung Kim if test "$build_old_libs" = yes; then 2121*735d6239SKiyoung Kim removelist="$obj $lobj $libobj ${libobj}T" 2122*735d6239SKiyoung Kim else 2123*735d6239SKiyoung Kim removelist="$lobj $libobj ${libobj}T" 2124*735d6239SKiyoung Kim fi 2125*735d6239SKiyoung Kim 2126*735d6239SKiyoung Kim # On Cygwin there's no "real" PIC flag so we must build both object types 2127*735d6239SKiyoung Kim case $host_os in 2128*735d6239SKiyoung Kim cygwin* | mingw* | pw32* | os2* | cegcc*) 2129*735d6239SKiyoung Kim pic_mode=default 2130*735d6239SKiyoung Kim ;; 2131*735d6239SKiyoung Kim esac 2132*735d6239SKiyoung Kim if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2133*735d6239SKiyoung Kim # non-PIC code in shared libraries is not supported 2134*735d6239SKiyoung Kim pic_mode=default 2135*735d6239SKiyoung Kim fi 2136*735d6239SKiyoung Kim 2137*735d6239SKiyoung Kim # Calculate the filename of the output object if compiler does 2138*735d6239SKiyoung Kim # not support -o with -c 2139*735d6239SKiyoung Kim if test "$compiler_c_o" = no; then 2140*735d6239SKiyoung Kim output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2141*735d6239SKiyoung Kim lockfile="$output_obj.lock" 2142*735d6239SKiyoung Kim else 2143*735d6239SKiyoung Kim output_obj= 2144*735d6239SKiyoung Kim need_locks=no 2145*735d6239SKiyoung Kim lockfile= 2146*735d6239SKiyoung Kim fi 2147*735d6239SKiyoung Kim 2148*735d6239SKiyoung Kim # Lock this critical section if it is needed 2149*735d6239SKiyoung Kim # We use this script file to make the link, it avoids creating a new file 2150*735d6239SKiyoung Kim if test "$need_locks" = yes; then 2151*735d6239SKiyoung Kim until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2152*735d6239SKiyoung Kim func_echo "Waiting for $lockfile to be removed" 2153*735d6239SKiyoung Kim sleep 2 2154*735d6239SKiyoung Kim done 2155*735d6239SKiyoung Kim elif test "$need_locks" = warn; then 2156*735d6239SKiyoung Kim if test -f "$lockfile"; then 2157*735d6239SKiyoung Kim $ECHO "\ 2158*735d6239SKiyoung Kim*** ERROR, $lockfile exists and contains: 2159*735d6239SKiyoung Kim`cat $lockfile 2>/dev/null` 2160*735d6239SKiyoung Kim 2161*735d6239SKiyoung KimThis indicates that another process is trying to use the same 2162*735d6239SKiyoung Kimtemporary object file, and libtool could not work around it because 2163*735d6239SKiyoung Kimyour compiler does not support \`-c' and \`-o' together. If you 2164*735d6239SKiyoung Kimrepeat this compilation, it may succeed, by chance, but you had better 2165*735d6239SKiyoung Kimavoid parallel builds (make -j) in this platform, or get a better 2166*735d6239SKiyoung Kimcompiler." 2167*735d6239SKiyoung Kim 2168*735d6239SKiyoung Kim $opt_dry_run || $RM $removelist 2169*735d6239SKiyoung Kim exit $EXIT_FAILURE 2170*735d6239SKiyoung Kim fi 2171*735d6239SKiyoung Kim func_append removelist " $output_obj" 2172*735d6239SKiyoung Kim $ECHO "$srcfile" > "$lockfile" 2173*735d6239SKiyoung Kim fi 2174*735d6239SKiyoung Kim 2175*735d6239SKiyoung Kim $opt_dry_run || $RM $removelist 2176*735d6239SKiyoung Kim func_append removelist " $lockfile" 2177*735d6239SKiyoung Kim trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2178*735d6239SKiyoung Kim 2179*735d6239SKiyoung Kim func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 2180*735d6239SKiyoung Kim srcfile=$func_to_tool_file_result 2181*735d6239SKiyoung Kim func_quote_for_eval "$srcfile" 2182*735d6239SKiyoung Kim qsrcfile=$func_quote_for_eval_result 2183*735d6239SKiyoung Kim 2184*735d6239SKiyoung Kim # Only build a PIC object if we are building libtool libraries. 2185*735d6239SKiyoung Kim if test "$build_libtool_libs" = yes; then 2186*735d6239SKiyoung Kim # Without this assignment, base_compile gets emptied. 2187*735d6239SKiyoung Kim fbsd_hideous_sh_bug=$base_compile 2188*735d6239SKiyoung Kim 2189*735d6239SKiyoung Kim if test "$pic_mode" != no; then 2190*735d6239SKiyoung Kim command="$base_compile $qsrcfile $pic_flag" 2191*735d6239SKiyoung Kim else 2192*735d6239SKiyoung Kim # Don't build PIC code 2193*735d6239SKiyoung Kim command="$base_compile $qsrcfile" 2194*735d6239SKiyoung Kim fi 2195*735d6239SKiyoung Kim 2196*735d6239SKiyoung Kim func_mkdir_p "$xdir$objdir" 2197*735d6239SKiyoung Kim 2198*735d6239SKiyoung Kim if test -z "$output_obj"; then 2199*735d6239SKiyoung Kim # Place PIC objects in $objdir 2200*735d6239SKiyoung Kim func_append command " -o $lobj" 2201*735d6239SKiyoung Kim fi 2202*735d6239SKiyoung Kim 2203*735d6239SKiyoung Kim func_show_eval_locale "$command" \ 2204*735d6239SKiyoung Kim 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2205*735d6239SKiyoung Kim 2206*735d6239SKiyoung Kim if test "$need_locks" = warn && 2207*735d6239SKiyoung Kim test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2208*735d6239SKiyoung Kim $ECHO "\ 2209*735d6239SKiyoung Kim*** ERROR, $lockfile contains: 2210*735d6239SKiyoung Kim`cat $lockfile 2>/dev/null` 2211*735d6239SKiyoung Kim 2212*735d6239SKiyoung Kimbut it should contain: 2213*735d6239SKiyoung Kim$srcfile 2214*735d6239SKiyoung Kim 2215*735d6239SKiyoung KimThis indicates that another process is trying to use the same 2216*735d6239SKiyoung Kimtemporary object file, and libtool could not work around it because 2217*735d6239SKiyoung Kimyour compiler does not support \`-c' and \`-o' together. If you 2218*735d6239SKiyoung Kimrepeat this compilation, it may succeed, by chance, but you had better 2219*735d6239SKiyoung Kimavoid parallel builds (make -j) in this platform, or get a better 2220*735d6239SKiyoung Kimcompiler." 2221*735d6239SKiyoung Kim 2222*735d6239SKiyoung Kim $opt_dry_run || $RM $removelist 2223*735d6239SKiyoung Kim exit $EXIT_FAILURE 2224*735d6239SKiyoung Kim fi 2225*735d6239SKiyoung Kim 2226*735d6239SKiyoung Kim # Just move the object if needed, then go on to compile the next one 2227*735d6239SKiyoung Kim if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2228*735d6239SKiyoung Kim func_show_eval '$MV "$output_obj" "$lobj"' \ 2229*735d6239SKiyoung Kim 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2230*735d6239SKiyoung Kim fi 2231*735d6239SKiyoung Kim 2232*735d6239SKiyoung Kim # Allow error messages only from the first compilation. 2233*735d6239SKiyoung Kim if test "$suppress_opt" = yes; then 2234*735d6239SKiyoung Kim suppress_output=' >/dev/null 2>&1' 2235*735d6239SKiyoung Kim fi 2236*735d6239SKiyoung Kim fi 2237*735d6239SKiyoung Kim 2238*735d6239SKiyoung Kim # Only build a position-dependent object if we build old libraries. 2239*735d6239SKiyoung Kim if test "$build_old_libs" = yes; then 2240*735d6239SKiyoung Kim if test "$pic_mode" != yes; then 2241*735d6239SKiyoung Kim # Don't build PIC code 2242*735d6239SKiyoung Kim command="$base_compile $qsrcfile$pie_flag" 2243*735d6239SKiyoung Kim else 2244*735d6239SKiyoung Kim command="$base_compile $qsrcfile $pic_flag" 2245*735d6239SKiyoung Kim fi 2246*735d6239SKiyoung Kim if test "$compiler_c_o" = yes; then 2247*735d6239SKiyoung Kim func_append command " -o $obj" 2248*735d6239SKiyoung Kim fi 2249*735d6239SKiyoung Kim 2250*735d6239SKiyoung Kim # Suppress compiler output if we already did a PIC compilation. 2251*735d6239SKiyoung Kim func_append command "$suppress_output" 2252*735d6239SKiyoung Kim func_show_eval_locale "$command" \ 2253*735d6239SKiyoung Kim '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2254*735d6239SKiyoung Kim 2255*735d6239SKiyoung Kim if test "$need_locks" = warn && 2256*735d6239SKiyoung Kim test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2257*735d6239SKiyoung Kim $ECHO "\ 2258*735d6239SKiyoung Kim*** ERROR, $lockfile contains: 2259*735d6239SKiyoung Kim`cat $lockfile 2>/dev/null` 2260*735d6239SKiyoung Kim 2261*735d6239SKiyoung Kimbut it should contain: 2262*735d6239SKiyoung Kim$srcfile 2263*735d6239SKiyoung Kim 2264*735d6239SKiyoung KimThis indicates that another process is trying to use the same 2265*735d6239SKiyoung Kimtemporary object file, and libtool could not work around it because 2266*735d6239SKiyoung Kimyour compiler does not support \`-c' and \`-o' together. If you 2267*735d6239SKiyoung Kimrepeat this compilation, it may succeed, by chance, but you had better 2268*735d6239SKiyoung Kimavoid parallel builds (make -j) in this platform, or get a better 2269*735d6239SKiyoung Kimcompiler." 2270*735d6239SKiyoung Kim 2271*735d6239SKiyoung Kim $opt_dry_run || $RM $removelist 2272*735d6239SKiyoung Kim exit $EXIT_FAILURE 2273*735d6239SKiyoung Kim fi 2274*735d6239SKiyoung Kim 2275*735d6239SKiyoung Kim # Just move the object if needed 2276*735d6239SKiyoung Kim if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2277*735d6239SKiyoung Kim func_show_eval '$MV "$output_obj" "$obj"' \ 2278*735d6239SKiyoung Kim 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2279*735d6239SKiyoung Kim fi 2280*735d6239SKiyoung Kim fi 2281*735d6239SKiyoung Kim 2282*735d6239SKiyoung Kim $opt_dry_run || { 2283*735d6239SKiyoung Kim func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2284*735d6239SKiyoung Kim 2285*735d6239SKiyoung Kim # Unlock the critical section if it was locked 2286*735d6239SKiyoung Kim if test "$need_locks" != no; then 2287*735d6239SKiyoung Kim removelist=$lockfile 2288*735d6239SKiyoung Kim $RM "$lockfile" 2289*735d6239SKiyoung Kim fi 2290*735d6239SKiyoung Kim } 2291*735d6239SKiyoung Kim 2292*735d6239SKiyoung Kim exit $EXIT_SUCCESS 2293*735d6239SKiyoung Kim} 2294*735d6239SKiyoung Kim 2295*735d6239SKiyoung Kim$opt_help || { 2296*735d6239SKiyoung Kim test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2297*735d6239SKiyoung Kim} 2298*735d6239SKiyoung Kim 2299*735d6239SKiyoung Kimfunc_mode_help () 2300*735d6239SKiyoung Kim{ 2301*735d6239SKiyoung Kim # We need to display help for each of the modes. 2302*735d6239SKiyoung Kim case $opt_mode in 2303*735d6239SKiyoung Kim "") 2304*735d6239SKiyoung Kim # Generic help is extracted from the usage comments 2305*735d6239SKiyoung Kim # at the start of this file. 2306*735d6239SKiyoung Kim func_help 2307*735d6239SKiyoung Kim ;; 2308*735d6239SKiyoung Kim 2309*735d6239SKiyoung Kim clean) 2310*735d6239SKiyoung Kim $ECHO \ 2311*735d6239SKiyoung Kim"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2312*735d6239SKiyoung Kim 2313*735d6239SKiyoung KimRemove files from the build directory. 2314*735d6239SKiyoung Kim 2315*735d6239SKiyoung KimRM is the name of the program to use to delete files associated with each FILE 2316*735d6239SKiyoung Kim(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2317*735d6239SKiyoung Kimto RM. 2318*735d6239SKiyoung Kim 2319*735d6239SKiyoung KimIf FILE is a libtool library, object or program, all the files associated 2320*735d6239SKiyoung Kimwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2321*735d6239SKiyoung Kim ;; 2322*735d6239SKiyoung Kim 2323*735d6239SKiyoung Kim compile) 2324*735d6239SKiyoung Kim $ECHO \ 2325*735d6239SKiyoung Kim"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2326*735d6239SKiyoung Kim 2327*735d6239SKiyoung KimCompile a source file into a libtool library object. 2328*735d6239SKiyoung Kim 2329*735d6239SKiyoung KimThis mode accepts the following additional options: 2330*735d6239SKiyoung Kim 2331*735d6239SKiyoung Kim -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2332*735d6239SKiyoung Kim -no-suppress do not suppress compiler output for multiple passes 2333*735d6239SKiyoung Kim -prefer-pic try to build PIC objects only 2334*735d6239SKiyoung Kim -prefer-non-pic try to build non-PIC objects only 2335*735d6239SKiyoung Kim -shared do not build a \`.o' file suitable for static linking 2336*735d6239SKiyoung Kim -static only build a \`.o' file suitable for static linking 2337*735d6239SKiyoung Kim -Wc,FLAG pass FLAG directly to the compiler 2338*735d6239SKiyoung Kim 2339*735d6239SKiyoung KimCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2340*735d6239SKiyoung Kimfrom the given SOURCEFILE. 2341*735d6239SKiyoung Kim 2342*735d6239SKiyoung KimThe output file name is determined by removing the directory component from 2343*735d6239SKiyoung KimSOURCEFILE, then substituting the C source code suffix \`.c' with the 2344*735d6239SKiyoung Kimlibrary object suffix, \`.lo'." 2345*735d6239SKiyoung Kim ;; 2346*735d6239SKiyoung Kim 2347*735d6239SKiyoung Kim execute) 2348*735d6239SKiyoung Kim $ECHO \ 2349*735d6239SKiyoung Kim"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2350*735d6239SKiyoung Kim 2351*735d6239SKiyoung KimAutomatically set library path, then run a program. 2352*735d6239SKiyoung Kim 2353*735d6239SKiyoung KimThis mode accepts the following additional options: 2354*735d6239SKiyoung Kim 2355*735d6239SKiyoung Kim -dlopen FILE add the directory containing FILE to the library path 2356*735d6239SKiyoung Kim 2357*735d6239SKiyoung KimThis mode sets the library path environment variable according to \`-dlopen' 2358*735d6239SKiyoung Kimflags. 2359*735d6239SKiyoung Kim 2360*735d6239SKiyoung KimIf any of the ARGS are libtool executable wrappers, then they are translated 2361*735d6239SKiyoung Kiminto their corresponding uninstalled binary, and any of their required library 2362*735d6239SKiyoung Kimdirectories are added to the library path. 2363*735d6239SKiyoung Kim 2364*735d6239SKiyoung KimThen, COMMAND is executed, with ARGS as arguments." 2365*735d6239SKiyoung Kim ;; 2366*735d6239SKiyoung Kim 2367*735d6239SKiyoung Kim finish) 2368*735d6239SKiyoung Kim $ECHO \ 2369*735d6239SKiyoung Kim"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2370*735d6239SKiyoung Kim 2371*735d6239SKiyoung KimComplete the installation of libtool libraries. 2372*735d6239SKiyoung Kim 2373*735d6239SKiyoung KimEach LIBDIR is a directory that contains libtool libraries. 2374*735d6239SKiyoung Kim 2375*735d6239SKiyoung KimThe commands that this mode executes may require superuser privileges. Use 2376*735d6239SKiyoung Kimthe \`--dry-run' option if you just want to see what would be executed." 2377*735d6239SKiyoung Kim ;; 2378*735d6239SKiyoung Kim 2379*735d6239SKiyoung Kim install) 2380*735d6239SKiyoung Kim $ECHO \ 2381*735d6239SKiyoung Kim"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2382*735d6239SKiyoung Kim 2383*735d6239SKiyoung KimInstall executables or libraries. 2384*735d6239SKiyoung Kim 2385*735d6239SKiyoung KimINSTALL-COMMAND is the installation command. The first component should be 2386*735d6239SKiyoung Kimeither the \`install' or \`cp' program. 2387*735d6239SKiyoung Kim 2388*735d6239SKiyoung KimThe following components of INSTALL-COMMAND are treated specially: 2389*735d6239SKiyoung Kim 2390*735d6239SKiyoung Kim -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2391*735d6239SKiyoung Kim 2392*735d6239SKiyoung KimThe rest of the components are interpreted as arguments to that command (only 2393*735d6239SKiyoung KimBSD-compatible install options are recognized)." 2394*735d6239SKiyoung Kim ;; 2395*735d6239SKiyoung Kim 2396*735d6239SKiyoung Kim link) 2397*735d6239SKiyoung Kim $ECHO \ 2398*735d6239SKiyoung Kim"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2399*735d6239SKiyoung Kim 2400*735d6239SKiyoung KimLink object files or libraries together to form another library, or to 2401*735d6239SKiyoung Kimcreate an executable program. 2402*735d6239SKiyoung Kim 2403*735d6239SKiyoung KimLINK-COMMAND is a command using the C compiler that you would use to create 2404*735d6239SKiyoung Kima program from several object files. 2405*735d6239SKiyoung Kim 2406*735d6239SKiyoung KimThe following components of LINK-COMMAND are treated specially: 2407*735d6239SKiyoung Kim 2408*735d6239SKiyoung Kim -all-static do not do any dynamic linking at all 2409*735d6239SKiyoung Kim -avoid-version do not add a version suffix if possible 2410*735d6239SKiyoung Kim -bindir BINDIR specify path to binaries directory (for systems where 2411*735d6239SKiyoung Kim libraries must be found in the PATH setting at runtime) 2412*735d6239SKiyoung Kim -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2413*735d6239SKiyoung Kim -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2414*735d6239SKiyoung Kim -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2415*735d6239SKiyoung Kim -export-symbols SYMFILE 2416*735d6239SKiyoung Kim try to export only the symbols listed in SYMFILE 2417*735d6239SKiyoung Kim -export-symbols-regex REGEX 2418*735d6239SKiyoung Kim try to export only the symbols matching REGEX 2419*735d6239SKiyoung Kim -LLIBDIR search LIBDIR for required installed libraries 2420*735d6239SKiyoung Kim -lNAME OUTPUT-FILE requires the installed library libNAME 2421*735d6239SKiyoung Kim -module build a library that can dlopened 2422*735d6239SKiyoung Kim -no-fast-install disable the fast-install mode 2423*735d6239SKiyoung Kim -no-install link a not-installable executable 2424*735d6239SKiyoung Kim -no-undefined declare that a library does not refer to external symbols 2425*735d6239SKiyoung Kim -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2426*735d6239SKiyoung Kim -objectlist FILE Use a list of object files found in FILE to specify objects 2427*735d6239SKiyoung Kim -precious-files-regex REGEX 2428*735d6239SKiyoung Kim don't remove output files matching REGEX 2429*735d6239SKiyoung Kim -release RELEASE specify package release information 2430*735d6239SKiyoung Kim -rpath LIBDIR the created library will eventually be installed in LIBDIR 2431*735d6239SKiyoung Kim -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2432*735d6239SKiyoung Kim -shared only do dynamic linking of libtool libraries 2433*735d6239SKiyoung Kim -shrext SUFFIX override the standard shared library file extension 2434*735d6239SKiyoung Kim -static do not do any dynamic linking of uninstalled libtool libraries 2435*735d6239SKiyoung Kim -static-libtool-libs 2436*735d6239SKiyoung Kim do not do any dynamic linking of libtool libraries 2437*735d6239SKiyoung Kim -version-info CURRENT[:REVISION[:AGE]] 2438*735d6239SKiyoung Kim specify library version info [each variable defaults to 0] 2439*735d6239SKiyoung Kim -weak LIBNAME declare that the target provides the LIBNAME interface 2440*735d6239SKiyoung Kim -Wc,FLAG 2441*735d6239SKiyoung Kim -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 2442*735d6239SKiyoung Kim -Wl,FLAG 2443*735d6239SKiyoung Kim -Xlinker FLAG pass linker-specific FLAG directly to the linker 2444*735d6239SKiyoung Kim -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2445*735d6239SKiyoung Kim 2446*735d6239SKiyoung KimAll other options (arguments beginning with \`-') are ignored. 2447*735d6239SKiyoung Kim 2448*735d6239SKiyoung KimEvery other argument is treated as a filename. Files ending in \`.la' are 2449*735d6239SKiyoung Kimtreated as uninstalled libtool libraries, other files are standard or library 2450*735d6239SKiyoung Kimobject files. 2451*735d6239SKiyoung Kim 2452*735d6239SKiyoung KimIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2453*735d6239SKiyoung Kimonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2454*735d6239SKiyoung Kimrequired, except when creating a convenience library. 2455*735d6239SKiyoung Kim 2456*735d6239SKiyoung KimIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2457*735d6239SKiyoung Kimusing \`ar' and \`ranlib', or on Windows using \`lib'. 2458*735d6239SKiyoung Kim 2459*735d6239SKiyoung KimIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2460*735d6239SKiyoung Kimis created, otherwise an executable program is created." 2461*735d6239SKiyoung Kim ;; 2462*735d6239SKiyoung Kim 2463*735d6239SKiyoung Kim uninstall) 2464*735d6239SKiyoung Kim $ECHO \ 2465*735d6239SKiyoung Kim"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2466*735d6239SKiyoung Kim 2467*735d6239SKiyoung KimRemove libraries from an installation directory. 2468*735d6239SKiyoung Kim 2469*735d6239SKiyoung KimRM is the name of the program to use to delete files associated with each FILE 2470*735d6239SKiyoung Kim(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2471*735d6239SKiyoung Kimto RM. 2472*735d6239SKiyoung Kim 2473*735d6239SKiyoung KimIf FILE is a libtool library, all the files associated with it are deleted. 2474*735d6239SKiyoung KimOtherwise, only FILE itself is deleted using RM." 2475*735d6239SKiyoung Kim ;; 2476*735d6239SKiyoung Kim 2477*735d6239SKiyoung Kim *) 2478*735d6239SKiyoung Kim func_fatal_help "invalid operation mode \`$opt_mode'" 2479*735d6239SKiyoung Kim ;; 2480*735d6239SKiyoung Kim esac 2481*735d6239SKiyoung Kim 2482*735d6239SKiyoung Kim echo 2483*735d6239SKiyoung Kim $ECHO "Try \`$progname --help' for more information about other modes." 2484*735d6239SKiyoung Kim} 2485*735d6239SKiyoung Kim 2486*735d6239SKiyoung Kim# Now that we've collected a possible --mode arg, show help if necessary 2487*735d6239SKiyoung Kimif $opt_help; then 2488*735d6239SKiyoung Kim if test "$opt_help" = :; then 2489*735d6239SKiyoung Kim func_mode_help 2490*735d6239SKiyoung Kim else 2491*735d6239SKiyoung Kim { 2492*735d6239SKiyoung Kim func_help noexit 2493*735d6239SKiyoung Kim for opt_mode in compile link execute install finish uninstall clean; do 2494*735d6239SKiyoung Kim func_mode_help 2495*735d6239SKiyoung Kim done 2496*735d6239SKiyoung Kim } | sed -n '1p; 2,$s/^Usage:/ or: /p' 2497*735d6239SKiyoung Kim { 2498*735d6239SKiyoung Kim func_help noexit 2499*735d6239SKiyoung Kim for opt_mode in compile link execute install finish uninstall clean; do 2500*735d6239SKiyoung Kim echo 2501*735d6239SKiyoung Kim func_mode_help 2502*735d6239SKiyoung Kim done 2503*735d6239SKiyoung Kim } | 2504*735d6239SKiyoung Kim sed '1d 2505*735d6239SKiyoung Kim /^When reporting/,/^Report/{ 2506*735d6239SKiyoung Kim H 2507*735d6239SKiyoung Kim d 2508*735d6239SKiyoung Kim } 2509*735d6239SKiyoung Kim $x 2510*735d6239SKiyoung Kim /information about other modes/d 2511*735d6239SKiyoung Kim /more detailed .*MODE/d 2512*735d6239SKiyoung Kim s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 2513*735d6239SKiyoung Kim fi 2514*735d6239SKiyoung Kim exit $? 2515*735d6239SKiyoung Kimfi 2516*735d6239SKiyoung Kim 2517*735d6239SKiyoung Kim 2518*735d6239SKiyoung Kim# func_mode_execute arg... 2519*735d6239SKiyoung Kimfunc_mode_execute () 2520*735d6239SKiyoung Kim{ 2521*735d6239SKiyoung Kim $opt_debug 2522*735d6239SKiyoung Kim # The first argument is the command name. 2523*735d6239SKiyoung Kim cmd="$nonopt" 2524*735d6239SKiyoung Kim test -z "$cmd" && \ 2525*735d6239SKiyoung Kim func_fatal_help "you must specify a COMMAND" 2526*735d6239SKiyoung Kim 2527*735d6239SKiyoung Kim # Handle -dlopen flags immediately. 2528*735d6239SKiyoung Kim for file in $opt_dlopen; do 2529*735d6239SKiyoung Kim test -f "$file" \ 2530*735d6239SKiyoung Kim || func_fatal_help "\`$file' is not a file" 2531*735d6239SKiyoung Kim 2532*735d6239SKiyoung Kim dir= 2533*735d6239SKiyoung Kim case $file in 2534*735d6239SKiyoung Kim *.la) 2535*735d6239SKiyoung Kim func_resolve_sysroot "$file" 2536*735d6239SKiyoung Kim file=$func_resolve_sysroot_result 2537*735d6239SKiyoung Kim 2538*735d6239SKiyoung Kim # Check to see that this really is a libtool archive. 2539*735d6239SKiyoung Kim func_lalib_unsafe_p "$file" \ 2540*735d6239SKiyoung Kim || func_fatal_help "\`$lib' is not a valid libtool archive" 2541*735d6239SKiyoung Kim 2542*735d6239SKiyoung Kim # Read the libtool library. 2543*735d6239SKiyoung Kim dlname= 2544*735d6239SKiyoung Kim library_names= 2545*735d6239SKiyoung Kim func_source "$file" 2546*735d6239SKiyoung Kim 2547*735d6239SKiyoung Kim # Skip this library if it cannot be dlopened. 2548*735d6239SKiyoung Kim if test -z "$dlname"; then 2549*735d6239SKiyoung Kim # Warn if it was a shared library. 2550*735d6239SKiyoung Kim test -n "$library_names" && \ 2551*735d6239SKiyoung Kim func_warning "\`$file' was not linked with \`-export-dynamic'" 2552*735d6239SKiyoung Kim continue 2553*735d6239SKiyoung Kim fi 2554*735d6239SKiyoung Kim 2555*735d6239SKiyoung Kim func_dirname "$file" "" "." 2556*735d6239SKiyoung Kim dir="$func_dirname_result" 2557*735d6239SKiyoung Kim 2558*735d6239SKiyoung Kim if test -f "$dir/$objdir/$dlname"; then 2559*735d6239SKiyoung Kim func_append dir "/$objdir" 2560*735d6239SKiyoung Kim else 2561*735d6239SKiyoung Kim if test ! -f "$dir/$dlname"; then 2562*735d6239SKiyoung Kim func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2563*735d6239SKiyoung Kim fi 2564*735d6239SKiyoung Kim fi 2565*735d6239SKiyoung Kim ;; 2566*735d6239SKiyoung Kim 2567*735d6239SKiyoung Kim *.lo) 2568*735d6239SKiyoung Kim # Just add the directory containing the .lo file. 2569*735d6239SKiyoung Kim func_dirname "$file" "" "." 2570*735d6239SKiyoung Kim dir="$func_dirname_result" 2571*735d6239SKiyoung Kim ;; 2572*735d6239SKiyoung Kim 2573*735d6239SKiyoung Kim *) 2574*735d6239SKiyoung Kim func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2575*735d6239SKiyoung Kim continue 2576*735d6239SKiyoung Kim ;; 2577*735d6239SKiyoung Kim esac 2578*735d6239SKiyoung Kim 2579*735d6239SKiyoung Kim # Get the absolute pathname. 2580*735d6239SKiyoung Kim absdir=`cd "$dir" && pwd` 2581*735d6239SKiyoung Kim test -n "$absdir" && dir="$absdir" 2582*735d6239SKiyoung Kim 2583*735d6239SKiyoung Kim # Now add the directory to shlibpath_var. 2584*735d6239SKiyoung Kim if eval "test -z \"\$$shlibpath_var\""; then 2585*735d6239SKiyoung Kim eval "$shlibpath_var=\"\$dir\"" 2586*735d6239SKiyoung Kim else 2587*735d6239SKiyoung Kim eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2588*735d6239SKiyoung Kim fi 2589*735d6239SKiyoung Kim done 2590*735d6239SKiyoung Kim 2591*735d6239SKiyoung Kim # This variable tells wrapper scripts just to set shlibpath_var 2592*735d6239SKiyoung Kim # rather than running their programs. 2593*735d6239SKiyoung Kim libtool_execute_magic="$magic" 2594*735d6239SKiyoung Kim 2595*735d6239SKiyoung Kim # Check if any of the arguments is a wrapper script. 2596*735d6239SKiyoung Kim args= 2597*735d6239SKiyoung Kim for file 2598*735d6239SKiyoung Kim do 2599*735d6239SKiyoung Kim case $file in 2600*735d6239SKiyoung Kim -* | *.la | *.lo ) ;; 2601*735d6239SKiyoung Kim *) 2602*735d6239SKiyoung Kim # Do a test to see if this is really a libtool program. 2603*735d6239SKiyoung Kim if func_ltwrapper_script_p "$file"; then 2604*735d6239SKiyoung Kim func_source "$file" 2605*735d6239SKiyoung Kim # Transform arg to wrapped name. 2606*735d6239SKiyoung Kim file="$progdir/$program" 2607*735d6239SKiyoung Kim elif func_ltwrapper_executable_p "$file"; then 2608*735d6239SKiyoung Kim func_ltwrapper_scriptname "$file" 2609*735d6239SKiyoung Kim func_source "$func_ltwrapper_scriptname_result" 2610*735d6239SKiyoung Kim # Transform arg to wrapped name. 2611*735d6239SKiyoung Kim file="$progdir/$program" 2612*735d6239SKiyoung Kim fi 2613*735d6239SKiyoung Kim ;; 2614*735d6239SKiyoung Kim esac 2615*735d6239SKiyoung Kim # Quote arguments (to preserve shell metacharacters). 2616*735d6239SKiyoung Kim func_append_quoted args "$file" 2617*735d6239SKiyoung Kim done 2618*735d6239SKiyoung Kim 2619*735d6239SKiyoung Kim if test "X$opt_dry_run" = Xfalse; then 2620*735d6239SKiyoung Kim if test -n "$shlibpath_var"; then 2621*735d6239SKiyoung Kim # Export the shlibpath_var. 2622*735d6239SKiyoung Kim eval "export $shlibpath_var" 2623*735d6239SKiyoung Kim fi 2624*735d6239SKiyoung Kim 2625*735d6239SKiyoung Kim # Restore saved environment variables 2626*735d6239SKiyoung Kim for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2627*735d6239SKiyoung Kim do 2628*735d6239SKiyoung Kim eval "if test \"\${save_$lt_var+set}\" = set; then 2629*735d6239SKiyoung Kim $lt_var=\$save_$lt_var; export $lt_var 2630*735d6239SKiyoung Kim else 2631*735d6239SKiyoung Kim $lt_unset $lt_var 2632*735d6239SKiyoung Kim fi" 2633*735d6239SKiyoung Kim done 2634*735d6239SKiyoung Kim 2635*735d6239SKiyoung Kim # Now prepare to actually exec the command. 2636*735d6239SKiyoung Kim exec_cmd="\$cmd$args" 2637*735d6239SKiyoung Kim else 2638*735d6239SKiyoung Kim # Display what would be done. 2639*735d6239SKiyoung Kim if test -n "$shlibpath_var"; then 2640*735d6239SKiyoung Kim eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 2641*735d6239SKiyoung Kim echo "export $shlibpath_var" 2642*735d6239SKiyoung Kim fi 2643*735d6239SKiyoung Kim $ECHO "$cmd$args" 2644*735d6239SKiyoung Kim exit $EXIT_SUCCESS 2645*735d6239SKiyoung Kim fi 2646*735d6239SKiyoung Kim} 2647*735d6239SKiyoung Kim 2648*735d6239SKiyoung Kimtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2649*735d6239SKiyoung Kim 2650*735d6239SKiyoung Kim 2651*735d6239SKiyoung Kim# func_mode_finish arg... 2652*735d6239SKiyoung Kimfunc_mode_finish () 2653*735d6239SKiyoung Kim{ 2654*735d6239SKiyoung Kim $opt_debug 2655*735d6239SKiyoung Kim libs= 2656*735d6239SKiyoung Kim libdirs= 2657*735d6239SKiyoung Kim admincmds= 2658*735d6239SKiyoung Kim 2659*735d6239SKiyoung Kim for opt in "$nonopt" ${1+"$@"} 2660*735d6239SKiyoung Kim do 2661*735d6239SKiyoung Kim if test -d "$opt"; then 2662*735d6239SKiyoung Kim func_append libdirs " $opt" 2663*735d6239SKiyoung Kim 2664*735d6239SKiyoung Kim elif test -f "$opt"; then 2665*735d6239SKiyoung Kim if func_lalib_unsafe_p "$opt"; then 2666*735d6239SKiyoung Kim func_append libs " $opt" 2667*735d6239SKiyoung Kim else 2668*735d6239SKiyoung Kim func_warning "\`$opt' is not a valid libtool archive" 2669*735d6239SKiyoung Kim fi 2670*735d6239SKiyoung Kim 2671*735d6239SKiyoung Kim else 2672*735d6239SKiyoung Kim func_fatal_error "invalid argument \`$opt'" 2673*735d6239SKiyoung Kim fi 2674*735d6239SKiyoung Kim done 2675*735d6239SKiyoung Kim 2676*735d6239SKiyoung Kim if test -n "$libs"; then 2677*735d6239SKiyoung Kim if test -n "$lt_sysroot"; then 2678*735d6239SKiyoung Kim sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 2679*735d6239SKiyoung Kim sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 2680*735d6239SKiyoung Kim else 2681*735d6239SKiyoung Kim sysroot_cmd= 2682*735d6239SKiyoung Kim fi 2683*735d6239SKiyoung Kim 2684*735d6239SKiyoung Kim # Remove sysroot references 2685*735d6239SKiyoung Kim if $opt_dry_run; then 2686*735d6239SKiyoung Kim for lib in $libs; do 2687*735d6239SKiyoung Kim echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 2688*735d6239SKiyoung Kim done 2689*735d6239SKiyoung Kim else 2690*735d6239SKiyoung Kim tmpdir=`func_mktempdir` 2691*735d6239SKiyoung Kim for lib in $libs; do 2692*735d6239SKiyoung Kim sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 2693*735d6239SKiyoung Kim > $tmpdir/tmp-la 2694*735d6239SKiyoung Kim mv -f $tmpdir/tmp-la $lib 2695*735d6239SKiyoung Kim done 2696*735d6239SKiyoung Kim ${RM}r "$tmpdir" 2697*735d6239SKiyoung Kim fi 2698*735d6239SKiyoung Kim fi 2699*735d6239SKiyoung Kim 2700*735d6239SKiyoung Kim if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2701*735d6239SKiyoung Kim for libdir in $libdirs; do 2702*735d6239SKiyoung Kim if test -n "$finish_cmds"; then 2703*735d6239SKiyoung Kim # Do each command in the finish commands. 2704*735d6239SKiyoung Kim func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2705*735d6239SKiyoung Kim'"$cmd"'"' 2706*735d6239SKiyoung Kim fi 2707*735d6239SKiyoung Kim if test -n "$finish_eval"; then 2708*735d6239SKiyoung Kim # Do the single finish_eval. 2709*735d6239SKiyoung Kim eval cmds=\"$finish_eval\" 2710*735d6239SKiyoung Kim $opt_dry_run || eval "$cmds" || func_append admincmds " 2711*735d6239SKiyoung Kim $cmds" 2712*735d6239SKiyoung Kim fi 2713*735d6239SKiyoung Kim done 2714*735d6239SKiyoung Kim fi 2715*735d6239SKiyoung Kim 2716*735d6239SKiyoung Kim # Exit here if they wanted silent mode. 2717*735d6239SKiyoung Kim $opt_silent && exit $EXIT_SUCCESS 2718*735d6239SKiyoung Kim 2719*735d6239SKiyoung Kim if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2720*735d6239SKiyoung Kim echo "----------------------------------------------------------------------" 2721*735d6239SKiyoung Kim echo "Libraries have been installed in:" 2722*735d6239SKiyoung Kim for libdir in $libdirs; do 2723*735d6239SKiyoung Kim $ECHO " $libdir" 2724*735d6239SKiyoung Kim done 2725*735d6239SKiyoung Kim echo 2726*735d6239SKiyoung Kim echo "If you ever happen to want to link against installed libraries" 2727*735d6239SKiyoung Kim echo "in a given directory, LIBDIR, you must either use libtool, and" 2728*735d6239SKiyoung Kim echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2729*735d6239SKiyoung Kim echo "flag during linking and do at least one of the following:" 2730*735d6239SKiyoung Kim if test -n "$shlibpath_var"; then 2731*735d6239SKiyoung Kim echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2732*735d6239SKiyoung Kim echo " during execution" 2733*735d6239SKiyoung Kim fi 2734*735d6239SKiyoung Kim if test -n "$runpath_var"; then 2735*735d6239SKiyoung Kim echo " - add LIBDIR to the \`$runpath_var' environment variable" 2736*735d6239SKiyoung Kim echo " during linking" 2737*735d6239SKiyoung Kim fi 2738*735d6239SKiyoung Kim if test -n "$hardcode_libdir_flag_spec"; then 2739*735d6239SKiyoung Kim libdir=LIBDIR 2740*735d6239SKiyoung Kim eval flag=\"$hardcode_libdir_flag_spec\" 2741*735d6239SKiyoung Kim 2742*735d6239SKiyoung Kim $ECHO " - use the \`$flag' linker flag" 2743*735d6239SKiyoung Kim fi 2744*735d6239SKiyoung Kim if test -n "$admincmds"; then 2745*735d6239SKiyoung Kim $ECHO " - have your system administrator run these commands:$admincmds" 2746*735d6239SKiyoung Kim fi 2747*735d6239SKiyoung Kim if test -f /etc/ld.so.conf; then 2748*735d6239SKiyoung Kim echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2749*735d6239SKiyoung Kim fi 2750*735d6239SKiyoung Kim echo 2751*735d6239SKiyoung Kim 2752*735d6239SKiyoung Kim echo "See any operating system documentation about shared libraries for" 2753*735d6239SKiyoung Kim case $host in 2754*735d6239SKiyoung Kim solaris2.[6789]|solaris2.1[0-9]) 2755*735d6239SKiyoung Kim echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2756*735d6239SKiyoung Kim echo "pages." 2757*735d6239SKiyoung Kim ;; 2758*735d6239SKiyoung Kim *) 2759*735d6239SKiyoung Kim echo "more information, such as the ld(1) and ld.so(8) manual pages." 2760*735d6239SKiyoung Kim ;; 2761*735d6239SKiyoung Kim esac 2762*735d6239SKiyoung Kim echo "----------------------------------------------------------------------" 2763*735d6239SKiyoung Kim fi 2764*735d6239SKiyoung Kim exit $EXIT_SUCCESS 2765*735d6239SKiyoung Kim} 2766*735d6239SKiyoung Kim 2767*735d6239SKiyoung Kimtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2768*735d6239SKiyoung Kim 2769*735d6239SKiyoung Kim 2770*735d6239SKiyoung Kim# func_mode_install arg... 2771*735d6239SKiyoung Kimfunc_mode_install () 2772*735d6239SKiyoung Kim{ 2773*735d6239SKiyoung Kim $opt_debug 2774*735d6239SKiyoung Kim # There may be an optional sh(1) argument at the beginning of 2775*735d6239SKiyoung Kim # install_prog (especially on Windows NT). 2776*735d6239SKiyoung Kim if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2777*735d6239SKiyoung Kim # Allow the use of GNU shtool's install command. 2778*735d6239SKiyoung Kim case $nonopt in *shtool*) :;; *) false;; esac; then 2779*735d6239SKiyoung Kim # Aesthetically quote it. 2780*735d6239SKiyoung Kim func_quote_for_eval "$nonopt" 2781*735d6239SKiyoung Kim install_prog="$func_quote_for_eval_result " 2782*735d6239SKiyoung Kim arg=$1 2783*735d6239SKiyoung Kim shift 2784*735d6239SKiyoung Kim else 2785*735d6239SKiyoung Kim install_prog= 2786*735d6239SKiyoung Kim arg=$nonopt 2787*735d6239SKiyoung Kim fi 2788*735d6239SKiyoung Kim 2789*735d6239SKiyoung Kim # The real first argument should be the name of the installation program. 2790*735d6239SKiyoung Kim # Aesthetically quote it. 2791*735d6239SKiyoung Kim func_quote_for_eval "$arg" 2792*735d6239SKiyoung Kim func_append install_prog "$func_quote_for_eval_result" 2793*735d6239SKiyoung Kim install_shared_prog=$install_prog 2794*735d6239SKiyoung Kim case " $install_prog " in 2795*735d6239SKiyoung Kim *[\\\ /]cp\ *) install_cp=: ;; 2796*735d6239SKiyoung Kim *) install_cp=false ;; 2797*735d6239SKiyoung Kim esac 2798*735d6239SKiyoung Kim 2799*735d6239SKiyoung Kim # We need to accept at least all the BSD install flags. 2800*735d6239SKiyoung Kim dest= 2801*735d6239SKiyoung Kim files= 2802*735d6239SKiyoung Kim opts= 2803*735d6239SKiyoung Kim prev= 2804*735d6239SKiyoung Kim install_type= 2805*735d6239SKiyoung Kim isdir=no 2806*735d6239SKiyoung Kim stripme= 2807*735d6239SKiyoung Kim no_mode=: 2808*735d6239SKiyoung Kim for arg 2809*735d6239SKiyoung Kim do 2810*735d6239SKiyoung Kim arg2= 2811*735d6239SKiyoung Kim if test -n "$dest"; then 2812*735d6239SKiyoung Kim func_append files " $dest" 2813*735d6239SKiyoung Kim dest=$arg 2814*735d6239SKiyoung Kim continue 2815*735d6239SKiyoung Kim fi 2816*735d6239SKiyoung Kim 2817*735d6239SKiyoung Kim case $arg in 2818*735d6239SKiyoung Kim -d) isdir=yes ;; 2819*735d6239SKiyoung Kim -f) 2820*735d6239SKiyoung Kim if $install_cp; then :; else 2821*735d6239SKiyoung Kim prev=$arg 2822*735d6239SKiyoung Kim fi 2823*735d6239SKiyoung Kim ;; 2824*735d6239SKiyoung Kim -g | -m | -o) 2825*735d6239SKiyoung Kim prev=$arg 2826*735d6239SKiyoung Kim ;; 2827*735d6239SKiyoung Kim -s) 2828*735d6239SKiyoung Kim stripme=" -s" 2829*735d6239SKiyoung Kim continue 2830*735d6239SKiyoung Kim ;; 2831*735d6239SKiyoung Kim -*) 2832*735d6239SKiyoung Kim ;; 2833*735d6239SKiyoung Kim *) 2834*735d6239SKiyoung Kim # If the previous option needed an argument, then skip it. 2835*735d6239SKiyoung Kim if test -n "$prev"; then 2836*735d6239SKiyoung Kim if test "x$prev" = x-m && test -n "$install_override_mode"; then 2837*735d6239SKiyoung Kim arg2=$install_override_mode 2838*735d6239SKiyoung Kim no_mode=false 2839*735d6239SKiyoung Kim fi 2840*735d6239SKiyoung Kim prev= 2841*735d6239SKiyoung Kim else 2842*735d6239SKiyoung Kim dest=$arg 2843*735d6239SKiyoung Kim continue 2844*735d6239SKiyoung Kim fi 2845*735d6239SKiyoung Kim ;; 2846*735d6239SKiyoung Kim esac 2847*735d6239SKiyoung Kim 2848*735d6239SKiyoung Kim # Aesthetically quote the argument. 2849*735d6239SKiyoung Kim func_quote_for_eval "$arg" 2850*735d6239SKiyoung Kim func_append install_prog " $func_quote_for_eval_result" 2851*735d6239SKiyoung Kim if test -n "$arg2"; then 2852*735d6239SKiyoung Kim func_quote_for_eval "$arg2" 2853*735d6239SKiyoung Kim fi 2854*735d6239SKiyoung Kim func_append install_shared_prog " $func_quote_for_eval_result" 2855*735d6239SKiyoung Kim done 2856*735d6239SKiyoung Kim 2857*735d6239SKiyoung Kim test -z "$install_prog" && \ 2858*735d6239SKiyoung Kim func_fatal_help "you must specify an install program" 2859*735d6239SKiyoung Kim 2860*735d6239SKiyoung Kim test -n "$prev" && \ 2861*735d6239SKiyoung Kim func_fatal_help "the \`$prev' option requires an argument" 2862*735d6239SKiyoung Kim 2863*735d6239SKiyoung Kim if test -n "$install_override_mode" && $no_mode; then 2864*735d6239SKiyoung Kim if $install_cp; then :; else 2865*735d6239SKiyoung Kim func_quote_for_eval "$install_override_mode" 2866*735d6239SKiyoung Kim func_append install_shared_prog " -m $func_quote_for_eval_result" 2867*735d6239SKiyoung Kim fi 2868*735d6239SKiyoung Kim fi 2869*735d6239SKiyoung Kim 2870*735d6239SKiyoung Kim if test -z "$files"; then 2871*735d6239SKiyoung Kim if test -z "$dest"; then 2872*735d6239SKiyoung Kim func_fatal_help "no file or destination specified" 2873*735d6239SKiyoung Kim else 2874*735d6239SKiyoung Kim func_fatal_help "you must specify a destination" 2875*735d6239SKiyoung Kim fi 2876*735d6239SKiyoung Kim fi 2877*735d6239SKiyoung Kim 2878*735d6239SKiyoung Kim # Strip any trailing slash from the destination. 2879*735d6239SKiyoung Kim func_stripname '' '/' "$dest" 2880*735d6239SKiyoung Kim dest=$func_stripname_result 2881*735d6239SKiyoung Kim 2882*735d6239SKiyoung Kim # Check to see that the destination is a directory. 2883*735d6239SKiyoung Kim test -d "$dest" && isdir=yes 2884*735d6239SKiyoung Kim if test "$isdir" = yes; then 2885*735d6239SKiyoung Kim destdir="$dest" 2886*735d6239SKiyoung Kim destname= 2887*735d6239SKiyoung Kim else 2888*735d6239SKiyoung Kim func_dirname_and_basename "$dest" "" "." 2889*735d6239SKiyoung Kim destdir="$func_dirname_result" 2890*735d6239SKiyoung Kim destname="$func_basename_result" 2891*735d6239SKiyoung Kim 2892*735d6239SKiyoung Kim # Not a directory, so check to see that there is only one file specified. 2893*735d6239SKiyoung Kim set dummy $files; shift 2894*735d6239SKiyoung Kim test "$#" -gt 1 && \ 2895*735d6239SKiyoung Kim func_fatal_help "\`$dest' is not a directory" 2896*735d6239SKiyoung Kim fi 2897*735d6239SKiyoung Kim case $destdir in 2898*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]*) ;; 2899*735d6239SKiyoung Kim *) 2900*735d6239SKiyoung Kim for file in $files; do 2901*735d6239SKiyoung Kim case $file in 2902*735d6239SKiyoung Kim *.lo) ;; 2903*735d6239SKiyoung Kim *) 2904*735d6239SKiyoung Kim func_fatal_help "\`$destdir' must be an absolute directory name" 2905*735d6239SKiyoung Kim ;; 2906*735d6239SKiyoung Kim esac 2907*735d6239SKiyoung Kim done 2908*735d6239SKiyoung Kim ;; 2909*735d6239SKiyoung Kim esac 2910*735d6239SKiyoung Kim 2911*735d6239SKiyoung Kim # This variable tells wrapper scripts just to set variables rather 2912*735d6239SKiyoung Kim # than running their programs. 2913*735d6239SKiyoung Kim libtool_install_magic="$magic" 2914*735d6239SKiyoung Kim 2915*735d6239SKiyoung Kim staticlibs= 2916*735d6239SKiyoung Kim future_libdirs= 2917*735d6239SKiyoung Kim current_libdirs= 2918*735d6239SKiyoung Kim for file in $files; do 2919*735d6239SKiyoung Kim 2920*735d6239SKiyoung Kim # Do each installation. 2921*735d6239SKiyoung Kim case $file in 2922*735d6239SKiyoung Kim *.$libext) 2923*735d6239SKiyoung Kim # Do the static libraries later. 2924*735d6239SKiyoung Kim func_append staticlibs " $file" 2925*735d6239SKiyoung Kim ;; 2926*735d6239SKiyoung Kim 2927*735d6239SKiyoung Kim *.la) 2928*735d6239SKiyoung Kim func_resolve_sysroot "$file" 2929*735d6239SKiyoung Kim file=$func_resolve_sysroot_result 2930*735d6239SKiyoung Kim 2931*735d6239SKiyoung Kim # Check to see that this really is a libtool archive. 2932*735d6239SKiyoung Kim func_lalib_unsafe_p "$file" \ 2933*735d6239SKiyoung Kim || func_fatal_help "\`$file' is not a valid libtool archive" 2934*735d6239SKiyoung Kim 2935*735d6239SKiyoung Kim library_names= 2936*735d6239SKiyoung Kim old_library= 2937*735d6239SKiyoung Kim relink_command= 2938*735d6239SKiyoung Kim func_source "$file" 2939*735d6239SKiyoung Kim 2940*735d6239SKiyoung Kim # Add the libdir to current_libdirs if it is the destination. 2941*735d6239SKiyoung Kim if test "X$destdir" = "X$libdir"; then 2942*735d6239SKiyoung Kim case "$current_libdirs " in 2943*735d6239SKiyoung Kim *" $libdir "*) ;; 2944*735d6239SKiyoung Kim *) func_append current_libdirs " $libdir" ;; 2945*735d6239SKiyoung Kim esac 2946*735d6239SKiyoung Kim else 2947*735d6239SKiyoung Kim # Note the libdir as a future libdir. 2948*735d6239SKiyoung Kim case "$future_libdirs " in 2949*735d6239SKiyoung Kim *" $libdir "*) ;; 2950*735d6239SKiyoung Kim *) func_append future_libdirs " $libdir" ;; 2951*735d6239SKiyoung Kim esac 2952*735d6239SKiyoung Kim fi 2953*735d6239SKiyoung Kim 2954*735d6239SKiyoung Kim func_dirname "$file" "/" "" 2955*735d6239SKiyoung Kim dir="$func_dirname_result" 2956*735d6239SKiyoung Kim func_append dir "$objdir" 2957*735d6239SKiyoung Kim 2958*735d6239SKiyoung Kim if test -n "$relink_command"; then 2959*735d6239SKiyoung Kim # Determine the prefix the user has applied to our future dir. 2960*735d6239SKiyoung Kim inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2961*735d6239SKiyoung Kim 2962*735d6239SKiyoung Kim # Don't allow the user to place us outside of our expected 2963*735d6239SKiyoung Kim # location b/c this prevents finding dependent libraries that 2964*735d6239SKiyoung Kim # are installed to the same prefix. 2965*735d6239SKiyoung Kim # At present, this check doesn't affect windows .dll's that 2966*735d6239SKiyoung Kim # are installed into $libdir/../bin (currently, that works fine) 2967*735d6239SKiyoung Kim # but it's something to keep an eye on. 2968*735d6239SKiyoung Kim test "$inst_prefix_dir" = "$destdir" && \ 2969*735d6239SKiyoung Kim func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2970*735d6239SKiyoung Kim 2971*735d6239SKiyoung Kim if test -n "$inst_prefix_dir"; then 2972*735d6239SKiyoung Kim # Stick the inst_prefix_dir data into the link command. 2973*735d6239SKiyoung Kim relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2974*735d6239SKiyoung Kim else 2975*735d6239SKiyoung Kim relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2976*735d6239SKiyoung Kim fi 2977*735d6239SKiyoung Kim 2978*735d6239SKiyoung Kim func_warning "relinking \`$file'" 2979*735d6239SKiyoung Kim func_show_eval "$relink_command" \ 2980*735d6239SKiyoung Kim 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2981*735d6239SKiyoung Kim fi 2982*735d6239SKiyoung Kim 2983*735d6239SKiyoung Kim # See the names of the shared library. 2984*735d6239SKiyoung Kim set dummy $library_names; shift 2985*735d6239SKiyoung Kim if test -n "$1"; then 2986*735d6239SKiyoung Kim realname="$1" 2987*735d6239SKiyoung Kim shift 2988*735d6239SKiyoung Kim 2989*735d6239SKiyoung Kim srcname="$realname" 2990*735d6239SKiyoung Kim test -n "$relink_command" && srcname="$realname"T 2991*735d6239SKiyoung Kim 2992*735d6239SKiyoung Kim # Install the shared library and build the symlinks. 2993*735d6239SKiyoung Kim func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2994*735d6239SKiyoung Kim 'exit $?' 2995*735d6239SKiyoung Kim tstripme="$stripme" 2996*735d6239SKiyoung Kim case $host_os in 2997*735d6239SKiyoung Kim cygwin* | mingw* | pw32* | cegcc*) 2998*735d6239SKiyoung Kim case $realname in 2999*735d6239SKiyoung Kim *.dll.a) 3000*735d6239SKiyoung Kim tstripme="" 3001*735d6239SKiyoung Kim ;; 3002*735d6239SKiyoung Kim esac 3003*735d6239SKiyoung Kim ;; 3004*735d6239SKiyoung Kim esac 3005*735d6239SKiyoung Kim if test -n "$tstripme" && test -n "$striplib"; then 3006*735d6239SKiyoung Kim func_show_eval "$striplib $destdir/$realname" 'exit $?' 3007*735d6239SKiyoung Kim fi 3008*735d6239SKiyoung Kim 3009*735d6239SKiyoung Kim if test "$#" -gt 0; then 3010*735d6239SKiyoung Kim # Delete the old symlinks, and create new ones. 3011*735d6239SKiyoung Kim # Try `ln -sf' first, because the `ln' binary might depend on 3012*735d6239SKiyoung Kim # the symlink we replace! Solaris /bin/ln does not understand -f, 3013*735d6239SKiyoung Kim # so we also need to try rm && ln -s. 3014*735d6239SKiyoung Kim for linkname 3015*735d6239SKiyoung Kim do 3016*735d6239SKiyoung Kim test "$linkname" != "$realname" \ 3017*735d6239SKiyoung Kim && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3018*735d6239SKiyoung Kim done 3019*735d6239SKiyoung Kim fi 3020*735d6239SKiyoung Kim 3021*735d6239SKiyoung Kim # Do each command in the postinstall commands. 3022*735d6239SKiyoung Kim lib="$destdir/$realname" 3023*735d6239SKiyoung Kim func_execute_cmds "$postinstall_cmds" 'exit $?' 3024*735d6239SKiyoung Kim fi 3025*735d6239SKiyoung Kim 3026*735d6239SKiyoung Kim # Install the pseudo-library for information purposes. 3027*735d6239SKiyoung Kim func_basename "$file" 3028*735d6239SKiyoung Kim name="$func_basename_result" 3029*735d6239SKiyoung Kim instname="$dir/$name"i 3030*735d6239SKiyoung Kim func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3031*735d6239SKiyoung Kim 3032*735d6239SKiyoung Kim # Maybe install the static library, too. 3033*735d6239SKiyoung Kim test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3034*735d6239SKiyoung Kim ;; 3035*735d6239SKiyoung Kim 3036*735d6239SKiyoung Kim *.lo) 3037*735d6239SKiyoung Kim # Install (i.e. copy) a libtool object. 3038*735d6239SKiyoung Kim 3039*735d6239SKiyoung Kim # Figure out destination file name, if it wasn't already specified. 3040*735d6239SKiyoung Kim if test -n "$destname"; then 3041*735d6239SKiyoung Kim destfile="$destdir/$destname" 3042*735d6239SKiyoung Kim else 3043*735d6239SKiyoung Kim func_basename "$file" 3044*735d6239SKiyoung Kim destfile="$func_basename_result" 3045*735d6239SKiyoung Kim destfile="$destdir/$destfile" 3046*735d6239SKiyoung Kim fi 3047*735d6239SKiyoung Kim 3048*735d6239SKiyoung Kim # Deduce the name of the destination old-style object file. 3049*735d6239SKiyoung Kim case $destfile in 3050*735d6239SKiyoung Kim *.lo) 3051*735d6239SKiyoung Kim func_lo2o "$destfile" 3052*735d6239SKiyoung Kim staticdest=$func_lo2o_result 3053*735d6239SKiyoung Kim ;; 3054*735d6239SKiyoung Kim *.$objext) 3055*735d6239SKiyoung Kim staticdest="$destfile" 3056*735d6239SKiyoung Kim destfile= 3057*735d6239SKiyoung Kim ;; 3058*735d6239SKiyoung Kim *) 3059*735d6239SKiyoung Kim func_fatal_help "cannot copy a libtool object to \`$destfile'" 3060*735d6239SKiyoung Kim ;; 3061*735d6239SKiyoung Kim esac 3062*735d6239SKiyoung Kim 3063*735d6239SKiyoung Kim # Install the libtool object if requested. 3064*735d6239SKiyoung Kim test -n "$destfile" && \ 3065*735d6239SKiyoung Kim func_show_eval "$install_prog $file $destfile" 'exit $?' 3066*735d6239SKiyoung Kim 3067*735d6239SKiyoung Kim # Install the old object if enabled. 3068*735d6239SKiyoung Kim if test "$build_old_libs" = yes; then 3069*735d6239SKiyoung Kim # Deduce the name of the old-style object file. 3070*735d6239SKiyoung Kim func_lo2o "$file" 3071*735d6239SKiyoung Kim staticobj=$func_lo2o_result 3072*735d6239SKiyoung Kim func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3073*735d6239SKiyoung Kim fi 3074*735d6239SKiyoung Kim exit $EXIT_SUCCESS 3075*735d6239SKiyoung Kim ;; 3076*735d6239SKiyoung Kim 3077*735d6239SKiyoung Kim *) 3078*735d6239SKiyoung Kim # Figure out destination file name, if it wasn't already specified. 3079*735d6239SKiyoung Kim if test -n "$destname"; then 3080*735d6239SKiyoung Kim destfile="$destdir/$destname" 3081*735d6239SKiyoung Kim else 3082*735d6239SKiyoung Kim func_basename "$file" 3083*735d6239SKiyoung Kim destfile="$func_basename_result" 3084*735d6239SKiyoung Kim destfile="$destdir/$destfile" 3085*735d6239SKiyoung Kim fi 3086*735d6239SKiyoung Kim 3087*735d6239SKiyoung Kim # If the file is missing, and there is a .exe on the end, strip it 3088*735d6239SKiyoung Kim # because it is most likely a libtool script we actually want to 3089*735d6239SKiyoung Kim # install 3090*735d6239SKiyoung Kim stripped_ext="" 3091*735d6239SKiyoung Kim case $file in 3092*735d6239SKiyoung Kim *.exe) 3093*735d6239SKiyoung Kim if test ! -f "$file"; then 3094*735d6239SKiyoung Kim func_stripname '' '.exe' "$file" 3095*735d6239SKiyoung Kim file=$func_stripname_result 3096*735d6239SKiyoung Kim stripped_ext=".exe" 3097*735d6239SKiyoung Kim fi 3098*735d6239SKiyoung Kim ;; 3099*735d6239SKiyoung Kim esac 3100*735d6239SKiyoung Kim 3101*735d6239SKiyoung Kim # Do a test to see if this is really a libtool program. 3102*735d6239SKiyoung Kim case $host in 3103*735d6239SKiyoung Kim *cygwin* | *mingw*) 3104*735d6239SKiyoung Kim if func_ltwrapper_executable_p "$file"; then 3105*735d6239SKiyoung Kim func_ltwrapper_scriptname "$file" 3106*735d6239SKiyoung Kim wrapper=$func_ltwrapper_scriptname_result 3107*735d6239SKiyoung Kim else 3108*735d6239SKiyoung Kim func_stripname '' '.exe' "$file" 3109*735d6239SKiyoung Kim wrapper=$func_stripname_result 3110*735d6239SKiyoung Kim fi 3111*735d6239SKiyoung Kim ;; 3112*735d6239SKiyoung Kim *) 3113*735d6239SKiyoung Kim wrapper=$file 3114*735d6239SKiyoung Kim ;; 3115*735d6239SKiyoung Kim esac 3116*735d6239SKiyoung Kim if func_ltwrapper_script_p "$wrapper"; then 3117*735d6239SKiyoung Kim notinst_deplibs= 3118*735d6239SKiyoung Kim relink_command= 3119*735d6239SKiyoung Kim 3120*735d6239SKiyoung Kim func_source "$wrapper" 3121*735d6239SKiyoung Kim 3122*735d6239SKiyoung Kim # Check the variables that should have been set. 3123*735d6239SKiyoung Kim test -z "$generated_by_libtool_version" && \ 3124*735d6239SKiyoung Kim func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3125*735d6239SKiyoung Kim 3126*735d6239SKiyoung Kim finalize=yes 3127*735d6239SKiyoung Kim for lib in $notinst_deplibs; do 3128*735d6239SKiyoung Kim # Check to see that each library is installed. 3129*735d6239SKiyoung Kim libdir= 3130*735d6239SKiyoung Kim if test -f "$lib"; then 3131*735d6239SKiyoung Kim func_source "$lib" 3132*735d6239SKiyoung Kim fi 3133*735d6239SKiyoung Kim libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3134*735d6239SKiyoung Kim if test -n "$libdir" && test ! -f "$libfile"; then 3135*735d6239SKiyoung Kim func_warning "\`$lib' has not been installed in \`$libdir'" 3136*735d6239SKiyoung Kim finalize=no 3137*735d6239SKiyoung Kim fi 3138*735d6239SKiyoung Kim done 3139*735d6239SKiyoung Kim 3140*735d6239SKiyoung Kim relink_command= 3141*735d6239SKiyoung Kim func_source "$wrapper" 3142*735d6239SKiyoung Kim 3143*735d6239SKiyoung Kim outputname= 3144*735d6239SKiyoung Kim if test "$fast_install" = no && test -n "$relink_command"; then 3145*735d6239SKiyoung Kim $opt_dry_run || { 3146*735d6239SKiyoung Kim if test "$finalize" = yes; then 3147*735d6239SKiyoung Kim tmpdir=`func_mktempdir` 3148*735d6239SKiyoung Kim func_basename "$file$stripped_ext" 3149*735d6239SKiyoung Kim file="$func_basename_result" 3150*735d6239SKiyoung Kim outputname="$tmpdir/$file" 3151*735d6239SKiyoung Kim # Replace the output file specification. 3152*735d6239SKiyoung Kim relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3153*735d6239SKiyoung Kim 3154*735d6239SKiyoung Kim $opt_silent || { 3155*735d6239SKiyoung Kim func_quote_for_expand "$relink_command" 3156*735d6239SKiyoung Kim eval "func_echo $func_quote_for_expand_result" 3157*735d6239SKiyoung Kim } 3158*735d6239SKiyoung Kim if eval "$relink_command"; then : 3159*735d6239SKiyoung Kim else 3160*735d6239SKiyoung Kim func_error "error: relink \`$file' with the above command before installing it" 3161*735d6239SKiyoung Kim $opt_dry_run || ${RM}r "$tmpdir" 3162*735d6239SKiyoung Kim continue 3163*735d6239SKiyoung Kim fi 3164*735d6239SKiyoung Kim file="$outputname" 3165*735d6239SKiyoung Kim else 3166*735d6239SKiyoung Kim func_warning "cannot relink \`$file'" 3167*735d6239SKiyoung Kim fi 3168*735d6239SKiyoung Kim } 3169*735d6239SKiyoung Kim else 3170*735d6239SKiyoung Kim # Install the binary that we compiled earlier. 3171*735d6239SKiyoung Kim file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3172*735d6239SKiyoung Kim fi 3173*735d6239SKiyoung Kim fi 3174*735d6239SKiyoung Kim 3175*735d6239SKiyoung Kim # remove .exe since cygwin /usr/bin/install will append another 3176*735d6239SKiyoung Kim # one anyway 3177*735d6239SKiyoung Kim case $install_prog,$host in 3178*735d6239SKiyoung Kim */usr/bin/install*,*cygwin*) 3179*735d6239SKiyoung Kim case $file:$destfile in 3180*735d6239SKiyoung Kim *.exe:*.exe) 3181*735d6239SKiyoung Kim # this is ok 3182*735d6239SKiyoung Kim ;; 3183*735d6239SKiyoung Kim *.exe:*) 3184*735d6239SKiyoung Kim destfile=$destfile.exe 3185*735d6239SKiyoung Kim ;; 3186*735d6239SKiyoung Kim *:*.exe) 3187*735d6239SKiyoung Kim func_stripname '' '.exe' "$destfile" 3188*735d6239SKiyoung Kim destfile=$func_stripname_result 3189*735d6239SKiyoung Kim ;; 3190*735d6239SKiyoung Kim esac 3191*735d6239SKiyoung Kim ;; 3192*735d6239SKiyoung Kim esac 3193*735d6239SKiyoung Kim func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3194*735d6239SKiyoung Kim $opt_dry_run || if test -n "$outputname"; then 3195*735d6239SKiyoung Kim ${RM}r "$tmpdir" 3196*735d6239SKiyoung Kim fi 3197*735d6239SKiyoung Kim ;; 3198*735d6239SKiyoung Kim esac 3199*735d6239SKiyoung Kim done 3200*735d6239SKiyoung Kim 3201*735d6239SKiyoung Kim for file in $staticlibs; do 3202*735d6239SKiyoung Kim func_basename "$file" 3203*735d6239SKiyoung Kim name="$func_basename_result" 3204*735d6239SKiyoung Kim 3205*735d6239SKiyoung Kim # Set up the ranlib parameters. 3206*735d6239SKiyoung Kim oldlib="$destdir/$name" 3207*735d6239SKiyoung Kim 3208*735d6239SKiyoung Kim func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209*735d6239SKiyoung Kim 3210*735d6239SKiyoung Kim if test -n "$stripme" && test -n "$old_striplib"; then 3211*735d6239SKiyoung Kim func_show_eval "$old_striplib $oldlib" 'exit $?' 3212*735d6239SKiyoung Kim fi 3213*735d6239SKiyoung Kim 3214*735d6239SKiyoung Kim # Do each command in the postinstall commands. 3215*735d6239SKiyoung Kim func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216*735d6239SKiyoung Kim done 3217*735d6239SKiyoung Kim 3218*735d6239SKiyoung Kim test -n "$future_libdirs" && \ 3219*735d6239SKiyoung Kim func_warning "remember to run \`$progname --finish$future_libdirs'" 3220*735d6239SKiyoung Kim 3221*735d6239SKiyoung Kim if test -n "$current_libdirs"; then 3222*735d6239SKiyoung Kim # Maybe just do a dry run. 3223*735d6239SKiyoung Kim $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224*735d6239SKiyoung Kim exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225*735d6239SKiyoung Kim else 3226*735d6239SKiyoung Kim exit $EXIT_SUCCESS 3227*735d6239SKiyoung Kim fi 3228*735d6239SKiyoung Kim} 3229*735d6239SKiyoung Kim 3230*735d6239SKiyoung Kimtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231*735d6239SKiyoung Kim 3232*735d6239SKiyoung Kim 3233*735d6239SKiyoung Kim# func_generate_dlsyms outputname originator pic_p 3234*735d6239SKiyoung Kim# Extract symbols from dlprefiles and create ${outputname}S.o with 3235*735d6239SKiyoung Kim# a dlpreopen symbol table. 3236*735d6239SKiyoung Kimfunc_generate_dlsyms () 3237*735d6239SKiyoung Kim{ 3238*735d6239SKiyoung Kim $opt_debug 3239*735d6239SKiyoung Kim my_outputname="$1" 3240*735d6239SKiyoung Kim my_originator="$2" 3241*735d6239SKiyoung Kim my_pic_p="${3-no}" 3242*735d6239SKiyoung Kim my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243*735d6239SKiyoung Kim my_dlsyms= 3244*735d6239SKiyoung Kim 3245*735d6239SKiyoung Kim if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246*735d6239SKiyoung Kim if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247*735d6239SKiyoung Kim my_dlsyms="${my_outputname}S.c" 3248*735d6239SKiyoung Kim else 3249*735d6239SKiyoung Kim func_error "not configured to extract global symbols from dlpreopened files" 3250*735d6239SKiyoung Kim fi 3251*735d6239SKiyoung Kim fi 3252*735d6239SKiyoung Kim 3253*735d6239SKiyoung Kim if test -n "$my_dlsyms"; then 3254*735d6239SKiyoung Kim case $my_dlsyms in 3255*735d6239SKiyoung Kim "") ;; 3256*735d6239SKiyoung Kim *.c) 3257*735d6239SKiyoung Kim # Discover the nlist of each of the dlfiles. 3258*735d6239SKiyoung Kim nlist="$output_objdir/${my_outputname}.nm" 3259*735d6239SKiyoung Kim 3260*735d6239SKiyoung Kim func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261*735d6239SKiyoung Kim 3262*735d6239SKiyoung Kim # Parse the name list into a source file. 3263*735d6239SKiyoung Kim func_verbose "creating $output_objdir/$my_dlsyms" 3264*735d6239SKiyoung Kim 3265*735d6239SKiyoung Kim $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266*735d6239SKiyoung Kim/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267*735d6239SKiyoung Kim/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268*735d6239SKiyoung Kim 3269*735d6239SKiyoung Kim#ifdef __cplusplus 3270*735d6239SKiyoung Kimextern \"C\" { 3271*735d6239SKiyoung Kim#endif 3272*735d6239SKiyoung Kim 3273*735d6239SKiyoung Kim#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 3274*735d6239SKiyoung Kim#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 3275*735d6239SKiyoung Kim#endif 3276*735d6239SKiyoung Kim 3277*735d6239SKiyoung Kim/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 3278*735d6239SKiyoung Kim#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 3279*735d6239SKiyoung Kim/* DATA imports from DLLs on WIN32 con't be const, because runtime 3280*735d6239SKiyoung Kim relocations are performed -- see ld's documentation on pseudo-relocs. */ 3281*735d6239SKiyoung Kim# define LT_DLSYM_CONST 3282*735d6239SKiyoung Kim#elif defined(__osf__) 3283*735d6239SKiyoung Kim/* This system does not cope well with relocations in const data. */ 3284*735d6239SKiyoung Kim# define LT_DLSYM_CONST 3285*735d6239SKiyoung Kim#else 3286*735d6239SKiyoung Kim# define LT_DLSYM_CONST const 3287*735d6239SKiyoung Kim#endif 3288*735d6239SKiyoung Kim 3289*735d6239SKiyoung Kim/* External symbol declarations for the compiler. */\ 3290*735d6239SKiyoung Kim" 3291*735d6239SKiyoung Kim 3292*735d6239SKiyoung Kim if test "$dlself" = yes; then 3293*735d6239SKiyoung Kim func_verbose "generating symbol list for \`$output'" 3294*735d6239SKiyoung Kim 3295*735d6239SKiyoung Kim $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296*735d6239SKiyoung Kim 3297*735d6239SKiyoung Kim # Add our own program objects to the symbol list. 3298*735d6239SKiyoung Kim progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299*735d6239SKiyoung Kim for progfile in $progfiles; do 3300*735d6239SKiyoung Kim func_to_tool_file "$progfile" func_convert_file_msys_to_w32 3301*735d6239SKiyoung Kim func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 3302*735d6239SKiyoung Kim $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303*735d6239SKiyoung Kim done 3304*735d6239SKiyoung Kim 3305*735d6239SKiyoung Kim if test -n "$exclude_expsyms"; then 3306*735d6239SKiyoung Kim $opt_dry_run || { 3307*735d6239SKiyoung Kim eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308*735d6239SKiyoung Kim eval '$MV "$nlist"T "$nlist"' 3309*735d6239SKiyoung Kim } 3310*735d6239SKiyoung Kim fi 3311*735d6239SKiyoung Kim 3312*735d6239SKiyoung Kim if test -n "$export_symbols_regex"; then 3313*735d6239SKiyoung Kim $opt_dry_run || { 3314*735d6239SKiyoung Kim eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315*735d6239SKiyoung Kim eval '$MV "$nlist"T "$nlist"' 3316*735d6239SKiyoung Kim } 3317*735d6239SKiyoung Kim fi 3318*735d6239SKiyoung Kim 3319*735d6239SKiyoung Kim # Prepare the list of exported symbols 3320*735d6239SKiyoung Kim if test -z "$export_symbols"; then 3321*735d6239SKiyoung Kim export_symbols="$output_objdir/$outputname.exp" 3322*735d6239SKiyoung Kim $opt_dry_run || { 3323*735d6239SKiyoung Kim $RM $export_symbols 3324*735d6239SKiyoung Kim eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325*735d6239SKiyoung Kim case $host in 3326*735d6239SKiyoung Kim *cygwin* | *mingw* | *cegcc* ) 3327*735d6239SKiyoung Kim eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328*735d6239SKiyoung Kim eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329*735d6239SKiyoung Kim ;; 3330*735d6239SKiyoung Kim esac 3331*735d6239SKiyoung Kim } 3332*735d6239SKiyoung Kim else 3333*735d6239SKiyoung Kim $opt_dry_run || { 3334*735d6239SKiyoung Kim eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335*735d6239SKiyoung Kim eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336*735d6239SKiyoung Kim eval '$MV "$nlist"T "$nlist"' 3337*735d6239SKiyoung Kim case $host in 3338*735d6239SKiyoung Kim *cygwin* | *mingw* | *cegcc* ) 3339*735d6239SKiyoung Kim eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340*735d6239SKiyoung Kim eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341*735d6239SKiyoung Kim ;; 3342*735d6239SKiyoung Kim esac 3343*735d6239SKiyoung Kim } 3344*735d6239SKiyoung Kim fi 3345*735d6239SKiyoung Kim fi 3346*735d6239SKiyoung Kim 3347*735d6239SKiyoung Kim for dlprefile in $dlprefiles; do 3348*735d6239SKiyoung Kim func_verbose "extracting global C symbols from \`$dlprefile'" 3349*735d6239SKiyoung Kim func_basename "$dlprefile" 3350*735d6239SKiyoung Kim name="$func_basename_result" 3351*735d6239SKiyoung Kim case $host in 3352*735d6239SKiyoung Kim *cygwin* | *mingw* | *cegcc* ) 3353*735d6239SKiyoung Kim # if an import library, we need to obtain dlname 3354*735d6239SKiyoung Kim if func_win32_import_lib_p "$dlprefile"; then 3355*735d6239SKiyoung Kim func_tr_sh "$dlprefile" 3356*735d6239SKiyoung Kim eval "curr_lafile=\$libfile_$func_tr_sh_result" 3357*735d6239SKiyoung Kim dlprefile_dlbasename="" 3358*735d6239SKiyoung Kim if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 3359*735d6239SKiyoung Kim # Use subshell, to avoid clobbering current variable values 3360*735d6239SKiyoung Kim dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 3361*735d6239SKiyoung Kim if test -n "$dlprefile_dlname" ; then 3362*735d6239SKiyoung Kim func_basename "$dlprefile_dlname" 3363*735d6239SKiyoung Kim dlprefile_dlbasename="$func_basename_result" 3364*735d6239SKiyoung Kim else 3365*735d6239SKiyoung Kim # no lafile. user explicitly requested -dlpreopen <import library>. 3366*735d6239SKiyoung Kim $sharedlib_from_linklib_cmd "$dlprefile" 3367*735d6239SKiyoung Kim dlprefile_dlbasename=$sharedlib_from_linklib_result 3368*735d6239SKiyoung Kim fi 3369*735d6239SKiyoung Kim fi 3370*735d6239SKiyoung Kim $opt_dry_run || { 3371*735d6239SKiyoung Kim if test -n "$dlprefile_dlbasename" ; then 3372*735d6239SKiyoung Kim eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 3373*735d6239SKiyoung Kim else 3374*735d6239SKiyoung Kim func_warning "Could not compute DLL name from $name" 3375*735d6239SKiyoung Kim eval '$ECHO ": $name " >> "$nlist"' 3376*735d6239SKiyoung Kim fi 3377*735d6239SKiyoung Kim func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3378*735d6239SKiyoung Kim eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 3379*735d6239SKiyoung Kim $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 3380*735d6239SKiyoung Kim } 3381*735d6239SKiyoung Kim else # not an import lib 3382*735d6239SKiyoung Kim $opt_dry_run || { 3383*735d6239SKiyoung Kim eval '$ECHO ": $name " >> "$nlist"' 3384*735d6239SKiyoung Kim func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3385*735d6239SKiyoung Kim eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3386*735d6239SKiyoung Kim } 3387*735d6239SKiyoung Kim fi 3388*735d6239SKiyoung Kim ;; 3389*735d6239SKiyoung Kim *) 3390*735d6239SKiyoung Kim $opt_dry_run || { 3391*735d6239SKiyoung Kim eval '$ECHO ": $name " >> "$nlist"' 3392*735d6239SKiyoung Kim func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3393*735d6239SKiyoung Kim eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3394*735d6239SKiyoung Kim } 3395*735d6239SKiyoung Kim ;; 3396*735d6239SKiyoung Kim esac 3397*735d6239SKiyoung Kim done 3398*735d6239SKiyoung Kim 3399*735d6239SKiyoung Kim $opt_dry_run || { 3400*735d6239SKiyoung Kim # Make sure we have at least an empty file. 3401*735d6239SKiyoung Kim test -f "$nlist" || : > "$nlist" 3402*735d6239SKiyoung Kim 3403*735d6239SKiyoung Kim if test -n "$exclude_expsyms"; then 3404*735d6239SKiyoung Kim $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405*735d6239SKiyoung Kim $MV "$nlist"T "$nlist" 3406*735d6239SKiyoung Kim fi 3407*735d6239SKiyoung Kim 3408*735d6239SKiyoung Kim # Try sorting and uniquifying the output. 3409*735d6239SKiyoung Kim if $GREP -v "^: " < "$nlist" | 3410*735d6239SKiyoung Kim if sort -k 3 </dev/null >/dev/null 2>&1; then 3411*735d6239SKiyoung Kim sort -k 3 3412*735d6239SKiyoung Kim else 3413*735d6239SKiyoung Kim sort +2 3414*735d6239SKiyoung Kim fi | 3415*735d6239SKiyoung Kim uniq > "$nlist"S; then 3416*735d6239SKiyoung Kim : 3417*735d6239SKiyoung Kim else 3418*735d6239SKiyoung Kim $GREP -v "^: " < "$nlist" > "$nlist"S 3419*735d6239SKiyoung Kim fi 3420*735d6239SKiyoung Kim 3421*735d6239SKiyoung Kim if test -f "$nlist"S; then 3422*735d6239SKiyoung Kim eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423*735d6239SKiyoung Kim else 3424*735d6239SKiyoung Kim echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425*735d6239SKiyoung Kim fi 3426*735d6239SKiyoung Kim 3427*735d6239SKiyoung Kim echo >> "$output_objdir/$my_dlsyms" "\ 3428*735d6239SKiyoung Kim 3429*735d6239SKiyoung Kim/* The mapping between symbol names and symbols. */ 3430*735d6239SKiyoung Kimtypedef struct { 3431*735d6239SKiyoung Kim const char *name; 3432*735d6239SKiyoung Kim void *address; 3433*735d6239SKiyoung Kim} lt_dlsymlist; 3434*735d6239SKiyoung Kimextern LT_DLSYM_CONST lt_dlsymlist 3435*735d6239SKiyoung Kimlt_${my_prefix}_LTX_preloaded_symbols[]; 3436*735d6239SKiyoung KimLT_DLSYM_CONST lt_dlsymlist 3437*735d6239SKiyoung Kimlt_${my_prefix}_LTX_preloaded_symbols[] = 3438*735d6239SKiyoung Kim{\ 3439*735d6239SKiyoung Kim { \"$my_originator\", (void *) 0 }," 3440*735d6239SKiyoung Kim 3441*735d6239SKiyoung Kim case $need_lib_prefix in 3442*735d6239SKiyoung Kim no) 3443*735d6239SKiyoung Kim eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444*735d6239SKiyoung Kim ;; 3445*735d6239SKiyoung Kim *) 3446*735d6239SKiyoung Kim eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447*735d6239SKiyoung Kim ;; 3448*735d6239SKiyoung Kim esac 3449*735d6239SKiyoung Kim echo >> "$output_objdir/$my_dlsyms" "\ 3450*735d6239SKiyoung Kim {0, (void *) 0} 3451*735d6239SKiyoung Kim}; 3452*735d6239SKiyoung Kim 3453*735d6239SKiyoung Kim/* This works around a problem in FreeBSD linker */ 3454*735d6239SKiyoung Kim#ifdef FREEBSD_WORKAROUND 3455*735d6239SKiyoung Kimstatic const void *lt_preloaded_setup() { 3456*735d6239SKiyoung Kim return lt_${my_prefix}_LTX_preloaded_symbols; 3457*735d6239SKiyoung Kim} 3458*735d6239SKiyoung Kim#endif 3459*735d6239SKiyoung Kim 3460*735d6239SKiyoung Kim#ifdef __cplusplus 3461*735d6239SKiyoung Kim} 3462*735d6239SKiyoung Kim#endif\ 3463*735d6239SKiyoung Kim" 3464*735d6239SKiyoung Kim } # !$opt_dry_run 3465*735d6239SKiyoung Kim 3466*735d6239SKiyoung Kim pic_flag_for_symtable= 3467*735d6239SKiyoung Kim case "$compile_command " in 3468*735d6239SKiyoung Kim *" -static "*) ;; 3469*735d6239SKiyoung Kim *) 3470*735d6239SKiyoung Kim case $host in 3471*735d6239SKiyoung Kim # compiling the symbol table file with pic_flag works around 3472*735d6239SKiyoung Kim # a FreeBSD bug that causes programs to crash when -lm is 3473*735d6239SKiyoung Kim # linked before any other PIC object. But we must not use 3474*735d6239SKiyoung Kim # pic_flag when linking with -static. The problem exists in 3475*735d6239SKiyoung Kim # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3476*735d6239SKiyoung Kim *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477*735d6239SKiyoung Kim pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478*735d6239SKiyoung Kim *-*-hpux*) 3479*735d6239SKiyoung Kim pic_flag_for_symtable=" $pic_flag" ;; 3480*735d6239SKiyoung Kim *) 3481*735d6239SKiyoung Kim if test "X$my_pic_p" != Xno; then 3482*735d6239SKiyoung Kim pic_flag_for_symtable=" $pic_flag" 3483*735d6239SKiyoung Kim fi 3484*735d6239SKiyoung Kim ;; 3485*735d6239SKiyoung Kim esac 3486*735d6239SKiyoung Kim ;; 3487*735d6239SKiyoung Kim esac 3488*735d6239SKiyoung Kim symtab_cflags= 3489*735d6239SKiyoung Kim for arg in $LTCFLAGS; do 3490*735d6239SKiyoung Kim case $arg in 3491*735d6239SKiyoung Kim -pie | -fpie | -fPIE) ;; 3492*735d6239SKiyoung Kim *) func_append symtab_cflags " $arg" ;; 3493*735d6239SKiyoung Kim esac 3494*735d6239SKiyoung Kim done 3495*735d6239SKiyoung Kim 3496*735d6239SKiyoung Kim # Now compile the dynamic symbol file. 3497*735d6239SKiyoung Kim func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498*735d6239SKiyoung Kim 3499*735d6239SKiyoung Kim # Clean up the generated files. 3500*735d6239SKiyoung Kim func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501*735d6239SKiyoung Kim 3502*735d6239SKiyoung Kim # Transform the symbol file into the correct name. 3503*735d6239SKiyoung Kim symfileobj="$output_objdir/${my_outputname}S.$objext" 3504*735d6239SKiyoung Kim case $host in 3505*735d6239SKiyoung Kim *cygwin* | *mingw* | *cegcc* ) 3506*735d6239SKiyoung Kim if test -f "$output_objdir/$my_outputname.def"; then 3507*735d6239SKiyoung Kim compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3508*735d6239SKiyoung Kim finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509*735d6239SKiyoung Kim else 3510*735d6239SKiyoung Kim compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3511*735d6239SKiyoung Kim finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512*735d6239SKiyoung Kim fi 3513*735d6239SKiyoung Kim ;; 3514*735d6239SKiyoung Kim *) 3515*735d6239SKiyoung Kim compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3516*735d6239SKiyoung Kim finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517*735d6239SKiyoung Kim ;; 3518*735d6239SKiyoung Kim esac 3519*735d6239SKiyoung Kim ;; 3520*735d6239SKiyoung Kim *) 3521*735d6239SKiyoung Kim func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522*735d6239SKiyoung Kim ;; 3523*735d6239SKiyoung Kim esac 3524*735d6239SKiyoung Kim else 3525*735d6239SKiyoung Kim # We keep going just in case the user didn't refer to 3526*735d6239SKiyoung Kim # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527*735d6239SKiyoung Kim # really was required. 3528*735d6239SKiyoung Kim 3529*735d6239SKiyoung Kim # Nullify the symbol file. 3530*735d6239SKiyoung Kim compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 3531*735d6239SKiyoung Kim finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532*735d6239SKiyoung Kim fi 3533*735d6239SKiyoung Kim} 3534*735d6239SKiyoung Kim 3535*735d6239SKiyoung Kim# func_win32_libid arg 3536*735d6239SKiyoung Kim# return the library type of file 'arg' 3537*735d6239SKiyoung Kim# 3538*735d6239SKiyoung Kim# Need a lot of goo to handle *both* DLLs and import libs 3539*735d6239SKiyoung Kim# Has to be a shell function in order to 'eat' the argument 3540*735d6239SKiyoung Kim# that is supplied when $file_magic_command is called. 3541*735d6239SKiyoung Kim# Despite the name, also deal with 64 bit binaries. 3542*735d6239SKiyoung Kimfunc_win32_libid () 3543*735d6239SKiyoung Kim{ 3544*735d6239SKiyoung Kim $opt_debug 3545*735d6239SKiyoung Kim win32_libid_type="unknown" 3546*735d6239SKiyoung Kim win32_fileres=`file -L $1 2>/dev/null` 3547*735d6239SKiyoung Kim case $win32_fileres in 3548*735d6239SKiyoung Kim *ar\ archive\ import\ library*) # definitely import 3549*735d6239SKiyoung Kim win32_libid_type="x86 archive import" 3550*735d6239SKiyoung Kim ;; 3551*735d6239SKiyoung Kim *ar\ archive*) # could be an import, or static 3552*735d6239SKiyoung Kim # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553*735d6239SKiyoung Kim if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 3554*735d6239SKiyoung Kim $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 3555*735d6239SKiyoung Kim func_to_tool_file "$1" func_convert_file_msys_to_w32 3556*735d6239SKiyoung Kim win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557*735d6239SKiyoung Kim $SED -n -e ' 3558*735d6239SKiyoung Kim 1,100{ 3559*735d6239SKiyoung Kim / I /{ 3560*735d6239SKiyoung Kim s,.*,import, 3561*735d6239SKiyoung Kim p 3562*735d6239SKiyoung Kim q 3563*735d6239SKiyoung Kim } 3564*735d6239SKiyoung Kim }'` 3565*735d6239SKiyoung Kim case $win32_nmres in 3566*735d6239SKiyoung Kim import*) win32_libid_type="x86 archive import";; 3567*735d6239SKiyoung Kim *) win32_libid_type="x86 archive static";; 3568*735d6239SKiyoung Kim esac 3569*735d6239SKiyoung Kim fi 3570*735d6239SKiyoung Kim ;; 3571*735d6239SKiyoung Kim *DLL*) 3572*735d6239SKiyoung Kim win32_libid_type="x86 DLL" 3573*735d6239SKiyoung Kim ;; 3574*735d6239SKiyoung Kim *executable*) # but shell scripts are "executable" too... 3575*735d6239SKiyoung Kim case $win32_fileres in 3576*735d6239SKiyoung Kim *MS\ Windows\ PE\ Intel*) 3577*735d6239SKiyoung Kim win32_libid_type="x86 DLL" 3578*735d6239SKiyoung Kim ;; 3579*735d6239SKiyoung Kim esac 3580*735d6239SKiyoung Kim ;; 3581*735d6239SKiyoung Kim esac 3582*735d6239SKiyoung Kim $ECHO "$win32_libid_type" 3583*735d6239SKiyoung Kim} 3584*735d6239SKiyoung Kim 3585*735d6239SKiyoung Kim# func_cygming_dll_for_implib ARG 3586*735d6239SKiyoung Kim# 3587*735d6239SKiyoung Kim# Platform-specific function to extract the 3588*735d6239SKiyoung Kim# name of the DLL associated with the specified 3589*735d6239SKiyoung Kim# import library ARG. 3590*735d6239SKiyoung Kim# Invoked by eval'ing the libtool variable 3591*735d6239SKiyoung Kim# $sharedlib_from_linklib_cmd 3592*735d6239SKiyoung Kim# Result is available in the variable 3593*735d6239SKiyoung Kim# $sharedlib_from_linklib_result 3594*735d6239SKiyoung Kimfunc_cygming_dll_for_implib () 3595*735d6239SKiyoung Kim{ 3596*735d6239SKiyoung Kim $opt_debug 3597*735d6239SKiyoung Kim sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 3598*735d6239SKiyoung Kim} 3599*735d6239SKiyoung Kim 3600*735d6239SKiyoung Kim# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 3601*735d6239SKiyoung Kim# 3602*735d6239SKiyoung Kim# The is the core of a fallback implementation of a 3603*735d6239SKiyoung Kim# platform-specific function to extract the name of the 3604*735d6239SKiyoung Kim# DLL associated with the specified import library LIBNAME. 3605*735d6239SKiyoung Kim# 3606*735d6239SKiyoung Kim# SECTION_NAME is either .idata$6 or .idata$7, depending 3607*735d6239SKiyoung Kim# on the platform and compiler that created the implib. 3608*735d6239SKiyoung Kim# 3609*735d6239SKiyoung Kim# Echos the name of the DLL associated with the 3610*735d6239SKiyoung Kim# specified import library. 3611*735d6239SKiyoung Kimfunc_cygming_dll_for_implib_fallback_core () 3612*735d6239SKiyoung Kim{ 3613*735d6239SKiyoung Kim $opt_debug 3614*735d6239SKiyoung Kim match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 3615*735d6239SKiyoung Kim $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 3616*735d6239SKiyoung Kim $SED '/^Contents of section '"$match_literal"':/{ 3617*735d6239SKiyoung Kim # Place marker at beginning of archive member dllname section 3618*735d6239SKiyoung Kim s/.*/====MARK====/ 3619*735d6239SKiyoung Kim p 3620*735d6239SKiyoung Kim d 3621*735d6239SKiyoung Kim } 3622*735d6239SKiyoung Kim # These lines can sometimes be longer than 43 characters, but 3623*735d6239SKiyoung Kim # are always uninteresting 3624*735d6239SKiyoung Kim /:[ ]*file format pe[i]\{,1\}-/d 3625*735d6239SKiyoung Kim /^In archive [^:]*:/d 3626*735d6239SKiyoung Kim # Ensure marker is printed 3627*735d6239SKiyoung Kim /^====MARK====/p 3628*735d6239SKiyoung Kim # Remove all lines with less than 43 characters 3629*735d6239SKiyoung Kim /^.\{43\}/!d 3630*735d6239SKiyoung Kim # From remaining lines, remove first 43 characters 3631*735d6239SKiyoung Kim s/^.\{43\}//' | 3632*735d6239SKiyoung Kim $SED -n ' 3633*735d6239SKiyoung Kim # Join marker and all lines until next marker into a single line 3634*735d6239SKiyoung Kim /^====MARK====/ b para 3635*735d6239SKiyoung Kim H 3636*735d6239SKiyoung Kim $ b para 3637*735d6239SKiyoung Kim b 3638*735d6239SKiyoung Kim :para 3639*735d6239SKiyoung Kim x 3640*735d6239SKiyoung Kim s/\n//g 3641*735d6239SKiyoung Kim # Remove the marker 3642*735d6239SKiyoung Kim s/^====MARK====// 3643*735d6239SKiyoung Kim # Remove trailing dots and whitespace 3644*735d6239SKiyoung Kim s/[\. \t]*$// 3645*735d6239SKiyoung Kim # Print 3646*735d6239SKiyoung Kim /./p' | 3647*735d6239SKiyoung Kim # we now have a list, one entry per line, of the stringified 3648*735d6239SKiyoung Kim # contents of the appropriate section of all members of the 3649*735d6239SKiyoung Kim # archive which possess that section. Heuristic: eliminate 3650*735d6239SKiyoung Kim # all those which have a first or second character that is 3651*735d6239SKiyoung Kim # a '.' (that is, objdump's representation of an unprintable 3652*735d6239SKiyoung Kim # character.) This should work for all archives with less than 3653*735d6239SKiyoung Kim # 0x302f exports -- but will fail for DLLs whose name actually 3654*735d6239SKiyoung Kim # begins with a literal '.' or a single character followed by 3655*735d6239SKiyoung Kim # a '.'. 3656*735d6239SKiyoung Kim # 3657*735d6239SKiyoung Kim # Of those that remain, print the first one. 3658*735d6239SKiyoung Kim $SED -e '/^\./d;/^.\./d;q' 3659*735d6239SKiyoung Kim} 3660*735d6239SKiyoung Kim 3661*735d6239SKiyoung Kim# func_cygming_gnu_implib_p ARG 3662*735d6239SKiyoung Kim# This predicate returns with zero status (TRUE) if 3663*735d6239SKiyoung Kim# ARG is a GNU/binutils-style import library. Returns 3664*735d6239SKiyoung Kim# with nonzero status (FALSE) otherwise. 3665*735d6239SKiyoung Kimfunc_cygming_gnu_implib_p () 3666*735d6239SKiyoung Kim{ 3667*735d6239SKiyoung Kim $opt_debug 3668*735d6239SKiyoung Kim func_to_tool_file "$1" func_convert_file_msys_to_w32 3669*735d6239SKiyoung Kim func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` 3670*735d6239SKiyoung Kim test -n "$func_cygming_gnu_implib_tmp" 3671*735d6239SKiyoung Kim} 3672*735d6239SKiyoung Kim 3673*735d6239SKiyoung Kim# func_cygming_ms_implib_p ARG 3674*735d6239SKiyoung Kim# This predicate returns with zero status (TRUE) if 3675*735d6239SKiyoung Kim# ARG is an MS-style import library. Returns 3676*735d6239SKiyoung Kim# with nonzero status (FALSE) otherwise. 3677*735d6239SKiyoung Kimfunc_cygming_ms_implib_p () 3678*735d6239SKiyoung Kim{ 3679*735d6239SKiyoung Kim $opt_debug 3680*735d6239SKiyoung Kim func_to_tool_file "$1" func_convert_file_msys_to_w32 3681*735d6239SKiyoung Kim func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 3682*735d6239SKiyoung Kim test -n "$func_cygming_ms_implib_tmp" 3683*735d6239SKiyoung Kim} 3684*735d6239SKiyoung Kim 3685*735d6239SKiyoung Kim# func_cygming_dll_for_implib_fallback ARG 3686*735d6239SKiyoung Kim# Platform-specific function to extract the 3687*735d6239SKiyoung Kim# name of the DLL associated with the specified 3688*735d6239SKiyoung Kim# import library ARG. 3689*735d6239SKiyoung Kim# 3690*735d6239SKiyoung Kim# This fallback implementation is for use when $DLLTOOL 3691*735d6239SKiyoung Kim# does not support the --identify-strict option. 3692*735d6239SKiyoung Kim# Invoked by eval'ing the libtool variable 3693*735d6239SKiyoung Kim# $sharedlib_from_linklib_cmd 3694*735d6239SKiyoung Kim# Result is available in the variable 3695*735d6239SKiyoung Kim# $sharedlib_from_linklib_result 3696*735d6239SKiyoung Kimfunc_cygming_dll_for_implib_fallback () 3697*735d6239SKiyoung Kim{ 3698*735d6239SKiyoung Kim $opt_debug 3699*735d6239SKiyoung Kim if func_cygming_gnu_implib_p "$1" ; then 3700*735d6239SKiyoung Kim # binutils import library 3701*735d6239SKiyoung Kim sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 3702*735d6239SKiyoung Kim elif func_cygming_ms_implib_p "$1" ; then 3703*735d6239SKiyoung Kim # ms-generated import library 3704*735d6239SKiyoung Kim sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 3705*735d6239SKiyoung Kim else 3706*735d6239SKiyoung Kim # unknown 3707*735d6239SKiyoung Kim sharedlib_from_linklib_result="" 3708*735d6239SKiyoung Kim fi 3709*735d6239SKiyoung Kim} 3710*735d6239SKiyoung Kim 3711*735d6239SKiyoung Kim 3712*735d6239SKiyoung Kim# func_extract_an_archive dir oldlib 3713*735d6239SKiyoung Kimfunc_extract_an_archive () 3714*735d6239SKiyoung Kim{ 3715*735d6239SKiyoung Kim $opt_debug 3716*735d6239SKiyoung Kim f_ex_an_ar_dir="$1"; shift 3717*735d6239SKiyoung Kim f_ex_an_ar_oldlib="$1" 3718*735d6239SKiyoung Kim if test "$lock_old_archive_extraction" = yes; then 3719*735d6239SKiyoung Kim lockfile=$f_ex_an_ar_oldlib.lock 3720*735d6239SKiyoung Kim until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3721*735d6239SKiyoung Kim func_echo "Waiting for $lockfile to be removed" 3722*735d6239SKiyoung Kim sleep 2 3723*735d6239SKiyoung Kim done 3724*735d6239SKiyoung Kim fi 3725*735d6239SKiyoung Kim func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 3726*735d6239SKiyoung Kim 'stat=$?; rm -f "$lockfile"; exit $stat' 3727*735d6239SKiyoung Kim if test "$lock_old_archive_extraction" = yes; then 3728*735d6239SKiyoung Kim $opt_dry_run || rm -f "$lockfile" 3729*735d6239SKiyoung Kim fi 3730*735d6239SKiyoung Kim if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731*735d6239SKiyoung Kim : 3732*735d6239SKiyoung Kim else 3733*735d6239SKiyoung Kim func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734*735d6239SKiyoung Kim fi 3735*735d6239SKiyoung Kim} 3736*735d6239SKiyoung Kim 3737*735d6239SKiyoung Kim 3738*735d6239SKiyoung Kim# func_extract_archives gentop oldlib ... 3739*735d6239SKiyoung Kimfunc_extract_archives () 3740*735d6239SKiyoung Kim{ 3741*735d6239SKiyoung Kim $opt_debug 3742*735d6239SKiyoung Kim my_gentop="$1"; shift 3743*735d6239SKiyoung Kim my_oldlibs=${1+"$@"} 3744*735d6239SKiyoung Kim my_oldobjs="" 3745*735d6239SKiyoung Kim my_xlib="" 3746*735d6239SKiyoung Kim my_xabs="" 3747*735d6239SKiyoung Kim my_xdir="" 3748*735d6239SKiyoung Kim 3749*735d6239SKiyoung Kim for my_xlib in $my_oldlibs; do 3750*735d6239SKiyoung Kim # Extract the objects. 3751*735d6239SKiyoung Kim case $my_xlib in 3752*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753*735d6239SKiyoung Kim *) my_xabs=`pwd`"/$my_xlib" ;; 3754*735d6239SKiyoung Kim esac 3755*735d6239SKiyoung Kim func_basename "$my_xlib" 3756*735d6239SKiyoung Kim my_xlib="$func_basename_result" 3757*735d6239SKiyoung Kim my_xlib_u=$my_xlib 3758*735d6239SKiyoung Kim while :; do 3759*735d6239SKiyoung Kim case " $extracted_archives " in 3760*735d6239SKiyoung Kim *" $my_xlib_u "*) 3761*735d6239SKiyoung Kim func_arith $extracted_serial + 1 3762*735d6239SKiyoung Kim extracted_serial=$func_arith_result 3763*735d6239SKiyoung Kim my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764*735d6239SKiyoung Kim *) break ;; 3765*735d6239SKiyoung Kim esac 3766*735d6239SKiyoung Kim done 3767*735d6239SKiyoung Kim extracted_archives="$extracted_archives $my_xlib_u" 3768*735d6239SKiyoung Kim my_xdir="$my_gentop/$my_xlib_u" 3769*735d6239SKiyoung Kim 3770*735d6239SKiyoung Kim func_mkdir_p "$my_xdir" 3771*735d6239SKiyoung Kim 3772*735d6239SKiyoung Kim case $host in 3773*735d6239SKiyoung Kim *-darwin*) 3774*735d6239SKiyoung Kim func_verbose "Extracting $my_xabs" 3775*735d6239SKiyoung Kim # Do not bother doing anything if just a dry run 3776*735d6239SKiyoung Kim $opt_dry_run || { 3777*735d6239SKiyoung Kim darwin_orig_dir=`pwd` 3778*735d6239SKiyoung Kim cd $my_xdir || exit $? 3779*735d6239SKiyoung Kim darwin_archive=$my_xabs 3780*735d6239SKiyoung Kim darwin_curdir=`pwd` 3781*735d6239SKiyoung Kim darwin_base_archive=`basename "$darwin_archive"` 3782*735d6239SKiyoung Kim darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783*735d6239SKiyoung Kim if test -n "$darwin_arches"; then 3784*735d6239SKiyoung Kim darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785*735d6239SKiyoung Kim darwin_arch= 3786*735d6239SKiyoung Kim func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787*735d6239SKiyoung Kim for darwin_arch in $darwin_arches ; do 3788*735d6239SKiyoung Kim func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789*735d6239SKiyoung Kim $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790*735d6239SKiyoung Kim cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791*735d6239SKiyoung Kim func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792*735d6239SKiyoung Kim cd "$darwin_curdir" 3793*735d6239SKiyoung Kim $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794*735d6239SKiyoung Kim done # $darwin_arches 3795*735d6239SKiyoung Kim ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796*735d6239SKiyoung Kim darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797*735d6239SKiyoung Kim darwin_file= 3798*735d6239SKiyoung Kim darwin_files= 3799*735d6239SKiyoung Kim for darwin_file in $darwin_filelist; do 3800*735d6239SKiyoung Kim darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801*735d6239SKiyoung Kim $LIPO -create -output "$darwin_file" $darwin_files 3802*735d6239SKiyoung Kim done # $darwin_filelist 3803*735d6239SKiyoung Kim $RM -rf unfat-$$ 3804*735d6239SKiyoung Kim cd "$darwin_orig_dir" 3805*735d6239SKiyoung Kim else 3806*735d6239SKiyoung Kim cd $darwin_orig_dir 3807*735d6239SKiyoung Kim func_extract_an_archive "$my_xdir" "$my_xabs" 3808*735d6239SKiyoung Kim fi # $darwin_arches 3809*735d6239SKiyoung Kim } # !$opt_dry_run 3810*735d6239SKiyoung Kim ;; 3811*735d6239SKiyoung Kim *) 3812*735d6239SKiyoung Kim func_extract_an_archive "$my_xdir" "$my_xabs" 3813*735d6239SKiyoung Kim ;; 3814*735d6239SKiyoung Kim esac 3815*735d6239SKiyoung Kim my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816*735d6239SKiyoung Kim done 3817*735d6239SKiyoung Kim 3818*735d6239SKiyoung Kim func_extract_archives_result="$my_oldobjs" 3819*735d6239SKiyoung Kim} 3820*735d6239SKiyoung Kim 3821*735d6239SKiyoung Kim 3822*735d6239SKiyoung Kim# func_emit_wrapper [arg=no] 3823*735d6239SKiyoung Kim# 3824*735d6239SKiyoung Kim# Emit a libtool wrapper script on stdout. 3825*735d6239SKiyoung Kim# Don't directly open a file because we may want to 3826*735d6239SKiyoung Kim# incorporate the script contents within a cygwin/mingw 3827*735d6239SKiyoung Kim# wrapper executable. Must ONLY be called from within 3828*735d6239SKiyoung Kim# func_mode_link because it depends on a number of variables 3829*735d6239SKiyoung Kim# set therein. 3830*735d6239SKiyoung Kim# 3831*735d6239SKiyoung Kim# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 3832*735d6239SKiyoung Kim# variable will take. If 'yes', then the emitted script 3833*735d6239SKiyoung Kim# will assume that the directory in which it is stored is 3834*735d6239SKiyoung Kim# the $objdir directory. This is a cygwin/mingw-specific 3835*735d6239SKiyoung Kim# behavior. 3836*735d6239SKiyoung Kimfunc_emit_wrapper () 3837*735d6239SKiyoung Kim{ 3838*735d6239SKiyoung Kim func_emit_wrapper_arg1=${1-no} 3839*735d6239SKiyoung Kim 3840*735d6239SKiyoung Kim $ECHO "\ 3841*735d6239SKiyoung Kim#! $SHELL 3842*735d6239SKiyoung Kim 3843*735d6239SKiyoung Kim# $output - temporary wrapper script for $objdir/$outputname 3844*735d6239SKiyoung Kim# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845*735d6239SKiyoung Kim# 3846*735d6239SKiyoung Kim# The $output program cannot be directly executed until all the libtool 3847*735d6239SKiyoung Kim# libraries that it depends on are installed. 3848*735d6239SKiyoung Kim# 3849*735d6239SKiyoung Kim# This wrapper script should never be moved out of the build directory. 3850*735d6239SKiyoung Kim# If it is, it will not operate correctly. 3851*735d6239SKiyoung Kim 3852*735d6239SKiyoung Kim# Sed substitution that helps us do robust quoting. It backslashifies 3853*735d6239SKiyoung Kim# metacharacters that are still active within double-quoted strings. 3854*735d6239SKiyoung Kimsed_quote_subst='$sed_quote_subst' 3855*735d6239SKiyoung Kim 3856*735d6239SKiyoung Kim# Be Bourne compatible 3857*735d6239SKiyoung Kimif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858*735d6239SKiyoung Kim emulate sh 3859*735d6239SKiyoung Kim NULLCMD=: 3860*735d6239SKiyoung Kim # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861*735d6239SKiyoung Kim # is contrary to our usage. Disable this feature. 3862*735d6239SKiyoung Kim alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863*735d6239SKiyoung Kim setopt NO_GLOB_SUBST 3864*735d6239SKiyoung Kimelse 3865*735d6239SKiyoung Kim case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866*735d6239SKiyoung Kimfi 3867*735d6239SKiyoung KimBIN_SH=xpg4; export BIN_SH # for Tru64 3868*735d6239SKiyoung KimDUALCASE=1; export DUALCASE # for MKS sh 3869*735d6239SKiyoung Kim 3870*735d6239SKiyoung Kim# The HP-UX ksh and POSIX shell print the target directory to stdout 3871*735d6239SKiyoung Kim# if CDPATH is set. 3872*735d6239SKiyoung Kim(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873*735d6239SKiyoung Kim 3874*735d6239SKiyoung Kimrelink_command=\"$relink_command\" 3875*735d6239SKiyoung Kim 3876*735d6239SKiyoung Kim# This environment variable determines our operation mode. 3877*735d6239SKiyoung Kimif test \"\$libtool_install_magic\" = \"$magic\"; then 3878*735d6239SKiyoung Kim # install mode needs the following variables: 3879*735d6239SKiyoung Kim generated_by_libtool_version='$macro_version' 3880*735d6239SKiyoung Kim notinst_deplibs='$notinst_deplibs' 3881*735d6239SKiyoung Kimelse 3882*735d6239SKiyoung Kim # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883*735d6239SKiyoung Kim if test \"\$libtool_execute_magic\" != \"$magic\"; then 3884*735d6239SKiyoung Kim file=\"\$0\"" 3885*735d6239SKiyoung Kim 3886*735d6239SKiyoung Kim qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 3887*735d6239SKiyoung Kim $ECHO "\ 3888*735d6239SKiyoung Kim 3889*735d6239SKiyoung Kim# A function that is used when there is no print builtin or printf. 3890*735d6239SKiyoung Kimfunc_fallback_echo () 3891*735d6239SKiyoung Kim{ 3892*735d6239SKiyoung Kim eval 'cat <<_LTECHO_EOF 3893*735d6239SKiyoung Kim\$1 3894*735d6239SKiyoung Kim_LTECHO_EOF' 3895*735d6239SKiyoung Kim} 3896*735d6239SKiyoung Kim ECHO=\"$qECHO\" 3897*735d6239SKiyoung Kim fi 3898*735d6239SKiyoung Kim 3899*735d6239SKiyoung Kim# Very basic option parsing. These options are (a) specific to 3900*735d6239SKiyoung Kim# the libtool wrapper, (b) are identical between the wrapper 3901*735d6239SKiyoung Kim# /script/ and the wrapper /executable/ which is used only on 3902*735d6239SKiyoung Kim# windows platforms, and (c) all begin with the string "--lt-" 3903*735d6239SKiyoung Kim# (application programs are unlikely to have options which match 3904*735d6239SKiyoung Kim# this pattern). 3905*735d6239SKiyoung Kim# 3906*735d6239SKiyoung Kim# There are only two supported options: --lt-debug and 3907*735d6239SKiyoung Kim# --lt-dump-script. There is, deliberately, no --lt-help. 3908*735d6239SKiyoung Kim# 3909*735d6239SKiyoung Kim# The first argument to this parsing function should be the 3910*735d6239SKiyoung Kim# script's $0 value, followed by "$@". 3911*735d6239SKiyoung Kimlt_option_debug= 3912*735d6239SKiyoung Kimfunc_parse_lt_options () 3913*735d6239SKiyoung Kim{ 3914*735d6239SKiyoung Kim lt_script_arg0=\$0 3915*735d6239SKiyoung Kim shift 3916*735d6239SKiyoung Kim for lt_opt 3917*735d6239SKiyoung Kim do 3918*735d6239SKiyoung Kim case \"\$lt_opt\" in 3919*735d6239SKiyoung Kim --lt-debug) lt_option_debug=1 ;; 3920*735d6239SKiyoung Kim --lt-dump-script) 3921*735d6239SKiyoung Kim lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3922*735d6239SKiyoung Kim test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3923*735d6239SKiyoung Kim lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3924*735d6239SKiyoung Kim cat \"\$lt_dump_D/\$lt_dump_F\" 3925*735d6239SKiyoung Kim exit 0 3926*735d6239SKiyoung Kim ;; 3927*735d6239SKiyoung Kim --lt-*) 3928*735d6239SKiyoung Kim \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3929*735d6239SKiyoung Kim exit 1 3930*735d6239SKiyoung Kim ;; 3931*735d6239SKiyoung Kim esac 3932*735d6239SKiyoung Kim done 3933*735d6239SKiyoung Kim 3934*735d6239SKiyoung Kim # Print the debug banner immediately: 3935*735d6239SKiyoung Kim if test -n \"\$lt_option_debug\"; then 3936*735d6239SKiyoung Kim echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3937*735d6239SKiyoung Kim fi 3938*735d6239SKiyoung Kim} 3939*735d6239SKiyoung Kim 3940*735d6239SKiyoung Kim# Used when --lt-debug. Prints its arguments to stdout 3941*735d6239SKiyoung Kim# (redirection is the responsibility of the caller) 3942*735d6239SKiyoung Kimfunc_lt_dump_args () 3943*735d6239SKiyoung Kim{ 3944*735d6239SKiyoung Kim lt_dump_args_N=1; 3945*735d6239SKiyoung Kim for lt_arg 3946*735d6239SKiyoung Kim do 3947*735d6239SKiyoung Kim \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3948*735d6239SKiyoung Kim lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3949*735d6239SKiyoung Kim done 3950*735d6239SKiyoung Kim} 3951*735d6239SKiyoung Kim 3952*735d6239SKiyoung Kim# Core function for launching the target application 3953*735d6239SKiyoung Kimfunc_exec_program_core () 3954*735d6239SKiyoung Kim{ 3955*735d6239SKiyoung Kim" 3956*735d6239SKiyoung Kim case $host in 3957*735d6239SKiyoung Kim # Backslashes separate directories on plain windows 3958*735d6239SKiyoung Kim *-*-mingw | *-*-os2* | *-cegcc*) 3959*735d6239SKiyoung Kim $ECHO "\ 3960*735d6239SKiyoung Kim if test -n \"\$lt_option_debug\"; then 3961*735d6239SKiyoung Kim \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3962*735d6239SKiyoung Kim func_lt_dump_args \${1+\"\$@\"} 1>&2 3963*735d6239SKiyoung Kim fi 3964*735d6239SKiyoung Kim exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3965*735d6239SKiyoung Kim" 3966*735d6239SKiyoung Kim ;; 3967*735d6239SKiyoung Kim 3968*735d6239SKiyoung Kim *) 3969*735d6239SKiyoung Kim $ECHO "\ 3970*735d6239SKiyoung Kim if test -n \"\$lt_option_debug\"; then 3971*735d6239SKiyoung Kim \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3972*735d6239SKiyoung Kim func_lt_dump_args \${1+\"\$@\"} 1>&2 3973*735d6239SKiyoung Kim fi 3974*735d6239SKiyoung Kim exec \"\$progdir/\$program\" \${1+\"\$@\"} 3975*735d6239SKiyoung Kim" 3976*735d6239SKiyoung Kim ;; 3977*735d6239SKiyoung Kim esac 3978*735d6239SKiyoung Kim $ECHO "\ 3979*735d6239SKiyoung Kim \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3980*735d6239SKiyoung Kim exit 1 3981*735d6239SKiyoung Kim} 3982*735d6239SKiyoung Kim 3983*735d6239SKiyoung Kim# A function to encapsulate launching the target application 3984*735d6239SKiyoung Kim# Strips options in the --lt-* namespace from \$@ and 3985*735d6239SKiyoung Kim# launches target application with the remaining arguments. 3986*735d6239SKiyoung Kimfunc_exec_program () 3987*735d6239SKiyoung Kim{ 3988*735d6239SKiyoung Kim for lt_wr_arg 3989*735d6239SKiyoung Kim do 3990*735d6239SKiyoung Kim case \$lt_wr_arg in 3991*735d6239SKiyoung Kim --lt-*) ;; 3992*735d6239SKiyoung Kim *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3993*735d6239SKiyoung Kim esac 3994*735d6239SKiyoung Kim shift 3995*735d6239SKiyoung Kim done 3996*735d6239SKiyoung Kim func_exec_program_core \${1+\"\$@\"} 3997*735d6239SKiyoung Kim} 3998*735d6239SKiyoung Kim 3999*735d6239SKiyoung Kim # Parse options 4000*735d6239SKiyoung Kim func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4001*735d6239SKiyoung Kim 4002*735d6239SKiyoung Kim # Find the directory that this script lives in. 4003*735d6239SKiyoung Kim thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4004*735d6239SKiyoung Kim test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4005*735d6239SKiyoung Kim 4006*735d6239SKiyoung Kim # Follow symbolic links until we get to the real thisdir. 4007*735d6239SKiyoung Kim file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4008*735d6239SKiyoung Kim while test -n \"\$file\"; do 4009*735d6239SKiyoung Kim destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4010*735d6239SKiyoung Kim 4011*735d6239SKiyoung Kim # If there was a directory component, then change thisdir. 4012*735d6239SKiyoung Kim if test \"x\$destdir\" != \"x\$file\"; then 4013*735d6239SKiyoung Kim case \"\$destdir\" in 4014*735d6239SKiyoung Kim [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4015*735d6239SKiyoung Kim *) thisdir=\"\$thisdir/\$destdir\" ;; 4016*735d6239SKiyoung Kim esac 4017*735d6239SKiyoung Kim fi 4018*735d6239SKiyoung Kim 4019*735d6239SKiyoung Kim file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 4020*735d6239SKiyoung Kim file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4021*735d6239SKiyoung Kim done 4022*735d6239SKiyoung Kim 4023*735d6239SKiyoung Kim # Usually 'no', except on cygwin/mingw when embedded into 4024*735d6239SKiyoung Kim # the cwrapper. 4025*735d6239SKiyoung Kim WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4026*735d6239SKiyoung Kim if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4027*735d6239SKiyoung Kim # special case for '.' 4028*735d6239SKiyoung Kim if test \"\$thisdir\" = \".\"; then 4029*735d6239SKiyoung Kim thisdir=\`pwd\` 4030*735d6239SKiyoung Kim fi 4031*735d6239SKiyoung Kim # remove .libs from thisdir 4032*735d6239SKiyoung Kim case \"\$thisdir\" in 4033*735d6239SKiyoung Kim *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4034*735d6239SKiyoung Kim $objdir ) thisdir=. ;; 4035*735d6239SKiyoung Kim esac 4036*735d6239SKiyoung Kim fi 4037*735d6239SKiyoung Kim 4038*735d6239SKiyoung Kim # Try to get the absolute directory name. 4039*735d6239SKiyoung Kim absdir=\`cd \"\$thisdir\" && pwd\` 4040*735d6239SKiyoung Kim test -n \"\$absdir\" && thisdir=\"\$absdir\" 4041*735d6239SKiyoung Kim" 4042*735d6239SKiyoung Kim 4043*735d6239SKiyoung Kim if test "$fast_install" = yes; then 4044*735d6239SKiyoung Kim $ECHO "\ 4045*735d6239SKiyoung Kim program=lt-'$outputname'$exeext 4046*735d6239SKiyoung Kim progdir=\"\$thisdir/$objdir\" 4047*735d6239SKiyoung Kim 4048*735d6239SKiyoung Kim if test ! -f \"\$progdir/\$program\" || 4049*735d6239SKiyoung Kim { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4050*735d6239SKiyoung Kim test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4051*735d6239SKiyoung Kim 4052*735d6239SKiyoung Kim file=\"\$\$-\$program\" 4053*735d6239SKiyoung Kim 4054*735d6239SKiyoung Kim if test ! -d \"\$progdir\"; then 4055*735d6239SKiyoung Kim $MKDIR \"\$progdir\" 4056*735d6239SKiyoung Kim else 4057*735d6239SKiyoung Kim $RM \"\$progdir/\$file\" 4058*735d6239SKiyoung Kim fi" 4059*735d6239SKiyoung Kim 4060*735d6239SKiyoung Kim $ECHO "\ 4061*735d6239SKiyoung Kim 4062*735d6239SKiyoung Kim # relink executable if necessary 4063*735d6239SKiyoung Kim if test -n \"\$relink_command\"; then 4064*735d6239SKiyoung Kim if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4065*735d6239SKiyoung Kim else 4066*735d6239SKiyoung Kim $ECHO \"\$relink_command_output\" >&2 4067*735d6239SKiyoung Kim $RM \"\$progdir/\$file\" 4068*735d6239SKiyoung Kim exit 1 4069*735d6239SKiyoung Kim fi 4070*735d6239SKiyoung Kim fi 4071*735d6239SKiyoung Kim 4072*735d6239SKiyoung Kim $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4073*735d6239SKiyoung Kim { $RM \"\$progdir/\$program\"; 4074*735d6239SKiyoung Kim $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4075*735d6239SKiyoung Kim $RM \"\$progdir/\$file\" 4076*735d6239SKiyoung Kim fi" 4077*735d6239SKiyoung Kim else 4078*735d6239SKiyoung Kim $ECHO "\ 4079*735d6239SKiyoung Kim program='$outputname' 4080*735d6239SKiyoung Kim progdir=\"\$thisdir/$objdir\" 4081*735d6239SKiyoung Kim" 4082*735d6239SKiyoung Kim fi 4083*735d6239SKiyoung Kim 4084*735d6239SKiyoung Kim $ECHO "\ 4085*735d6239SKiyoung Kim 4086*735d6239SKiyoung Kim if test -f \"\$progdir/\$program\"; then" 4087*735d6239SKiyoung Kim 4088*735d6239SKiyoung Kim # fixup the dll searchpath if we need to. 4089*735d6239SKiyoung Kim # 4090*735d6239SKiyoung Kim # Fix the DLL searchpath if we need to. Do this before prepending 4091*735d6239SKiyoung Kim # to shlibpath, because on Windows, both are PATH and uninstalled 4092*735d6239SKiyoung Kim # libraries must come first. 4093*735d6239SKiyoung Kim if test -n "$dllsearchpath"; then 4094*735d6239SKiyoung Kim $ECHO "\ 4095*735d6239SKiyoung Kim # Add the dll search path components to the executable PATH 4096*735d6239SKiyoung Kim PATH=$dllsearchpath:\$PATH 4097*735d6239SKiyoung Kim" 4098*735d6239SKiyoung Kim fi 4099*735d6239SKiyoung Kim 4100*735d6239SKiyoung Kim # Export our shlibpath_var if we have one. 4101*735d6239SKiyoung Kim if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4102*735d6239SKiyoung Kim $ECHO "\ 4103*735d6239SKiyoung Kim # Add our own library path to $shlibpath_var 4104*735d6239SKiyoung Kim $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4105*735d6239SKiyoung Kim 4106*735d6239SKiyoung Kim # Some systems cannot cope with colon-terminated $shlibpath_var 4107*735d6239SKiyoung Kim # The second colon is a workaround for a bug in BeOS R4 sed 4108*735d6239SKiyoung Kim $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4109*735d6239SKiyoung Kim 4110*735d6239SKiyoung Kim export $shlibpath_var 4111*735d6239SKiyoung Kim" 4112*735d6239SKiyoung Kim fi 4113*735d6239SKiyoung Kim 4114*735d6239SKiyoung Kim $ECHO "\ 4115*735d6239SKiyoung Kim if test \"\$libtool_execute_magic\" != \"$magic\"; then 4116*735d6239SKiyoung Kim # Run the actual program with our arguments. 4117*735d6239SKiyoung Kim func_exec_program \${1+\"\$@\"} 4118*735d6239SKiyoung Kim fi 4119*735d6239SKiyoung Kim else 4120*735d6239SKiyoung Kim # The program doesn't exist. 4121*735d6239SKiyoung Kim \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4122*735d6239SKiyoung Kim \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 4123*735d6239SKiyoung Kim \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4124*735d6239SKiyoung Kim exit 1 4125*735d6239SKiyoung Kim fi 4126*735d6239SKiyoung Kimfi\ 4127*735d6239SKiyoung Kim" 4128*735d6239SKiyoung Kim} 4129*735d6239SKiyoung Kim 4130*735d6239SKiyoung Kim 4131*735d6239SKiyoung Kim# func_emit_cwrapperexe_src 4132*735d6239SKiyoung Kim# emit the source code for a wrapper executable on stdout 4133*735d6239SKiyoung Kim# Must ONLY be called from within func_mode_link because 4134*735d6239SKiyoung Kim# it depends on a number of variable set therein. 4135*735d6239SKiyoung Kimfunc_emit_cwrapperexe_src () 4136*735d6239SKiyoung Kim{ 4137*735d6239SKiyoung Kim cat <<EOF 4138*735d6239SKiyoung Kim 4139*735d6239SKiyoung Kim/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4140*735d6239SKiyoung Kim Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4141*735d6239SKiyoung Kim 4142*735d6239SKiyoung Kim The $output program cannot be directly executed until all the libtool 4143*735d6239SKiyoung Kim libraries that it depends on are installed. 4144*735d6239SKiyoung Kim 4145*735d6239SKiyoung Kim This wrapper executable should never be moved out of the build directory. 4146*735d6239SKiyoung Kim If it is, it will not operate correctly. 4147*735d6239SKiyoung Kim*/ 4148*735d6239SKiyoung KimEOF 4149*735d6239SKiyoung Kim cat <<"EOF" 4150*735d6239SKiyoung Kim#ifdef _MSC_VER 4151*735d6239SKiyoung Kim# define _CRT_SECURE_NO_DEPRECATE 1 4152*735d6239SKiyoung Kim#endif 4153*735d6239SKiyoung Kim#include <stdio.h> 4154*735d6239SKiyoung Kim#include <stdlib.h> 4155*735d6239SKiyoung Kim#ifdef _MSC_VER 4156*735d6239SKiyoung Kim# include <direct.h> 4157*735d6239SKiyoung Kim# include <process.h> 4158*735d6239SKiyoung Kim# include <io.h> 4159*735d6239SKiyoung Kim#else 4160*735d6239SKiyoung Kim# include <unistd.h> 4161*735d6239SKiyoung Kim# include <stdint.h> 4162*735d6239SKiyoung Kim# ifdef __CYGWIN__ 4163*735d6239SKiyoung Kim# include <io.h> 4164*735d6239SKiyoung Kim# endif 4165*735d6239SKiyoung Kim#endif 4166*735d6239SKiyoung Kim#include <malloc.h> 4167*735d6239SKiyoung Kim#include <stdarg.h> 4168*735d6239SKiyoung Kim#include <assert.h> 4169*735d6239SKiyoung Kim#include <string.h> 4170*735d6239SKiyoung Kim#include <ctype.h> 4171*735d6239SKiyoung Kim#include <errno.h> 4172*735d6239SKiyoung Kim#include <fcntl.h> 4173*735d6239SKiyoung Kim#include <sys/stat.h> 4174*735d6239SKiyoung Kim 4175*735d6239SKiyoung Kim/* declarations of non-ANSI functions */ 4176*735d6239SKiyoung Kim#if defined(__MINGW32__) 4177*735d6239SKiyoung Kim# ifdef __STRICT_ANSI__ 4178*735d6239SKiyoung Kimint _putenv (const char *); 4179*735d6239SKiyoung Kim# endif 4180*735d6239SKiyoung Kim#elif defined(__CYGWIN__) 4181*735d6239SKiyoung Kim# ifdef __STRICT_ANSI__ 4182*735d6239SKiyoung Kimchar *realpath (const char *, char *); 4183*735d6239SKiyoung Kimint putenv (char *); 4184*735d6239SKiyoung Kimint setenv (const char *, const char *, int); 4185*735d6239SKiyoung Kim# endif 4186*735d6239SKiyoung Kim/* #elif defined (other platforms) ... */ 4187*735d6239SKiyoung Kim#endif 4188*735d6239SKiyoung Kim 4189*735d6239SKiyoung Kim/* portability defines, excluding path handling macros */ 4190*735d6239SKiyoung Kim#if defined(_MSC_VER) 4191*735d6239SKiyoung Kim# define setmode _setmode 4192*735d6239SKiyoung Kim# define stat _stat 4193*735d6239SKiyoung Kim# define chmod _chmod 4194*735d6239SKiyoung Kim# define getcwd _getcwd 4195*735d6239SKiyoung Kim# define putenv _putenv 4196*735d6239SKiyoung Kim# define S_IXUSR _S_IEXEC 4197*735d6239SKiyoung Kim# ifndef _INTPTR_T_DEFINED 4198*735d6239SKiyoung Kim# define _INTPTR_T_DEFINED 4199*735d6239SKiyoung Kim# define intptr_t int 4200*735d6239SKiyoung Kim# endif 4201*735d6239SKiyoung Kim#elif defined(__MINGW32__) 4202*735d6239SKiyoung Kim# define setmode _setmode 4203*735d6239SKiyoung Kim# define stat _stat 4204*735d6239SKiyoung Kim# define chmod _chmod 4205*735d6239SKiyoung Kim# define getcwd _getcwd 4206*735d6239SKiyoung Kim# define putenv _putenv 4207*735d6239SKiyoung Kim#elif defined(__CYGWIN__) 4208*735d6239SKiyoung Kim# define HAVE_SETENV 4209*735d6239SKiyoung Kim# define FOPEN_WB "wb" 4210*735d6239SKiyoung Kim/* #elif defined (other platforms) ... */ 4211*735d6239SKiyoung Kim#endif 4212*735d6239SKiyoung Kim 4213*735d6239SKiyoung Kim#if defined(PATH_MAX) 4214*735d6239SKiyoung Kim# define LT_PATHMAX PATH_MAX 4215*735d6239SKiyoung Kim#elif defined(MAXPATHLEN) 4216*735d6239SKiyoung Kim# define LT_PATHMAX MAXPATHLEN 4217*735d6239SKiyoung Kim#else 4218*735d6239SKiyoung Kim# define LT_PATHMAX 1024 4219*735d6239SKiyoung Kim#endif 4220*735d6239SKiyoung Kim 4221*735d6239SKiyoung Kim#ifndef S_IXOTH 4222*735d6239SKiyoung Kim# define S_IXOTH 0 4223*735d6239SKiyoung Kim#endif 4224*735d6239SKiyoung Kim#ifndef S_IXGRP 4225*735d6239SKiyoung Kim# define S_IXGRP 0 4226*735d6239SKiyoung Kim#endif 4227*735d6239SKiyoung Kim 4228*735d6239SKiyoung Kim/* path handling portability macros */ 4229*735d6239SKiyoung Kim#ifndef DIR_SEPARATOR 4230*735d6239SKiyoung Kim# define DIR_SEPARATOR '/' 4231*735d6239SKiyoung Kim# define PATH_SEPARATOR ':' 4232*735d6239SKiyoung Kim#endif 4233*735d6239SKiyoung Kim 4234*735d6239SKiyoung Kim#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4235*735d6239SKiyoung Kim defined (__OS2__) 4236*735d6239SKiyoung Kim# define HAVE_DOS_BASED_FILE_SYSTEM 4237*735d6239SKiyoung Kim# define FOPEN_WB "wb" 4238*735d6239SKiyoung Kim# ifndef DIR_SEPARATOR_2 4239*735d6239SKiyoung Kim# define DIR_SEPARATOR_2 '\\' 4240*735d6239SKiyoung Kim# endif 4241*735d6239SKiyoung Kim# ifndef PATH_SEPARATOR_2 4242*735d6239SKiyoung Kim# define PATH_SEPARATOR_2 ';' 4243*735d6239SKiyoung Kim# endif 4244*735d6239SKiyoung Kim#endif 4245*735d6239SKiyoung Kim 4246*735d6239SKiyoung Kim#ifndef DIR_SEPARATOR_2 4247*735d6239SKiyoung Kim# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4248*735d6239SKiyoung Kim#else /* DIR_SEPARATOR_2 */ 4249*735d6239SKiyoung Kim# define IS_DIR_SEPARATOR(ch) \ 4250*735d6239SKiyoung Kim (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4251*735d6239SKiyoung Kim#endif /* DIR_SEPARATOR_2 */ 4252*735d6239SKiyoung Kim 4253*735d6239SKiyoung Kim#ifndef PATH_SEPARATOR_2 4254*735d6239SKiyoung Kim# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4255*735d6239SKiyoung Kim#else /* PATH_SEPARATOR_2 */ 4256*735d6239SKiyoung Kim# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4257*735d6239SKiyoung Kim#endif /* PATH_SEPARATOR_2 */ 4258*735d6239SKiyoung Kim 4259*735d6239SKiyoung Kim#ifndef FOPEN_WB 4260*735d6239SKiyoung Kim# define FOPEN_WB "w" 4261*735d6239SKiyoung Kim#endif 4262*735d6239SKiyoung Kim#ifndef _O_BINARY 4263*735d6239SKiyoung Kim# define _O_BINARY 0 4264*735d6239SKiyoung Kim#endif 4265*735d6239SKiyoung Kim 4266*735d6239SKiyoung Kim#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4267*735d6239SKiyoung Kim#define XFREE(stale) do { \ 4268*735d6239SKiyoung Kim if (stale) { free ((void *) stale); stale = 0; } \ 4269*735d6239SKiyoung Kim} while (0) 4270*735d6239SKiyoung Kim 4271*735d6239SKiyoung Kim#if defined(LT_DEBUGWRAPPER) 4272*735d6239SKiyoung Kimstatic int lt_debug = 1; 4273*735d6239SKiyoung Kim#else 4274*735d6239SKiyoung Kimstatic int lt_debug = 0; 4275*735d6239SKiyoung Kim#endif 4276*735d6239SKiyoung Kim 4277*735d6239SKiyoung Kimconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4278*735d6239SKiyoung Kim 4279*735d6239SKiyoung Kimvoid *xmalloc (size_t num); 4280*735d6239SKiyoung Kimchar *xstrdup (const char *string); 4281*735d6239SKiyoung Kimconst char *base_name (const char *name); 4282*735d6239SKiyoung Kimchar *find_executable (const char *wrapper); 4283*735d6239SKiyoung Kimchar *chase_symlinks (const char *pathspec); 4284*735d6239SKiyoung Kimint make_executable (const char *path); 4285*735d6239SKiyoung Kimint check_executable (const char *path); 4286*735d6239SKiyoung Kimchar *strendzap (char *str, const char *pat); 4287*735d6239SKiyoung Kimvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 4288*735d6239SKiyoung Kimvoid lt_fatal (const char *file, int line, const char *message, ...); 4289*735d6239SKiyoung Kimstatic const char *nonnull (const char *s); 4290*735d6239SKiyoung Kimstatic const char *nonempty (const char *s); 4291*735d6239SKiyoung Kimvoid lt_setenv (const char *name, const char *value); 4292*735d6239SKiyoung Kimchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4293*735d6239SKiyoung Kimvoid lt_update_exe_path (const char *name, const char *value); 4294*735d6239SKiyoung Kimvoid lt_update_lib_path (const char *name, const char *value); 4295*735d6239SKiyoung Kimchar **prepare_spawn (char **argv); 4296*735d6239SKiyoung Kimvoid lt_dump_script (FILE *f); 4297*735d6239SKiyoung KimEOF 4298*735d6239SKiyoung Kim 4299*735d6239SKiyoung Kim cat <<EOF 4300*735d6239SKiyoung Kimvolatile const char * MAGIC_EXE = "$magic_exe"; 4301*735d6239SKiyoung Kimconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4302*735d6239SKiyoung KimEOF 4303*735d6239SKiyoung Kim 4304*735d6239SKiyoung Kim if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4305*735d6239SKiyoung Kim func_to_host_path "$temp_rpath" 4306*735d6239SKiyoung Kim cat <<EOF 4307*735d6239SKiyoung Kimconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4308*735d6239SKiyoung KimEOF 4309*735d6239SKiyoung Kim else 4310*735d6239SKiyoung Kim cat <<"EOF" 4311*735d6239SKiyoung Kimconst char * LIB_PATH_VALUE = ""; 4312*735d6239SKiyoung KimEOF 4313*735d6239SKiyoung Kim fi 4314*735d6239SKiyoung Kim 4315*735d6239SKiyoung Kim if test -n "$dllsearchpath"; then 4316*735d6239SKiyoung Kim func_to_host_path "$dllsearchpath:" 4317*735d6239SKiyoung Kim cat <<EOF 4318*735d6239SKiyoung Kimconst char * EXE_PATH_VARNAME = "PATH"; 4319*735d6239SKiyoung Kimconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4320*735d6239SKiyoung KimEOF 4321*735d6239SKiyoung Kim else 4322*735d6239SKiyoung Kim cat <<"EOF" 4323*735d6239SKiyoung Kimconst char * EXE_PATH_VARNAME = ""; 4324*735d6239SKiyoung Kimconst char * EXE_PATH_VALUE = ""; 4325*735d6239SKiyoung KimEOF 4326*735d6239SKiyoung Kim fi 4327*735d6239SKiyoung Kim 4328*735d6239SKiyoung Kim if test "$fast_install" = yes; then 4329*735d6239SKiyoung Kim cat <<EOF 4330*735d6239SKiyoung Kimconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4331*735d6239SKiyoung KimEOF 4332*735d6239SKiyoung Kim else 4333*735d6239SKiyoung Kim cat <<EOF 4334*735d6239SKiyoung Kimconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4335*735d6239SKiyoung KimEOF 4336*735d6239SKiyoung Kim fi 4337*735d6239SKiyoung Kim 4338*735d6239SKiyoung Kim 4339*735d6239SKiyoung Kim cat <<"EOF" 4340*735d6239SKiyoung Kim 4341*735d6239SKiyoung Kim#define LTWRAPPER_OPTION_PREFIX "--lt-" 4342*735d6239SKiyoung Kim 4343*735d6239SKiyoung Kimstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4344*735d6239SKiyoung Kimstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 4345*735d6239SKiyoung Kimstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4346*735d6239SKiyoung Kim 4347*735d6239SKiyoung Kimint 4348*735d6239SKiyoung Kimmain (int argc, char *argv[]) 4349*735d6239SKiyoung Kim{ 4350*735d6239SKiyoung Kim char **newargz; 4351*735d6239SKiyoung Kim int newargc; 4352*735d6239SKiyoung Kim char *tmp_pathspec; 4353*735d6239SKiyoung Kim char *actual_cwrapper_path; 4354*735d6239SKiyoung Kim char *actual_cwrapper_name; 4355*735d6239SKiyoung Kim char *target_name; 4356*735d6239SKiyoung Kim char *lt_argv_zero; 4357*735d6239SKiyoung Kim intptr_t rval = 127; 4358*735d6239SKiyoung Kim 4359*735d6239SKiyoung Kim int i; 4360*735d6239SKiyoung Kim 4361*735d6239SKiyoung Kim program_name = (char *) xstrdup (base_name (argv[0])); 4362*735d6239SKiyoung Kim newargz = XMALLOC (char *, argc + 1); 4363*735d6239SKiyoung Kim 4364*735d6239SKiyoung Kim /* very simple arg parsing; don't want to rely on getopt 4365*735d6239SKiyoung Kim * also, copy all non cwrapper options to newargz, except 4366*735d6239SKiyoung Kim * argz[0], which is handled differently 4367*735d6239SKiyoung Kim */ 4368*735d6239SKiyoung Kim newargc=0; 4369*735d6239SKiyoung Kim for (i = 1; i < argc; i++) 4370*735d6239SKiyoung Kim { 4371*735d6239SKiyoung Kim if (strcmp (argv[i], dumpscript_opt) == 0) 4372*735d6239SKiyoung Kim { 4373*735d6239SKiyoung KimEOF 4374*735d6239SKiyoung Kim case "$host" in 4375*735d6239SKiyoung Kim *mingw* | *cygwin* ) 4376*735d6239SKiyoung Kim # make stdout use "unix" line endings 4377*735d6239SKiyoung Kim echo " setmode(1,_O_BINARY);" 4378*735d6239SKiyoung Kim ;; 4379*735d6239SKiyoung Kim esac 4380*735d6239SKiyoung Kim 4381*735d6239SKiyoung Kim cat <<"EOF" 4382*735d6239SKiyoung Kim lt_dump_script (stdout); 4383*735d6239SKiyoung Kim return 0; 4384*735d6239SKiyoung Kim } 4385*735d6239SKiyoung Kim if (strcmp (argv[i], debug_opt) == 0) 4386*735d6239SKiyoung Kim { 4387*735d6239SKiyoung Kim lt_debug = 1; 4388*735d6239SKiyoung Kim continue; 4389*735d6239SKiyoung Kim } 4390*735d6239SKiyoung Kim if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 4391*735d6239SKiyoung Kim { 4392*735d6239SKiyoung Kim /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 4393*735d6239SKiyoung Kim namespace, but it is not one of the ones we know about and 4394*735d6239SKiyoung Kim have already dealt with, above (inluding dump-script), then 4395*735d6239SKiyoung Kim report an error. Otherwise, targets might begin to believe 4396*735d6239SKiyoung Kim they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 4397*735d6239SKiyoung Kim namespace. The first time any user complains about this, we'll 4398*735d6239SKiyoung Kim need to make LTWRAPPER_OPTION_PREFIX a configure-time option 4399*735d6239SKiyoung Kim or a configure.ac-settable value. 4400*735d6239SKiyoung Kim */ 4401*735d6239SKiyoung Kim lt_fatal (__FILE__, __LINE__, 4402*735d6239SKiyoung Kim "unrecognized %s option: '%s'", 4403*735d6239SKiyoung Kim ltwrapper_option_prefix, argv[i]); 4404*735d6239SKiyoung Kim } 4405*735d6239SKiyoung Kim /* otherwise ... */ 4406*735d6239SKiyoung Kim newargz[++newargc] = xstrdup (argv[i]); 4407*735d6239SKiyoung Kim } 4408*735d6239SKiyoung Kim newargz[++newargc] = NULL; 4409*735d6239SKiyoung Kim 4410*735d6239SKiyoung KimEOF 4411*735d6239SKiyoung Kim cat <<EOF 4412*735d6239SKiyoung Kim /* The GNU banner must be the first non-error debug message */ 4413*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 4414*735d6239SKiyoung KimEOF 4415*735d6239SKiyoung Kim cat <<"EOF" 4416*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 4417*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4418*735d6239SKiyoung Kim 4419*735d6239SKiyoung Kim tmp_pathspec = find_executable (argv[0]); 4420*735d6239SKiyoung Kim if (tmp_pathspec == NULL) 4421*735d6239SKiyoung Kim lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 4422*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, 4423*735d6239SKiyoung Kim "(main) found exe (before symlink chase) at: %s\n", 4424*735d6239SKiyoung Kim tmp_pathspec); 4425*735d6239SKiyoung Kim 4426*735d6239SKiyoung Kim actual_cwrapper_path = chase_symlinks (tmp_pathspec); 4427*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, 4428*735d6239SKiyoung Kim "(main) found exe (after symlink chase) at: %s\n", 4429*735d6239SKiyoung Kim actual_cwrapper_path); 4430*735d6239SKiyoung Kim XFREE (tmp_pathspec); 4431*735d6239SKiyoung Kim 4432*735d6239SKiyoung Kim actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4433*735d6239SKiyoung Kim strendzap (actual_cwrapper_path, actual_cwrapper_name); 4434*735d6239SKiyoung Kim 4435*735d6239SKiyoung Kim /* wrapper name transforms */ 4436*735d6239SKiyoung Kim strendzap (actual_cwrapper_name, ".exe"); 4437*735d6239SKiyoung Kim tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4438*735d6239SKiyoung Kim XFREE (actual_cwrapper_name); 4439*735d6239SKiyoung Kim actual_cwrapper_name = tmp_pathspec; 4440*735d6239SKiyoung Kim tmp_pathspec = 0; 4441*735d6239SKiyoung Kim 4442*735d6239SKiyoung Kim /* target_name transforms -- use actual target program name; might have lt- prefix */ 4443*735d6239SKiyoung Kim target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4444*735d6239SKiyoung Kim strendzap (target_name, ".exe"); 4445*735d6239SKiyoung Kim tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4446*735d6239SKiyoung Kim XFREE (target_name); 4447*735d6239SKiyoung Kim target_name = tmp_pathspec; 4448*735d6239SKiyoung Kim tmp_pathspec = 0; 4449*735d6239SKiyoung Kim 4450*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, 4451*735d6239SKiyoung Kim "(main) libtool target name: %s\n", 4452*735d6239SKiyoung Kim target_name); 4453*735d6239SKiyoung KimEOF 4454*735d6239SKiyoung Kim 4455*735d6239SKiyoung Kim cat <<EOF 4456*735d6239SKiyoung Kim newargz[0] = 4457*735d6239SKiyoung Kim XMALLOC (char, (strlen (actual_cwrapper_path) + 4458*735d6239SKiyoung Kim strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4459*735d6239SKiyoung Kim strcpy (newargz[0], actual_cwrapper_path); 4460*735d6239SKiyoung Kim strcat (newargz[0], "$objdir"); 4461*735d6239SKiyoung Kim strcat (newargz[0], "/"); 4462*735d6239SKiyoung KimEOF 4463*735d6239SKiyoung Kim 4464*735d6239SKiyoung Kim cat <<"EOF" 4465*735d6239SKiyoung Kim /* stop here, and copy so we don't have to do this twice */ 4466*735d6239SKiyoung Kim tmp_pathspec = xstrdup (newargz[0]); 4467*735d6239SKiyoung Kim 4468*735d6239SKiyoung Kim /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4469*735d6239SKiyoung Kim strcat (newargz[0], actual_cwrapper_name); 4470*735d6239SKiyoung Kim 4471*735d6239SKiyoung Kim /* DO want the lt- prefix here if it exists, so use target_name */ 4472*735d6239SKiyoung Kim lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4473*735d6239SKiyoung Kim XFREE (tmp_pathspec); 4474*735d6239SKiyoung Kim tmp_pathspec = NULL; 4475*735d6239SKiyoung KimEOF 4476*735d6239SKiyoung Kim 4477*735d6239SKiyoung Kim case $host_os in 4478*735d6239SKiyoung Kim mingw*) 4479*735d6239SKiyoung Kim cat <<"EOF" 4480*735d6239SKiyoung Kim { 4481*735d6239SKiyoung Kim char* p; 4482*735d6239SKiyoung Kim while ((p = strchr (newargz[0], '\\')) != NULL) 4483*735d6239SKiyoung Kim { 4484*735d6239SKiyoung Kim *p = '/'; 4485*735d6239SKiyoung Kim } 4486*735d6239SKiyoung Kim while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4487*735d6239SKiyoung Kim { 4488*735d6239SKiyoung Kim *p = '/'; 4489*735d6239SKiyoung Kim } 4490*735d6239SKiyoung Kim } 4491*735d6239SKiyoung KimEOF 4492*735d6239SKiyoung Kim ;; 4493*735d6239SKiyoung Kim esac 4494*735d6239SKiyoung Kim 4495*735d6239SKiyoung Kim cat <<"EOF" 4496*735d6239SKiyoung Kim XFREE (target_name); 4497*735d6239SKiyoung Kim XFREE (actual_cwrapper_path); 4498*735d6239SKiyoung Kim XFREE (actual_cwrapper_name); 4499*735d6239SKiyoung Kim 4500*735d6239SKiyoung Kim lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4501*735d6239SKiyoung Kim lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 4502*735d6239SKiyoung Kim /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 4503*735d6239SKiyoung Kim be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 4504*735d6239SKiyoung Kim because on Windows, both *_VARNAMEs are PATH but uninstalled 4505*735d6239SKiyoung Kim libraries must come first. */ 4506*735d6239SKiyoung Kim lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 4507*735d6239SKiyoung Kim lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4508*735d6239SKiyoung Kim 4509*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 4510*735d6239SKiyoung Kim nonnull (lt_argv_zero)); 4511*735d6239SKiyoung Kim for (i = 0; i < newargc; i++) 4512*735d6239SKiyoung Kim { 4513*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 4514*735d6239SKiyoung Kim i, nonnull (newargz[i])); 4515*735d6239SKiyoung Kim } 4516*735d6239SKiyoung Kim 4517*735d6239SKiyoung KimEOF 4518*735d6239SKiyoung Kim 4519*735d6239SKiyoung Kim case $host_os in 4520*735d6239SKiyoung Kim mingw*) 4521*735d6239SKiyoung Kim cat <<"EOF" 4522*735d6239SKiyoung Kim /* execv doesn't actually work on mingw as expected on unix */ 4523*735d6239SKiyoung Kim newargz = prepare_spawn (newargz); 4524*735d6239SKiyoung Kim rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4525*735d6239SKiyoung Kim if (rval == -1) 4526*735d6239SKiyoung Kim { 4527*735d6239SKiyoung Kim /* failed to start process */ 4528*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, 4529*735d6239SKiyoung Kim "(main) failed to launch target \"%s\": %s\n", 4530*735d6239SKiyoung Kim lt_argv_zero, nonnull (strerror (errno))); 4531*735d6239SKiyoung Kim return 127; 4532*735d6239SKiyoung Kim } 4533*735d6239SKiyoung Kim return rval; 4534*735d6239SKiyoung KimEOF 4535*735d6239SKiyoung Kim ;; 4536*735d6239SKiyoung Kim *) 4537*735d6239SKiyoung Kim cat <<"EOF" 4538*735d6239SKiyoung Kim execv (lt_argv_zero, newargz); 4539*735d6239SKiyoung Kim return rval; /* =127, but avoids unused variable warning */ 4540*735d6239SKiyoung KimEOF 4541*735d6239SKiyoung Kim ;; 4542*735d6239SKiyoung Kim esac 4543*735d6239SKiyoung Kim 4544*735d6239SKiyoung Kim cat <<"EOF" 4545*735d6239SKiyoung Kim} 4546*735d6239SKiyoung Kim 4547*735d6239SKiyoung Kimvoid * 4548*735d6239SKiyoung Kimxmalloc (size_t num) 4549*735d6239SKiyoung Kim{ 4550*735d6239SKiyoung Kim void *p = (void *) malloc (num); 4551*735d6239SKiyoung Kim if (!p) 4552*735d6239SKiyoung Kim lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4553*735d6239SKiyoung Kim 4554*735d6239SKiyoung Kim return p; 4555*735d6239SKiyoung Kim} 4556*735d6239SKiyoung Kim 4557*735d6239SKiyoung Kimchar * 4558*735d6239SKiyoung Kimxstrdup (const char *string) 4559*735d6239SKiyoung Kim{ 4560*735d6239SKiyoung Kim return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4561*735d6239SKiyoung Kim string) : NULL; 4562*735d6239SKiyoung Kim} 4563*735d6239SKiyoung Kim 4564*735d6239SKiyoung Kimconst char * 4565*735d6239SKiyoung Kimbase_name (const char *name) 4566*735d6239SKiyoung Kim{ 4567*735d6239SKiyoung Kim const char *base; 4568*735d6239SKiyoung Kim 4569*735d6239SKiyoung Kim#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4570*735d6239SKiyoung Kim /* Skip over the disk name in MSDOS pathnames. */ 4571*735d6239SKiyoung Kim if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4572*735d6239SKiyoung Kim name += 2; 4573*735d6239SKiyoung Kim#endif 4574*735d6239SKiyoung Kim 4575*735d6239SKiyoung Kim for (base = name; *name; name++) 4576*735d6239SKiyoung Kim if (IS_DIR_SEPARATOR (*name)) 4577*735d6239SKiyoung Kim base = name + 1; 4578*735d6239SKiyoung Kim return base; 4579*735d6239SKiyoung Kim} 4580*735d6239SKiyoung Kim 4581*735d6239SKiyoung Kimint 4582*735d6239SKiyoung Kimcheck_executable (const char *path) 4583*735d6239SKiyoung Kim{ 4584*735d6239SKiyoung Kim struct stat st; 4585*735d6239SKiyoung Kim 4586*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 4587*735d6239SKiyoung Kim nonempty (path)); 4588*735d6239SKiyoung Kim if ((!path) || (!*path)) 4589*735d6239SKiyoung Kim return 0; 4590*735d6239SKiyoung Kim 4591*735d6239SKiyoung Kim if ((stat (path, &st) >= 0) 4592*735d6239SKiyoung Kim && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4593*735d6239SKiyoung Kim return 1; 4594*735d6239SKiyoung Kim else 4595*735d6239SKiyoung Kim return 0; 4596*735d6239SKiyoung Kim} 4597*735d6239SKiyoung Kim 4598*735d6239SKiyoung Kimint 4599*735d6239SKiyoung Kimmake_executable (const char *path) 4600*735d6239SKiyoung Kim{ 4601*735d6239SKiyoung Kim int rval = 0; 4602*735d6239SKiyoung Kim struct stat st; 4603*735d6239SKiyoung Kim 4604*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 4605*735d6239SKiyoung Kim nonempty (path)); 4606*735d6239SKiyoung Kim if ((!path) || (!*path)) 4607*735d6239SKiyoung Kim return 0; 4608*735d6239SKiyoung Kim 4609*735d6239SKiyoung Kim if (stat (path, &st) >= 0) 4610*735d6239SKiyoung Kim { 4611*735d6239SKiyoung Kim rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4612*735d6239SKiyoung Kim } 4613*735d6239SKiyoung Kim return rval; 4614*735d6239SKiyoung Kim} 4615*735d6239SKiyoung Kim 4616*735d6239SKiyoung Kim/* Searches for the full path of the wrapper. Returns 4617*735d6239SKiyoung Kim newly allocated full path name if found, NULL otherwise 4618*735d6239SKiyoung Kim Does not chase symlinks, even on platforms that support them. 4619*735d6239SKiyoung Kim*/ 4620*735d6239SKiyoung Kimchar * 4621*735d6239SKiyoung Kimfind_executable (const char *wrapper) 4622*735d6239SKiyoung Kim{ 4623*735d6239SKiyoung Kim int has_slash = 0; 4624*735d6239SKiyoung Kim const char *p; 4625*735d6239SKiyoung Kim const char *p_next; 4626*735d6239SKiyoung Kim /* static buffer for getcwd */ 4627*735d6239SKiyoung Kim char tmp[LT_PATHMAX + 1]; 4628*735d6239SKiyoung Kim int tmp_len; 4629*735d6239SKiyoung Kim char *concat_name; 4630*735d6239SKiyoung Kim 4631*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 4632*735d6239SKiyoung Kim nonempty (wrapper)); 4633*735d6239SKiyoung Kim 4634*735d6239SKiyoung Kim if ((wrapper == NULL) || (*wrapper == '\0')) 4635*735d6239SKiyoung Kim return NULL; 4636*735d6239SKiyoung Kim 4637*735d6239SKiyoung Kim /* Absolute path? */ 4638*735d6239SKiyoung Kim#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4639*735d6239SKiyoung Kim if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4640*735d6239SKiyoung Kim { 4641*735d6239SKiyoung Kim concat_name = xstrdup (wrapper); 4642*735d6239SKiyoung Kim if (check_executable (concat_name)) 4643*735d6239SKiyoung Kim return concat_name; 4644*735d6239SKiyoung Kim XFREE (concat_name); 4645*735d6239SKiyoung Kim } 4646*735d6239SKiyoung Kim else 4647*735d6239SKiyoung Kim { 4648*735d6239SKiyoung Kim#endif 4649*735d6239SKiyoung Kim if (IS_DIR_SEPARATOR (wrapper[0])) 4650*735d6239SKiyoung Kim { 4651*735d6239SKiyoung Kim concat_name = xstrdup (wrapper); 4652*735d6239SKiyoung Kim if (check_executable (concat_name)) 4653*735d6239SKiyoung Kim return concat_name; 4654*735d6239SKiyoung Kim XFREE (concat_name); 4655*735d6239SKiyoung Kim } 4656*735d6239SKiyoung Kim#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4657*735d6239SKiyoung Kim } 4658*735d6239SKiyoung Kim#endif 4659*735d6239SKiyoung Kim 4660*735d6239SKiyoung Kim for (p = wrapper; *p; p++) 4661*735d6239SKiyoung Kim if (*p == '/') 4662*735d6239SKiyoung Kim { 4663*735d6239SKiyoung Kim has_slash = 1; 4664*735d6239SKiyoung Kim break; 4665*735d6239SKiyoung Kim } 4666*735d6239SKiyoung Kim if (!has_slash) 4667*735d6239SKiyoung Kim { 4668*735d6239SKiyoung Kim /* no slashes; search PATH */ 4669*735d6239SKiyoung Kim const char *path = getenv ("PATH"); 4670*735d6239SKiyoung Kim if (path != NULL) 4671*735d6239SKiyoung Kim { 4672*735d6239SKiyoung Kim for (p = path; *p; p = p_next) 4673*735d6239SKiyoung Kim { 4674*735d6239SKiyoung Kim const char *q; 4675*735d6239SKiyoung Kim size_t p_len; 4676*735d6239SKiyoung Kim for (q = p; *q; q++) 4677*735d6239SKiyoung Kim if (IS_PATH_SEPARATOR (*q)) 4678*735d6239SKiyoung Kim break; 4679*735d6239SKiyoung Kim p_len = q - p; 4680*735d6239SKiyoung Kim p_next = (*q == '\0' ? q : q + 1); 4681*735d6239SKiyoung Kim if (p_len == 0) 4682*735d6239SKiyoung Kim { 4683*735d6239SKiyoung Kim /* empty path: current directory */ 4684*735d6239SKiyoung Kim if (getcwd (tmp, LT_PATHMAX) == NULL) 4685*735d6239SKiyoung Kim lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4686*735d6239SKiyoung Kim nonnull (strerror (errno))); 4687*735d6239SKiyoung Kim tmp_len = strlen (tmp); 4688*735d6239SKiyoung Kim concat_name = 4689*735d6239SKiyoung Kim XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4690*735d6239SKiyoung Kim memcpy (concat_name, tmp, tmp_len); 4691*735d6239SKiyoung Kim concat_name[tmp_len] = '/'; 4692*735d6239SKiyoung Kim strcpy (concat_name + tmp_len + 1, wrapper); 4693*735d6239SKiyoung Kim } 4694*735d6239SKiyoung Kim else 4695*735d6239SKiyoung Kim { 4696*735d6239SKiyoung Kim concat_name = 4697*735d6239SKiyoung Kim XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4698*735d6239SKiyoung Kim memcpy (concat_name, p, p_len); 4699*735d6239SKiyoung Kim concat_name[p_len] = '/'; 4700*735d6239SKiyoung Kim strcpy (concat_name + p_len + 1, wrapper); 4701*735d6239SKiyoung Kim } 4702*735d6239SKiyoung Kim if (check_executable (concat_name)) 4703*735d6239SKiyoung Kim return concat_name; 4704*735d6239SKiyoung Kim XFREE (concat_name); 4705*735d6239SKiyoung Kim } 4706*735d6239SKiyoung Kim } 4707*735d6239SKiyoung Kim /* not found in PATH; assume curdir */ 4708*735d6239SKiyoung Kim } 4709*735d6239SKiyoung Kim /* Relative path | not found in path: prepend cwd */ 4710*735d6239SKiyoung Kim if (getcwd (tmp, LT_PATHMAX) == NULL) 4711*735d6239SKiyoung Kim lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4712*735d6239SKiyoung Kim nonnull (strerror (errno))); 4713*735d6239SKiyoung Kim tmp_len = strlen (tmp); 4714*735d6239SKiyoung Kim concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4715*735d6239SKiyoung Kim memcpy (concat_name, tmp, tmp_len); 4716*735d6239SKiyoung Kim concat_name[tmp_len] = '/'; 4717*735d6239SKiyoung Kim strcpy (concat_name + tmp_len + 1, wrapper); 4718*735d6239SKiyoung Kim 4719*735d6239SKiyoung Kim if (check_executable (concat_name)) 4720*735d6239SKiyoung Kim return concat_name; 4721*735d6239SKiyoung Kim XFREE (concat_name); 4722*735d6239SKiyoung Kim return NULL; 4723*735d6239SKiyoung Kim} 4724*735d6239SKiyoung Kim 4725*735d6239SKiyoung Kimchar * 4726*735d6239SKiyoung Kimchase_symlinks (const char *pathspec) 4727*735d6239SKiyoung Kim{ 4728*735d6239SKiyoung Kim#ifndef S_ISLNK 4729*735d6239SKiyoung Kim return xstrdup (pathspec); 4730*735d6239SKiyoung Kim#else 4731*735d6239SKiyoung Kim char buf[LT_PATHMAX]; 4732*735d6239SKiyoung Kim struct stat s; 4733*735d6239SKiyoung Kim char *tmp_pathspec = xstrdup (pathspec); 4734*735d6239SKiyoung Kim char *p; 4735*735d6239SKiyoung Kim int has_symlinks = 0; 4736*735d6239SKiyoung Kim while (strlen (tmp_pathspec) && !has_symlinks) 4737*735d6239SKiyoung Kim { 4738*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, 4739*735d6239SKiyoung Kim "checking path component for symlinks: %s\n", 4740*735d6239SKiyoung Kim tmp_pathspec); 4741*735d6239SKiyoung Kim if (lstat (tmp_pathspec, &s) == 0) 4742*735d6239SKiyoung Kim { 4743*735d6239SKiyoung Kim if (S_ISLNK (s.st_mode) != 0) 4744*735d6239SKiyoung Kim { 4745*735d6239SKiyoung Kim has_symlinks = 1; 4746*735d6239SKiyoung Kim break; 4747*735d6239SKiyoung Kim } 4748*735d6239SKiyoung Kim 4749*735d6239SKiyoung Kim /* search backwards for last DIR_SEPARATOR */ 4750*735d6239SKiyoung Kim p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4751*735d6239SKiyoung Kim while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4752*735d6239SKiyoung Kim p--; 4753*735d6239SKiyoung Kim if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4754*735d6239SKiyoung Kim { 4755*735d6239SKiyoung Kim /* no more DIR_SEPARATORS left */ 4756*735d6239SKiyoung Kim break; 4757*735d6239SKiyoung Kim } 4758*735d6239SKiyoung Kim *p = '\0'; 4759*735d6239SKiyoung Kim } 4760*735d6239SKiyoung Kim else 4761*735d6239SKiyoung Kim { 4762*735d6239SKiyoung Kim lt_fatal (__FILE__, __LINE__, 4763*735d6239SKiyoung Kim "error accessing file \"%s\": %s", 4764*735d6239SKiyoung Kim tmp_pathspec, nonnull (strerror (errno))); 4765*735d6239SKiyoung Kim } 4766*735d6239SKiyoung Kim } 4767*735d6239SKiyoung Kim XFREE (tmp_pathspec); 4768*735d6239SKiyoung Kim 4769*735d6239SKiyoung Kim if (!has_symlinks) 4770*735d6239SKiyoung Kim { 4771*735d6239SKiyoung Kim return xstrdup (pathspec); 4772*735d6239SKiyoung Kim } 4773*735d6239SKiyoung Kim 4774*735d6239SKiyoung Kim tmp_pathspec = realpath (pathspec, buf); 4775*735d6239SKiyoung Kim if (tmp_pathspec == 0) 4776*735d6239SKiyoung Kim { 4777*735d6239SKiyoung Kim lt_fatal (__FILE__, __LINE__, 4778*735d6239SKiyoung Kim "could not follow symlinks for %s", pathspec); 4779*735d6239SKiyoung Kim } 4780*735d6239SKiyoung Kim return xstrdup (tmp_pathspec); 4781*735d6239SKiyoung Kim#endif 4782*735d6239SKiyoung Kim} 4783*735d6239SKiyoung Kim 4784*735d6239SKiyoung Kimchar * 4785*735d6239SKiyoung Kimstrendzap (char *str, const char *pat) 4786*735d6239SKiyoung Kim{ 4787*735d6239SKiyoung Kim size_t len, patlen; 4788*735d6239SKiyoung Kim 4789*735d6239SKiyoung Kim assert (str != NULL); 4790*735d6239SKiyoung Kim assert (pat != NULL); 4791*735d6239SKiyoung Kim 4792*735d6239SKiyoung Kim len = strlen (str); 4793*735d6239SKiyoung Kim patlen = strlen (pat); 4794*735d6239SKiyoung Kim 4795*735d6239SKiyoung Kim if (patlen <= len) 4796*735d6239SKiyoung Kim { 4797*735d6239SKiyoung Kim str += len - patlen; 4798*735d6239SKiyoung Kim if (strcmp (str, pat) == 0) 4799*735d6239SKiyoung Kim *str = '\0'; 4800*735d6239SKiyoung Kim } 4801*735d6239SKiyoung Kim return str; 4802*735d6239SKiyoung Kim} 4803*735d6239SKiyoung Kim 4804*735d6239SKiyoung Kimvoid 4805*735d6239SKiyoung Kimlt_debugprintf (const char *file, int line, const char *fmt, ...) 4806*735d6239SKiyoung Kim{ 4807*735d6239SKiyoung Kim va_list args; 4808*735d6239SKiyoung Kim if (lt_debug) 4809*735d6239SKiyoung Kim { 4810*735d6239SKiyoung Kim (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4811*735d6239SKiyoung Kim va_start (args, fmt); 4812*735d6239SKiyoung Kim (void) vfprintf (stderr, fmt, args); 4813*735d6239SKiyoung Kim va_end (args); 4814*735d6239SKiyoung Kim } 4815*735d6239SKiyoung Kim} 4816*735d6239SKiyoung Kim 4817*735d6239SKiyoung Kimstatic void 4818*735d6239SKiyoung Kimlt_error_core (int exit_status, const char *file, 4819*735d6239SKiyoung Kim int line, const char *mode, 4820*735d6239SKiyoung Kim const char *message, va_list ap) 4821*735d6239SKiyoung Kim{ 4822*735d6239SKiyoung Kim fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4823*735d6239SKiyoung Kim vfprintf (stderr, message, ap); 4824*735d6239SKiyoung Kim fprintf (stderr, ".\n"); 4825*735d6239SKiyoung Kim 4826*735d6239SKiyoung Kim if (exit_status >= 0) 4827*735d6239SKiyoung Kim exit (exit_status); 4828*735d6239SKiyoung Kim} 4829*735d6239SKiyoung Kim 4830*735d6239SKiyoung Kimvoid 4831*735d6239SKiyoung Kimlt_fatal (const char *file, int line, const char *message, ...) 4832*735d6239SKiyoung Kim{ 4833*735d6239SKiyoung Kim va_list ap; 4834*735d6239SKiyoung Kim va_start (ap, message); 4835*735d6239SKiyoung Kim lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4836*735d6239SKiyoung Kim va_end (ap); 4837*735d6239SKiyoung Kim} 4838*735d6239SKiyoung Kim 4839*735d6239SKiyoung Kimstatic const char * 4840*735d6239SKiyoung Kimnonnull (const char *s) 4841*735d6239SKiyoung Kim{ 4842*735d6239SKiyoung Kim return s ? s : "(null)"; 4843*735d6239SKiyoung Kim} 4844*735d6239SKiyoung Kim 4845*735d6239SKiyoung Kimstatic const char * 4846*735d6239SKiyoung Kimnonempty (const char *s) 4847*735d6239SKiyoung Kim{ 4848*735d6239SKiyoung Kim return (s && !*s) ? "(empty)" : nonnull (s); 4849*735d6239SKiyoung Kim} 4850*735d6239SKiyoung Kim 4851*735d6239SKiyoung Kimvoid 4852*735d6239SKiyoung Kimlt_setenv (const char *name, const char *value) 4853*735d6239SKiyoung Kim{ 4854*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, 4855*735d6239SKiyoung Kim "(lt_setenv) setting '%s' to '%s'\n", 4856*735d6239SKiyoung Kim nonnull (name), nonnull (value)); 4857*735d6239SKiyoung Kim { 4858*735d6239SKiyoung Kim#ifdef HAVE_SETENV 4859*735d6239SKiyoung Kim /* always make a copy, for consistency with !HAVE_SETENV */ 4860*735d6239SKiyoung Kim char *str = xstrdup (value); 4861*735d6239SKiyoung Kim setenv (name, str, 1); 4862*735d6239SKiyoung Kim#else 4863*735d6239SKiyoung Kim int len = strlen (name) + 1 + strlen (value) + 1; 4864*735d6239SKiyoung Kim char *str = XMALLOC (char, len); 4865*735d6239SKiyoung Kim sprintf (str, "%s=%s", name, value); 4866*735d6239SKiyoung Kim if (putenv (str) != EXIT_SUCCESS) 4867*735d6239SKiyoung Kim { 4868*735d6239SKiyoung Kim XFREE (str); 4869*735d6239SKiyoung Kim } 4870*735d6239SKiyoung Kim#endif 4871*735d6239SKiyoung Kim } 4872*735d6239SKiyoung Kim} 4873*735d6239SKiyoung Kim 4874*735d6239SKiyoung Kimchar * 4875*735d6239SKiyoung Kimlt_extend_str (const char *orig_value, const char *add, int to_end) 4876*735d6239SKiyoung Kim{ 4877*735d6239SKiyoung Kim char *new_value; 4878*735d6239SKiyoung Kim if (orig_value && *orig_value) 4879*735d6239SKiyoung Kim { 4880*735d6239SKiyoung Kim int orig_value_len = strlen (orig_value); 4881*735d6239SKiyoung Kim int add_len = strlen (add); 4882*735d6239SKiyoung Kim new_value = XMALLOC (char, add_len + orig_value_len + 1); 4883*735d6239SKiyoung Kim if (to_end) 4884*735d6239SKiyoung Kim { 4885*735d6239SKiyoung Kim strcpy (new_value, orig_value); 4886*735d6239SKiyoung Kim strcpy (new_value + orig_value_len, add); 4887*735d6239SKiyoung Kim } 4888*735d6239SKiyoung Kim else 4889*735d6239SKiyoung Kim { 4890*735d6239SKiyoung Kim strcpy (new_value, add); 4891*735d6239SKiyoung Kim strcpy (new_value + add_len, orig_value); 4892*735d6239SKiyoung Kim } 4893*735d6239SKiyoung Kim } 4894*735d6239SKiyoung Kim else 4895*735d6239SKiyoung Kim { 4896*735d6239SKiyoung Kim new_value = xstrdup (add); 4897*735d6239SKiyoung Kim } 4898*735d6239SKiyoung Kim return new_value; 4899*735d6239SKiyoung Kim} 4900*735d6239SKiyoung Kim 4901*735d6239SKiyoung Kimvoid 4902*735d6239SKiyoung Kimlt_update_exe_path (const char *name, const char *value) 4903*735d6239SKiyoung Kim{ 4904*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, 4905*735d6239SKiyoung Kim "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4906*735d6239SKiyoung Kim nonnull (name), nonnull (value)); 4907*735d6239SKiyoung Kim 4908*735d6239SKiyoung Kim if (name && *name && value && *value) 4909*735d6239SKiyoung Kim { 4910*735d6239SKiyoung Kim char *new_value = lt_extend_str (getenv (name), value, 0); 4911*735d6239SKiyoung Kim /* some systems can't cope with a ':'-terminated path #' */ 4912*735d6239SKiyoung Kim int len = strlen (new_value); 4913*735d6239SKiyoung Kim while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4914*735d6239SKiyoung Kim { 4915*735d6239SKiyoung Kim new_value[len-1] = '\0'; 4916*735d6239SKiyoung Kim } 4917*735d6239SKiyoung Kim lt_setenv (name, new_value); 4918*735d6239SKiyoung Kim XFREE (new_value); 4919*735d6239SKiyoung Kim } 4920*735d6239SKiyoung Kim} 4921*735d6239SKiyoung Kim 4922*735d6239SKiyoung Kimvoid 4923*735d6239SKiyoung Kimlt_update_lib_path (const char *name, const char *value) 4924*735d6239SKiyoung Kim{ 4925*735d6239SKiyoung Kim lt_debugprintf (__FILE__, __LINE__, 4926*735d6239SKiyoung Kim "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4927*735d6239SKiyoung Kim nonnull (name), nonnull (value)); 4928*735d6239SKiyoung Kim 4929*735d6239SKiyoung Kim if (name && *name && value && *value) 4930*735d6239SKiyoung Kim { 4931*735d6239SKiyoung Kim char *new_value = lt_extend_str (getenv (name), value, 0); 4932*735d6239SKiyoung Kim lt_setenv (name, new_value); 4933*735d6239SKiyoung Kim XFREE (new_value); 4934*735d6239SKiyoung Kim } 4935*735d6239SKiyoung Kim} 4936*735d6239SKiyoung Kim 4937*735d6239SKiyoung KimEOF 4938*735d6239SKiyoung Kim case $host_os in 4939*735d6239SKiyoung Kim mingw*) 4940*735d6239SKiyoung Kim cat <<"EOF" 4941*735d6239SKiyoung Kim 4942*735d6239SKiyoung Kim/* Prepares an argument vector before calling spawn(). 4943*735d6239SKiyoung Kim Note that spawn() does not by itself call the command interpreter 4944*735d6239SKiyoung Kim (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4945*735d6239SKiyoung Kim ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4946*735d6239SKiyoung Kim GetVersionEx(&v); 4947*735d6239SKiyoung Kim v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4948*735d6239SKiyoung Kim }) ? "cmd.exe" : "command.com"). 4949*735d6239SKiyoung Kim Instead it simply concatenates the arguments, separated by ' ', and calls 4950*735d6239SKiyoung Kim CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4951*735d6239SKiyoung Kim interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4952*735d6239SKiyoung Kim special way: 4953*735d6239SKiyoung Kim - Space and tab are interpreted as delimiters. They are not treated as 4954*735d6239SKiyoung Kim delimiters if they are surrounded by double quotes: "...". 4955*735d6239SKiyoung Kim - Unescaped double quotes are removed from the input. Their only effect is 4956*735d6239SKiyoung Kim that within double quotes, space and tab are treated like normal 4957*735d6239SKiyoung Kim characters. 4958*735d6239SKiyoung Kim - Backslashes not followed by double quotes are not special. 4959*735d6239SKiyoung Kim - But 2*n+1 backslashes followed by a double quote become 4960*735d6239SKiyoung Kim n backslashes followed by a double quote (n >= 0): 4961*735d6239SKiyoung Kim \" -> " 4962*735d6239SKiyoung Kim \\\" -> \" 4963*735d6239SKiyoung Kim \\\\\" -> \\" 4964*735d6239SKiyoung Kim */ 4965*735d6239SKiyoung Kim#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" 4966*735d6239SKiyoung Kim#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" 4967*735d6239SKiyoung Kimchar ** 4968*735d6239SKiyoung Kimprepare_spawn (char **argv) 4969*735d6239SKiyoung Kim{ 4970*735d6239SKiyoung Kim size_t argc; 4971*735d6239SKiyoung Kim char **new_argv; 4972*735d6239SKiyoung Kim size_t i; 4973*735d6239SKiyoung Kim 4974*735d6239SKiyoung Kim /* Count number of arguments. */ 4975*735d6239SKiyoung Kim for (argc = 0; argv[argc] != NULL; argc++) 4976*735d6239SKiyoung Kim ; 4977*735d6239SKiyoung Kim 4978*735d6239SKiyoung Kim /* Allocate new argument vector. */ 4979*735d6239SKiyoung Kim new_argv = XMALLOC (char *, argc + 1); 4980*735d6239SKiyoung Kim 4981*735d6239SKiyoung Kim /* Put quoted arguments into the new argument vector. */ 4982*735d6239SKiyoung Kim for (i = 0; i < argc; i++) 4983*735d6239SKiyoung Kim { 4984*735d6239SKiyoung Kim const char *string = argv[i]; 4985*735d6239SKiyoung Kim 4986*735d6239SKiyoung Kim if (string[0] == '\0') 4987*735d6239SKiyoung Kim new_argv[i] = xstrdup ("\"\""); 4988*735d6239SKiyoung Kim else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4989*735d6239SKiyoung Kim { 4990*735d6239SKiyoung Kim int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4991*735d6239SKiyoung Kim size_t length; 4992*735d6239SKiyoung Kim unsigned int backslashes; 4993*735d6239SKiyoung Kim const char *s; 4994*735d6239SKiyoung Kim char *quoted_string; 4995*735d6239SKiyoung Kim char *p; 4996*735d6239SKiyoung Kim 4997*735d6239SKiyoung Kim length = 0; 4998*735d6239SKiyoung Kim backslashes = 0; 4999*735d6239SKiyoung Kim if (quote_around) 5000*735d6239SKiyoung Kim length++; 5001*735d6239SKiyoung Kim for (s = string; *s != '\0'; s++) 5002*735d6239SKiyoung Kim { 5003*735d6239SKiyoung Kim char c = *s; 5004*735d6239SKiyoung Kim if (c == '"') 5005*735d6239SKiyoung Kim length += backslashes + 1; 5006*735d6239SKiyoung Kim length++; 5007*735d6239SKiyoung Kim if (c == '\\') 5008*735d6239SKiyoung Kim backslashes++; 5009*735d6239SKiyoung Kim else 5010*735d6239SKiyoung Kim backslashes = 0; 5011*735d6239SKiyoung Kim } 5012*735d6239SKiyoung Kim if (quote_around) 5013*735d6239SKiyoung Kim length += backslashes + 1; 5014*735d6239SKiyoung Kim 5015*735d6239SKiyoung Kim quoted_string = XMALLOC (char, length + 1); 5016*735d6239SKiyoung Kim 5017*735d6239SKiyoung Kim p = quoted_string; 5018*735d6239SKiyoung Kim backslashes = 0; 5019*735d6239SKiyoung Kim if (quote_around) 5020*735d6239SKiyoung Kim *p++ = '"'; 5021*735d6239SKiyoung Kim for (s = string; *s != '\0'; s++) 5022*735d6239SKiyoung Kim { 5023*735d6239SKiyoung Kim char c = *s; 5024*735d6239SKiyoung Kim if (c == '"') 5025*735d6239SKiyoung Kim { 5026*735d6239SKiyoung Kim unsigned int j; 5027*735d6239SKiyoung Kim for (j = backslashes + 1; j > 0; j--) 5028*735d6239SKiyoung Kim *p++ = '\\'; 5029*735d6239SKiyoung Kim } 5030*735d6239SKiyoung Kim *p++ = c; 5031*735d6239SKiyoung Kim if (c == '\\') 5032*735d6239SKiyoung Kim backslashes++; 5033*735d6239SKiyoung Kim else 5034*735d6239SKiyoung Kim backslashes = 0; 5035*735d6239SKiyoung Kim } 5036*735d6239SKiyoung Kim if (quote_around) 5037*735d6239SKiyoung Kim { 5038*735d6239SKiyoung Kim unsigned int j; 5039*735d6239SKiyoung Kim for (j = backslashes; j > 0; j--) 5040*735d6239SKiyoung Kim *p++ = '\\'; 5041*735d6239SKiyoung Kim *p++ = '"'; 5042*735d6239SKiyoung Kim } 5043*735d6239SKiyoung Kim *p = '\0'; 5044*735d6239SKiyoung Kim 5045*735d6239SKiyoung Kim new_argv[i] = quoted_string; 5046*735d6239SKiyoung Kim } 5047*735d6239SKiyoung Kim else 5048*735d6239SKiyoung Kim new_argv[i] = (char *) string; 5049*735d6239SKiyoung Kim } 5050*735d6239SKiyoung Kim new_argv[argc] = NULL; 5051*735d6239SKiyoung Kim 5052*735d6239SKiyoung Kim return new_argv; 5053*735d6239SKiyoung Kim} 5054*735d6239SKiyoung KimEOF 5055*735d6239SKiyoung Kim ;; 5056*735d6239SKiyoung Kim esac 5057*735d6239SKiyoung Kim 5058*735d6239SKiyoung Kim cat <<"EOF" 5059*735d6239SKiyoung Kimvoid lt_dump_script (FILE* f) 5060*735d6239SKiyoung Kim{ 5061*735d6239SKiyoung KimEOF 5062*735d6239SKiyoung Kim func_emit_wrapper yes | 5063*735d6239SKiyoung Kim $SED -e 's/\([\\"]\)/\\\1/g' \ 5064*735d6239SKiyoung Kim -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' 5065*735d6239SKiyoung Kim 5066*735d6239SKiyoung Kim cat <<"EOF" 5067*735d6239SKiyoung Kim} 5068*735d6239SKiyoung KimEOF 5069*735d6239SKiyoung Kim} 5070*735d6239SKiyoung Kim# end: func_emit_cwrapperexe_src 5071*735d6239SKiyoung Kim 5072*735d6239SKiyoung Kim# func_win32_import_lib_p ARG 5073*735d6239SKiyoung Kim# True if ARG is an import lib, as indicated by $file_magic_cmd 5074*735d6239SKiyoung Kimfunc_win32_import_lib_p () 5075*735d6239SKiyoung Kim{ 5076*735d6239SKiyoung Kim $opt_debug 5077*735d6239SKiyoung Kim case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 5078*735d6239SKiyoung Kim *import*) : ;; 5079*735d6239SKiyoung Kim *) false ;; 5080*735d6239SKiyoung Kim esac 5081*735d6239SKiyoung Kim} 5082*735d6239SKiyoung Kim 5083*735d6239SKiyoung Kim# func_mode_link arg... 5084*735d6239SKiyoung Kimfunc_mode_link () 5085*735d6239SKiyoung Kim{ 5086*735d6239SKiyoung Kim $opt_debug 5087*735d6239SKiyoung Kim case $host in 5088*735d6239SKiyoung Kim *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5089*735d6239SKiyoung Kim # It is impossible to link a dll without this setting, and 5090*735d6239SKiyoung Kim # we shouldn't force the makefile maintainer to figure out 5091*735d6239SKiyoung Kim # which system we are compiling for in order to pass an extra 5092*735d6239SKiyoung Kim # flag for every libtool invocation. 5093*735d6239SKiyoung Kim # allow_undefined=no 5094*735d6239SKiyoung Kim 5095*735d6239SKiyoung Kim # FIXME: Unfortunately, there are problems with the above when trying 5096*735d6239SKiyoung Kim # to make a dll which has undefined symbols, in which case not 5097*735d6239SKiyoung Kim # even a static library is built. For now, we need to specify 5098*735d6239SKiyoung Kim # -no-undefined on the libtool link line when we can be certain 5099*735d6239SKiyoung Kim # that all symbols are satisfied, otherwise we get a static library. 5100*735d6239SKiyoung Kim allow_undefined=yes 5101*735d6239SKiyoung Kim ;; 5102*735d6239SKiyoung Kim *) 5103*735d6239SKiyoung Kim allow_undefined=yes 5104*735d6239SKiyoung Kim ;; 5105*735d6239SKiyoung Kim esac 5106*735d6239SKiyoung Kim libtool_args=$nonopt 5107*735d6239SKiyoung Kim base_compile="$nonopt $@" 5108*735d6239SKiyoung Kim compile_command=$nonopt 5109*735d6239SKiyoung Kim finalize_command=$nonopt 5110*735d6239SKiyoung Kim 5111*735d6239SKiyoung Kim compile_rpath= 5112*735d6239SKiyoung Kim finalize_rpath= 5113*735d6239SKiyoung Kim compile_shlibpath= 5114*735d6239SKiyoung Kim finalize_shlibpath= 5115*735d6239SKiyoung Kim convenience= 5116*735d6239SKiyoung Kim old_convenience= 5117*735d6239SKiyoung Kim deplibs= 5118*735d6239SKiyoung Kim old_deplibs= 5119*735d6239SKiyoung Kim compiler_flags= 5120*735d6239SKiyoung Kim linker_flags= 5121*735d6239SKiyoung Kim dllsearchpath= 5122*735d6239SKiyoung Kim lib_search_path=`pwd` 5123*735d6239SKiyoung Kim inst_prefix_dir= 5124*735d6239SKiyoung Kim new_inherited_linker_flags= 5125*735d6239SKiyoung Kim 5126*735d6239SKiyoung Kim avoid_version=no 5127*735d6239SKiyoung Kim bindir= 5128*735d6239SKiyoung Kim dlfiles= 5129*735d6239SKiyoung Kim dlprefiles= 5130*735d6239SKiyoung Kim dlself=no 5131*735d6239SKiyoung Kim export_dynamic=no 5132*735d6239SKiyoung Kim export_symbols= 5133*735d6239SKiyoung Kim export_symbols_regex= 5134*735d6239SKiyoung Kim generated= 5135*735d6239SKiyoung Kim libobjs= 5136*735d6239SKiyoung Kim ltlibs= 5137*735d6239SKiyoung Kim module=no 5138*735d6239SKiyoung Kim no_install=no 5139*735d6239SKiyoung Kim objs= 5140*735d6239SKiyoung Kim non_pic_objects= 5141*735d6239SKiyoung Kim precious_files_regex= 5142*735d6239SKiyoung Kim prefer_static_libs=no 5143*735d6239SKiyoung Kim preload=no 5144*735d6239SKiyoung Kim prev= 5145*735d6239SKiyoung Kim prevarg= 5146*735d6239SKiyoung Kim release= 5147*735d6239SKiyoung Kim rpath= 5148*735d6239SKiyoung Kim xrpath= 5149*735d6239SKiyoung Kim perm_rpath= 5150*735d6239SKiyoung Kim temp_rpath= 5151*735d6239SKiyoung Kim thread_safe=no 5152*735d6239SKiyoung Kim vinfo= 5153*735d6239SKiyoung Kim vinfo_number=no 5154*735d6239SKiyoung Kim weak_libs= 5155*735d6239SKiyoung Kim single_module="${wl}-single_module" 5156*735d6239SKiyoung Kim func_infer_tag $base_compile 5157*735d6239SKiyoung Kim 5158*735d6239SKiyoung Kim # We need to know -static, to get the right output filenames. 5159*735d6239SKiyoung Kim for arg 5160*735d6239SKiyoung Kim do 5161*735d6239SKiyoung Kim case $arg in 5162*735d6239SKiyoung Kim -shared) 5163*735d6239SKiyoung Kim test "$build_libtool_libs" != yes && \ 5164*735d6239SKiyoung Kim func_fatal_configuration "can not build a shared library" 5165*735d6239SKiyoung Kim build_old_libs=no 5166*735d6239SKiyoung Kim break 5167*735d6239SKiyoung Kim ;; 5168*735d6239SKiyoung Kim -all-static | -static | -static-libtool-libs) 5169*735d6239SKiyoung Kim case $arg in 5170*735d6239SKiyoung Kim -all-static) 5171*735d6239SKiyoung Kim if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5172*735d6239SKiyoung Kim func_warning "complete static linking is impossible in this configuration" 5173*735d6239SKiyoung Kim fi 5174*735d6239SKiyoung Kim if test -n "$link_static_flag"; then 5175*735d6239SKiyoung Kim dlopen_self=$dlopen_self_static 5176*735d6239SKiyoung Kim fi 5177*735d6239SKiyoung Kim prefer_static_libs=yes 5178*735d6239SKiyoung Kim ;; 5179*735d6239SKiyoung Kim -static) 5180*735d6239SKiyoung Kim if test -z "$pic_flag" && test -n "$link_static_flag"; then 5181*735d6239SKiyoung Kim dlopen_self=$dlopen_self_static 5182*735d6239SKiyoung Kim fi 5183*735d6239SKiyoung Kim prefer_static_libs=built 5184*735d6239SKiyoung Kim ;; 5185*735d6239SKiyoung Kim -static-libtool-libs) 5186*735d6239SKiyoung Kim if test -z "$pic_flag" && test -n "$link_static_flag"; then 5187*735d6239SKiyoung Kim dlopen_self=$dlopen_self_static 5188*735d6239SKiyoung Kim fi 5189*735d6239SKiyoung Kim prefer_static_libs=yes 5190*735d6239SKiyoung Kim ;; 5191*735d6239SKiyoung Kim esac 5192*735d6239SKiyoung Kim build_libtool_libs=no 5193*735d6239SKiyoung Kim build_old_libs=yes 5194*735d6239SKiyoung Kim break 5195*735d6239SKiyoung Kim ;; 5196*735d6239SKiyoung Kim esac 5197*735d6239SKiyoung Kim done 5198*735d6239SKiyoung Kim 5199*735d6239SKiyoung Kim # See if our shared archives depend on static archives. 5200*735d6239SKiyoung Kim test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5201*735d6239SKiyoung Kim 5202*735d6239SKiyoung Kim # Go through the arguments, transforming them on the way. 5203*735d6239SKiyoung Kim while test "$#" -gt 0; do 5204*735d6239SKiyoung Kim arg="$1" 5205*735d6239SKiyoung Kim shift 5206*735d6239SKiyoung Kim func_quote_for_eval "$arg" 5207*735d6239SKiyoung Kim qarg=$func_quote_for_eval_unquoted_result 5208*735d6239SKiyoung Kim func_append libtool_args " $func_quote_for_eval_result" 5209*735d6239SKiyoung Kim 5210*735d6239SKiyoung Kim # If the previous option needs an argument, assign it. 5211*735d6239SKiyoung Kim if test -n "$prev"; then 5212*735d6239SKiyoung Kim case $prev in 5213*735d6239SKiyoung Kim output) 5214*735d6239SKiyoung Kim func_append compile_command " @OUTPUT@" 5215*735d6239SKiyoung Kim func_append finalize_command " @OUTPUT@" 5216*735d6239SKiyoung Kim ;; 5217*735d6239SKiyoung Kim esac 5218*735d6239SKiyoung Kim 5219*735d6239SKiyoung Kim case $prev in 5220*735d6239SKiyoung Kim bindir) 5221*735d6239SKiyoung Kim bindir="$arg" 5222*735d6239SKiyoung Kim prev= 5223*735d6239SKiyoung Kim continue 5224*735d6239SKiyoung Kim ;; 5225*735d6239SKiyoung Kim dlfiles|dlprefiles) 5226*735d6239SKiyoung Kim if test "$preload" = no; then 5227*735d6239SKiyoung Kim # Add the symbol object into the linking commands. 5228*735d6239SKiyoung Kim func_append compile_command " @SYMFILE@" 5229*735d6239SKiyoung Kim func_append finalize_command " @SYMFILE@" 5230*735d6239SKiyoung Kim preload=yes 5231*735d6239SKiyoung Kim fi 5232*735d6239SKiyoung Kim case $arg in 5233*735d6239SKiyoung Kim *.la | *.lo) ;; # We handle these cases below. 5234*735d6239SKiyoung Kim force) 5235*735d6239SKiyoung Kim if test "$dlself" = no; then 5236*735d6239SKiyoung Kim dlself=needless 5237*735d6239SKiyoung Kim export_dynamic=yes 5238*735d6239SKiyoung Kim fi 5239*735d6239SKiyoung Kim prev= 5240*735d6239SKiyoung Kim continue 5241*735d6239SKiyoung Kim ;; 5242*735d6239SKiyoung Kim self) 5243*735d6239SKiyoung Kim if test "$prev" = dlprefiles; then 5244*735d6239SKiyoung Kim dlself=yes 5245*735d6239SKiyoung Kim elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5246*735d6239SKiyoung Kim dlself=yes 5247*735d6239SKiyoung Kim else 5248*735d6239SKiyoung Kim dlself=needless 5249*735d6239SKiyoung Kim export_dynamic=yes 5250*735d6239SKiyoung Kim fi 5251*735d6239SKiyoung Kim prev= 5252*735d6239SKiyoung Kim continue 5253*735d6239SKiyoung Kim ;; 5254*735d6239SKiyoung Kim *) 5255*735d6239SKiyoung Kim if test "$prev" = dlfiles; then 5256*735d6239SKiyoung Kim func_append dlfiles " $arg" 5257*735d6239SKiyoung Kim else 5258*735d6239SKiyoung Kim func_append dlprefiles " $arg" 5259*735d6239SKiyoung Kim fi 5260*735d6239SKiyoung Kim prev= 5261*735d6239SKiyoung Kim continue 5262*735d6239SKiyoung Kim ;; 5263*735d6239SKiyoung Kim esac 5264*735d6239SKiyoung Kim ;; 5265*735d6239SKiyoung Kim expsyms) 5266*735d6239SKiyoung Kim export_symbols="$arg" 5267*735d6239SKiyoung Kim test -f "$arg" \ 5268*735d6239SKiyoung Kim || func_fatal_error "symbol file \`$arg' does not exist" 5269*735d6239SKiyoung Kim prev= 5270*735d6239SKiyoung Kim continue 5271*735d6239SKiyoung Kim ;; 5272*735d6239SKiyoung Kim expsyms_regex) 5273*735d6239SKiyoung Kim export_symbols_regex="$arg" 5274*735d6239SKiyoung Kim prev= 5275*735d6239SKiyoung Kim continue 5276*735d6239SKiyoung Kim ;; 5277*735d6239SKiyoung Kim framework) 5278*735d6239SKiyoung Kim case $host in 5279*735d6239SKiyoung Kim *-*-darwin*) 5280*735d6239SKiyoung Kim case "$deplibs " in 5281*735d6239SKiyoung Kim *" $qarg.ltframework "*) ;; 5282*735d6239SKiyoung Kim *) func_append deplibs " $qarg.ltframework" # this is fixed later 5283*735d6239SKiyoung Kim ;; 5284*735d6239SKiyoung Kim esac 5285*735d6239SKiyoung Kim ;; 5286*735d6239SKiyoung Kim esac 5287*735d6239SKiyoung Kim prev= 5288*735d6239SKiyoung Kim continue 5289*735d6239SKiyoung Kim ;; 5290*735d6239SKiyoung Kim inst_prefix) 5291*735d6239SKiyoung Kim inst_prefix_dir="$arg" 5292*735d6239SKiyoung Kim prev= 5293*735d6239SKiyoung Kim continue 5294*735d6239SKiyoung Kim ;; 5295*735d6239SKiyoung Kim objectlist) 5296*735d6239SKiyoung Kim if test -f "$arg"; then 5297*735d6239SKiyoung Kim save_arg=$arg 5298*735d6239SKiyoung Kim moreargs= 5299*735d6239SKiyoung Kim for fil in `cat "$save_arg"` 5300*735d6239SKiyoung Kim do 5301*735d6239SKiyoung Kim# func_append moreargs " $fil" 5302*735d6239SKiyoung Kim arg=$fil 5303*735d6239SKiyoung Kim # A libtool-controlled object. 5304*735d6239SKiyoung Kim 5305*735d6239SKiyoung Kim # Check to see that this really is a libtool object. 5306*735d6239SKiyoung Kim if func_lalib_unsafe_p "$arg"; then 5307*735d6239SKiyoung Kim pic_object= 5308*735d6239SKiyoung Kim non_pic_object= 5309*735d6239SKiyoung Kim 5310*735d6239SKiyoung Kim # Read the .lo file 5311*735d6239SKiyoung Kim func_source "$arg" 5312*735d6239SKiyoung Kim 5313*735d6239SKiyoung Kim if test -z "$pic_object" || 5314*735d6239SKiyoung Kim test -z "$non_pic_object" || 5315*735d6239SKiyoung Kim test "$pic_object" = none && 5316*735d6239SKiyoung Kim test "$non_pic_object" = none; then 5317*735d6239SKiyoung Kim func_fatal_error "cannot find name of object for \`$arg'" 5318*735d6239SKiyoung Kim fi 5319*735d6239SKiyoung Kim 5320*735d6239SKiyoung Kim # Extract subdirectory from the argument. 5321*735d6239SKiyoung Kim func_dirname "$arg" "/" "" 5322*735d6239SKiyoung Kim xdir="$func_dirname_result" 5323*735d6239SKiyoung Kim 5324*735d6239SKiyoung Kim if test "$pic_object" != none; then 5325*735d6239SKiyoung Kim # Prepend the subdirectory the object is found in. 5326*735d6239SKiyoung Kim pic_object="$xdir$pic_object" 5327*735d6239SKiyoung Kim 5328*735d6239SKiyoung Kim if test "$prev" = dlfiles; then 5329*735d6239SKiyoung Kim if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5330*735d6239SKiyoung Kim func_append dlfiles " $pic_object" 5331*735d6239SKiyoung Kim prev= 5332*735d6239SKiyoung Kim continue 5333*735d6239SKiyoung Kim else 5334*735d6239SKiyoung Kim # If libtool objects are unsupported, then we need to preload. 5335*735d6239SKiyoung Kim prev=dlprefiles 5336*735d6239SKiyoung Kim fi 5337*735d6239SKiyoung Kim fi 5338*735d6239SKiyoung Kim 5339*735d6239SKiyoung Kim # CHECK ME: I think I busted this. -Ossama 5340*735d6239SKiyoung Kim if test "$prev" = dlprefiles; then 5341*735d6239SKiyoung Kim # Preload the old-style object. 5342*735d6239SKiyoung Kim func_append dlprefiles " $pic_object" 5343*735d6239SKiyoung Kim prev= 5344*735d6239SKiyoung Kim fi 5345*735d6239SKiyoung Kim 5346*735d6239SKiyoung Kim # A PIC object. 5347*735d6239SKiyoung Kim func_append libobjs " $pic_object" 5348*735d6239SKiyoung Kim arg="$pic_object" 5349*735d6239SKiyoung Kim fi 5350*735d6239SKiyoung Kim 5351*735d6239SKiyoung Kim # Non-PIC object. 5352*735d6239SKiyoung Kim if test "$non_pic_object" != none; then 5353*735d6239SKiyoung Kim # Prepend the subdirectory the object is found in. 5354*735d6239SKiyoung Kim non_pic_object="$xdir$non_pic_object" 5355*735d6239SKiyoung Kim 5356*735d6239SKiyoung Kim # A standard non-PIC object 5357*735d6239SKiyoung Kim func_append non_pic_objects " $non_pic_object" 5358*735d6239SKiyoung Kim if test -z "$pic_object" || test "$pic_object" = none ; then 5359*735d6239SKiyoung Kim arg="$non_pic_object" 5360*735d6239SKiyoung Kim fi 5361*735d6239SKiyoung Kim else 5362*735d6239SKiyoung Kim # If the PIC object exists, use it instead. 5363*735d6239SKiyoung Kim # $xdir was prepended to $pic_object above. 5364*735d6239SKiyoung Kim non_pic_object="$pic_object" 5365*735d6239SKiyoung Kim func_append non_pic_objects " $non_pic_object" 5366*735d6239SKiyoung Kim fi 5367*735d6239SKiyoung Kim else 5368*735d6239SKiyoung Kim # Only an error if not doing a dry-run. 5369*735d6239SKiyoung Kim if $opt_dry_run; then 5370*735d6239SKiyoung Kim # Extract subdirectory from the argument. 5371*735d6239SKiyoung Kim func_dirname "$arg" "/" "" 5372*735d6239SKiyoung Kim xdir="$func_dirname_result" 5373*735d6239SKiyoung Kim 5374*735d6239SKiyoung Kim func_lo2o "$arg" 5375*735d6239SKiyoung Kim pic_object=$xdir$objdir/$func_lo2o_result 5376*735d6239SKiyoung Kim non_pic_object=$xdir$func_lo2o_result 5377*735d6239SKiyoung Kim func_append libobjs " $pic_object" 5378*735d6239SKiyoung Kim func_append non_pic_objects " $non_pic_object" 5379*735d6239SKiyoung Kim else 5380*735d6239SKiyoung Kim func_fatal_error "\`$arg' is not a valid libtool object" 5381*735d6239SKiyoung Kim fi 5382*735d6239SKiyoung Kim fi 5383*735d6239SKiyoung Kim done 5384*735d6239SKiyoung Kim else 5385*735d6239SKiyoung Kim func_fatal_error "link input file \`$arg' does not exist" 5386*735d6239SKiyoung Kim fi 5387*735d6239SKiyoung Kim arg=$save_arg 5388*735d6239SKiyoung Kim prev= 5389*735d6239SKiyoung Kim continue 5390*735d6239SKiyoung Kim ;; 5391*735d6239SKiyoung Kim precious_regex) 5392*735d6239SKiyoung Kim precious_files_regex="$arg" 5393*735d6239SKiyoung Kim prev= 5394*735d6239SKiyoung Kim continue 5395*735d6239SKiyoung Kim ;; 5396*735d6239SKiyoung Kim release) 5397*735d6239SKiyoung Kim release="-$arg" 5398*735d6239SKiyoung Kim prev= 5399*735d6239SKiyoung Kim continue 5400*735d6239SKiyoung Kim ;; 5401*735d6239SKiyoung Kim rpath | xrpath) 5402*735d6239SKiyoung Kim # We need an absolute path. 5403*735d6239SKiyoung Kim case $arg in 5404*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]*) ;; 5405*735d6239SKiyoung Kim *) 5406*735d6239SKiyoung Kim func_fatal_error "only absolute run-paths are allowed" 5407*735d6239SKiyoung Kim ;; 5408*735d6239SKiyoung Kim esac 5409*735d6239SKiyoung Kim if test "$prev" = rpath; then 5410*735d6239SKiyoung Kim case "$rpath " in 5411*735d6239SKiyoung Kim *" $arg "*) ;; 5412*735d6239SKiyoung Kim *) func_append rpath " $arg" ;; 5413*735d6239SKiyoung Kim esac 5414*735d6239SKiyoung Kim else 5415*735d6239SKiyoung Kim case "$xrpath " in 5416*735d6239SKiyoung Kim *" $arg "*) ;; 5417*735d6239SKiyoung Kim *) func_append xrpath " $arg" ;; 5418*735d6239SKiyoung Kim esac 5419*735d6239SKiyoung Kim fi 5420*735d6239SKiyoung Kim prev= 5421*735d6239SKiyoung Kim continue 5422*735d6239SKiyoung Kim ;; 5423*735d6239SKiyoung Kim shrext) 5424*735d6239SKiyoung Kim shrext_cmds="$arg" 5425*735d6239SKiyoung Kim prev= 5426*735d6239SKiyoung Kim continue 5427*735d6239SKiyoung Kim ;; 5428*735d6239SKiyoung Kim weak) 5429*735d6239SKiyoung Kim func_append weak_libs " $arg" 5430*735d6239SKiyoung Kim prev= 5431*735d6239SKiyoung Kim continue 5432*735d6239SKiyoung Kim ;; 5433*735d6239SKiyoung Kim xcclinker) 5434*735d6239SKiyoung Kim func_append linker_flags " $qarg" 5435*735d6239SKiyoung Kim func_append compiler_flags " $qarg" 5436*735d6239SKiyoung Kim prev= 5437*735d6239SKiyoung Kim func_append compile_command " $qarg" 5438*735d6239SKiyoung Kim func_append finalize_command " $qarg" 5439*735d6239SKiyoung Kim continue 5440*735d6239SKiyoung Kim ;; 5441*735d6239SKiyoung Kim xcompiler) 5442*735d6239SKiyoung Kim func_append compiler_flags " $qarg" 5443*735d6239SKiyoung Kim prev= 5444*735d6239SKiyoung Kim func_append compile_command " $qarg" 5445*735d6239SKiyoung Kim func_append finalize_command " $qarg" 5446*735d6239SKiyoung Kim continue 5447*735d6239SKiyoung Kim ;; 5448*735d6239SKiyoung Kim xlinker) 5449*735d6239SKiyoung Kim func_append linker_flags " $qarg" 5450*735d6239SKiyoung Kim func_append compiler_flags " $wl$qarg" 5451*735d6239SKiyoung Kim prev= 5452*735d6239SKiyoung Kim func_append compile_command " $wl$qarg" 5453*735d6239SKiyoung Kim func_append finalize_command " $wl$qarg" 5454*735d6239SKiyoung Kim continue 5455*735d6239SKiyoung Kim ;; 5456*735d6239SKiyoung Kim *) 5457*735d6239SKiyoung Kim eval "$prev=\"\$arg\"" 5458*735d6239SKiyoung Kim prev= 5459*735d6239SKiyoung Kim continue 5460*735d6239SKiyoung Kim ;; 5461*735d6239SKiyoung Kim esac 5462*735d6239SKiyoung Kim fi # test -n "$prev" 5463*735d6239SKiyoung Kim 5464*735d6239SKiyoung Kim prevarg="$arg" 5465*735d6239SKiyoung Kim 5466*735d6239SKiyoung Kim case $arg in 5467*735d6239SKiyoung Kim -all-static) 5468*735d6239SKiyoung Kim if test -n "$link_static_flag"; then 5469*735d6239SKiyoung Kim # See comment for -static flag below, for more details. 5470*735d6239SKiyoung Kim func_append compile_command " $link_static_flag" 5471*735d6239SKiyoung Kim func_append finalize_command " $link_static_flag" 5472*735d6239SKiyoung Kim fi 5473*735d6239SKiyoung Kim continue 5474*735d6239SKiyoung Kim ;; 5475*735d6239SKiyoung Kim 5476*735d6239SKiyoung Kim -allow-undefined) 5477*735d6239SKiyoung Kim # FIXME: remove this flag sometime in the future. 5478*735d6239SKiyoung Kim func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5479*735d6239SKiyoung Kim ;; 5480*735d6239SKiyoung Kim 5481*735d6239SKiyoung Kim -avoid-version) 5482*735d6239SKiyoung Kim avoid_version=yes 5483*735d6239SKiyoung Kim continue 5484*735d6239SKiyoung Kim ;; 5485*735d6239SKiyoung Kim 5486*735d6239SKiyoung Kim -bindir) 5487*735d6239SKiyoung Kim prev=bindir 5488*735d6239SKiyoung Kim continue 5489*735d6239SKiyoung Kim ;; 5490*735d6239SKiyoung Kim 5491*735d6239SKiyoung Kim -dlopen) 5492*735d6239SKiyoung Kim prev=dlfiles 5493*735d6239SKiyoung Kim continue 5494*735d6239SKiyoung Kim ;; 5495*735d6239SKiyoung Kim 5496*735d6239SKiyoung Kim -dlpreopen) 5497*735d6239SKiyoung Kim prev=dlprefiles 5498*735d6239SKiyoung Kim continue 5499*735d6239SKiyoung Kim ;; 5500*735d6239SKiyoung Kim 5501*735d6239SKiyoung Kim -export-dynamic) 5502*735d6239SKiyoung Kim export_dynamic=yes 5503*735d6239SKiyoung Kim continue 5504*735d6239SKiyoung Kim ;; 5505*735d6239SKiyoung Kim 5506*735d6239SKiyoung Kim -export-symbols | -export-symbols-regex) 5507*735d6239SKiyoung Kim if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5508*735d6239SKiyoung Kim func_fatal_error "more than one -exported-symbols argument is not allowed" 5509*735d6239SKiyoung Kim fi 5510*735d6239SKiyoung Kim if test "X$arg" = "X-export-symbols"; then 5511*735d6239SKiyoung Kim prev=expsyms 5512*735d6239SKiyoung Kim else 5513*735d6239SKiyoung Kim prev=expsyms_regex 5514*735d6239SKiyoung Kim fi 5515*735d6239SKiyoung Kim continue 5516*735d6239SKiyoung Kim ;; 5517*735d6239SKiyoung Kim 5518*735d6239SKiyoung Kim -framework) 5519*735d6239SKiyoung Kim prev=framework 5520*735d6239SKiyoung Kim continue 5521*735d6239SKiyoung Kim ;; 5522*735d6239SKiyoung Kim 5523*735d6239SKiyoung Kim -inst-prefix-dir) 5524*735d6239SKiyoung Kim prev=inst_prefix 5525*735d6239SKiyoung Kim continue 5526*735d6239SKiyoung Kim ;; 5527*735d6239SKiyoung Kim 5528*735d6239SKiyoung Kim # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5529*735d6239SKiyoung Kim # so, if we see these flags be careful not to treat them like -L 5530*735d6239SKiyoung Kim -L[A-Z][A-Z]*:*) 5531*735d6239SKiyoung Kim case $with_gcc/$host in 5532*735d6239SKiyoung Kim no/*-*-irix* | /*-*-irix*) 5533*735d6239SKiyoung Kim func_append compile_command " $arg" 5534*735d6239SKiyoung Kim func_append finalize_command " $arg" 5535*735d6239SKiyoung Kim ;; 5536*735d6239SKiyoung Kim esac 5537*735d6239SKiyoung Kim continue 5538*735d6239SKiyoung Kim ;; 5539*735d6239SKiyoung Kim 5540*735d6239SKiyoung Kim -L*) 5541*735d6239SKiyoung Kim func_stripname "-L" '' "$arg" 5542*735d6239SKiyoung Kim if test -z "$func_stripname_result"; then 5543*735d6239SKiyoung Kim if test "$#" -gt 0; then 5544*735d6239SKiyoung Kim func_fatal_error "require no space between \`-L' and \`$1'" 5545*735d6239SKiyoung Kim else 5546*735d6239SKiyoung Kim func_fatal_error "need path for \`-L' option" 5547*735d6239SKiyoung Kim fi 5548*735d6239SKiyoung Kim fi 5549*735d6239SKiyoung Kim func_resolve_sysroot "$func_stripname_result" 5550*735d6239SKiyoung Kim dir=$func_resolve_sysroot_result 5551*735d6239SKiyoung Kim # We need an absolute path. 5552*735d6239SKiyoung Kim case $dir in 5553*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]*) ;; 5554*735d6239SKiyoung Kim *) 5555*735d6239SKiyoung Kim absdir=`cd "$dir" && pwd` 5556*735d6239SKiyoung Kim test -z "$absdir" && \ 5557*735d6239SKiyoung Kim func_fatal_error "cannot determine absolute directory name of \`$dir'" 5558*735d6239SKiyoung Kim dir="$absdir" 5559*735d6239SKiyoung Kim ;; 5560*735d6239SKiyoung Kim esac 5561*735d6239SKiyoung Kim case "$deplibs " in 5562*735d6239SKiyoung Kim *" -L$dir "* | *" $arg "*) 5563*735d6239SKiyoung Kim # Will only happen for absolute or sysroot arguments 5564*735d6239SKiyoung Kim ;; 5565*735d6239SKiyoung Kim *) 5566*735d6239SKiyoung Kim # Preserve sysroot, but never include relative directories 5567*735d6239SKiyoung Kim case $dir in 5568*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 5569*735d6239SKiyoung Kim *) func_append deplibs " -L$dir" ;; 5570*735d6239SKiyoung Kim esac 5571*735d6239SKiyoung Kim func_append lib_search_path " $dir" 5572*735d6239SKiyoung Kim ;; 5573*735d6239SKiyoung Kim esac 5574*735d6239SKiyoung Kim case $host in 5575*735d6239SKiyoung Kim *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5576*735d6239SKiyoung Kim testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5577*735d6239SKiyoung Kim case :$dllsearchpath: in 5578*735d6239SKiyoung Kim *":$dir:"*) ;; 5579*735d6239SKiyoung Kim ::) dllsearchpath=$dir;; 5580*735d6239SKiyoung Kim *) func_append dllsearchpath ":$dir";; 5581*735d6239SKiyoung Kim esac 5582*735d6239SKiyoung Kim case :$dllsearchpath: in 5583*735d6239SKiyoung Kim *":$testbindir:"*) ;; 5584*735d6239SKiyoung Kim ::) dllsearchpath=$testbindir;; 5585*735d6239SKiyoung Kim *) func_append dllsearchpath ":$testbindir";; 5586*735d6239SKiyoung Kim esac 5587*735d6239SKiyoung Kim ;; 5588*735d6239SKiyoung Kim esac 5589*735d6239SKiyoung Kim continue 5590*735d6239SKiyoung Kim ;; 5591*735d6239SKiyoung Kim 5592*735d6239SKiyoung Kim -l*) 5593*735d6239SKiyoung Kim if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5594*735d6239SKiyoung Kim case $host in 5595*735d6239SKiyoung Kim *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5596*735d6239SKiyoung Kim # These systems don't actually have a C or math library (as such) 5597*735d6239SKiyoung Kim continue 5598*735d6239SKiyoung Kim ;; 5599*735d6239SKiyoung Kim *-*-os2*) 5600*735d6239SKiyoung Kim # These systems don't actually have a C library (as such) 5601*735d6239SKiyoung Kim test "X$arg" = "X-lc" && continue 5602*735d6239SKiyoung Kim ;; 5603*735d6239SKiyoung Kim *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5604*735d6239SKiyoung Kim # Do not include libc due to us having libc/libc_r. 5605*735d6239SKiyoung Kim test "X$arg" = "X-lc" && continue 5606*735d6239SKiyoung Kim ;; 5607*735d6239SKiyoung Kim *-*-rhapsody* | *-*-darwin1.[012]) 5608*735d6239SKiyoung Kim # Rhapsody C and math libraries are in the System framework 5609*735d6239SKiyoung Kim func_append deplibs " System.ltframework" 5610*735d6239SKiyoung Kim continue 5611*735d6239SKiyoung Kim ;; 5612*735d6239SKiyoung Kim *-*-sco3.2v5* | *-*-sco5v6*) 5613*735d6239SKiyoung Kim # Causes problems with __ctype 5614*735d6239SKiyoung Kim test "X$arg" = "X-lc" && continue 5615*735d6239SKiyoung Kim ;; 5616*735d6239SKiyoung Kim *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5617*735d6239SKiyoung Kim # Compiler inserts libc in the correct place for threads to work 5618*735d6239SKiyoung Kim test "X$arg" = "X-lc" && continue 5619*735d6239SKiyoung Kim ;; 5620*735d6239SKiyoung Kim esac 5621*735d6239SKiyoung Kim elif test "X$arg" = "X-lc_r"; then 5622*735d6239SKiyoung Kim case $host in 5623*735d6239SKiyoung Kim *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5624*735d6239SKiyoung Kim # Do not include libc_r directly, use -pthread flag. 5625*735d6239SKiyoung Kim continue 5626*735d6239SKiyoung Kim ;; 5627*735d6239SKiyoung Kim esac 5628*735d6239SKiyoung Kim fi 5629*735d6239SKiyoung Kim func_append deplibs " $arg" 5630*735d6239SKiyoung Kim continue 5631*735d6239SKiyoung Kim ;; 5632*735d6239SKiyoung Kim 5633*735d6239SKiyoung Kim -module) 5634*735d6239SKiyoung Kim module=yes 5635*735d6239SKiyoung Kim continue 5636*735d6239SKiyoung Kim ;; 5637*735d6239SKiyoung Kim 5638*735d6239SKiyoung Kim # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5639*735d6239SKiyoung Kim # classes, name mangling, and exception handling. 5640*735d6239SKiyoung Kim # Darwin uses the -arch flag to determine output architecture. 5641*735d6239SKiyoung Kim -model|-arch|-isysroot|--sysroot) 5642*735d6239SKiyoung Kim func_append compiler_flags " $arg" 5643*735d6239SKiyoung Kim func_append compile_command " $arg" 5644*735d6239SKiyoung Kim func_append finalize_command " $arg" 5645*735d6239SKiyoung Kim prev=xcompiler 5646*735d6239SKiyoung Kim continue 5647*735d6239SKiyoung Kim ;; 5648*735d6239SKiyoung Kim 5649*735d6239SKiyoung Kim -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 5650*735d6239SKiyoung Kim func_append compiler_flags " $arg" 5651*735d6239SKiyoung Kim func_append compile_command " $arg" 5652*735d6239SKiyoung Kim func_append finalize_command " $arg" 5653*735d6239SKiyoung Kim case "$new_inherited_linker_flags " in 5654*735d6239SKiyoung Kim *" $arg "*) ;; 5655*735d6239SKiyoung Kim * ) func_append new_inherited_linker_flags " $arg" ;; 5656*735d6239SKiyoung Kim esac 5657*735d6239SKiyoung Kim continue 5658*735d6239SKiyoung Kim ;; 5659*735d6239SKiyoung Kim 5660*735d6239SKiyoung Kim -multi_module) 5661*735d6239SKiyoung Kim single_module="${wl}-multi_module" 5662*735d6239SKiyoung Kim continue 5663*735d6239SKiyoung Kim ;; 5664*735d6239SKiyoung Kim 5665*735d6239SKiyoung Kim -no-fast-install) 5666*735d6239SKiyoung Kim fast_install=no 5667*735d6239SKiyoung Kim continue 5668*735d6239SKiyoung Kim ;; 5669*735d6239SKiyoung Kim 5670*735d6239SKiyoung Kim -no-install) 5671*735d6239SKiyoung Kim case $host in 5672*735d6239SKiyoung Kim *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5673*735d6239SKiyoung Kim # The PATH hackery in wrapper scripts is required on Windows 5674*735d6239SKiyoung Kim # and Darwin in order for the loader to find any dlls it needs. 5675*735d6239SKiyoung Kim func_warning "\`-no-install' is ignored for $host" 5676*735d6239SKiyoung Kim func_warning "assuming \`-no-fast-install' instead" 5677*735d6239SKiyoung Kim fast_install=no 5678*735d6239SKiyoung Kim ;; 5679*735d6239SKiyoung Kim *) no_install=yes ;; 5680*735d6239SKiyoung Kim esac 5681*735d6239SKiyoung Kim continue 5682*735d6239SKiyoung Kim ;; 5683*735d6239SKiyoung Kim 5684*735d6239SKiyoung Kim -no-undefined) 5685*735d6239SKiyoung Kim allow_undefined=no 5686*735d6239SKiyoung Kim continue 5687*735d6239SKiyoung Kim ;; 5688*735d6239SKiyoung Kim 5689*735d6239SKiyoung Kim -objectlist) 5690*735d6239SKiyoung Kim prev=objectlist 5691*735d6239SKiyoung Kim continue 5692*735d6239SKiyoung Kim ;; 5693*735d6239SKiyoung Kim 5694*735d6239SKiyoung Kim -o) prev=output ;; 5695*735d6239SKiyoung Kim 5696*735d6239SKiyoung Kim -precious-files-regex) 5697*735d6239SKiyoung Kim prev=precious_regex 5698*735d6239SKiyoung Kim continue 5699*735d6239SKiyoung Kim ;; 5700*735d6239SKiyoung Kim 5701*735d6239SKiyoung Kim -release) 5702*735d6239SKiyoung Kim prev=release 5703*735d6239SKiyoung Kim continue 5704*735d6239SKiyoung Kim ;; 5705*735d6239SKiyoung Kim 5706*735d6239SKiyoung Kim -rpath) 5707*735d6239SKiyoung Kim prev=rpath 5708*735d6239SKiyoung Kim continue 5709*735d6239SKiyoung Kim ;; 5710*735d6239SKiyoung Kim 5711*735d6239SKiyoung Kim -R) 5712*735d6239SKiyoung Kim prev=xrpath 5713*735d6239SKiyoung Kim continue 5714*735d6239SKiyoung Kim ;; 5715*735d6239SKiyoung Kim 5716*735d6239SKiyoung Kim -R*) 5717*735d6239SKiyoung Kim func_stripname '-R' '' "$arg" 5718*735d6239SKiyoung Kim dir=$func_stripname_result 5719*735d6239SKiyoung Kim # We need an absolute path. 5720*735d6239SKiyoung Kim case $dir in 5721*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]*) ;; 5722*735d6239SKiyoung Kim =*) 5723*735d6239SKiyoung Kim func_stripname '=' '' "$dir" 5724*735d6239SKiyoung Kim dir=$lt_sysroot$func_stripname_result 5725*735d6239SKiyoung Kim ;; 5726*735d6239SKiyoung Kim *) 5727*735d6239SKiyoung Kim func_fatal_error "only absolute run-paths are allowed" 5728*735d6239SKiyoung Kim ;; 5729*735d6239SKiyoung Kim esac 5730*735d6239SKiyoung Kim case "$xrpath " in 5731*735d6239SKiyoung Kim *" $dir "*) ;; 5732*735d6239SKiyoung Kim *) func_append xrpath " $dir" ;; 5733*735d6239SKiyoung Kim esac 5734*735d6239SKiyoung Kim continue 5735*735d6239SKiyoung Kim ;; 5736*735d6239SKiyoung Kim 5737*735d6239SKiyoung Kim -shared) 5738*735d6239SKiyoung Kim # The effects of -shared are defined in a previous loop. 5739*735d6239SKiyoung Kim continue 5740*735d6239SKiyoung Kim ;; 5741*735d6239SKiyoung Kim 5742*735d6239SKiyoung Kim -shrext) 5743*735d6239SKiyoung Kim prev=shrext 5744*735d6239SKiyoung Kim continue 5745*735d6239SKiyoung Kim ;; 5746*735d6239SKiyoung Kim 5747*735d6239SKiyoung Kim -static | -static-libtool-libs) 5748*735d6239SKiyoung Kim # The effects of -static are defined in a previous loop. 5749*735d6239SKiyoung Kim # We used to do the same as -all-static on platforms that 5750*735d6239SKiyoung Kim # didn't have a PIC flag, but the assumption that the effects 5751*735d6239SKiyoung Kim # would be equivalent was wrong. It would break on at least 5752*735d6239SKiyoung Kim # Digital Unix and AIX. 5753*735d6239SKiyoung Kim continue 5754*735d6239SKiyoung Kim ;; 5755*735d6239SKiyoung Kim 5756*735d6239SKiyoung Kim -thread-safe) 5757*735d6239SKiyoung Kim thread_safe=yes 5758*735d6239SKiyoung Kim continue 5759*735d6239SKiyoung Kim ;; 5760*735d6239SKiyoung Kim 5761*735d6239SKiyoung Kim -version-info) 5762*735d6239SKiyoung Kim prev=vinfo 5763*735d6239SKiyoung Kim continue 5764*735d6239SKiyoung Kim ;; 5765*735d6239SKiyoung Kim 5766*735d6239SKiyoung Kim -version-number) 5767*735d6239SKiyoung Kim prev=vinfo 5768*735d6239SKiyoung Kim vinfo_number=yes 5769*735d6239SKiyoung Kim continue 5770*735d6239SKiyoung Kim ;; 5771*735d6239SKiyoung Kim 5772*735d6239SKiyoung Kim -weak) 5773*735d6239SKiyoung Kim prev=weak 5774*735d6239SKiyoung Kim continue 5775*735d6239SKiyoung Kim ;; 5776*735d6239SKiyoung Kim 5777*735d6239SKiyoung Kim -Wc,*) 5778*735d6239SKiyoung Kim func_stripname '-Wc,' '' "$arg" 5779*735d6239SKiyoung Kim args=$func_stripname_result 5780*735d6239SKiyoung Kim arg= 5781*735d6239SKiyoung Kim save_ifs="$IFS"; IFS=',' 5782*735d6239SKiyoung Kim for flag in $args; do 5783*735d6239SKiyoung Kim IFS="$save_ifs" 5784*735d6239SKiyoung Kim func_quote_for_eval "$flag" 5785*735d6239SKiyoung Kim func_append arg " $func_quote_for_eval_result" 5786*735d6239SKiyoung Kim func_append compiler_flags " $func_quote_for_eval_result" 5787*735d6239SKiyoung Kim done 5788*735d6239SKiyoung Kim IFS="$save_ifs" 5789*735d6239SKiyoung Kim func_stripname ' ' '' "$arg" 5790*735d6239SKiyoung Kim arg=$func_stripname_result 5791*735d6239SKiyoung Kim ;; 5792*735d6239SKiyoung Kim 5793*735d6239SKiyoung Kim -Wl,*) 5794*735d6239SKiyoung Kim func_stripname '-Wl,' '' "$arg" 5795*735d6239SKiyoung Kim args=$func_stripname_result 5796*735d6239SKiyoung Kim arg= 5797*735d6239SKiyoung Kim save_ifs="$IFS"; IFS=',' 5798*735d6239SKiyoung Kim for flag in $args; do 5799*735d6239SKiyoung Kim IFS="$save_ifs" 5800*735d6239SKiyoung Kim func_quote_for_eval "$flag" 5801*735d6239SKiyoung Kim func_append arg " $wl$func_quote_for_eval_result" 5802*735d6239SKiyoung Kim func_append compiler_flags " $wl$func_quote_for_eval_result" 5803*735d6239SKiyoung Kim func_append linker_flags " $func_quote_for_eval_result" 5804*735d6239SKiyoung Kim done 5805*735d6239SKiyoung Kim IFS="$save_ifs" 5806*735d6239SKiyoung Kim func_stripname ' ' '' "$arg" 5807*735d6239SKiyoung Kim arg=$func_stripname_result 5808*735d6239SKiyoung Kim ;; 5809*735d6239SKiyoung Kim 5810*735d6239SKiyoung Kim -Xcompiler) 5811*735d6239SKiyoung Kim prev=xcompiler 5812*735d6239SKiyoung Kim continue 5813*735d6239SKiyoung Kim ;; 5814*735d6239SKiyoung Kim 5815*735d6239SKiyoung Kim -Xlinker) 5816*735d6239SKiyoung Kim prev=xlinker 5817*735d6239SKiyoung Kim continue 5818*735d6239SKiyoung Kim ;; 5819*735d6239SKiyoung Kim 5820*735d6239SKiyoung Kim -XCClinker) 5821*735d6239SKiyoung Kim prev=xcclinker 5822*735d6239SKiyoung Kim continue 5823*735d6239SKiyoung Kim ;; 5824*735d6239SKiyoung Kim 5825*735d6239SKiyoung Kim # -msg_* for osf cc 5826*735d6239SKiyoung Kim -msg_*) 5827*735d6239SKiyoung Kim func_quote_for_eval "$arg" 5828*735d6239SKiyoung Kim arg="$func_quote_for_eval_result" 5829*735d6239SKiyoung Kim ;; 5830*735d6239SKiyoung Kim 5831*735d6239SKiyoung Kim # Flags to be passed through unchanged, with rationale: 5832*735d6239SKiyoung Kim # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5833*735d6239SKiyoung Kim # -r[0-9][0-9]* specify processor for the SGI compiler 5834*735d6239SKiyoung Kim # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5835*735d6239SKiyoung Kim # +DA*, +DD* enable 64-bit mode for the HP compiler 5836*735d6239SKiyoung Kim # -q* compiler args for the IBM compiler 5837*735d6239SKiyoung Kim # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5838*735d6239SKiyoung Kim # -F/path path to uninstalled frameworks, gcc on darwin 5839*735d6239SKiyoung Kim # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5840*735d6239SKiyoung Kim # @file GCC response files 5841*735d6239SKiyoung Kim # -tp=* Portland pgcc target processor selection 5842*735d6239SKiyoung Kim # --sysroot=* for sysroot support 5843*735d6239SKiyoung Kim # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5844*735d6239SKiyoung Kim -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5845*735d6239SKiyoung Kim -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 5846*735d6239SKiyoung Kim -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5847*735d6239SKiyoung Kim func_quote_for_eval "$arg" 5848*735d6239SKiyoung Kim arg="$func_quote_for_eval_result" 5849*735d6239SKiyoung Kim func_append compile_command " $arg" 5850*735d6239SKiyoung Kim func_append finalize_command " $arg" 5851*735d6239SKiyoung Kim func_append compiler_flags " $arg" 5852*735d6239SKiyoung Kim continue 5853*735d6239SKiyoung Kim ;; 5854*735d6239SKiyoung Kim 5855*735d6239SKiyoung Kim # Some other compiler flag. 5856*735d6239SKiyoung Kim -* | +*) 5857*735d6239SKiyoung Kim func_quote_for_eval "$arg" 5858*735d6239SKiyoung Kim arg="$func_quote_for_eval_result" 5859*735d6239SKiyoung Kim ;; 5860*735d6239SKiyoung Kim 5861*735d6239SKiyoung Kim *.$objext) 5862*735d6239SKiyoung Kim # A standard object. 5863*735d6239SKiyoung Kim func_append objs " $arg" 5864*735d6239SKiyoung Kim ;; 5865*735d6239SKiyoung Kim 5866*735d6239SKiyoung Kim *.lo) 5867*735d6239SKiyoung Kim # A libtool-controlled object. 5868*735d6239SKiyoung Kim 5869*735d6239SKiyoung Kim # Check to see that this really is a libtool object. 5870*735d6239SKiyoung Kim if func_lalib_unsafe_p "$arg"; then 5871*735d6239SKiyoung Kim pic_object= 5872*735d6239SKiyoung Kim non_pic_object= 5873*735d6239SKiyoung Kim 5874*735d6239SKiyoung Kim # Read the .lo file 5875*735d6239SKiyoung Kim func_source "$arg" 5876*735d6239SKiyoung Kim 5877*735d6239SKiyoung Kim if test -z "$pic_object" || 5878*735d6239SKiyoung Kim test -z "$non_pic_object" || 5879*735d6239SKiyoung Kim test "$pic_object" = none && 5880*735d6239SKiyoung Kim test "$non_pic_object" = none; then 5881*735d6239SKiyoung Kim func_fatal_error "cannot find name of object for \`$arg'" 5882*735d6239SKiyoung Kim fi 5883*735d6239SKiyoung Kim 5884*735d6239SKiyoung Kim # Extract subdirectory from the argument. 5885*735d6239SKiyoung Kim func_dirname "$arg" "/" "" 5886*735d6239SKiyoung Kim xdir="$func_dirname_result" 5887*735d6239SKiyoung Kim 5888*735d6239SKiyoung Kim if test "$pic_object" != none; then 5889*735d6239SKiyoung Kim # Prepend the subdirectory the object is found in. 5890*735d6239SKiyoung Kim pic_object="$xdir$pic_object" 5891*735d6239SKiyoung Kim 5892*735d6239SKiyoung Kim if test "$prev" = dlfiles; then 5893*735d6239SKiyoung Kim if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5894*735d6239SKiyoung Kim func_append dlfiles " $pic_object" 5895*735d6239SKiyoung Kim prev= 5896*735d6239SKiyoung Kim continue 5897*735d6239SKiyoung Kim else 5898*735d6239SKiyoung Kim # If libtool objects are unsupported, then we need to preload. 5899*735d6239SKiyoung Kim prev=dlprefiles 5900*735d6239SKiyoung Kim fi 5901*735d6239SKiyoung Kim fi 5902*735d6239SKiyoung Kim 5903*735d6239SKiyoung Kim # CHECK ME: I think I busted this. -Ossama 5904*735d6239SKiyoung Kim if test "$prev" = dlprefiles; then 5905*735d6239SKiyoung Kim # Preload the old-style object. 5906*735d6239SKiyoung Kim func_append dlprefiles " $pic_object" 5907*735d6239SKiyoung Kim prev= 5908*735d6239SKiyoung Kim fi 5909*735d6239SKiyoung Kim 5910*735d6239SKiyoung Kim # A PIC object. 5911*735d6239SKiyoung Kim func_append libobjs " $pic_object" 5912*735d6239SKiyoung Kim arg="$pic_object" 5913*735d6239SKiyoung Kim fi 5914*735d6239SKiyoung Kim 5915*735d6239SKiyoung Kim # Non-PIC object. 5916*735d6239SKiyoung Kim if test "$non_pic_object" != none; then 5917*735d6239SKiyoung Kim # Prepend the subdirectory the object is found in. 5918*735d6239SKiyoung Kim non_pic_object="$xdir$non_pic_object" 5919*735d6239SKiyoung Kim 5920*735d6239SKiyoung Kim # A standard non-PIC object 5921*735d6239SKiyoung Kim func_append non_pic_objects " $non_pic_object" 5922*735d6239SKiyoung Kim if test -z "$pic_object" || test "$pic_object" = none ; then 5923*735d6239SKiyoung Kim arg="$non_pic_object" 5924*735d6239SKiyoung Kim fi 5925*735d6239SKiyoung Kim else 5926*735d6239SKiyoung Kim # If the PIC object exists, use it instead. 5927*735d6239SKiyoung Kim # $xdir was prepended to $pic_object above. 5928*735d6239SKiyoung Kim non_pic_object="$pic_object" 5929*735d6239SKiyoung Kim func_append non_pic_objects " $non_pic_object" 5930*735d6239SKiyoung Kim fi 5931*735d6239SKiyoung Kim else 5932*735d6239SKiyoung Kim # Only an error if not doing a dry-run. 5933*735d6239SKiyoung Kim if $opt_dry_run; then 5934*735d6239SKiyoung Kim # Extract subdirectory from the argument. 5935*735d6239SKiyoung Kim func_dirname "$arg" "/" "" 5936*735d6239SKiyoung Kim xdir="$func_dirname_result" 5937*735d6239SKiyoung Kim 5938*735d6239SKiyoung Kim func_lo2o "$arg" 5939*735d6239SKiyoung Kim pic_object=$xdir$objdir/$func_lo2o_result 5940*735d6239SKiyoung Kim non_pic_object=$xdir$func_lo2o_result 5941*735d6239SKiyoung Kim func_append libobjs " $pic_object" 5942*735d6239SKiyoung Kim func_append non_pic_objects " $non_pic_object" 5943*735d6239SKiyoung Kim else 5944*735d6239SKiyoung Kim func_fatal_error "\`$arg' is not a valid libtool object" 5945*735d6239SKiyoung Kim fi 5946*735d6239SKiyoung Kim fi 5947*735d6239SKiyoung Kim ;; 5948*735d6239SKiyoung Kim 5949*735d6239SKiyoung Kim *.$libext) 5950*735d6239SKiyoung Kim # An archive. 5951*735d6239SKiyoung Kim func_append deplibs " $arg" 5952*735d6239SKiyoung Kim func_append old_deplibs " $arg" 5953*735d6239SKiyoung Kim continue 5954*735d6239SKiyoung Kim ;; 5955*735d6239SKiyoung Kim 5956*735d6239SKiyoung Kim *.la) 5957*735d6239SKiyoung Kim # A libtool-controlled library. 5958*735d6239SKiyoung Kim 5959*735d6239SKiyoung Kim func_resolve_sysroot "$arg" 5960*735d6239SKiyoung Kim if test "$prev" = dlfiles; then 5961*735d6239SKiyoung Kim # This library was specified with -dlopen. 5962*735d6239SKiyoung Kim func_append dlfiles " $func_resolve_sysroot_result" 5963*735d6239SKiyoung Kim prev= 5964*735d6239SKiyoung Kim elif test "$prev" = dlprefiles; then 5965*735d6239SKiyoung Kim # The library was specified with -dlpreopen. 5966*735d6239SKiyoung Kim func_append dlprefiles " $func_resolve_sysroot_result" 5967*735d6239SKiyoung Kim prev= 5968*735d6239SKiyoung Kim else 5969*735d6239SKiyoung Kim func_append deplibs " $func_resolve_sysroot_result" 5970*735d6239SKiyoung Kim fi 5971*735d6239SKiyoung Kim continue 5972*735d6239SKiyoung Kim ;; 5973*735d6239SKiyoung Kim 5974*735d6239SKiyoung Kim # Some other compiler argument. 5975*735d6239SKiyoung Kim *) 5976*735d6239SKiyoung Kim # Unknown arguments in both finalize_command and compile_command need 5977*735d6239SKiyoung Kim # to be aesthetically quoted because they are evaled later. 5978*735d6239SKiyoung Kim func_quote_for_eval "$arg" 5979*735d6239SKiyoung Kim arg="$func_quote_for_eval_result" 5980*735d6239SKiyoung Kim ;; 5981*735d6239SKiyoung Kim esac # arg 5982*735d6239SKiyoung Kim 5983*735d6239SKiyoung Kim # Now actually substitute the argument into the commands. 5984*735d6239SKiyoung Kim if test -n "$arg"; then 5985*735d6239SKiyoung Kim func_append compile_command " $arg" 5986*735d6239SKiyoung Kim func_append finalize_command " $arg" 5987*735d6239SKiyoung Kim fi 5988*735d6239SKiyoung Kim done # argument parsing loop 5989*735d6239SKiyoung Kim 5990*735d6239SKiyoung Kim if test "$module" = yes ; then 5991*735d6239SKiyoung Kim # [Mandriva] dropping ld option "--no-undefined" which is wrong for plugins 5992*735d6239SKiyoung Kim linker_flags=`$ECHO "X $linker_flags" | $Xsed -e 's/ --no-undefined//'` 5993*735d6239SKiyoung Kim compiler_flags=`$ECHO "X $compiler_flags" | $Xsed -e 's/ -Wl,--no-undefined//'` 5994*735d6239SKiyoung Kim fi 5995*735d6239SKiyoung Kim 5996*735d6239SKiyoung Kim test -n "$prev" && \ 5997*735d6239SKiyoung Kim func_fatal_help "the \`$prevarg' option requires an argument" 5998*735d6239SKiyoung Kim 5999*735d6239SKiyoung Kim if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6000*735d6239SKiyoung Kim eval arg=\"$export_dynamic_flag_spec\" 6001*735d6239SKiyoung Kim func_append compile_command " $arg" 6002*735d6239SKiyoung Kim func_append finalize_command " $arg" 6003*735d6239SKiyoung Kim fi 6004*735d6239SKiyoung Kim 6005*735d6239SKiyoung Kim oldlibs= 6006*735d6239SKiyoung Kim # calculate the name of the file, without its directory 6007*735d6239SKiyoung Kim func_basename "$output" 6008*735d6239SKiyoung Kim outputname="$func_basename_result" 6009*735d6239SKiyoung Kim libobjs_save="$libobjs" 6010*735d6239SKiyoung Kim 6011*735d6239SKiyoung Kim if test -n "$shlibpath_var"; then 6012*735d6239SKiyoung Kim # get the directories listed in $shlibpath_var 6013*735d6239SKiyoung Kim eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6014*735d6239SKiyoung Kim else 6015*735d6239SKiyoung Kim shlib_search_path= 6016*735d6239SKiyoung Kim fi 6017*735d6239SKiyoung Kim eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6018*735d6239SKiyoung Kim eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6019*735d6239SKiyoung Kim 6020*735d6239SKiyoung Kim func_dirname "$output" "/" "" 6021*735d6239SKiyoung Kim output_objdir="$func_dirname_result$objdir" 6022*735d6239SKiyoung Kim func_to_tool_file "$output_objdir/" 6023*735d6239SKiyoung Kim tool_output_objdir=$func_to_tool_file_result 6024*735d6239SKiyoung Kim # Create the object directory. 6025*735d6239SKiyoung Kim func_mkdir_p "$output_objdir" 6026*735d6239SKiyoung Kim 6027*735d6239SKiyoung Kim # Determine the type of output 6028*735d6239SKiyoung Kim case $output in 6029*735d6239SKiyoung Kim "") 6030*735d6239SKiyoung Kim func_fatal_help "you must specify an output file" 6031*735d6239SKiyoung Kim ;; 6032*735d6239SKiyoung Kim *.$libext) linkmode=oldlib ;; 6033*735d6239SKiyoung Kim *.lo | *.$objext) linkmode=obj ;; 6034*735d6239SKiyoung Kim *.la) linkmode=lib ;; 6035*735d6239SKiyoung Kim *) linkmode=prog ;; # Anything else should be a program. 6036*735d6239SKiyoung Kim esac 6037*735d6239SKiyoung Kim 6038*735d6239SKiyoung Kim specialdeplibs= 6039*735d6239SKiyoung Kim 6040*735d6239SKiyoung Kim libs= 6041*735d6239SKiyoung Kim # Find all interdependent deplibs by searching for libraries 6042*735d6239SKiyoung Kim # that are linked more than once (e.g. -la -lb -la) 6043*735d6239SKiyoung Kim for deplib in $deplibs; do 6044*735d6239SKiyoung Kim if $opt_preserve_dup_deps ; then 6045*735d6239SKiyoung Kim case "$libs " in 6046*735d6239SKiyoung Kim *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6047*735d6239SKiyoung Kim esac 6048*735d6239SKiyoung Kim fi 6049*735d6239SKiyoung Kim func_append libs " $deplib" 6050*735d6239SKiyoung Kim done 6051*735d6239SKiyoung Kim 6052*735d6239SKiyoung Kim if test "$linkmode" = lib; then 6053*735d6239SKiyoung Kim libs="$predeps $libs $compiler_lib_search_path $postdeps" 6054*735d6239SKiyoung Kim 6055*735d6239SKiyoung Kim # Compute libraries that are listed more than once in $predeps 6056*735d6239SKiyoung Kim # $postdeps and mark them as special (i.e., whose duplicates are 6057*735d6239SKiyoung Kim # not to be eliminated). 6058*735d6239SKiyoung Kim pre_post_deps= 6059*735d6239SKiyoung Kim if $opt_duplicate_compiler_generated_deps; then 6060*735d6239SKiyoung Kim for pre_post_dep in $predeps $postdeps; do 6061*735d6239SKiyoung Kim case "$pre_post_deps " in 6062*735d6239SKiyoung Kim *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6063*735d6239SKiyoung Kim esac 6064*735d6239SKiyoung Kim func_append pre_post_deps " $pre_post_dep" 6065*735d6239SKiyoung Kim done 6066*735d6239SKiyoung Kim fi 6067*735d6239SKiyoung Kim pre_post_deps= 6068*735d6239SKiyoung Kim fi 6069*735d6239SKiyoung Kim 6070*735d6239SKiyoung Kim deplibs= 6071*735d6239SKiyoung Kim newdependency_libs= 6072*735d6239SKiyoung Kim newlib_search_path= 6073*735d6239SKiyoung Kim need_relink=no # whether we're linking any uninstalled libtool libraries 6074*735d6239SKiyoung Kim notinst_deplibs= # not-installed libtool libraries 6075*735d6239SKiyoung Kim notinst_path= # paths that contain not-installed libtool libraries 6076*735d6239SKiyoung Kim 6077*735d6239SKiyoung Kim case $linkmode in 6078*735d6239SKiyoung Kim lib) 6079*735d6239SKiyoung Kim passes="conv dlpreopen link" 6080*735d6239SKiyoung Kim for file in $dlfiles $dlprefiles; do 6081*735d6239SKiyoung Kim case $file in 6082*735d6239SKiyoung Kim *.la) ;; 6083*735d6239SKiyoung Kim *) 6084*735d6239SKiyoung Kim func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6085*735d6239SKiyoung Kim ;; 6086*735d6239SKiyoung Kim esac 6087*735d6239SKiyoung Kim done 6088*735d6239SKiyoung Kim ;; 6089*735d6239SKiyoung Kim prog) 6090*735d6239SKiyoung Kim compile_deplibs= 6091*735d6239SKiyoung Kim finalize_deplibs= 6092*735d6239SKiyoung Kim alldeplibs=no 6093*735d6239SKiyoung Kim newdlfiles= 6094*735d6239SKiyoung Kim newdlprefiles= 6095*735d6239SKiyoung Kim passes="conv scan dlopen dlpreopen link" 6096*735d6239SKiyoung Kim ;; 6097*735d6239SKiyoung Kim *) passes="conv" 6098*735d6239SKiyoung Kim ;; 6099*735d6239SKiyoung Kim esac 6100*735d6239SKiyoung Kim 6101*735d6239SKiyoung Kim for pass in $passes; do 6102*735d6239SKiyoung Kim # The preopen pass in lib mode reverses $deplibs; put it back here 6103*735d6239SKiyoung Kim # so that -L comes before libs that need it for instance... 6104*735d6239SKiyoung Kim if test "$linkmode,$pass" = "lib,link"; then 6105*735d6239SKiyoung Kim ## FIXME: Find the place where the list is rebuilt in the wrong 6106*735d6239SKiyoung Kim ## order, and fix it there properly 6107*735d6239SKiyoung Kim tmp_deplibs= 6108*735d6239SKiyoung Kim for deplib in $deplibs; do 6109*735d6239SKiyoung Kim tmp_deplibs="$deplib $tmp_deplibs" 6110*735d6239SKiyoung Kim done 6111*735d6239SKiyoung Kim deplibs="$tmp_deplibs" 6112*735d6239SKiyoung Kim fi 6113*735d6239SKiyoung Kim 6114*735d6239SKiyoung Kim if test "$linkmode,$pass" = "lib,link" || 6115*735d6239SKiyoung Kim test "$linkmode,$pass" = "prog,scan"; then 6116*735d6239SKiyoung Kim libs="$deplibs" 6117*735d6239SKiyoung Kim deplibs= 6118*735d6239SKiyoung Kim fi 6119*735d6239SKiyoung Kim if test "$linkmode" = prog; then 6120*735d6239SKiyoung Kim case $pass in 6121*735d6239SKiyoung Kim dlopen) libs="$dlfiles" ;; 6122*735d6239SKiyoung Kim dlpreopen) libs="$dlprefiles" ;; 6123*735d6239SKiyoung Kim link) 6124*735d6239SKiyoung Kim libs="$deplibs %DEPLIBS%" 6125*735d6239SKiyoung Kim test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" 6126*735d6239SKiyoung Kim ;; 6127*735d6239SKiyoung Kim esac 6128*735d6239SKiyoung Kim fi 6129*735d6239SKiyoung Kim if test "$linkmode,$pass" = "lib,dlpreopen"; then 6130*735d6239SKiyoung Kim # Collect and forward deplibs of preopened libtool libs 6131*735d6239SKiyoung Kim for lib in $dlprefiles; do 6132*735d6239SKiyoung Kim # Ignore non-libtool-libs 6133*735d6239SKiyoung Kim dependency_libs= 6134*735d6239SKiyoung Kim func_resolve_sysroot "$lib" 6135*735d6239SKiyoung Kim case $lib in 6136*735d6239SKiyoung Kim *.la) func_source "$func_resolve_sysroot_result" ;; 6137*735d6239SKiyoung Kim esac 6138*735d6239SKiyoung Kim 6139*735d6239SKiyoung Kim # Collect preopened libtool deplibs, except any this library 6140*735d6239SKiyoung Kim # has declared as weak libs 6141*735d6239SKiyoung Kim for deplib in $dependency_libs; do 6142*735d6239SKiyoung Kim func_basename "$deplib" 6143*735d6239SKiyoung Kim deplib_base=$func_basename_result 6144*735d6239SKiyoung Kim case " $weak_libs " in 6145*735d6239SKiyoung Kim *" $deplib_base "*) ;; 6146*735d6239SKiyoung Kim *) func_append deplibs " $deplib" ;; 6147*735d6239SKiyoung Kim esac 6148*735d6239SKiyoung Kim done 6149*735d6239SKiyoung Kim done 6150*735d6239SKiyoung Kim libs="$dlprefiles" 6151*735d6239SKiyoung Kim fi 6152*735d6239SKiyoung Kim if test "$pass" = dlopen; then 6153*735d6239SKiyoung Kim # Collect dlpreopened libraries 6154*735d6239SKiyoung Kim save_deplibs="$deplibs" 6155*735d6239SKiyoung Kim deplibs= 6156*735d6239SKiyoung Kim fi 6157*735d6239SKiyoung Kim 6158*735d6239SKiyoung Kim for deplib in $libs; do 6159*735d6239SKiyoung Kim lib= 6160*735d6239SKiyoung Kim found=no 6161*735d6239SKiyoung Kim case $deplib in 6162*735d6239SKiyoung Kim -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 6163*735d6239SKiyoung Kim if test "$linkmode,$pass" = "prog,link"; then 6164*735d6239SKiyoung Kim compile_deplibs="$deplib $compile_deplibs" 6165*735d6239SKiyoung Kim finalize_deplibs="$deplib $finalize_deplibs" 6166*735d6239SKiyoung Kim else 6167*735d6239SKiyoung Kim func_append compiler_flags " $deplib" 6168*735d6239SKiyoung Kim if test "$linkmode" = lib ; then 6169*735d6239SKiyoung Kim case "$new_inherited_linker_flags " in 6170*735d6239SKiyoung Kim *" $deplib "*) ;; 6171*735d6239SKiyoung Kim * ) func_append new_inherited_linker_flags " $deplib" ;; 6172*735d6239SKiyoung Kim esac 6173*735d6239SKiyoung Kim fi 6174*735d6239SKiyoung Kim fi 6175*735d6239SKiyoung Kim continue 6176*735d6239SKiyoung Kim ;; 6177*735d6239SKiyoung Kim -l*) 6178*735d6239SKiyoung Kim if test "$linkmode" != lib && test "$linkmode" != prog; then 6179*735d6239SKiyoung Kim func_warning "\`-l' is ignored for archives/objects" 6180*735d6239SKiyoung Kim continue 6181*735d6239SKiyoung Kim fi 6182*735d6239SKiyoung Kim func_stripname '-l' '' "$deplib" 6183*735d6239SKiyoung Kim name=$func_stripname_result 6184*735d6239SKiyoung Kim if test "$linkmode" = lib; then 6185*735d6239SKiyoung Kim searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6186*735d6239SKiyoung Kim else 6187*735d6239SKiyoung Kim searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6188*735d6239SKiyoung Kim fi 6189*735d6239SKiyoung Kim for searchdir in $searchdirs; do 6190*735d6239SKiyoung Kim for search_ext in .la $std_shrext .so .a; do 6191*735d6239SKiyoung Kim # Search the libtool library 6192*735d6239SKiyoung Kim lib="$searchdir/lib${name}${search_ext}" 6193*735d6239SKiyoung Kim if test -f "$lib"; then 6194*735d6239SKiyoung Kim if test "$search_ext" = ".la"; then 6195*735d6239SKiyoung Kim found=yes 6196*735d6239SKiyoung Kim else 6197*735d6239SKiyoung Kim found=no 6198*735d6239SKiyoung Kim fi 6199*735d6239SKiyoung Kim break 2 6200*735d6239SKiyoung Kim fi 6201*735d6239SKiyoung Kim done 6202*735d6239SKiyoung Kim done 6203*735d6239SKiyoung Kim if test "$found" != yes; then 6204*735d6239SKiyoung Kim # deplib doesn't seem to be a libtool library 6205*735d6239SKiyoung Kim if test "$linkmode,$pass" = "prog,link"; then 6206*735d6239SKiyoung Kim compile_deplibs="$deplib $compile_deplibs" 6207*735d6239SKiyoung Kim finalize_deplibs="$deplib $finalize_deplibs" 6208*735d6239SKiyoung Kim else 6209*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6210*735d6239SKiyoung Kim test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6211*735d6239SKiyoung Kim fi 6212*735d6239SKiyoung Kim continue 6213*735d6239SKiyoung Kim else # deplib is a libtool library 6214*735d6239SKiyoung Kim # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6215*735d6239SKiyoung Kim # We need to do some special things here, and not later. 6216*735d6239SKiyoung Kim if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6217*735d6239SKiyoung Kim case " $predeps $postdeps " in 6218*735d6239SKiyoung Kim *" $deplib "*) 6219*735d6239SKiyoung Kim if func_lalib_p "$lib"; then 6220*735d6239SKiyoung Kim library_names= 6221*735d6239SKiyoung Kim old_library= 6222*735d6239SKiyoung Kim func_source "$lib" 6223*735d6239SKiyoung Kim for l in $old_library $library_names; do 6224*735d6239SKiyoung Kim ll="$l" 6225*735d6239SKiyoung Kim done 6226*735d6239SKiyoung Kim if test "X$ll" = "X$old_library" ; then # only static version available 6227*735d6239SKiyoung Kim found=no 6228*735d6239SKiyoung Kim func_dirname "$lib" "" "." 6229*735d6239SKiyoung Kim ladir="$func_dirname_result" 6230*735d6239SKiyoung Kim lib=$ladir/$old_library 6231*735d6239SKiyoung Kim if test "$linkmode,$pass" = "prog,link"; then 6232*735d6239SKiyoung Kim compile_deplibs="$deplib $compile_deplibs" 6233*735d6239SKiyoung Kim finalize_deplibs="$deplib $finalize_deplibs" 6234*735d6239SKiyoung Kim else 6235*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6236*735d6239SKiyoung Kim test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6237*735d6239SKiyoung Kim fi 6238*735d6239SKiyoung Kim continue 6239*735d6239SKiyoung Kim fi 6240*735d6239SKiyoung Kim fi 6241*735d6239SKiyoung Kim ;; 6242*735d6239SKiyoung Kim *) ;; 6243*735d6239SKiyoung Kim esac 6244*735d6239SKiyoung Kim fi 6245*735d6239SKiyoung Kim fi 6246*735d6239SKiyoung Kim ;; # -l 6247*735d6239SKiyoung Kim *.ltframework) 6248*735d6239SKiyoung Kim if test "$linkmode,$pass" = "prog,link"; then 6249*735d6239SKiyoung Kim compile_deplibs="$deplib $compile_deplibs" 6250*735d6239SKiyoung Kim finalize_deplibs="$deplib $finalize_deplibs" 6251*735d6239SKiyoung Kim else 6252*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6253*735d6239SKiyoung Kim if test "$linkmode" = lib ; then 6254*735d6239SKiyoung Kim case "$new_inherited_linker_flags " in 6255*735d6239SKiyoung Kim *" $deplib "*) ;; 6256*735d6239SKiyoung Kim * ) func_append new_inherited_linker_flags " $deplib" ;; 6257*735d6239SKiyoung Kim esac 6258*735d6239SKiyoung Kim fi 6259*735d6239SKiyoung Kim fi 6260*735d6239SKiyoung Kim continue 6261*735d6239SKiyoung Kim ;; 6262*735d6239SKiyoung Kim -L*) 6263*735d6239SKiyoung Kim case $linkmode in 6264*735d6239SKiyoung Kim lib) 6265*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6266*735d6239SKiyoung Kim test "$pass" = conv && continue 6267*735d6239SKiyoung Kim newdependency_libs="$deplib $newdependency_libs" 6268*735d6239SKiyoung Kim func_stripname '-L' '' "$deplib" 6269*735d6239SKiyoung Kim func_resolve_sysroot "$func_stripname_result" 6270*735d6239SKiyoung Kim func_append newlib_search_path " $func_resolve_sysroot_result" 6271*735d6239SKiyoung Kim ;; 6272*735d6239SKiyoung Kim prog) 6273*735d6239SKiyoung Kim if test "$pass" = conv; then 6274*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6275*735d6239SKiyoung Kim continue 6276*735d6239SKiyoung Kim fi 6277*735d6239SKiyoung Kim if test "$pass" = scan; then 6278*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6279*735d6239SKiyoung Kim else 6280*735d6239SKiyoung Kim compile_deplibs="$deplib $compile_deplibs" 6281*735d6239SKiyoung Kim finalize_deplibs="$deplib $finalize_deplibs" 6282*735d6239SKiyoung Kim fi 6283*735d6239SKiyoung Kim func_stripname '-L' '' "$deplib" 6284*735d6239SKiyoung Kim func_resolve_sysroot "$func_stripname_result" 6285*735d6239SKiyoung Kim func_append newlib_search_path " $func_resolve_sysroot_result" 6286*735d6239SKiyoung Kim ;; 6287*735d6239SKiyoung Kim *) 6288*735d6239SKiyoung Kim func_warning "\`-L' is ignored for archives/objects" 6289*735d6239SKiyoung Kim ;; 6290*735d6239SKiyoung Kim esac # linkmode 6291*735d6239SKiyoung Kim continue 6292*735d6239SKiyoung Kim ;; # -L 6293*735d6239SKiyoung Kim -R*) 6294*735d6239SKiyoung Kim if test "$pass" = link; then 6295*735d6239SKiyoung Kim func_stripname '-R' '' "$deplib" 6296*735d6239SKiyoung Kim func_resolve_sysroot "$func_stripname_result" 6297*735d6239SKiyoung Kim dir=$func_resolve_sysroot_result 6298*735d6239SKiyoung Kim # Make sure the xrpath contains only unique directories. 6299*735d6239SKiyoung Kim case "$xrpath " in 6300*735d6239SKiyoung Kim *" $dir "*) ;; 6301*735d6239SKiyoung Kim *) func_append xrpath " $dir" ;; 6302*735d6239SKiyoung Kim esac 6303*735d6239SKiyoung Kim fi 6304*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6305*735d6239SKiyoung Kim continue 6306*735d6239SKiyoung Kim ;; 6307*735d6239SKiyoung Kim *.la) 6308*735d6239SKiyoung Kim func_resolve_sysroot "$deplib" 6309*735d6239SKiyoung Kim lib=$func_resolve_sysroot_result 6310*735d6239SKiyoung Kim ;; 6311*735d6239SKiyoung Kim *.$libext) 6312*735d6239SKiyoung Kim if test "$pass" = conv; then 6313*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6314*735d6239SKiyoung Kim continue 6315*735d6239SKiyoung Kim fi 6316*735d6239SKiyoung Kim case $linkmode in 6317*735d6239SKiyoung Kim lib) 6318*735d6239SKiyoung Kim # Linking convenience modules into shared libraries is allowed, 6319*735d6239SKiyoung Kim # but linking other static libraries is non-portable. 6320*735d6239SKiyoung Kim case " $dlpreconveniencelibs " in 6321*735d6239SKiyoung Kim *" $deplib "*) ;; 6322*735d6239SKiyoung Kim *) 6323*735d6239SKiyoung Kim valid_a_lib=no 6324*735d6239SKiyoung Kim case $deplibs_check_method in 6325*735d6239SKiyoung Kim match_pattern*) 6326*735d6239SKiyoung Kim set dummy $deplibs_check_method; shift 6327*735d6239SKiyoung Kim match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6328*735d6239SKiyoung Kim if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6329*735d6239SKiyoung Kim | $EGREP "$match_pattern_regex" > /dev/null; then 6330*735d6239SKiyoung Kim valid_a_lib=yes 6331*735d6239SKiyoung Kim fi 6332*735d6239SKiyoung Kim ;; 6333*735d6239SKiyoung Kim pass_all) 6334*735d6239SKiyoung Kim valid_a_lib=yes 6335*735d6239SKiyoung Kim ;; 6336*735d6239SKiyoung Kim esac 6337*735d6239SKiyoung Kim if test "$valid_a_lib" != yes; then 6338*735d6239SKiyoung Kim echo 6339*735d6239SKiyoung Kim $ECHO "*** Warning: Trying to link with static lib archive $deplib." 6340*735d6239SKiyoung Kim echo "*** I have the capability to make that library automatically link in when" 6341*735d6239SKiyoung Kim echo "*** you link to this library. But I can only do this if you have a" 6342*735d6239SKiyoung Kim echo "*** shared version of the library, which you do not appear to have" 6343*735d6239SKiyoung Kim echo "*** because the file extensions .$libext of this argument makes me believe" 6344*735d6239SKiyoung Kim echo "*** that it is just a static archive that I should not use here." 6345*735d6239SKiyoung Kim else 6346*735d6239SKiyoung Kim echo 6347*735d6239SKiyoung Kim $ECHO "*** Warning: Linking the shared library $output against the" 6348*735d6239SKiyoung Kim $ECHO "*** static library $deplib is not portable!" 6349*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6350*735d6239SKiyoung Kim fi 6351*735d6239SKiyoung Kim ;; 6352*735d6239SKiyoung Kim esac 6353*735d6239SKiyoung Kim continue 6354*735d6239SKiyoung Kim ;; 6355*735d6239SKiyoung Kim prog) 6356*735d6239SKiyoung Kim if test "$pass" != link; then 6357*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6358*735d6239SKiyoung Kim else 6359*735d6239SKiyoung Kim compile_deplibs="$deplib $compile_deplibs" 6360*735d6239SKiyoung Kim finalize_deplibs="$deplib $finalize_deplibs" 6361*735d6239SKiyoung Kim fi 6362*735d6239SKiyoung Kim continue 6363*735d6239SKiyoung Kim ;; 6364*735d6239SKiyoung Kim esac # linkmode 6365*735d6239SKiyoung Kim ;; # *.$libext 6366*735d6239SKiyoung Kim *.lo | *.$objext) 6367*735d6239SKiyoung Kim if test "$pass" = conv; then 6368*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6369*735d6239SKiyoung Kim elif test "$linkmode" = prog; then 6370*735d6239SKiyoung Kim if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6371*735d6239SKiyoung Kim # If there is no dlopen support or we're linking statically, 6372*735d6239SKiyoung Kim # we need to preload. 6373*735d6239SKiyoung Kim func_append newdlprefiles " $deplib" 6374*735d6239SKiyoung Kim compile_deplibs="$deplib $compile_deplibs" 6375*735d6239SKiyoung Kim finalize_deplibs="$deplib $finalize_deplibs" 6376*735d6239SKiyoung Kim else 6377*735d6239SKiyoung Kim func_append newdlfiles " $deplib" 6378*735d6239SKiyoung Kim fi 6379*735d6239SKiyoung Kim fi 6380*735d6239SKiyoung Kim continue 6381*735d6239SKiyoung Kim ;; 6382*735d6239SKiyoung Kim %DEPLIBS%) 6383*735d6239SKiyoung Kim alldeplibs=yes 6384*735d6239SKiyoung Kim continue 6385*735d6239SKiyoung Kim ;; 6386*735d6239SKiyoung Kim esac # case $deplib 6387*735d6239SKiyoung Kim 6388*735d6239SKiyoung Kim if test "$found" = yes || test -f "$lib"; then : 6389*735d6239SKiyoung Kim else 6390*735d6239SKiyoung Kim func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6391*735d6239SKiyoung Kim fi 6392*735d6239SKiyoung Kim 6393*735d6239SKiyoung Kim # Check to see that this really is a libtool archive. 6394*735d6239SKiyoung Kim func_lalib_unsafe_p "$lib" \ 6395*735d6239SKiyoung Kim || func_fatal_error "\`$lib' is not a valid libtool archive" 6396*735d6239SKiyoung Kim 6397*735d6239SKiyoung Kim func_dirname "$lib" "" "." 6398*735d6239SKiyoung Kim ladir="$func_dirname_result" 6399*735d6239SKiyoung Kim 6400*735d6239SKiyoung Kim dlname= 6401*735d6239SKiyoung Kim dlopen= 6402*735d6239SKiyoung Kim dlpreopen= 6403*735d6239SKiyoung Kim libdir= 6404*735d6239SKiyoung Kim library_names= 6405*735d6239SKiyoung Kim old_library= 6406*735d6239SKiyoung Kim inherited_linker_flags= 6407*735d6239SKiyoung Kim # If the library was installed with an old release of libtool, 6408*735d6239SKiyoung Kim # it will not redefine variables installed, or shouldnotlink 6409*735d6239SKiyoung Kim installed=yes 6410*735d6239SKiyoung Kim shouldnotlink=no 6411*735d6239SKiyoung Kim avoidtemprpath= 6412*735d6239SKiyoung Kim 6413*735d6239SKiyoung Kim 6414*735d6239SKiyoung Kim # Read the .la file 6415*735d6239SKiyoung Kim func_source "$lib" 6416*735d6239SKiyoung Kim 6417*735d6239SKiyoung Kim # Convert "-framework foo" to "foo.ltframework" 6418*735d6239SKiyoung Kim if test -n "$inherited_linker_flags"; then 6419*735d6239SKiyoung Kim tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6420*735d6239SKiyoung Kim for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6421*735d6239SKiyoung Kim case " $new_inherited_linker_flags " in 6422*735d6239SKiyoung Kim *" $tmp_inherited_linker_flag "*) ;; 6423*735d6239SKiyoung Kim *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6424*735d6239SKiyoung Kim esac 6425*735d6239SKiyoung Kim done 6426*735d6239SKiyoung Kim fi 6427*735d6239SKiyoung Kim dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6428*735d6239SKiyoung Kim if test "$linkmode,$pass" = "lib,link" || 6429*735d6239SKiyoung Kim test "$linkmode,$pass" = "prog,scan" || 6430*735d6239SKiyoung Kim { test "$linkmode" != prog && test "$linkmode" != lib; }; then 6431*735d6239SKiyoung Kim test -n "$dlopen" && func_append dlfiles " $dlopen" 6432*735d6239SKiyoung Kim test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6433*735d6239SKiyoung Kim fi 6434*735d6239SKiyoung Kim 6435*735d6239SKiyoung Kim if test "$pass" = conv; then 6436*735d6239SKiyoung Kim # Only check for convenience libraries 6437*735d6239SKiyoung Kim deplibs="$lib $deplibs" 6438*735d6239SKiyoung Kim if test -z "$libdir"; then 6439*735d6239SKiyoung Kim if test -z "$old_library"; then 6440*735d6239SKiyoung Kim func_fatal_error "cannot find name of link library for \`$lib'" 6441*735d6239SKiyoung Kim fi 6442*735d6239SKiyoung Kim # It is a libtool convenience library, so add in its objects. 6443*735d6239SKiyoung Kim func_append convenience " $ladir/$objdir/$old_library" 6444*735d6239SKiyoung Kim func_append old_convenience " $ladir/$objdir/$old_library" 6445*735d6239SKiyoung Kim elif test "$linkmode" != prog && test "$linkmode" != lib; then 6446*735d6239SKiyoung Kim func_fatal_error "\`$lib' is not a convenience library" 6447*735d6239SKiyoung Kim fi 6448*735d6239SKiyoung Kim tmp_libs= 6449*735d6239SKiyoung Kim for deplib in $dependency_libs; do 6450*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6451*735d6239SKiyoung Kim if $opt_preserve_dup_deps ; then 6452*735d6239SKiyoung Kim case "$tmp_libs " in 6453*735d6239SKiyoung Kim *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6454*735d6239SKiyoung Kim esac 6455*735d6239SKiyoung Kim fi 6456*735d6239SKiyoung Kim func_append tmp_libs " $deplib" 6457*735d6239SKiyoung Kim done 6458*735d6239SKiyoung Kim continue 6459*735d6239SKiyoung Kim fi # $pass = conv 6460*735d6239SKiyoung Kim 6461*735d6239SKiyoung Kim 6462*735d6239SKiyoung Kim # Get the name of the library we link against. 6463*735d6239SKiyoung Kim linklib= 6464*735d6239SKiyoung Kim if test -n "$old_library" && 6465*735d6239SKiyoung Kim { test "$prefer_static_libs" = yes || 6466*735d6239SKiyoung Kim test "$prefer_static_libs,$installed" = "built,no"; }; then 6467*735d6239SKiyoung Kim linklib=$old_library 6468*735d6239SKiyoung Kim else 6469*735d6239SKiyoung Kim for l in $old_library $library_names; do 6470*735d6239SKiyoung Kim linklib="$l" 6471*735d6239SKiyoung Kim done 6472*735d6239SKiyoung Kim fi 6473*735d6239SKiyoung Kim if test -z "$linklib"; then 6474*735d6239SKiyoung Kim func_fatal_error "cannot find name of link library for \`$lib'" 6475*735d6239SKiyoung Kim fi 6476*735d6239SKiyoung Kim 6477*735d6239SKiyoung Kim # This library was specified with -dlopen. 6478*735d6239SKiyoung Kim if test "$pass" = dlopen; then 6479*735d6239SKiyoung Kim if test -z "$libdir"; then 6480*735d6239SKiyoung Kim func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6481*735d6239SKiyoung Kim fi 6482*735d6239SKiyoung Kim if test -z "$dlname" || 6483*735d6239SKiyoung Kim test "$dlopen_support" != yes || 6484*735d6239SKiyoung Kim test "$build_libtool_libs" = no; then 6485*735d6239SKiyoung Kim # If there is no dlname, no dlopen support or we're linking 6486*735d6239SKiyoung Kim # statically, we need to preload. We also need to preload any 6487*735d6239SKiyoung Kim # dependent libraries so libltdl's deplib preloader doesn't 6488*735d6239SKiyoung Kim # bomb out in the load deplibs phase. 6489*735d6239SKiyoung Kim func_append dlprefiles " $lib $dependency_libs" 6490*735d6239SKiyoung Kim else 6491*735d6239SKiyoung Kim func_append newdlfiles " $lib" 6492*735d6239SKiyoung Kim fi 6493*735d6239SKiyoung Kim continue 6494*735d6239SKiyoung Kim fi # $pass = dlopen 6495*735d6239SKiyoung Kim 6496*735d6239SKiyoung Kim # We need an absolute path. 6497*735d6239SKiyoung Kim case $ladir in 6498*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6499*735d6239SKiyoung Kim *) 6500*735d6239SKiyoung Kim abs_ladir=`cd "$ladir" && pwd` 6501*735d6239SKiyoung Kim if test -z "$abs_ladir"; then 6502*735d6239SKiyoung Kim func_warning "cannot determine absolute directory name of \`$ladir'" 6503*735d6239SKiyoung Kim func_warning "passing it literally to the linker, although it might fail" 6504*735d6239SKiyoung Kim abs_ladir="$ladir" 6505*735d6239SKiyoung Kim fi 6506*735d6239SKiyoung Kim ;; 6507*735d6239SKiyoung Kim esac 6508*735d6239SKiyoung Kim func_basename "$lib" 6509*735d6239SKiyoung Kim laname="$func_basename_result" 6510*735d6239SKiyoung Kim 6511*735d6239SKiyoung Kim # Find the relevant object directory and library name. 6512*735d6239SKiyoung Kim if test "X$installed" = Xyes; then 6513*735d6239SKiyoung Kim if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6514*735d6239SKiyoung Kim func_warning "library \`$lib' was moved." 6515*735d6239SKiyoung Kim dir="$ladir" 6516*735d6239SKiyoung Kim absdir="$abs_ladir" 6517*735d6239SKiyoung Kim libdir="$abs_ladir" 6518*735d6239SKiyoung Kim else 6519*735d6239SKiyoung Kim dir="$lt_sysroot$libdir" 6520*735d6239SKiyoung Kim absdir="$lt_sysroot$libdir" 6521*735d6239SKiyoung Kim fi 6522*735d6239SKiyoung Kim test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6523*735d6239SKiyoung Kim else 6524*735d6239SKiyoung Kim if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6525*735d6239SKiyoung Kim dir="$ladir" 6526*735d6239SKiyoung Kim absdir="$abs_ladir" 6527*735d6239SKiyoung Kim # Remove this search path later 6528*735d6239SKiyoung Kim func_append notinst_path " $abs_ladir" 6529*735d6239SKiyoung Kim else 6530*735d6239SKiyoung Kim dir="$ladir/$objdir" 6531*735d6239SKiyoung Kim absdir="$abs_ladir/$objdir" 6532*735d6239SKiyoung Kim # Remove this search path later 6533*735d6239SKiyoung Kim func_append notinst_path " $abs_ladir" 6534*735d6239SKiyoung Kim fi 6535*735d6239SKiyoung Kim fi # $installed = yes 6536*735d6239SKiyoung Kim func_stripname 'lib' '.la' "$laname" 6537*735d6239SKiyoung Kim name=$func_stripname_result 6538*735d6239SKiyoung Kim 6539*735d6239SKiyoung Kim # This library was specified with -dlpreopen. 6540*735d6239SKiyoung Kim if test "$pass" = dlpreopen; then 6541*735d6239SKiyoung Kim if test -z "$libdir" && test "$linkmode" = prog; then 6542*735d6239SKiyoung Kim func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6543*735d6239SKiyoung Kim fi 6544*735d6239SKiyoung Kim case "$host" in 6545*735d6239SKiyoung Kim # special handling for platforms with PE-DLLs. 6546*735d6239SKiyoung Kim *cygwin* | *mingw* | *cegcc* ) 6547*735d6239SKiyoung Kim # Linker will automatically link against shared library if both 6548*735d6239SKiyoung Kim # static and shared are present. Therefore, ensure we extract 6549*735d6239SKiyoung Kim # symbols from the import library if a shared library is present 6550*735d6239SKiyoung Kim # (otherwise, the dlopen module name will be incorrect). We do 6551*735d6239SKiyoung Kim # this by putting the import library name into $newdlprefiles. 6552*735d6239SKiyoung Kim # We recover the dlopen module name by 'saving' the la file 6553*735d6239SKiyoung Kim # name in a special purpose variable, and (later) extracting the 6554*735d6239SKiyoung Kim # dlname from the la file. 6555*735d6239SKiyoung Kim if test -n "$dlname"; then 6556*735d6239SKiyoung Kim func_tr_sh "$dir/$linklib" 6557*735d6239SKiyoung Kim eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 6558*735d6239SKiyoung Kim func_append newdlprefiles " $dir/$linklib" 6559*735d6239SKiyoung Kim else 6560*735d6239SKiyoung Kim func_append newdlprefiles " $dir/$old_library" 6561*735d6239SKiyoung Kim # Keep a list of preopened convenience libraries to check 6562*735d6239SKiyoung Kim # that they are being used correctly in the link pass. 6563*735d6239SKiyoung Kim test -z "$libdir" && \ 6564*735d6239SKiyoung Kim func_append dlpreconveniencelibs " $dir/$old_library" 6565*735d6239SKiyoung Kim fi 6566*735d6239SKiyoung Kim ;; 6567*735d6239SKiyoung Kim * ) 6568*735d6239SKiyoung Kim # Prefer using a static library (so that no silly _DYNAMIC symbols 6569*735d6239SKiyoung Kim # are required to link). 6570*735d6239SKiyoung Kim if test -n "$old_library"; then 6571*735d6239SKiyoung Kim func_append newdlprefiles " $dir/$old_library" 6572*735d6239SKiyoung Kim # Keep a list of preopened convenience libraries to check 6573*735d6239SKiyoung Kim # that they are being used correctly in the link pass. 6574*735d6239SKiyoung Kim test -z "$libdir" && \ 6575*735d6239SKiyoung Kim func_append dlpreconveniencelibs " $dir/$old_library" 6576*735d6239SKiyoung Kim # Otherwise, use the dlname, so that lt_dlopen finds it. 6577*735d6239SKiyoung Kim elif test -n "$dlname"; then 6578*735d6239SKiyoung Kim func_append newdlprefiles " $dir/$dlname" 6579*735d6239SKiyoung Kim else 6580*735d6239SKiyoung Kim func_append newdlprefiles " $dir/$linklib" 6581*735d6239SKiyoung Kim fi 6582*735d6239SKiyoung Kim ;; 6583*735d6239SKiyoung Kim esac 6584*735d6239SKiyoung Kim fi # $pass = dlpreopen 6585*735d6239SKiyoung Kim 6586*735d6239SKiyoung Kim if test -z "$libdir"; then 6587*735d6239SKiyoung Kim # Link the convenience library 6588*735d6239SKiyoung Kim if test "$linkmode" = lib; then 6589*735d6239SKiyoung Kim deplibs="$dir/$old_library $deplibs" 6590*735d6239SKiyoung Kim elif test "$linkmode,$pass" = "prog,link"; then 6591*735d6239SKiyoung Kim compile_deplibs="$dir/$old_library $compile_deplibs" 6592*735d6239SKiyoung Kim finalize_deplibs="$dir/$old_library $finalize_deplibs" 6593*735d6239SKiyoung Kim else 6594*735d6239SKiyoung Kim deplibs="$lib $deplibs" # used for prog,scan pass 6595*735d6239SKiyoung Kim fi 6596*735d6239SKiyoung Kim continue 6597*735d6239SKiyoung Kim fi 6598*735d6239SKiyoung Kim 6599*735d6239SKiyoung Kim 6600*735d6239SKiyoung Kim if test "$linkmode" = prog && test "$pass" != link; then 6601*735d6239SKiyoung Kim func_append newlib_search_path " $ladir" 6602*735d6239SKiyoung Kim deplibs="$lib $deplibs" 6603*735d6239SKiyoung Kim 6604*735d6239SKiyoung Kim linkalldeplibs=no 6605*735d6239SKiyoung Kim if test "$link_all_deplibs" != no || test -z "$library_names" || 6606*735d6239SKiyoung Kim test "$build_libtool_libs" = no; then 6607*735d6239SKiyoung Kim linkalldeplibs=yes 6608*735d6239SKiyoung Kim fi 6609*735d6239SKiyoung Kim 6610*735d6239SKiyoung Kim tmp_libs= 6611*735d6239SKiyoung Kim for deplib in $dependency_libs; do 6612*735d6239SKiyoung Kim case $deplib in 6613*735d6239SKiyoung Kim -L*) func_stripname '-L' '' "$deplib" 6614*735d6239SKiyoung Kim func_resolve_sysroot "$func_stripname_result" 6615*735d6239SKiyoung Kim func_append newlib_search_path " $func_resolve_sysroot_result" 6616*735d6239SKiyoung Kim ;; 6617*735d6239SKiyoung Kim esac 6618*735d6239SKiyoung Kim # Need to link against all dependency_libs? 6619*735d6239SKiyoung Kim if test "$linkalldeplibs" = yes; then 6620*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 6621*735d6239SKiyoung Kim else 6622*735d6239SKiyoung Kim # Need to hardcode shared library paths 6623*735d6239SKiyoung Kim # or/and link against static libraries 6624*735d6239SKiyoung Kim newdependency_libs="$deplib $newdependency_libs" 6625*735d6239SKiyoung Kim fi 6626*735d6239SKiyoung Kim if $opt_preserve_dup_deps ; then 6627*735d6239SKiyoung Kim case "$tmp_libs " in 6628*735d6239SKiyoung Kim *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6629*735d6239SKiyoung Kim esac 6630*735d6239SKiyoung Kim fi 6631*735d6239SKiyoung Kim func_append tmp_libs " $deplib" 6632*735d6239SKiyoung Kim done # for deplib 6633*735d6239SKiyoung Kim continue 6634*735d6239SKiyoung Kim fi # $linkmode = prog... 6635*735d6239SKiyoung Kim 6636*735d6239SKiyoung Kim if test "$linkmode,$pass" = "prog,link"; then 6637*735d6239SKiyoung Kim if test -n "$library_names" && 6638*735d6239SKiyoung Kim { { test "$prefer_static_libs" = no || 6639*735d6239SKiyoung Kim test "$prefer_static_libs,$installed" = "built,yes"; } || 6640*735d6239SKiyoung Kim test -z "$old_library"; }; then 6641*735d6239SKiyoung Kim # We need to hardcode the library path 6642*735d6239SKiyoung Kim if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6643*735d6239SKiyoung Kim # Make sure the rpath contains only unique directories. 6644*735d6239SKiyoung Kim case "$temp_rpath:" in 6645*735d6239SKiyoung Kim *"$absdir:"*) ;; 6646*735d6239SKiyoung Kim *) func_append temp_rpath "$absdir:" ;; 6647*735d6239SKiyoung Kim esac 6648*735d6239SKiyoung Kim fi 6649*735d6239SKiyoung Kim 6650*735d6239SKiyoung Kim # Hardcode the library path. 6651*735d6239SKiyoung Kim # Skip directories that are in the system default run-time 6652*735d6239SKiyoung Kim # search path. 6653*735d6239SKiyoung Kim case " $sys_lib_dlsearch_path " in 6654*735d6239SKiyoung Kim *" $absdir "*) ;; 6655*735d6239SKiyoung Kim *) 6656*735d6239SKiyoung Kim case "$compile_rpath " in 6657*735d6239SKiyoung Kim *" $absdir "*) ;; 6658*735d6239SKiyoung Kim *) func_append compile_rpath " $absdir" ;; 6659*735d6239SKiyoung Kim esac 6660*735d6239SKiyoung Kim ;; 6661*735d6239SKiyoung Kim esac 6662*735d6239SKiyoung Kim case " $sys_lib_dlsearch_path " in 6663*735d6239SKiyoung Kim *" $libdir "*) ;; 6664*735d6239SKiyoung Kim *) 6665*735d6239SKiyoung Kim case "$finalize_rpath " in 6666*735d6239SKiyoung Kim *" $libdir "*) ;; 6667*735d6239SKiyoung Kim *) func_append finalize_rpath " $libdir" ;; 6668*735d6239SKiyoung Kim esac 6669*735d6239SKiyoung Kim ;; 6670*735d6239SKiyoung Kim esac 6671*735d6239SKiyoung Kim fi # $linkmode,$pass = prog,link... 6672*735d6239SKiyoung Kim 6673*735d6239SKiyoung Kim if test "$alldeplibs" = yes && 6674*735d6239SKiyoung Kim { test "$deplibs_check_method" = pass_all || 6675*735d6239SKiyoung Kim { test "$build_libtool_libs" = yes && 6676*735d6239SKiyoung Kim test -n "$library_names"; }; }; then 6677*735d6239SKiyoung Kim # We only need to search for static libraries 6678*735d6239SKiyoung Kim continue 6679*735d6239SKiyoung Kim fi 6680*735d6239SKiyoung Kim fi 6681*735d6239SKiyoung Kim 6682*735d6239SKiyoung Kim link_static=no # Whether the deplib will be linked statically 6683*735d6239SKiyoung Kim use_static_libs=$prefer_static_libs 6684*735d6239SKiyoung Kim if test "$use_static_libs" = built && test "$installed" = yes; then 6685*735d6239SKiyoung Kim use_static_libs=no 6686*735d6239SKiyoung Kim fi 6687*735d6239SKiyoung Kim if test -n "$library_names" && 6688*735d6239SKiyoung Kim { test "$use_static_libs" = no || test -z "$old_library"; }; then 6689*735d6239SKiyoung Kim case $host in 6690*735d6239SKiyoung Kim *cygwin* | *mingw* | *cegcc*) 6691*735d6239SKiyoung Kim # No point in relinking DLLs because paths are not encoded 6692*735d6239SKiyoung Kim func_append notinst_deplibs " $lib" 6693*735d6239SKiyoung Kim need_relink=no 6694*735d6239SKiyoung Kim ;; 6695*735d6239SKiyoung Kim *) 6696*735d6239SKiyoung Kim if test "$installed" = no; then 6697*735d6239SKiyoung Kim func_append notinst_deplibs " $lib" 6698*735d6239SKiyoung Kim need_relink=yes 6699*735d6239SKiyoung Kim fi 6700*735d6239SKiyoung Kim ;; 6701*735d6239SKiyoung Kim esac 6702*735d6239SKiyoung Kim # This is a shared library 6703*735d6239SKiyoung Kim 6704*735d6239SKiyoung Kim # Warn about portability, can't link against -module's on some 6705*735d6239SKiyoung Kim # systems (darwin). Don't bleat about dlopened modules though! 6706*735d6239SKiyoung Kim dlopenmodule="" 6707*735d6239SKiyoung Kim for dlpremoduletest in $dlprefiles; do 6708*735d6239SKiyoung Kim if test "X$dlpremoduletest" = "X$lib"; then 6709*735d6239SKiyoung Kim dlopenmodule="$dlpremoduletest" 6710*735d6239SKiyoung Kim break 6711*735d6239SKiyoung Kim fi 6712*735d6239SKiyoung Kim done 6713*735d6239SKiyoung Kim if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 6714*735d6239SKiyoung Kim echo 6715*735d6239SKiyoung Kim if test "$linkmode" = prog; then 6716*735d6239SKiyoung Kim $ECHO "*** Warning: Linking the executable $output against the loadable module" 6717*735d6239SKiyoung Kim else 6718*735d6239SKiyoung Kim $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6719*735d6239SKiyoung Kim fi 6720*735d6239SKiyoung Kim $ECHO "*** $linklib is not portable!" 6721*735d6239SKiyoung Kim fi 6722*735d6239SKiyoung Kim if test "$linkmode" = lib && 6723*735d6239SKiyoung Kim test "$hardcode_into_libs" = yes; then 6724*735d6239SKiyoung Kim # Hardcode the library path. 6725*735d6239SKiyoung Kim # Skip directories that are in the system default run-time 6726*735d6239SKiyoung Kim # search path. 6727*735d6239SKiyoung Kim case " $sys_lib_dlsearch_path " in 6728*735d6239SKiyoung Kim *" $absdir "*) ;; 6729*735d6239SKiyoung Kim *) 6730*735d6239SKiyoung Kim case "$compile_rpath " in 6731*735d6239SKiyoung Kim *" $absdir "*) ;; 6732*735d6239SKiyoung Kim *) func_append compile_rpath " $absdir" ;; 6733*735d6239SKiyoung Kim esac 6734*735d6239SKiyoung Kim ;; 6735*735d6239SKiyoung Kim esac 6736*735d6239SKiyoung Kim case " $sys_lib_dlsearch_path " in 6737*735d6239SKiyoung Kim *" $libdir "*) ;; 6738*735d6239SKiyoung Kim *) 6739*735d6239SKiyoung Kim case "$finalize_rpath " in 6740*735d6239SKiyoung Kim *" $libdir "*) ;; 6741*735d6239SKiyoung Kim *) func_append finalize_rpath " $libdir" ;; 6742*735d6239SKiyoung Kim esac 6743*735d6239SKiyoung Kim ;; 6744*735d6239SKiyoung Kim esac 6745*735d6239SKiyoung Kim fi 6746*735d6239SKiyoung Kim 6747*735d6239SKiyoung Kim if test -n "$old_archive_from_expsyms_cmds"; then 6748*735d6239SKiyoung Kim # figure out the soname 6749*735d6239SKiyoung Kim set dummy $library_names 6750*735d6239SKiyoung Kim shift 6751*735d6239SKiyoung Kim realname="$1" 6752*735d6239SKiyoung Kim shift 6753*735d6239SKiyoung Kim libname=`eval "\\$ECHO \"$libname_spec\""` 6754*735d6239SKiyoung Kim # use dlname if we got it. it's perfectly good, no? 6755*735d6239SKiyoung Kim if test -n "$dlname"; then 6756*735d6239SKiyoung Kim soname="$dlname" 6757*735d6239SKiyoung Kim elif test -n "$soname_spec"; then 6758*735d6239SKiyoung Kim # bleh windows 6759*735d6239SKiyoung Kim case $host in 6760*735d6239SKiyoung Kim *cygwin* | mingw* | *cegcc*) 6761*735d6239SKiyoung Kim func_arith $current - $age 6762*735d6239SKiyoung Kim major=$func_arith_result 6763*735d6239SKiyoung Kim versuffix="-$major" 6764*735d6239SKiyoung Kim ;; 6765*735d6239SKiyoung Kim esac 6766*735d6239SKiyoung Kim eval soname=\"$soname_spec\" 6767*735d6239SKiyoung Kim else 6768*735d6239SKiyoung Kim soname="$realname" 6769*735d6239SKiyoung Kim fi 6770*735d6239SKiyoung Kim 6771*735d6239SKiyoung Kim # Make a new name for the extract_expsyms_cmds to use 6772*735d6239SKiyoung Kim soroot="$soname" 6773*735d6239SKiyoung Kim func_basename "$soroot" 6774*735d6239SKiyoung Kim soname="$func_basename_result" 6775*735d6239SKiyoung Kim func_stripname 'lib' '.dll' "$soname" 6776*735d6239SKiyoung Kim newlib=libimp-$func_stripname_result.a 6777*735d6239SKiyoung Kim 6778*735d6239SKiyoung Kim # If the library has no export list, then create one now 6779*735d6239SKiyoung Kim if test -f "$output_objdir/$soname-def"; then : 6780*735d6239SKiyoung Kim else 6781*735d6239SKiyoung Kim func_verbose "extracting exported symbol list from \`$soname'" 6782*735d6239SKiyoung Kim func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6783*735d6239SKiyoung Kim fi 6784*735d6239SKiyoung Kim 6785*735d6239SKiyoung Kim # Create $newlib 6786*735d6239SKiyoung Kim if test -f "$output_objdir/$newlib"; then :; else 6787*735d6239SKiyoung Kim func_verbose "generating import library for \`$soname'" 6788*735d6239SKiyoung Kim func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6789*735d6239SKiyoung Kim fi 6790*735d6239SKiyoung Kim # make sure the library variables are pointing to the new library 6791*735d6239SKiyoung Kim dir=$output_objdir 6792*735d6239SKiyoung Kim linklib=$newlib 6793*735d6239SKiyoung Kim fi # test -n "$old_archive_from_expsyms_cmds" 6794*735d6239SKiyoung Kim 6795*735d6239SKiyoung Kim if test "$linkmode" = prog || test "$opt_mode" != relink; then 6796*735d6239SKiyoung Kim add_shlibpath= 6797*735d6239SKiyoung Kim add_dir= 6798*735d6239SKiyoung Kim add= 6799*735d6239SKiyoung Kim lib_linked=yes 6800*735d6239SKiyoung Kim case $hardcode_action in 6801*735d6239SKiyoung Kim immediate | unsupported) 6802*735d6239SKiyoung Kim if test "$hardcode_direct" = no; then 6803*735d6239SKiyoung Kim add="$dir/$linklib" 6804*735d6239SKiyoung Kim case $host in 6805*735d6239SKiyoung Kim *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6806*735d6239SKiyoung Kim *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6807*735d6239SKiyoung Kim *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6808*735d6239SKiyoung Kim *-*-unixware7*) add_dir="-L$dir" ;; 6809*735d6239SKiyoung Kim *-*-darwin* ) 6810*735d6239SKiyoung Kim # if the lib is a (non-dlopened) module then we can not 6811*735d6239SKiyoung Kim # link against it, someone is ignoring the earlier warnings 6812*735d6239SKiyoung Kim if /usr/bin/file -L $add 2> /dev/null | 6813*735d6239SKiyoung Kim $GREP ": [^:]* bundle" >/dev/null ; then 6814*735d6239SKiyoung Kim if test "X$dlopenmodule" != "X$lib"; then 6815*735d6239SKiyoung Kim $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6816*735d6239SKiyoung Kim if test -z "$old_library" ; then 6817*735d6239SKiyoung Kim echo 6818*735d6239SKiyoung Kim echo "*** And there doesn't seem to be a static archive available" 6819*735d6239SKiyoung Kim echo "*** The link will probably fail, sorry" 6820*735d6239SKiyoung Kim else 6821*735d6239SKiyoung Kim add="$dir/$old_library" 6822*735d6239SKiyoung Kim fi 6823*735d6239SKiyoung Kim elif test -n "$old_library"; then 6824*735d6239SKiyoung Kim add="$dir/$old_library" 6825*735d6239SKiyoung Kim fi 6826*735d6239SKiyoung Kim fi 6827*735d6239SKiyoung Kim esac 6828*735d6239SKiyoung Kim elif test "$hardcode_minus_L" = no; then 6829*735d6239SKiyoung Kim case $host in 6830*735d6239SKiyoung Kim *-*-sunos*) add_shlibpath="$dir" ;; 6831*735d6239SKiyoung Kim esac 6832*735d6239SKiyoung Kim add_dir="-L$dir" 6833*735d6239SKiyoung Kim add="-l$name" 6834*735d6239SKiyoung Kim elif test "$hardcode_shlibpath_var" = no; then 6835*735d6239SKiyoung Kim add_shlibpath="$dir" 6836*735d6239SKiyoung Kim add="-l$name" 6837*735d6239SKiyoung Kim else 6838*735d6239SKiyoung Kim lib_linked=no 6839*735d6239SKiyoung Kim fi 6840*735d6239SKiyoung Kim ;; 6841*735d6239SKiyoung Kim relink) 6842*735d6239SKiyoung Kim if test "$hardcode_direct" = yes && 6843*735d6239SKiyoung Kim test "$hardcode_direct_absolute" = no; then 6844*735d6239SKiyoung Kim add="$dir/$linklib" 6845*735d6239SKiyoung Kim elif test "$hardcode_minus_L" = yes; then 6846*735d6239SKiyoung Kim add_dir="-L$dir" 6847*735d6239SKiyoung Kim # Try looking first in the location we're being installed to. 6848*735d6239SKiyoung Kim if test -n "$inst_prefix_dir"; then 6849*735d6239SKiyoung Kim case $libdir in 6850*735d6239SKiyoung Kim [\\/]*) 6851*735d6239SKiyoung Kim func_append add_dir " -L$inst_prefix_dir$libdir" 6852*735d6239SKiyoung Kim ;; 6853*735d6239SKiyoung Kim esac 6854*735d6239SKiyoung Kim fi 6855*735d6239SKiyoung Kim add="-l$name" 6856*735d6239SKiyoung Kim elif test "$hardcode_shlibpath_var" = yes; then 6857*735d6239SKiyoung Kim add_shlibpath="$dir" 6858*735d6239SKiyoung Kim add="-l$name" 6859*735d6239SKiyoung Kim else 6860*735d6239SKiyoung Kim lib_linked=no 6861*735d6239SKiyoung Kim fi 6862*735d6239SKiyoung Kim ;; 6863*735d6239SKiyoung Kim *) lib_linked=no ;; 6864*735d6239SKiyoung Kim esac 6865*735d6239SKiyoung Kim 6866*735d6239SKiyoung Kim if test "$lib_linked" != yes; then 6867*735d6239SKiyoung Kim func_fatal_configuration "unsupported hardcode properties" 6868*735d6239SKiyoung Kim fi 6869*735d6239SKiyoung Kim 6870*735d6239SKiyoung Kim if test -n "$add_shlibpath"; then 6871*735d6239SKiyoung Kim case :$compile_shlibpath: in 6872*735d6239SKiyoung Kim *":$add_shlibpath:"*) ;; 6873*735d6239SKiyoung Kim *) func_append compile_shlibpath "$add_shlibpath:" ;; 6874*735d6239SKiyoung Kim esac 6875*735d6239SKiyoung Kim fi 6876*735d6239SKiyoung Kim if test "$linkmode" = prog; then 6877*735d6239SKiyoung Kim test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6878*735d6239SKiyoung Kim test -n "$add" && compile_deplibs="$add $compile_deplibs" 6879*735d6239SKiyoung Kim else 6880*735d6239SKiyoung Kim test -n "$add_dir" && deplibs="$add_dir $deplibs" 6881*735d6239SKiyoung Kim test -n "$add" && deplibs="$add $deplibs" 6882*735d6239SKiyoung Kim if test "$hardcode_direct" != yes && 6883*735d6239SKiyoung Kim test "$hardcode_minus_L" != yes && 6884*735d6239SKiyoung Kim test "$hardcode_shlibpath_var" = yes; then 6885*735d6239SKiyoung Kim case :$finalize_shlibpath: in 6886*735d6239SKiyoung Kim *":$libdir:"*) ;; 6887*735d6239SKiyoung Kim *) func_append finalize_shlibpath "$libdir:" ;; 6888*735d6239SKiyoung Kim esac 6889*735d6239SKiyoung Kim fi 6890*735d6239SKiyoung Kim fi 6891*735d6239SKiyoung Kim fi 6892*735d6239SKiyoung Kim 6893*735d6239SKiyoung Kim if test "$linkmode" = prog || test "$opt_mode" = relink; then 6894*735d6239SKiyoung Kim add_shlibpath= 6895*735d6239SKiyoung Kim add_dir= 6896*735d6239SKiyoung Kim add= 6897*735d6239SKiyoung Kim # Finalize command for both is simple: just hardcode it. 6898*735d6239SKiyoung Kim if test "$hardcode_direct" = yes && 6899*735d6239SKiyoung Kim test "$hardcode_direct_absolute" = no; then 6900*735d6239SKiyoung Kim add="$libdir/$linklib" 6901*735d6239SKiyoung Kim elif test "$hardcode_minus_L" = yes; then 6902*735d6239SKiyoung Kim add_dir="-L$libdir" 6903*735d6239SKiyoung Kim add="-l$name" 6904*735d6239SKiyoung Kim elif test "$hardcode_shlibpath_var" = yes; then 6905*735d6239SKiyoung Kim case :$finalize_shlibpath: in 6906*735d6239SKiyoung Kim *":$libdir:"*) ;; 6907*735d6239SKiyoung Kim *) func_append finalize_shlibpath "$libdir:" ;; 6908*735d6239SKiyoung Kim esac 6909*735d6239SKiyoung Kim add="-l$name" 6910*735d6239SKiyoung Kim elif test "$hardcode_automatic" = yes; then 6911*735d6239SKiyoung Kim if test -n "$inst_prefix_dir" && 6912*735d6239SKiyoung Kim test -f "$inst_prefix_dir$libdir/$linklib" ; then 6913*735d6239SKiyoung Kim add="$inst_prefix_dir$libdir/$linklib" 6914*735d6239SKiyoung Kim else 6915*735d6239SKiyoung Kim add="$libdir/$linklib" 6916*735d6239SKiyoung Kim fi 6917*735d6239SKiyoung Kim else 6918*735d6239SKiyoung Kim # We cannot seem to hardcode it, guess we'll fake it. 6919*735d6239SKiyoung Kim add_dir="-L$libdir" 6920*735d6239SKiyoung Kim # Try looking first in the location we're being installed to. 6921*735d6239SKiyoung Kim if test -n "$inst_prefix_dir"; then 6922*735d6239SKiyoung Kim case $libdir in 6923*735d6239SKiyoung Kim [\\/]*) 6924*735d6239SKiyoung Kim func_append add_dir " -L$inst_prefix_dir$libdir" 6925*735d6239SKiyoung Kim ;; 6926*735d6239SKiyoung Kim esac 6927*735d6239SKiyoung Kim fi 6928*735d6239SKiyoung Kim add="-l$name" 6929*735d6239SKiyoung Kim fi 6930*735d6239SKiyoung Kim 6931*735d6239SKiyoung Kim if test "$linkmode" = prog; then 6932*735d6239SKiyoung Kim test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6933*735d6239SKiyoung Kim test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6934*735d6239SKiyoung Kim else 6935*735d6239SKiyoung Kim test -n "$add_dir" && deplibs="$add_dir $deplibs" 6936*735d6239SKiyoung Kim test -n "$add" && deplibs="$add $deplibs" 6937*735d6239SKiyoung Kim fi 6938*735d6239SKiyoung Kim fi 6939*735d6239SKiyoung Kim elif test "$linkmode" = prog; then 6940*735d6239SKiyoung Kim # Here we assume that one of hardcode_direct or hardcode_minus_L 6941*735d6239SKiyoung Kim # is not unsupported. This is valid on all known static and 6942*735d6239SKiyoung Kim # shared platforms. 6943*735d6239SKiyoung Kim if test "$hardcode_direct" != unsupported; then 6944*735d6239SKiyoung Kim test -n "$old_library" && linklib="$old_library" 6945*735d6239SKiyoung Kim compile_deplibs="$dir/$linklib $compile_deplibs" 6946*735d6239SKiyoung Kim finalize_deplibs="$dir/$linklib $finalize_deplibs" 6947*735d6239SKiyoung Kim else 6948*735d6239SKiyoung Kim compile_deplibs="-l$name -L$dir $compile_deplibs" 6949*735d6239SKiyoung Kim finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6950*735d6239SKiyoung Kim fi 6951*735d6239SKiyoung Kim elif test "$build_libtool_libs" = yes; then 6952*735d6239SKiyoung Kim # Not a shared library 6953*735d6239SKiyoung Kim if test "$deplibs_check_method" != pass_all; then 6954*735d6239SKiyoung Kim # We're trying link a shared library against a static one 6955*735d6239SKiyoung Kim # but the system doesn't support it. 6956*735d6239SKiyoung Kim 6957*735d6239SKiyoung Kim # Just print a warning and add the library to dependency_libs so 6958*735d6239SKiyoung Kim # that the program can be linked against the static library. 6959*735d6239SKiyoung Kim echo 6960*735d6239SKiyoung Kim $ECHO "*** Warning: This system can not link to static lib archive $lib." 6961*735d6239SKiyoung Kim echo "*** I have the capability to make that library automatically link in when" 6962*735d6239SKiyoung Kim echo "*** you link to this library. But I can only do this if you have a" 6963*735d6239SKiyoung Kim echo "*** shared version of the library, which you do not appear to have." 6964*735d6239SKiyoung Kim if test "$module" = yes; then 6965*735d6239SKiyoung Kim echo "*** But as you try to build a module library, libtool will still create " 6966*735d6239SKiyoung Kim echo "*** a static module, that should work as long as the dlopening application" 6967*735d6239SKiyoung Kim echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6968*735d6239SKiyoung Kim if test -z "$global_symbol_pipe"; then 6969*735d6239SKiyoung Kim echo 6970*735d6239SKiyoung Kim echo "*** However, this would only work if libtool was able to extract symbol" 6971*735d6239SKiyoung Kim echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6972*735d6239SKiyoung Kim echo "*** not find such a program. So, this module is probably useless." 6973*735d6239SKiyoung Kim echo "*** \`nm' from GNU binutils and a full rebuild may help." 6974*735d6239SKiyoung Kim fi 6975*735d6239SKiyoung Kim if test "$build_old_libs" = no; then 6976*735d6239SKiyoung Kim build_libtool_libs=module 6977*735d6239SKiyoung Kim build_old_libs=yes 6978*735d6239SKiyoung Kim else 6979*735d6239SKiyoung Kim build_libtool_libs=no 6980*735d6239SKiyoung Kim fi 6981*735d6239SKiyoung Kim fi 6982*735d6239SKiyoung Kim else 6983*735d6239SKiyoung Kim deplibs="$dir/$old_library $deplibs" 6984*735d6239SKiyoung Kim link_static=yes 6985*735d6239SKiyoung Kim fi 6986*735d6239SKiyoung Kim fi # link shared/static library? 6987*735d6239SKiyoung Kim 6988*735d6239SKiyoung Kim if test "$linkmode" = lib; then 6989*735d6239SKiyoung Kim if test -n "$dependency_libs" && 6990*735d6239SKiyoung Kim { test "$hardcode_into_libs" != yes || 6991*735d6239SKiyoung Kim test "$build_old_libs" = yes || 6992*735d6239SKiyoung Kim test "$link_static" = yes; }; then 6993*735d6239SKiyoung Kim # Extract -R from dependency_libs 6994*735d6239SKiyoung Kim temp_deplibs= 6995*735d6239SKiyoung Kim for libdir in $dependency_libs; do 6996*735d6239SKiyoung Kim case $libdir in 6997*735d6239SKiyoung Kim -R*) func_stripname '-R' '' "$libdir" 6998*735d6239SKiyoung Kim temp_xrpath=$func_stripname_result 6999*735d6239SKiyoung Kim case " $xrpath " in 7000*735d6239SKiyoung Kim *" $temp_xrpath "*) ;; 7001*735d6239SKiyoung Kim *) func_append xrpath " $temp_xrpath";; 7002*735d6239SKiyoung Kim esac;; 7003*735d6239SKiyoung Kim *) func_append temp_deplibs " $libdir";; 7004*735d6239SKiyoung Kim esac 7005*735d6239SKiyoung Kim done 7006*735d6239SKiyoung Kim dependency_libs="$temp_deplibs" 7007*735d6239SKiyoung Kim fi 7008*735d6239SKiyoung Kim 7009*735d6239SKiyoung Kim func_append newlib_search_path " $absdir" 7010*735d6239SKiyoung Kim # Link against this library 7011*735d6239SKiyoung Kim test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7012*735d6239SKiyoung Kim # ... and its dependency_libs 7013*735d6239SKiyoung Kim tmp_libs= 7014*735d6239SKiyoung Kim for deplib in $dependency_libs; do 7015*735d6239SKiyoung Kim newdependency_libs="$deplib $newdependency_libs" 7016*735d6239SKiyoung Kim case $deplib in 7017*735d6239SKiyoung Kim -L*) func_stripname '-L' '' "$deplib" 7018*735d6239SKiyoung Kim func_resolve_sysroot "$func_stripname_result";; 7019*735d6239SKiyoung Kim *) func_resolve_sysroot "$deplib" ;; 7020*735d6239SKiyoung Kim esac 7021*735d6239SKiyoung Kim if $opt_preserve_dup_deps ; then 7022*735d6239SKiyoung Kim case "$tmp_libs " in 7023*735d6239SKiyoung Kim *" $func_resolve_sysroot_result "*) 7024*735d6239SKiyoung Kim func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7025*735d6239SKiyoung Kim esac 7026*735d6239SKiyoung Kim fi 7027*735d6239SKiyoung Kim func_append tmp_libs " $func_resolve_sysroot_result" 7028*735d6239SKiyoung Kim done 7029*735d6239SKiyoung Kim 7030*735d6239SKiyoung Kim if test "$link_all_deplibs" != no; then 7031*735d6239SKiyoung Kim # Add the search paths of all dependency libraries 7032*735d6239SKiyoung Kim for deplib in $dependency_libs; do 7033*735d6239SKiyoung Kim path= 7034*735d6239SKiyoung Kim case $deplib in 7035*735d6239SKiyoung Kim -L*) path="$deplib" ;; 7036*735d6239SKiyoung Kim *.la) 7037*735d6239SKiyoung Kim func_resolve_sysroot "$deplib" 7038*735d6239SKiyoung Kim deplib=$func_resolve_sysroot_result 7039*735d6239SKiyoung Kim func_dirname "$deplib" "" "." 7040*735d6239SKiyoung Kim dir=$func_dirname_result 7041*735d6239SKiyoung Kim # We need an absolute path. 7042*735d6239SKiyoung Kim case $dir in 7043*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7044*735d6239SKiyoung Kim *) 7045*735d6239SKiyoung Kim absdir=`cd "$dir" && pwd` 7046*735d6239SKiyoung Kim if test -z "$absdir"; then 7047*735d6239SKiyoung Kim func_warning "cannot determine absolute directory name of \`$dir'" 7048*735d6239SKiyoung Kim absdir="$dir" 7049*735d6239SKiyoung Kim fi 7050*735d6239SKiyoung Kim ;; 7051*735d6239SKiyoung Kim esac 7052*735d6239SKiyoung Kim if $GREP "^installed=no" $deplib > /dev/null; then 7053*735d6239SKiyoung Kim case $host in 7054*735d6239SKiyoung Kim *-*-darwin*) 7055*735d6239SKiyoung Kim depdepl= 7056*735d6239SKiyoung Kim eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7057*735d6239SKiyoung Kim if test -n "$deplibrary_names" ; then 7058*735d6239SKiyoung Kim for tmp in $deplibrary_names ; do 7059*735d6239SKiyoung Kim depdepl=$tmp 7060*735d6239SKiyoung Kim done 7061*735d6239SKiyoung Kim if test -f "$absdir/$objdir/$depdepl" ; then 7062*735d6239SKiyoung Kim depdepl="$absdir/$objdir/$depdepl" 7063*735d6239SKiyoung Kim darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7064*735d6239SKiyoung Kim if test -z "$darwin_install_name"; then 7065*735d6239SKiyoung Kim darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066*735d6239SKiyoung Kim fi 7067*735d6239SKiyoung Kim func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 7068*735d6239SKiyoung Kim func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7069*735d6239SKiyoung Kim path= 7070*735d6239SKiyoung Kim fi 7071*735d6239SKiyoung Kim fi 7072*735d6239SKiyoung Kim ;; 7073*735d6239SKiyoung Kim *) 7074*735d6239SKiyoung Kim path="-L$absdir/$objdir" 7075*735d6239SKiyoung Kim ;; 7076*735d6239SKiyoung Kim esac 7077*735d6239SKiyoung Kim else 7078*735d6239SKiyoung Kim eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7079*735d6239SKiyoung Kim test -z "$libdir" && \ 7080*735d6239SKiyoung Kim func_fatal_error "\`$deplib' is not a valid libtool archive" 7081*735d6239SKiyoung Kim test "$absdir" != "$libdir" && \ 7082*735d6239SKiyoung Kim func_warning "\`$deplib' seems to be moved" 7083*735d6239SKiyoung Kim 7084*735d6239SKiyoung Kim path="-L$absdir" 7085*735d6239SKiyoung Kim fi 7086*735d6239SKiyoung Kim ;; 7087*735d6239SKiyoung Kim esac 7088*735d6239SKiyoung Kim case " $deplibs " in 7089*735d6239SKiyoung Kim *" $path "*) ;; 7090*735d6239SKiyoung Kim *) deplibs="$path $deplibs" ;; 7091*735d6239SKiyoung Kim esac 7092*735d6239SKiyoung Kim done 7093*735d6239SKiyoung Kim fi # link_all_deplibs != no 7094*735d6239SKiyoung Kim fi # linkmode = lib 7095*735d6239SKiyoung Kim done # for deplib in $libs 7096*735d6239SKiyoung Kim if test "$pass" = link; then 7097*735d6239SKiyoung Kim if test "$linkmode" = "prog"; then 7098*735d6239SKiyoung Kim compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7099*735d6239SKiyoung Kim finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7100*735d6239SKiyoung Kim else 7101*735d6239SKiyoung Kim compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7102*735d6239SKiyoung Kim fi 7103*735d6239SKiyoung Kim fi 7104*735d6239SKiyoung Kim dependency_libs="$newdependency_libs" 7105*735d6239SKiyoung Kim if test "$pass" = dlpreopen; then 7106*735d6239SKiyoung Kim # Link the dlpreopened libraries before other libraries 7107*735d6239SKiyoung Kim for deplib in $save_deplibs; do 7108*735d6239SKiyoung Kim deplibs="$deplib $deplibs" 7109*735d6239SKiyoung Kim done 7110*735d6239SKiyoung Kim fi 7111*735d6239SKiyoung Kim if test "$pass" != dlopen; then 7112*735d6239SKiyoung Kim if test "$pass" != conv; then 7113*735d6239SKiyoung Kim # Make sure lib_search_path contains only unique directories. 7114*735d6239SKiyoung Kim lib_search_path= 7115*735d6239SKiyoung Kim for dir in $newlib_search_path; do 7116*735d6239SKiyoung Kim case "$lib_search_path " in 7117*735d6239SKiyoung Kim *" $dir "*) ;; 7118*735d6239SKiyoung Kim *) func_append lib_search_path " $dir" ;; 7119*735d6239SKiyoung Kim esac 7120*735d6239SKiyoung Kim done 7121*735d6239SKiyoung Kim newlib_search_path= 7122*735d6239SKiyoung Kim fi 7123*735d6239SKiyoung Kim 7124*735d6239SKiyoung Kim if test "$linkmode,$pass" != "prog,link"; then 7125*735d6239SKiyoung Kim vars="deplibs" 7126*735d6239SKiyoung Kim else 7127*735d6239SKiyoung Kim vars="compile_deplibs finalize_deplibs" 7128*735d6239SKiyoung Kim fi 7129*735d6239SKiyoung Kim for var in $vars dependency_libs; do 7130*735d6239SKiyoung Kim # Add libraries to $var in reverse order 7131*735d6239SKiyoung Kim eval tmp_libs=\"\$$var\" 7132*735d6239SKiyoung Kim new_libs= 7133*735d6239SKiyoung Kim for deplib in $tmp_libs; do 7134*735d6239SKiyoung Kim # FIXME: Pedantically, this is the right thing to do, so 7135*735d6239SKiyoung Kim # that some nasty dependency loop isn't accidentally 7136*735d6239SKiyoung Kim # broken: 7137*735d6239SKiyoung Kim #new_libs="$deplib $new_libs" 7138*735d6239SKiyoung Kim # Pragmatically, this seems to cause very few problems in 7139*735d6239SKiyoung Kim # practice: 7140*735d6239SKiyoung Kim case $deplib in 7141*735d6239SKiyoung Kim -L*) new_libs="$deplib $new_libs" ;; 7142*735d6239SKiyoung Kim -R*) ;; 7143*735d6239SKiyoung Kim *) 7144*735d6239SKiyoung Kim # And here is the reason: when a library appears more 7145*735d6239SKiyoung Kim # than once as an explicit dependence of a library, or 7146*735d6239SKiyoung Kim # is implicitly linked in more than once by the 7147*735d6239SKiyoung Kim # compiler, it is considered special, and multiple 7148*735d6239SKiyoung Kim # occurrences thereof are not removed. Compare this 7149*735d6239SKiyoung Kim # with having the same library being listed as a 7150*735d6239SKiyoung Kim # dependency of multiple other libraries: in this case, 7151*735d6239SKiyoung Kim # we know (pedantically, we assume) the library does not 7152*735d6239SKiyoung Kim # need to be listed more than once, so we keep only the 7153*735d6239SKiyoung Kim # last copy. This is not always right, but it is rare 7154*735d6239SKiyoung Kim # enough that we require users that really mean to play 7155*735d6239SKiyoung Kim # such unportable linking tricks to link the library 7156*735d6239SKiyoung Kim # using -Wl,-lname, so that libtool does not consider it 7157*735d6239SKiyoung Kim # for duplicate removal. 7158*735d6239SKiyoung Kim case " $specialdeplibs " in 7159*735d6239SKiyoung Kim *" $deplib "*) new_libs="$deplib $new_libs" ;; 7160*735d6239SKiyoung Kim *) 7161*735d6239SKiyoung Kim case " $new_libs " in 7162*735d6239SKiyoung Kim *" $deplib "*) ;; 7163*735d6239SKiyoung Kim *) new_libs="$deplib $new_libs" ;; 7164*735d6239SKiyoung Kim esac 7165*735d6239SKiyoung Kim ;; 7166*735d6239SKiyoung Kim esac 7167*735d6239SKiyoung Kim ;; 7168*735d6239SKiyoung Kim esac 7169*735d6239SKiyoung Kim done 7170*735d6239SKiyoung Kim tmp_libs= 7171*735d6239SKiyoung Kim for deplib in $new_libs; do 7172*735d6239SKiyoung Kim case $deplib in 7173*735d6239SKiyoung Kim -L*) 7174*735d6239SKiyoung Kim case " $tmp_libs " in 7175*735d6239SKiyoung Kim *" $deplib "*) ;; 7176*735d6239SKiyoung Kim *) func_append tmp_libs " $deplib" ;; 7177*735d6239SKiyoung Kim esac 7178*735d6239SKiyoung Kim ;; 7179*735d6239SKiyoung Kim *) func_append tmp_libs " $deplib" ;; 7180*735d6239SKiyoung Kim esac 7181*735d6239SKiyoung Kim done 7182*735d6239SKiyoung Kim eval $var=\"$tmp_libs\" 7183*735d6239SKiyoung Kim done # for var 7184*735d6239SKiyoung Kim fi 7185*735d6239SKiyoung Kim # Last step: remove runtime libs from dependency_libs 7186*735d6239SKiyoung Kim # (they stay in deplibs) 7187*735d6239SKiyoung Kim tmp_libs= 7188*735d6239SKiyoung Kim for i in $dependency_libs ; do 7189*735d6239SKiyoung Kim case " $predeps $postdeps $compiler_lib_search_path " in 7190*735d6239SKiyoung Kim *" $i "*) 7191*735d6239SKiyoung Kim i="" 7192*735d6239SKiyoung Kim ;; 7193*735d6239SKiyoung Kim esac 7194*735d6239SKiyoung Kim if test -n "$i" ; then 7195*735d6239SKiyoung Kim func_append tmp_libs " $i" 7196*735d6239SKiyoung Kim fi 7197*735d6239SKiyoung Kim done 7198*735d6239SKiyoung Kim dependency_libs=$tmp_libs 7199*735d6239SKiyoung Kim done # for pass 7200*735d6239SKiyoung Kim if test "$linkmode" = prog; then 7201*735d6239SKiyoung Kim dlfiles="$newdlfiles" 7202*735d6239SKiyoung Kim fi 7203*735d6239SKiyoung Kim if test "$linkmode" = prog || test "$linkmode" = lib; then 7204*735d6239SKiyoung Kim dlprefiles="$newdlprefiles" 7205*735d6239SKiyoung Kim fi 7206*735d6239SKiyoung Kim 7207*735d6239SKiyoung Kim case $linkmode in 7208*735d6239SKiyoung Kim oldlib) 7209*735d6239SKiyoung Kim if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7210*735d6239SKiyoung Kim func_warning "\`-dlopen' is ignored for archives" 7211*735d6239SKiyoung Kim fi 7212*735d6239SKiyoung Kim 7213*735d6239SKiyoung Kim case " $deplibs" in 7214*735d6239SKiyoung Kim *\ -l* | *\ -L*) 7215*735d6239SKiyoung Kim func_warning "\`-l' and \`-L' are ignored for archives" ;; 7216*735d6239SKiyoung Kim esac 7217*735d6239SKiyoung Kim 7218*735d6239SKiyoung Kim test -n "$rpath" && \ 7219*735d6239SKiyoung Kim func_warning "\`-rpath' is ignored for archives" 7220*735d6239SKiyoung Kim 7221*735d6239SKiyoung Kim test -n "$xrpath" && \ 7222*735d6239SKiyoung Kim func_warning "\`-R' is ignored for archives" 7223*735d6239SKiyoung Kim 7224*735d6239SKiyoung Kim test -n "$vinfo" && \ 7225*735d6239SKiyoung Kim func_warning "\`-version-info/-version-number' is ignored for archives" 7226*735d6239SKiyoung Kim 7227*735d6239SKiyoung Kim test -n "$release" && \ 7228*735d6239SKiyoung Kim func_warning "\`-release' is ignored for archives" 7229*735d6239SKiyoung Kim 7230*735d6239SKiyoung Kim test -n "$export_symbols$export_symbols_regex" && \ 7231*735d6239SKiyoung Kim func_warning "\`-export-symbols' is ignored for archives" 7232*735d6239SKiyoung Kim 7233*735d6239SKiyoung Kim # Now set the variables for building old libraries. 7234*735d6239SKiyoung Kim build_libtool_libs=no 7235*735d6239SKiyoung Kim oldlibs="$output" 7236*735d6239SKiyoung Kim func_append objs "$old_deplibs" 7237*735d6239SKiyoung Kim ;; 7238*735d6239SKiyoung Kim 7239*735d6239SKiyoung Kim lib) 7240*735d6239SKiyoung Kim # Make sure we only generate libraries of the form `libNAME.la'. 7241*735d6239SKiyoung Kim case $outputname in 7242*735d6239SKiyoung Kim lib*) 7243*735d6239SKiyoung Kim func_stripname 'lib' '.la' "$outputname" 7244*735d6239SKiyoung Kim name=$func_stripname_result 7245*735d6239SKiyoung Kim eval shared_ext=\"$shrext_cmds\" 7246*735d6239SKiyoung Kim eval libname=\"$libname_spec\" 7247*735d6239SKiyoung Kim ;; 7248*735d6239SKiyoung Kim *) 7249*735d6239SKiyoung Kim test "$module" = no && \ 7250*735d6239SKiyoung Kim func_fatal_help "libtool library \`$output' must begin with \`lib'" 7251*735d6239SKiyoung Kim 7252*735d6239SKiyoung Kim if test "$need_lib_prefix" != no; then 7253*735d6239SKiyoung Kim # Add the "lib" prefix for modules if required 7254*735d6239SKiyoung Kim func_stripname '' '.la' "$outputname" 7255*735d6239SKiyoung Kim name=$func_stripname_result 7256*735d6239SKiyoung Kim eval shared_ext=\"$shrext_cmds\" 7257*735d6239SKiyoung Kim eval libname=\"$libname_spec\" 7258*735d6239SKiyoung Kim else 7259*735d6239SKiyoung Kim func_stripname '' '.la' "$outputname" 7260*735d6239SKiyoung Kim libname=$func_stripname_result 7261*735d6239SKiyoung Kim fi 7262*735d6239SKiyoung Kim ;; 7263*735d6239SKiyoung Kim esac 7264*735d6239SKiyoung Kim 7265*735d6239SKiyoung Kim if test -n "$objs"; then 7266*735d6239SKiyoung Kim if test "$deplibs_check_method" != pass_all; then 7267*735d6239SKiyoung Kim func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7268*735d6239SKiyoung Kim else 7269*735d6239SKiyoung Kim echo 7270*735d6239SKiyoung Kim $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7271*735d6239SKiyoung Kim $ECHO "*** objects $objs is not portable!" 7272*735d6239SKiyoung Kim func_append libobjs " $objs" 7273*735d6239SKiyoung Kim fi 7274*735d6239SKiyoung Kim fi 7275*735d6239SKiyoung Kim 7276*735d6239SKiyoung Kim test "$dlself" != no && \ 7277*735d6239SKiyoung Kim func_warning "\`-dlopen self' is ignored for libtool libraries" 7278*735d6239SKiyoung Kim 7279*735d6239SKiyoung Kim set dummy $rpath 7280*735d6239SKiyoung Kim shift 7281*735d6239SKiyoung Kim test "$#" -gt 1 && \ 7282*735d6239SKiyoung Kim func_warning "ignoring multiple \`-rpath's for a libtool library" 7283*735d6239SKiyoung Kim 7284*735d6239SKiyoung Kim install_libdir="$1" 7285*735d6239SKiyoung Kim 7286*735d6239SKiyoung Kim oldlibs= 7287*735d6239SKiyoung Kim if test -z "$rpath"; then 7288*735d6239SKiyoung Kim if test "$build_libtool_libs" = yes; then 7289*735d6239SKiyoung Kim # Building a libtool convenience library. 7290*735d6239SKiyoung Kim # Some compilers have problems with a `.al' extension so 7291*735d6239SKiyoung Kim # convenience libraries should have the same extension an 7292*735d6239SKiyoung Kim # archive normally would. 7293*735d6239SKiyoung Kim oldlibs="$output_objdir/$libname.$libext $oldlibs" 7294*735d6239SKiyoung Kim build_libtool_libs=convenience 7295*735d6239SKiyoung Kim build_old_libs=yes 7296*735d6239SKiyoung Kim fi 7297*735d6239SKiyoung Kim 7298*735d6239SKiyoung Kim test -n "$vinfo" && \ 7299*735d6239SKiyoung Kim func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7300*735d6239SKiyoung Kim 7301*735d6239SKiyoung Kim test -n "$release" && \ 7302*735d6239SKiyoung Kim func_warning "\`-release' is ignored for convenience libraries" 7303*735d6239SKiyoung Kim else 7304*735d6239SKiyoung Kim 7305*735d6239SKiyoung Kim # Parse the version information argument. 7306*735d6239SKiyoung Kim save_ifs="$IFS"; IFS=':' 7307*735d6239SKiyoung Kim set dummy $vinfo 0 0 0 7308*735d6239SKiyoung Kim shift 7309*735d6239SKiyoung Kim IFS="$save_ifs" 7310*735d6239SKiyoung Kim 7311*735d6239SKiyoung Kim test -n "$7" && \ 7312*735d6239SKiyoung Kim func_fatal_help "too many parameters to \`-version-info'" 7313*735d6239SKiyoung Kim 7314*735d6239SKiyoung Kim # convert absolute version numbers to libtool ages 7315*735d6239SKiyoung Kim # this retains compatibility with .la files and attempts 7316*735d6239SKiyoung Kim # to make the code below a bit more comprehensible 7317*735d6239SKiyoung Kim 7318*735d6239SKiyoung Kim case $vinfo_number in 7319*735d6239SKiyoung Kim yes) 7320*735d6239SKiyoung Kim number_major="$1" 7321*735d6239SKiyoung Kim number_minor="$2" 7322*735d6239SKiyoung Kim number_revision="$3" 7323*735d6239SKiyoung Kim # 7324*735d6239SKiyoung Kim # There are really only two kinds -- those that 7325*735d6239SKiyoung Kim # use the current revision as the major version 7326*735d6239SKiyoung Kim # and those that subtract age and use age as 7327*735d6239SKiyoung Kim # a minor version. But, then there is irix 7328*735d6239SKiyoung Kim # which has an extra 1 added just for fun 7329*735d6239SKiyoung Kim # 7330*735d6239SKiyoung Kim case $version_type in 7331*735d6239SKiyoung Kim darwin|linux|osf|windows|none) 7332*735d6239SKiyoung Kim func_arith $number_major + $number_minor 7333*735d6239SKiyoung Kim current=$func_arith_result 7334*735d6239SKiyoung Kim age="$number_minor" 7335*735d6239SKiyoung Kim revision="$number_revision" 7336*735d6239SKiyoung Kim ;; 7337*735d6239SKiyoung Kim freebsd-aout|freebsd-elf|qnx|sunos) 7338*735d6239SKiyoung Kim current="$number_major" 7339*735d6239SKiyoung Kim revision="$number_minor" 7340*735d6239SKiyoung Kim age="0" 7341*735d6239SKiyoung Kim ;; 7342*735d6239SKiyoung Kim irix|nonstopux) 7343*735d6239SKiyoung Kim func_arith $number_major + $number_minor 7344*735d6239SKiyoung Kim current=$func_arith_result 7345*735d6239SKiyoung Kim age="$number_minor" 7346*735d6239SKiyoung Kim revision="$number_minor" 7347*735d6239SKiyoung Kim lt_irix_increment=no 7348*735d6239SKiyoung Kim ;; 7349*735d6239SKiyoung Kim esac 7350*735d6239SKiyoung Kim ;; 7351*735d6239SKiyoung Kim no) 7352*735d6239SKiyoung Kim current="$1" 7353*735d6239SKiyoung Kim revision="$2" 7354*735d6239SKiyoung Kim age="$3" 7355*735d6239SKiyoung Kim ;; 7356*735d6239SKiyoung Kim esac 7357*735d6239SKiyoung Kim 7358*735d6239SKiyoung Kim # Check that each of the things are valid numbers. 7359*735d6239SKiyoung Kim case $current in 7360*735d6239SKiyoung Kim 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; 7361*735d6239SKiyoung Kim *) 7362*735d6239SKiyoung Kim func_error "CURRENT \`$current' must be a nonnegative integer" 7363*735d6239SKiyoung Kim func_fatal_error "\`$vinfo' is not valid version information" 7364*735d6239SKiyoung Kim ;; 7365*735d6239SKiyoung Kim esac 7366*735d6239SKiyoung Kim 7367*735d6239SKiyoung Kim case $revision in 7368*735d6239SKiyoung Kim 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; 7369*735d6239SKiyoung Kim *) 7370*735d6239SKiyoung Kim func_error "REVISION \`$revision' must be a nonnegative integer" 7371*735d6239SKiyoung Kim func_fatal_error "\`$vinfo' is not valid version information" 7372*735d6239SKiyoung Kim ;; 7373*735d6239SKiyoung Kim esac 7374*735d6239SKiyoung Kim 7375*735d6239SKiyoung Kim case $age in 7376*735d6239SKiyoung Kim 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; 7377*735d6239SKiyoung Kim *) 7378*735d6239SKiyoung Kim func_error "AGE \`$age' must be a nonnegative integer" 7379*735d6239SKiyoung Kim func_fatal_error "\`$vinfo' is not valid version information" 7380*735d6239SKiyoung Kim ;; 7381*735d6239SKiyoung Kim esac 7382*735d6239SKiyoung Kim 7383*735d6239SKiyoung Kim if test "$age" -gt "$current"; then 7384*735d6239SKiyoung Kim func_error "AGE \`$age' is greater than the current interface number \`$current'" 7385*735d6239SKiyoung Kim func_fatal_error "\`$vinfo' is not valid version information" 7386*735d6239SKiyoung Kim fi 7387*735d6239SKiyoung Kim 7388*735d6239SKiyoung Kim # Calculate the version variables. 7389*735d6239SKiyoung Kim major= 7390*735d6239SKiyoung Kim versuffix= 7391*735d6239SKiyoung Kim verstring= 7392*735d6239SKiyoung Kim case $version_type in 7393*735d6239SKiyoung Kim none) ;; 7394*735d6239SKiyoung Kim 7395*735d6239SKiyoung Kim darwin) 7396*735d6239SKiyoung Kim # Like Linux, but with the current version available in 7397*735d6239SKiyoung Kim # verstring for coding it into the library header 7398*735d6239SKiyoung Kim func_arith $current - $age 7399*735d6239SKiyoung Kim major=.$func_arith_result 7400*735d6239SKiyoung Kim versuffix="$major.$age.$revision" 7401*735d6239SKiyoung Kim # Darwin ld doesn't like 0 for these options... 7402*735d6239SKiyoung Kim func_arith $current + 1 7403*735d6239SKiyoung Kim minor_current=$func_arith_result 7404*735d6239SKiyoung Kim xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7405*735d6239SKiyoung Kim verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7406*735d6239SKiyoung Kim ;; 7407*735d6239SKiyoung Kim 7408*735d6239SKiyoung Kim freebsd-aout) 7409*735d6239SKiyoung Kim major=".$current" 7410*735d6239SKiyoung Kim versuffix=".$current.$revision"; 7411*735d6239SKiyoung Kim ;; 7412*735d6239SKiyoung Kim 7413*735d6239SKiyoung Kim freebsd-elf) 7414*735d6239SKiyoung Kim major=".$current" 7415*735d6239SKiyoung Kim versuffix=".$current" 7416*735d6239SKiyoung Kim ;; 7417*735d6239SKiyoung Kim 7418*735d6239SKiyoung Kim irix | nonstopux) 7419*735d6239SKiyoung Kim if test "X$lt_irix_increment" = "Xno"; then 7420*735d6239SKiyoung Kim func_arith $current - $age 7421*735d6239SKiyoung Kim else 7422*735d6239SKiyoung Kim func_arith $current - $age + 1 7423*735d6239SKiyoung Kim fi 7424*735d6239SKiyoung Kim major=$func_arith_result 7425*735d6239SKiyoung Kim 7426*735d6239SKiyoung Kim case $version_type in 7427*735d6239SKiyoung Kim nonstopux) verstring_prefix=nonstopux ;; 7428*735d6239SKiyoung Kim *) verstring_prefix=sgi ;; 7429*735d6239SKiyoung Kim esac 7430*735d6239SKiyoung Kim verstring="$verstring_prefix$major.$revision" 7431*735d6239SKiyoung Kim 7432*735d6239SKiyoung Kim # Add in all the interfaces that we are compatible with. 7433*735d6239SKiyoung Kim loop=$revision 7434*735d6239SKiyoung Kim while test "$loop" -ne 0; do 7435*735d6239SKiyoung Kim func_arith $revision - $loop 7436*735d6239SKiyoung Kim iface=$func_arith_result 7437*735d6239SKiyoung Kim func_arith $loop - 1 7438*735d6239SKiyoung Kim loop=$func_arith_result 7439*735d6239SKiyoung Kim verstring="$verstring_prefix$major.$iface:$verstring" 7440*735d6239SKiyoung Kim done 7441*735d6239SKiyoung Kim 7442*735d6239SKiyoung Kim # Before this point, $major must not contain `.'. 7443*735d6239SKiyoung Kim major=.$major 7444*735d6239SKiyoung Kim versuffix="$major.$revision" 7445*735d6239SKiyoung Kim ;; 7446*735d6239SKiyoung Kim 7447*735d6239SKiyoung Kim linux) 7448*735d6239SKiyoung Kim func_arith $current - $age 7449*735d6239SKiyoung Kim major=.$func_arith_result 7450*735d6239SKiyoung Kim versuffix="$major.$age.$revision" 7451*735d6239SKiyoung Kim ;; 7452*735d6239SKiyoung Kim 7453*735d6239SKiyoung Kim osf) 7454*735d6239SKiyoung Kim func_arith $current - $age 7455*735d6239SKiyoung Kim major=.$func_arith_result 7456*735d6239SKiyoung Kim versuffix=".$current.$age.$revision" 7457*735d6239SKiyoung Kim verstring="$current.$age.$revision" 7458*735d6239SKiyoung Kim 7459*735d6239SKiyoung Kim # Add in all the interfaces that we are compatible with. 7460*735d6239SKiyoung Kim loop=$age 7461*735d6239SKiyoung Kim while test "$loop" -ne 0; do 7462*735d6239SKiyoung Kim func_arith $current - $loop 7463*735d6239SKiyoung Kim iface=$func_arith_result 7464*735d6239SKiyoung Kim func_arith $loop - 1 7465*735d6239SKiyoung Kim loop=$func_arith_result 7466*735d6239SKiyoung Kim verstring="$verstring:${iface}.0" 7467*735d6239SKiyoung Kim done 7468*735d6239SKiyoung Kim 7469*735d6239SKiyoung Kim # Make executables depend on our current version. 7470*735d6239SKiyoung Kim func_append verstring ":${current}.0" 7471*735d6239SKiyoung Kim ;; 7472*735d6239SKiyoung Kim 7473*735d6239SKiyoung Kim qnx) 7474*735d6239SKiyoung Kim major=".$current" 7475*735d6239SKiyoung Kim versuffix=".$current" 7476*735d6239SKiyoung Kim ;; 7477*735d6239SKiyoung Kim 7478*735d6239SKiyoung Kim sunos) 7479*735d6239SKiyoung Kim major=".$current" 7480*735d6239SKiyoung Kim versuffix=".$current.$revision" 7481*735d6239SKiyoung Kim ;; 7482*735d6239SKiyoung Kim 7483*735d6239SKiyoung Kim windows) 7484*735d6239SKiyoung Kim # Use '-' rather than '.', since we only want one 7485*735d6239SKiyoung Kim # extension on DOS 8.3 filesystems. 7486*735d6239SKiyoung Kim func_arith $current - $age 7487*735d6239SKiyoung Kim major=$func_arith_result 7488*735d6239SKiyoung Kim versuffix="-$major" 7489*735d6239SKiyoung Kim ;; 7490*735d6239SKiyoung Kim 7491*735d6239SKiyoung Kim *) 7492*735d6239SKiyoung Kim func_fatal_configuration "unknown library version type \`$version_type'" 7493*735d6239SKiyoung Kim ;; 7494*735d6239SKiyoung Kim esac 7495*735d6239SKiyoung Kim 7496*735d6239SKiyoung Kim # Clear the version info if we defaulted, and they specified a release. 7497*735d6239SKiyoung Kim if test -z "$vinfo" && test -n "$release"; then 7498*735d6239SKiyoung Kim major= 7499*735d6239SKiyoung Kim case $version_type in 7500*735d6239SKiyoung Kim darwin) 7501*735d6239SKiyoung Kim # we can't check for "0.0" in archive_cmds due to quoting 7502*735d6239SKiyoung Kim # problems, so we reset it completely 7503*735d6239SKiyoung Kim verstring= 7504*735d6239SKiyoung Kim ;; 7505*735d6239SKiyoung Kim *) 7506*735d6239SKiyoung Kim verstring="0.0" 7507*735d6239SKiyoung Kim ;; 7508*735d6239SKiyoung Kim esac 7509*735d6239SKiyoung Kim if test "$need_version" = no; then 7510*735d6239SKiyoung Kim versuffix= 7511*735d6239SKiyoung Kim else 7512*735d6239SKiyoung Kim versuffix=".0.0" 7513*735d6239SKiyoung Kim fi 7514*735d6239SKiyoung Kim fi 7515*735d6239SKiyoung Kim 7516*735d6239SKiyoung Kim # Remove version info from name if versioning should be avoided 7517*735d6239SKiyoung Kim if test "$avoid_version" = yes && test "$need_version" = no; then 7518*735d6239SKiyoung Kim major= 7519*735d6239SKiyoung Kim versuffix= 7520*735d6239SKiyoung Kim verstring="" 7521*735d6239SKiyoung Kim fi 7522*735d6239SKiyoung Kim 7523*735d6239SKiyoung Kim # Check to see if the archive will have undefined symbols. 7524*735d6239SKiyoung Kim if test "$allow_undefined" = yes; then 7525*735d6239SKiyoung Kim if test "$allow_undefined_flag" = unsupported; then 7526*735d6239SKiyoung Kim func_warning "undefined symbols not allowed in $host shared libraries" 7527*735d6239SKiyoung Kim build_libtool_libs=no 7528*735d6239SKiyoung Kim build_old_libs=yes 7529*735d6239SKiyoung Kim fi 7530*735d6239SKiyoung Kim else 7531*735d6239SKiyoung Kim # Don't allow undefined symbols. 7532*735d6239SKiyoung Kim allow_undefined_flag="$no_undefined_flag" 7533*735d6239SKiyoung Kim fi 7534*735d6239SKiyoung Kim 7535*735d6239SKiyoung Kim fi 7536*735d6239SKiyoung Kim 7537*735d6239SKiyoung Kim func_generate_dlsyms "$libname" "$libname" "yes" 7538*735d6239SKiyoung Kim func_append libobjs " $symfileobj" 7539*735d6239SKiyoung Kim test "X$libobjs" = "X " && libobjs= 7540*735d6239SKiyoung Kim 7541*735d6239SKiyoung Kim if test "$opt_mode" != relink; then 7542*735d6239SKiyoung Kim # Remove our outputs, but don't remove object files since they 7543*735d6239SKiyoung Kim # may have been created when compiling PIC objects. 7544*735d6239SKiyoung Kim removelist= 7545*735d6239SKiyoung Kim tempremovelist=`$ECHO "$output_objdir/*"` 7546*735d6239SKiyoung Kim for p in $tempremovelist; do 7547*735d6239SKiyoung Kim case $p in 7548*735d6239SKiyoung Kim *.$objext | *.gcno) 7549*735d6239SKiyoung Kim ;; 7550*735d6239SKiyoung Kim $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7551*735d6239SKiyoung Kim if test "X$precious_files_regex" != "X"; then 7552*735d6239SKiyoung Kim if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7553*735d6239SKiyoung Kim then 7554*735d6239SKiyoung Kim continue 7555*735d6239SKiyoung Kim fi 7556*735d6239SKiyoung Kim fi 7557*735d6239SKiyoung Kim func_append removelist " $p" 7558*735d6239SKiyoung Kim ;; 7559*735d6239SKiyoung Kim *) ;; 7560*735d6239SKiyoung Kim esac 7561*735d6239SKiyoung Kim done 7562*735d6239SKiyoung Kim test -n "$removelist" && \ 7563*735d6239SKiyoung Kim func_show_eval "${RM}r \$removelist" 7564*735d6239SKiyoung Kim fi 7565*735d6239SKiyoung Kim 7566*735d6239SKiyoung Kim # Now set the variables for building old libraries. 7567*735d6239SKiyoung Kim if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 7568*735d6239SKiyoung Kim func_append oldlibs " $output_objdir/$libname.$libext" 7569*735d6239SKiyoung Kim 7570*735d6239SKiyoung Kim # Transform .lo files to .o files. 7571*735d6239SKiyoung Kim oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7572*735d6239SKiyoung Kim fi 7573*735d6239SKiyoung Kim 7574*735d6239SKiyoung Kim # Eliminate all temporary directories. 7575*735d6239SKiyoung Kim #for path in $notinst_path; do 7576*735d6239SKiyoung Kim # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 7577*735d6239SKiyoung Kim # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 7578*735d6239SKiyoung Kim # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7579*735d6239SKiyoung Kim #done 7580*735d6239SKiyoung Kim 7581*735d6239SKiyoung Kim if test -n "$xrpath"; then 7582*735d6239SKiyoung Kim # If the user specified any rpath flags, then add them. 7583*735d6239SKiyoung Kim temp_xrpath= 7584*735d6239SKiyoung Kim for libdir in $xrpath; do 7585*735d6239SKiyoung Kim func_replace_sysroot "$libdir" 7586*735d6239SKiyoung Kim func_append temp_xrpath " -R$func_replace_sysroot_result" 7587*735d6239SKiyoung Kim case "$finalize_rpath " in 7588*735d6239SKiyoung Kim *" $libdir "*) ;; 7589*735d6239SKiyoung Kim *) func_append finalize_rpath " $libdir" ;; 7590*735d6239SKiyoung Kim esac 7591*735d6239SKiyoung Kim done 7592*735d6239SKiyoung Kim if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7593*735d6239SKiyoung Kim dependency_libs="$temp_xrpath $dependency_libs" 7594*735d6239SKiyoung Kim fi 7595*735d6239SKiyoung Kim fi 7596*735d6239SKiyoung Kim 7597*735d6239SKiyoung Kim # Make sure dlfiles contains only unique files that won't be dlpreopened 7598*735d6239SKiyoung Kim old_dlfiles="$dlfiles" 7599*735d6239SKiyoung Kim dlfiles= 7600*735d6239SKiyoung Kim for lib in $old_dlfiles; do 7601*735d6239SKiyoung Kim case " $dlprefiles $dlfiles " in 7602*735d6239SKiyoung Kim *" $lib "*) ;; 7603*735d6239SKiyoung Kim *) func_append dlfiles " $lib" ;; 7604*735d6239SKiyoung Kim esac 7605*735d6239SKiyoung Kim done 7606*735d6239SKiyoung Kim 7607*735d6239SKiyoung Kim # Make sure dlprefiles contains only unique files 7608*735d6239SKiyoung Kim old_dlprefiles="$dlprefiles" 7609*735d6239SKiyoung Kim dlprefiles= 7610*735d6239SKiyoung Kim for lib in $old_dlprefiles; do 7611*735d6239SKiyoung Kim case "$dlprefiles " in 7612*735d6239SKiyoung Kim *" $lib "*) ;; 7613*735d6239SKiyoung Kim *) func_append dlprefiles " $lib" ;; 7614*735d6239SKiyoung Kim esac 7615*735d6239SKiyoung Kim done 7616*735d6239SKiyoung Kim 7617*735d6239SKiyoung Kim if test "$build_libtool_libs" = yes; then 7618*735d6239SKiyoung Kim if test -n "$rpath"; then 7619*735d6239SKiyoung Kim case $host in 7620*735d6239SKiyoung Kim *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7621*735d6239SKiyoung Kim # these systems don't actually have a c library (as such)! 7622*735d6239SKiyoung Kim ;; 7623*735d6239SKiyoung Kim *-*-rhapsody* | *-*-darwin1.[012]) 7624*735d6239SKiyoung Kim # Rhapsody C library is in the System framework 7625*735d6239SKiyoung Kim func_append deplibs " System.ltframework" 7626*735d6239SKiyoung Kim ;; 7627*735d6239SKiyoung Kim *-*-netbsd*) 7628*735d6239SKiyoung Kim # Don't link with libc until the a.out ld.so is fixed. 7629*735d6239SKiyoung Kim ;; 7630*735d6239SKiyoung Kim *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7631*735d6239SKiyoung Kim # Do not include libc due to us having libc/libc_r. 7632*735d6239SKiyoung Kim ;; 7633*735d6239SKiyoung Kim *-*-sco3.2v5* | *-*-sco5v6*) 7634*735d6239SKiyoung Kim # Causes problems with __ctype 7635*735d6239SKiyoung Kim ;; 7636*735d6239SKiyoung Kim *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7637*735d6239SKiyoung Kim # Compiler inserts libc in the correct place for threads to work 7638*735d6239SKiyoung Kim ;; 7639*735d6239SKiyoung Kim *) 7640*735d6239SKiyoung Kim # Add libc to deplibs on all other systems if necessary. 7641*735d6239SKiyoung Kim if test "$build_libtool_need_lc" = "yes"; then 7642*735d6239SKiyoung Kim func_append deplibs " -lc" 7643*735d6239SKiyoung Kim fi 7644*735d6239SKiyoung Kim ;; 7645*735d6239SKiyoung Kim esac 7646*735d6239SKiyoung Kim fi 7647*735d6239SKiyoung Kim 7648*735d6239SKiyoung Kim # Transform deplibs into only deplibs that can be linked in shared. 7649*735d6239SKiyoung Kim name_save=$name 7650*735d6239SKiyoung Kim libname_save=$libname 7651*735d6239SKiyoung Kim release_save=$release 7652*735d6239SKiyoung Kim versuffix_save=$versuffix 7653*735d6239SKiyoung Kim major_save=$major 7654*735d6239SKiyoung Kim # I'm not sure if I'm treating the release correctly. I think 7655*735d6239SKiyoung Kim # release should show up in the -l (ie -lgmp5) so we don't want to 7656*735d6239SKiyoung Kim # add it in twice. Is that correct? 7657*735d6239SKiyoung Kim release="" 7658*735d6239SKiyoung Kim versuffix="" 7659*735d6239SKiyoung Kim major="" 7660*735d6239SKiyoung Kim newdeplibs= 7661*735d6239SKiyoung Kim droppeddeps=no 7662*735d6239SKiyoung Kim case $deplibs_check_method in 7663*735d6239SKiyoung Kim pass_all) 7664*735d6239SKiyoung Kim # Don't check for shared/static. Everything works. 7665*735d6239SKiyoung Kim # This might be a little naive. We might want to check 7666*735d6239SKiyoung Kim # whether the library exists or not. But this is on 7667*735d6239SKiyoung Kim # osf3 & osf4 and I'm not really sure... Just 7668*735d6239SKiyoung Kim # implementing what was already the behavior. 7669*735d6239SKiyoung Kim newdeplibs=$deplibs 7670*735d6239SKiyoung Kim ;; 7671*735d6239SKiyoung Kim test_compile) 7672*735d6239SKiyoung Kim # This code stresses the "libraries are programs" paradigm to its 7673*735d6239SKiyoung Kim # limits. Maybe even breaks it. We compile a program, linking it 7674*735d6239SKiyoung Kim # against the deplibs as a proxy for the library. Then we can check 7675*735d6239SKiyoung Kim # whether they linked in statically or dynamically with ldd. 7676*735d6239SKiyoung Kim $opt_dry_run || $RM conftest.c 7677*735d6239SKiyoung Kim cat > conftest.c <<EOF 7678*735d6239SKiyoung Kim int main() { return 0; } 7679*735d6239SKiyoung KimEOF 7680*735d6239SKiyoung Kim $opt_dry_run || $RM conftest 7681*735d6239SKiyoung Kim if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7682*735d6239SKiyoung Kim ldd_output=`ldd conftest` 7683*735d6239SKiyoung Kim for i in $deplibs; do 7684*735d6239SKiyoung Kim case $i in 7685*735d6239SKiyoung Kim -l*) 7686*735d6239SKiyoung Kim func_stripname -l '' "$i" 7687*735d6239SKiyoung Kim name=$func_stripname_result 7688*735d6239SKiyoung Kim if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7689*735d6239SKiyoung Kim case " $predeps $postdeps " in 7690*735d6239SKiyoung Kim *" $i "*) 7691*735d6239SKiyoung Kim func_append newdeplibs " $i" 7692*735d6239SKiyoung Kim i="" 7693*735d6239SKiyoung Kim ;; 7694*735d6239SKiyoung Kim esac 7695*735d6239SKiyoung Kim fi 7696*735d6239SKiyoung Kim if test -n "$i" ; then 7697*735d6239SKiyoung Kim libname=`eval "\\$ECHO \"$libname_spec\""` 7698*735d6239SKiyoung Kim deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7699*735d6239SKiyoung Kim set dummy $deplib_matches; shift 7700*735d6239SKiyoung Kim deplib_match=$1 7701*735d6239SKiyoung Kim if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7702*735d6239SKiyoung Kim func_append newdeplibs " $i" 7703*735d6239SKiyoung Kim else 7704*735d6239SKiyoung Kim droppeddeps=yes 7705*735d6239SKiyoung Kim echo 7706*735d6239SKiyoung Kim $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7707*735d6239SKiyoung Kim echo "*** I have the capability to make that library automatically link in when" 7708*735d6239SKiyoung Kim echo "*** you link to this library. But I can only do this if you have a" 7709*735d6239SKiyoung Kim echo "*** shared version of the library, which I believe you do not have" 7710*735d6239SKiyoung Kim echo "*** because a test_compile did reveal that the linker did not use it for" 7711*735d6239SKiyoung Kim echo "*** its dynamic dependency list that programs get resolved with at runtime." 7712*735d6239SKiyoung Kim fi 7713*735d6239SKiyoung Kim fi 7714*735d6239SKiyoung Kim ;; 7715*735d6239SKiyoung Kim *) 7716*735d6239SKiyoung Kim func_append newdeplibs " $i" 7717*735d6239SKiyoung Kim ;; 7718*735d6239SKiyoung Kim esac 7719*735d6239SKiyoung Kim done 7720*735d6239SKiyoung Kim else 7721*735d6239SKiyoung Kim # Error occurred in the first compile. Let's try to salvage 7722*735d6239SKiyoung Kim # the situation: Compile a separate program for each library. 7723*735d6239SKiyoung Kim for i in $deplibs; do 7724*735d6239SKiyoung Kim case $i in 7725*735d6239SKiyoung Kim -l*) 7726*735d6239SKiyoung Kim func_stripname -l '' "$i" 7727*735d6239SKiyoung Kim name=$func_stripname_result 7728*735d6239SKiyoung Kim $opt_dry_run || $RM conftest 7729*735d6239SKiyoung Kim if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7730*735d6239SKiyoung Kim ldd_output=`ldd conftest` 7731*735d6239SKiyoung Kim if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7732*735d6239SKiyoung Kim case " $predeps $postdeps " in 7733*735d6239SKiyoung Kim *" $i "*) 7734*735d6239SKiyoung Kim func_append newdeplibs " $i" 7735*735d6239SKiyoung Kim i="" 7736*735d6239SKiyoung Kim ;; 7737*735d6239SKiyoung Kim esac 7738*735d6239SKiyoung Kim fi 7739*735d6239SKiyoung Kim if test -n "$i" ; then 7740*735d6239SKiyoung Kim libname=`eval "\\$ECHO \"$libname_spec\""` 7741*735d6239SKiyoung Kim deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7742*735d6239SKiyoung Kim set dummy $deplib_matches; shift 7743*735d6239SKiyoung Kim deplib_match=$1 7744*735d6239SKiyoung Kim if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7745*735d6239SKiyoung Kim func_append newdeplibs " $i" 7746*735d6239SKiyoung Kim else 7747*735d6239SKiyoung Kim droppeddeps=yes 7748*735d6239SKiyoung Kim echo 7749*735d6239SKiyoung Kim $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7750*735d6239SKiyoung Kim echo "*** I have the capability to make that library automatically link in when" 7751*735d6239SKiyoung Kim echo "*** you link to this library. But I can only do this if you have a" 7752*735d6239SKiyoung Kim echo "*** shared version of the library, which you do not appear to have" 7753*735d6239SKiyoung Kim echo "*** because a test_compile did reveal that the linker did not use this one" 7754*735d6239SKiyoung Kim echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7755*735d6239SKiyoung Kim fi 7756*735d6239SKiyoung Kim fi 7757*735d6239SKiyoung Kim else 7758*735d6239SKiyoung Kim droppeddeps=yes 7759*735d6239SKiyoung Kim echo 7760*735d6239SKiyoung Kim $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 7761*735d6239SKiyoung Kim echo "*** make it link in! You will probably need to install it or some" 7762*735d6239SKiyoung Kim echo "*** library that it depends on before this library will be fully" 7763*735d6239SKiyoung Kim echo "*** functional. Installing it before continuing would be even better." 7764*735d6239SKiyoung Kim fi 7765*735d6239SKiyoung Kim ;; 7766*735d6239SKiyoung Kim *) 7767*735d6239SKiyoung Kim func_append newdeplibs " $i" 7768*735d6239SKiyoung Kim ;; 7769*735d6239SKiyoung Kim esac 7770*735d6239SKiyoung Kim done 7771*735d6239SKiyoung Kim fi 7772*735d6239SKiyoung Kim ;; 7773*735d6239SKiyoung Kim file_magic*) 7774*735d6239SKiyoung Kim set dummy $deplibs_check_method; shift 7775*735d6239SKiyoung Kim file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7776*735d6239SKiyoung Kim for a_deplib in $deplibs; do 7777*735d6239SKiyoung Kim case $a_deplib in 7778*735d6239SKiyoung Kim -l*) 7779*735d6239SKiyoung Kim func_stripname -l '' "$a_deplib" 7780*735d6239SKiyoung Kim name=$func_stripname_result 7781*735d6239SKiyoung Kim if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7782*735d6239SKiyoung Kim case " $predeps $postdeps " in 7783*735d6239SKiyoung Kim *" $a_deplib "*) 7784*735d6239SKiyoung Kim func_append newdeplibs " $a_deplib" 7785*735d6239SKiyoung Kim a_deplib="" 7786*735d6239SKiyoung Kim ;; 7787*735d6239SKiyoung Kim esac 7788*735d6239SKiyoung Kim fi 7789*735d6239SKiyoung Kim if test -n "$a_deplib" ; then 7790*735d6239SKiyoung Kim libname=`eval "\\$ECHO \"$libname_spec\""` 7791*735d6239SKiyoung Kim if test -n "$file_magic_glob"; then 7792*735d6239SKiyoung Kim libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 7793*735d6239SKiyoung Kim else 7794*735d6239SKiyoung Kim libnameglob=$libname 7795*735d6239SKiyoung Kim fi 7796*735d6239SKiyoung Kim test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7797*735d6239SKiyoung Kim for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7798*735d6239SKiyoung Kim if test "$want_nocaseglob" = yes; then 7799*735d6239SKiyoung Kim shopt -s nocaseglob 7800*735d6239SKiyoung Kim potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7801*735d6239SKiyoung Kim $nocaseglob 7802*735d6239SKiyoung Kim else 7803*735d6239SKiyoung Kim potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7804*735d6239SKiyoung Kim fi 7805*735d6239SKiyoung Kim for potent_lib in $potential_libs; do 7806*735d6239SKiyoung Kim # Follow soft links. 7807*735d6239SKiyoung Kim if ls -lLd "$potent_lib" 2>/dev/null | 7808*735d6239SKiyoung Kim $GREP " -> " >/dev/null; then 7809*735d6239SKiyoung Kim continue 7810*735d6239SKiyoung Kim fi 7811*735d6239SKiyoung Kim # The statement above tries to avoid entering an 7812*735d6239SKiyoung Kim # endless loop below, in case of cyclic links. 7813*735d6239SKiyoung Kim # We might still enter an endless loop, since a link 7814*735d6239SKiyoung Kim # loop can be closed while we follow links, 7815*735d6239SKiyoung Kim # but so what? 7816*735d6239SKiyoung Kim potlib="$potent_lib" 7817*735d6239SKiyoung Kim while test -h "$potlib" 2>/dev/null; do 7818*735d6239SKiyoung Kim potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7819*735d6239SKiyoung Kim case $potliblink in 7820*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 7821*735d6239SKiyoung Kim *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7822*735d6239SKiyoung Kim esac 7823*735d6239SKiyoung Kim done 7824*735d6239SKiyoung Kim if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7825*735d6239SKiyoung Kim $SED -e 10q | 7826*735d6239SKiyoung Kim $EGREP "$file_magic_regex" > /dev/null; then 7827*735d6239SKiyoung Kim func_append newdeplibs " $a_deplib" 7828*735d6239SKiyoung Kim a_deplib="" 7829*735d6239SKiyoung Kim break 2 7830*735d6239SKiyoung Kim fi 7831*735d6239SKiyoung Kim done 7832*735d6239SKiyoung Kim done 7833*735d6239SKiyoung Kim fi 7834*735d6239SKiyoung Kim if test -n "$a_deplib" ; then 7835*735d6239SKiyoung Kim droppeddeps=yes 7836*735d6239SKiyoung Kim echo 7837*735d6239SKiyoung Kim $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7838*735d6239SKiyoung Kim echo "*** I have the capability to make that library automatically link in when" 7839*735d6239SKiyoung Kim echo "*** you link to this library. But I can only do this if you have a" 7840*735d6239SKiyoung Kim echo "*** shared version of the library, which you do not appear to have" 7841*735d6239SKiyoung Kim echo "*** because I did check the linker path looking for a file starting" 7842*735d6239SKiyoung Kim if test -z "$potlib" ; then 7843*735d6239SKiyoung Kim $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7844*735d6239SKiyoung Kim else 7845*735d6239SKiyoung Kim $ECHO "*** with $libname and none of the candidates passed a file format test" 7846*735d6239SKiyoung Kim $ECHO "*** using a file magic. Last file checked: $potlib" 7847*735d6239SKiyoung Kim fi 7848*735d6239SKiyoung Kim fi 7849*735d6239SKiyoung Kim ;; 7850*735d6239SKiyoung Kim *) 7851*735d6239SKiyoung Kim # Add a -L argument. 7852*735d6239SKiyoung Kim func_append newdeplibs " $a_deplib" 7853*735d6239SKiyoung Kim ;; 7854*735d6239SKiyoung Kim esac 7855*735d6239SKiyoung Kim done # Gone through all deplibs. 7856*735d6239SKiyoung Kim ;; 7857*735d6239SKiyoung Kim match_pattern*) 7858*735d6239SKiyoung Kim set dummy $deplibs_check_method; shift 7859*735d6239SKiyoung Kim match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7860*735d6239SKiyoung Kim for a_deplib in $deplibs; do 7861*735d6239SKiyoung Kim case $a_deplib in 7862*735d6239SKiyoung Kim -l*) 7863*735d6239SKiyoung Kim func_stripname -l '' "$a_deplib" 7864*735d6239SKiyoung Kim name=$func_stripname_result 7865*735d6239SKiyoung Kim if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7866*735d6239SKiyoung Kim case " $predeps $postdeps " in 7867*735d6239SKiyoung Kim *" $a_deplib "*) 7868*735d6239SKiyoung Kim func_append newdeplibs " $a_deplib" 7869*735d6239SKiyoung Kim a_deplib="" 7870*735d6239SKiyoung Kim ;; 7871*735d6239SKiyoung Kim esac 7872*735d6239SKiyoung Kim fi 7873*735d6239SKiyoung Kim if test -n "$a_deplib" ; then 7874*735d6239SKiyoung Kim libname=`eval "\\$ECHO \"$libname_spec\""` 7875*735d6239SKiyoung Kim for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7876*735d6239SKiyoung Kim potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7877*735d6239SKiyoung Kim for potent_lib in $potential_libs; do 7878*735d6239SKiyoung Kim potlib="$potent_lib" # see symlink-check above in file_magic test 7879*735d6239SKiyoung Kim if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7880*735d6239SKiyoung Kim $EGREP "$match_pattern_regex" > /dev/null; then 7881*735d6239SKiyoung Kim func_append newdeplibs " $a_deplib" 7882*735d6239SKiyoung Kim a_deplib="" 7883*735d6239SKiyoung Kim break 2 7884*735d6239SKiyoung Kim fi 7885*735d6239SKiyoung Kim done 7886*735d6239SKiyoung Kim done 7887*735d6239SKiyoung Kim fi 7888*735d6239SKiyoung Kim if test -n "$a_deplib" ; then 7889*735d6239SKiyoung Kim droppeddeps=yes 7890*735d6239SKiyoung Kim echo 7891*735d6239SKiyoung Kim $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7892*735d6239SKiyoung Kim echo "*** I have the capability to make that library automatically link in when" 7893*735d6239SKiyoung Kim echo "*** you link to this library. But I can only do this if you have a" 7894*735d6239SKiyoung Kim echo "*** shared version of the library, which you do not appear to have" 7895*735d6239SKiyoung Kim echo "*** because I did check the linker path looking for a file starting" 7896*735d6239SKiyoung Kim if test -z "$potlib" ; then 7897*735d6239SKiyoung Kim $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7898*735d6239SKiyoung Kim else 7899*735d6239SKiyoung Kim $ECHO "*** with $libname and none of the candidates passed a file format test" 7900*735d6239SKiyoung Kim $ECHO "*** using a regex pattern. Last file checked: $potlib" 7901*735d6239SKiyoung Kim fi 7902*735d6239SKiyoung Kim fi 7903*735d6239SKiyoung Kim ;; 7904*735d6239SKiyoung Kim *) 7905*735d6239SKiyoung Kim # Add a -L argument. 7906*735d6239SKiyoung Kim func_append newdeplibs " $a_deplib" 7907*735d6239SKiyoung Kim ;; 7908*735d6239SKiyoung Kim esac 7909*735d6239SKiyoung Kim done # Gone through all deplibs. 7910*735d6239SKiyoung Kim ;; 7911*735d6239SKiyoung Kim none | unknown | *) 7912*735d6239SKiyoung Kim newdeplibs="" 7913*735d6239SKiyoung Kim tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7914*735d6239SKiyoung Kim if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7915*735d6239SKiyoung Kim for i in $predeps $postdeps ; do 7916*735d6239SKiyoung Kim # can't use Xsed below, because $i might contain '/' 7917*735d6239SKiyoung Kim tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7918*735d6239SKiyoung Kim done 7919*735d6239SKiyoung Kim fi 7920*735d6239SKiyoung Kim case $tmp_deplibs in 7921*735d6239SKiyoung Kim *[!\ \ ]*) 7922*735d6239SKiyoung Kim echo 7923*735d6239SKiyoung Kim if test "X$deplibs_check_method" = "Xnone"; then 7924*735d6239SKiyoung Kim echo "*** Warning: inter-library dependencies are not supported in this platform." 7925*735d6239SKiyoung Kim else 7926*735d6239SKiyoung Kim echo "*** Warning: inter-library dependencies are not known to be supported." 7927*735d6239SKiyoung Kim fi 7928*735d6239SKiyoung Kim echo "*** All declared inter-library dependencies are being dropped." 7929*735d6239SKiyoung Kim droppeddeps=yes 7930*735d6239SKiyoung Kim ;; 7931*735d6239SKiyoung Kim esac 7932*735d6239SKiyoung Kim ;; 7933*735d6239SKiyoung Kim esac 7934*735d6239SKiyoung Kim versuffix=$versuffix_save 7935*735d6239SKiyoung Kim major=$major_save 7936*735d6239SKiyoung Kim release=$release_save 7937*735d6239SKiyoung Kim libname=$libname_save 7938*735d6239SKiyoung Kim name=$name_save 7939*735d6239SKiyoung Kim 7940*735d6239SKiyoung Kim case $host in 7941*735d6239SKiyoung Kim *-*-rhapsody* | *-*-darwin1.[012]) 7942*735d6239SKiyoung Kim # On Rhapsody replace the C library with the System framework 7943*735d6239SKiyoung Kim newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7944*735d6239SKiyoung Kim ;; 7945*735d6239SKiyoung Kim esac 7946*735d6239SKiyoung Kim 7947*735d6239SKiyoung Kim if test "$droppeddeps" = yes; then 7948*735d6239SKiyoung Kim if test "$module" = yes; then 7949*735d6239SKiyoung Kim echo 7950*735d6239SKiyoung Kim echo "*** Warning: libtool could not satisfy all declared inter-library" 7951*735d6239SKiyoung Kim $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7952*735d6239SKiyoung Kim echo "*** a static module, that should work as long as the dlopening" 7953*735d6239SKiyoung Kim echo "*** application is linked with the -dlopen flag." 7954*735d6239SKiyoung Kim if test -z "$global_symbol_pipe"; then 7955*735d6239SKiyoung Kim echo 7956*735d6239SKiyoung Kim echo "*** However, this would only work if libtool was able to extract symbol" 7957*735d6239SKiyoung Kim echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7958*735d6239SKiyoung Kim echo "*** not find such a program. So, this module is probably useless." 7959*735d6239SKiyoung Kim echo "*** \`nm' from GNU binutils and a full rebuild may help." 7960*735d6239SKiyoung Kim fi 7961*735d6239SKiyoung Kim if test "$build_old_libs" = no; then 7962*735d6239SKiyoung Kim oldlibs="$output_objdir/$libname.$libext" 7963*735d6239SKiyoung Kim build_libtool_libs=module 7964*735d6239SKiyoung Kim build_old_libs=yes 7965*735d6239SKiyoung Kim else 7966*735d6239SKiyoung Kim build_libtool_libs=no 7967*735d6239SKiyoung Kim fi 7968*735d6239SKiyoung Kim else 7969*735d6239SKiyoung Kim echo "*** The inter-library dependencies that have been dropped here will be" 7970*735d6239SKiyoung Kim echo "*** automatically added whenever a program is linked with this library" 7971*735d6239SKiyoung Kim echo "*** or is declared to -dlopen it." 7972*735d6239SKiyoung Kim 7973*735d6239SKiyoung Kim if test "$allow_undefined" = no; then 7974*735d6239SKiyoung Kim echo 7975*735d6239SKiyoung Kim echo "*** Since this library must not contain undefined symbols," 7976*735d6239SKiyoung Kim echo "*** because either the platform does not support them or" 7977*735d6239SKiyoung Kim echo "*** it was explicitly requested with -no-undefined," 7978*735d6239SKiyoung Kim echo "*** libtool will only create a static version of it." 7979*735d6239SKiyoung Kim if test "$build_old_libs" = no; then 7980*735d6239SKiyoung Kim oldlibs="$output_objdir/$libname.$libext" 7981*735d6239SKiyoung Kim build_libtool_libs=module 7982*735d6239SKiyoung Kim build_old_libs=yes 7983*735d6239SKiyoung Kim else 7984*735d6239SKiyoung Kim build_libtool_libs=no 7985*735d6239SKiyoung Kim fi 7986*735d6239SKiyoung Kim fi 7987*735d6239SKiyoung Kim fi 7988*735d6239SKiyoung Kim fi 7989*735d6239SKiyoung Kim # Done checking deplibs! 7990*735d6239SKiyoung Kim deplibs=$newdeplibs 7991*735d6239SKiyoung Kim fi 7992*735d6239SKiyoung Kim # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7993*735d6239SKiyoung Kim case $host in 7994*735d6239SKiyoung Kim *-*-darwin*) 7995*735d6239SKiyoung Kim newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7996*735d6239SKiyoung Kim new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7997*735d6239SKiyoung Kim deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7998*735d6239SKiyoung Kim ;; 7999*735d6239SKiyoung Kim esac 8000*735d6239SKiyoung Kim 8001*735d6239SKiyoung Kim # move library search paths that coincide with paths to not yet 8002*735d6239SKiyoung Kim # installed libraries to the beginning of the library search list 8003*735d6239SKiyoung Kim new_libs= 8004*735d6239SKiyoung Kim for path in $notinst_path; do 8005*735d6239SKiyoung Kim case " $new_libs " in 8006*735d6239SKiyoung Kim *" -L$path/$objdir "*) ;; 8007*735d6239SKiyoung Kim *) 8008*735d6239SKiyoung Kim case " $deplibs " in 8009*735d6239SKiyoung Kim *" -L$path/$objdir "*) 8010*735d6239SKiyoung Kim func_append new_libs " -L$path/$objdir" ;; 8011*735d6239SKiyoung Kim esac 8012*735d6239SKiyoung Kim ;; 8013*735d6239SKiyoung Kim esac 8014*735d6239SKiyoung Kim done 8015*735d6239SKiyoung Kim for deplib in $deplibs; do 8016*735d6239SKiyoung Kim case $deplib in 8017*735d6239SKiyoung Kim -L*) 8018*735d6239SKiyoung Kim case " $new_libs " in 8019*735d6239SKiyoung Kim *" $deplib "*) ;; 8020*735d6239SKiyoung Kim *) func_append new_libs " $deplib" ;; 8021*735d6239SKiyoung Kim esac 8022*735d6239SKiyoung Kim ;; 8023*735d6239SKiyoung Kim *) func_append new_libs " $deplib" ;; 8024*735d6239SKiyoung Kim esac 8025*735d6239SKiyoung Kim done 8026*735d6239SKiyoung Kim deplibs="$new_libs" 8027*735d6239SKiyoung Kim 8028*735d6239SKiyoung Kim # All the library-specific variables (install_libdir is set above). 8029*735d6239SKiyoung Kim library_names= 8030*735d6239SKiyoung Kim old_library= 8031*735d6239SKiyoung Kim dlname= 8032*735d6239SKiyoung Kim 8033*735d6239SKiyoung Kim # Test again, we may have decided not to build it any more 8034*735d6239SKiyoung Kim if test "$build_libtool_libs" = yes; then 8035*735d6239SKiyoung Kim if test "$hardcode_into_libs" = yes; then 8036*735d6239SKiyoung Kim # Hardcode the library paths 8037*735d6239SKiyoung Kim hardcode_libdirs= 8038*735d6239SKiyoung Kim dep_rpath= 8039*735d6239SKiyoung Kim rpath="$finalize_rpath" 8040*735d6239SKiyoung Kim test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8041*735d6239SKiyoung Kim for libdir in $rpath; do 8042*735d6239SKiyoung Kim if test -n "$hardcode_libdir_flag_spec"; then 8043*735d6239SKiyoung Kim if test -n "$hardcode_libdir_separator"; then 8044*735d6239SKiyoung Kim func_replace_sysroot "$libdir" 8045*735d6239SKiyoung Kim libdir=$func_replace_sysroot_result 8046*735d6239SKiyoung Kim if test -z "$hardcode_libdirs"; then 8047*735d6239SKiyoung Kim hardcode_libdirs="$libdir" 8048*735d6239SKiyoung Kim else 8049*735d6239SKiyoung Kim # Just accumulate the unique libdirs. 8050*735d6239SKiyoung Kim case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8051*735d6239SKiyoung Kim *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8052*735d6239SKiyoung Kim ;; 8053*735d6239SKiyoung Kim *) 8054*735d6239SKiyoung Kim func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8055*735d6239SKiyoung Kim ;; 8056*735d6239SKiyoung Kim esac 8057*735d6239SKiyoung Kim fi 8058*735d6239SKiyoung Kim else 8059*735d6239SKiyoung Kim eval flag=\"$hardcode_libdir_flag_spec\" 8060*735d6239SKiyoung Kim func_append dep_rpath " $flag" 8061*735d6239SKiyoung Kim fi 8062*735d6239SKiyoung Kim elif test -n "$runpath_var"; then 8063*735d6239SKiyoung Kim case "$perm_rpath " in 8064*735d6239SKiyoung Kim *" $libdir "*) ;; 8065*735d6239SKiyoung Kim *) func_apped perm_rpath " $libdir" ;; 8066*735d6239SKiyoung Kim esac 8067*735d6239SKiyoung Kim fi 8068*735d6239SKiyoung Kim done 8069*735d6239SKiyoung Kim # Substitute the hardcoded libdirs into the rpath. 8070*735d6239SKiyoung Kim if test -n "$hardcode_libdir_separator" && 8071*735d6239SKiyoung Kim test -n "$hardcode_libdirs"; then 8072*735d6239SKiyoung Kim libdir="$hardcode_libdirs" 8073*735d6239SKiyoung Kim if test -n "$hardcode_libdir_flag_spec_ld"; then 8074*735d6239SKiyoung Kim eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 8075*735d6239SKiyoung Kim else 8076*735d6239SKiyoung Kim eval dep_rpath=\"$hardcode_libdir_flag_spec\" 8077*735d6239SKiyoung Kim fi 8078*735d6239SKiyoung Kim fi 8079*735d6239SKiyoung Kim if test -n "$runpath_var" && test -n "$perm_rpath"; then 8080*735d6239SKiyoung Kim # We should set the runpath_var. 8081*735d6239SKiyoung Kim rpath= 8082*735d6239SKiyoung Kim for dir in $perm_rpath; do 8083*735d6239SKiyoung Kim func_append rpath "$dir:" 8084*735d6239SKiyoung Kim done 8085*735d6239SKiyoung Kim eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8086*735d6239SKiyoung Kim fi 8087*735d6239SKiyoung Kim test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8088*735d6239SKiyoung Kim fi 8089*735d6239SKiyoung Kim 8090*735d6239SKiyoung Kim shlibpath="$finalize_shlibpath" 8091*735d6239SKiyoung Kim test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8092*735d6239SKiyoung Kim if test -n "$shlibpath"; then 8093*735d6239SKiyoung Kim eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8094*735d6239SKiyoung Kim fi 8095*735d6239SKiyoung Kim 8096*735d6239SKiyoung Kim # Get the real and link names of the library. 8097*735d6239SKiyoung Kim eval shared_ext=\"$shrext_cmds\" 8098*735d6239SKiyoung Kim eval library_names=\"$library_names_spec\" 8099*735d6239SKiyoung Kim set dummy $library_names 8100*735d6239SKiyoung Kim shift 8101*735d6239SKiyoung Kim realname="$1" 8102*735d6239SKiyoung Kim shift 8103*735d6239SKiyoung Kim 8104*735d6239SKiyoung Kim if test -n "$soname_spec"; then 8105*735d6239SKiyoung Kim eval soname=\"$soname_spec\" 8106*735d6239SKiyoung Kim else 8107*735d6239SKiyoung Kim soname="$realname" 8108*735d6239SKiyoung Kim fi 8109*735d6239SKiyoung Kim if test -z "$dlname"; then 8110*735d6239SKiyoung Kim dlname=$soname 8111*735d6239SKiyoung Kim fi 8112*735d6239SKiyoung Kim 8113*735d6239SKiyoung Kim lib="$output_objdir/$realname" 8114*735d6239SKiyoung Kim linknames= 8115*735d6239SKiyoung Kim for link 8116*735d6239SKiyoung Kim do 8117*735d6239SKiyoung Kim func_append linknames " $link" 8118*735d6239SKiyoung Kim done 8119*735d6239SKiyoung Kim 8120*735d6239SKiyoung Kim # Use standard objects if they are pic 8121*735d6239SKiyoung Kim test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8122*735d6239SKiyoung Kim test "X$libobjs" = "X " && libobjs= 8123*735d6239SKiyoung Kim 8124*735d6239SKiyoung Kim delfiles= 8125*735d6239SKiyoung Kim if test -n "$export_symbols" && test -n "$include_expsyms"; then 8126*735d6239SKiyoung Kim $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8127*735d6239SKiyoung Kim export_symbols="$output_objdir/$libname.uexp" 8128*735d6239SKiyoung Kim func_append delfiles " $export_symbols" 8129*735d6239SKiyoung Kim fi 8130*735d6239SKiyoung Kim 8131*735d6239SKiyoung Kim orig_export_symbols= 8132*735d6239SKiyoung Kim case $host_os in 8133*735d6239SKiyoung Kim cygwin* | mingw* | cegcc*) 8134*735d6239SKiyoung Kim if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8135*735d6239SKiyoung Kim # exporting using user supplied symfile 8136*735d6239SKiyoung Kim if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8137*735d6239SKiyoung Kim # and it's NOT already a .def file. Must figure out 8138*735d6239SKiyoung Kim # which of the given symbols are data symbols and tag 8139*735d6239SKiyoung Kim # them as such. So, trigger use of export_symbols_cmds. 8140*735d6239SKiyoung Kim # export_symbols gets reassigned inside the "prepare 8141*735d6239SKiyoung Kim # the list of exported symbols" if statement, so the 8142*735d6239SKiyoung Kim # include_expsyms logic still works. 8143*735d6239SKiyoung Kim orig_export_symbols="$export_symbols" 8144*735d6239SKiyoung Kim export_symbols= 8145*735d6239SKiyoung Kim always_export_symbols=yes 8146*735d6239SKiyoung Kim fi 8147*735d6239SKiyoung Kim fi 8148*735d6239SKiyoung Kim ;; 8149*735d6239SKiyoung Kim esac 8150*735d6239SKiyoung Kim 8151*735d6239SKiyoung Kim # Prepare the list of exported symbols 8152*735d6239SKiyoung Kim if test -z "$export_symbols"; then 8153*735d6239SKiyoung Kim if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8154*735d6239SKiyoung Kim func_verbose "generating symbol list for \`$libname.la'" 8155*735d6239SKiyoung Kim export_symbols="$output_objdir/$libname.exp" 8156*735d6239SKiyoung Kim $opt_dry_run || $RM $export_symbols 8157*735d6239SKiyoung Kim cmds=$export_symbols_cmds 8158*735d6239SKiyoung Kim save_ifs="$IFS"; IFS='~' 8159*735d6239SKiyoung Kim for cmd1 in $cmds; do 8160*735d6239SKiyoung Kim IFS="$save_ifs" 8161*735d6239SKiyoung Kim # Take the normal branch if the nm_file_list_spec branch 8162*735d6239SKiyoung Kim # doesn't work or if tool conversion is not needed. 8163*735d6239SKiyoung Kim case $nm_file_list_spec~$to_tool_file_cmd in 8164*735d6239SKiyoung Kim *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 8165*735d6239SKiyoung Kim try_normal_branch=yes 8166*735d6239SKiyoung Kim eval cmd=\"$cmd1\" 8167*735d6239SKiyoung Kim func_len " $cmd" 8168*735d6239SKiyoung Kim len=$func_len_result 8169*735d6239SKiyoung Kim ;; 8170*735d6239SKiyoung Kim *) 8171*735d6239SKiyoung Kim try_normal_branch=no 8172*735d6239SKiyoung Kim ;; 8173*735d6239SKiyoung Kim esac 8174*735d6239SKiyoung Kim if test "$try_normal_branch" = yes \ 8175*735d6239SKiyoung Kim && { test "$len" -lt "$max_cmd_len" \ 8176*735d6239SKiyoung Kim || test "$max_cmd_len" -le -1; } 8177*735d6239SKiyoung Kim then 8178*735d6239SKiyoung Kim func_show_eval "$cmd" 'exit $?' 8179*735d6239SKiyoung Kim skipped_export=false 8180*735d6239SKiyoung Kim elif test -n "$nm_file_list_spec"; then 8181*735d6239SKiyoung Kim func_basename "$output" 8182*735d6239SKiyoung Kim output_la=$func_basename_result 8183*735d6239SKiyoung Kim save_libobjs=$libobjs 8184*735d6239SKiyoung Kim save_output=$output 8185*735d6239SKiyoung Kim output=${output_objdir}/${output_la}.nm 8186*735d6239SKiyoung Kim func_to_tool_file "$output" 8187*735d6239SKiyoung Kim libobjs=$nm_file_list_spec$func_to_tool_file_result 8188*735d6239SKiyoung Kim func_append delfiles " $output" 8189*735d6239SKiyoung Kim func_verbose "creating $NM input file list: $output" 8190*735d6239SKiyoung Kim for obj in $save_libobjs; do 8191*735d6239SKiyoung Kim func_to_tool_file "$obj" 8192*735d6239SKiyoung Kim $ECHO "$func_to_tool_file_result" 8193*735d6239SKiyoung Kim done > "$output" 8194*735d6239SKiyoung Kim eval cmd=\"$cmd1\" 8195*735d6239SKiyoung Kim func_show_eval "$cmd" 'exit $?' 8196*735d6239SKiyoung Kim output=$save_output 8197*735d6239SKiyoung Kim libobjs=$save_libobjs 8198*735d6239SKiyoung Kim skipped_export=false 8199*735d6239SKiyoung Kim else 8200*735d6239SKiyoung Kim # The command line is too long to execute in one step. 8201*735d6239SKiyoung Kim func_verbose "using reloadable object file for export list..." 8202*735d6239SKiyoung Kim skipped_export=: 8203*735d6239SKiyoung Kim # Break out early, otherwise skipped_export may be 8204*735d6239SKiyoung Kim # set to false by a later but shorter cmd. 8205*735d6239SKiyoung Kim break 8206*735d6239SKiyoung Kim fi 8207*735d6239SKiyoung Kim done 8208*735d6239SKiyoung Kim IFS="$save_ifs" 8209*735d6239SKiyoung Kim if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8210*735d6239SKiyoung Kim func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8211*735d6239SKiyoung Kim func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8212*735d6239SKiyoung Kim fi 8213*735d6239SKiyoung Kim fi 8214*735d6239SKiyoung Kim fi 8215*735d6239SKiyoung Kim 8216*735d6239SKiyoung Kim if test -n "$export_symbols" && test -n "$include_expsyms"; then 8217*735d6239SKiyoung Kim tmp_export_symbols="$export_symbols" 8218*735d6239SKiyoung Kim test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8219*735d6239SKiyoung Kim $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8220*735d6239SKiyoung Kim fi 8221*735d6239SKiyoung Kim 8222*735d6239SKiyoung Kim if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8223*735d6239SKiyoung Kim # The given exports_symbols file has to be filtered, so filter it. 8224*735d6239SKiyoung Kim func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8225*735d6239SKiyoung Kim # FIXME: $output_objdir/$libname.filter potentially contains lots of 8226*735d6239SKiyoung Kim # 's' commands which not all seds can handle. GNU sed should be fine 8227*735d6239SKiyoung Kim # though. Also, the filter scales superlinearly with the number of 8228*735d6239SKiyoung Kim # global variables. join(1) would be nice here, but unfortunately 8229*735d6239SKiyoung Kim # isn't a blessed tool. 8230*735d6239SKiyoung Kim $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8231*735d6239SKiyoung Kim func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8232*735d6239SKiyoung Kim export_symbols=$output_objdir/$libname.def 8233*735d6239SKiyoung Kim $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8234*735d6239SKiyoung Kim fi 8235*735d6239SKiyoung Kim 8236*735d6239SKiyoung Kim tmp_deplibs= 8237*735d6239SKiyoung Kim inst_prefix_arg= 8238*735d6239SKiyoung Kim for test_deplib in $deplibs; do 8239*735d6239SKiyoung Kim case " $convenience " in 8240*735d6239SKiyoung Kim *" $test_deplib "*) ;; 8241*735d6239SKiyoung Kim *) 8242*735d6239SKiyoung Kim if test -n "$inst_prefix_dir" && test "$inst_prefix_dir" != "/" && (echo "$test_deplib" | grep -- "$inst_prefix_dir" >/dev/null); then 8243*735d6239SKiyoung Kim func_append inst_prefix_arg " $test_deplib" 8244*735d6239SKiyoung Kim else 8245*735d6239SKiyoung Kim func_append tmp_deplibs " $test_deplib" 8246*735d6239SKiyoung Kim fi 8247*735d6239SKiyoung Kim ;; 8248*735d6239SKiyoung Kim esac 8249*735d6239SKiyoung Kim done 8250*735d6239SKiyoung Kim deplibs="$tmp_deplibs" 8251*735d6239SKiyoung Kim if test -n "$inst_prefix_arg"; then 8252*735d6239SKiyoung Kim deplibs="$inst_prefix_arg $deplibs" 8253*735d6239SKiyoung Kim fi 8254*735d6239SKiyoung Kim 8255*735d6239SKiyoung Kim if test -n "$convenience"; then 8256*735d6239SKiyoung Kim if test -n "$whole_archive_flag_spec" && 8257*735d6239SKiyoung Kim test "$compiler_needs_object" = yes && 8258*735d6239SKiyoung Kim test -z "$libobjs"; then 8259*735d6239SKiyoung Kim # extract the archives, so we have objects to list. 8260*735d6239SKiyoung Kim # TODO: could optimize this to just extract one archive. 8261*735d6239SKiyoung Kim whole_archive_flag_spec= 8262*735d6239SKiyoung Kim fi 8263*735d6239SKiyoung Kim if test -n "$whole_archive_flag_spec"; then 8264*735d6239SKiyoung Kim save_libobjs=$libobjs 8265*735d6239SKiyoung Kim eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8266*735d6239SKiyoung Kim test "X$libobjs" = "X " && libobjs= 8267*735d6239SKiyoung Kim else 8268*735d6239SKiyoung Kim gentop="$output_objdir/${outputname}x" 8269*735d6239SKiyoung Kim func_append generated " $gentop" 8270*735d6239SKiyoung Kim 8271*735d6239SKiyoung Kim func_extract_archives $gentop $convenience 8272*735d6239SKiyoung Kim func_append libobjs " $func_extract_archives_result" 8273*735d6239SKiyoung Kim test "X$libobjs" = "X " && libobjs= 8274*735d6239SKiyoung Kim fi 8275*735d6239SKiyoung Kim fi 8276*735d6239SKiyoung Kim 8277*735d6239SKiyoung Kim if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8278*735d6239SKiyoung Kim eval flag=\"$thread_safe_flag_spec\" 8279*735d6239SKiyoung Kim func_append linker_flags " $flag" 8280*735d6239SKiyoung Kim fi 8281*735d6239SKiyoung Kim 8282*735d6239SKiyoung Kim # Make a backup of the uninstalled library when relinking 8283*735d6239SKiyoung Kim if test "$opt_mode" = relink; then 8284*735d6239SKiyoung Kim $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8285*735d6239SKiyoung Kim fi 8286*735d6239SKiyoung Kim 8287*735d6239SKiyoung Kim # Do each of the archive commands. 8288*735d6239SKiyoung Kim if test "$module" = yes && test -n "$module_cmds" ; then 8289*735d6239SKiyoung Kim if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8290*735d6239SKiyoung Kim eval test_cmds=\"$module_expsym_cmds\" 8291*735d6239SKiyoung Kim cmds=$module_expsym_cmds 8292*735d6239SKiyoung Kim else 8293*735d6239SKiyoung Kim eval test_cmds=\"$module_cmds\" 8294*735d6239SKiyoung Kim cmds=$module_cmds 8295*735d6239SKiyoung Kim fi 8296*735d6239SKiyoung Kim else 8297*735d6239SKiyoung Kim if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8298*735d6239SKiyoung Kim eval test_cmds=\"$archive_expsym_cmds\" 8299*735d6239SKiyoung Kim cmds=$archive_expsym_cmds 8300*735d6239SKiyoung Kim else 8301*735d6239SKiyoung Kim eval test_cmds=\"$archive_cmds\" 8302*735d6239SKiyoung Kim cmds=$archive_cmds 8303*735d6239SKiyoung Kim fi 8304*735d6239SKiyoung Kim fi 8305*735d6239SKiyoung Kim 8306*735d6239SKiyoung Kim if test "X$skipped_export" != "X:" && 8307*735d6239SKiyoung Kim func_len " $test_cmds" && 8308*735d6239SKiyoung Kim len=$func_len_result && 8309*735d6239SKiyoung Kim test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8310*735d6239SKiyoung Kim : 8311*735d6239SKiyoung Kim else 8312*735d6239SKiyoung Kim # The command line is too long to link in one step, link piecewise 8313*735d6239SKiyoung Kim # or, if using GNU ld and skipped_export is not :, use a linker 8314*735d6239SKiyoung Kim # script. 8315*735d6239SKiyoung Kim 8316*735d6239SKiyoung Kim # Save the value of $output and $libobjs because we want to 8317*735d6239SKiyoung Kim # use them later. If we have whole_archive_flag_spec, we 8318*735d6239SKiyoung Kim # want to use save_libobjs as it was before 8319*735d6239SKiyoung Kim # whole_archive_flag_spec was expanded, because we can't 8320*735d6239SKiyoung Kim # assume the linker understands whole_archive_flag_spec. 8321*735d6239SKiyoung Kim # This may have to be revisited, in case too many 8322*735d6239SKiyoung Kim # convenience libraries get linked in and end up exceeding 8323*735d6239SKiyoung Kim # the spec. 8324*735d6239SKiyoung Kim if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8325*735d6239SKiyoung Kim save_libobjs=$libobjs 8326*735d6239SKiyoung Kim fi 8327*735d6239SKiyoung Kim save_output=$output 8328*735d6239SKiyoung Kim func_basename "$output" 8329*735d6239SKiyoung Kim output_la=$func_basename_result 8330*735d6239SKiyoung Kim 8331*735d6239SKiyoung Kim # Clear the reloadable object creation command queue and 8332*735d6239SKiyoung Kim # initialize k to one. 8333*735d6239SKiyoung Kim test_cmds= 8334*735d6239SKiyoung Kim concat_cmds= 8335*735d6239SKiyoung Kim objlist= 8336*735d6239SKiyoung Kim last_robj= 8337*735d6239SKiyoung Kim k=1 8338*735d6239SKiyoung Kim 8339*735d6239SKiyoung Kim if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8340*735d6239SKiyoung Kim output=${output_objdir}/${output_la}.lnkscript 8341*735d6239SKiyoung Kim func_verbose "creating GNU ld script: $output" 8342*735d6239SKiyoung Kim echo 'INPUT (' > $output 8343*735d6239SKiyoung Kim for obj in $save_libobjs 8344*735d6239SKiyoung Kim do 8345*735d6239SKiyoung Kim func_to_tool_file "$obj" 8346*735d6239SKiyoung Kim $ECHO "$func_to_tool_file_result" >> $output 8347*735d6239SKiyoung Kim done 8348*735d6239SKiyoung Kim echo ')' >> $output 8349*735d6239SKiyoung Kim func_append delfiles " $output" 8350*735d6239SKiyoung Kim func_to_tool_file "$output" 8351*735d6239SKiyoung Kim output=$func_to_tool_file_result 8352*735d6239SKiyoung Kim elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8353*735d6239SKiyoung Kim output=${output_objdir}/${output_la}.lnk 8354*735d6239SKiyoung Kim func_verbose "creating linker input file list: $output" 8355*735d6239SKiyoung Kim : > $output 8356*735d6239SKiyoung Kim set x $save_libobjs 8357*735d6239SKiyoung Kim shift 8358*735d6239SKiyoung Kim firstobj= 8359*735d6239SKiyoung Kim if test "$compiler_needs_object" = yes; then 8360*735d6239SKiyoung Kim firstobj="$1 " 8361*735d6239SKiyoung Kim shift 8362*735d6239SKiyoung Kim fi 8363*735d6239SKiyoung Kim for obj 8364*735d6239SKiyoung Kim do 8365*735d6239SKiyoung Kim func_to_tool_file "$obj" 8366*735d6239SKiyoung Kim $ECHO "$func_to_tool_file_result" >> $output 8367*735d6239SKiyoung Kim done 8368*735d6239SKiyoung Kim func_append delfiles " $output" 8369*735d6239SKiyoung Kim func_to_tool_file "$output" 8370*735d6239SKiyoung Kim output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8371*735d6239SKiyoung Kim else 8372*735d6239SKiyoung Kim if test -n "$save_libobjs"; then 8373*735d6239SKiyoung Kim func_verbose "creating reloadable object files..." 8374*735d6239SKiyoung Kim output=$output_objdir/$output_la-${k}.$objext 8375*735d6239SKiyoung Kim eval test_cmds=\"$reload_cmds\" 8376*735d6239SKiyoung Kim func_len " $test_cmds" 8377*735d6239SKiyoung Kim len0=$func_len_result 8378*735d6239SKiyoung Kim len=$len0 8379*735d6239SKiyoung Kim 8380*735d6239SKiyoung Kim # Loop over the list of objects to be linked. 8381*735d6239SKiyoung Kim for obj in $save_libobjs 8382*735d6239SKiyoung Kim do 8383*735d6239SKiyoung Kim func_len " $obj" 8384*735d6239SKiyoung Kim func_arith $len + $func_len_result 8385*735d6239SKiyoung Kim len=$func_arith_result 8386*735d6239SKiyoung Kim if test "X$objlist" = X || 8387*735d6239SKiyoung Kim test "$len" -lt "$max_cmd_len"; then 8388*735d6239SKiyoung Kim func_append objlist " $obj" 8389*735d6239SKiyoung Kim else 8390*735d6239SKiyoung Kim # The command $test_cmds is almost too long, add a 8391*735d6239SKiyoung Kim # command to the queue. 8392*735d6239SKiyoung Kim if test "$k" -eq 1 ; then 8393*735d6239SKiyoung Kim # The first file doesn't have a previous command to add. 8394*735d6239SKiyoung Kim reload_objs=$objlist 8395*735d6239SKiyoung Kim eval concat_cmds=\"$reload_cmds\" 8396*735d6239SKiyoung Kim else 8397*735d6239SKiyoung Kim # All subsequent reloadable object files will link in 8398*735d6239SKiyoung Kim # the last one created. 8399*735d6239SKiyoung Kim reload_objs="$objlist $last_robj" 8400*735d6239SKiyoung Kim eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8401*735d6239SKiyoung Kim fi 8402*735d6239SKiyoung Kim last_robj=$output_objdir/$output_la-${k}.$objext 8403*735d6239SKiyoung Kim func_arith $k + 1 8404*735d6239SKiyoung Kim k=$func_arith_result 8405*735d6239SKiyoung Kim output=$output_objdir/$output_la-${k}.$objext 8406*735d6239SKiyoung Kim objlist=" $obj" 8407*735d6239SKiyoung Kim func_len " $last_robj" 8408*735d6239SKiyoung Kim func_arith $len0 + $func_len_result 8409*735d6239SKiyoung Kim len=$func_arith_result 8410*735d6239SKiyoung Kim fi 8411*735d6239SKiyoung Kim done 8412*735d6239SKiyoung Kim # Handle the remaining objects by creating one last 8413*735d6239SKiyoung Kim # reloadable object file. All subsequent reloadable object 8414*735d6239SKiyoung Kim # files will link in the last one created. 8415*735d6239SKiyoung Kim test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8416*735d6239SKiyoung Kim reload_objs="$objlist $last_robj" 8417*735d6239SKiyoung Kim eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8418*735d6239SKiyoung Kim if test -n "$last_robj"; then 8419*735d6239SKiyoung Kim eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8420*735d6239SKiyoung Kim fi 8421*735d6239SKiyoung Kim func_append delfiles " $output" 8422*735d6239SKiyoung Kim 8423*735d6239SKiyoung Kim else 8424*735d6239SKiyoung Kim output= 8425*735d6239SKiyoung Kim fi 8426*735d6239SKiyoung Kim 8427*735d6239SKiyoung Kim if ${skipped_export-false}; then 8428*735d6239SKiyoung Kim func_verbose "generating symbol list for \`$libname.la'" 8429*735d6239SKiyoung Kim export_symbols="$output_objdir/$libname.exp" 8430*735d6239SKiyoung Kim $opt_dry_run || $RM $export_symbols 8431*735d6239SKiyoung Kim libobjs=$output 8432*735d6239SKiyoung Kim # Append the command to create the export file. 8433*735d6239SKiyoung Kim test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8434*735d6239SKiyoung Kim eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8435*735d6239SKiyoung Kim if test -n "$last_robj"; then 8436*735d6239SKiyoung Kim eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8437*735d6239SKiyoung Kim fi 8438*735d6239SKiyoung Kim fi 8439*735d6239SKiyoung Kim 8440*735d6239SKiyoung Kim test -n "$save_libobjs" && 8441*735d6239SKiyoung Kim func_verbose "creating a temporary reloadable object file: $output" 8442*735d6239SKiyoung Kim 8443*735d6239SKiyoung Kim # Loop through the commands generated above and execute them. 8444*735d6239SKiyoung Kim save_ifs="$IFS"; IFS='~' 8445*735d6239SKiyoung Kim for cmd in $concat_cmds; do 8446*735d6239SKiyoung Kim IFS="$save_ifs" 8447*735d6239SKiyoung Kim $opt_silent || { 8448*735d6239SKiyoung Kim func_quote_for_expand "$cmd" 8449*735d6239SKiyoung Kim eval "func_echo $func_quote_for_expand_result" 8450*735d6239SKiyoung Kim } 8451*735d6239SKiyoung Kim $opt_dry_run || eval "$cmd" || { 8452*735d6239SKiyoung Kim lt_exit=$? 8453*735d6239SKiyoung Kim 8454*735d6239SKiyoung Kim # Restore the uninstalled library and exit 8455*735d6239SKiyoung Kim if test "$opt_mode" = relink; then 8456*735d6239SKiyoung Kim ( cd "$output_objdir" && \ 8457*735d6239SKiyoung Kim $RM "${realname}T" && \ 8458*735d6239SKiyoung Kim $MV "${realname}U" "$realname" ) 8459*735d6239SKiyoung Kim fi 8460*735d6239SKiyoung Kim 8461*735d6239SKiyoung Kim exit $lt_exit 8462*735d6239SKiyoung Kim } 8463*735d6239SKiyoung Kim done 8464*735d6239SKiyoung Kim IFS="$save_ifs" 8465*735d6239SKiyoung Kim 8466*735d6239SKiyoung Kim if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8467*735d6239SKiyoung Kim func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8468*735d6239SKiyoung Kim func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8469*735d6239SKiyoung Kim fi 8470*735d6239SKiyoung Kim fi 8471*735d6239SKiyoung Kim 8472*735d6239SKiyoung Kim if ${skipped_export-false}; then 8473*735d6239SKiyoung Kim if test -n "$export_symbols" && test -n "$include_expsyms"; then 8474*735d6239SKiyoung Kim tmp_export_symbols="$export_symbols" 8475*735d6239SKiyoung Kim test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8476*735d6239SKiyoung Kim $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8477*735d6239SKiyoung Kim fi 8478*735d6239SKiyoung Kim 8479*735d6239SKiyoung Kim if test -n "$orig_export_symbols"; then 8480*735d6239SKiyoung Kim # The given exports_symbols file has to be filtered, so filter it. 8481*735d6239SKiyoung Kim func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8482*735d6239SKiyoung Kim # FIXME: $output_objdir/$libname.filter potentially contains lots of 8483*735d6239SKiyoung Kim # 's' commands which not all seds can handle. GNU sed should be fine 8484*735d6239SKiyoung Kim # though. Also, the filter scales superlinearly with the number of 8485*735d6239SKiyoung Kim # global variables. join(1) would be nice here, but unfortunately 8486*735d6239SKiyoung Kim # isn't a blessed tool. 8487*735d6239SKiyoung Kim $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8488*735d6239SKiyoung Kim func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8489*735d6239SKiyoung Kim export_symbols=$output_objdir/$libname.def 8490*735d6239SKiyoung Kim $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8491*735d6239SKiyoung Kim fi 8492*735d6239SKiyoung Kim fi 8493*735d6239SKiyoung Kim 8494*735d6239SKiyoung Kim libobjs=$output 8495*735d6239SKiyoung Kim # Restore the value of output. 8496*735d6239SKiyoung Kim output=$save_output 8497*735d6239SKiyoung Kim 8498*735d6239SKiyoung Kim if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8499*735d6239SKiyoung Kim eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8500*735d6239SKiyoung Kim test "X$libobjs" = "X " && libobjs= 8501*735d6239SKiyoung Kim fi 8502*735d6239SKiyoung Kim # Expand the library linking commands again to reset the 8503*735d6239SKiyoung Kim # value of $libobjs for piecewise linking. 8504*735d6239SKiyoung Kim 8505*735d6239SKiyoung Kim # Do each of the archive commands. 8506*735d6239SKiyoung Kim if test "$module" = yes && test -n "$module_cmds" ; then 8507*735d6239SKiyoung Kim if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8508*735d6239SKiyoung Kim cmds=$module_expsym_cmds 8509*735d6239SKiyoung Kim else 8510*735d6239SKiyoung Kim cmds=$module_cmds 8511*735d6239SKiyoung Kim fi 8512*735d6239SKiyoung Kim else 8513*735d6239SKiyoung Kim if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8514*735d6239SKiyoung Kim cmds=$archive_expsym_cmds 8515*735d6239SKiyoung Kim else 8516*735d6239SKiyoung Kim cmds=$archive_cmds 8517*735d6239SKiyoung Kim fi 8518*735d6239SKiyoung Kim fi 8519*735d6239SKiyoung Kim fi 8520*735d6239SKiyoung Kim 8521*735d6239SKiyoung Kim if test -n "$delfiles"; then 8522*735d6239SKiyoung Kim # Append the command to remove temporary files to $cmds. 8523*735d6239SKiyoung Kim eval cmds=\"\$cmds~\$RM $delfiles\" 8524*735d6239SKiyoung Kim fi 8525*735d6239SKiyoung Kim 8526*735d6239SKiyoung Kim # Add any objects from preloaded convenience libraries 8527*735d6239SKiyoung Kim if test -n "$dlprefiles"; then 8528*735d6239SKiyoung Kim gentop="$output_objdir/${outputname}x" 8529*735d6239SKiyoung Kim func_append generated " $gentop" 8530*735d6239SKiyoung Kim 8531*735d6239SKiyoung Kim func_extract_archives $gentop $dlprefiles 8532*735d6239SKiyoung Kim func_append libobjs " $func_extract_archives_result" 8533*735d6239SKiyoung Kim test "X$libobjs" = "X " && libobjs= 8534*735d6239SKiyoung Kim fi 8535*735d6239SKiyoung Kim 8536*735d6239SKiyoung Kim save_ifs="$IFS"; IFS='~' 8537*735d6239SKiyoung Kim for cmd in $cmds; do 8538*735d6239SKiyoung Kim IFS="$save_ifs" 8539*735d6239SKiyoung Kim eval cmd=\"$cmd\" 8540*735d6239SKiyoung Kim $opt_silent || { 8541*735d6239SKiyoung Kim func_quote_for_expand "$cmd" 8542*735d6239SKiyoung Kim eval "func_echo $func_quote_for_expand_result" 8543*735d6239SKiyoung Kim } 8544*735d6239SKiyoung Kim $opt_dry_run || eval "$cmd" || { 8545*735d6239SKiyoung Kim lt_exit=$? 8546*735d6239SKiyoung Kim 8547*735d6239SKiyoung Kim # Restore the uninstalled library and exit 8548*735d6239SKiyoung Kim if test "$opt_mode" = relink; then 8549*735d6239SKiyoung Kim ( cd "$output_objdir" && \ 8550*735d6239SKiyoung Kim $RM "${realname}T" && \ 8551*735d6239SKiyoung Kim $MV "${realname}U" "$realname" ) 8552*735d6239SKiyoung Kim fi 8553*735d6239SKiyoung Kim 8554*735d6239SKiyoung Kim exit $lt_exit 8555*735d6239SKiyoung Kim } 8556*735d6239SKiyoung Kim done 8557*735d6239SKiyoung Kim IFS="$save_ifs" 8558*735d6239SKiyoung Kim 8559*735d6239SKiyoung Kim # Restore the uninstalled library and exit 8560*735d6239SKiyoung Kim if test "$opt_mode" = relink; then 8561*735d6239SKiyoung Kim $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8562*735d6239SKiyoung Kim 8563*735d6239SKiyoung Kim if test -n "$convenience"; then 8564*735d6239SKiyoung Kim if test -z "$whole_archive_flag_spec"; then 8565*735d6239SKiyoung Kim func_show_eval '${RM}r "$gentop"' 8566*735d6239SKiyoung Kim fi 8567*735d6239SKiyoung Kim fi 8568*735d6239SKiyoung Kim 8569*735d6239SKiyoung Kim exit $EXIT_SUCCESS 8570*735d6239SKiyoung Kim fi 8571*735d6239SKiyoung Kim 8572*735d6239SKiyoung Kim # Create links to the real library. 8573*735d6239SKiyoung Kim for linkname in $linknames; do 8574*735d6239SKiyoung Kim if test "$realname" != "$linkname"; then 8575*735d6239SKiyoung Kim func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8576*735d6239SKiyoung Kim fi 8577*735d6239SKiyoung Kim done 8578*735d6239SKiyoung Kim 8579*735d6239SKiyoung Kim # If -module or -export-dynamic was specified, set the dlname. 8580*735d6239SKiyoung Kim if test "$module" = yes || test "$export_dynamic" = yes; then 8581*735d6239SKiyoung Kim # On all known operating systems, these are identical. 8582*735d6239SKiyoung Kim dlname="$soname" 8583*735d6239SKiyoung Kim fi 8584*735d6239SKiyoung Kim fi 8585*735d6239SKiyoung Kim ;; 8586*735d6239SKiyoung Kim 8587*735d6239SKiyoung Kim obj) 8588*735d6239SKiyoung Kim if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8589*735d6239SKiyoung Kim func_warning "\`-dlopen' is ignored for objects" 8590*735d6239SKiyoung Kim fi 8591*735d6239SKiyoung Kim 8592*735d6239SKiyoung Kim case " $deplibs" in 8593*735d6239SKiyoung Kim *\ -l* | *\ -L*) 8594*735d6239SKiyoung Kim func_warning "\`-l' and \`-L' are ignored for objects" ;; 8595*735d6239SKiyoung Kim esac 8596*735d6239SKiyoung Kim 8597*735d6239SKiyoung Kim test -n "$rpath" && \ 8598*735d6239SKiyoung Kim func_warning "\`-rpath' is ignored for objects" 8599*735d6239SKiyoung Kim 8600*735d6239SKiyoung Kim test -n "$xrpath" && \ 8601*735d6239SKiyoung Kim func_warning "\`-R' is ignored for objects" 8602*735d6239SKiyoung Kim 8603*735d6239SKiyoung Kim test -n "$vinfo" && \ 8604*735d6239SKiyoung Kim func_warning "\`-version-info' is ignored for objects" 8605*735d6239SKiyoung Kim 8606*735d6239SKiyoung Kim test -n "$release" && \ 8607*735d6239SKiyoung Kim func_warning "\`-release' is ignored for objects" 8608*735d6239SKiyoung Kim 8609*735d6239SKiyoung Kim case $output in 8610*735d6239SKiyoung Kim *.lo) 8611*735d6239SKiyoung Kim test -n "$objs$old_deplibs" && \ 8612*735d6239SKiyoung Kim func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8613*735d6239SKiyoung Kim 8614*735d6239SKiyoung Kim libobj=$output 8615*735d6239SKiyoung Kim func_lo2o "$libobj" 8616*735d6239SKiyoung Kim obj=$func_lo2o_result 8617*735d6239SKiyoung Kim ;; 8618*735d6239SKiyoung Kim *) 8619*735d6239SKiyoung Kim libobj= 8620*735d6239SKiyoung Kim obj="$output" 8621*735d6239SKiyoung Kim ;; 8622*735d6239SKiyoung Kim esac 8623*735d6239SKiyoung Kim 8624*735d6239SKiyoung Kim # Delete the old objects. 8625*735d6239SKiyoung Kim $opt_dry_run || $RM $obj $libobj 8626*735d6239SKiyoung Kim 8627*735d6239SKiyoung Kim # Objects from convenience libraries. This assumes 8628*735d6239SKiyoung Kim # single-version convenience libraries. Whenever we create 8629*735d6239SKiyoung Kim # different ones for PIC/non-PIC, this we'll have to duplicate 8630*735d6239SKiyoung Kim # the extraction. 8631*735d6239SKiyoung Kim reload_conv_objs= 8632*735d6239SKiyoung Kim gentop= 8633*735d6239SKiyoung Kim # reload_cmds runs $LD directly, so let us get rid of 8634*735d6239SKiyoung Kim # -Wl from whole_archive_flag_spec and hope we can get by with 8635*735d6239SKiyoung Kim # turning comma into space.. 8636*735d6239SKiyoung Kim wl= 8637*735d6239SKiyoung Kim 8638*735d6239SKiyoung Kim if test -n "$convenience"; then 8639*735d6239SKiyoung Kim if test -n "$whole_archive_flag_spec"; then 8640*735d6239SKiyoung Kim eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 8641*735d6239SKiyoung Kim reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8642*735d6239SKiyoung Kim else 8643*735d6239SKiyoung Kim gentop="$output_objdir/${obj}x" 8644*735d6239SKiyoung Kim func_append generated " $gentop" 8645*735d6239SKiyoung Kim 8646*735d6239SKiyoung Kim func_extract_archives $gentop $convenience 8647*735d6239SKiyoung Kim reload_conv_objs="$reload_objs $func_extract_archives_result" 8648*735d6239SKiyoung Kim fi 8649*735d6239SKiyoung Kim fi 8650*735d6239SKiyoung Kim 8651*735d6239SKiyoung Kim # If we're not building shared, we need to use non_pic_objs 8652*735d6239SKiyoung Kim test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 8653*735d6239SKiyoung Kim 8654*735d6239SKiyoung Kim # Create the old-style object. 8655*735d6239SKiyoung Kim reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8656*735d6239SKiyoung Kim 8657*735d6239SKiyoung Kim output="$obj" 8658*735d6239SKiyoung Kim func_execute_cmds "$reload_cmds" 'exit $?' 8659*735d6239SKiyoung Kim 8660*735d6239SKiyoung Kim # Exit if we aren't doing a library object file. 8661*735d6239SKiyoung Kim if test -z "$libobj"; then 8662*735d6239SKiyoung Kim if test -n "$gentop"; then 8663*735d6239SKiyoung Kim func_show_eval '${RM}r "$gentop"' 8664*735d6239SKiyoung Kim fi 8665*735d6239SKiyoung Kim 8666*735d6239SKiyoung Kim exit $EXIT_SUCCESS 8667*735d6239SKiyoung Kim fi 8668*735d6239SKiyoung Kim 8669*735d6239SKiyoung Kim if test "$build_libtool_libs" != yes; then 8670*735d6239SKiyoung Kim if test -n "$gentop"; then 8671*735d6239SKiyoung Kim func_show_eval '${RM}r "$gentop"' 8672*735d6239SKiyoung Kim fi 8673*735d6239SKiyoung Kim 8674*735d6239SKiyoung Kim # Create an invalid libtool object if no PIC, so that we don't 8675*735d6239SKiyoung Kim # accidentally link it into a program. 8676*735d6239SKiyoung Kim # $show "echo timestamp > $libobj" 8677*735d6239SKiyoung Kim # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8678*735d6239SKiyoung Kim exit $EXIT_SUCCESS 8679*735d6239SKiyoung Kim fi 8680*735d6239SKiyoung Kim 8681*735d6239SKiyoung Kim if test -n "$pic_flag" || test "$pic_mode" != default; then 8682*735d6239SKiyoung Kim # Only do commands if we really have different PIC objects. 8683*735d6239SKiyoung Kim reload_objs="$libobjs $reload_conv_objs" 8684*735d6239SKiyoung Kim output="$libobj" 8685*735d6239SKiyoung Kim func_execute_cmds "$reload_cmds" 'exit $?' 8686*735d6239SKiyoung Kim fi 8687*735d6239SKiyoung Kim 8688*735d6239SKiyoung Kim if test -n "$gentop"; then 8689*735d6239SKiyoung Kim func_show_eval '${RM}r "$gentop"' 8690*735d6239SKiyoung Kim fi 8691*735d6239SKiyoung Kim 8692*735d6239SKiyoung Kim exit $EXIT_SUCCESS 8693*735d6239SKiyoung Kim ;; 8694*735d6239SKiyoung Kim 8695*735d6239SKiyoung Kim prog) 8696*735d6239SKiyoung Kim case $host in 8697*735d6239SKiyoung Kim *cygwin*) func_stripname '' '.exe' "$output" 8698*735d6239SKiyoung Kim output=$func_stripname_result.exe;; 8699*735d6239SKiyoung Kim esac 8700*735d6239SKiyoung Kim test -n "$vinfo" && \ 8701*735d6239SKiyoung Kim func_warning "\`-version-info' is ignored for programs" 8702*735d6239SKiyoung Kim 8703*735d6239SKiyoung Kim test -n "$release" && \ 8704*735d6239SKiyoung Kim func_warning "\`-release' is ignored for programs" 8705*735d6239SKiyoung Kim 8706*735d6239SKiyoung Kim test "$preload" = yes \ 8707*735d6239SKiyoung Kim && test "$dlopen_support" = unknown \ 8708*735d6239SKiyoung Kim && test "$dlopen_self" = unknown \ 8709*735d6239SKiyoung Kim && test "$dlopen_self_static" = unknown && \ 8710*735d6239SKiyoung Kim func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8711*735d6239SKiyoung Kim 8712*735d6239SKiyoung Kim case $host in 8713*735d6239SKiyoung Kim *-*-rhapsody* | *-*-darwin1.[012]) 8714*735d6239SKiyoung Kim # On Rhapsody replace the C library is the System framework 8715*735d6239SKiyoung Kim compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 8716*735d6239SKiyoung Kim finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8717*735d6239SKiyoung Kim ;; 8718*735d6239SKiyoung Kim esac 8719*735d6239SKiyoung Kim 8720*735d6239SKiyoung Kim case $host in 8721*735d6239SKiyoung Kim *-*-darwin*) 8722*735d6239SKiyoung Kim # Don't allow lazy linking, it breaks C++ global constructors 8723*735d6239SKiyoung Kim # But is supposedly fixed on 10.4 or later (yay!). 8724*735d6239SKiyoung Kim if test "$tagname" = CXX ; then 8725*735d6239SKiyoung Kim case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8726*735d6239SKiyoung Kim 10.[0123]) 8727*735d6239SKiyoung Kim func_append compile_command " ${wl}-bind_at_load" 8728*735d6239SKiyoung Kim func_append finalize_command " ${wl}-bind_at_load" 8729*735d6239SKiyoung Kim ;; 8730*735d6239SKiyoung Kim esac 8731*735d6239SKiyoung Kim fi 8732*735d6239SKiyoung Kim # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8733*735d6239SKiyoung Kim compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8734*735d6239SKiyoung Kim finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8735*735d6239SKiyoung Kim ;; 8736*735d6239SKiyoung Kim esac 8737*735d6239SKiyoung Kim 8738*735d6239SKiyoung Kim 8739*735d6239SKiyoung Kim # move library search paths that coincide with paths to not yet 8740*735d6239SKiyoung Kim # installed libraries to the beginning of the library search list 8741*735d6239SKiyoung Kim new_libs= 8742*735d6239SKiyoung Kim for path in $notinst_path; do 8743*735d6239SKiyoung Kim case " $new_libs " in 8744*735d6239SKiyoung Kim *" -L$path/$objdir "*) ;; 8745*735d6239SKiyoung Kim *) 8746*735d6239SKiyoung Kim case " $compile_deplibs " in 8747*735d6239SKiyoung Kim *" -L$path/$objdir "*) 8748*735d6239SKiyoung Kim func_append new_libs " -L$path/$objdir" ;; 8749*735d6239SKiyoung Kim esac 8750*735d6239SKiyoung Kim ;; 8751*735d6239SKiyoung Kim esac 8752*735d6239SKiyoung Kim done 8753*735d6239SKiyoung Kim for deplib in $compile_deplibs; do 8754*735d6239SKiyoung Kim case $deplib in 8755*735d6239SKiyoung Kim -L*) 8756*735d6239SKiyoung Kim case " $new_libs " in 8757*735d6239SKiyoung Kim *" $deplib "*) ;; 8758*735d6239SKiyoung Kim *) func_append new_libs " $deplib" ;; 8759*735d6239SKiyoung Kim esac 8760*735d6239SKiyoung Kim ;; 8761*735d6239SKiyoung Kim *) func_append new_libs " $deplib" ;; 8762*735d6239SKiyoung Kim esac 8763*735d6239SKiyoung Kim done 8764*735d6239SKiyoung Kim compile_deplibs="$new_libs" 8765*735d6239SKiyoung Kim 8766*735d6239SKiyoung Kim 8767*735d6239SKiyoung Kim func_append compile_command " $compile_deplibs" 8768*735d6239SKiyoung Kim func_append finalize_command " $finalize_deplibs" 8769*735d6239SKiyoung Kim 8770*735d6239SKiyoung Kim if test -n "$rpath$xrpath"; then 8771*735d6239SKiyoung Kim # If the user specified any rpath flags, then add them. 8772*735d6239SKiyoung Kim for libdir in $rpath $xrpath; do 8773*735d6239SKiyoung Kim # This is the magic to use -rpath. 8774*735d6239SKiyoung Kim case "$finalize_rpath " in 8775*735d6239SKiyoung Kim *" $libdir "*) ;; 8776*735d6239SKiyoung Kim *) func_append finalize_rpath " $libdir" ;; 8777*735d6239SKiyoung Kim esac 8778*735d6239SKiyoung Kim done 8779*735d6239SKiyoung Kim fi 8780*735d6239SKiyoung Kim 8781*735d6239SKiyoung Kim # Now hardcode the library paths 8782*735d6239SKiyoung Kim rpath= 8783*735d6239SKiyoung Kim hardcode_libdirs= 8784*735d6239SKiyoung Kim for libdir in $compile_rpath $finalize_rpath; do 8785*735d6239SKiyoung Kim if test -n "$hardcode_libdir_flag_spec"; then 8786*735d6239SKiyoung Kim if test -n "$hardcode_libdir_separator"; then 8787*735d6239SKiyoung Kim if test -z "$hardcode_libdirs"; then 8788*735d6239SKiyoung Kim hardcode_libdirs="$libdir" 8789*735d6239SKiyoung Kim else 8790*735d6239SKiyoung Kim # Just accumulate the unique libdirs. 8791*735d6239SKiyoung Kim case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8792*735d6239SKiyoung Kim *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8793*735d6239SKiyoung Kim ;; 8794*735d6239SKiyoung Kim *) 8795*735d6239SKiyoung Kim func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8796*735d6239SKiyoung Kim ;; 8797*735d6239SKiyoung Kim esac 8798*735d6239SKiyoung Kim fi 8799*735d6239SKiyoung Kim else 8800*735d6239SKiyoung Kim eval flag=\"$hardcode_libdir_flag_spec\" 8801*735d6239SKiyoung Kim func_append rpath " $flag" 8802*735d6239SKiyoung Kim fi 8803*735d6239SKiyoung Kim elif test -n "$runpath_var"; then 8804*735d6239SKiyoung Kim case "$perm_rpath " in 8805*735d6239SKiyoung Kim *" $libdir "*) ;; 8806*735d6239SKiyoung Kim *) func_append perm_rpath " $libdir" ;; 8807*735d6239SKiyoung Kim esac 8808*735d6239SKiyoung Kim fi 8809*735d6239SKiyoung Kim case $host in 8810*735d6239SKiyoung Kim *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8811*735d6239SKiyoung Kim testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8812*735d6239SKiyoung Kim case :$dllsearchpath: in 8813*735d6239SKiyoung Kim *":$libdir:"*) ;; 8814*735d6239SKiyoung Kim ::) dllsearchpath=$libdir;; 8815*735d6239SKiyoung Kim *) func_append dllsearchpath ":$libdir";; 8816*735d6239SKiyoung Kim esac 8817*735d6239SKiyoung Kim case :$dllsearchpath: in 8818*735d6239SKiyoung Kim *":$testbindir:"*) ;; 8819*735d6239SKiyoung Kim ::) dllsearchpath=$testbindir;; 8820*735d6239SKiyoung Kim *) func_append dllsearchpath ":$testbindir";; 8821*735d6239SKiyoung Kim esac 8822*735d6239SKiyoung Kim ;; 8823*735d6239SKiyoung Kim esac 8824*735d6239SKiyoung Kim done 8825*735d6239SKiyoung Kim # Substitute the hardcoded libdirs into the rpath. 8826*735d6239SKiyoung Kim if test -n "$hardcode_libdir_separator" && 8827*735d6239SKiyoung Kim test -n "$hardcode_libdirs"; then 8828*735d6239SKiyoung Kim libdir="$hardcode_libdirs" 8829*735d6239SKiyoung Kim eval rpath=\" $hardcode_libdir_flag_spec\" 8830*735d6239SKiyoung Kim fi 8831*735d6239SKiyoung Kim compile_rpath="$rpath" 8832*735d6239SKiyoung Kim 8833*735d6239SKiyoung Kim rpath= 8834*735d6239SKiyoung Kim hardcode_libdirs= 8835*735d6239SKiyoung Kim for libdir in $finalize_rpath; do 8836*735d6239SKiyoung Kim if test -n "$hardcode_libdir_flag_spec"; then 8837*735d6239SKiyoung Kim if test -n "$hardcode_libdir_separator"; then 8838*735d6239SKiyoung Kim if test -z "$hardcode_libdirs"; then 8839*735d6239SKiyoung Kim hardcode_libdirs="$libdir" 8840*735d6239SKiyoung Kim else 8841*735d6239SKiyoung Kim # Just accumulate the unique libdirs. 8842*735d6239SKiyoung Kim case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8843*735d6239SKiyoung Kim *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8844*735d6239SKiyoung Kim ;; 8845*735d6239SKiyoung Kim *) 8846*735d6239SKiyoung Kim func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8847*735d6239SKiyoung Kim ;; 8848*735d6239SKiyoung Kim esac 8849*735d6239SKiyoung Kim fi 8850*735d6239SKiyoung Kim else 8851*735d6239SKiyoung Kim eval flag=\"$hardcode_libdir_flag_spec\" 8852*735d6239SKiyoung Kim func_append rpath " $flag" 8853*735d6239SKiyoung Kim fi 8854*735d6239SKiyoung Kim elif test -n "$runpath_var"; then 8855*735d6239SKiyoung Kim case "$finalize_perm_rpath " in 8856*735d6239SKiyoung Kim *" $libdir "*) ;; 8857*735d6239SKiyoung Kim *) func_append finalize_perm_rpath " $libdir" ;; 8858*735d6239SKiyoung Kim esac 8859*735d6239SKiyoung Kim fi 8860*735d6239SKiyoung Kim done 8861*735d6239SKiyoung Kim # Substitute the hardcoded libdirs into the rpath. 8862*735d6239SKiyoung Kim if test -n "$hardcode_libdir_separator" && 8863*735d6239SKiyoung Kim test -n "$hardcode_libdirs"; then 8864*735d6239SKiyoung Kim libdir="$hardcode_libdirs" 8865*735d6239SKiyoung Kim eval rpath=\" $hardcode_libdir_flag_spec\" 8866*735d6239SKiyoung Kim fi 8867*735d6239SKiyoung Kim finalize_rpath="$rpath" 8868*735d6239SKiyoung Kim 8869*735d6239SKiyoung Kim if test -n "$libobjs" && test "$build_old_libs" = yes; then 8870*735d6239SKiyoung Kim # Transform all the library objects into standard objects. 8871*735d6239SKiyoung Kim compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8872*735d6239SKiyoung Kim finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8873*735d6239SKiyoung Kim fi 8874*735d6239SKiyoung Kim 8875*735d6239SKiyoung Kim func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8876*735d6239SKiyoung Kim 8877*735d6239SKiyoung Kim # template prelinking step 8878*735d6239SKiyoung Kim if test -n "$prelink_cmds"; then 8879*735d6239SKiyoung Kim func_execute_cmds "$prelink_cmds" 'exit $?' 8880*735d6239SKiyoung Kim fi 8881*735d6239SKiyoung Kim 8882*735d6239SKiyoung Kim wrappers_required=yes 8883*735d6239SKiyoung Kim case $host in 8884*735d6239SKiyoung Kim *cegcc* | *mingw32ce*) 8885*735d6239SKiyoung Kim # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 8886*735d6239SKiyoung Kim wrappers_required=no 8887*735d6239SKiyoung Kim ;; 8888*735d6239SKiyoung Kim *cygwin* | *mingw* ) 8889*735d6239SKiyoung Kim if test "$build_libtool_libs" != yes; then 8890*735d6239SKiyoung Kim wrappers_required=no 8891*735d6239SKiyoung Kim fi 8892*735d6239SKiyoung Kim ;; 8893*735d6239SKiyoung Kim *) 8894*735d6239SKiyoung Kim if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8895*735d6239SKiyoung Kim wrappers_required=no 8896*735d6239SKiyoung Kim fi 8897*735d6239SKiyoung Kim ;; 8898*735d6239SKiyoung Kim esac 8899*735d6239SKiyoung Kim if test "$wrappers_required" = no; then 8900*735d6239SKiyoung Kim # Replace the output file specification. 8901*735d6239SKiyoung Kim compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8902*735d6239SKiyoung Kim link_command="$compile_command$compile_rpath" 8903*735d6239SKiyoung Kim 8904*735d6239SKiyoung Kim # We have no uninstalled library dependencies, so finalize right now. 8905*735d6239SKiyoung Kim exit_status=0 8906*735d6239SKiyoung Kim func_show_eval "$link_command" 'exit_status=$?' 8907*735d6239SKiyoung Kim 8908*735d6239SKiyoung Kim if test -n "$postlink_cmds"; then 8909*735d6239SKiyoung Kim func_to_tool_file "$output" 8910*735d6239SKiyoung Kim postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8911*735d6239SKiyoung Kim func_execute_cmds "$postlink_cmds" 'exit $?' 8912*735d6239SKiyoung Kim fi 8913*735d6239SKiyoung Kim 8914*735d6239SKiyoung Kim # Delete the generated files. 8915*735d6239SKiyoung Kim if test -f "$output_objdir/${outputname}S.${objext}"; then 8916*735d6239SKiyoung Kim func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8917*735d6239SKiyoung Kim fi 8918*735d6239SKiyoung Kim 8919*735d6239SKiyoung Kim exit $exit_status 8920*735d6239SKiyoung Kim fi 8921*735d6239SKiyoung Kim 8922*735d6239SKiyoung Kim if test -n "$compile_shlibpath$finalize_shlibpath"; then 8923*735d6239SKiyoung Kim compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8924*735d6239SKiyoung Kim fi 8925*735d6239SKiyoung Kim if test -n "$finalize_shlibpath"; then 8926*735d6239SKiyoung Kim finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8927*735d6239SKiyoung Kim fi 8928*735d6239SKiyoung Kim 8929*735d6239SKiyoung Kim compile_var= 8930*735d6239SKiyoung Kim finalize_var= 8931*735d6239SKiyoung Kim if test -n "$runpath_var"; then 8932*735d6239SKiyoung Kim if test -n "$perm_rpath"; then 8933*735d6239SKiyoung Kim # We should set the runpath_var. 8934*735d6239SKiyoung Kim rpath= 8935*735d6239SKiyoung Kim for dir in $perm_rpath; do 8936*735d6239SKiyoung Kim func_append rpath "$dir:" 8937*735d6239SKiyoung Kim done 8938*735d6239SKiyoung Kim compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8939*735d6239SKiyoung Kim fi 8940*735d6239SKiyoung Kim if test -n "$finalize_perm_rpath"; then 8941*735d6239SKiyoung Kim # We should set the runpath_var. 8942*735d6239SKiyoung Kim rpath= 8943*735d6239SKiyoung Kim for dir in $finalize_perm_rpath; do 8944*735d6239SKiyoung Kim func_append rpath "$dir:" 8945*735d6239SKiyoung Kim done 8946*735d6239SKiyoung Kim finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8947*735d6239SKiyoung Kim fi 8948*735d6239SKiyoung Kim fi 8949*735d6239SKiyoung Kim 8950*735d6239SKiyoung Kim if test "$no_install" = yes; then 8951*735d6239SKiyoung Kim # We don't need to create a wrapper script. 8952*735d6239SKiyoung Kim link_command="$compile_var$compile_command$compile_rpath" 8953*735d6239SKiyoung Kim # Replace the output file specification. 8954*735d6239SKiyoung Kim link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8955*735d6239SKiyoung Kim # Delete the old output file. 8956*735d6239SKiyoung Kim $opt_dry_run || $RM $output 8957*735d6239SKiyoung Kim # Link the executable and exit 8958*735d6239SKiyoung Kim func_show_eval "$link_command" 'exit $?' 8959*735d6239SKiyoung Kim 8960*735d6239SKiyoung Kim if test -n "$postlink_cmds"; then 8961*735d6239SKiyoung Kim func_to_tool_file "$output" 8962*735d6239SKiyoung Kim postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8963*735d6239SKiyoung Kim func_execute_cmds "$postlink_cmds" 'exit $?' 8964*735d6239SKiyoung Kim fi 8965*735d6239SKiyoung Kim 8966*735d6239SKiyoung Kim exit $EXIT_SUCCESS 8967*735d6239SKiyoung Kim fi 8968*735d6239SKiyoung Kim 8969*735d6239SKiyoung Kim if test "$hardcode_action" = relink; then 8970*735d6239SKiyoung Kim # Fast installation is not supported 8971*735d6239SKiyoung Kim link_command="$compile_var$compile_command$compile_rpath" 8972*735d6239SKiyoung Kim relink_command="$finalize_var$finalize_command$finalize_rpath" 8973*735d6239SKiyoung Kim 8974*735d6239SKiyoung Kim func_warning "this platform does not like uninstalled shared libraries" 8975*735d6239SKiyoung Kim func_warning "\`$output' will be relinked during installation" 8976*735d6239SKiyoung Kim else 8977*735d6239SKiyoung Kim if test "$fast_install" != no; then 8978*735d6239SKiyoung Kim link_command="$finalize_var$compile_command$finalize_rpath" 8979*735d6239SKiyoung Kim if test "$fast_install" = yes; then 8980*735d6239SKiyoung Kim relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8981*735d6239SKiyoung Kim else 8982*735d6239SKiyoung Kim # fast_install is set to needless 8983*735d6239SKiyoung Kim relink_command= 8984*735d6239SKiyoung Kim fi 8985*735d6239SKiyoung Kim else 8986*735d6239SKiyoung Kim link_command="$compile_var$compile_command$compile_rpath" 8987*735d6239SKiyoung Kim relink_command="$finalize_var$finalize_command$finalize_rpath" 8988*735d6239SKiyoung Kim fi 8989*735d6239SKiyoung Kim fi 8990*735d6239SKiyoung Kim 8991*735d6239SKiyoung Kim # Replace the output file specification. 8992*735d6239SKiyoung Kim link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8993*735d6239SKiyoung Kim 8994*735d6239SKiyoung Kim # Delete the old output files. 8995*735d6239SKiyoung Kim $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8996*735d6239SKiyoung Kim 8997*735d6239SKiyoung Kim func_show_eval "$link_command" 'exit $?' 8998*735d6239SKiyoung Kim 8999*735d6239SKiyoung Kim if test -n "$postlink_cmds"; then 9000*735d6239SKiyoung Kim func_to_tool_file "$output_objdir/$outputname" 9001*735d6239SKiyoung Kim postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 9002*735d6239SKiyoung Kim func_execute_cmds "$postlink_cmds" 'exit $?' 9003*735d6239SKiyoung Kim fi 9004*735d6239SKiyoung Kim 9005*735d6239SKiyoung Kim # Now create the wrapper script. 9006*735d6239SKiyoung Kim func_verbose "creating $output" 9007*735d6239SKiyoung Kim 9008*735d6239SKiyoung Kim # Quote the relink command for shipping. 9009*735d6239SKiyoung Kim if test -n "$relink_command"; then 9010*735d6239SKiyoung Kim # Preserve any variables that may affect compiler behavior 9011*735d6239SKiyoung Kim for var in $variables_saved_for_relink; do 9012*735d6239SKiyoung Kim if eval test -z \"\${$var+set}\"; then 9013*735d6239SKiyoung Kim relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9014*735d6239SKiyoung Kim elif eval var_value=\$$var; test -z "$var_value"; then 9015*735d6239SKiyoung Kim relink_command="$var=; export $var; $relink_command" 9016*735d6239SKiyoung Kim else 9017*735d6239SKiyoung Kim func_quote_for_eval "$var_value" 9018*735d6239SKiyoung Kim relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9019*735d6239SKiyoung Kim fi 9020*735d6239SKiyoung Kim done 9021*735d6239SKiyoung Kim relink_command="(cd `pwd`; $relink_command)" 9022*735d6239SKiyoung Kim relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9023*735d6239SKiyoung Kim fi 9024*735d6239SKiyoung Kim 9025*735d6239SKiyoung Kim # Only actually do things if not in dry run mode. 9026*735d6239SKiyoung Kim $opt_dry_run || { 9027*735d6239SKiyoung Kim # win32 will think the script is a binary if it has 9028*735d6239SKiyoung Kim # a .exe suffix, so we strip it off here. 9029*735d6239SKiyoung Kim case $output in 9030*735d6239SKiyoung Kim *.exe) func_stripname '' '.exe' "$output" 9031*735d6239SKiyoung Kim output=$func_stripname_result ;; 9032*735d6239SKiyoung Kim esac 9033*735d6239SKiyoung Kim # test for cygwin because mv fails w/o .exe extensions 9034*735d6239SKiyoung Kim case $host in 9035*735d6239SKiyoung Kim *cygwin*) 9036*735d6239SKiyoung Kim exeext=.exe 9037*735d6239SKiyoung Kim func_stripname '' '.exe' "$outputname" 9038*735d6239SKiyoung Kim outputname=$func_stripname_result ;; 9039*735d6239SKiyoung Kim *) exeext= ;; 9040*735d6239SKiyoung Kim esac 9041*735d6239SKiyoung Kim case $host in 9042*735d6239SKiyoung Kim *cygwin* | *mingw* ) 9043*735d6239SKiyoung Kim func_dirname_and_basename "$output" "" "." 9044*735d6239SKiyoung Kim output_name=$func_basename_result 9045*735d6239SKiyoung Kim output_path=$func_dirname_result 9046*735d6239SKiyoung Kim cwrappersource="$output_path/$objdir/lt-$output_name.c" 9047*735d6239SKiyoung Kim cwrapper="$output_path/$output_name.exe" 9048*735d6239SKiyoung Kim $RM $cwrappersource $cwrapper 9049*735d6239SKiyoung Kim trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9050*735d6239SKiyoung Kim 9051*735d6239SKiyoung Kim func_emit_cwrapperexe_src > $cwrappersource 9052*735d6239SKiyoung Kim 9053*735d6239SKiyoung Kim # The wrapper executable is built using the $host compiler, 9054*735d6239SKiyoung Kim # because it contains $host paths and files. If cross- 9055*735d6239SKiyoung Kim # compiling, it, like the target executable, must be 9056*735d6239SKiyoung Kim # executed on the $host or under an emulation environment. 9057*735d6239SKiyoung Kim $opt_dry_run || { 9058*735d6239SKiyoung Kim $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9059*735d6239SKiyoung Kim $STRIP $cwrapper 9060*735d6239SKiyoung Kim } 9061*735d6239SKiyoung Kim 9062*735d6239SKiyoung Kim # Now, create the wrapper script for func_source use: 9063*735d6239SKiyoung Kim func_ltwrapper_scriptname $cwrapper 9064*735d6239SKiyoung Kim $RM $func_ltwrapper_scriptname_result 9065*735d6239SKiyoung Kim trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9066*735d6239SKiyoung Kim $opt_dry_run || { 9067*735d6239SKiyoung Kim # note: this script will not be executed, so do not chmod. 9068*735d6239SKiyoung Kim if test "x$build" = "x$host" ; then 9069*735d6239SKiyoung Kim $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9070*735d6239SKiyoung Kim else 9071*735d6239SKiyoung Kim func_emit_wrapper no > $func_ltwrapper_scriptname_result 9072*735d6239SKiyoung Kim fi 9073*735d6239SKiyoung Kim } 9074*735d6239SKiyoung Kim ;; 9075*735d6239SKiyoung Kim * ) 9076*735d6239SKiyoung Kim $RM $output 9077*735d6239SKiyoung Kim trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9078*735d6239SKiyoung Kim 9079*735d6239SKiyoung Kim func_emit_wrapper no > $output 9080*735d6239SKiyoung Kim chmod +x $output 9081*735d6239SKiyoung Kim ;; 9082*735d6239SKiyoung Kim esac 9083*735d6239SKiyoung Kim } 9084*735d6239SKiyoung Kim exit $EXIT_SUCCESS 9085*735d6239SKiyoung Kim ;; 9086*735d6239SKiyoung Kim esac 9087*735d6239SKiyoung Kim 9088*735d6239SKiyoung Kim # See if we need to build an old-fashioned archive. 9089*735d6239SKiyoung Kim for oldlib in $oldlibs; do 9090*735d6239SKiyoung Kim 9091*735d6239SKiyoung Kim if test "$build_libtool_libs" = convenience; then 9092*735d6239SKiyoung Kim oldobjs="$libobjs_save $symfileobj" 9093*735d6239SKiyoung Kim addlibs="$convenience" 9094*735d6239SKiyoung Kim build_libtool_libs=no 9095*735d6239SKiyoung Kim else 9096*735d6239SKiyoung Kim if test "$build_libtool_libs" = module; then 9097*735d6239SKiyoung Kim oldobjs="$libobjs_save" 9098*735d6239SKiyoung Kim build_libtool_libs=no 9099*735d6239SKiyoung Kim else 9100*735d6239SKiyoung Kim oldobjs="$old_deplibs $non_pic_objects" 9101*735d6239SKiyoung Kim if test "$preload" = yes && test -f "$symfileobj"; then 9102*735d6239SKiyoung Kim func_append oldobjs " $symfileobj" 9103*735d6239SKiyoung Kim fi 9104*735d6239SKiyoung Kim fi 9105*735d6239SKiyoung Kim addlibs="$old_convenience" 9106*735d6239SKiyoung Kim fi 9107*735d6239SKiyoung Kim 9108*735d6239SKiyoung Kim if test -n "$addlibs"; then 9109*735d6239SKiyoung Kim gentop="$output_objdir/${outputname}x" 9110*735d6239SKiyoung Kim func_append generated " $gentop" 9111*735d6239SKiyoung Kim 9112*735d6239SKiyoung Kim func_extract_archives $gentop $addlibs 9113*735d6239SKiyoung Kim func_append oldobjs " $func_extract_archives_result" 9114*735d6239SKiyoung Kim fi 9115*735d6239SKiyoung Kim 9116*735d6239SKiyoung Kim # Do each command in the archive commands. 9117*735d6239SKiyoung Kim if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9118*735d6239SKiyoung Kim cmds=$old_archive_from_new_cmds 9119*735d6239SKiyoung Kim else 9120*735d6239SKiyoung Kim 9121*735d6239SKiyoung Kim # Add any objects from preloaded convenience libraries 9122*735d6239SKiyoung Kim if test -n "$dlprefiles"; then 9123*735d6239SKiyoung Kim gentop="$output_objdir/${outputname}x" 9124*735d6239SKiyoung Kim func_append generated " $gentop" 9125*735d6239SKiyoung Kim 9126*735d6239SKiyoung Kim func_extract_archives $gentop $dlprefiles 9127*735d6239SKiyoung Kim func_append oldobjs " $func_extract_archives_result" 9128*735d6239SKiyoung Kim fi 9129*735d6239SKiyoung Kim 9130*735d6239SKiyoung Kim # POSIX demands no paths to be encoded in archives. We have 9131*735d6239SKiyoung Kim # to avoid creating archives with duplicate basenames if we 9132*735d6239SKiyoung Kim # might have to extract them afterwards, e.g., when creating a 9133*735d6239SKiyoung Kim # static archive out of a convenience library, or when linking 9134*735d6239SKiyoung Kim # the entirety of a libtool archive into another (currently 9135*735d6239SKiyoung Kim # not supported by libtool). 9136*735d6239SKiyoung Kim if (for obj in $oldobjs 9137*735d6239SKiyoung Kim do 9138*735d6239SKiyoung Kim func_basename "$obj" 9139*735d6239SKiyoung Kim $ECHO "$func_basename_result" 9140*735d6239SKiyoung Kim done | sort | sort -uc >/dev/null 2>&1); then 9141*735d6239SKiyoung Kim : 9142*735d6239SKiyoung Kim else 9143*735d6239SKiyoung Kim echo "copying selected object files to avoid basename conflicts..." 9144*735d6239SKiyoung Kim gentop="$output_objdir/${outputname}x" 9145*735d6239SKiyoung Kim func_append generated " $gentop" 9146*735d6239SKiyoung Kim func_mkdir_p "$gentop" 9147*735d6239SKiyoung Kim save_oldobjs=$oldobjs 9148*735d6239SKiyoung Kim oldobjs= 9149*735d6239SKiyoung Kim counter=1 9150*735d6239SKiyoung Kim for obj in $save_oldobjs 9151*735d6239SKiyoung Kim do 9152*735d6239SKiyoung Kim func_basename "$obj" 9153*735d6239SKiyoung Kim objbase="$func_basename_result" 9154*735d6239SKiyoung Kim case " $oldobjs " in 9155*735d6239SKiyoung Kim " ") oldobjs=$obj ;; 9156*735d6239SKiyoung Kim *[\ /]"$objbase "*) 9157*735d6239SKiyoung Kim while :; do 9158*735d6239SKiyoung Kim # Make sure we don't pick an alternate name that also 9159*735d6239SKiyoung Kim # overlaps. 9160*735d6239SKiyoung Kim newobj=lt$counter-$objbase 9161*735d6239SKiyoung Kim func_arith $counter + 1 9162*735d6239SKiyoung Kim counter=$func_arith_result 9163*735d6239SKiyoung Kim case " $oldobjs " in 9164*735d6239SKiyoung Kim *[\ /]"$newobj "*) ;; 9165*735d6239SKiyoung Kim *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9166*735d6239SKiyoung Kim esac 9167*735d6239SKiyoung Kim done 9168*735d6239SKiyoung Kim func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 9169*735d6239SKiyoung Kim func_append oldobjs " $gentop/$newobj" 9170*735d6239SKiyoung Kim ;; 9171*735d6239SKiyoung Kim *) func_append oldobjs " $obj" ;; 9172*735d6239SKiyoung Kim esac 9173*735d6239SKiyoung Kim done 9174*735d6239SKiyoung Kim fi 9175*735d6239SKiyoung Kim eval cmds=\"$old_archive_cmds\" 9176*735d6239SKiyoung Kim 9177*735d6239SKiyoung Kim func_len " $cmds" 9178*735d6239SKiyoung Kim len=$func_len_result 9179*735d6239SKiyoung Kim if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9180*735d6239SKiyoung Kim cmds=$old_archive_cmds 9181*735d6239SKiyoung Kim elif test -n "$archiver_list_spec"; then 9182*735d6239SKiyoung Kim func_verbose "using command file archive linking..." 9183*735d6239SKiyoung Kim for obj in $oldobjs 9184*735d6239SKiyoung Kim do 9185*735d6239SKiyoung Kim func_to_tool_file "$obj" 9186*735d6239SKiyoung Kim $ECHO "$func_to_tool_file_result" 9187*735d6239SKiyoung Kim done > $output_objdir/$libname.libcmd 9188*735d6239SKiyoung Kim func_to_tool_file "$output_objdir/$libname.libcmd" 9189*735d6239SKiyoung Kim oldobjs=" $archiver_list_spec$func_to_tool_file_result" 9190*735d6239SKiyoung Kim cmds=$old_archive_cmds 9191*735d6239SKiyoung Kim else 9192*735d6239SKiyoung Kim # the command line is too long to link in one step, link in parts 9193*735d6239SKiyoung Kim func_verbose "using piecewise archive linking..." 9194*735d6239SKiyoung Kim save_RANLIB=$RANLIB 9195*735d6239SKiyoung Kim RANLIB=: 9196*735d6239SKiyoung Kim objlist= 9197*735d6239SKiyoung Kim concat_cmds= 9198*735d6239SKiyoung Kim save_oldobjs=$oldobjs 9199*735d6239SKiyoung Kim oldobjs= 9200*735d6239SKiyoung Kim # Is there a better way of finding the last object in the list? 9201*735d6239SKiyoung Kim for obj in $save_oldobjs 9202*735d6239SKiyoung Kim do 9203*735d6239SKiyoung Kim last_oldobj=$obj 9204*735d6239SKiyoung Kim done 9205*735d6239SKiyoung Kim eval test_cmds=\"$old_archive_cmds\" 9206*735d6239SKiyoung Kim func_len " $test_cmds" 9207*735d6239SKiyoung Kim len0=$func_len_result 9208*735d6239SKiyoung Kim len=$len0 9209*735d6239SKiyoung Kim for obj in $save_oldobjs 9210*735d6239SKiyoung Kim do 9211*735d6239SKiyoung Kim func_len " $obj" 9212*735d6239SKiyoung Kim func_arith $len + $func_len_result 9213*735d6239SKiyoung Kim len=$func_arith_result 9214*735d6239SKiyoung Kim func_append objlist " $obj" 9215*735d6239SKiyoung Kim if test "$len" -lt "$max_cmd_len"; then 9216*735d6239SKiyoung Kim : 9217*735d6239SKiyoung Kim else 9218*735d6239SKiyoung Kim # the above command should be used before it gets too long 9219*735d6239SKiyoung Kim oldobjs=$objlist 9220*735d6239SKiyoung Kim if test "$obj" = "$last_oldobj" ; then 9221*735d6239SKiyoung Kim RANLIB=$save_RANLIB 9222*735d6239SKiyoung Kim fi 9223*735d6239SKiyoung Kim test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9224*735d6239SKiyoung Kim eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9225*735d6239SKiyoung Kim objlist= 9226*735d6239SKiyoung Kim len=$len0 9227*735d6239SKiyoung Kim fi 9228*735d6239SKiyoung Kim done 9229*735d6239SKiyoung Kim RANLIB=$save_RANLIB 9230*735d6239SKiyoung Kim oldobjs=$objlist 9231*735d6239SKiyoung Kim if test "X$oldobjs" = "X" ; then 9232*735d6239SKiyoung Kim eval cmds=\"\$concat_cmds\" 9233*735d6239SKiyoung Kim else 9234*735d6239SKiyoung Kim eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9235*735d6239SKiyoung Kim fi 9236*735d6239SKiyoung Kim fi 9237*735d6239SKiyoung Kim fi 9238*735d6239SKiyoung Kim func_execute_cmds "$cmds" 'exit $?' 9239*735d6239SKiyoung Kim done 9240*735d6239SKiyoung Kim 9241*735d6239SKiyoung Kim test -n "$generated" && \ 9242*735d6239SKiyoung Kim func_show_eval "${RM}r$generated" 9243*735d6239SKiyoung Kim 9244*735d6239SKiyoung Kim # Now create the libtool archive. 9245*735d6239SKiyoung Kim case $output in 9246*735d6239SKiyoung Kim *.la) 9247*735d6239SKiyoung Kim old_library= 9248*735d6239SKiyoung Kim test "$build_old_libs" = yes && old_library="$libname.$libext" 9249*735d6239SKiyoung Kim func_verbose "creating $output" 9250*735d6239SKiyoung Kim 9251*735d6239SKiyoung Kim # Preserve any variables that may affect compiler behavior 9252*735d6239SKiyoung Kim for var in $variables_saved_for_relink; do 9253*735d6239SKiyoung Kim if eval test -z \"\${$var+set}\"; then 9254*735d6239SKiyoung Kim relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9255*735d6239SKiyoung Kim elif eval var_value=\$$var; test -z "$var_value"; then 9256*735d6239SKiyoung Kim relink_command="$var=; export $var; $relink_command" 9257*735d6239SKiyoung Kim else 9258*735d6239SKiyoung Kim func_quote_for_eval "$var_value" 9259*735d6239SKiyoung Kim relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9260*735d6239SKiyoung Kim fi 9261*735d6239SKiyoung Kim done 9262*735d6239SKiyoung Kim # Quote the link command for shipping. 9263*735d6239SKiyoung Kim relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 9264*735d6239SKiyoung Kim relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9265*735d6239SKiyoung Kim if test "$hardcode_automatic" = yes ; then 9266*735d6239SKiyoung Kim relink_command= 9267*735d6239SKiyoung Kim fi 9268*735d6239SKiyoung Kim 9269*735d6239SKiyoung Kim # Only create the output if not a dry run. 9270*735d6239SKiyoung Kim $opt_dry_run || { 9271*735d6239SKiyoung Kim for installed in no yes; do 9272*735d6239SKiyoung Kim if test "$installed" = yes; then 9273*735d6239SKiyoung Kim if test -z "$install_libdir"; then 9274*735d6239SKiyoung Kim break 9275*735d6239SKiyoung Kim fi 9276*735d6239SKiyoung Kim output="$output_objdir/$outputname"i 9277*735d6239SKiyoung Kim # Replace all uninstalled libtool libraries with the installed ones 9278*735d6239SKiyoung Kim newdependency_libs= 9279*735d6239SKiyoung Kim for deplib in $dependency_libs; do 9280*735d6239SKiyoung Kim case $deplib in 9281*735d6239SKiyoung Kim *.la) 9282*735d6239SKiyoung Kim func_basename "$deplib" 9283*735d6239SKiyoung Kim name="$func_basename_result" 9284*735d6239SKiyoung Kim eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 9285*735d6239SKiyoung Kim test -z "$libdir" && \ 9286*735d6239SKiyoung Kim func_fatal_error "\`$deplib' is not a valid libtool archive" 9287*735d6239SKiyoung Kim func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 9288*735d6239SKiyoung Kim ;; 9289*735d6239SKiyoung Kim -L*) 9290*735d6239SKiyoung Kim func_stripname -L '' "$deplib" 9291*735d6239SKiyoung Kim func_replace_sysroot "$func_stripname_result" 9292*735d6239SKiyoung Kim func_append newdependency_libs " -L$func_replace_sysroot_result" 9293*735d6239SKiyoung Kim ;; 9294*735d6239SKiyoung Kim -R*) 9295*735d6239SKiyoung Kim func_stripname -R '' "$deplib" 9296*735d6239SKiyoung Kim func_replace_sysroot "$func_stripname_result" 9297*735d6239SKiyoung Kim func_append newdependency_libs " -R$func_replace_sysroot_result" 9298*735d6239SKiyoung Kim ;; 9299*735d6239SKiyoung Kim *) func_append newdependency_libs " $deplib" ;; 9300*735d6239SKiyoung Kim esac 9301*735d6239SKiyoung Kim done 9302*735d6239SKiyoung Kim dependency_libs="$newdependency_libs" 9303*735d6239SKiyoung Kim newdlfiles= 9304*735d6239SKiyoung Kim 9305*735d6239SKiyoung Kim for lib in $dlfiles; do 9306*735d6239SKiyoung Kim case $lib in 9307*735d6239SKiyoung Kim *.la) 9308*735d6239SKiyoung Kim func_basename "$lib" 9309*735d6239SKiyoung Kim name="$func_basename_result" 9310*735d6239SKiyoung Kim eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9311*735d6239SKiyoung Kim test -z "$libdir" && \ 9312*735d6239SKiyoung Kim func_fatal_error "\`$lib' is not a valid libtool archive" 9313*735d6239SKiyoung Kim func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9314*735d6239SKiyoung Kim ;; 9315*735d6239SKiyoung Kim *) func_append newdlfiles " $lib" ;; 9316*735d6239SKiyoung Kim esac 9317*735d6239SKiyoung Kim done 9318*735d6239SKiyoung Kim dlfiles="$newdlfiles" 9319*735d6239SKiyoung Kim newdlprefiles= 9320*735d6239SKiyoung Kim for lib in $dlprefiles; do 9321*735d6239SKiyoung Kim case $lib in 9322*735d6239SKiyoung Kim *.la) 9323*735d6239SKiyoung Kim # Only pass preopened files to the pseudo-archive (for 9324*735d6239SKiyoung Kim # eventual linking with the app. that links it) if we 9325*735d6239SKiyoung Kim # didn't already link the preopened objects directly into 9326*735d6239SKiyoung Kim # the library: 9327*735d6239SKiyoung Kim func_basename "$lib" 9328*735d6239SKiyoung Kim name="$func_basename_result" 9329*735d6239SKiyoung Kim eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9330*735d6239SKiyoung Kim test -z "$libdir" && \ 9331*735d6239SKiyoung Kim func_fatal_error "\`$lib' is not a valid libtool archive" 9332*735d6239SKiyoung Kim func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9333*735d6239SKiyoung Kim ;; 9334*735d6239SKiyoung Kim esac 9335*735d6239SKiyoung Kim done 9336*735d6239SKiyoung Kim dlprefiles="$newdlprefiles" 9337*735d6239SKiyoung Kim else 9338*735d6239SKiyoung Kim newdlfiles= 9339*735d6239SKiyoung Kim for lib in $dlfiles; do 9340*735d6239SKiyoung Kim case $lib in 9341*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9342*735d6239SKiyoung Kim *) abs=`pwd`"/$lib" ;; 9343*735d6239SKiyoung Kim esac 9344*735d6239SKiyoung Kim func_append newdlfiles " $abs" 9345*735d6239SKiyoung Kim done 9346*735d6239SKiyoung Kim dlfiles="$newdlfiles" 9347*735d6239SKiyoung Kim newdlprefiles= 9348*735d6239SKiyoung Kim for lib in $dlprefiles; do 9349*735d6239SKiyoung Kim case $lib in 9350*735d6239SKiyoung Kim [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9351*735d6239SKiyoung Kim *) abs=`pwd`"/$lib" ;; 9352*735d6239SKiyoung Kim esac 9353*735d6239SKiyoung Kim func_append newdlprefiles " $abs" 9354*735d6239SKiyoung Kim done 9355*735d6239SKiyoung Kim dlprefiles="$newdlprefiles" 9356*735d6239SKiyoung Kim fi 9357*735d6239SKiyoung Kim $RM $output 9358*735d6239SKiyoung Kim # place dlname in correct position for cygwin 9359*735d6239SKiyoung Kim # In fact, it would be nice if we could use this code for all target 9360*735d6239SKiyoung Kim # systems that can't hard-code library paths into their executables 9361*735d6239SKiyoung Kim # and that have no shared library path variable independent of PATH, 9362*735d6239SKiyoung Kim # but it turns out we can't easily determine that from inspecting 9363*735d6239SKiyoung Kim # libtool variables, so we have to hard-code the OSs to which it 9364*735d6239SKiyoung Kim # applies here; at the moment, that means platforms that use the PE 9365*735d6239SKiyoung Kim # object format with DLL files. See the long comment at the top of 9366*735d6239SKiyoung Kim # tests/bindir.at for full details. 9367*735d6239SKiyoung Kim tdlname=$dlname 9368*735d6239SKiyoung Kim case $host,$output,$installed,$module,$dlname in 9369*735d6239SKiyoung Kim *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 9370*735d6239SKiyoung Kim # If a -bindir argument was supplied, place the dll there. 9371*735d6239SKiyoung Kim if test "x$bindir" != x ; 9372*735d6239SKiyoung Kim then 9373*735d6239SKiyoung Kim func_relative_path "$install_libdir" "$bindir" 9374*735d6239SKiyoung Kim tdlname=$func_relative_path_result$dlname 9375*735d6239SKiyoung Kim else 9376*735d6239SKiyoung Kim # Otherwise fall back on heuristic. 9377*735d6239SKiyoung Kim tdlname=../bin/$dlname 9378*735d6239SKiyoung Kim fi 9379*735d6239SKiyoung Kim ;; 9380*735d6239SKiyoung Kim esac 9381*735d6239SKiyoung Kim $ECHO > $output "\ 9382*735d6239SKiyoung Kim# $outputname - a libtool library file 9383*735d6239SKiyoung Kim# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9384*735d6239SKiyoung Kim# 9385*735d6239SKiyoung Kim# Please DO NOT delete this file! 9386*735d6239SKiyoung Kim# It is necessary for linking the library. 9387*735d6239SKiyoung Kim 9388*735d6239SKiyoung Kim# The name that we can dlopen(3). 9389*735d6239SKiyoung Kimdlname='$tdlname' 9390*735d6239SKiyoung Kim 9391*735d6239SKiyoung Kim# Names of this library. 9392*735d6239SKiyoung Kimlibrary_names='$library_names' 9393*735d6239SKiyoung Kim 9394*735d6239SKiyoung Kim# The name of the static archive. 9395*735d6239SKiyoung Kimold_library='$old_library' 9396*735d6239SKiyoung Kim 9397*735d6239SKiyoung Kim# Linker flags that can not go in dependency_libs. 9398*735d6239SKiyoung Kiminherited_linker_flags='$new_inherited_linker_flags' 9399*735d6239SKiyoung Kim 9400*735d6239SKiyoung Kim# Libraries that this one depends upon. 9401*735d6239SKiyoung Kimdependency_libs='$dependency_libs' 9402*735d6239SKiyoung Kim 9403*735d6239SKiyoung Kim# Names of additional weak libraries provided by this library 9404*735d6239SKiyoung Kimweak_library_names='$weak_libs' 9405*735d6239SKiyoung Kim 9406*735d6239SKiyoung Kim# Version information for $libname. 9407*735d6239SKiyoung Kimcurrent=$current 9408*735d6239SKiyoung Kimage=$age 9409*735d6239SKiyoung Kimrevision=$revision 9410*735d6239SKiyoung Kim 9411*735d6239SKiyoung Kim# Is this an already installed library? 9412*735d6239SKiyoung Kiminstalled=$installed 9413*735d6239SKiyoung Kim 9414*735d6239SKiyoung Kim# Should we warn about portability when linking against -modules? 9415*735d6239SKiyoung Kimshouldnotlink=$module 9416*735d6239SKiyoung Kim 9417*735d6239SKiyoung Kim# Files to dlopen/dlpreopen 9418*735d6239SKiyoung Kimdlopen='$dlfiles' 9419*735d6239SKiyoung Kimdlpreopen='$dlprefiles' 9420*735d6239SKiyoung Kim 9421*735d6239SKiyoung Kim# Directory that this library needs to be installed in: 9422*735d6239SKiyoung Kimlibdir='$install_libdir'" 9423*735d6239SKiyoung Kim if test "$installed" = no && test "$need_relink" = yes; then 9424*735d6239SKiyoung Kim $ECHO >> $output "\ 9425*735d6239SKiyoung Kimrelink_command=\"$relink_command\"" 9426*735d6239SKiyoung Kim fi 9427*735d6239SKiyoung Kim done 9428*735d6239SKiyoung Kim } 9429*735d6239SKiyoung Kim 9430*735d6239SKiyoung Kim # Do a symbolic link so that the libtool archive can be found in 9431*735d6239SKiyoung Kim # LD_LIBRARY_PATH before the program is installed. 9432*735d6239SKiyoung Kim func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9433*735d6239SKiyoung Kim ;; 9434*735d6239SKiyoung Kim esac 9435*735d6239SKiyoung Kim exit $EXIT_SUCCESS 9436*735d6239SKiyoung Kim} 9437*735d6239SKiyoung Kim 9438*735d6239SKiyoung Kim{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9439*735d6239SKiyoung Kim func_mode_link ${1+"$@"} 9440*735d6239SKiyoung Kim 9441*735d6239SKiyoung Kim 9442*735d6239SKiyoung Kim# func_mode_uninstall arg... 9443*735d6239SKiyoung Kimfunc_mode_uninstall () 9444*735d6239SKiyoung Kim{ 9445*735d6239SKiyoung Kim $opt_debug 9446*735d6239SKiyoung Kim RM="$nonopt" 9447*735d6239SKiyoung Kim files= 9448*735d6239SKiyoung Kim rmforce= 9449*735d6239SKiyoung Kim exit_status=0 9450*735d6239SKiyoung Kim 9451*735d6239SKiyoung Kim # This variable tells wrapper scripts just to set variables rather 9452*735d6239SKiyoung Kim # than running their programs. 9453*735d6239SKiyoung Kim libtool_install_magic="$magic" 9454*735d6239SKiyoung Kim 9455*735d6239SKiyoung Kim for arg 9456*735d6239SKiyoung Kim do 9457*735d6239SKiyoung Kim case $arg in 9458*735d6239SKiyoung Kim -f) func_append RM " $arg"; rmforce=yes ;; 9459*735d6239SKiyoung Kim -*) func_append RM " $arg" ;; 9460*735d6239SKiyoung Kim *) func_append files " $arg" ;; 9461*735d6239SKiyoung Kim esac 9462*735d6239SKiyoung Kim done 9463*735d6239SKiyoung Kim 9464*735d6239SKiyoung Kim test -z "$RM" && \ 9465*735d6239SKiyoung Kim func_fatal_help "you must specify an RM program" 9466*735d6239SKiyoung Kim 9467*735d6239SKiyoung Kim rmdirs= 9468*735d6239SKiyoung Kim 9469*735d6239SKiyoung Kim for file in $files; do 9470*735d6239SKiyoung Kim func_dirname "$file" "" "." 9471*735d6239SKiyoung Kim dir="$func_dirname_result" 9472*735d6239SKiyoung Kim if test "X$dir" = X.; then 9473*735d6239SKiyoung Kim odir="$objdir" 9474*735d6239SKiyoung Kim else 9475*735d6239SKiyoung Kim odir="$dir/$objdir" 9476*735d6239SKiyoung Kim fi 9477*735d6239SKiyoung Kim func_basename "$file" 9478*735d6239SKiyoung Kim name="$func_basename_result" 9479*735d6239SKiyoung Kim test "$opt_mode" = uninstall && odir="$dir" 9480*735d6239SKiyoung Kim 9481*735d6239SKiyoung Kim # Remember odir for removal later, being careful to avoid duplicates 9482*735d6239SKiyoung Kim if test "$opt_mode" = clean; then 9483*735d6239SKiyoung Kim case " $rmdirs " in 9484*735d6239SKiyoung Kim *" $odir "*) ;; 9485*735d6239SKiyoung Kim *) func_append rmdirs " $odir" ;; 9486*735d6239SKiyoung Kim esac 9487*735d6239SKiyoung Kim fi 9488*735d6239SKiyoung Kim 9489*735d6239SKiyoung Kim # Don't error if the file doesn't exist and rm -f was used. 9490*735d6239SKiyoung Kim if { test -L "$file"; } >/dev/null 2>&1 || 9491*735d6239SKiyoung Kim { test -h "$file"; } >/dev/null 2>&1 || 9492*735d6239SKiyoung Kim test -f "$file"; then 9493*735d6239SKiyoung Kim : 9494*735d6239SKiyoung Kim elif test -d "$file"; then 9495*735d6239SKiyoung Kim exit_status=1 9496*735d6239SKiyoung Kim continue 9497*735d6239SKiyoung Kim elif test "$rmforce" = yes; then 9498*735d6239SKiyoung Kim continue 9499*735d6239SKiyoung Kim fi 9500*735d6239SKiyoung Kim 9501*735d6239SKiyoung Kim rmfiles="$file" 9502*735d6239SKiyoung Kim 9503*735d6239SKiyoung Kim case $name in 9504*735d6239SKiyoung Kim *.la) 9505*735d6239SKiyoung Kim # Possibly a libtool archive, so verify it. 9506*735d6239SKiyoung Kim if func_lalib_p "$file"; then 9507*735d6239SKiyoung Kim func_source $dir/$name 9508*735d6239SKiyoung Kim 9509*735d6239SKiyoung Kim # Delete the libtool libraries and symlinks. 9510*735d6239SKiyoung Kim for n in $library_names; do 9511*735d6239SKiyoung Kim func_append rmfiles " $odir/$n" 9512*735d6239SKiyoung Kim done 9513*735d6239SKiyoung Kim test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9514*735d6239SKiyoung Kim 9515*735d6239SKiyoung Kim case "$opt_mode" in 9516*735d6239SKiyoung Kim clean) 9517*735d6239SKiyoung Kim case " $library_names " in 9518*735d6239SKiyoung Kim *" $dlname "*) ;; 9519*735d6239SKiyoung Kim *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9520*735d6239SKiyoung Kim esac 9521*735d6239SKiyoung Kim test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9522*735d6239SKiyoung Kim ;; 9523*735d6239SKiyoung Kim uninstall) 9524*735d6239SKiyoung Kim if test -n "$library_names"; then 9525*735d6239SKiyoung Kim # Do each command in the postuninstall commands. 9526*735d6239SKiyoung Kim func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9527*735d6239SKiyoung Kim fi 9528*735d6239SKiyoung Kim 9529*735d6239SKiyoung Kim if test -n "$old_library"; then 9530*735d6239SKiyoung Kim # Do each command in the old_postuninstall commands. 9531*735d6239SKiyoung Kim func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9532*735d6239SKiyoung Kim fi 9533*735d6239SKiyoung Kim # FIXME: should reinstall the best remaining shared library. 9534*735d6239SKiyoung Kim ;; 9535*735d6239SKiyoung Kim esac 9536*735d6239SKiyoung Kim fi 9537*735d6239SKiyoung Kim ;; 9538*735d6239SKiyoung Kim 9539*735d6239SKiyoung Kim *.lo) 9540*735d6239SKiyoung Kim # Possibly a libtool object, so verify it. 9541*735d6239SKiyoung Kim if func_lalib_p "$file"; then 9542*735d6239SKiyoung Kim 9543*735d6239SKiyoung Kim # Read the .lo file 9544*735d6239SKiyoung Kim func_source $dir/$name 9545*735d6239SKiyoung Kim 9546*735d6239SKiyoung Kim # Add PIC object to the list of files to remove. 9547*735d6239SKiyoung Kim if test -n "$pic_object" && 9548*735d6239SKiyoung Kim test "$pic_object" != none; then 9549*735d6239SKiyoung Kim func_append rmfiles " $dir/$pic_object" 9550*735d6239SKiyoung Kim fi 9551*735d6239SKiyoung Kim 9552*735d6239SKiyoung Kim # Add non-PIC object to the list of files to remove. 9553*735d6239SKiyoung Kim if test -n "$non_pic_object" && 9554*735d6239SKiyoung Kim test "$non_pic_object" != none; then 9555*735d6239SKiyoung Kim func_append rmfiles " $dir/$non_pic_object" 9556*735d6239SKiyoung Kim fi 9557*735d6239SKiyoung Kim fi 9558*735d6239SKiyoung Kim ;; 9559*735d6239SKiyoung Kim 9560*735d6239SKiyoung Kim *) 9561*735d6239SKiyoung Kim if test "$opt_mode" = clean ; then 9562*735d6239SKiyoung Kim noexename=$name 9563*735d6239SKiyoung Kim case $file in 9564*735d6239SKiyoung Kim *.exe) 9565*735d6239SKiyoung Kim func_stripname '' '.exe' "$file" 9566*735d6239SKiyoung Kim file=$func_stripname_result 9567*735d6239SKiyoung Kim func_stripname '' '.exe' "$name" 9568*735d6239SKiyoung Kim noexename=$func_stripname_result 9569*735d6239SKiyoung Kim # $file with .exe has already been added to rmfiles, 9570*735d6239SKiyoung Kim # add $file without .exe 9571*735d6239SKiyoung Kim func_append rmfiles " $file" 9572*735d6239SKiyoung Kim ;; 9573*735d6239SKiyoung Kim esac 9574*735d6239SKiyoung Kim # Do a test to see if this is a libtool program. 9575*735d6239SKiyoung Kim if func_ltwrapper_p "$file"; then 9576*735d6239SKiyoung Kim if func_ltwrapper_executable_p "$file"; then 9577*735d6239SKiyoung Kim func_ltwrapper_scriptname "$file" 9578*735d6239SKiyoung Kim relink_command= 9579*735d6239SKiyoung Kim func_source $func_ltwrapper_scriptname_result 9580*735d6239SKiyoung Kim func_append rmfiles " $func_ltwrapper_scriptname_result" 9581*735d6239SKiyoung Kim else 9582*735d6239SKiyoung Kim relink_command= 9583*735d6239SKiyoung Kim func_source $dir/$noexename 9584*735d6239SKiyoung Kim fi 9585*735d6239SKiyoung Kim 9586*735d6239SKiyoung Kim # note $name still contains .exe if it was in $file originally 9587*735d6239SKiyoung Kim # as does the version of $file that was added into $rmfiles 9588*735d6239SKiyoung Kim func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9589*735d6239SKiyoung Kim if test "$fast_install" = yes && test -n "$relink_command"; then 9590*735d6239SKiyoung Kim func_append rmfiles " $odir/lt-$name" 9591*735d6239SKiyoung Kim fi 9592*735d6239SKiyoung Kim if test "X$noexename" != "X$name" ; then 9593*735d6239SKiyoung Kim func_append rmfiles " $odir/lt-${noexename}.c" 9594*735d6239SKiyoung Kim fi 9595*735d6239SKiyoung Kim fi 9596*735d6239SKiyoung Kim fi 9597*735d6239SKiyoung Kim ;; 9598*735d6239SKiyoung Kim esac 9599*735d6239SKiyoung Kim func_show_eval "$RM $rmfiles" 'exit_status=1' 9600*735d6239SKiyoung Kim done 9601*735d6239SKiyoung Kim 9602*735d6239SKiyoung Kim # Try to remove the ${objdir}s in the directories where we deleted files 9603*735d6239SKiyoung Kim for dir in $rmdirs; do 9604*735d6239SKiyoung Kim if test -d "$dir"; then 9605*735d6239SKiyoung Kim func_show_eval "rmdir $dir >/dev/null 2>&1" 9606*735d6239SKiyoung Kim fi 9607*735d6239SKiyoung Kim done 9608*735d6239SKiyoung Kim 9609*735d6239SKiyoung Kim exit $exit_status 9610*735d6239SKiyoung Kim} 9611*735d6239SKiyoung Kim 9612*735d6239SKiyoung Kim{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9613*735d6239SKiyoung Kim func_mode_uninstall ${1+"$@"} 9614*735d6239SKiyoung Kim 9615*735d6239SKiyoung Kimtest -z "$opt_mode" && { 9616*735d6239SKiyoung Kim help="$generic_help" 9617*735d6239SKiyoung Kim func_fatal_help "you must specify a MODE" 9618*735d6239SKiyoung Kim} 9619*735d6239SKiyoung Kim 9620*735d6239SKiyoung Kimtest -z "$exec_cmd" && \ 9621*735d6239SKiyoung Kim func_fatal_help "invalid operation mode \`$opt_mode'" 9622*735d6239SKiyoung Kim 9623*735d6239SKiyoung Kimif test -n "$exec_cmd"; then 9624*735d6239SKiyoung Kim eval exec "$exec_cmd" 9625*735d6239SKiyoung Kim exit $EXIT_FAILURE 9626*735d6239SKiyoung Kimfi 9627*735d6239SKiyoung Kim 9628*735d6239SKiyoung Kimexit $exit_status 9629*735d6239SKiyoung Kim 9630*735d6239SKiyoung Kim 9631*735d6239SKiyoung Kim# The TAGs below are defined such that we never get into a situation 9632*735d6239SKiyoung Kim# in which we disable both kinds of libraries. Given conflicting 9633*735d6239SKiyoung Kim# choices, we go for a static library, that is the most portable, 9634*735d6239SKiyoung Kim# since we can't tell whether shared libraries were disabled because 9635*735d6239SKiyoung Kim# the user asked for that or because the platform doesn't support 9636*735d6239SKiyoung Kim# them. This is particularly important on AIX, because we don't 9637*735d6239SKiyoung Kim# support having both static and shared libraries enabled at the same 9638*735d6239SKiyoung Kim# time on that platform, so we default to a shared-only configuration. 9639*735d6239SKiyoung Kim# If a disable-shared tag is given, we'll fallback to a static-only 9640*735d6239SKiyoung Kim# configuration. But we'll never go from static-only to shared-only. 9641*735d6239SKiyoung Kim 9642*735d6239SKiyoung Kim# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9643*735d6239SKiyoung Kimbuild_libtool_libs=no 9644*735d6239SKiyoung Kimbuild_old_libs=yes 9645*735d6239SKiyoung Kim# ### END LIBTOOL TAG CONFIG: disable-shared 9646*735d6239SKiyoung Kim 9647*735d6239SKiyoung Kim# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9648*735d6239SKiyoung Kimbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9649*735d6239SKiyoung Kim# ### END LIBTOOL TAG CONFIG: disable-static 9650*735d6239SKiyoung Kim 9651*735d6239SKiyoung Kim# Local Variables: 9652*735d6239SKiyoung Kim# mode:shell-script 9653*735d6239SKiyoung Kim# sh-indentation:2 9654*735d6239SKiyoung Kim# End: 9655*735d6239SKiyoung Kim# vi:sw=2 9656*735d6239SKiyoung Kim 9657