1*5ddc57e5SXin Li 2*5ddc57e5SXin Li# libtool (GNU libtool) 2.4.2 3*5ddc57e5SXin Li# Written by Gordon Matzigkeit <[email protected]>, 1996 4*5ddc57e5SXin Li 5*5ddc57e5SXin Li# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 6*5ddc57e5SXin Li# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7*5ddc57e5SXin Li# This is free software; see the source for copying conditions. There is NO 8*5ddc57e5SXin Li# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9*5ddc57e5SXin Li 10*5ddc57e5SXin Li# GNU Libtool is free software; you can redistribute it and/or modify 11*5ddc57e5SXin Li# it under the terms of the GNU General Public License as published by 12*5ddc57e5SXin Li# the Free Software Foundation; either version 2 of the License, or 13*5ddc57e5SXin Li# (at your option) any later version. 14*5ddc57e5SXin Li# 15*5ddc57e5SXin Li# As a special exception to the GNU General Public License, 16*5ddc57e5SXin Li# if you distribute this file as part of a program or library that 17*5ddc57e5SXin Li# is built using GNU Libtool, you may include this file under the 18*5ddc57e5SXin Li# same distribution terms that you use for the rest of that program. 19*5ddc57e5SXin Li# 20*5ddc57e5SXin Li# GNU Libtool is distributed in the hope that it will be useful, but 21*5ddc57e5SXin Li# WITHOUT ANY WARRANTY; without even the implied warranty of 22*5ddc57e5SXin Li# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23*5ddc57e5SXin Li# General Public License for more details. 24*5ddc57e5SXin Li# 25*5ddc57e5SXin Li# You should have received a copy of the GNU General Public License 26*5ddc57e5SXin Li# along with GNU Libtool; see the file COPYING. If not, a copy 27*5ddc57e5SXin Li# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28*5ddc57e5SXin Li# or obtained by writing to the Free Software Foundation, Inc., 29*5ddc57e5SXin Li# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30*5ddc57e5SXin Li 31*5ddc57e5SXin Li# Usage: $progname [OPTION]... [MODE-ARG]... 32*5ddc57e5SXin Li# 33*5ddc57e5SXin Li# Provide generalized library-building support services. 34*5ddc57e5SXin Li# 35*5ddc57e5SXin Li# --config show all configuration variables 36*5ddc57e5SXin Li# --debug enable verbose shell tracing 37*5ddc57e5SXin Li# -n, --dry-run display commands without modifying any files 38*5ddc57e5SXin Li# --features display basic configuration information and exit 39*5ddc57e5SXin Li# --mode=MODE use operation mode MODE 40*5ddc57e5SXin Li# --preserve-dup-deps don't remove duplicate dependency libraries 41*5ddc57e5SXin Li# --quiet, --silent don't print informational messages 42*5ddc57e5SXin Li# --no-quiet, --no-silent 43*5ddc57e5SXin Li# print informational messages (default) 44*5ddc57e5SXin Li# --no-warn don't display warning messages 45*5ddc57e5SXin Li# --tag=TAG use configuration variables from tag TAG 46*5ddc57e5SXin Li# -v, --verbose print more informational messages than default 47*5ddc57e5SXin Li# --no-verbose don't print the extra informational messages 48*5ddc57e5SXin Li# --version print version information 49*5ddc57e5SXin Li# -h, --help, --help-all print short, long, or detailed help message 50*5ddc57e5SXin Li# 51*5ddc57e5SXin Li# MODE must be one of the following: 52*5ddc57e5SXin Li# 53*5ddc57e5SXin Li# clean remove files from the build directory 54*5ddc57e5SXin Li# compile compile a source file into a libtool object 55*5ddc57e5SXin Li# execute automatically set library path, then run a program 56*5ddc57e5SXin Li# finish complete the installation of libtool libraries 57*5ddc57e5SXin Li# install install libraries or executables 58*5ddc57e5SXin Li# link create a library or an executable 59*5ddc57e5SXin Li# uninstall remove libraries from an installed directory 60*5ddc57e5SXin Li# 61*5ddc57e5SXin Li# MODE-ARGS vary depending on the MODE. When passed as first option, 62*5ddc57e5SXin Li# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63*5ddc57e5SXin Li# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64*5ddc57e5SXin Li# 65*5ddc57e5SXin Li# When reporting a bug, please describe a test case to reproduce it and 66*5ddc57e5SXin Li# include the following information: 67*5ddc57e5SXin Li# 68*5ddc57e5SXin Li# host-triplet: $host 69*5ddc57e5SXin Li# shell: $SHELL 70*5ddc57e5SXin Li# compiler: $LTCC 71*5ddc57e5SXin Li# compiler flags: $LTCFLAGS 72*5ddc57e5SXin Li# linker: $LD (gnu? $with_gnu_ld) 73*5ddc57e5SXin Li# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.11 74*5ddc57e5SXin Li# automake: $automake_version 75*5ddc57e5SXin Li# autoconf: $autoconf_version 76*5ddc57e5SXin Li# 77*5ddc57e5SXin Li# Report bugs to <[email protected]>. 78*5ddc57e5SXin Li# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 79*5ddc57e5SXin Li# General help using GNU software: <http://www.gnu.org/gethelp/>. 80*5ddc57e5SXin Li 81*5ddc57e5SXin LiPROGRAM=libtool 82*5ddc57e5SXin LiPACKAGE=libtool 83*5ddc57e5SXin LiVERSION="2.4.2 Debian-2.4.2-1.11" 84*5ddc57e5SXin LiTIMESTAMP="" 85*5ddc57e5SXin Lipackage_revision=1.3337 86*5ddc57e5SXin Li 87*5ddc57e5SXin Li# Be Bourne compatible 88*5ddc57e5SXin Liif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 89*5ddc57e5SXin Li emulate sh 90*5ddc57e5SXin Li NULLCMD=: 91*5ddc57e5SXin Li # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 92*5ddc57e5SXin Li # is contrary to our usage. Disable this feature. 93*5ddc57e5SXin Li alias -g '${1+"$@"}'='"$@"' 94*5ddc57e5SXin Li setopt NO_GLOB_SUBST 95*5ddc57e5SXin Lielse 96*5ddc57e5SXin Li case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 97*5ddc57e5SXin Lifi 98*5ddc57e5SXin LiBIN_SH=xpg4; export BIN_SH # for Tru64 99*5ddc57e5SXin LiDUALCASE=1; export DUALCASE # for MKS sh 100*5ddc57e5SXin Li 101*5ddc57e5SXin Li# A function that is used when there is no print builtin or printf. 102*5ddc57e5SXin Lifunc_fallback_echo () 103*5ddc57e5SXin Li{ 104*5ddc57e5SXin Li eval 'cat <<_LTECHO_EOF 105*5ddc57e5SXin Li$1 106*5ddc57e5SXin Li_LTECHO_EOF' 107*5ddc57e5SXin Li} 108*5ddc57e5SXin Li 109*5ddc57e5SXin Li# NLS nuisances: We save the old values to restore during execute mode. 110*5ddc57e5SXin Lilt_user_locale= 111*5ddc57e5SXin Lilt_safe_locale= 112*5ddc57e5SXin Lifor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 113*5ddc57e5SXin Lido 114*5ddc57e5SXin Li eval "if test \"\${$lt_var+set}\" = set; then 115*5ddc57e5SXin Li save_$lt_var=\$$lt_var 116*5ddc57e5SXin Li $lt_var=C 117*5ddc57e5SXin Li export $lt_var 118*5ddc57e5SXin Li lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 119*5ddc57e5SXin Li lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 120*5ddc57e5SXin Li fi" 121*5ddc57e5SXin Lidone 122*5ddc57e5SXin LiLC_ALL=C 123*5ddc57e5SXin LiLANGUAGE=C 124*5ddc57e5SXin Liexport LANGUAGE LC_ALL 125*5ddc57e5SXin Li 126*5ddc57e5SXin Li$lt_unset CDPATH 127*5ddc57e5SXin Li 128*5ddc57e5SXin Li 129*5ddc57e5SXin Li# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 130*5ddc57e5SXin Li# is ksh but when the shell is invoked as "sh" and the current value of 131*5ddc57e5SXin Li# the _XPG environment variable is not equal to 1 (one), the special 132*5ddc57e5SXin Li# positional parameter $0, within a function call, is the name of the 133*5ddc57e5SXin Li# function. 134*5ddc57e5SXin Liprogpath="$0" 135*5ddc57e5SXin Li 136*5ddc57e5SXin Li 137*5ddc57e5SXin Li 138*5ddc57e5SXin Li: ${CP="cp -f"} 139*5ddc57e5SXin Litest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140*5ddc57e5SXin Li: ${MAKE="make"} 141*5ddc57e5SXin Li: ${MKDIR="mkdir"} 142*5ddc57e5SXin Li: ${MV="mv -f"} 143*5ddc57e5SXin Li: ${RM="rm -f"} 144*5ddc57e5SXin Li: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 145*5ddc57e5SXin Li: ${Xsed="$SED -e 1s/^X//"} 146*5ddc57e5SXin Li 147*5ddc57e5SXin Li# Global variables: 148*5ddc57e5SXin LiEXIT_SUCCESS=0 149*5ddc57e5SXin LiEXIT_FAILURE=1 150*5ddc57e5SXin LiEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 151*5ddc57e5SXin LiEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152*5ddc57e5SXin Li 153*5ddc57e5SXin Liexit_status=$EXIT_SUCCESS 154*5ddc57e5SXin Li 155*5ddc57e5SXin Li# Make sure IFS has a sensible default 156*5ddc57e5SXin Lilt_nl=' 157*5ddc57e5SXin Li' 158*5ddc57e5SXin LiIFS=" $lt_nl" 159*5ddc57e5SXin Li 160*5ddc57e5SXin Lidirname="s,/[^/]*$,," 161*5ddc57e5SXin Libasename="s,^.*/,," 162*5ddc57e5SXin Li 163*5ddc57e5SXin Li# func_dirname file append nondir_replacement 164*5ddc57e5SXin Li# Compute the dirname of FILE. If nonempty, add APPEND to the result, 165*5ddc57e5SXin Li# otherwise set result to NONDIR_REPLACEMENT. 166*5ddc57e5SXin Lifunc_dirname () 167*5ddc57e5SXin Li{ 168*5ddc57e5SXin Li func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 169*5ddc57e5SXin Li if test "X$func_dirname_result" = "X${1}"; then 170*5ddc57e5SXin Li func_dirname_result="${3}" 171*5ddc57e5SXin Li else 172*5ddc57e5SXin Li func_dirname_result="$func_dirname_result${2}" 173*5ddc57e5SXin Li fi 174*5ddc57e5SXin Li} # func_dirname may be replaced by extended shell implementation 175*5ddc57e5SXin Li 176*5ddc57e5SXin Li 177*5ddc57e5SXin Li# func_basename file 178*5ddc57e5SXin Lifunc_basename () 179*5ddc57e5SXin Li{ 180*5ddc57e5SXin Li func_basename_result=`$ECHO "${1}" | $SED "$basename"` 181*5ddc57e5SXin Li} # func_basename may be replaced by extended shell implementation 182*5ddc57e5SXin Li 183*5ddc57e5SXin Li 184*5ddc57e5SXin Li# func_dirname_and_basename file append nondir_replacement 185*5ddc57e5SXin Li# perform func_basename and func_dirname in a single function 186*5ddc57e5SXin Li# call: 187*5ddc57e5SXin Li# dirname: Compute the dirname of FILE. If nonempty, 188*5ddc57e5SXin Li# add APPEND to the result, otherwise set result 189*5ddc57e5SXin Li# to NONDIR_REPLACEMENT. 190*5ddc57e5SXin Li# value returned in "$func_dirname_result" 191*5ddc57e5SXin Li# basename: Compute filename of FILE. 192*5ddc57e5SXin Li# value retuned in "$func_basename_result" 193*5ddc57e5SXin Li# Implementation must be kept synchronized with func_dirname 194*5ddc57e5SXin Li# and func_basename. For efficiency, we do not delegate to 195*5ddc57e5SXin Li# those functions but instead duplicate the functionality here. 196*5ddc57e5SXin Lifunc_dirname_and_basename () 197*5ddc57e5SXin Li{ 198*5ddc57e5SXin Li # Extract subdirectory from the argument. 199*5ddc57e5SXin Li func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 200*5ddc57e5SXin Li if test "X$func_dirname_result" = "X${1}"; then 201*5ddc57e5SXin Li func_dirname_result="${3}" 202*5ddc57e5SXin Li else 203*5ddc57e5SXin Li func_dirname_result="$func_dirname_result${2}" 204*5ddc57e5SXin Li fi 205*5ddc57e5SXin Li func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 206*5ddc57e5SXin Li} # func_dirname_and_basename may be replaced by extended shell implementation 207*5ddc57e5SXin Li 208*5ddc57e5SXin Li 209*5ddc57e5SXin Li# func_stripname prefix suffix name 210*5ddc57e5SXin Li# strip PREFIX and SUFFIX off of NAME. 211*5ddc57e5SXin Li# PREFIX and SUFFIX must not contain globbing or regex special 212*5ddc57e5SXin Li# characters, hashes, percent signs, but SUFFIX may contain a leading 213*5ddc57e5SXin Li# dot (in which case that matches only a dot). 214*5ddc57e5SXin Li# func_strip_suffix prefix name 215*5ddc57e5SXin Lifunc_stripname () 216*5ddc57e5SXin Li{ 217*5ddc57e5SXin Li case ${2} in 218*5ddc57e5SXin Li .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 219*5ddc57e5SXin Li *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 220*5ddc57e5SXin Li esac 221*5ddc57e5SXin Li} # func_stripname may be replaced by extended shell implementation 222*5ddc57e5SXin Li 223*5ddc57e5SXin Li 224*5ddc57e5SXin Li# These SED scripts presuppose an absolute path with a trailing slash. 225*5ddc57e5SXin Lipathcar='s,^/\([^/]*\).*$,\1,' 226*5ddc57e5SXin Lipathcdr='s,^/[^/]*,,' 227*5ddc57e5SXin Liremovedotparts=':dotsl 228*5ddc57e5SXin Li s@/\./@/@g 229*5ddc57e5SXin Li t dotsl 230*5ddc57e5SXin Li s,/\.$,/,' 231*5ddc57e5SXin Licollapseslashes='s@/\{1,\}@/@g' 232*5ddc57e5SXin Lifinalslash='s,/*$,/,' 233*5ddc57e5SXin Li 234*5ddc57e5SXin Li# func_normal_abspath PATH 235*5ddc57e5SXin Li# Remove doubled-up and trailing slashes, "." path components, 236*5ddc57e5SXin Li# and cancel out any ".." path components in PATH after making 237*5ddc57e5SXin Li# it an absolute path. 238*5ddc57e5SXin Li# value returned in "$func_normal_abspath_result" 239*5ddc57e5SXin Lifunc_normal_abspath () 240*5ddc57e5SXin Li{ 241*5ddc57e5SXin Li # Start from root dir and reassemble the path. 242*5ddc57e5SXin Li func_normal_abspath_result= 243*5ddc57e5SXin Li func_normal_abspath_tpath=$1 244*5ddc57e5SXin Li func_normal_abspath_altnamespace= 245*5ddc57e5SXin Li case $func_normal_abspath_tpath in 246*5ddc57e5SXin Li "") 247*5ddc57e5SXin Li # Empty path, that just means $cwd. 248*5ddc57e5SXin Li func_stripname '' '/' "`pwd`" 249*5ddc57e5SXin Li func_normal_abspath_result=$func_stripname_result 250*5ddc57e5SXin Li return 251*5ddc57e5SXin Li ;; 252*5ddc57e5SXin Li # The next three entries are used to spot a run of precisely 253*5ddc57e5SXin Li # two leading slashes without using negated character classes; 254*5ddc57e5SXin Li # we take advantage of case's first-match behaviour. 255*5ddc57e5SXin Li ///*) 256*5ddc57e5SXin Li # Unusual form of absolute path, do nothing. 257*5ddc57e5SXin Li ;; 258*5ddc57e5SXin Li //*) 259*5ddc57e5SXin Li # Not necessarily an ordinary path; POSIX reserves leading '//' 260*5ddc57e5SXin Li # and for example Cygwin uses it to access remote file shares 261*5ddc57e5SXin Li # over CIFS/SMB, so we conserve a leading double slash if found. 262*5ddc57e5SXin Li func_normal_abspath_altnamespace=/ 263*5ddc57e5SXin Li ;; 264*5ddc57e5SXin Li /*) 265*5ddc57e5SXin Li # Absolute path, do nothing. 266*5ddc57e5SXin Li ;; 267*5ddc57e5SXin Li *) 268*5ddc57e5SXin Li # Relative path, prepend $cwd. 269*5ddc57e5SXin Li func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 270*5ddc57e5SXin Li ;; 271*5ddc57e5SXin Li esac 272*5ddc57e5SXin Li # Cancel out all the simple stuff to save iterations. We also want 273*5ddc57e5SXin Li # the path to end with a slash for ease of parsing, so make sure 274*5ddc57e5SXin Li # there is one (and only one) here. 275*5ddc57e5SXin Li func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 276*5ddc57e5SXin Li -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 277*5ddc57e5SXin Li while :; do 278*5ddc57e5SXin Li # Processed it all yet? 279*5ddc57e5SXin Li if test "$func_normal_abspath_tpath" = / ; then 280*5ddc57e5SXin Li # If we ascended to the root using ".." the result may be empty now. 281*5ddc57e5SXin Li if test -z "$func_normal_abspath_result" ; then 282*5ddc57e5SXin Li func_normal_abspath_result=/ 283*5ddc57e5SXin Li fi 284*5ddc57e5SXin Li break 285*5ddc57e5SXin Li fi 286*5ddc57e5SXin Li func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 287*5ddc57e5SXin Li -e "$pathcar"` 288*5ddc57e5SXin Li func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 289*5ddc57e5SXin Li -e "$pathcdr"` 290*5ddc57e5SXin Li # Figure out what to do with it 291*5ddc57e5SXin Li case $func_normal_abspath_tcomponent in 292*5ddc57e5SXin Li "") 293*5ddc57e5SXin Li # Trailing empty path component, ignore it. 294*5ddc57e5SXin Li ;; 295*5ddc57e5SXin Li ..) 296*5ddc57e5SXin Li # Parent dir; strip last assembled component from result. 297*5ddc57e5SXin Li func_dirname "$func_normal_abspath_result" 298*5ddc57e5SXin Li func_normal_abspath_result=$func_dirname_result 299*5ddc57e5SXin Li ;; 300*5ddc57e5SXin Li *) 301*5ddc57e5SXin Li # Actual path component, append it. 302*5ddc57e5SXin Li func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 303*5ddc57e5SXin Li ;; 304*5ddc57e5SXin Li esac 305*5ddc57e5SXin Li done 306*5ddc57e5SXin Li # Restore leading double-slash if one was found on entry. 307*5ddc57e5SXin Li func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 308*5ddc57e5SXin Li} 309*5ddc57e5SXin Li 310*5ddc57e5SXin Li# func_relative_path SRCDIR DSTDIR 311*5ddc57e5SXin Li# generates a relative path from SRCDIR to DSTDIR, with a trailing 312*5ddc57e5SXin Li# slash if non-empty, suitable for immediately appending a filename 313*5ddc57e5SXin Li# without needing to append a separator. 314*5ddc57e5SXin Li# value returned in "$func_relative_path_result" 315*5ddc57e5SXin Lifunc_relative_path () 316*5ddc57e5SXin Li{ 317*5ddc57e5SXin Li func_relative_path_result= 318*5ddc57e5SXin Li func_normal_abspath "$1" 319*5ddc57e5SXin Li func_relative_path_tlibdir=$func_normal_abspath_result 320*5ddc57e5SXin Li func_normal_abspath "$2" 321*5ddc57e5SXin Li func_relative_path_tbindir=$func_normal_abspath_result 322*5ddc57e5SXin Li 323*5ddc57e5SXin Li # Ascend the tree starting from libdir 324*5ddc57e5SXin Li while :; do 325*5ddc57e5SXin Li # check if we have found a prefix of bindir 326*5ddc57e5SXin Li case $func_relative_path_tbindir in 327*5ddc57e5SXin Li $func_relative_path_tlibdir) 328*5ddc57e5SXin Li # found an exact match 329*5ddc57e5SXin Li func_relative_path_tcancelled= 330*5ddc57e5SXin Li break 331*5ddc57e5SXin Li ;; 332*5ddc57e5SXin Li $func_relative_path_tlibdir*) 333*5ddc57e5SXin Li # found a matching prefix 334*5ddc57e5SXin Li func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 335*5ddc57e5SXin Li func_relative_path_tcancelled=$func_stripname_result 336*5ddc57e5SXin Li if test -z "$func_relative_path_result"; then 337*5ddc57e5SXin Li func_relative_path_result=. 338*5ddc57e5SXin Li fi 339*5ddc57e5SXin Li break 340*5ddc57e5SXin Li ;; 341*5ddc57e5SXin Li *) 342*5ddc57e5SXin Li func_dirname $func_relative_path_tlibdir 343*5ddc57e5SXin Li func_relative_path_tlibdir=${func_dirname_result} 344*5ddc57e5SXin Li if test "x$func_relative_path_tlibdir" = x ; then 345*5ddc57e5SXin Li # Have to descend all the way to the root! 346*5ddc57e5SXin Li func_relative_path_result=../$func_relative_path_result 347*5ddc57e5SXin Li func_relative_path_tcancelled=$func_relative_path_tbindir 348*5ddc57e5SXin Li break 349*5ddc57e5SXin Li fi 350*5ddc57e5SXin Li func_relative_path_result=../$func_relative_path_result 351*5ddc57e5SXin Li ;; 352*5ddc57e5SXin Li esac 353*5ddc57e5SXin Li done 354*5ddc57e5SXin Li 355*5ddc57e5SXin Li # Now calculate path; take care to avoid doubling-up slashes. 356*5ddc57e5SXin Li func_stripname '' '/' "$func_relative_path_result" 357*5ddc57e5SXin Li func_relative_path_result=$func_stripname_result 358*5ddc57e5SXin Li func_stripname '/' '/' "$func_relative_path_tcancelled" 359*5ddc57e5SXin Li if test "x$func_stripname_result" != x ; then 360*5ddc57e5SXin Li func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 361*5ddc57e5SXin Li fi 362*5ddc57e5SXin Li 363*5ddc57e5SXin Li # Normalisation. If bindir is libdir, return empty string, 364*5ddc57e5SXin Li # else relative path ending with a slash; either way, target 365*5ddc57e5SXin Li # file name can be directly appended. 366*5ddc57e5SXin Li if test ! -z "$func_relative_path_result"; then 367*5ddc57e5SXin Li func_stripname './' '' "$func_relative_path_result/" 368*5ddc57e5SXin Li func_relative_path_result=$func_stripname_result 369*5ddc57e5SXin Li fi 370*5ddc57e5SXin Li} 371*5ddc57e5SXin Li 372*5ddc57e5SXin Li# The name of this program: 373*5ddc57e5SXin Lifunc_dirname_and_basename "$progpath" 374*5ddc57e5SXin Liprogname=$func_basename_result 375*5ddc57e5SXin Li 376*5ddc57e5SXin Li# Make sure we have an absolute path for reexecution: 377*5ddc57e5SXin Licase $progpath in 378*5ddc57e5SXin Li [\\/]*|[A-Za-z]:\\*) ;; 379*5ddc57e5SXin Li *[\\/]*) 380*5ddc57e5SXin Li progdir=$func_dirname_result 381*5ddc57e5SXin Li progdir=`cd "$progdir" && pwd` 382*5ddc57e5SXin Li progpath="$progdir/$progname" 383*5ddc57e5SXin Li ;; 384*5ddc57e5SXin Li *) 385*5ddc57e5SXin Li save_IFS="$IFS" 386*5ddc57e5SXin Li IFS=${PATH_SEPARATOR-:} 387*5ddc57e5SXin Li for progdir in $PATH; do 388*5ddc57e5SXin Li IFS="$save_IFS" 389*5ddc57e5SXin Li test -x "$progdir/$progname" && break 390*5ddc57e5SXin Li done 391*5ddc57e5SXin Li IFS="$save_IFS" 392*5ddc57e5SXin Li test -n "$progdir" || progdir=`pwd` 393*5ddc57e5SXin Li progpath="$progdir/$progname" 394*5ddc57e5SXin Li ;; 395*5ddc57e5SXin Liesac 396*5ddc57e5SXin Li 397*5ddc57e5SXin Li# Sed substitution that helps us do robust quoting. It backslashifies 398*5ddc57e5SXin Li# metacharacters that are still active within double-quoted strings. 399*5ddc57e5SXin LiXsed="${SED}"' -e 1s/^X//' 400*5ddc57e5SXin Lised_quote_subst='s/\([`"$\\]\)/\\\1/g' 401*5ddc57e5SXin Li 402*5ddc57e5SXin Li# Same as above, but do not quote variable references. 403*5ddc57e5SXin Lidouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404*5ddc57e5SXin Li 405*5ddc57e5SXin Li# Sed substitution that turns a string into a regex matching for the 406*5ddc57e5SXin Li# string literally. 407*5ddc57e5SXin Lised_make_literal_regex='s,[].[^$\\*\/],\\&,g' 408*5ddc57e5SXin Li 409*5ddc57e5SXin Li# Sed substitution that converts a w32 file name or path 410*5ddc57e5SXin Li# which contains forward slashes, into one that contains 411*5ddc57e5SXin Li# (escaped) backslashes. A very naive implementation. 412*5ddc57e5SXin Lilt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 413*5ddc57e5SXin Li 414*5ddc57e5SXin Li# Re-`\' parameter expansions in output of double_quote_subst that were 415*5ddc57e5SXin Li# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 416*5ddc57e5SXin Li# in input to double_quote_subst, that '$' was protected from expansion. 417*5ddc57e5SXin Li# Since each input `\' is now two `\'s, look for any number of runs of 418*5ddc57e5SXin Li# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 419*5ddc57e5SXin Libs='\\' 420*5ddc57e5SXin Libs2='\\\\' 421*5ddc57e5SXin Libs4='\\\\\\\\' 422*5ddc57e5SXin Lidollar='\$' 423*5ddc57e5SXin Lised_double_backslash="\ 424*5ddc57e5SXin Li s/$bs4/&\\ 425*5ddc57e5SXin Li/g 426*5ddc57e5SXin Li s/^$bs2$dollar/$bs&/ 427*5ddc57e5SXin Li s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 428*5ddc57e5SXin Li s/\n//g" 429*5ddc57e5SXin Li 430*5ddc57e5SXin Li# Standard options: 431*5ddc57e5SXin Liopt_dry_run=false 432*5ddc57e5SXin Liopt_help=false 433*5ddc57e5SXin Liopt_quiet=false 434*5ddc57e5SXin Liopt_verbose=false 435*5ddc57e5SXin Liopt_warning=: 436*5ddc57e5SXin Li 437*5ddc57e5SXin Li# func_echo arg... 438*5ddc57e5SXin Li# Echo program name prefixed message, along with the current mode 439*5ddc57e5SXin Li# name if it has been set yet. 440*5ddc57e5SXin Lifunc_echo () 441*5ddc57e5SXin Li{ 442*5ddc57e5SXin Li $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 443*5ddc57e5SXin Li} 444*5ddc57e5SXin Li 445*5ddc57e5SXin Li# func_verbose arg... 446*5ddc57e5SXin Li# Echo program name prefixed message in verbose mode only. 447*5ddc57e5SXin Lifunc_verbose () 448*5ddc57e5SXin Li{ 449*5ddc57e5SXin Li $opt_verbose && func_echo ${1+"$@"} 450*5ddc57e5SXin Li 451*5ddc57e5SXin Li # A bug in bash halts the script if the last line of a function 452*5ddc57e5SXin Li # fails when set -e is in force, so we need another command to 453*5ddc57e5SXin Li # work around that: 454*5ddc57e5SXin Li : 455*5ddc57e5SXin Li} 456*5ddc57e5SXin Li 457*5ddc57e5SXin Li# func_echo_all arg... 458*5ddc57e5SXin Li# Invoke $ECHO with all args, space-separated. 459*5ddc57e5SXin Lifunc_echo_all () 460*5ddc57e5SXin Li{ 461*5ddc57e5SXin Li $ECHO "$*" 462*5ddc57e5SXin Li} 463*5ddc57e5SXin Li 464*5ddc57e5SXin Li# func_error arg... 465*5ddc57e5SXin Li# Echo program name prefixed message to standard error. 466*5ddc57e5SXin Lifunc_error () 467*5ddc57e5SXin Li{ 468*5ddc57e5SXin Li $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 469*5ddc57e5SXin Li} 470*5ddc57e5SXin Li 471*5ddc57e5SXin Li# func_warning arg... 472*5ddc57e5SXin Li# Echo program name prefixed warning message to standard error. 473*5ddc57e5SXin Lifunc_warning () 474*5ddc57e5SXin Li{ 475*5ddc57e5SXin Li $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476*5ddc57e5SXin Li 477*5ddc57e5SXin Li # bash bug again: 478*5ddc57e5SXin Li : 479*5ddc57e5SXin Li} 480*5ddc57e5SXin Li 481*5ddc57e5SXin Li# func_fatal_error arg... 482*5ddc57e5SXin Li# Echo program name prefixed message to standard error, and exit. 483*5ddc57e5SXin Lifunc_fatal_error () 484*5ddc57e5SXin Li{ 485*5ddc57e5SXin Li func_error ${1+"$@"} 486*5ddc57e5SXin Li exit $EXIT_FAILURE 487*5ddc57e5SXin Li} 488*5ddc57e5SXin Li 489*5ddc57e5SXin Li# func_fatal_help arg... 490*5ddc57e5SXin Li# Echo program name prefixed message to standard error, followed by 491*5ddc57e5SXin Li# a help hint, and exit. 492*5ddc57e5SXin Lifunc_fatal_help () 493*5ddc57e5SXin Li{ 494*5ddc57e5SXin Li func_error ${1+"$@"} 495*5ddc57e5SXin Li func_fatal_error "$help" 496*5ddc57e5SXin Li} 497*5ddc57e5SXin Lihelp="Try \`$progname --help' for more information." ## default 498*5ddc57e5SXin Li 499*5ddc57e5SXin Li 500*5ddc57e5SXin Li# func_grep expression filename 501*5ddc57e5SXin Li# Check whether EXPRESSION matches any line of FILENAME, without output. 502*5ddc57e5SXin Lifunc_grep () 503*5ddc57e5SXin Li{ 504*5ddc57e5SXin Li $GREP "$1" "$2" >/dev/null 2>&1 505*5ddc57e5SXin Li} 506*5ddc57e5SXin Li 507*5ddc57e5SXin Li 508*5ddc57e5SXin Li# func_mkdir_p directory-path 509*5ddc57e5SXin Li# Make sure the entire path to DIRECTORY-PATH is available. 510*5ddc57e5SXin Lifunc_mkdir_p () 511*5ddc57e5SXin Li{ 512*5ddc57e5SXin Li my_directory_path="$1" 513*5ddc57e5SXin Li my_dir_list= 514*5ddc57e5SXin Li 515*5ddc57e5SXin Li if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516*5ddc57e5SXin Li 517*5ddc57e5SXin Li # Protect directory names starting with `-' 518*5ddc57e5SXin Li case $my_directory_path in 519*5ddc57e5SXin Li -*) my_directory_path="./$my_directory_path" ;; 520*5ddc57e5SXin Li esac 521*5ddc57e5SXin Li 522*5ddc57e5SXin Li # While some portion of DIR does not yet exist... 523*5ddc57e5SXin Li while test ! -d "$my_directory_path"; do 524*5ddc57e5SXin Li # ...make a list in topmost first order. Use a colon delimited 525*5ddc57e5SXin Li # list incase some portion of path contains whitespace. 526*5ddc57e5SXin Li my_dir_list="$my_directory_path:$my_dir_list" 527*5ddc57e5SXin Li 528*5ddc57e5SXin Li # If the last portion added has no slash in it, the list is done 529*5ddc57e5SXin Li case $my_directory_path in */*) ;; *) break ;; esac 530*5ddc57e5SXin Li 531*5ddc57e5SXin Li # ...otherwise throw away the child directory and loop 532*5ddc57e5SXin Li my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533*5ddc57e5SXin Li done 534*5ddc57e5SXin Li my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535*5ddc57e5SXin Li 536*5ddc57e5SXin Li save_mkdir_p_IFS="$IFS"; IFS=':' 537*5ddc57e5SXin Li for my_dir in $my_dir_list; do 538*5ddc57e5SXin Li IFS="$save_mkdir_p_IFS" 539*5ddc57e5SXin Li # mkdir can fail with a `File exist' error if two processes 540*5ddc57e5SXin Li # try to create one of the directories concurrently. Don't 541*5ddc57e5SXin Li # stop in that case! 542*5ddc57e5SXin Li $MKDIR "$my_dir" 2>/dev/null || : 543*5ddc57e5SXin Li done 544*5ddc57e5SXin Li IFS="$save_mkdir_p_IFS" 545*5ddc57e5SXin Li 546*5ddc57e5SXin Li # Bail out if we (or some other process) failed to create a directory. 547*5ddc57e5SXin Li test -d "$my_directory_path" || \ 548*5ddc57e5SXin Li func_fatal_error "Failed to create \`$1'" 549*5ddc57e5SXin Li fi 550*5ddc57e5SXin Li} 551*5ddc57e5SXin Li 552*5ddc57e5SXin Li 553*5ddc57e5SXin Li# func_mktempdir [string] 554*5ddc57e5SXin Li# Make a temporary directory that won't clash with other running 555*5ddc57e5SXin Li# libtool processes, and avoids race conditions if possible. If 556*5ddc57e5SXin Li# given, STRING is the basename for that directory. 557*5ddc57e5SXin Lifunc_mktempdir () 558*5ddc57e5SXin Li{ 559*5ddc57e5SXin Li my_template="${TMPDIR-/tmp}/${1-$progname}" 560*5ddc57e5SXin Li 561*5ddc57e5SXin Li if test "$opt_dry_run" = ":"; then 562*5ddc57e5SXin Li # Return a directory name, but don't create it in dry-run mode 563*5ddc57e5SXin Li my_tmpdir="${my_template}-$$" 564*5ddc57e5SXin Li else 565*5ddc57e5SXin Li 566*5ddc57e5SXin Li # If mktemp works, use that first and foremost 567*5ddc57e5SXin Li my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 568*5ddc57e5SXin Li 569*5ddc57e5SXin Li if test ! -d "$my_tmpdir"; then 570*5ddc57e5SXin Li # Failing that, at least try and use $RANDOM to avoid a race 571*5ddc57e5SXin Li my_tmpdir="${my_template}-${RANDOM-0}$$" 572*5ddc57e5SXin Li 573*5ddc57e5SXin Li save_mktempdir_umask=`umask` 574*5ddc57e5SXin Li umask 0077 575*5ddc57e5SXin Li $MKDIR "$my_tmpdir" 576*5ddc57e5SXin Li umask $save_mktempdir_umask 577*5ddc57e5SXin Li fi 578*5ddc57e5SXin Li 579*5ddc57e5SXin Li # If we're not in dry-run mode, bomb out on failure 580*5ddc57e5SXin Li test -d "$my_tmpdir" || \ 581*5ddc57e5SXin Li func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 582*5ddc57e5SXin Li fi 583*5ddc57e5SXin Li 584*5ddc57e5SXin Li $ECHO "$my_tmpdir" 585*5ddc57e5SXin Li} 586*5ddc57e5SXin Li 587*5ddc57e5SXin Li 588*5ddc57e5SXin Li# func_quote_for_eval arg 589*5ddc57e5SXin Li# Aesthetically quote ARG to be evaled later. 590*5ddc57e5SXin Li# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 591*5ddc57e5SXin Li# is double-quoted, suitable for a subsequent eval, whereas 592*5ddc57e5SXin Li# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 593*5ddc57e5SXin Li# which are still active within double quotes backslashified. 594*5ddc57e5SXin Lifunc_quote_for_eval () 595*5ddc57e5SXin Li{ 596*5ddc57e5SXin Li case $1 in 597*5ddc57e5SXin Li *[\\\`\"\$]*) 598*5ddc57e5SXin Li func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599*5ddc57e5SXin Li *) 600*5ddc57e5SXin Li func_quote_for_eval_unquoted_result="$1" ;; 601*5ddc57e5SXin Li esac 602*5ddc57e5SXin Li 603*5ddc57e5SXin Li case $func_quote_for_eval_unquoted_result in 604*5ddc57e5SXin Li # Double-quote args containing shell metacharacters to delay 605*5ddc57e5SXin Li # word splitting, command substitution and and variable 606*5ddc57e5SXin Li # expansion for a subsequent eval. 607*5ddc57e5SXin Li # Many Bourne shells cannot handle close brackets correctly 608*5ddc57e5SXin Li # in scan sets, so we specify it separately. 609*5ddc57e5SXin Li *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 610*5ddc57e5SXin Li func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611*5ddc57e5SXin Li ;; 612*5ddc57e5SXin Li *) 613*5ddc57e5SXin Li func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 614*5ddc57e5SXin Li esac 615*5ddc57e5SXin Li} 616*5ddc57e5SXin Li 617*5ddc57e5SXin Li 618*5ddc57e5SXin Li# func_quote_for_expand arg 619*5ddc57e5SXin Li# Aesthetically quote ARG to be evaled later; same as above, 620*5ddc57e5SXin Li# but do not quote variable references. 621*5ddc57e5SXin Lifunc_quote_for_expand () 622*5ddc57e5SXin Li{ 623*5ddc57e5SXin Li case $1 in 624*5ddc57e5SXin Li *[\\\`\"]*) 625*5ddc57e5SXin Li my_arg=`$ECHO "$1" | $SED \ 626*5ddc57e5SXin Li -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 627*5ddc57e5SXin Li *) 628*5ddc57e5SXin Li my_arg="$1" ;; 629*5ddc57e5SXin Li esac 630*5ddc57e5SXin Li 631*5ddc57e5SXin Li case $my_arg in 632*5ddc57e5SXin Li # Double-quote args containing shell metacharacters to delay 633*5ddc57e5SXin Li # word splitting and command substitution for a subsequent eval. 634*5ddc57e5SXin Li # Many Bourne shells cannot handle close brackets correctly 635*5ddc57e5SXin Li # in scan sets, so we specify it separately. 636*5ddc57e5SXin Li *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 637*5ddc57e5SXin Li my_arg="\"$my_arg\"" 638*5ddc57e5SXin Li ;; 639*5ddc57e5SXin Li esac 640*5ddc57e5SXin Li 641*5ddc57e5SXin Li func_quote_for_expand_result="$my_arg" 642*5ddc57e5SXin Li} 643*5ddc57e5SXin Li 644*5ddc57e5SXin Li 645*5ddc57e5SXin Li# func_show_eval cmd [fail_exp] 646*5ddc57e5SXin Li# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 647*5ddc57e5SXin Li# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 648*5ddc57e5SXin Li# is given, then evaluate it. 649*5ddc57e5SXin Lifunc_show_eval () 650*5ddc57e5SXin Li{ 651*5ddc57e5SXin Li my_cmd="$1" 652*5ddc57e5SXin Li my_fail_exp="${2-:}" 653*5ddc57e5SXin Li 654*5ddc57e5SXin Li ${opt_silent-false} || { 655*5ddc57e5SXin Li func_quote_for_expand "$my_cmd" 656*5ddc57e5SXin Li eval "func_echo $func_quote_for_expand_result" 657*5ddc57e5SXin Li } 658*5ddc57e5SXin Li 659*5ddc57e5SXin Li if ${opt_dry_run-false}; then :; else 660*5ddc57e5SXin Li eval "$my_cmd" 661*5ddc57e5SXin Li my_status=$? 662*5ddc57e5SXin Li if test "$my_status" -eq 0; then :; else 663*5ddc57e5SXin Li eval "(exit $my_status); $my_fail_exp" 664*5ddc57e5SXin Li fi 665*5ddc57e5SXin Li fi 666*5ddc57e5SXin Li} 667*5ddc57e5SXin Li 668*5ddc57e5SXin Li 669*5ddc57e5SXin Li# func_show_eval_locale cmd [fail_exp] 670*5ddc57e5SXin Li# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 671*5ddc57e5SXin Li# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 672*5ddc57e5SXin Li# is given, then evaluate it. Use the saved locale for evaluation. 673*5ddc57e5SXin Lifunc_show_eval_locale () 674*5ddc57e5SXin Li{ 675*5ddc57e5SXin Li my_cmd="$1" 676*5ddc57e5SXin Li my_fail_exp="${2-:}" 677*5ddc57e5SXin Li 678*5ddc57e5SXin Li ${opt_silent-false} || { 679*5ddc57e5SXin Li func_quote_for_expand "$my_cmd" 680*5ddc57e5SXin Li eval "func_echo $func_quote_for_expand_result" 681*5ddc57e5SXin Li } 682*5ddc57e5SXin Li 683*5ddc57e5SXin Li if ${opt_dry_run-false}; then :; else 684*5ddc57e5SXin Li eval "$lt_user_locale 685*5ddc57e5SXin Li $my_cmd" 686*5ddc57e5SXin Li my_status=$? 687*5ddc57e5SXin Li eval "$lt_safe_locale" 688*5ddc57e5SXin Li if test "$my_status" -eq 0; then :; else 689*5ddc57e5SXin Li eval "(exit $my_status); $my_fail_exp" 690*5ddc57e5SXin Li fi 691*5ddc57e5SXin Li fi 692*5ddc57e5SXin Li} 693*5ddc57e5SXin Li 694*5ddc57e5SXin Li# func_tr_sh 695*5ddc57e5SXin Li# Turn $1 into a string suitable for a shell variable name. 696*5ddc57e5SXin Li# Result is stored in $func_tr_sh_result. All characters 697*5ddc57e5SXin Li# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 698*5ddc57e5SXin Li# if $1 begins with a digit, a '_' is prepended as well. 699*5ddc57e5SXin Lifunc_tr_sh () 700*5ddc57e5SXin Li{ 701*5ddc57e5SXin Li case $1 in 702*5ddc57e5SXin Li [0-9]* | *[!a-zA-Z0-9_]*) 703*5ddc57e5SXin Li func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 704*5ddc57e5SXin Li ;; 705*5ddc57e5SXin Li * ) 706*5ddc57e5SXin Li func_tr_sh_result=$1 707*5ddc57e5SXin Li ;; 708*5ddc57e5SXin Li esac 709*5ddc57e5SXin Li} 710*5ddc57e5SXin Li 711*5ddc57e5SXin Li 712*5ddc57e5SXin Li# func_version 713*5ddc57e5SXin Li# Echo version message to standard output and exit. 714*5ddc57e5SXin Lifunc_version () 715*5ddc57e5SXin Li{ 716*5ddc57e5SXin Li $opt_debug 717*5ddc57e5SXin Li 718*5ddc57e5SXin Li $SED -n '/(C)/!b go 719*5ddc57e5SXin Li :more 720*5ddc57e5SXin Li /\./!{ 721*5ddc57e5SXin Li N 722*5ddc57e5SXin Li s/\n# / / 723*5ddc57e5SXin Li b more 724*5ddc57e5SXin Li } 725*5ddc57e5SXin Li :go 726*5ddc57e5SXin Li /^# '$PROGRAM' (GNU /,/# warranty; / { 727*5ddc57e5SXin Li s/^# // 728*5ddc57e5SXin Li s/^# *$// 729*5ddc57e5SXin Li s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 730*5ddc57e5SXin Li p 731*5ddc57e5SXin Li }' < "$progpath" 732*5ddc57e5SXin Li exit $? 733*5ddc57e5SXin Li} 734*5ddc57e5SXin Li 735*5ddc57e5SXin Li# func_usage 736*5ddc57e5SXin Li# Echo short help message to standard output and exit. 737*5ddc57e5SXin Lifunc_usage () 738*5ddc57e5SXin Li{ 739*5ddc57e5SXin Li $opt_debug 740*5ddc57e5SXin Li 741*5ddc57e5SXin Li $SED -n '/^# Usage:/,/^# *.*--help/ { 742*5ddc57e5SXin Li s/^# // 743*5ddc57e5SXin Li s/^# *$// 744*5ddc57e5SXin Li s/\$progname/'$progname'/ 745*5ddc57e5SXin Li p 746*5ddc57e5SXin Li }' < "$progpath" 747*5ddc57e5SXin Li echo 748*5ddc57e5SXin Li $ECHO "run \`$progname --help | more' for full usage" 749*5ddc57e5SXin Li exit $? 750*5ddc57e5SXin Li} 751*5ddc57e5SXin Li 752*5ddc57e5SXin Li# func_help [NOEXIT] 753*5ddc57e5SXin Li# Echo long help message to standard output and exit, 754*5ddc57e5SXin Li# unless 'noexit' is passed as argument. 755*5ddc57e5SXin Lifunc_help () 756*5ddc57e5SXin Li{ 757*5ddc57e5SXin Li $opt_debug 758*5ddc57e5SXin Li 759*5ddc57e5SXin Li $SED -n '/^# Usage:/,/# Report bugs to/ { 760*5ddc57e5SXin Li :print 761*5ddc57e5SXin Li s/^# // 762*5ddc57e5SXin Li s/^# *$// 763*5ddc57e5SXin Li s*\$progname*'$progname'* 764*5ddc57e5SXin Li s*\$host*'"$host"'* 765*5ddc57e5SXin Li s*\$SHELL*'"$SHELL"'* 766*5ddc57e5SXin Li s*\$LTCC*'"$LTCC"'* 767*5ddc57e5SXin Li s*\$LTCFLAGS*'"$LTCFLAGS"'* 768*5ddc57e5SXin Li s*\$LD*'"$LD"'* 769*5ddc57e5SXin Li s/\$with_gnu_ld/'"$with_gnu_ld"'/ 770*5ddc57e5SXin Li s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 771*5ddc57e5SXin Li s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 772*5ddc57e5SXin Li p 773*5ddc57e5SXin Li d 774*5ddc57e5SXin Li } 775*5ddc57e5SXin Li /^# .* home page:/b print 776*5ddc57e5SXin Li /^# General help using/b print 777*5ddc57e5SXin Li ' < "$progpath" 778*5ddc57e5SXin Li ret=$? 779*5ddc57e5SXin Li if test -z "$1"; then 780*5ddc57e5SXin Li exit $ret 781*5ddc57e5SXin Li fi 782*5ddc57e5SXin Li} 783*5ddc57e5SXin Li 784*5ddc57e5SXin Li# func_missing_arg argname 785*5ddc57e5SXin Li# Echo program name prefixed message to standard error and set global 786*5ddc57e5SXin Li# exit_cmd. 787*5ddc57e5SXin Lifunc_missing_arg () 788*5ddc57e5SXin Li{ 789*5ddc57e5SXin Li $opt_debug 790*5ddc57e5SXin Li 791*5ddc57e5SXin Li func_error "missing argument for $1." 792*5ddc57e5SXin Li exit_cmd=exit 793*5ddc57e5SXin Li} 794*5ddc57e5SXin Li 795*5ddc57e5SXin Li 796*5ddc57e5SXin Li# func_split_short_opt shortopt 797*5ddc57e5SXin Li# Set func_split_short_opt_name and func_split_short_opt_arg shell 798*5ddc57e5SXin Li# variables after splitting SHORTOPT after the 2nd character. 799*5ddc57e5SXin Lifunc_split_short_opt () 800*5ddc57e5SXin Li{ 801*5ddc57e5SXin Li my_sed_short_opt='1s/^\(..\).*$/\1/;q' 802*5ddc57e5SXin Li my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 803*5ddc57e5SXin Li 804*5ddc57e5SXin Li func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 805*5ddc57e5SXin Li func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 806*5ddc57e5SXin Li} # func_split_short_opt may be replaced by extended shell implementation 807*5ddc57e5SXin Li 808*5ddc57e5SXin Li 809*5ddc57e5SXin Li# func_split_long_opt longopt 810*5ddc57e5SXin Li# Set func_split_long_opt_name and func_split_long_opt_arg shell 811*5ddc57e5SXin Li# variables after splitting LONGOPT at the `=' sign. 812*5ddc57e5SXin Lifunc_split_long_opt () 813*5ddc57e5SXin Li{ 814*5ddc57e5SXin Li my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 815*5ddc57e5SXin Li my_sed_long_arg='1s/^--[^=]*=//' 816*5ddc57e5SXin Li 817*5ddc57e5SXin Li func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 818*5ddc57e5SXin Li func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 819*5ddc57e5SXin Li} # func_split_long_opt may be replaced by extended shell implementation 820*5ddc57e5SXin Li 821*5ddc57e5SXin Liexit_cmd=: 822*5ddc57e5SXin Li 823*5ddc57e5SXin Li 824*5ddc57e5SXin Li 825*5ddc57e5SXin Li 826*5ddc57e5SXin Li 827*5ddc57e5SXin Limagic="%%%MAGIC variable%%%" 828*5ddc57e5SXin Limagic_exe="%%%MAGIC EXE variable%%%" 829*5ddc57e5SXin Li 830*5ddc57e5SXin Li# Global variables. 831*5ddc57e5SXin Linonopt= 832*5ddc57e5SXin Lipreserve_args= 833*5ddc57e5SXin Lilo2o="s/\\.lo\$/.${objext}/" 834*5ddc57e5SXin Lio2lo="s/\\.${objext}\$/.lo/" 835*5ddc57e5SXin Liextracted_archives= 836*5ddc57e5SXin Liextracted_serial=0 837*5ddc57e5SXin Li 838*5ddc57e5SXin Li# If this variable is set in any of the actions, the command in it 839*5ddc57e5SXin Li# will be execed at the end. This prevents here-documents from being 840*5ddc57e5SXin Li# left over by shells. 841*5ddc57e5SXin Liexec_cmd= 842*5ddc57e5SXin Li 843*5ddc57e5SXin Li# func_append var value 844*5ddc57e5SXin Li# Append VALUE to the end of shell variable VAR. 845*5ddc57e5SXin Lifunc_append () 846*5ddc57e5SXin Li{ 847*5ddc57e5SXin Li eval "${1}=\$${1}\${2}" 848*5ddc57e5SXin Li} # func_append may be replaced by extended shell implementation 849*5ddc57e5SXin Li 850*5ddc57e5SXin Li# func_append_quoted var value 851*5ddc57e5SXin Li# Quote VALUE and append to the end of shell variable VAR, separated 852*5ddc57e5SXin Li# by a space. 853*5ddc57e5SXin Lifunc_append_quoted () 854*5ddc57e5SXin Li{ 855*5ddc57e5SXin Li func_quote_for_eval "${2}" 856*5ddc57e5SXin Li eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 857*5ddc57e5SXin Li} # func_append_quoted may be replaced by extended shell implementation 858*5ddc57e5SXin Li 859*5ddc57e5SXin Li 860*5ddc57e5SXin Li# func_arith arithmetic-term... 861*5ddc57e5SXin Lifunc_arith () 862*5ddc57e5SXin Li{ 863*5ddc57e5SXin Li func_arith_result=`expr "${@}"` 864*5ddc57e5SXin Li} # func_arith may be replaced by extended shell implementation 865*5ddc57e5SXin Li 866*5ddc57e5SXin Li 867*5ddc57e5SXin Li# func_len string 868*5ddc57e5SXin Li# STRING may not start with a hyphen. 869*5ddc57e5SXin Lifunc_len () 870*5ddc57e5SXin Li{ 871*5ddc57e5SXin Li func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 872*5ddc57e5SXin Li} # func_len may be replaced by extended shell implementation 873*5ddc57e5SXin Li 874*5ddc57e5SXin Li 875*5ddc57e5SXin Li# func_lo2o object 876*5ddc57e5SXin Lifunc_lo2o () 877*5ddc57e5SXin Li{ 878*5ddc57e5SXin Li func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 879*5ddc57e5SXin Li} # func_lo2o may be replaced by extended shell implementation 880*5ddc57e5SXin Li 881*5ddc57e5SXin Li 882*5ddc57e5SXin Li# func_xform libobj-or-source 883*5ddc57e5SXin Lifunc_xform () 884*5ddc57e5SXin Li{ 885*5ddc57e5SXin Li func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 886*5ddc57e5SXin Li} # func_xform may be replaced by extended shell implementation 887*5ddc57e5SXin Li 888*5ddc57e5SXin Li 889*5ddc57e5SXin Li# func_fatal_configuration arg... 890*5ddc57e5SXin Li# Echo program name prefixed message to standard error, followed by 891*5ddc57e5SXin Li# a configuration failure hint, and exit. 892*5ddc57e5SXin Lifunc_fatal_configuration () 893*5ddc57e5SXin Li{ 894*5ddc57e5SXin Li func_error ${1+"$@"} 895*5ddc57e5SXin Li func_error "See the $PACKAGE documentation for more information." 896*5ddc57e5SXin Li func_fatal_error "Fatal configuration error." 897*5ddc57e5SXin Li} 898*5ddc57e5SXin Li 899*5ddc57e5SXin Li 900*5ddc57e5SXin Li# func_config 901*5ddc57e5SXin Li# Display the configuration for all the tags in this script. 902*5ddc57e5SXin Lifunc_config () 903*5ddc57e5SXin Li{ 904*5ddc57e5SXin Li re_begincf='^# ### BEGIN LIBTOOL' 905*5ddc57e5SXin Li re_endcf='^# ### END LIBTOOL' 906*5ddc57e5SXin Li 907*5ddc57e5SXin Li # Default configuration. 908*5ddc57e5SXin Li $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 909*5ddc57e5SXin Li 910*5ddc57e5SXin Li # Now print the configurations for the tags. 911*5ddc57e5SXin Li for tagname in $taglist; do 912*5ddc57e5SXin Li $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 913*5ddc57e5SXin Li done 914*5ddc57e5SXin Li 915*5ddc57e5SXin Li exit $? 916*5ddc57e5SXin Li} 917*5ddc57e5SXin Li 918*5ddc57e5SXin Li# func_features 919*5ddc57e5SXin Li# Display the features supported by this script. 920*5ddc57e5SXin Lifunc_features () 921*5ddc57e5SXin Li{ 922*5ddc57e5SXin Li echo "host: $host" 923*5ddc57e5SXin Li if test "$build_libtool_libs" = yes; then 924*5ddc57e5SXin Li echo "enable shared libraries" 925*5ddc57e5SXin Li else 926*5ddc57e5SXin Li echo "disable shared libraries" 927*5ddc57e5SXin Li fi 928*5ddc57e5SXin Li if test "$build_old_libs" = yes; then 929*5ddc57e5SXin Li echo "enable static libraries" 930*5ddc57e5SXin Li else 931*5ddc57e5SXin Li echo "disable static libraries" 932*5ddc57e5SXin Li fi 933*5ddc57e5SXin Li 934*5ddc57e5SXin Li exit $? 935*5ddc57e5SXin Li} 936*5ddc57e5SXin Li 937*5ddc57e5SXin Li# func_enable_tag tagname 938*5ddc57e5SXin Li# Verify that TAGNAME is valid, and either flag an error and exit, or 939*5ddc57e5SXin Li# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940*5ddc57e5SXin Li# variable here. 941*5ddc57e5SXin Lifunc_enable_tag () 942*5ddc57e5SXin Li{ 943*5ddc57e5SXin Li # Global variable: 944*5ddc57e5SXin Li tagname="$1" 945*5ddc57e5SXin Li 946*5ddc57e5SXin Li re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 947*5ddc57e5SXin Li re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 948*5ddc57e5SXin Li sed_extractcf="/$re_begincf/,/$re_endcf/p" 949*5ddc57e5SXin Li 950*5ddc57e5SXin Li # Validate tagname. 951*5ddc57e5SXin Li case $tagname in 952*5ddc57e5SXin Li *[!-_A-Za-z0-9,/]*) 953*5ddc57e5SXin Li func_fatal_error "invalid tag name: $tagname" 954*5ddc57e5SXin Li ;; 955*5ddc57e5SXin Li esac 956*5ddc57e5SXin Li 957*5ddc57e5SXin Li # Don't test for the "default" C tag, as we know it's 958*5ddc57e5SXin Li # there but not specially marked. 959*5ddc57e5SXin Li case $tagname in 960*5ddc57e5SXin Li CC) ;; 961*5ddc57e5SXin Li *) 962*5ddc57e5SXin Li if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 963*5ddc57e5SXin Li taglist="$taglist $tagname" 964*5ddc57e5SXin Li 965*5ddc57e5SXin Li # Evaluate the configuration. Be careful to quote the path 966*5ddc57e5SXin Li # and the sed script, to avoid splitting on whitespace, but 967*5ddc57e5SXin Li # also don't use non-portable quotes within backquotes within 968*5ddc57e5SXin Li # quotes we have to do it in 2 steps: 969*5ddc57e5SXin Li extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 970*5ddc57e5SXin Li eval "$extractedcf" 971*5ddc57e5SXin Li else 972*5ddc57e5SXin Li func_error "ignoring unknown tag $tagname" 973*5ddc57e5SXin Li fi 974*5ddc57e5SXin Li ;; 975*5ddc57e5SXin Li esac 976*5ddc57e5SXin Li} 977*5ddc57e5SXin Li 978*5ddc57e5SXin Li# func_check_version_match 979*5ddc57e5SXin Li# Ensure that we are using m4 macros, and libtool script from the same 980*5ddc57e5SXin Li# release of libtool. 981*5ddc57e5SXin Lifunc_check_version_match () 982*5ddc57e5SXin Li{ 983*5ddc57e5SXin Li if test "$package_revision" != "$macro_revision"; then 984*5ddc57e5SXin Li if test "$VERSION" != "$macro_version"; then 985*5ddc57e5SXin Li if test -z "$macro_version"; then 986*5ddc57e5SXin Li cat >&2 <<_LT_EOF 987*5ddc57e5SXin Li$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 988*5ddc57e5SXin Li$progname: definition of this LT_INIT comes from an older release. 989*5ddc57e5SXin Li$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 990*5ddc57e5SXin Li$progname: and run autoconf again. 991*5ddc57e5SXin Li_LT_EOF 992*5ddc57e5SXin Li else 993*5ddc57e5SXin Li cat >&2 <<_LT_EOF 994*5ddc57e5SXin Li$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 995*5ddc57e5SXin Li$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 996*5ddc57e5SXin Li$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 997*5ddc57e5SXin Li$progname: and run autoconf again. 998*5ddc57e5SXin Li_LT_EOF 999*5ddc57e5SXin Li fi 1000*5ddc57e5SXin Li else 1001*5ddc57e5SXin Li cat >&2 <<_LT_EOF 1002*5ddc57e5SXin Li$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1003*5ddc57e5SXin Li$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1004*5ddc57e5SXin Li$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1005*5ddc57e5SXin Li$progname: of $PACKAGE $VERSION and run autoconf again. 1006*5ddc57e5SXin Li_LT_EOF 1007*5ddc57e5SXin Li fi 1008*5ddc57e5SXin Li 1009*5ddc57e5SXin Li exit $EXIT_MISMATCH 1010*5ddc57e5SXin Li fi 1011*5ddc57e5SXin Li} 1012*5ddc57e5SXin Li 1013*5ddc57e5SXin Li 1014*5ddc57e5SXin Li# Shorthand for --mode=foo, only valid as the first argument 1015*5ddc57e5SXin Licase $1 in 1016*5ddc57e5SXin Liclean|clea|cle|cl) 1017*5ddc57e5SXin Li shift; set dummy --mode clean ${1+"$@"}; shift 1018*5ddc57e5SXin Li ;; 1019*5ddc57e5SXin Licompile|compil|compi|comp|com|co|c) 1020*5ddc57e5SXin Li shift; set dummy --mode compile ${1+"$@"}; shift 1021*5ddc57e5SXin Li ;; 1022*5ddc57e5SXin Liexecute|execut|execu|exec|exe|ex|e) 1023*5ddc57e5SXin Li shift; set dummy --mode execute ${1+"$@"}; shift 1024*5ddc57e5SXin Li ;; 1025*5ddc57e5SXin Lifinish|finis|fini|fin|fi|f) 1026*5ddc57e5SXin Li shift; set dummy --mode finish ${1+"$@"}; shift 1027*5ddc57e5SXin Li ;; 1028*5ddc57e5SXin Liinstall|instal|insta|inst|ins|in|i) 1029*5ddc57e5SXin Li shift; set dummy --mode install ${1+"$@"}; shift 1030*5ddc57e5SXin Li ;; 1031*5ddc57e5SXin Lilink|lin|li|l) 1032*5ddc57e5SXin Li shift; set dummy --mode link ${1+"$@"}; shift 1033*5ddc57e5SXin Li ;; 1034*5ddc57e5SXin Liuninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 1035*5ddc57e5SXin Li shift; set dummy --mode uninstall ${1+"$@"}; shift 1036*5ddc57e5SXin Li ;; 1037*5ddc57e5SXin Liesac 1038*5ddc57e5SXin Li 1039*5ddc57e5SXin Li 1040*5ddc57e5SXin Li 1041*5ddc57e5SXin Li# Option defaults: 1042*5ddc57e5SXin Liopt_debug=: 1043*5ddc57e5SXin Liopt_dry_run=false 1044*5ddc57e5SXin Liopt_config=false 1045*5ddc57e5SXin Liopt_preserve_dup_deps=false 1046*5ddc57e5SXin Liopt_features=false 1047*5ddc57e5SXin Liopt_finish=false 1048*5ddc57e5SXin Liopt_help=false 1049*5ddc57e5SXin Liopt_help_all=false 1050*5ddc57e5SXin Liopt_silent=: 1051*5ddc57e5SXin Liopt_warning=: 1052*5ddc57e5SXin Liopt_verbose=: 1053*5ddc57e5SXin Liopt_silent=false 1054*5ddc57e5SXin Liopt_verbose=false 1055*5ddc57e5SXin Li 1056*5ddc57e5SXin Li 1057*5ddc57e5SXin Li# Parse options once, thoroughly. This comes as soon as possible in the 1058*5ddc57e5SXin Li# script to make things like `--version' happen as quickly as we can. 1059*5ddc57e5SXin Li{ 1060*5ddc57e5SXin Li # this just eases exit handling 1061*5ddc57e5SXin Li while test $# -gt 0; do 1062*5ddc57e5SXin Li opt="$1" 1063*5ddc57e5SXin Li shift 1064*5ddc57e5SXin Li case $opt in 1065*5ddc57e5SXin Li --debug|-x) opt_debug='set -x' 1066*5ddc57e5SXin Li func_echo "enabling shell trace mode" 1067*5ddc57e5SXin Li $opt_debug 1068*5ddc57e5SXin Li ;; 1069*5ddc57e5SXin Li --dry-run|--dryrun|-n) 1070*5ddc57e5SXin Li opt_dry_run=: 1071*5ddc57e5SXin Li ;; 1072*5ddc57e5SXin Li --config) 1073*5ddc57e5SXin Li opt_config=: 1074*5ddc57e5SXin Lifunc_config 1075*5ddc57e5SXin Li ;; 1076*5ddc57e5SXin Li --dlopen|-dlopen) 1077*5ddc57e5SXin Li optarg="$1" 1078*5ddc57e5SXin Li opt_dlopen="${opt_dlopen+$opt_dlopen 1079*5ddc57e5SXin Li}$optarg" 1080*5ddc57e5SXin Li shift 1081*5ddc57e5SXin Li ;; 1082*5ddc57e5SXin Li --preserve-dup-deps) 1083*5ddc57e5SXin Li opt_preserve_dup_deps=: 1084*5ddc57e5SXin Li ;; 1085*5ddc57e5SXin Li --features) 1086*5ddc57e5SXin Li opt_features=: 1087*5ddc57e5SXin Lifunc_features 1088*5ddc57e5SXin Li ;; 1089*5ddc57e5SXin Li --finish) 1090*5ddc57e5SXin Li opt_finish=: 1091*5ddc57e5SXin Liset dummy --mode finish ${1+"$@"}; shift 1092*5ddc57e5SXin Li ;; 1093*5ddc57e5SXin Li --help) 1094*5ddc57e5SXin Li opt_help=: 1095*5ddc57e5SXin Li ;; 1096*5ddc57e5SXin Li --help-all) 1097*5ddc57e5SXin Li opt_help_all=: 1098*5ddc57e5SXin Liopt_help=': help-all' 1099*5ddc57e5SXin Li ;; 1100*5ddc57e5SXin Li --mode) 1101*5ddc57e5SXin Li test $# = 0 && func_missing_arg $opt && break 1102*5ddc57e5SXin Li optarg="$1" 1103*5ddc57e5SXin Li opt_mode="$optarg" 1104*5ddc57e5SXin Licase $optarg in 1105*5ddc57e5SXin Li # Valid mode arguments: 1106*5ddc57e5SXin Li clean|compile|execute|finish|install|link|relink|uninstall) ;; 1107*5ddc57e5SXin Li 1108*5ddc57e5SXin Li # Catch anything else as an error 1109*5ddc57e5SXin Li *) func_error "invalid argument for $opt" 1110*5ddc57e5SXin Li exit_cmd=exit 1111*5ddc57e5SXin Li break 1112*5ddc57e5SXin Li ;; 1113*5ddc57e5SXin Liesac 1114*5ddc57e5SXin Li shift 1115*5ddc57e5SXin Li ;; 1116*5ddc57e5SXin Li --no-silent|--no-quiet) 1117*5ddc57e5SXin Li opt_silent=false 1118*5ddc57e5SXin Lifunc_append preserve_args " $opt" 1119*5ddc57e5SXin Li ;; 1120*5ddc57e5SXin Li --no-warning|--no-warn) 1121*5ddc57e5SXin Li opt_warning=false 1122*5ddc57e5SXin Lifunc_append preserve_args " $opt" 1123*5ddc57e5SXin Li ;; 1124*5ddc57e5SXin Li --no-verbose) 1125*5ddc57e5SXin Li opt_verbose=false 1126*5ddc57e5SXin Lifunc_append preserve_args " $opt" 1127*5ddc57e5SXin Li ;; 1128*5ddc57e5SXin Li --silent|--quiet) 1129*5ddc57e5SXin Li opt_silent=: 1130*5ddc57e5SXin Lifunc_append preserve_args " $opt" 1131*5ddc57e5SXin Li opt_verbose=false 1132*5ddc57e5SXin Li ;; 1133*5ddc57e5SXin Li --verbose|-v) 1134*5ddc57e5SXin Li opt_verbose=: 1135*5ddc57e5SXin Lifunc_append preserve_args " $opt" 1136*5ddc57e5SXin Liopt_silent=false 1137*5ddc57e5SXin Li ;; 1138*5ddc57e5SXin Li --tag) 1139*5ddc57e5SXin Li test $# = 0 && func_missing_arg $opt && break 1140*5ddc57e5SXin Li optarg="$1" 1141*5ddc57e5SXin Li opt_tag="$optarg" 1142*5ddc57e5SXin Lifunc_append preserve_args " $opt $optarg" 1143*5ddc57e5SXin Lifunc_enable_tag "$optarg" 1144*5ddc57e5SXin Li shift 1145*5ddc57e5SXin Li ;; 1146*5ddc57e5SXin Li 1147*5ddc57e5SXin Li -\?|-h) func_usage ;; 1148*5ddc57e5SXin Li --help) func_help ;; 1149*5ddc57e5SXin Li --version) func_version ;; 1150*5ddc57e5SXin Li 1151*5ddc57e5SXin Li # Separate optargs to long options: 1152*5ddc57e5SXin Li --*=*) 1153*5ddc57e5SXin Li func_split_long_opt "$opt" 1154*5ddc57e5SXin Li set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1155*5ddc57e5SXin Li shift 1156*5ddc57e5SXin Li ;; 1157*5ddc57e5SXin Li 1158*5ddc57e5SXin Li # Separate non-argument short options: 1159*5ddc57e5SXin Li -\?*|-h*|-n*|-v*) 1160*5ddc57e5SXin Li func_split_short_opt "$opt" 1161*5ddc57e5SXin Li set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 1162*5ddc57e5SXin Li shift 1163*5ddc57e5SXin Li ;; 1164*5ddc57e5SXin Li 1165*5ddc57e5SXin Li --) break ;; 1166*5ddc57e5SXin Li -*) func_fatal_help "unrecognized option \`$opt'" ;; 1167*5ddc57e5SXin Li *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1168*5ddc57e5SXin Li esac 1169*5ddc57e5SXin Li done 1170*5ddc57e5SXin Li 1171*5ddc57e5SXin Li # Validate options: 1172*5ddc57e5SXin Li 1173*5ddc57e5SXin Li # save first non-option argument 1174*5ddc57e5SXin Li if test "$#" -gt 0; then 1175*5ddc57e5SXin Li nonopt="$opt" 1176*5ddc57e5SXin Li shift 1177*5ddc57e5SXin Li fi 1178*5ddc57e5SXin Li 1179*5ddc57e5SXin Li # preserve --debug 1180*5ddc57e5SXin Li test "$opt_debug" = : || func_append preserve_args " --debug" 1181*5ddc57e5SXin Li 1182*5ddc57e5SXin Li case $host in 1183*5ddc57e5SXin Li *cygwin* | *mingw* | *pw32* | *cegcc*) 1184*5ddc57e5SXin Li # don't eliminate duplications in $postdeps and $predeps 1185*5ddc57e5SXin Li opt_duplicate_compiler_generated_deps=: 1186*5ddc57e5SXin Li ;; 1187*5ddc57e5SXin Li *) 1188*5ddc57e5SXin Li opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1189*5ddc57e5SXin Li ;; 1190*5ddc57e5SXin Li esac 1191*5ddc57e5SXin Li 1192*5ddc57e5SXin Li $opt_help || { 1193*5ddc57e5SXin Li # Sanity checks first: 1194*5ddc57e5SXin Li func_check_version_match 1195*5ddc57e5SXin Li 1196*5ddc57e5SXin Li if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1197*5ddc57e5SXin Li func_fatal_configuration "not configured to build any kind of library" 1198*5ddc57e5SXin Li fi 1199*5ddc57e5SXin Li 1200*5ddc57e5SXin Li # Darwin sucks 1201*5ddc57e5SXin Li eval std_shrext=\"$shrext_cmds\" 1202*5ddc57e5SXin Li 1203*5ddc57e5SXin Li # Only execute mode is allowed to have -dlopen flags. 1204*5ddc57e5SXin Li if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 1205*5ddc57e5SXin Li func_error "unrecognized option \`-dlopen'" 1206*5ddc57e5SXin Li $ECHO "$help" 1>&2 1207*5ddc57e5SXin Li exit $EXIT_FAILURE 1208*5ddc57e5SXin Li fi 1209*5ddc57e5SXin Li 1210*5ddc57e5SXin Li # Change the help message to a mode-specific one. 1211*5ddc57e5SXin Li generic_help="$help" 1212*5ddc57e5SXin Li help="Try \`$progname --help --mode=$opt_mode' for more information." 1213*5ddc57e5SXin Li } 1214*5ddc57e5SXin Li 1215*5ddc57e5SXin Li 1216*5ddc57e5SXin Li # Bail if the options were screwed 1217*5ddc57e5SXin Li $exit_cmd $EXIT_FAILURE 1218*5ddc57e5SXin Li} 1219*5ddc57e5SXin Li 1220*5ddc57e5SXin Li 1221*5ddc57e5SXin Li 1222*5ddc57e5SXin Li 1223*5ddc57e5SXin Li## ----------- ## 1224*5ddc57e5SXin Li## Main. ## 1225*5ddc57e5SXin Li## ----------- ## 1226*5ddc57e5SXin Li 1227*5ddc57e5SXin Li# func_lalib_p file 1228*5ddc57e5SXin Li# True iff FILE is a libtool `.la' library or `.lo' object file. 1229*5ddc57e5SXin Li# This function is only a basic sanity check; it will hardly flush out 1230*5ddc57e5SXin Li# determined imposters. 1231*5ddc57e5SXin Lifunc_lalib_p () 1232*5ddc57e5SXin Li{ 1233*5ddc57e5SXin Li test -f "$1" && 1234*5ddc57e5SXin Li $SED -e 4q "$1" 2>/dev/null \ 1235*5ddc57e5SXin Li | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236*5ddc57e5SXin Li} 1237*5ddc57e5SXin Li 1238*5ddc57e5SXin Li# func_lalib_unsafe_p file 1239*5ddc57e5SXin Li# True iff FILE is a libtool `.la' library or `.lo' object file. 1240*5ddc57e5SXin Li# This function implements the same check as func_lalib_p without 1241*5ddc57e5SXin Li# resorting to external programs. To this end, it redirects stdin and 1242*5ddc57e5SXin Li# closes it afterwards, without saving the original file descriptor. 1243*5ddc57e5SXin Li# As a safety measure, use it only where a negative result would be 1244*5ddc57e5SXin Li# fatal anyway. Works if `file' does not exist. 1245*5ddc57e5SXin Lifunc_lalib_unsafe_p () 1246*5ddc57e5SXin Li{ 1247*5ddc57e5SXin Li lalib_p=no 1248*5ddc57e5SXin Li if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249*5ddc57e5SXin Li for lalib_p_l in 1 2 3 4 1250*5ddc57e5SXin Li do 1251*5ddc57e5SXin Li read lalib_p_line 1252*5ddc57e5SXin Li case "$lalib_p_line" in 1253*5ddc57e5SXin Li \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254*5ddc57e5SXin Li esac 1255*5ddc57e5SXin Li done 1256*5ddc57e5SXin Li exec 0<&5 5<&- 1257*5ddc57e5SXin Li fi 1258*5ddc57e5SXin Li test "$lalib_p" = yes 1259*5ddc57e5SXin Li} 1260*5ddc57e5SXin Li 1261*5ddc57e5SXin Li# func_ltwrapper_script_p file 1262*5ddc57e5SXin Li# True iff FILE is a libtool wrapper script 1263*5ddc57e5SXin Li# This function is only a basic sanity check; it will hardly flush out 1264*5ddc57e5SXin Li# determined imposters. 1265*5ddc57e5SXin Lifunc_ltwrapper_script_p () 1266*5ddc57e5SXin Li{ 1267*5ddc57e5SXin Li func_lalib_p "$1" 1268*5ddc57e5SXin Li} 1269*5ddc57e5SXin Li 1270*5ddc57e5SXin Li# func_ltwrapper_executable_p file 1271*5ddc57e5SXin Li# True iff FILE is a libtool wrapper executable 1272*5ddc57e5SXin Li# This function is only a basic sanity check; it will hardly flush out 1273*5ddc57e5SXin Li# determined imposters. 1274*5ddc57e5SXin Lifunc_ltwrapper_executable_p () 1275*5ddc57e5SXin Li{ 1276*5ddc57e5SXin Li func_ltwrapper_exec_suffix= 1277*5ddc57e5SXin Li case $1 in 1278*5ddc57e5SXin Li *.exe) ;; 1279*5ddc57e5SXin Li *) func_ltwrapper_exec_suffix=.exe ;; 1280*5ddc57e5SXin Li esac 1281*5ddc57e5SXin Li $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282*5ddc57e5SXin Li} 1283*5ddc57e5SXin Li 1284*5ddc57e5SXin Li# func_ltwrapper_scriptname file 1285*5ddc57e5SXin Li# Assumes file is an ltwrapper_executable 1286*5ddc57e5SXin Li# uses $file to determine the appropriate filename for a 1287*5ddc57e5SXin Li# temporary ltwrapper_script. 1288*5ddc57e5SXin Lifunc_ltwrapper_scriptname () 1289*5ddc57e5SXin Li{ 1290*5ddc57e5SXin Li func_dirname_and_basename "$1" "" "." 1291*5ddc57e5SXin Li func_stripname '' '.exe' "$func_basename_result" 1292*5ddc57e5SXin Li func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293*5ddc57e5SXin Li} 1294*5ddc57e5SXin Li 1295*5ddc57e5SXin Li# func_ltwrapper_p file 1296*5ddc57e5SXin Li# True iff FILE is a libtool wrapper script or wrapper executable 1297*5ddc57e5SXin Li# This function is only a basic sanity check; it will hardly flush out 1298*5ddc57e5SXin Li# determined imposters. 1299*5ddc57e5SXin Lifunc_ltwrapper_p () 1300*5ddc57e5SXin Li{ 1301*5ddc57e5SXin Li func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302*5ddc57e5SXin Li} 1303*5ddc57e5SXin Li 1304*5ddc57e5SXin Li 1305*5ddc57e5SXin Li# func_execute_cmds commands fail_cmd 1306*5ddc57e5SXin Li# Execute tilde-delimited COMMANDS. 1307*5ddc57e5SXin Li# If FAIL_CMD is given, eval that upon failure. 1308*5ddc57e5SXin Li# FAIL_CMD may read-access the current command in variable CMD! 1309*5ddc57e5SXin Lifunc_execute_cmds () 1310*5ddc57e5SXin Li{ 1311*5ddc57e5SXin Li $opt_debug 1312*5ddc57e5SXin Li save_ifs=$IFS; IFS='~' 1313*5ddc57e5SXin Li for cmd in $1; do 1314*5ddc57e5SXin Li IFS=$save_ifs 1315*5ddc57e5SXin Li eval cmd=\"$cmd\" 1316*5ddc57e5SXin Li func_show_eval "$cmd" "${2-:}" 1317*5ddc57e5SXin Li done 1318*5ddc57e5SXin Li IFS=$save_ifs 1319*5ddc57e5SXin Li} 1320*5ddc57e5SXin Li 1321*5ddc57e5SXin Li 1322*5ddc57e5SXin Li# func_source file 1323*5ddc57e5SXin Li# Source FILE, adding directory component if necessary. 1324*5ddc57e5SXin Li# Note that it is not necessary on cygwin/mingw to append a dot to 1325*5ddc57e5SXin Li# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326*5ddc57e5SXin Li# behavior happens only for exec(3), not for open(2)! Also, sourcing 1327*5ddc57e5SXin Li# `FILE.' does not work on cygwin managed mounts. 1328*5ddc57e5SXin Lifunc_source () 1329*5ddc57e5SXin Li{ 1330*5ddc57e5SXin Li $opt_debug 1331*5ddc57e5SXin Li case $1 in 1332*5ddc57e5SXin Li */* | *\\*) . "$1" ;; 1333*5ddc57e5SXin Li *) . "./$1" ;; 1334*5ddc57e5SXin Li esac 1335*5ddc57e5SXin Li} 1336*5ddc57e5SXin Li 1337*5ddc57e5SXin Li 1338*5ddc57e5SXin Li# func_resolve_sysroot PATH 1339*5ddc57e5SXin Li# Replace a leading = in PATH with a sysroot. Store the result into 1340*5ddc57e5SXin Li# func_resolve_sysroot_result 1341*5ddc57e5SXin Lifunc_resolve_sysroot () 1342*5ddc57e5SXin Li{ 1343*5ddc57e5SXin Li func_resolve_sysroot_result=$1 1344*5ddc57e5SXin Li case $func_resolve_sysroot_result in 1345*5ddc57e5SXin Li =*) 1346*5ddc57e5SXin Li func_stripname '=' '' "$func_resolve_sysroot_result" 1347*5ddc57e5SXin Li func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 1348*5ddc57e5SXin Li ;; 1349*5ddc57e5SXin Li esac 1350*5ddc57e5SXin Li} 1351*5ddc57e5SXin Li 1352*5ddc57e5SXin Li# func_replace_sysroot PATH 1353*5ddc57e5SXin Li# If PATH begins with the sysroot, replace it with = and 1354*5ddc57e5SXin Li# store the result into func_replace_sysroot_result. 1355*5ddc57e5SXin Lifunc_replace_sysroot () 1356*5ddc57e5SXin Li{ 1357*5ddc57e5SXin Li case "$lt_sysroot:$1" in 1358*5ddc57e5SXin Li ?*:"$lt_sysroot"*) 1359*5ddc57e5SXin Li func_stripname "$lt_sysroot" '' "$1" 1360*5ddc57e5SXin Li func_replace_sysroot_result="=$func_stripname_result" 1361*5ddc57e5SXin Li ;; 1362*5ddc57e5SXin Li *) 1363*5ddc57e5SXin Li # Including no sysroot. 1364*5ddc57e5SXin Li func_replace_sysroot_result=$1 1365*5ddc57e5SXin Li ;; 1366*5ddc57e5SXin Li esac 1367*5ddc57e5SXin Li} 1368*5ddc57e5SXin Li 1369*5ddc57e5SXin Li# func_infer_tag arg 1370*5ddc57e5SXin Li# Infer tagged configuration to use if any are available and 1371*5ddc57e5SXin Li# if one wasn't chosen via the "--tag" command line option. 1372*5ddc57e5SXin Li# Only attempt this if the compiler in the base compile 1373*5ddc57e5SXin Li# command doesn't match the default compiler. 1374*5ddc57e5SXin Li# arg is usually of the form 'gcc ...' 1375*5ddc57e5SXin Lifunc_infer_tag () 1376*5ddc57e5SXin Li{ 1377*5ddc57e5SXin Li $opt_debug 1378*5ddc57e5SXin Li if test -n "$available_tags" && test -z "$tagname"; then 1379*5ddc57e5SXin Li CC_quoted= 1380*5ddc57e5SXin Li for arg in $CC; do 1381*5ddc57e5SXin Li func_append_quoted CC_quoted "$arg" 1382*5ddc57e5SXin Li done 1383*5ddc57e5SXin Li CC_expanded=`func_echo_all $CC` 1384*5ddc57e5SXin Li CC_quoted_expanded=`func_echo_all $CC_quoted` 1385*5ddc57e5SXin Li case $@ in 1386*5ddc57e5SXin Li # Blanks in the command may have been stripped by the calling shell, 1387*5ddc57e5SXin Li # but not from the CC environment variable when configure was run. 1388*5ddc57e5SXin Li " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1389*5ddc57e5SXin Li " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390*5ddc57e5SXin Li # Blanks at the start of $base_compile will cause this to fail 1391*5ddc57e5SXin Li # if we don't check for them as well. 1392*5ddc57e5SXin Li *) 1393*5ddc57e5SXin Li for z in $available_tags; do 1394*5ddc57e5SXin Li if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395*5ddc57e5SXin Li # Evaluate the configuration. 1396*5ddc57e5SXin Li eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397*5ddc57e5SXin Li CC_quoted= 1398*5ddc57e5SXin Li for arg in $CC; do 1399*5ddc57e5SXin Li # Double-quote args containing other shell metacharacters. 1400*5ddc57e5SXin Li func_append_quoted CC_quoted "$arg" 1401*5ddc57e5SXin Li done 1402*5ddc57e5SXin Li CC_expanded=`func_echo_all $CC` 1403*5ddc57e5SXin Li CC_quoted_expanded=`func_echo_all $CC_quoted` 1404*5ddc57e5SXin Li case "$@ " in 1405*5ddc57e5SXin Li " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1406*5ddc57e5SXin Li " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407*5ddc57e5SXin Li # The compiler in the base compile command matches 1408*5ddc57e5SXin Li # the one in the tagged configuration. 1409*5ddc57e5SXin Li # Assume this is the tagged configuration we want. 1410*5ddc57e5SXin Li tagname=$z 1411*5ddc57e5SXin Li break 1412*5ddc57e5SXin Li ;; 1413*5ddc57e5SXin Li esac 1414*5ddc57e5SXin Li fi 1415*5ddc57e5SXin Li done 1416*5ddc57e5SXin Li # If $tagname still isn't set, then no tagged configuration 1417*5ddc57e5SXin Li # was found and let the user know that the "--tag" command 1418*5ddc57e5SXin Li # line option must be used. 1419*5ddc57e5SXin Li if test -z "$tagname"; then 1420*5ddc57e5SXin Li func_echo "unable to infer tagged configuration" 1421*5ddc57e5SXin Li func_fatal_error "specify a tag with \`--tag'" 1422*5ddc57e5SXin Li# else 1423*5ddc57e5SXin Li# func_verbose "using $tagname tagged configuration" 1424*5ddc57e5SXin Li fi 1425*5ddc57e5SXin Li ;; 1426*5ddc57e5SXin Li esac 1427*5ddc57e5SXin Li fi 1428*5ddc57e5SXin Li} 1429*5ddc57e5SXin Li 1430*5ddc57e5SXin Li 1431*5ddc57e5SXin Li 1432*5ddc57e5SXin Li# func_write_libtool_object output_name pic_name nonpic_name 1433*5ddc57e5SXin Li# Create a libtool object file (analogous to a ".la" file), 1434*5ddc57e5SXin Li# but don't create it if we're doing a dry run. 1435*5ddc57e5SXin Lifunc_write_libtool_object () 1436*5ddc57e5SXin Li{ 1437*5ddc57e5SXin Li write_libobj=${1} 1438*5ddc57e5SXin Li if test "$build_libtool_libs" = yes; then 1439*5ddc57e5SXin Li write_lobj=\'${2}\' 1440*5ddc57e5SXin Li else 1441*5ddc57e5SXin Li write_lobj=none 1442*5ddc57e5SXin Li fi 1443*5ddc57e5SXin Li 1444*5ddc57e5SXin Li if test "$build_old_libs" = yes; then 1445*5ddc57e5SXin Li write_oldobj=\'${3}\' 1446*5ddc57e5SXin Li else 1447*5ddc57e5SXin Li write_oldobj=none 1448*5ddc57e5SXin Li fi 1449*5ddc57e5SXin Li 1450*5ddc57e5SXin Li $opt_dry_run || { 1451*5ddc57e5SXin Li cat >${write_libobj}T <<EOF 1452*5ddc57e5SXin Li# $write_libobj - a libtool object file 1453*5ddc57e5SXin Li# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454*5ddc57e5SXin Li# 1455*5ddc57e5SXin Li# Please DO NOT delete this file! 1456*5ddc57e5SXin Li# It is necessary for linking the library. 1457*5ddc57e5SXin Li 1458*5ddc57e5SXin Li# Name of the PIC object. 1459*5ddc57e5SXin Lipic_object=$write_lobj 1460*5ddc57e5SXin Li 1461*5ddc57e5SXin Li# Name of the non-PIC object 1462*5ddc57e5SXin Linon_pic_object=$write_oldobj 1463*5ddc57e5SXin Li 1464*5ddc57e5SXin LiEOF 1465*5ddc57e5SXin Li $MV "${write_libobj}T" "${write_libobj}" 1466*5ddc57e5SXin Li } 1467*5ddc57e5SXin Li} 1468*5ddc57e5SXin Li 1469*5ddc57e5SXin Li 1470*5ddc57e5SXin Li################################################## 1471*5ddc57e5SXin Li# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 1472*5ddc57e5SXin Li################################################## 1473*5ddc57e5SXin Li 1474*5ddc57e5SXin Li# func_convert_core_file_wine_to_w32 ARG 1475*5ddc57e5SXin Li# Helper function used by file name conversion functions when $build is *nix, 1476*5ddc57e5SXin Li# and $host is mingw, cygwin, or some other w32 environment. Relies on a 1477*5ddc57e5SXin Li# correctly configured wine environment available, with the winepath program 1478*5ddc57e5SXin Li# in $build's $PATH. 1479*5ddc57e5SXin Li# 1480*5ddc57e5SXin Li# ARG is the $build file name to be converted to w32 format. 1481*5ddc57e5SXin Li# Result is available in $func_convert_core_file_wine_to_w32_result, and will 1482*5ddc57e5SXin Li# be empty on error (or when ARG is empty) 1483*5ddc57e5SXin Lifunc_convert_core_file_wine_to_w32 () 1484*5ddc57e5SXin Li{ 1485*5ddc57e5SXin Li $opt_debug 1486*5ddc57e5SXin Li func_convert_core_file_wine_to_w32_result="$1" 1487*5ddc57e5SXin Li if test -n "$1"; then 1488*5ddc57e5SXin Li # Unfortunately, winepath does not exit with a non-zero error code, so we 1489*5ddc57e5SXin Li # are forced to check the contents of stdout. On the other hand, if the 1490*5ddc57e5SXin Li # command is not found, the shell will set an exit code of 127 and print 1491*5ddc57e5SXin Li # *an error message* to stdout. So we must check for both error code of 1492*5ddc57e5SXin Li # zero AND non-empty stdout, which explains the odd construction: 1493*5ddc57e5SXin Li func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 1494*5ddc57e5SXin Li if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 1495*5ddc57e5SXin Li func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 1496*5ddc57e5SXin Li $SED -e "$lt_sed_naive_backslashify"` 1497*5ddc57e5SXin Li else 1498*5ddc57e5SXin Li func_convert_core_file_wine_to_w32_result= 1499*5ddc57e5SXin Li fi 1500*5ddc57e5SXin Li fi 1501*5ddc57e5SXin Li} 1502*5ddc57e5SXin Li# end: func_convert_core_file_wine_to_w32 1503*5ddc57e5SXin Li 1504*5ddc57e5SXin Li 1505*5ddc57e5SXin Li# func_convert_core_path_wine_to_w32 ARG 1506*5ddc57e5SXin Li# Helper function used by path conversion functions when $build is *nix, and 1507*5ddc57e5SXin Li# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 1508*5ddc57e5SXin Li# configured wine environment available, with the winepath program in $build's 1509*5ddc57e5SXin Li# $PATH. Assumes ARG has no leading or trailing path separator characters. 1510*5ddc57e5SXin Li# 1511*5ddc57e5SXin Li# ARG is path to be converted from $build format to win32. 1512*5ddc57e5SXin Li# Result is available in $func_convert_core_path_wine_to_w32_result. 1513*5ddc57e5SXin Li# Unconvertible file (directory) names in ARG are skipped; if no directory names 1514*5ddc57e5SXin Li# are convertible, then the result may be empty. 1515*5ddc57e5SXin Lifunc_convert_core_path_wine_to_w32 () 1516*5ddc57e5SXin Li{ 1517*5ddc57e5SXin Li $opt_debug 1518*5ddc57e5SXin Li # unfortunately, winepath doesn't convert paths, only file names 1519*5ddc57e5SXin Li func_convert_core_path_wine_to_w32_result="" 1520*5ddc57e5SXin Li if test -n "$1"; then 1521*5ddc57e5SXin Li oldIFS=$IFS 1522*5ddc57e5SXin Li IFS=: 1523*5ddc57e5SXin Li for func_convert_core_path_wine_to_w32_f in $1; do 1524*5ddc57e5SXin Li IFS=$oldIFS 1525*5ddc57e5SXin Li func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 1526*5ddc57e5SXin Li if test -n "$func_convert_core_file_wine_to_w32_result" ; then 1527*5ddc57e5SXin Li if test -z "$func_convert_core_path_wine_to_w32_result"; then 1528*5ddc57e5SXin Li func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 1529*5ddc57e5SXin Li else 1530*5ddc57e5SXin Li func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 1531*5ddc57e5SXin Li fi 1532*5ddc57e5SXin Li fi 1533*5ddc57e5SXin Li done 1534*5ddc57e5SXin Li IFS=$oldIFS 1535*5ddc57e5SXin Li fi 1536*5ddc57e5SXin Li} 1537*5ddc57e5SXin Li# end: func_convert_core_path_wine_to_w32 1538*5ddc57e5SXin Li 1539*5ddc57e5SXin Li 1540*5ddc57e5SXin Li# func_cygpath ARGS... 1541*5ddc57e5SXin Li# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 1542*5ddc57e5SXin Li# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 1543*5ddc57e5SXin Li# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 1544*5ddc57e5SXin Li# (2), returns the Cygwin file name or path in func_cygpath_result (input 1545*5ddc57e5SXin Li# file name or path is assumed to be in w32 format, as previously converted 1546*5ddc57e5SXin Li# from $build's *nix or MSYS format). In case (3), returns the w32 file name 1547*5ddc57e5SXin Li# or path in func_cygpath_result (input file name or path is assumed to be in 1548*5ddc57e5SXin Li# Cygwin format). Returns an empty string on error. 1549*5ddc57e5SXin Li# 1550*5ddc57e5SXin Li# ARGS are passed to cygpath, with the last one being the file name or path to 1551*5ddc57e5SXin Li# be converted. 1552*5ddc57e5SXin Li# 1553*5ddc57e5SXin Li# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 1554*5ddc57e5SXin Li# environment variable; do not put it in $PATH. 1555*5ddc57e5SXin Lifunc_cygpath () 1556*5ddc57e5SXin Li{ 1557*5ddc57e5SXin Li $opt_debug 1558*5ddc57e5SXin Li if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 1559*5ddc57e5SXin Li func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 1560*5ddc57e5SXin Li if test "$?" -ne 0; then 1561*5ddc57e5SXin Li # on failure, ensure result is empty 1562*5ddc57e5SXin Li func_cygpath_result= 1563*5ddc57e5SXin Li fi 1564*5ddc57e5SXin Li else 1565*5ddc57e5SXin Li func_cygpath_result= 1566*5ddc57e5SXin Li func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 1567*5ddc57e5SXin Li fi 1568*5ddc57e5SXin Li} 1569*5ddc57e5SXin Li#end: func_cygpath 1570*5ddc57e5SXin Li 1571*5ddc57e5SXin Li 1572*5ddc57e5SXin Li# func_convert_core_msys_to_w32 ARG 1573*5ddc57e5SXin Li# Convert file name or path ARG from MSYS format to w32 format. Return 1574*5ddc57e5SXin Li# result in func_convert_core_msys_to_w32_result. 1575*5ddc57e5SXin Lifunc_convert_core_msys_to_w32 () 1576*5ddc57e5SXin Li{ 1577*5ddc57e5SXin Li $opt_debug 1578*5ddc57e5SXin Li # awkward: cmd appends spaces to result 1579*5ddc57e5SXin Li func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 1580*5ddc57e5SXin Li $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 1581*5ddc57e5SXin Li} 1582*5ddc57e5SXin Li#end: func_convert_core_msys_to_w32 1583*5ddc57e5SXin Li 1584*5ddc57e5SXin Li 1585*5ddc57e5SXin Li# func_convert_file_check ARG1 ARG2 1586*5ddc57e5SXin Li# Verify that ARG1 (a file name in $build format) was converted to $host 1587*5ddc57e5SXin Li# format in ARG2. Otherwise, emit an error message, but continue (resetting 1588*5ddc57e5SXin Li# func_to_host_file_result to ARG1). 1589*5ddc57e5SXin Lifunc_convert_file_check () 1590*5ddc57e5SXin Li{ 1591*5ddc57e5SXin Li $opt_debug 1592*5ddc57e5SXin Li if test -z "$2" && test -n "$1" ; then 1593*5ddc57e5SXin Li func_error "Could not determine host file name corresponding to" 1594*5ddc57e5SXin Li func_error " \`$1'" 1595*5ddc57e5SXin Li func_error "Continuing, but uninstalled executables may not work." 1596*5ddc57e5SXin Li # Fallback: 1597*5ddc57e5SXin Li func_to_host_file_result="$1" 1598*5ddc57e5SXin Li fi 1599*5ddc57e5SXin Li} 1600*5ddc57e5SXin Li# end func_convert_file_check 1601*5ddc57e5SXin Li 1602*5ddc57e5SXin Li 1603*5ddc57e5SXin Li# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 1604*5ddc57e5SXin Li# Verify that FROM_PATH (a path in $build format) was converted to $host 1605*5ddc57e5SXin Li# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 1606*5ddc57e5SXin Li# func_to_host_file_result to a simplistic fallback value (see below). 1607*5ddc57e5SXin Lifunc_convert_path_check () 1608*5ddc57e5SXin Li{ 1609*5ddc57e5SXin Li $opt_debug 1610*5ddc57e5SXin Li if test -z "$4" && test -n "$3"; then 1611*5ddc57e5SXin Li func_error "Could not determine the host path corresponding to" 1612*5ddc57e5SXin Li func_error " \`$3'" 1613*5ddc57e5SXin Li func_error "Continuing, but uninstalled executables may not work." 1614*5ddc57e5SXin Li # Fallback. This is a deliberately simplistic "conversion" and 1615*5ddc57e5SXin Li # should not be "improved". See libtool.info. 1616*5ddc57e5SXin Li if test "x$1" != "x$2"; then 1617*5ddc57e5SXin Li lt_replace_pathsep_chars="s|$1|$2|g" 1618*5ddc57e5SXin Li func_to_host_path_result=`echo "$3" | 1619*5ddc57e5SXin Li $SED -e "$lt_replace_pathsep_chars"` 1620*5ddc57e5SXin Li else 1621*5ddc57e5SXin Li func_to_host_path_result="$3" 1622*5ddc57e5SXin Li fi 1623*5ddc57e5SXin Li fi 1624*5ddc57e5SXin Li} 1625*5ddc57e5SXin Li# end func_convert_path_check 1626*5ddc57e5SXin Li 1627*5ddc57e5SXin Li 1628*5ddc57e5SXin Li# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 1629*5ddc57e5SXin Li# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 1630*5ddc57e5SXin Li# and appending REPL if ORIG matches BACKPAT. 1631*5ddc57e5SXin Lifunc_convert_path_front_back_pathsep () 1632*5ddc57e5SXin Li{ 1633*5ddc57e5SXin Li $opt_debug 1634*5ddc57e5SXin Li case $4 in 1635*5ddc57e5SXin Li $1 ) func_to_host_path_result="$3$func_to_host_path_result" 1636*5ddc57e5SXin Li ;; 1637*5ddc57e5SXin Li esac 1638*5ddc57e5SXin Li case $4 in 1639*5ddc57e5SXin Li $2 ) func_append func_to_host_path_result "$3" 1640*5ddc57e5SXin Li ;; 1641*5ddc57e5SXin Li esac 1642*5ddc57e5SXin Li} 1643*5ddc57e5SXin Li# end func_convert_path_front_back_pathsep 1644*5ddc57e5SXin Li 1645*5ddc57e5SXin Li 1646*5ddc57e5SXin Li################################################## 1647*5ddc57e5SXin Li# $build to $host FILE NAME CONVERSION FUNCTIONS # 1648*5ddc57e5SXin Li################################################## 1649*5ddc57e5SXin Li# invoked via `$to_host_file_cmd ARG' 1650*5ddc57e5SXin Li# 1651*5ddc57e5SXin Li# In each case, ARG is the path to be converted from $build to $host format. 1652*5ddc57e5SXin Li# Result will be available in $func_to_host_file_result. 1653*5ddc57e5SXin Li 1654*5ddc57e5SXin Li 1655*5ddc57e5SXin Li# func_to_host_file ARG 1656*5ddc57e5SXin Li# Converts the file name ARG from $build format to $host format. Return result 1657*5ddc57e5SXin Li# in func_to_host_file_result. 1658*5ddc57e5SXin Lifunc_to_host_file () 1659*5ddc57e5SXin Li{ 1660*5ddc57e5SXin Li $opt_debug 1661*5ddc57e5SXin Li $to_host_file_cmd "$1" 1662*5ddc57e5SXin Li} 1663*5ddc57e5SXin Li# end func_to_host_file 1664*5ddc57e5SXin Li 1665*5ddc57e5SXin Li 1666*5ddc57e5SXin Li# func_to_tool_file ARG LAZY 1667*5ddc57e5SXin Li# converts the file name ARG from $build format to toolchain format. Return 1668*5ddc57e5SXin Li# result in func_to_tool_file_result. If the conversion in use is listed 1669*5ddc57e5SXin Li# in (the comma separated) LAZY, no conversion takes place. 1670*5ddc57e5SXin Lifunc_to_tool_file () 1671*5ddc57e5SXin Li{ 1672*5ddc57e5SXin Li $opt_debug 1673*5ddc57e5SXin Li case ,$2, in 1674*5ddc57e5SXin Li *,"$to_tool_file_cmd",*) 1675*5ddc57e5SXin Li func_to_tool_file_result=$1 1676*5ddc57e5SXin Li ;; 1677*5ddc57e5SXin Li *) 1678*5ddc57e5SXin Li $to_tool_file_cmd "$1" 1679*5ddc57e5SXin Li func_to_tool_file_result=$func_to_host_file_result 1680*5ddc57e5SXin Li ;; 1681*5ddc57e5SXin Li esac 1682*5ddc57e5SXin Li} 1683*5ddc57e5SXin Li# end func_to_tool_file 1684*5ddc57e5SXin Li 1685*5ddc57e5SXin Li 1686*5ddc57e5SXin Li# func_convert_file_noop ARG 1687*5ddc57e5SXin Li# Copy ARG to func_to_host_file_result. 1688*5ddc57e5SXin Lifunc_convert_file_noop () 1689*5ddc57e5SXin Li{ 1690*5ddc57e5SXin Li func_to_host_file_result="$1" 1691*5ddc57e5SXin Li} 1692*5ddc57e5SXin Li# end func_convert_file_noop 1693*5ddc57e5SXin Li 1694*5ddc57e5SXin Li 1695*5ddc57e5SXin Li# func_convert_file_msys_to_w32 ARG 1696*5ddc57e5SXin Li# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 1697*5ddc57e5SXin Li# conversion to w32 is not available inside the cwrapper. Returns result in 1698*5ddc57e5SXin Li# func_to_host_file_result. 1699*5ddc57e5SXin Lifunc_convert_file_msys_to_w32 () 1700*5ddc57e5SXin Li{ 1701*5ddc57e5SXin Li $opt_debug 1702*5ddc57e5SXin Li func_to_host_file_result="$1" 1703*5ddc57e5SXin Li if test -n "$1"; then 1704*5ddc57e5SXin Li func_convert_core_msys_to_w32 "$1" 1705*5ddc57e5SXin Li func_to_host_file_result="$func_convert_core_msys_to_w32_result" 1706*5ddc57e5SXin Li fi 1707*5ddc57e5SXin Li func_convert_file_check "$1" "$func_to_host_file_result" 1708*5ddc57e5SXin Li} 1709*5ddc57e5SXin Li# end func_convert_file_msys_to_w32 1710*5ddc57e5SXin Li 1711*5ddc57e5SXin Li 1712*5ddc57e5SXin Li# func_convert_file_cygwin_to_w32 ARG 1713*5ddc57e5SXin Li# Convert file name ARG from Cygwin to w32 format. Returns result in 1714*5ddc57e5SXin Li# func_to_host_file_result. 1715*5ddc57e5SXin Lifunc_convert_file_cygwin_to_w32 () 1716*5ddc57e5SXin Li{ 1717*5ddc57e5SXin Li $opt_debug 1718*5ddc57e5SXin Li func_to_host_file_result="$1" 1719*5ddc57e5SXin Li if test -n "$1"; then 1720*5ddc57e5SXin Li # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 1721*5ddc57e5SXin Li # LT_CYGPATH in this case. 1722*5ddc57e5SXin Li func_to_host_file_result=`cygpath -m "$1"` 1723*5ddc57e5SXin Li fi 1724*5ddc57e5SXin Li func_convert_file_check "$1" "$func_to_host_file_result" 1725*5ddc57e5SXin Li} 1726*5ddc57e5SXin Li# end func_convert_file_cygwin_to_w32 1727*5ddc57e5SXin Li 1728*5ddc57e5SXin Li 1729*5ddc57e5SXin Li# func_convert_file_nix_to_w32 ARG 1730*5ddc57e5SXin Li# Convert file name ARG from *nix to w32 format. Requires a wine environment 1731*5ddc57e5SXin Li# and a working winepath. Returns result in func_to_host_file_result. 1732*5ddc57e5SXin Lifunc_convert_file_nix_to_w32 () 1733*5ddc57e5SXin Li{ 1734*5ddc57e5SXin Li $opt_debug 1735*5ddc57e5SXin Li func_to_host_file_result="$1" 1736*5ddc57e5SXin Li if test -n "$1"; then 1737*5ddc57e5SXin Li func_convert_core_file_wine_to_w32 "$1" 1738*5ddc57e5SXin Li func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 1739*5ddc57e5SXin Li fi 1740*5ddc57e5SXin Li func_convert_file_check "$1" "$func_to_host_file_result" 1741*5ddc57e5SXin Li} 1742*5ddc57e5SXin Li# end func_convert_file_nix_to_w32 1743*5ddc57e5SXin Li 1744*5ddc57e5SXin Li 1745*5ddc57e5SXin Li# func_convert_file_msys_to_cygwin ARG 1746*5ddc57e5SXin Li# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1747*5ddc57e5SXin Li# Returns result in func_to_host_file_result. 1748*5ddc57e5SXin Lifunc_convert_file_msys_to_cygwin () 1749*5ddc57e5SXin Li{ 1750*5ddc57e5SXin Li $opt_debug 1751*5ddc57e5SXin Li func_to_host_file_result="$1" 1752*5ddc57e5SXin Li if test -n "$1"; then 1753*5ddc57e5SXin Li func_convert_core_msys_to_w32 "$1" 1754*5ddc57e5SXin Li func_cygpath -u "$func_convert_core_msys_to_w32_result" 1755*5ddc57e5SXin Li func_to_host_file_result="$func_cygpath_result" 1756*5ddc57e5SXin Li fi 1757*5ddc57e5SXin Li func_convert_file_check "$1" "$func_to_host_file_result" 1758*5ddc57e5SXin Li} 1759*5ddc57e5SXin Li# end func_convert_file_msys_to_cygwin 1760*5ddc57e5SXin Li 1761*5ddc57e5SXin Li 1762*5ddc57e5SXin Li# func_convert_file_nix_to_cygwin ARG 1763*5ddc57e5SXin Li# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 1764*5ddc57e5SXin Li# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 1765*5ddc57e5SXin Li# in func_to_host_file_result. 1766*5ddc57e5SXin Lifunc_convert_file_nix_to_cygwin () 1767*5ddc57e5SXin Li{ 1768*5ddc57e5SXin Li $opt_debug 1769*5ddc57e5SXin Li func_to_host_file_result="$1" 1770*5ddc57e5SXin Li if test -n "$1"; then 1771*5ddc57e5SXin Li # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 1772*5ddc57e5SXin Li func_convert_core_file_wine_to_w32 "$1" 1773*5ddc57e5SXin Li func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 1774*5ddc57e5SXin Li func_to_host_file_result="$func_cygpath_result" 1775*5ddc57e5SXin Li fi 1776*5ddc57e5SXin Li func_convert_file_check "$1" "$func_to_host_file_result" 1777*5ddc57e5SXin Li} 1778*5ddc57e5SXin Li# end func_convert_file_nix_to_cygwin 1779*5ddc57e5SXin Li 1780*5ddc57e5SXin Li 1781*5ddc57e5SXin Li############################################# 1782*5ddc57e5SXin Li# $build to $host PATH CONVERSION FUNCTIONS # 1783*5ddc57e5SXin Li############################################# 1784*5ddc57e5SXin Li# invoked via `$to_host_path_cmd ARG' 1785*5ddc57e5SXin Li# 1786*5ddc57e5SXin Li# In each case, ARG is the path to be converted from $build to $host format. 1787*5ddc57e5SXin Li# The result will be available in $func_to_host_path_result. 1788*5ddc57e5SXin Li# 1789*5ddc57e5SXin Li# Path separators are also converted from $build format to $host format. If 1790*5ddc57e5SXin Li# ARG begins or ends with a path separator character, it is preserved (but 1791*5ddc57e5SXin Li# converted to $host format) on output. 1792*5ddc57e5SXin Li# 1793*5ddc57e5SXin Li# All path conversion functions are named using the following convention: 1794*5ddc57e5SXin Li# file name conversion function : func_convert_file_X_to_Y () 1795*5ddc57e5SXin Li# path conversion function : func_convert_path_X_to_Y () 1796*5ddc57e5SXin Li# where, for any given $build/$host combination the 'X_to_Y' value is the 1797*5ddc57e5SXin Li# same. If conversion functions are added for new $build/$host combinations, 1798*5ddc57e5SXin Li# the two new functions must follow this pattern, or func_init_to_host_path_cmd 1799*5ddc57e5SXin Li# will break. 1800*5ddc57e5SXin Li 1801*5ddc57e5SXin Li 1802*5ddc57e5SXin Li# func_init_to_host_path_cmd 1803*5ddc57e5SXin Li# Ensures that function "pointer" variable $to_host_path_cmd is set to the 1804*5ddc57e5SXin Li# appropriate value, based on the value of $to_host_file_cmd. 1805*5ddc57e5SXin Lito_host_path_cmd= 1806*5ddc57e5SXin Lifunc_init_to_host_path_cmd () 1807*5ddc57e5SXin Li{ 1808*5ddc57e5SXin Li $opt_debug 1809*5ddc57e5SXin Li if test -z "$to_host_path_cmd"; then 1810*5ddc57e5SXin Li func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 1811*5ddc57e5SXin Li to_host_path_cmd="func_convert_path_${func_stripname_result}" 1812*5ddc57e5SXin Li fi 1813*5ddc57e5SXin Li} 1814*5ddc57e5SXin Li 1815*5ddc57e5SXin Li 1816*5ddc57e5SXin Li# func_to_host_path ARG 1817*5ddc57e5SXin Li# Converts the path ARG from $build format to $host format. Return result 1818*5ddc57e5SXin Li# in func_to_host_path_result. 1819*5ddc57e5SXin Lifunc_to_host_path () 1820*5ddc57e5SXin Li{ 1821*5ddc57e5SXin Li $opt_debug 1822*5ddc57e5SXin Li func_init_to_host_path_cmd 1823*5ddc57e5SXin Li $to_host_path_cmd "$1" 1824*5ddc57e5SXin Li} 1825*5ddc57e5SXin Li# end func_to_host_path 1826*5ddc57e5SXin Li 1827*5ddc57e5SXin Li 1828*5ddc57e5SXin Li# func_convert_path_noop ARG 1829*5ddc57e5SXin Li# Copy ARG to func_to_host_path_result. 1830*5ddc57e5SXin Lifunc_convert_path_noop () 1831*5ddc57e5SXin Li{ 1832*5ddc57e5SXin Li func_to_host_path_result="$1" 1833*5ddc57e5SXin Li} 1834*5ddc57e5SXin Li# end func_convert_path_noop 1835*5ddc57e5SXin Li 1836*5ddc57e5SXin Li 1837*5ddc57e5SXin Li# func_convert_path_msys_to_w32 ARG 1838*5ddc57e5SXin Li# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 1839*5ddc57e5SXin Li# conversion to w32 is not available inside the cwrapper. Returns result in 1840*5ddc57e5SXin Li# func_to_host_path_result. 1841*5ddc57e5SXin Lifunc_convert_path_msys_to_w32 () 1842*5ddc57e5SXin Li{ 1843*5ddc57e5SXin Li $opt_debug 1844*5ddc57e5SXin Li func_to_host_path_result="$1" 1845*5ddc57e5SXin Li if test -n "$1"; then 1846*5ddc57e5SXin Li # Remove leading and trailing path separator characters from ARG. MSYS 1847*5ddc57e5SXin Li # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 1848*5ddc57e5SXin Li # and winepath ignores them completely. 1849*5ddc57e5SXin Li func_stripname : : "$1" 1850*5ddc57e5SXin Li func_to_host_path_tmp1=$func_stripname_result 1851*5ddc57e5SXin Li func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1852*5ddc57e5SXin Li func_to_host_path_result="$func_convert_core_msys_to_w32_result" 1853*5ddc57e5SXin Li func_convert_path_check : ";" \ 1854*5ddc57e5SXin Li "$func_to_host_path_tmp1" "$func_to_host_path_result" 1855*5ddc57e5SXin Li func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1856*5ddc57e5SXin Li fi 1857*5ddc57e5SXin Li} 1858*5ddc57e5SXin Li# end func_convert_path_msys_to_w32 1859*5ddc57e5SXin Li 1860*5ddc57e5SXin Li 1861*5ddc57e5SXin Li# func_convert_path_cygwin_to_w32 ARG 1862*5ddc57e5SXin Li# Convert path ARG from Cygwin to w32 format. Returns result in 1863*5ddc57e5SXin Li# func_to_host_file_result. 1864*5ddc57e5SXin Lifunc_convert_path_cygwin_to_w32 () 1865*5ddc57e5SXin Li{ 1866*5ddc57e5SXin Li $opt_debug 1867*5ddc57e5SXin Li func_to_host_path_result="$1" 1868*5ddc57e5SXin Li if test -n "$1"; then 1869*5ddc57e5SXin Li # See func_convert_path_msys_to_w32: 1870*5ddc57e5SXin Li func_stripname : : "$1" 1871*5ddc57e5SXin Li func_to_host_path_tmp1=$func_stripname_result 1872*5ddc57e5SXin Li func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 1873*5ddc57e5SXin Li func_convert_path_check : ";" \ 1874*5ddc57e5SXin Li "$func_to_host_path_tmp1" "$func_to_host_path_result" 1875*5ddc57e5SXin Li func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1876*5ddc57e5SXin Li fi 1877*5ddc57e5SXin Li} 1878*5ddc57e5SXin Li# end func_convert_path_cygwin_to_w32 1879*5ddc57e5SXin Li 1880*5ddc57e5SXin Li 1881*5ddc57e5SXin Li# func_convert_path_nix_to_w32 ARG 1882*5ddc57e5SXin Li# Convert path ARG from *nix to w32 format. Requires a wine environment and 1883*5ddc57e5SXin Li# a working winepath. Returns result in func_to_host_file_result. 1884*5ddc57e5SXin Lifunc_convert_path_nix_to_w32 () 1885*5ddc57e5SXin Li{ 1886*5ddc57e5SXin Li $opt_debug 1887*5ddc57e5SXin Li func_to_host_path_result="$1" 1888*5ddc57e5SXin Li if test -n "$1"; then 1889*5ddc57e5SXin Li # See func_convert_path_msys_to_w32: 1890*5ddc57e5SXin Li func_stripname : : "$1" 1891*5ddc57e5SXin Li func_to_host_path_tmp1=$func_stripname_result 1892*5ddc57e5SXin Li func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1893*5ddc57e5SXin Li func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 1894*5ddc57e5SXin Li func_convert_path_check : ";" \ 1895*5ddc57e5SXin Li "$func_to_host_path_tmp1" "$func_to_host_path_result" 1896*5ddc57e5SXin Li func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1897*5ddc57e5SXin Li fi 1898*5ddc57e5SXin Li} 1899*5ddc57e5SXin Li# end func_convert_path_nix_to_w32 1900*5ddc57e5SXin Li 1901*5ddc57e5SXin Li 1902*5ddc57e5SXin Li# func_convert_path_msys_to_cygwin ARG 1903*5ddc57e5SXin Li# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1904*5ddc57e5SXin Li# Returns result in func_to_host_file_result. 1905*5ddc57e5SXin Lifunc_convert_path_msys_to_cygwin () 1906*5ddc57e5SXin Li{ 1907*5ddc57e5SXin Li $opt_debug 1908*5ddc57e5SXin Li func_to_host_path_result="$1" 1909*5ddc57e5SXin Li if test -n "$1"; then 1910*5ddc57e5SXin Li # See func_convert_path_msys_to_w32: 1911*5ddc57e5SXin Li func_stripname : : "$1" 1912*5ddc57e5SXin Li func_to_host_path_tmp1=$func_stripname_result 1913*5ddc57e5SXin Li func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1914*5ddc57e5SXin Li func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 1915*5ddc57e5SXin Li func_to_host_path_result="$func_cygpath_result" 1916*5ddc57e5SXin Li func_convert_path_check : : \ 1917*5ddc57e5SXin Li "$func_to_host_path_tmp1" "$func_to_host_path_result" 1918*5ddc57e5SXin Li func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1919*5ddc57e5SXin Li fi 1920*5ddc57e5SXin Li} 1921*5ddc57e5SXin Li# end func_convert_path_msys_to_cygwin 1922*5ddc57e5SXin Li 1923*5ddc57e5SXin Li 1924*5ddc57e5SXin Li# func_convert_path_nix_to_cygwin ARG 1925*5ddc57e5SXin Li# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 1926*5ddc57e5SXin Li# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 1927*5ddc57e5SXin Li# func_to_host_file_result. 1928*5ddc57e5SXin Lifunc_convert_path_nix_to_cygwin () 1929*5ddc57e5SXin Li{ 1930*5ddc57e5SXin Li $opt_debug 1931*5ddc57e5SXin Li func_to_host_path_result="$1" 1932*5ddc57e5SXin Li if test -n "$1"; then 1933*5ddc57e5SXin Li # Remove leading and trailing path separator characters from 1934*5ddc57e5SXin Li # ARG. msys behavior is inconsistent here, cygpath turns them 1935*5ddc57e5SXin Li # into '.;' and ';.', and winepath ignores them completely. 1936*5ddc57e5SXin Li func_stripname : : "$1" 1937*5ddc57e5SXin Li func_to_host_path_tmp1=$func_stripname_result 1938*5ddc57e5SXin Li func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1939*5ddc57e5SXin Li func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 1940*5ddc57e5SXin Li func_to_host_path_result="$func_cygpath_result" 1941*5ddc57e5SXin Li func_convert_path_check : : \ 1942*5ddc57e5SXin Li "$func_to_host_path_tmp1" "$func_to_host_path_result" 1943*5ddc57e5SXin Li func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1944*5ddc57e5SXin Li fi 1945*5ddc57e5SXin Li} 1946*5ddc57e5SXin Li# end func_convert_path_nix_to_cygwin 1947*5ddc57e5SXin Li 1948*5ddc57e5SXin Li 1949*5ddc57e5SXin Li# func_mode_compile arg... 1950*5ddc57e5SXin Lifunc_mode_compile () 1951*5ddc57e5SXin Li{ 1952*5ddc57e5SXin Li $opt_debug 1953*5ddc57e5SXin Li # Get the compilation command and the source file. 1954*5ddc57e5SXin Li base_compile= 1955*5ddc57e5SXin Li srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956*5ddc57e5SXin Li suppress_opt=yes 1957*5ddc57e5SXin Li suppress_output= 1958*5ddc57e5SXin Li arg_mode=normal 1959*5ddc57e5SXin Li libobj= 1960*5ddc57e5SXin Li later= 1961*5ddc57e5SXin Li pie_flag= 1962*5ddc57e5SXin Li 1963*5ddc57e5SXin Li for arg 1964*5ddc57e5SXin Li do 1965*5ddc57e5SXin Li case $arg_mode in 1966*5ddc57e5SXin Li arg ) 1967*5ddc57e5SXin Li # do not "continue". Instead, add this to base_compile 1968*5ddc57e5SXin Li lastarg="$arg" 1969*5ddc57e5SXin Li arg_mode=normal 1970*5ddc57e5SXin Li ;; 1971*5ddc57e5SXin Li 1972*5ddc57e5SXin Li target ) 1973*5ddc57e5SXin Li libobj="$arg" 1974*5ddc57e5SXin Li arg_mode=normal 1975*5ddc57e5SXin Li continue 1976*5ddc57e5SXin Li ;; 1977*5ddc57e5SXin Li 1978*5ddc57e5SXin Li normal ) 1979*5ddc57e5SXin Li # Accept any command-line options. 1980*5ddc57e5SXin Li case $arg in 1981*5ddc57e5SXin Li -o) 1982*5ddc57e5SXin Li test -n "$libobj" && \ 1983*5ddc57e5SXin Li func_fatal_error "you cannot specify \`-o' more than once" 1984*5ddc57e5SXin Li arg_mode=target 1985*5ddc57e5SXin Li continue 1986*5ddc57e5SXin Li ;; 1987*5ddc57e5SXin Li 1988*5ddc57e5SXin Li -pie | -fpie | -fPIE) 1989*5ddc57e5SXin Li func_append pie_flag " $arg" 1990*5ddc57e5SXin Li continue 1991*5ddc57e5SXin Li ;; 1992*5ddc57e5SXin Li 1993*5ddc57e5SXin Li -shared | -static | -prefer-pic | -prefer-non-pic) 1994*5ddc57e5SXin Li func_append later " $arg" 1995*5ddc57e5SXin Li continue 1996*5ddc57e5SXin Li ;; 1997*5ddc57e5SXin Li 1998*5ddc57e5SXin Li -no-suppress) 1999*5ddc57e5SXin Li suppress_opt=no 2000*5ddc57e5SXin Li continue 2001*5ddc57e5SXin Li ;; 2002*5ddc57e5SXin Li 2003*5ddc57e5SXin Li -Xcompiler) 2004*5ddc57e5SXin Li arg_mode=arg # the next one goes into the "base_compile" arg list 2005*5ddc57e5SXin Li continue # The current "srcfile" will either be retained or 2006*5ddc57e5SXin Li ;; # replaced later. I would guess that would be a bug. 2007*5ddc57e5SXin Li 2008*5ddc57e5SXin Li -Wc,*) 2009*5ddc57e5SXin Li func_stripname '-Wc,' '' "$arg" 2010*5ddc57e5SXin Li args=$func_stripname_result 2011*5ddc57e5SXin Li lastarg= 2012*5ddc57e5SXin Li save_ifs="$IFS"; IFS=',' 2013*5ddc57e5SXin Li for arg in $args; do 2014*5ddc57e5SXin Li IFS="$save_ifs" 2015*5ddc57e5SXin Li func_append_quoted lastarg "$arg" 2016*5ddc57e5SXin Li done 2017*5ddc57e5SXin Li IFS="$save_ifs" 2018*5ddc57e5SXin Li func_stripname ' ' '' "$lastarg" 2019*5ddc57e5SXin Li lastarg=$func_stripname_result 2020*5ddc57e5SXin Li 2021*5ddc57e5SXin Li # Add the arguments to base_compile. 2022*5ddc57e5SXin Li func_append base_compile " $lastarg" 2023*5ddc57e5SXin Li continue 2024*5ddc57e5SXin Li ;; 2025*5ddc57e5SXin Li 2026*5ddc57e5SXin Li *) 2027*5ddc57e5SXin Li # Accept the current argument as the source file. 2028*5ddc57e5SXin Li # The previous "srcfile" becomes the current argument. 2029*5ddc57e5SXin Li # 2030*5ddc57e5SXin Li lastarg="$srcfile" 2031*5ddc57e5SXin Li srcfile="$arg" 2032*5ddc57e5SXin Li ;; 2033*5ddc57e5SXin Li esac # case $arg 2034*5ddc57e5SXin Li ;; 2035*5ddc57e5SXin Li esac # case $arg_mode 2036*5ddc57e5SXin Li 2037*5ddc57e5SXin Li # Aesthetically quote the previous argument. 2038*5ddc57e5SXin Li func_append_quoted base_compile "$lastarg" 2039*5ddc57e5SXin Li done # for arg 2040*5ddc57e5SXin Li 2041*5ddc57e5SXin Li case $arg_mode in 2042*5ddc57e5SXin Li arg) 2043*5ddc57e5SXin Li func_fatal_error "you must specify an argument for -Xcompile" 2044*5ddc57e5SXin Li ;; 2045*5ddc57e5SXin Li target) 2046*5ddc57e5SXin Li func_fatal_error "you must specify a target with \`-o'" 2047*5ddc57e5SXin Li ;; 2048*5ddc57e5SXin Li *) 2049*5ddc57e5SXin Li # Get the name of the library object. 2050*5ddc57e5SXin Li test -z "$libobj" && { 2051*5ddc57e5SXin Li func_basename "$srcfile" 2052*5ddc57e5SXin Li libobj="$func_basename_result" 2053*5ddc57e5SXin Li } 2054*5ddc57e5SXin Li ;; 2055*5ddc57e5SXin Li esac 2056*5ddc57e5SXin Li 2057*5ddc57e5SXin Li # Recognize several different file suffixes. 2058*5ddc57e5SXin Li # If the user specifies -o file.o, it is replaced with file.lo 2059*5ddc57e5SXin Li case $libobj in 2060*5ddc57e5SXin Li *.[cCFSifmso] | \ 2061*5ddc57e5SXin Li *.ada | *.adb | *.ads | *.asm | \ 2062*5ddc57e5SXin Li *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2063*5ddc57e5SXin Li *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064*5ddc57e5SXin Li func_xform "$libobj" 2065*5ddc57e5SXin Li libobj=$func_xform_result 2066*5ddc57e5SXin Li ;; 2067*5ddc57e5SXin Li esac 2068*5ddc57e5SXin Li 2069*5ddc57e5SXin Li case $libobj in 2070*5ddc57e5SXin Li *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2071*5ddc57e5SXin Li *) 2072*5ddc57e5SXin Li func_fatal_error "cannot determine name of library object from \`$libobj'" 2073*5ddc57e5SXin Li ;; 2074*5ddc57e5SXin Li esac 2075*5ddc57e5SXin Li 2076*5ddc57e5SXin Li func_infer_tag $base_compile 2077*5ddc57e5SXin Li 2078*5ddc57e5SXin Li for arg in $later; do 2079*5ddc57e5SXin Li case $arg in 2080*5ddc57e5SXin Li -shared) 2081*5ddc57e5SXin Li test "$build_libtool_libs" != yes && \ 2082*5ddc57e5SXin Li func_fatal_configuration "can not build a shared library" 2083*5ddc57e5SXin Li build_old_libs=no 2084*5ddc57e5SXin Li continue 2085*5ddc57e5SXin Li ;; 2086*5ddc57e5SXin Li 2087*5ddc57e5SXin Li -static) 2088*5ddc57e5SXin Li build_libtool_libs=no 2089*5ddc57e5SXin Li build_old_libs=yes 2090*5ddc57e5SXin Li continue 2091*5ddc57e5SXin Li ;; 2092*5ddc57e5SXin Li 2093*5ddc57e5SXin Li -prefer-pic) 2094*5ddc57e5SXin Li pic_mode=yes 2095*5ddc57e5SXin Li continue 2096*5ddc57e5SXin Li ;; 2097*5ddc57e5SXin Li 2098*5ddc57e5SXin Li -prefer-non-pic) 2099*5ddc57e5SXin Li pic_mode=no 2100*5ddc57e5SXin Li continue 2101*5ddc57e5SXin Li ;; 2102*5ddc57e5SXin Li esac 2103*5ddc57e5SXin Li done 2104*5ddc57e5SXin Li 2105*5ddc57e5SXin Li func_quote_for_eval "$libobj" 2106*5ddc57e5SXin Li test "X$libobj" != "X$func_quote_for_eval_result" \ 2107*5ddc57e5SXin Li && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2108*5ddc57e5SXin Li && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109*5ddc57e5SXin Li func_dirname_and_basename "$obj" "/" "" 2110*5ddc57e5SXin Li objname="$func_basename_result" 2111*5ddc57e5SXin Li xdir="$func_dirname_result" 2112*5ddc57e5SXin Li lobj=${xdir}$objdir/$objname 2113*5ddc57e5SXin Li 2114*5ddc57e5SXin Li test -z "$base_compile" && \ 2115*5ddc57e5SXin Li func_fatal_help "you must specify a compilation command" 2116*5ddc57e5SXin Li 2117*5ddc57e5SXin Li # Delete any leftover library objects. 2118*5ddc57e5SXin Li if test "$build_old_libs" = yes; then 2119*5ddc57e5SXin Li removelist="$obj $lobj $libobj ${libobj}T" 2120*5ddc57e5SXin Li else 2121*5ddc57e5SXin Li removelist="$lobj $libobj ${libobj}T" 2122*5ddc57e5SXin Li fi 2123*5ddc57e5SXin Li 2124*5ddc57e5SXin Li # On Cygwin there's no "real" PIC flag so we must build both object types 2125*5ddc57e5SXin Li case $host_os in 2126*5ddc57e5SXin Li cygwin* | mingw* | pw32* | os2* | cegcc*) 2127*5ddc57e5SXin Li pic_mode=default 2128*5ddc57e5SXin Li ;; 2129*5ddc57e5SXin Li esac 2130*5ddc57e5SXin Li if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2131*5ddc57e5SXin Li # non-PIC code in shared libraries is not supported 2132*5ddc57e5SXin Li pic_mode=default 2133*5ddc57e5SXin Li fi 2134*5ddc57e5SXin Li 2135*5ddc57e5SXin Li # Calculate the filename of the output object if compiler does 2136*5ddc57e5SXin Li # not support -o with -c 2137*5ddc57e5SXin Li if test "$compiler_c_o" = no; then 2138*5ddc57e5SXin Li output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2139*5ddc57e5SXin Li lockfile="$output_obj.lock" 2140*5ddc57e5SXin Li else 2141*5ddc57e5SXin Li output_obj= 2142*5ddc57e5SXin Li need_locks=no 2143*5ddc57e5SXin Li lockfile= 2144*5ddc57e5SXin Li fi 2145*5ddc57e5SXin Li 2146*5ddc57e5SXin Li # Lock this critical section if it is needed 2147*5ddc57e5SXin Li # We use this script file to make the link, it avoids creating a new file 2148*5ddc57e5SXin Li if test "$need_locks" = yes; then 2149*5ddc57e5SXin Li until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150*5ddc57e5SXin Li func_echo "Waiting for $lockfile to be removed" 2151*5ddc57e5SXin Li sleep 2 2152*5ddc57e5SXin Li done 2153*5ddc57e5SXin Li elif test "$need_locks" = warn; then 2154*5ddc57e5SXin Li if test -f "$lockfile"; then 2155*5ddc57e5SXin Li $ECHO "\ 2156*5ddc57e5SXin Li*** ERROR, $lockfile exists and contains: 2157*5ddc57e5SXin Li`cat $lockfile 2>/dev/null` 2158*5ddc57e5SXin Li 2159*5ddc57e5SXin LiThis indicates that another process is trying to use the same 2160*5ddc57e5SXin Litemporary object file, and libtool could not work around it because 2161*5ddc57e5SXin Liyour compiler does not support \`-c' and \`-o' together. If you 2162*5ddc57e5SXin Lirepeat this compilation, it may succeed, by chance, but you had better 2163*5ddc57e5SXin Liavoid parallel builds (make -j) in this platform, or get a better 2164*5ddc57e5SXin Licompiler." 2165*5ddc57e5SXin Li 2166*5ddc57e5SXin Li $opt_dry_run || $RM $removelist 2167*5ddc57e5SXin Li exit $EXIT_FAILURE 2168*5ddc57e5SXin Li fi 2169*5ddc57e5SXin Li func_append removelist " $output_obj" 2170*5ddc57e5SXin Li $ECHO "$srcfile" > "$lockfile" 2171*5ddc57e5SXin Li fi 2172*5ddc57e5SXin Li 2173*5ddc57e5SXin Li $opt_dry_run || $RM $removelist 2174*5ddc57e5SXin Li func_append removelist " $lockfile" 2175*5ddc57e5SXin Li trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176*5ddc57e5SXin Li 2177*5ddc57e5SXin Li func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 2178*5ddc57e5SXin Li srcfile=$func_to_tool_file_result 2179*5ddc57e5SXin Li func_quote_for_eval "$srcfile" 2180*5ddc57e5SXin Li qsrcfile=$func_quote_for_eval_result 2181*5ddc57e5SXin Li 2182*5ddc57e5SXin Li # Only build a PIC object if we are building libtool libraries. 2183*5ddc57e5SXin Li if test "$build_libtool_libs" = yes; then 2184*5ddc57e5SXin Li # Without this assignment, base_compile gets emptied. 2185*5ddc57e5SXin Li fbsd_hideous_sh_bug=$base_compile 2186*5ddc57e5SXin Li 2187*5ddc57e5SXin Li if test "$pic_mode" != no; then 2188*5ddc57e5SXin Li command="$base_compile $qsrcfile $pic_flag" 2189*5ddc57e5SXin Li else 2190*5ddc57e5SXin Li # Don't build PIC code 2191*5ddc57e5SXin Li command="$base_compile $qsrcfile" 2192*5ddc57e5SXin Li fi 2193*5ddc57e5SXin Li 2194*5ddc57e5SXin Li func_mkdir_p "$xdir$objdir" 2195*5ddc57e5SXin Li 2196*5ddc57e5SXin Li if test -z "$output_obj"; then 2197*5ddc57e5SXin Li # Place PIC objects in $objdir 2198*5ddc57e5SXin Li func_append command " -o $lobj" 2199*5ddc57e5SXin Li fi 2200*5ddc57e5SXin Li 2201*5ddc57e5SXin Li func_show_eval_locale "$command" \ 2202*5ddc57e5SXin Li 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2203*5ddc57e5SXin Li 2204*5ddc57e5SXin Li if test "$need_locks" = warn && 2205*5ddc57e5SXin Li test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206*5ddc57e5SXin Li $ECHO "\ 2207*5ddc57e5SXin Li*** ERROR, $lockfile contains: 2208*5ddc57e5SXin Li`cat $lockfile 2>/dev/null` 2209*5ddc57e5SXin Li 2210*5ddc57e5SXin Libut it should contain: 2211*5ddc57e5SXin Li$srcfile 2212*5ddc57e5SXin Li 2213*5ddc57e5SXin LiThis indicates that another process is trying to use the same 2214*5ddc57e5SXin Litemporary object file, and libtool could not work around it because 2215*5ddc57e5SXin Liyour compiler does not support \`-c' and \`-o' together. If you 2216*5ddc57e5SXin Lirepeat this compilation, it may succeed, by chance, but you had better 2217*5ddc57e5SXin Liavoid parallel builds (make -j) in this platform, or get a better 2218*5ddc57e5SXin Licompiler." 2219*5ddc57e5SXin Li 2220*5ddc57e5SXin Li $opt_dry_run || $RM $removelist 2221*5ddc57e5SXin Li exit $EXIT_FAILURE 2222*5ddc57e5SXin Li fi 2223*5ddc57e5SXin Li 2224*5ddc57e5SXin Li # Just move the object if needed, then go on to compile the next one 2225*5ddc57e5SXin Li if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226*5ddc57e5SXin Li func_show_eval '$MV "$output_obj" "$lobj"' \ 2227*5ddc57e5SXin Li 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2228*5ddc57e5SXin Li fi 2229*5ddc57e5SXin Li 2230*5ddc57e5SXin Li # Allow error messages only from the first compilation. 2231*5ddc57e5SXin Li if test "$suppress_opt" = yes; then 2232*5ddc57e5SXin Li suppress_output=' >/dev/null 2>&1' 2233*5ddc57e5SXin Li fi 2234*5ddc57e5SXin Li fi 2235*5ddc57e5SXin Li 2236*5ddc57e5SXin Li # Only build a position-dependent object if we build old libraries. 2237*5ddc57e5SXin Li if test "$build_old_libs" = yes; then 2238*5ddc57e5SXin Li if test "$pic_mode" != yes; then 2239*5ddc57e5SXin Li # Don't build PIC code 2240*5ddc57e5SXin Li command="$base_compile $qsrcfile$pie_flag" 2241*5ddc57e5SXin Li else 2242*5ddc57e5SXin Li command="$base_compile $qsrcfile $pic_flag" 2243*5ddc57e5SXin Li fi 2244*5ddc57e5SXin Li if test "$compiler_c_o" = yes; then 2245*5ddc57e5SXin Li func_append command " -o $obj" 2246*5ddc57e5SXin Li fi 2247*5ddc57e5SXin Li 2248*5ddc57e5SXin Li # Suppress compiler output if we already did a PIC compilation. 2249*5ddc57e5SXin Li func_append command "$suppress_output" 2250*5ddc57e5SXin Li func_show_eval_locale "$command" \ 2251*5ddc57e5SXin Li '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2252*5ddc57e5SXin Li 2253*5ddc57e5SXin Li if test "$need_locks" = warn && 2254*5ddc57e5SXin Li test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255*5ddc57e5SXin Li $ECHO "\ 2256*5ddc57e5SXin Li*** ERROR, $lockfile contains: 2257*5ddc57e5SXin Li`cat $lockfile 2>/dev/null` 2258*5ddc57e5SXin Li 2259*5ddc57e5SXin Libut it should contain: 2260*5ddc57e5SXin Li$srcfile 2261*5ddc57e5SXin Li 2262*5ddc57e5SXin LiThis indicates that another process is trying to use the same 2263*5ddc57e5SXin Litemporary object file, and libtool could not work around it because 2264*5ddc57e5SXin Liyour compiler does not support \`-c' and \`-o' together. If you 2265*5ddc57e5SXin Lirepeat this compilation, it may succeed, by chance, but you had better 2266*5ddc57e5SXin Liavoid parallel builds (make -j) in this platform, or get a better 2267*5ddc57e5SXin Licompiler." 2268*5ddc57e5SXin Li 2269*5ddc57e5SXin Li $opt_dry_run || $RM $removelist 2270*5ddc57e5SXin Li exit $EXIT_FAILURE 2271*5ddc57e5SXin Li fi 2272*5ddc57e5SXin Li 2273*5ddc57e5SXin Li # Just move the object if needed 2274*5ddc57e5SXin Li if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275*5ddc57e5SXin Li func_show_eval '$MV "$output_obj" "$obj"' \ 2276*5ddc57e5SXin Li 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2277*5ddc57e5SXin Li fi 2278*5ddc57e5SXin Li fi 2279*5ddc57e5SXin Li 2280*5ddc57e5SXin Li $opt_dry_run || { 2281*5ddc57e5SXin Li func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2282*5ddc57e5SXin Li 2283*5ddc57e5SXin Li # Unlock the critical section if it was locked 2284*5ddc57e5SXin Li if test "$need_locks" != no; then 2285*5ddc57e5SXin Li removelist=$lockfile 2286*5ddc57e5SXin Li $RM "$lockfile" 2287*5ddc57e5SXin Li fi 2288*5ddc57e5SXin Li } 2289*5ddc57e5SXin Li 2290*5ddc57e5SXin Li exit $EXIT_SUCCESS 2291*5ddc57e5SXin Li} 2292*5ddc57e5SXin Li 2293*5ddc57e5SXin Li$opt_help || { 2294*5ddc57e5SXin Li test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295*5ddc57e5SXin Li} 2296*5ddc57e5SXin Li 2297*5ddc57e5SXin Lifunc_mode_help () 2298*5ddc57e5SXin Li{ 2299*5ddc57e5SXin Li # We need to display help for each of the modes. 2300*5ddc57e5SXin Li case $opt_mode in 2301*5ddc57e5SXin Li "") 2302*5ddc57e5SXin Li # Generic help is extracted from the usage comments 2303*5ddc57e5SXin Li # at the start of this file. 2304*5ddc57e5SXin Li func_help 2305*5ddc57e5SXin Li ;; 2306*5ddc57e5SXin Li 2307*5ddc57e5SXin Li clean) 2308*5ddc57e5SXin Li $ECHO \ 2309*5ddc57e5SXin Li"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2310*5ddc57e5SXin Li 2311*5ddc57e5SXin LiRemove files from the build directory. 2312*5ddc57e5SXin Li 2313*5ddc57e5SXin LiRM is the name of the program to use to delete files associated with each FILE 2314*5ddc57e5SXin Li(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315*5ddc57e5SXin Lito RM. 2316*5ddc57e5SXin Li 2317*5ddc57e5SXin LiIf FILE is a libtool library, object or program, all the files associated 2318*5ddc57e5SXin Liwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319*5ddc57e5SXin Li ;; 2320*5ddc57e5SXin Li 2321*5ddc57e5SXin Li compile) 2322*5ddc57e5SXin Li $ECHO \ 2323*5ddc57e5SXin Li"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2324*5ddc57e5SXin Li 2325*5ddc57e5SXin LiCompile a source file into a libtool library object. 2326*5ddc57e5SXin Li 2327*5ddc57e5SXin LiThis mode accepts the following additional options: 2328*5ddc57e5SXin Li 2329*5ddc57e5SXin Li -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330*5ddc57e5SXin Li -no-suppress do not suppress compiler output for multiple passes 2331*5ddc57e5SXin Li -prefer-pic try to build PIC objects only 2332*5ddc57e5SXin Li -prefer-non-pic try to build non-PIC objects only 2333*5ddc57e5SXin Li -shared do not build a \`.o' file suitable for static linking 2334*5ddc57e5SXin Li -static only build a \`.o' file suitable for static linking 2335*5ddc57e5SXin Li -Wc,FLAG pass FLAG directly to the compiler 2336*5ddc57e5SXin Li 2337*5ddc57e5SXin LiCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338*5ddc57e5SXin Lifrom the given SOURCEFILE. 2339*5ddc57e5SXin Li 2340*5ddc57e5SXin LiThe output file name is determined by removing the directory component from 2341*5ddc57e5SXin LiSOURCEFILE, then substituting the C source code suffix \`.c' with the 2342*5ddc57e5SXin Lilibrary object suffix, \`.lo'." 2343*5ddc57e5SXin Li ;; 2344*5ddc57e5SXin Li 2345*5ddc57e5SXin Li execute) 2346*5ddc57e5SXin Li $ECHO \ 2347*5ddc57e5SXin Li"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2348*5ddc57e5SXin Li 2349*5ddc57e5SXin LiAutomatically set library path, then run a program. 2350*5ddc57e5SXin Li 2351*5ddc57e5SXin LiThis mode accepts the following additional options: 2352*5ddc57e5SXin Li 2353*5ddc57e5SXin Li -dlopen FILE add the directory containing FILE to the library path 2354*5ddc57e5SXin Li 2355*5ddc57e5SXin LiThis mode sets the library path environment variable according to \`-dlopen' 2356*5ddc57e5SXin Liflags. 2357*5ddc57e5SXin Li 2358*5ddc57e5SXin LiIf any of the ARGS are libtool executable wrappers, then they are translated 2359*5ddc57e5SXin Liinto their corresponding uninstalled binary, and any of their required library 2360*5ddc57e5SXin Lidirectories are added to the library path. 2361*5ddc57e5SXin Li 2362*5ddc57e5SXin LiThen, COMMAND is executed, with ARGS as arguments." 2363*5ddc57e5SXin Li ;; 2364*5ddc57e5SXin Li 2365*5ddc57e5SXin Li finish) 2366*5ddc57e5SXin Li $ECHO \ 2367*5ddc57e5SXin Li"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2368*5ddc57e5SXin Li 2369*5ddc57e5SXin LiComplete the installation of libtool libraries. 2370*5ddc57e5SXin Li 2371*5ddc57e5SXin LiEach LIBDIR is a directory that contains libtool libraries. 2372*5ddc57e5SXin Li 2373*5ddc57e5SXin LiThe commands that this mode executes may require superuser privileges. Use 2374*5ddc57e5SXin Lithe \`--dry-run' option if you just want to see what would be executed." 2375*5ddc57e5SXin Li ;; 2376*5ddc57e5SXin Li 2377*5ddc57e5SXin Li install) 2378*5ddc57e5SXin Li $ECHO \ 2379*5ddc57e5SXin Li"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2380*5ddc57e5SXin Li 2381*5ddc57e5SXin LiInstall executables or libraries. 2382*5ddc57e5SXin Li 2383*5ddc57e5SXin LiINSTALL-COMMAND is the installation command. The first component should be 2384*5ddc57e5SXin Lieither the \`install' or \`cp' program. 2385*5ddc57e5SXin Li 2386*5ddc57e5SXin LiThe following components of INSTALL-COMMAND are treated specially: 2387*5ddc57e5SXin Li 2388*5ddc57e5SXin Li -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2389*5ddc57e5SXin Li 2390*5ddc57e5SXin LiThe rest of the components are interpreted as arguments to that command (only 2391*5ddc57e5SXin LiBSD-compatible install options are recognized)." 2392*5ddc57e5SXin Li ;; 2393*5ddc57e5SXin Li 2394*5ddc57e5SXin Li link) 2395*5ddc57e5SXin Li $ECHO \ 2396*5ddc57e5SXin Li"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2397*5ddc57e5SXin Li 2398*5ddc57e5SXin LiLink object files or libraries together to form another library, or to 2399*5ddc57e5SXin Licreate an executable program. 2400*5ddc57e5SXin Li 2401*5ddc57e5SXin LiLINK-COMMAND is a command using the C compiler that you would use to create 2402*5ddc57e5SXin Lia program from several object files. 2403*5ddc57e5SXin Li 2404*5ddc57e5SXin LiThe following components of LINK-COMMAND are treated specially: 2405*5ddc57e5SXin Li 2406*5ddc57e5SXin Li -all-static do not do any dynamic linking at all 2407*5ddc57e5SXin Li -avoid-version do not add a version suffix if possible 2408*5ddc57e5SXin Li -bindir BINDIR specify path to binaries directory (for systems where 2409*5ddc57e5SXin Li libraries must be found in the PATH setting at runtime) 2410*5ddc57e5SXin Li -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411*5ddc57e5SXin Li -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412*5ddc57e5SXin Li -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413*5ddc57e5SXin Li -export-symbols SYMFILE 2414*5ddc57e5SXin Li try to export only the symbols listed in SYMFILE 2415*5ddc57e5SXin Li -export-symbols-regex REGEX 2416*5ddc57e5SXin Li try to export only the symbols matching REGEX 2417*5ddc57e5SXin Li -LLIBDIR search LIBDIR for required installed libraries 2418*5ddc57e5SXin Li -lNAME OUTPUT-FILE requires the installed library libNAME 2419*5ddc57e5SXin Li -module build a library that can dlopened 2420*5ddc57e5SXin Li -no-fast-install disable the fast-install mode 2421*5ddc57e5SXin Li -no-install link a not-installable executable 2422*5ddc57e5SXin Li -no-undefined declare that a library does not refer to external symbols 2423*5ddc57e5SXin Li -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2424*5ddc57e5SXin Li -objectlist FILE Use a list of object files found in FILE to specify objects 2425*5ddc57e5SXin Li -precious-files-regex REGEX 2426*5ddc57e5SXin Li don't remove output files matching REGEX 2427*5ddc57e5SXin Li -release RELEASE specify package release information 2428*5ddc57e5SXin Li -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429*5ddc57e5SXin Li -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430*5ddc57e5SXin Li -shared only do dynamic linking of libtool libraries 2431*5ddc57e5SXin Li -shrext SUFFIX override the standard shared library file extension 2432*5ddc57e5SXin Li -static do not do any dynamic linking of uninstalled libtool libraries 2433*5ddc57e5SXin Li -static-libtool-libs 2434*5ddc57e5SXin Li do not do any dynamic linking of libtool libraries 2435*5ddc57e5SXin Li -version-info CURRENT[:REVISION[:AGE]] 2436*5ddc57e5SXin Li specify library version info [each variable defaults to 0] 2437*5ddc57e5SXin Li -weak LIBNAME declare that the target provides the LIBNAME interface 2438*5ddc57e5SXin Li -Wc,FLAG 2439*5ddc57e5SXin Li -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 2440*5ddc57e5SXin Li -Wl,FLAG 2441*5ddc57e5SXin Li -Xlinker FLAG pass linker-specific FLAG directly to the linker 2442*5ddc57e5SXin Li -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2443*5ddc57e5SXin Li 2444*5ddc57e5SXin LiAll other options (arguments beginning with \`-') are ignored. 2445*5ddc57e5SXin Li 2446*5ddc57e5SXin LiEvery other argument is treated as a filename. Files ending in \`.la' are 2447*5ddc57e5SXin Litreated as uninstalled libtool libraries, other files are standard or library 2448*5ddc57e5SXin Liobject files. 2449*5ddc57e5SXin Li 2450*5ddc57e5SXin LiIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2451*5ddc57e5SXin Lionly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452*5ddc57e5SXin Lirequired, except when creating a convenience library. 2453*5ddc57e5SXin Li 2454*5ddc57e5SXin LiIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2455*5ddc57e5SXin Liusing \`ar' and \`ranlib', or on Windows using \`lib'. 2456*5ddc57e5SXin Li 2457*5ddc57e5SXin LiIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458*5ddc57e5SXin Liis created, otherwise an executable program is created." 2459*5ddc57e5SXin Li ;; 2460*5ddc57e5SXin Li 2461*5ddc57e5SXin Li uninstall) 2462*5ddc57e5SXin Li $ECHO \ 2463*5ddc57e5SXin Li"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2464*5ddc57e5SXin Li 2465*5ddc57e5SXin LiRemove libraries from an installation directory. 2466*5ddc57e5SXin Li 2467*5ddc57e5SXin LiRM is the name of the program to use to delete files associated with each FILE 2468*5ddc57e5SXin Li(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469*5ddc57e5SXin Lito RM. 2470*5ddc57e5SXin Li 2471*5ddc57e5SXin LiIf FILE is a libtool library, all the files associated with it are deleted. 2472*5ddc57e5SXin LiOtherwise, only FILE itself is deleted using RM." 2473*5ddc57e5SXin Li ;; 2474*5ddc57e5SXin Li 2475*5ddc57e5SXin Li *) 2476*5ddc57e5SXin Li func_fatal_help "invalid operation mode \`$opt_mode'" 2477*5ddc57e5SXin Li ;; 2478*5ddc57e5SXin Li esac 2479*5ddc57e5SXin Li 2480*5ddc57e5SXin Li echo 2481*5ddc57e5SXin Li $ECHO "Try \`$progname --help' for more information about other modes." 2482*5ddc57e5SXin Li} 2483*5ddc57e5SXin Li 2484*5ddc57e5SXin Li# Now that we've collected a possible --mode arg, show help if necessary 2485*5ddc57e5SXin Liif $opt_help; then 2486*5ddc57e5SXin Li if test "$opt_help" = :; then 2487*5ddc57e5SXin Li func_mode_help 2488*5ddc57e5SXin Li else 2489*5ddc57e5SXin Li { 2490*5ddc57e5SXin Li func_help noexit 2491*5ddc57e5SXin Li for opt_mode in compile link execute install finish uninstall clean; do 2492*5ddc57e5SXin Li func_mode_help 2493*5ddc57e5SXin Li done 2494*5ddc57e5SXin Li } | sed -n '1p; 2,$s/^Usage:/ or: /p' 2495*5ddc57e5SXin Li { 2496*5ddc57e5SXin Li func_help noexit 2497*5ddc57e5SXin Li for opt_mode in compile link execute install finish uninstall clean; do 2498*5ddc57e5SXin Li echo 2499*5ddc57e5SXin Li func_mode_help 2500*5ddc57e5SXin Li done 2501*5ddc57e5SXin Li } | 2502*5ddc57e5SXin Li sed '1d 2503*5ddc57e5SXin Li /^When reporting/,/^Report/{ 2504*5ddc57e5SXin Li H 2505*5ddc57e5SXin Li d 2506*5ddc57e5SXin Li } 2507*5ddc57e5SXin Li $x 2508*5ddc57e5SXin Li /information about other modes/d 2509*5ddc57e5SXin Li /more detailed .*MODE/d 2510*5ddc57e5SXin Li s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 2511*5ddc57e5SXin Li fi 2512*5ddc57e5SXin Li exit $? 2513*5ddc57e5SXin Lifi 2514*5ddc57e5SXin Li 2515*5ddc57e5SXin Li 2516*5ddc57e5SXin Li# func_mode_execute arg... 2517*5ddc57e5SXin Lifunc_mode_execute () 2518*5ddc57e5SXin Li{ 2519*5ddc57e5SXin Li $opt_debug 2520*5ddc57e5SXin Li # The first argument is the command name. 2521*5ddc57e5SXin Li cmd="$nonopt" 2522*5ddc57e5SXin Li test -z "$cmd" && \ 2523*5ddc57e5SXin Li func_fatal_help "you must specify a COMMAND" 2524*5ddc57e5SXin Li 2525*5ddc57e5SXin Li # Handle -dlopen flags immediately. 2526*5ddc57e5SXin Li for file in $opt_dlopen; do 2527*5ddc57e5SXin Li test -f "$file" \ 2528*5ddc57e5SXin Li || func_fatal_help "\`$file' is not a file" 2529*5ddc57e5SXin Li 2530*5ddc57e5SXin Li dir= 2531*5ddc57e5SXin Li case $file in 2532*5ddc57e5SXin Li *.la) 2533*5ddc57e5SXin Li func_resolve_sysroot "$file" 2534*5ddc57e5SXin Li file=$func_resolve_sysroot_result 2535*5ddc57e5SXin Li 2536*5ddc57e5SXin Li # Check to see that this really is a libtool archive. 2537*5ddc57e5SXin Li func_lalib_unsafe_p "$file" \ 2538*5ddc57e5SXin Li || func_fatal_help "\`$lib' is not a valid libtool archive" 2539*5ddc57e5SXin Li 2540*5ddc57e5SXin Li # Read the libtool library. 2541*5ddc57e5SXin Li dlname= 2542*5ddc57e5SXin Li library_names= 2543*5ddc57e5SXin Li func_source "$file" 2544*5ddc57e5SXin Li 2545*5ddc57e5SXin Li # Skip this library if it cannot be dlopened. 2546*5ddc57e5SXin Li if test -z "$dlname"; then 2547*5ddc57e5SXin Li # Warn if it was a shared library. 2548*5ddc57e5SXin Li test -n "$library_names" && \ 2549*5ddc57e5SXin Li func_warning "\`$file' was not linked with \`-export-dynamic'" 2550*5ddc57e5SXin Li continue 2551*5ddc57e5SXin Li fi 2552*5ddc57e5SXin Li 2553*5ddc57e5SXin Li func_dirname "$file" "" "." 2554*5ddc57e5SXin Li dir="$func_dirname_result" 2555*5ddc57e5SXin Li 2556*5ddc57e5SXin Li if test -f "$dir/$objdir/$dlname"; then 2557*5ddc57e5SXin Li func_append dir "/$objdir" 2558*5ddc57e5SXin Li else 2559*5ddc57e5SXin Li if test ! -f "$dir/$dlname"; then 2560*5ddc57e5SXin Li func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561*5ddc57e5SXin Li fi 2562*5ddc57e5SXin Li fi 2563*5ddc57e5SXin Li ;; 2564*5ddc57e5SXin Li 2565*5ddc57e5SXin Li *.lo) 2566*5ddc57e5SXin Li # Just add the directory containing the .lo file. 2567*5ddc57e5SXin Li func_dirname "$file" "" "." 2568*5ddc57e5SXin Li dir="$func_dirname_result" 2569*5ddc57e5SXin Li ;; 2570*5ddc57e5SXin Li 2571*5ddc57e5SXin Li *) 2572*5ddc57e5SXin Li func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2573*5ddc57e5SXin Li continue 2574*5ddc57e5SXin Li ;; 2575*5ddc57e5SXin Li esac 2576*5ddc57e5SXin Li 2577*5ddc57e5SXin Li # Get the absolute pathname. 2578*5ddc57e5SXin Li absdir=`cd "$dir" && pwd` 2579*5ddc57e5SXin Li test -n "$absdir" && dir="$absdir" 2580*5ddc57e5SXin Li 2581*5ddc57e5SXin Li # Now add the directory to shlibpath_var. 2582*5ddc57e5SXin Li if eval "test -z \"\$$shlibpath_var\""; then 2583*5ddc57e5SXin Li eval "$shlibpath_var=\"\$dir\"" 2584*5ddc57e5SXin Li else 2585*5ddc57e5SXin Li eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586*5ddc57e5SXin Li fi 2587*5ddc57e5SXin Li done 2588*5ddc57e5SXin Li 2589*5ddc57e5SXin Li # This variable tells wrapper scripts just to set shlibpath_var 2590*5ddc57e5SXin Li # rather than running their programs. 2591*5ddc57e5SXin Li libtool_execute_magic="$magic" 2592*5ddc57e5SXin Li 2593*5ddc57e5SXin Li # Check if any of the arguments is a wrapper script. 2594*5ddc57e5SXin Li args= 2595*5ddc57e5SXin Li for file 2596*5ddc57e5SXin Li do 2597*5ddc57e5SXin Li case $file in 2598*5ddc57e5SXin Li -* | *.la | *.lo ) ;; 2599*5ddc57e5SXin Li *) 2600*5ddc57e5SXin Li # Do a test to see if this is really a libtool program. 2601*5ddc57e5SXin Li if func_ltwrapper_script_p "$file"; then 2602*5ddc57e5SXin Li func_source "$file" 2603*5ddc57e5SXin Li # Transform arg to wrapped name. 2604*5ddc57e5SXin Li file="$progdir/$program" 2605*5ddc57e5SXin Li elif func_ltwrapper_executable_p "$file"; then 2606*5ddc57e5SXin Li func_ltwrapper_scriptname "$file" 2607*5ddc57e5SXin Li func_source "$func_ltwrapper_scriptname_result" 2608*5ddc57e5SXin Li # Transform arg to wrapped name. 2609*5ddc57e5SXin Li file="$progdir/$program" 2610*5ddc57e5SXin Li fi 2611*5ddc57e5SXin Li ;; 2612*5ddc57e5SXin Li esac 2613*5ddc57e5SXin Li # Quote arguments (to preserve shell metacharacters). 2614*5ddc57e5SXin Li func_append_quoted args "$file" 2615*5ddc57e5SXin Li done 2616*5ddc57e5SXin Li 2617*5ddc57e5SXin Li if test "X$opt_dry_run" = Xfalse; then 2618*5ddc57e5SXin Li if test -n "$shlibpath_var"; then 2619*5ddc57e5SXin Li # Export the shlibpath_var. 2620*5ddc57e5SXin Li eval "export $shlibpath_var" 2621*5ddc57e5SXin Li fi 2622*5ddc57e5SXin Li 2623*5ddc57e5SXin Li # Restore saved environment variables 2624*5ddc57e5SXin Li for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625*5ddc57e5SXin Li do 2626*5ddc57e5SXin Li eval "if test \"\${save_$lt_var+set}\" = set; then 2627*5ddc57e5SXin Li $lt_var=\$save_$lt_var; export $lt_var 2628*5ddc57e5SXin Li else 2629*5ddc57e5SXin Li $lt_unset $lt_var 2630*5ddc57e5SXin Li fi" 2631*5ddc57e5SXin Li done 2632*5ddc57e5SXin Li 2633*5ddc57e5SXin Li # Now prepare to actually exec the command. 2634*5ddc57e5SXin Li exec_cmd="\$cmd$args" 2635*5ddc57e5SXin Li else 2636*5ddc57e5SXin Li # Display what would be done. 2637*5ddc57e5SXin Li if test -n "$shlibpath_var"; then 2638*5ddc57e5SXin Li eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 2639*5ddc57e5SXin Li echo "export $shlibpath_var" 2640*5ddc57e5SXin Li fi 2641*5ddc57e5SXin Li $ECHO "$cmd$args" 2642*5ddc57e5SXin Li exit $EXIT_SUCCESS 2643*5ddc57e5SXin Li fi 2644*5ddc57e5SXin Li} 2645*5ddc57e5SXin Li 2646*5ddc57e5SXin Litest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2647*5ddc57e5SXin Li 2648*5ddc57e5SXin Li 2649*5ddc57e5SXin Li# func_mode_finish arg... 2650*5ddc57e5SXin Lifunc_mode_finish () 2651*5ddc57e5SXin Li{ 2652*5ddc57e5SXin Li $opt_debug 2653*5ddc57e5SXin Li libs= 2654*5ddc57e5SXin Li libdirs= 2655*5ddc57e5SXin Li admincmds= 2656*5ddc57e5SXin Li 2657*5ddc57e5SXin Li for opt in "$nonopt" ${1+"$@"} 2658*5ddc57e5SXin Li do 2659*5ddc57e5SXin Li if test -d "$opt"; then 2660*5ddc57e5SXin Li func_append libdirs " $opt" 2661*5ddc57e5SXin Li 2662*5ddc57e5SXin Li elif test -f "$opt"; then 2663*5ddc57e5SXin Li if func_lalib_unsafe_p "$opt"; then 2664*5ddc57e5SXin Li func_append libs " $opt" 2665*5ddc57e5SXin Li else 2666*5ddc57e5SXin Li func_warning "\`$opt' is not a valid libtool archive" 2667*5ddc57e5SXin Li fi 2668*5ddc57e5SXin Li 2669*5ddc57e5SXin Li else 2670*5ddc57e5SXin Li func_fatal_error "invalid argument \`$opt'" 2671*5ddc57e5SXin Li fi 2672*5ddc57e5SXin Li done 2673*5ddc57e5SXin Li 2674*5ddc57e5SXin Li if test -n "$libs"; then 2675*5ddc57e5SXin Li if test -n "$lt_sysroot"; then 2676*5ddc57e5SXin Li sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 2677*5ddc57e5SXin Li sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 2678*5ddc57e5SXin Li else 2679*5ddc57e5SXin Li sysroot_cmd= 2680*5ddc57e5SXin Li fi 2681*5ddc57e5SXin Li 2682*5ddc57e5SXin Li # Remove sysroot references 2683*5ddc57e5SXin Li if $opt_dry_run; then 2684*5ddc57e5SXin Li for lib in $libs; do 2685*5ddc57e5SXin Li echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 2686*5ddc57e5SXin Li done 2687*5ddc57e5SXin Li else 2688*5ddc57e5SXin Li tmpdir=`func_mktempdir` 2689*5ddc57e5SXin Li for lib in $libs; do 2690*5ddc57e5SXin Li sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 2691*5ddc57e5SXin Li > $tmpdir/tmp-la 2692*5ddc57e5SXin Li mv -f $tmpdir/tmp-la $lib 2693*5ddc57e5SXin Li done 2694*5ddc57e5SXin Li ${RM}r "$tmpdir" 2695*5ddc57e5SXin Li fi 2696*5ddc57e5SXin Li fi 2697*5ddc57e5SXin Li 2698*5ddc57e5SXin Li if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699*5ddc57e5SXin Li for libdir in $libdirs; do 2700*5ddc57e5SXin Li if test -n "$finish_cmds"; then 2701*5ddc57e5SXin Li # Do each command in the finish commands. 2702*5ddc57e5SXin Li func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703*5ddc57e5SXin Li'"$cmd"'"' 2704*5ddc57e5SXin Li fi 2705*5ddc57e5SXin Li if test -n "$finish_eval"; then 2706*5ddc57e5SXin Li # Do the single finish_eval. 2707*5ddc57e5SXin Li eval cmds=\"$finish_eval\" 2708*5ddc57e5SXin Li $opt_dry_run || eval "$cmds" || func_append admincmds " 2709*5ddc57e5SXin Li $cmds" 2710*5ddc57e5SXin Li fi 2711*5ddc57e5SXin Li done 2712*5ddc57e5SXin Li fi 2713*5ddc57e5SXin Li 2714*5ddc57e5SXin Li # Exit here if they wanted silent mode. 2715*5ddc57e5SXin Li $opt_silent && exit $EXIT_SUCCESS 2716*5ddc57e5SXin Li 2717*5ddc57e5SXin Li if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2718*5ddc57e5SXin Li echo "----------------------------------------------------------------------" 2719*5ddc57e5SXin Li echo "Libraries have been installed in:" 2720*5ddc57e5SXin Li for libdir in $libdirs; do 2721*5ddc57e5SXin Li $ECHO " $libdir" 2722*5ddc57e5SXin Li done 2723*5ddc57e5SXin Li echo 2724*5ddc57e5SXin Li echo "If you ever happen to want to link against installed libraries" 2725*5ddc57e5SXin Li echo "in a given directory, LIBDIR, you must either use libtool, and" 2726*5ddc57e5SXin Li echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2727*5ddc57e5SXin Li echo "flag during linking and do at least one of the following:" 2728*5ddc57e5SXin Li if test -n "$shlibpath_var"; then 2729*5ddc57e5SXin Li echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2730*5ddc57e5SXin Li echo " during execution" 2731*5ddc57e5SXin Li fi 2732*5ddc57e5SXin Li if test -n "$runpath_var"; then 2733*5ddc57e5SXin Li echo " - add LIBDIR to the \`$runpath_var' environment variable" 2734*5ddc57e5SXin Li echo " during linking" 2735*5ddc57e5SXin Li fi 2736*5ddc57e5SXin Li if test -n "$hardcode_libdir_flag_spec"; then 2737*5ddc57e5SXin Li libdir=LIBDIR 2738*5ddc57e5SXin Li eval flag=\"$hardcode_libdir_flag_spec\" 2739*5ddc57e5SXin Li 2740*5ddc57e5SXin Li $ECHO " - use the \`$flag' linker flag" 2741*5ddc57e5SXin Li fi 2742*5ddc57e5SXin Li if test -n "$admincmds"; then 2743*5ddc57e5SXin Li $ECHO " - have your system administrator run these commands:$admincmds" 2744*5ddc57e5SXin Li fi 2745*5ddc57e5SXin Li if test -f /etc/ld.so.conf; then 2746*5ddc57e5SXin Li echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2747*5ddc57e5SXin Li fi 2748*5ddc57e5SXin Li echo 2749*5ddc57e5SXin Li 2750*5ddc57e5SXin Li echo "See any operating system documentation about shared libraries for" 2751*5ddc57e5SXin Li case $host in 2752*5ddc57e5SXin Li solaris2.[6789]|solaris2.1[0-9]) 2753*5ddc57e5SXin Li echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2754*5ddc57e5SXin Li echo "pages." 2755*5ddc57e5SXin Li ;; 2756*5ddc57e5SXin Li *) 2757*5ddc57e5SXin Li echo "more information, such as the ld(1) and ld.so(8) manual pages." 2758*5ddc57e5SXin Li ;; 2759*5ddc57e5SXin Li esac 2760*5ddc57e5SXin Li echo "----------------------------------------------------------------------" 2761*5ddc57e5SXin Li fi 2762*5ddc57e5SXin Li exit $EXIT_SUCCESS 2763*5ddc57e5SXin Li} 2764*5ddc57e5SXin Li 2765*5ddc57e5SXin Litest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766*5ddc57e5SXin Li 2767*5ddc57e5SXin Li 2768*5ddc57e5SXin Li# func_mode_install arg... 2769*5ddc57e5SXin Lifunc_mode_install () 2770*5ddc57e5SXin Li{ 2771*5ddc57e5SXin Li $opt_debug 2772*5ddc57e5SXin Li # There may be an optional sh(1) argument at the beginning of 2773*5ddc57e5SXin Li # install_prog (especially on Windows NT). 2774*5ddc57e5SXin Li if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775*5ddc57e5SXin Li # Allow the use of GNU shtool's install command. 2776*5ddc57e5SXin Li case $nonopt in *shtool*) :;; *) false;; esac; then 2777*5ddc57e5SXin Li # Aesthetically quote it. 2778*5ddc57e5SXin Li func_quote_for_eval "$nonopt" 2779*5ddc57e5SXin Li install_prog="$func_quote_for_eval_result " 2780*5ddc57e5SXin Li arg=$1 2781*5ddc57e5SXin Li shift 2782*5ddc57e5SXin Li else 2783*5ddc57e5SXin Li install_prog= 2784*5ddc57e5SXin Li arg=$nonopt 2785*5ddc57e5SXin Li fi 2786*5ddc57e5SXin Li 2787*5ddc57e5SXin Li # The real first argument should be the name of the installation program. 2788*5ddc57e5SXin Li # Aesthetically quote it. 2789*5ddc57e5SXin Li func_quote_for_eval "$arg" 2790*5ddc57e5SXin Li func_append install_prog "$func_quote_for_eval_result" 2791*5ddc57e5SXin Li install_shared_prog=$install_prog 2792*5ddc57e5SXin Li case " $install_prog " in 2793*5ddc57e5SXin Li *[\\\ /]cp\ *) install_cp=: ;; 2794*5ddc57e5SXin Li *) install_cp=false ;; 2795*5ddc57e5SXin Li esac 2796*5ddc57e5SXin Li 2797*5ddc57e5SXin Li # We need to accept at least all the BSD install flags. 2798*5ddc57e5SXin Li dest= 2799*5ddc57e5SXin Li files= 2800*5ddc57e5SXin Li opts= 2801*5ddc57e5SXin Li prev= 2802*5ddc57e5SXin Li install_type= 2803*5ddc57e5SXin Li isdir=no 2804*5ddc57e5SXin Li stripme= 2805*5ddc57e5SXin Li no_mode=: 2806*5ddc57e5SXin Li for arg 2807*5ddc57e5SXin Li do 2808*5ddc57e5SXin Li arg2= 2809*5ddc57e5SXin Li if test -n "$dest"; then 2810*5ddc57e5SXin Li func_append files " $dest" 2811*5ddc57e5SXin Li dest=$arg 2812*5ddc57e5SXin Li continue 2813*5ddc57e5SXin Li fi 2814*5ddc57e5SXin Li 2815*5ddc57e5SXin Li case $arg in 2816*5ddc57e5SXin Li -d) isdir=yes ;; 2817*5ddc57e5SXin Li -f) 2818*5ddc57e5SXin Li if $install_cp; then :; else 2819*5ddc57e5SXin Li prev=$arg 2820*5ddc57e5SXin Li fi 2821*5ddc57e5SXin Li ;; 2822*5ddc57e5SXin Li -g | -m | -o) 2823*5ddc57e5SXin Li prev=$arg 2824*5ddc57e5SXin Li ;; 2825*5ddc57e5SXin Li -s) 2826*5ddc57e5SXin Li stripme=" -s" 2827*5ddc57e5SXin Li continue 2828*5ddc57e5SXin Li ;; 2829*5ddc57e5SXin Li -*) 2830*5ddc57e5SXin Li ;; 2831*5ddc57e5SXin Li *) 2832*5ddc57e5SXin Li # If the previous option needed an argument, then skip it. 2833*5ddc57e5SXin Li if test -n "$prev"; then 2834*5ddc57e5SXin Li if test "x$prev" = x-m && test -n "$install_override_mode"; then 2835*5ddc57e5SXin Li arg2=$install_override_mode 2836*5ddc57e5SXin Li no_mode=false 2837*5ddc57e5SXin Li fi 2838*5ddc57e5SXin Li prev= 2839*5ddc57e5SXin Li else 2840*5ddc57e5SXin Li dest=$arg 2841*5ddc57e5SXin Li continue 2842*5ddc57e5SXin Li fi 2843*5ddc57e5SXin Li ;; 2844*5ddc57e5SXin Li esac 2845*5ddc57e5SXin Li 2846*5ddc57e5SXin Li # Aesthetically quote the argument. 2847*5ddc57e5SXin Li func_quote_for_eval "$arg" 2848*5ddc57e5SXin Li func_append install_prog " $func_quote_for_eval_result" 2849*5ddc57e5SXin Li if test -n "$arg2"; then 2850*5ddc57e5SXin Li func_quote_for_eval "$arg2" 2851*5ddc57e5SXin Li fi 2852*5ddc57e5SXin Li func_append install_shared_prog " $func_quote_for_eval_result" 2853*5ddc57e5SXin Li done 2854*5ddc57e5SXin Li 2855*5ddc57e5SXin Li test -z "$install_prog" && \ 2856*5ddc57e5SXin Li func_fatal_help "you must specify an install program" 2857*5ddc57e5SXin Li 2858*5ddc57e5SXin Li test -n "$prev" && \ 2859*5ddc57e5SXin Li func_fatal_help "the \`$prev' option requires an argument" 2860*5ddc57e5SXin Li 2861*5ddc57e5SXin Li if test -n "$install_override_mode" && $no_mode; then 2862*5ddc57e5SXin Li if $install_cp; then :; else 2863*5ddc57e5SXin Li func_quote_for_eval "$install_override_mode" 2864*5ddc57e5SXin Li func_append install_shared_prog " -m $func_quote_for_eval_result" 2865*5ddc57e5SXin Li fi 2866*5ddc57e5SXin Li fi 2867*5ddc57e5SXin Li 2868*5ddc57e5SXin Li if test -z "$files"; then 2869*5ddc57e5SXin Li if test -z "$dest"; then 2870*5ddc57e5SXin Li func_fatal_help "no file or destination specified" 2871*5ddc57e5SXin Li else 2872*5ddc57e5SXin Li func_fatal_help "you must specify a destination" 2873*5ddc57e5SXin Li fi 2874*5ddc57e5SXin Li fi 2875*5ddc57e5SXin Li 2876*5ddc57e5SXin Li # Strip any trailing slash from the destination. 2877*5ddc57e5SXin Li func_stripname '' '/' "$dest" 2878*5ddc57e5SXin Li dest=$func_stripname_result 2879*5ddc57e5SXin Li 2880*5ddc57e5SXin Li # Check to see that the destination is a directory. 2881*5ddc57e5SXin Li test -d "$dest" && isdir=yes 2882*5ddc57e5SXin Li if test "$isdir" = yes; then 2883*5ddc57e5SXin Li destdir="$dest" 2884*5ddc57e5SXin Li destname= 2885*5ddc57e5SXin Li else 2886*5ddc57e5SXin Li func_dirname_and_basename "$dest" "" "." 2887*5ddc57e5SXin Li destdir="$func_dirname_result" 2888*5ddc57e5SXin Li destname="$func_basename_result" 2889*5ddc57e5SXin Li 2890*5ddc57e5SXin Li # Not a directory, so check to see that there is only one file specified. 2891*5ddc57e5SXin Li set dummy $files; shift 2892*5ddc57e5SXin Li test "$#" -gt 1 && \ 2893*5ddc57e5SXin Li func_fatal_help "\`$dest' is not a directory" 2894*5ddc57e5SXin Li fi 2895*5ddc57e5SXin Li case $destdir in 2896*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]*) ;; 2897*5ddc57e5SXin Li *) 2898*5ddc57e5SXin Li for file in $files; do 2899*5ddc57e5SXin Li case $file in 2900*5ddc57e5SXin Li *.lo) ;; 2901*5ddc57e5SXin Li *) 2902*5ddc57e5SXin Li func_fatal_help "\`$destdir' must be an absolute directory name" 2903*5ddc57e5SXin Li ;; 2904*5ddc57e5SXin Li esac 2905*5ddc57e5SXin Li done 2906*5ddc57e5SXin Li ;; 2907*5ddc57e5SXin Li esac 2908*5ddc57e5SXin Li 2909*5ddc57e5SXin Li # This variable tells wrapper scripts just to set variables rather 2910*5ddc57e5SXin Li # than running their programs. 2911*5ddc57e5SXin Li libtool_install_magic="$magic" 2912*5ddc57e5SXin Li 2913*5ddc57e5SXin Li staticlibs= 2914*5ddc57e5SXin Li future_libdirs= 2915*5ddc57e5SXin Li current_libdirs= 2916*5ddc57e5SXin Li for file in $files; do 2917*5ddc57e5SXin Li 2918*5ddc57e5SXin Li # Do each installation. 2919*5ddc57e5SXin Li case $file in 2920*5ddc57e5SXin Li *.$libext) 2921*5ddc57e5SXin Li # Do the static libraries later. 2922*5ddc57e5SXin Li func_append staticlibs " $file" 2923*5ddc57e5SXin Li ;; 2924*5ddc57e5SXin Li 2925*5ddc57e5SXin Li *.la) 2926*5ddc57e5SXin Li func_resolve_sysroot "$file" 2927*5ddc57e5SXin Li file=$func_resolve_sysroot_result 2928*5ddc57e5SXin Li 2929*5ddc57e5SXin Li # Check to see that this really is a libtool archive. 2930*5ddc57e5SXin Li func_lalib_unsafe_p "$file" \ 2931*5ddc57e5SXin Li || func_fatal_help "\`$file' is not a valid libtool archive" 2932*5ddc57e5SXin Li 2933*5ddc57e5SXin Li library_names= 2934*5ddc57e5SXin Li old_library= 2935*5ddc57e5SXin Li relink_command= 2936*5ddc57e5SXin Li func_source "$file" 2937*5ddc57e5SXin Li 2938*5ddc57e5SXin Li # Add the libdir to current_libdirs if it is the destination. 2939*5ddc57e5SXin Li if test "X$destdir" = "X$libdir"; then 2940*5ddc57e5SXin Li case "$current_libdirs " in 2941*5ddc57e5SXin Li *" $libdir "*) ;; 2942*5ddc57e5SXin Li *) func_append current_libdirs " $libdir" ;; 2943*5ddc57e5SXin Li esac 2944*5ddc57e5SXin Li else 2945*5ddc57e5SXin Li # Note the libdir as a future libdir. 2946*5ddc57e5SXin Li case "$future_libdirs " in 2947*5ddc57e5SXin Li *" $libdir "*) ;; 2948*5ddc57e5SXin Li *) func_append future_libdirs " $libdir" ;; 2949*5ddc57e5SXin Li esac 2950*5ddc57e5SXin Li fi 2951*5ddc57e5SXin Li 2952*5ddc57e5SXin Li func_dirname "$file" "/" "" 2953*5ddc57e5SXin Li dir="$func_dirname_result" 2954*5ddc57e5SXin Li func_append dir "$objdir" 2955*5ddc57e5SXin Li 2956*5ddc57e5SXin Li if test -n "$relink_command"; then 2957*5ddc57e5SXin Li # Determine the prefix the user has applied to our future dir. 2958*5ddc57e5SXin Li inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959*5ddc57e5SXin Li 2960*5ddc57e5SXin Li # Don't allow the user to place us outside of our expected 2961*5ddc57e5SXin Li # location b/c this prevents finding dependent libraries that 2962*5ddc57e5SXin Li # are installed to the same prefix. 2963*5ddc57e5SXin Li # At present, this check doesn't affect windows .dll's that 2964*5ddc57e5SXin Li # are installed into $libdir/../bin (currently, that works fine) 2965*5ddc57e5SXin Li # but it's something to keep an eye on. 2966*5ddc57e5SXin Li test "$inst_prefix_dir" = "$destdir" && \ 2967*5ddc57e5SXin Li func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968*5ddc57e5SXin Li 2969*5ddc57e5SXin Li if test -n "$inst_prefix_dir"; then 2970*5ddc57e5SXin Li # Stick the inst_prefix_dir data into the link command. 2971*5ddc57e5SXin Li relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972*5ddc57e5SXin Li else 2973*5ddc57e5SXin Li relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974*5ddc57e5SXin Li fi 2975*5ddc57e5SXin Li 2976*5ddc57e5SXin Li func_warning "relinking \`$file'" 2977*5ddc57e5SXin Li func_show_eval "$relink_command" \ 2978*5ddc57e5SXin Li 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979*5ddc57e5SXin Li fi 2980*5ddc57e5SXin Li 2981*5ddc57e5SXin Li # See the names of the shared library. 2982*5ddc57e5SXin Li set dummy $library_names; shift 2983*5ddc57e5SXin Li if test -n "$1"; then 2984*5ddc57e5SXin Li realname="$1" 2985*5ddc57e5SXin Li shift 2986*5ddc57e5SXin Li 2987*5ddc57e5SXin Li srcname="$realname" 2988*5ddc57e5SXin Li test -n "$relink_command" && srcname="$realname"T 2989*5ddc57e5SXin Li 2990*5ddc57e5SXin Li # Install the shared library and build the symlinks. 2991*5ddc57e5SXin Li func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992*5ddc57e5SXin Li 'exit $?' 2993*5ddc57e5SXin Li tstripme="$stripme" 2994*5ddc57e5SXin Li case $host_os in 2995*5ddc57e5SXin Li cygwin* | mingw* | pw32* | cegcc*) 2996*5ddc57e5SXin Li case $realname in 2997*5ddc57e5SXin Li *.dll.a) 2998*5ddc57e5SXin Li tstripme="" 2999*5ddc57e5SXin Li ;; 3000*5ddc57e5SXin Li esac 3001*5ddc57e5SXin Li ;; 3002*5ddc57e5SXin Li esac 3003*5ddc57e5SXin Li if test -n "$tstripme" && test -n "$striplib"; then 3004*5ddc57e5SXin Li func_show_eval "$striplib $destdir/$realname" 'exit $?' 3005*5ddc57e5SXin Li fi 3006*5ddc57e5SXin Li 3007*5ddc57e5SXin Li if test "$#" -gt 0; then 3008*5ddc57e5SXin Li # Delete the old symlinks, and create new ones. 3009*5ddc57e5SXin Li # Try `ln -sf' first, because the `ln' binary might depend on 3010*5ddc57e5SXin Li # the symlink we replace! Solaris /bin/ln does not understand -f, 3011*5ddc57e5SXin Li # so we also need to try rm && ln -s. 3012*5ddc57e5SXin Li for linkname 3013*5ddc57e5SXin Li do 3014*5ddc57e5SXin Li test "$linkname" != "$realname" \ 3015*5ddc57e5SXin Li && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3016*5ddc57e5SXin Li done 3017*5ddc57e5SXin Li fi 3018*5ddc57e5SXin Li 3019*5ddc57e5SXin Li # Do each command in the postinstall commands. 3020*5ddc57e5SXin Li lib="$destdir/$realname" 3021*5ddc57e5SXin Li func_execute_cmds "$postinstall_cmds" 'exit $?' 3022*5ddc57e5SXin Li fi 3023*5ddc57e5SXin Li 3024*5ddc57e5SXin Li # Install the pseudo-library for information purposes. 3025*5ddc57e5SXin Li func_basename "$file" 3026*5ddc57e5SXin Li name="$func_basename_result" 3027*5ddc57e5SXin Li instname="$dir/$name"i 3028*5ddc57e5SXin Li func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3029*5ddc57e5SXin Li 3030*5ddc57e5SXin Li # Maybe install the static library, too. 3031*5ddc57e5SXin Li test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032*5ddc57e5SXin Li ;; 3033*5ddc57e5SXin Li 3034*5ddc57e5SXin Li *.lo) 3035*5ddc57e5SXin Li # Install (i.e. copy) a libtool object. 3036*5ddc57e5SXin Li 3037*5ddc57e5SXin Li # Figure out destination file name, if it wasn't already specified. 3038*5ddc57e5SXin Li if test -n "$destname"; then 3039*5ddc57e5SXin Li destfile="$destdir/$destname" 3040*5ddc57e5SXin Li else 3041*5ddc57e5SXin Li func_basename "$file" 3042*5ddc57e5SXin Li destfile="$func_basename_result" 3043*5ddc57e5SXin Li destfile="$destdir/$destfile" 3044*5ddc57e5SXin Li fi 3045*5ddc57e5SXin Li 3046*5ddc57e5SXin Li # Deduce the name of the destination old-style object file. 3047*5ddc57e5SXin Li case $destfile in 3048*5ddc57e5SXin Li *.lo) 3049*5ddc57e5SXin Li func_lo2o "$destfile" 3050*5ddc57e5SXin Li staticdest=$func_lo2o_result 3051*5ddc57e5SXin Li ;; 3052*5ddc57e5SXin Li *.$objext) 3053*5ddc57e5SXin Li staticdest="$destfile" 3054*5ddc57e5SXin Li destfile= 3055*5ddc57e5SXin Li ;; 3056*5ddc57e5SXin Li *) 3057*5ddc57e5SXin Li func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058*5ddc57e5SXin Li ;; 3059*5ddc57e5SXin Li esac 3060*5ddc57e5SXin Li 3061*5ddc57e5SXin Li # Install the libtool object if requested. 3062*5ddc57e5SXin Li test -n "$destfile" && \ 3063*5ddc57e5SXin Li func_show_eval "$install_prog $file $destfile" 'exit $?' 3064*5ddc57e5SXin Li 3065*5ddc57e5SXin Li # Install the old object if enabled. 3066*5ddc57e5SXin Li if test "$build_old_libs" = yes; then 3067*5ddc57e5SXin Li # Deduce the name of the old-style object file. 3068*5ddc57e5SXin Li func_lo2o "$file" 3069*5ddc57e5SXin Li staticobj=$func_lo2o_result 3070*5ddc57e5SXin Li func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3071*5ddc57e5SXin Li fi 3072*5ddc57e5SXin Li exit $EXIT_SUCCESS 3073*5ddc57e5SXin Li ;; 3074*5ddc57e5SXin Li 3075*5ddc57e5SXin Li *) 3076*5ddc57e5SXin Li # Figure out destination file name, if it wasn't already specified. 3077*5ddc57e5SXin Li if test -n "$destname"; then 3078*5ddc57e5SXin Li destfile="$destdir/$destname" 3079*5ddc57e5SXin Li else 3080*5ddc57e5SXin Li func_basename "$file" 3081*5ddc57e5SXin Li destfile="$func_basename_result" 3082*5ddc57e5SXin Li destfile="$destdir/$destfile" 3083*5ddc57e5SXin Li fi 3084*5ddc57e5SXin Li 3085*5ddc57e5SXin Li # If the file is missing, and there is a .exe on the end, strip it 3086*5ddc57e5SXin Li # because it is most likely a libtool script we actually want to 3087*5ddc57e5SXin Li # install 3088*5ddc57e5SXin Li stripped_ext="" 3089*5ddc57e5SXin Li case $file in 3090*5ddc57e5SXin Li *.exe) 3091*5ddc57e5SXin Li if test ! -f "$file"; then 3092*5ddc57e5SXin Li func_stripname '' '.exe' "$file" 3093*5ddc57e5SXin Li file=$func_stripname_result 3094*5ddc57e5SXin Li stripped_ext=".exe" 3095*5ddc57e5SXin Li fi 3096*5ddc57e5SXin Li ;; 3097*5ddc57e5SXin Li esac 3098*5ddc57e5SXin Li 3099*5ddc57e5SXin Li # Do a test to see if this is really a libtool program. 3100*5ddc57e5SXin Li case $host in 3101*5ddc57e5SXin Li *cygwin* | *mingw*) 3102*5ddc57e5SXin Li if func_ltwrapper_executable_p "$file"; then 3103*5ddc57e5SXin Li func_ltwrapper_scriptname "$file" 3104*5ddc57e5SXin Li wrapper=$func_ltwrapper_scriptname_result 3105*5ddc57e5SXin Li else 3106*5ddc57e5SXin Li func_stripname '' '.exe' "$file" 3107*5ddc57e5SXin Li wrapper=$func_stripname_result 3108*5ddc57e5SXin Li fi 3109*5ddc57e5SXin Li ;; 3110*5ddc57e5SXin Li *) 3111*5ddc57e5SXin Li wrapper=$file 3112*5ddc57e5SXin Li ;; 3113*5ddc57e5SXin Li esac 3114*5ddc57e5SXin Li if func_ltwrapper_script_p "$wrapper"; then 3115*5ddc57e5SXin Li notinst_deplibs= 3116*5ddc57e5SXin Li relink_command= 3117*5ddc57e5SXin Li 3118*5ddc57e5SXin Li func_source "$wrapper" 3119*5ddc57e5SXin Li 3120*5ddc57e5SXin Li # Check the variables that should have been set. 3121*5ddc57e5SXin Li test -z "$generated_by_libtool_version" && \ 3122*5ddc57e5SXin Li func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123*5ddc57e5SXin Li 3124*5ddc57e5SXin Li finalize=yes 3125*5ddc57e5SXin Li for lib in $notinst_deplibs; do 3126*5ddc57e5SXin Li # Check to see that each library is installed. 3127*5ddc57e5SXin Li libdir= 3128*5ddc57e5SXin Li if test -f "$lib"; then 3129*5ddc57e5SXin Li func_source "$lib" 3130*5ddc57e5SXin Li fi 3131*5ddc57e5SXin Li libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132*5ddc57e5SXin Li if test -n "$libdir" && test ! -f "$libfile"; then 3133*5ddc57e5SXin Li func_warning "\`$lib' has not been installed in \`$libdir'" 3134*5ddc57e5SXin Li finalize=no 3135*5ddc57e5SXin Li fi 3136*5ddc57e5SXin Li done 3137*5ddc57e5SXin Li 3138*5ddc57e5SXin Li relink_command= 3139*5ddc57e5SXin Li func_source "$wrapper" 3140*5ddc57e5SXin Li 3141*5ddc57e5SXin Li outputname= 3142*5ddc57e5SXin Li if test "$fast_install" = no && test -n "$relink_command"; then 3143*5ddc57e5SXin Li $opt_dry_run || { 3144*5ddc57e5SXin Li if test "$finalize" = yes; then 3145*5ddc57e5SXin Li tmpdir=`func_mktempdir` 3146*5ddc57e5SXin Li func_basename "$file$stripped_ext" 3147*5ddc57e5SXin Li file="$func_basename_result" 3148*5ddc57e5SXin Li outputname="$tmpdir/$file" 3149*5ddc57e5SXin Li # Replace the output file specification. 3150*5ddc57e5SXin Li relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151*5ddc57e5SXin Li 3152*5ddc57e5SXin Li $opt_silent || { 3153*5ddc57e5SXin Li func_quote_for_expand "$relink_command" 3154*5ddc57e5SXin Li eval "func_echo $func_quote_for_expand_result" 3155*5ddc57e5SXin Li } 3156*5ddc57e5SXin Li if eval "$relink_command"; then : 3157*5ddc57e5SXin Li else 3158*5ddc57e5SXin Li func_error "error: relink \`$file' with the above command before installing it" 3159*5ddc57e5SXin Li $opt_dry_run || ${RM}r "$tmpdir" 3160*5ddc57e5SXin Li continue 3161*5ddc57e5SXin Li fi 3162*5ddc57e5SXin Li file="$outputname" 3163*5ddc57e5SXin Li else 3164*5ddc57e5SXin Li func_warning "cannot relink \`$file'" 3165*5ddc57e5SXin Li fi 3166*5ddc57e5SXin Li } 3167*5ddc57e5SXin Li else 3168*5ddc57e5SXin Li # Install the binary that we compiled earlier. 3169*5ddc57e5SXin Li file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3170*5ddc57e5SXin Li fi 3171*5ddc57e5SXin Li fi 3172*5ddc57e5SXin Li 3173*5ddc57e5SXin Li # remove .exe since cygwin /usr/bin/install will append another 3174*5ddc57e5SXin Li # one anyway 3175*5ddc57e5SXin Li case $install_prog,$host in 3176*5ddc57e5SXin Li */usr/bin/install*,*cygwin*) 3177*5ddc57e5SXin Li case $file:$destfile in 3178*5ddc57e5SXin Li *.exe:*.exe) 3179*5ddc57e5SXin Li # this is ok 3180*5ddc57e5SXin Li ;; 3181*5ddc57e5SXin Li *.exe:*) 3182*5ddc57e5SXin Li destfile=$destfile.exe 3183*5ddc57e5SXin Li ;; 3184*5ddc57e5SXin Li *:*.exe) 3185*5ddc57e5SXin Li func_stripname '' '.exe' "$destfile" 3186*5ddc57e5SXin Li destfile=$func_stripname_result 3187*5ddc57e5SXin Li ;; 3188*5ddc57e5SXin Li esac 3189*5ddc57e5SXin Li ;; 3190*5ddc57e5SXin Li esac 3191*5ddc57e5SXin Li func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192*5ddc57e5SXin Li $opt_dry_run || if test -n "$outputname"; then 3193*5ddc57e5SXin Li ${RM}r "$tmpdir" 3194*5ddc57e5SXin Li fi 3195*5ddc57e5SXin Li ;; 3196*5ddc57e5SXin Li esac 3197*5ddc57e5SXin Li done 3198*5ddc57e5SXin Li 3199*5ddc57e5SXin Li for file in $staticlibs; do 3200*5ddc57e5SXin Li func_basename "$file" 3201*5ddc57e5SXin Li name="$func_basename_result" 3202*5ddc57e5SXin Li 3203*5ddc57e5SXin Li # Set up the ranlib parameters. 3204*5ddc57e5SXin Li oldlib="$destdir/$name" 3205*5ddc57e5SXin Li func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 3206*5ddc57e5SXin Li tool_oldlib=$func_to_tool_file_result 3207*5ddc57e5SXin Li 3208*5ddc57e5SXin Li func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209*5ddc57e5SXin Li 3210*5ddc57e5SXin Li if test -n "$stripme" && test -n "$old_striplib"; then 3211*5ddc57e5SXin Li func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212*5ddc57e5SXin Li fi 3213*5ddc57e5SXin Li 3214*5ddc57e5SXin Li # Do each command in the postinstall commands. 3215*5ddc57e5SXin Li func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216*5ddc57e5SXin Li done 3217*5ddc57e5SXin Li 3218*5ddc57e5SXin Li test -n "$future_libdirs" && \ 3219*5ddc57e5SXin Li func_warning "remember to run \`$progname --finish$future_libdirs'" 3220*5ddc57e5SXin Li 3221*5ddc57e5SXin Li if test -n "$current_libdirs"; then 3222*5ddc57e5SXin Li # Maybe just do a dry run. 3223*5ddc57e5SXin Li $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224*5ddc57e5SXin Li exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225*5ddc57e5SXin Li else 3226*5ddc57e5SXin Li exit $EXIT_SUCCESS 3227*5ddc57e5SXin Li fi 3228*5ddc57e5SXin Li} 3229*5ddc57e5SXin Li 3230*5ddc57e5SXin Litest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231*5ddc57e5SXin Li 3232*5ddc57e5SXin Li 3233*5ddc57e5SXin Li# func_generate_dlsyms outputname originator pic_p 3234*5ddc57e5SXin Li# Extract symbols from dlprefiles and create ${outputname}S.o with 3235*5ddc57e5SXin Li# a dlpreopen symbol table. 3236*5ddc57e5SXin Lifunc_generate_dlsyms () 3237*5ddc57e5SXin Li{ 3238*5ddc57e5SXin Li $opt_debug 3239*5ddc57e5SXin Li my_outputname="$1" 3240*5ddc57e5SXin Li my_originator="$2" 3241*5ddc57e5SXin Li my_pic_p="${3-no}" 3242*5ddc57e5SXin Li my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243*5ddc57e5SXin Li my_dlsyms= 3244*5ddc57e5SXin Li 3245*5ddc57e5SXin Li if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246*5ddc57e5SXin Li if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247*5ddc57e5SXin Li my_dlsyms="${my_outputname}S.c" 3248*5ddc57e5SXin Li else 3249*5ddc57e5SXin Li func_error "not configured to extract global symbols from dlpreopened files" 3250*5ddc57e5SXin Li fi 3251*5ddc57e5SXin Li fi 3252*5ddc57e5SXin Li 3253*5ddc57e5SXin Li if test -n "$my_dlsyms"; then 3254*5ddc57e5SXin Li case $my_dlsyms in 3255*5ddc57e5SXin Li "") ;; 3256*5ddc57e5SXin Li *.c) 3257*5ddc57e5SXin Li # Discover the nlist of each of the dlfiles. 3258*5ddc57e5SXin Li nlist="$output_objdir/${my_outputname}.nm" 3259*5ddc57e5SXin Li 3260*5ddc57e5SXin Li func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261*5ddc57e5SXin Li 3262*5ddc57e5SXin Li # Parse the name list into a source file. 3263*5ddc57e5SXin Li func_verbose "creating $output_objdir/$my_dlsyms" 3264*5ddc57e5SXin Li 3265*5ddc57e5SXin Li $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266*5ddc57e5SXin Li/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267*5ddc57e5SXin Li/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268*5ddc57e5SXin Li 3269*5ddc57e5SXin Li#ifdef __cplusplus 3270*5ddc57e5SXin Liextern \"C\" { 3271*5ddc57e5SXin Li#endif 3272*5ddc57e5SXin Li 3273*5ddc57e5SXin Li#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 3274*5ddc57e5SXin Li#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 3275*5ddc57e5SXin Li#endif 3276*5ddc57e5SXin Li 3277*5ddc57e5SXin Li/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 3278*5ddc57e5SXin Li#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 3279*5ddc57e5SXin Li/* DATA imports from DLLs on WIN32 con't be const, because runtime 3280*5ddc57e5SXin Li relocations are performed -- see ld's documentation on pseudo-relocs. */ 3281*5ddc57e5SXin Li# define LT_DLSYM_CONST 3282*5ddc57e5SXin Li#elif defined(__osf__) 3283*5ddc57e5SXin Li/* This system does not cope well with relocations in const data. */ 3284*5ddc57e5SXin Li# define LT_DLSYM_CONST 3285*5ddc57e5SXin Li#else 3286*5ddc57e5SXin Li# define LT_DLSYM_CONST const 3287*5ddc57e5SXin Li#endif 3288*5ddc57e5SXin Li 3289*5ddc57e5SXin Li/* External symbol declarations for the compiler. */\ 3290*5ddc57e5SXin Li" 3291*5ddc57e5SXin Li 3292*5ddc57e5SXin Li if test "$dlself" = yes; then 3293*5ddc57e5SXin Li func_verbose "generating symbol list for \`$output'" 3294*5ddc57e5SXin Li 3295*5ddc57e5SXin Li $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296*5ddc57e5SXin Li 3297*5ddc57e5SXin Li # Add our own program objects to the symbol list. 3298*5ddc57e5SXin Li progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299*5ddc57e5SXin Li for progfile in $progfiles; do 3300*5ddc57e5SXin Li func_to_tool_file "$progfile" func_convert_file_msys_to_w32 3301*5ddc57e5SXin Li func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 3302*5ddc57e5SXin Li $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303*5ddc57e5SXin Li done 3304*5ddc57e5SXin Li 3305*5ddc57e5SXin Li if test -n "$exclude_expsyms"; then 3306*5ddc57e5SXin Li $opt_dry_run || { 3307*5ddc57e5SXin Li eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308*5ddc57e5SXin Li eval '$MV "$nlist"T "$nlist"' 3309*5ddc57e5SXin Li } 3310*5ddc57e5SXin Li fi 3311*5ddc57e5SXin Li 3312*5ddc57e5SXin Li if test -n "$export_symbols_regex"; then 3313*5ddc57e5SXin Li $opt_dry_run || { 3314*5ddc57e5SXin Li eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315*5ddc57e5SXin Li eval '$MV "$nlist"T "$nlist"' 3316*5ddc57e5SXin Li } 3317*5ddc57e5SXin Li fi 3318*5ddc57e5SXin Li 3319*5ddc57e5SXin Li # Prepare the list of exported symbols 3320*5ddc57e5SXin Li if test -z "$export_symbols"; then 3321*5ddc57e5SXin Li export_symbols="$output_objdir/$outputname.exp" 3322*5ddc57e5SXin Li $opt_dry_run || { 3323*5ddc57e5SXin Li $RM $export_symbols 3324*5ddc57e5SXin Li eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325*5ddc57e5SXin Li case $host in 3326*5ddc57e5SXin Li *cygwin* | *mingw* | *cegcc* ) 3327*5ddc57e5SXin Li eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328*5ddc57e5SXin Li eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329*5ddc57e5SXin Li ;; 3330*5ddc57e5SXin Li esac 3331*5ddc57e5SXin Li } 3332*5ddc57e5SXin Li else 3333*5ddc57e5SXin Li $opt_dry_run || { 3334*5ddc57e5SXin Li eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335*5ddc57e5SXin Li eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336*5ddc57e5SXin Li eval '$MV "$nlist"T "$nlist"' 3337*5ddc57e5SXin Li case $host in 3338*5ddc57e5SXin Li *cygwin* | *mingw* | *cegcc* ) 3339*5ddc57e5SXin Li eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340*5ddc57e5SXin Li eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341*5ddc57e5SXin Li ;; 3342*5ddc57e5SXin Li esac 3343*5ddc57e5SXin Li } 3344*5ddc57e5SXin Li fi 3345*5ddc57e5SXin Li fi 3346*5ddc57e5SXin Li 3347*5ddc57e5SXin Li for dlprefile in $dlprefiles; do 3348*5ddc57e5SXin Li func_verbose "extracting global C symbols from \`$dlprefile'" 3349*5ddc57e5SXin Li func_basename "$dlprefile" 3350*5ddc57e5SXin Li name="$func_basename_result" 3351*5ddc57e5SXin Li case $host in 3352*5ddc57e5SXin Li *cygwin* | *mingw* | *cegcc* ) 3353*5ddc57e5SXin Li # if an import library, we need to obtain dlname 3354*5ddc57e5SXin Li if func_win32_import_lib_p "$dlprefile"; then 3355*5ddc57e5SXin Li func_tr_sh "$dlprefile" 3356*5ddc57e5SXin Li eval "curr_lafile=\$libfile_$func_tr_sh_result" 3357*5ddc57e5SXin Li dlprefile_dlbasename="" 3358*5ddc57e5SXin Li if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 3359*5ddc57e5SXin Li # Use subshell, to avoid clobbering current variable values 3360*5ddc57e5SXin Li dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 3361*5ddc57e5SXin Li if test -n "$dlprefile_dlname" ; then 3362*5ddc57e5SXin Li func_basename "$dlprefile_dlname" 3363*5ddc57e5SXin Li dlprefile_dlbasename="$func_basename_result" 3364*5ddc57e5SXin Li else 3365*5ddc57e5SXin Li # no lafile. user explicitly requested -dlpreopen <import library>. 3366*5ddc57e5SXin Li $sharedlib_from_linklib_cmd "$dlprefile" 3367*5ddc57e5SXin Li dlprefile_dlbasename=$sharedlib_from_linklib_result 3368*5ddc57e5SXin Li fi 3369*5ddc57e5SXin Li fi 3370*5ddc57e5SXin Li $opt_dry_run || { 3371*5ddc57e5SXin Li if test -n "$dlprefile_dlbasename" ; then 3372*5ddc57e5SXin Li eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 3373*5ddc57e5SXin Li else 3374*5ddc57e5SXin Li func_warning "Could not compute DLL name from $name" 3375*5ddc57e5SXin Li eval '$ECHO ": $name " >> "$nlist"' 3376*5ddc57e5SXin Li fi 3377*5ddc57e5SXin Li func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3378*5ddc57e5SXin Li eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 3379*5ddc57e5SXin Li $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 3380*5ddc57e5SXin Li } 3381*5ddc57e5SXin Li else # not an import lib 3382*5ddc57e5SXin Li $opt_dry_run || { 3383*5ddc57e5SXin Li eval '$ECHO ": $name " >> "$nlist"' 3384*5ddc57e5SXin Li func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3385*5ddc57e5SXin Li eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3386*5ddc57e5SXin Li } 3387*5ddc57e5SXin Li fi 3388*5ddc57e5SXin Li ;; 3389*5ddc57e5SXin Li *) 3390*5ddc57e5SXin Li $opt_dry_run || { 3391*5ddc57e5SXin Li eval '$ECHO ": $name " >> "$nlist"' 3392*5ddc57e5SXin Li func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3393*5ddc57e5SXin Li eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3394*5ddc57e5SXin Li } 3395*5ddc57e5SXin Li ;; 3396*5ddc57e5SXin Li esac 3397*5ddc57e5SXin Li done 3398*5ddc57e5SXin Li 3399*5ddc57e5SXin Li $opt_dry_run || { 3400*5ddc57e5SXin Li # Make sure we have at least an empty file. 3401*5ddc57e5SXin Li test -f "$nlist" || : > "$nlist" 3402*5ddc57e5SXin Li 3403*5ddc57e5SXin Li if test -n "$exclude_expsyms"; then 3404*5ddc57e5SXin Li $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405*5ddc57e5SXin Li $MV "$nlist"T "$nlist" 3406*5ddc57e5SXin Li fi 3407*5ddc57e5SXin Li 3408*5ddc57e5SXin Li # Try sorting and uniquifying the output. 3409*5ddc57e5SXin Li if $GREP -v "^: " < "$nlist" | 3410*5ddc57e5SXin Li if sort -k 3 </dev/null >/dev/null 2>&1; then 3411*5ddc57e5SXin Li sort -k 3 3412*5ddc57e5SXin Li else 3413*5ddc57e5SXin Li sort +2 3414*5ddc57e5SXin Li fi | 3415*5ddc57e5SXin Li uniq > "$nlist"S; then 3416*5ddc57e5SXin Li : 3417*5ddc57e5SXin Li else 3418*5ddc57e5SXin Li $GREP -v "^: " < "$nlist" > "$nlist"S 3419*5ddc57e5SXin Li fi 3420*5ddc57e5SXin Li 3421*5ddc57e5SXin Li if test -f "$nlist"S; then 3422*5ddc57e5SXin Li eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423*5ddc57e5SXin Li else 3424*5ddc57e5SXin Li echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425*5ddc57e5SXin Li fi 3426*5ddc57e5SXin Li 3427*5ddc57e5SXin Li echo >> "$output_objdir/$my_dlsyms" "\ 3428*5ddc57e5SXin Li 3429*5ddc57e5SXin Li/* The mapping between symbol names and symbols. */ 3430*5ddc57e5SXin Litypedef struct { 3431*5ddc57e5SXin Li const char *name; 3432*5ddc57e5SXin Li void *address; 3433*5ddc57e5SXin Li} lt_dlsymlist; 3434*5ddc57e5SXin Liextern LT_DLSYM_CONST lt_dlsymlist 3435*5ddc57e5SXin Lilt_${my_prefix}_LTX_preloaded_symbols[]; 3436*5ddc57e5SXin LiLT_DLSYM_CONST lt_dlsymlist 3437*5ddc57e5SXin Lilt_${my_prefix}_LTX_preloaded_symbols[] = 3438*5ddc57e5SXin Li{\ 3439*5ddc57e5SXin Li { \"$my_originator\", (void *) 0 }," 3440*5ddc57e5SXin Li 3441*5ddc57e5SXin Li case $need_lib_prefix in 3442*5ddc57e5SXin Li no) 3443*5ddc57e5SXin Li eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444*5ddc57e5SXin Li ;; 3445*5ddc57e5SXin Li *) 3446*5ddc57e5SXin Li eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447*5ddc57e5SXin Li ;; 3448*5ddc57e5SXin Li esac 3449*5ddc57e5SXin Li echo >> "$output_objdir/$my_dlsyms" "\ 3450*5ddc57e5SXin Li {0, (void *) 0} 3451*5ddc57e5SXin Li}; 3452*5ddc57e5SXin Li 3453*5ddc57e5SXin Li/* This works around a problem in FreeBSD linker */ 3454*5ddc57e5SXin Li#ifdef FREEBSD_WORKAROUND 3455*5ddc57e5SXin Listatic const void *lt_preloaded_setup() { 3456*5ddc57e5SXin Li return lt_${my_prefix}_LTX_preloaded_symbols; 3457*5ddc57e5SXin Li} 3458*5ddc57e5SXin Li#endif 3459*5ddc57e5SXin Li 3460*5ddc57e5SXin Li#ifdef __cplusplus 3461*5ddc57e5SXin Li} 3462*5ddc57e5SXin Li#endif\ 3463*5ddc57e5SXin Li" 3464*5ddc57e5SXin Li } # !$opt_dry_run 3465*5ddc57e5SXin Li 3466*5ddc57e5SXin Li pic_flag_for_symtable= 3467*5ddc57e5SXin Li case "$compile_command " in 3468*5ddc57e5SXin Li *" -static "*) ;; 3469*5ddc57e5SXin Li *) 3470*5ddc57e5SXin Li case $host in 3471*5ddc57e5SXin Li # compiling the symbol table file with pic_flag works around 3472*5ddc57e5SXin Li # a FreeBSD bug that causes programs to crash when -lm is 3473*5ddc57e5SXin Li # linked before any other PIC object. But we must not use 3474*5ddc57e5SXin Li # pic_flag when linking with -static. The problem exists in 3475*5ddc57e5SXin Li # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3476*5ddc57e5SXin Li *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477*5ddc57e5SXin Li pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478*5ddc57e5SXin Li *-*-hpux*) 3479*5ddc57e5SXin Li pic_flag_for_symtable=" $pic_flag" ;; 3480*5ddc57e5SXin Li *) 3481*5ddc57e5SXin Li if test "X$my_pic_p" != Xno; then 3482*5ddc57e5SXin Li pic_flag_for_symtable=" $pic_flag" 3483*5ddc57e5SXin Li fi 3484*5ddc57e5SXin Li ;; 3485*5ddc57e5SXin Li esac 3486*5ddc57e5SXin Li ;; 3487*5ddc57e5SXin Li esac 3488*5ddc57e5SXin Li symtab_cflags= 3489*5ddc57e5SXin Li for arg in $LTCFLAGS; do 3490*5ddc57e5SXin Li case $arg in 3491*5ddc57e5SXin Li -pie | -fpie | -fPIE) ;; 3492*5ddc57e5SXin Li *) func_append symtab_cflags " $arg" ;; 3493*5ddc57e5SXin Li esac 3494*5ddc57e5SXin Li done 3495*5ddc57e5SXin Li 3496*5ddc57e5SXin Li # Now compile the dynamic symbol file. 3497*5ddc57e5SXin Li func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498*5ddc57e5SXin Li 3499*5ddc57e5SXin Li # Clean up the generated files. 3500*5ddc57e5SXin Li func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501*5ddc57e5SXin Li 3502*5ddc57e5SXin Li # Transform the symbol file into the correct name. 3503*5ddc57e5SXin Li symfileobj="$output_objdir/${my_outputname}S.$objext" 3504*5ddc57e5SXin Li case $host in 3505*5ddc57e5SXin Li *cygwin* | *mingw* | *cegcc* ) 3506*5ddc57e5SXin Li if test -f "$output_objdir/$my_outputname.def"; then 3507*5ddc57e5SXin Li compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3508*5ddc57e5SXin Li finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509*5ddc57e5SXin Li else 3510*5ddc57e5SXin Li compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3511*5ddc57e5SXin Li finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512*5ddc57e5SXin Li fi 3513*5ddc57e5SXin Li ;; 3514*5ddc57e5SXin Li *) 3515*5ddc57e5SXin Li compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3516*5ddc57e5SXin Li finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517*5ddc57e5SXin Li ;; 3518*5ddc57e5SXin Li esac 3519*5ddc57e5SXin Li ;; 3520*5ddc57e5SXin Li *) 3521*5ddc57e5SXin Li func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522*5ddc57e5SXin Li ;; 3523*5ddc57e5SXin Li esac 3524*5ddc57e5SXin Li else 3525*5ddc57e5SXin Li # We keep going just in case the user didn't refer to 3526*5ddc57e5SXin Li # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527*5ddc57e5SXin Li # really was required. 3528*5ddc57e5SXin Li 3529*5ddc57e5SXin Li # Nullify the symbol file. 3530*5ddc57e5SXin Li compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 3531*5ddc57e5SXin Li finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532*5ddc57e5SXin Li fi 3533*5ddc57e5SXin Li} 3534*5ddc57e5SXin Li 3535*5ddc57e5SXin Li# func_win32_libid arg 3536*5ddc57e5SXin Li# return the library type of file 'arg' 3537*5ddc57e5SXin Li# 3538*5ddc57e5SXin Li# Need a lot of goo to handle *both* DLLs and import libs 3539*5ddc57e5SXin Li# Has to be a shell function in order to 'eat' the argument 3540*5ddc57e5SXin Li# that is supplied when $file_magic_command is called. 3541*5ddc57e5SXin Li# Despite the name, also deal with 64 bit binaries. 3542*5ddc57e5SXin Lifunc_win32_libid () 3543*5ddc57e5SXin Li{ 3544*5ddc57e5SXin Li $opt_debug 3545*5ddc57e5SXin Li win32_libid_type="unknown" 3546*5ddc57e5SXin Li win32_fileres=`file -L $1 2>/dev/null` 3547*5ddc57e5SXin Li case $win32_fileres in 3548*5ddc57e5SXin Li *ar\ archive\ import\ library*) # definitely import 3549*5ddc57e5SXin Li win32_libid_type="x86 archive import" 3550*5ddc57e5SXin Li ;; 3551*5ddc57e5SXin Li *ar\ archive*) # could be an import, or static 3552*5ddc57e5SXin Li # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553*5ddc57e5SXin Li if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 3554*5ddc57e5SXin Li $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 3555*5ddc57e5SXin Li func_to_tool_file "$1" func_convert_file_msys_to_w32 3556*5ddc57e5SXin Li win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557*5ddc57e5SXin Li $SED -n -e ' 3558*5ddc57e5SXin Li 1,100{ 3559*5ddc57e5SXin Li / I /{ 3560*5ddc57e5SXin Li s,.*,import, 3561*5ddc57e5SXin Li p 3562*5ddc57e5SXin Li q 3563*5ddc57e5SXin Li } 3564*5ddc57e5SXin Li }'` 3565*5ddc57e5SXin Li case $win32_nmres in 3566*5ddc57e5SXin Li import*) win32_libid_type="x86 archive import";; 3567*5ddc57e5SXin Li *) win32_libid_type="x86 archive static";; 3568*5ddc57e5SXin Li esac 3569*5ddc57e5SXin Li fi 3570*5ddc57e5SXin Li ;; 3571*5ddc57e5SXin Li *DLL*) 3572*5ddc57e5SXin Li win32_libid_type="x86 DLL" 3573*5ddc57e5SXin Li ;; 3574*5ddc57e5SXin Li *executable*) # but shell scripts are "executable" too... 3575*5ddc57e5SXin Li case $win32_fileres in 3576*5ddc57e5SXin Li *MS\ Windows\ PE\ Intel*) 3577*5ddc57e5SXin Li win32_libid_type="x86 DLL" 3578*5ddc57e5SXin Li ;; 3579*5ddc57e5SXin Li esac 3580*5ddc57e5SXin Li ;; 3581*5ddc57e5SXin Li esac 3582*5ddc57e5SXin Li $ECHO "$win32_libid_type" 3583*5ddc57e5SXin Li} 3584*5ddc57e5SXin Li 3585*5ddc57e5SXin Li# func_cygming_dll_for_implib ARG 3586*5ddc57e5SXin Li# 3587*5ddc57e5SXin Li# Platform-specific function to extract the 3588*5ddc57e5SXin Li# name of the DLL associated with the specified 3589*5ddc57e5SXin Li# import library ARG. 3590*5ddc57e5SXin Li# Invoked by eval'ing the libtool variable 3591*5ddc57e5SXin Li# $sharedlib_from_linklib_cmd 3592*5ddc57e5SXin Li# Result is available in the variable 3593*5ddc57e5SXin Li# $sharedlib_from_linklib_result 3594*5ddc57e5SXin Lifunc_cygming_dll_for_implib () 3595*5ddc57e5SXin Li{ 3596*5ddc57e5SXin Li $opt_debug 3597*5ddc57e5SXin Li sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 3598*5ddc57e5SXin Li} 3599*5ddc57e5SXin Li 3600*5ddc57e5SXin Li# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 3601*5ddc57e5SXin Li# 3602*5ddc57e5SXin Li# The is the core of a fallback implementation of a 3603*5ddc57e5SXin Li# platform-specific function to extract the name of the 3604*5ddc57e5SXin Li# DLL associated with the specified import library LIBNAME. 3605*5ddc57e5SXin Li# 3606*5ddc57e5SXin Li# SECTION_NAME is either .idata$6 or .idata$7, depending 3607*5ddc57e5SXin Li# on the platform and compiler that created the implib. 3608*5ddc57e5SXin Li# 3609*5ddc57e5SXin Li# Echos the name of the DLL associated with the 3610*5ddc57e5SXin Li# specified import library. 3611*5ddc57e5SXin Lifunc_cygming_dll_for_implib_fallback_core () 3612*5ddc57e5SXin Li{ 3613*5ddc57e5SXin Li $opt_debug 3614*5ddc57e5SXin Li match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 3615*5ddc57e5SXin Li $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 3616*5ddc57e5SXin Li $SED '/^Contents of section '"$match_literal"':/{ 3617*5ddc57e5SXin Li # Place marker at beginning of archive member dllname section 3618*5ddc57e5SXin Li s/.*/====MARK====/ 3619*5ddc57e5SXin Li p 3620*5ddc57e5SXin Li d 3621*5ddc57e5SXin Li } 3622*5ddc57e5SXin Li # These lines can sometimes be longer than 43 characters, but 3623*5ddc57e5SXin Li # are always uninteresting 3624*5ddc57e5SXin Li /:[ ]*file format pe[i]\{,1\}-/d 3625*5ddc57e5SXin Li /^In archive [^:]*:/d 3626*5ddc57e5SXin Li # Ensure marker is printed 3627*5ddc57e5SXin Li /^====MARK====/p 3628*5ddc57e5SXin Li # Remove all lines with less than 43 characters 3629*5ddc57e5SXin Li /^.\{43\}/!d 3630*5ddc57e5SXin Li # From remaining lines, remove first 43 characters 3631*5ddc57e5SXin Li s/^.\{43\}//' | 3632*5ddc57e5SXin Li $SED -n ' 3633*5ddc57e5SXin Li # Join marker and all lines until next marker into a single line 3634*5ddc57e5SXin Li /^====MARK====/ b para 3635*5ddc57e5SXin Li H 3636*5ddc57e5SXin Li $ b para 3637*5ddc57e5SXin Li b 3638*5ddc57e5SXin Li :para 3639*5ddc57e5SXin Li x 3640*5ddc57e5SXin Li s/\n//g 3641*5ddc57e5SXin Li # Remove the marker 3642*5ddc57e5SXin Li s/^====MARK====// 3643*5ddc57e5SXin Li # Remove trailing dots and whitespace 3644*5ddc57e5SXin Li s/[\. \t]*$// 3645*5ddc57e5SXin Li # Print 3646*5ddc57e5SXin Li /./p' | 3647*5ddc57e5SXin Li # we now have a list, one entry per line, of the stringified 3648*5ddc57e5SXin Li # contents of the appropriate section of all members of the 3649*5ddc57e5SXin Li # archive which possess that section. Heuristic: eliminate 3650*5ddc57e5SXin Li # all those which have a first or second character that is 3651*5ddc57e5SXin Li # a '.' (that is, objdump's representation of an unprintable 3652*5ddc57e5SXin Li # character.) This should work for all archives with less than 3653*5ddc57e5SXin Li # 0x302f exports -- but will fail for DLLs whose name actually 3654*5ddc57e5SXin Li # begins with a literal '.' or a single character followed by 3655*5ddc57e5SXin Li # a '.'. 3656*5ddc57e5SXin Li # 3657*5ddc57e5SXin Li # Of those that remain, print the first one. 3658*5ddc57e5SXin Li $SED -e '/^\./d;/^.\./d;q' 3659*5ddc57e5SXin Li} 3660*5ddc57e5SXin Li 3661*5ddc57e5SXin Li# func_cygming_gnu_implib_p ARG 3662*5ddc57e5SXin Li# This predicate returns with zero status (TRUE) if 3663*5ddc57e5SXin Li# ARG is a GNU/binutils-style import library. Returns 3664*5ddc57e5SXin Li# with nonzero status (FALSE) otherwise. 3665*5ddc57e5SXin Lifunc_cygming_gnu_implib_p () 3666*5ddc57e5SXin Li{ 3667*5ddc57e5SXin Li $opt_debug 3668*5ddc57e5SXin Li func_to_tool_file "$1" func_convert_file_msys_to_w32 3669*5ddc57e5SXin Li 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*5ddc57e5SXin Li test -n "$func_cygming_gnu_implib_tmp" 3671*5ddc57e5SXin Li} 3672*5ddc57e5SXin Li 3673*5ddc57e5SXin Li# func_cygming_ms_implib_p ARG 3674*5ddc57e5SXin Li# This predicate returns with zero status (TRUE) if 3675*5ddc57e5SXin Li# ARG is an MS-style import library. Returns 3676*5ddc57e5SXin Li# with nonzero status (FALSE) otherwise. 3677*5ddc57e5SXin Lifunc_cygming_ms_implib_p () 3678*5ddc57e5SXin Li{ 3679*5ddc57e5SXin Li $opt_debug 3680*5ddc57e5SXin Li func_to_tool_file "$1" func_convert_file_msys_to_w32 3681*5ddc57e5SXin Li func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 3682*5ddc57e5SXin Li test -n "$func_cygming_ms_implib_tmp" 3683*5ddc57e5SXin Li} 3684*5ddc57e5SXin Li 3685*5ddc57e5SXin Li# func_cygming_dll_for_implib_fallback ARG 3686*5ddc57e5SXin Li# Platform-specific function to extract the 3687*5ddc57e5SXin Li# name of the DLL associated with the specified 3688*5ddc57e5SXin Li# import library ARG. 3689*5ddc57e5SXin Li# 3690*5ddc57e5SXin Li# This fallback implementation is for use when $DLLTOOL 3691*5ddc57e5SXin Li# does not support the --identify-strict option. 3692*5ddc57e5SXin Li# Invoked by eval'ing the libtool variable 3693*5ddc57e5SXin Li# $sharedlib_from_linklib_cmd 3694*5ddc57e5SXin Li# Result is available in the variable 3695*5ddc57e5SXin Li# $sharedlib_from_linklib_result 3696*5ddc57e5SXin Lifunc_cygming_dll_for_implib_fallback () 3697*5ddc57e5SXin Li{ 3698*5ddc57e5SXin Li $opt_debug 3699*5ddc57e5SXin Li if func_cygming_gnu_implib_p "$1" ; then 3700*5ddc57e5SXin Li # binutils import library 3701*5ddc57e5SXin Li sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 3702*5ddc57e5SXin Li elif func_cygming_ms_implib_p "$1" ; then 3703*5ddc57e5SXin Li # ms-generated import library 3704*5ddc57e5SXin Li sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 3705*5ddc57e5SXin Li else 3706*5ddc57e5SXin Li # unknown 3707*5ddc57e5SXin Li sharedlib_from_linklib_result="" 3708*5ddc57e5SXin Li fi 3709*5ddc57e5SXin Li} 3710*5ddc57e5SXin Li 3711*5ddc57e5SXin Li 3712*5ddc57e5SXin Li# func_extract_an_archive dir oldlib 3713*5ddc57e5SXin Lifunc_extract_an_archive () 3714*5ddc57e5SXin Li{ 3715*5ddc57e5SXin Li $opt_debug 3716*5ddc57e5SXin Li f_ex_an_ar_dir="$1"; shift 3717*5ddc57e5SXin Li f_ex_an_ar_oldlib="$1" 3718*5ddc57e5SXin Li if test "$lock_old_archive_extraction" = yes; then 3719*5ddc57e5SXin Li lockfile=$f_ex_an_ar_oldlib.lock 3720*5ddc57e5SXin Li until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3721*5ddc57e5SXin Li func_echo "Waiting for $lockfile to be removed" 3722*5ddc57e5SXin Li sleep 2 3723*5ddc57e5SXin Li done 3724*5ddc57e5SXin Li fi 3725*5ddc57e5SXin Li func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 3726*5ddc57e5SXin Li 'stat=$?; rm -f "$lockfile"; exit $stat' 3727*5ddc57e5SXin Li if test "$lock_old_archive_extraction" = yes; then 3728*5ddc57e5SXin Li $opt_dry_run || rm -f "$lockfile" 3729*5ddc57e5SXin Li fi 3730*5ddc57e5SXin Li if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731*5ddc57e5SXin Li : 3732*5ddc57e5SXin Li else 3733*5ddc57e5SXin Li func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734*5ddc57e5SXin Li fi 3735*5ddc57e5SXin Li} 3736*5ddc57e5SXin Li 3737*5ddc57e5SXin Li 3738*5ddc57e5SXin Li# func_extract_archives gentop oldlib ... 3739*5ddc57e5SXin Lifunc_extract_archives () 3740*5ddc57e5SXin Li{ 3741*5ddc57e5SXin Li $opt_debug 3742*5ddc57e5SXin Li my_gentop="$1"; shift 3743*5ddc57e5SXin Li my_oldlibs=${1+"$@"} 3744*5ddc57e5SXin Li my_oldobjs="" 3745*5ddc57e5SXin Li my_xlib="" 3746*5ddc57e5SXin Li my_xabs="" 3747*5ddc57e5SXin Li my_xdir="" 3748*5ddc57e5SXin Li 3749*5ddc57e5SXin Li for my_xlib in $my_oldlibs; do 3750*5ddc57e5SXin Li # Extract the objects. 3751*5ddc57e5SXin Li case $my_xlib in 3752*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753*5ddc57e5SXin Li *) my_xabs=`pwd`"/$my_xlib" ;; 3754*5ddc57e5SXin Li esac 3755*5ddc57e5SXin Li func_basename "$my_xlib" 3756*5ddc57e5SXin Li my_xlib="$func_basename_result" 3757*5ddc57e5SXin Li my_xlib_u=$my_xlib 3758*5ddc57e5SXin Li while :; do 3759*5ddc57e5SXin Li case " $extracted_archives " in 3760*5ddc57e5SXin Li *" $my_xlib_u "*) 3761*5ddc57e5SXin Li func_arith $extracted_serial + 1 3762*5ddc57e5SXin Li extracted_serial=$func_arith_result 3763*5ddc57e5SXin Li my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764*5ddc57e5SXin Li *) break ;; 3765*5ddc57e5SXin Li esac 3766*5ddc57e5SXin Li done 3767*5ddc57e5SXin Li extracted_archives="$extracted_archives $my_xlib_u" 3768*5ddc57e5SXin Li my_xdir="$my_gentop/$my_xlib_u" 3769*5ddc57e5SXin Li 3770*5ddc57e5SXin Li func_mkdir_p "$my_xdir" 3771*5ddc57e5SXin Li 3772*5ddc57e5SXin Li case $host in 3773*5ddc57e5SXin Li *-darwin*) 3774*5ddc57e5SXin Li func_verbose "Extracting $my_xabs" 3775*5ddc57e5SXin Li # Do not bother doing anything if just a dry run 3776*5ddc57e5SXin Li $opt_dry_run || { 3777*5ddc57e5SXin Li darwin_orig_dir=`pwd` 3778*5ddc57e5SXin Li cd $my_xdir || exit $? 3779*5ddc57e5SXin Li darwin_archive=$my_xabs 3780*5ddc57e5SXin Li darwin_curdir=`pwd` 3781*5ddc57e5SXin Li darwin_base_archive=`basename "$darwin_archive"` 3782*5ddc57e5SXin Li darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783*5ddc57e5SXin Li if test -n "$darwin_arches"; then 3784*5ddc57e5SXin Li darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785*5ddc57e5SXin Li darwin_arch= 3786*5ddc57e5SXin Li func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787*5ddc57e5SXin Li for darwin_arch in $darwin_arches ; do 3788*5ddc57e5SXin Li func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789*5ddc57e5SXin Li $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790*5ddc57e5SXin Li cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791*5ddc57e5SXin Li func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792*5ddc57e5SXin Li cd "$darwin_curdir" 3793*5ddc57e5SXin Li $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794*5ddc57e5SXin Li done # $darwin_arches 3795*5ddc57e5SXin Li ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796*5ddc57e5SXin Li darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797*5ddc57e5SXin Li darwin_file= 3798*5ddc57e5SXin Li darwin_files= 3799*5ddc57e5SXin Li for darwin_file in $darwin_filelist; do 3800*5ddc57e5SXin Li darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801*5ddc57e5SXin Li $LIPO -create -output "$darwin_file" $darwin_files 3802*5ddc57e5SXin Li done # $darwin_filelist 3803*5ddc57e5SXin Li $RM -rf unfat-$$ 3804*5ddc57e5SXin Li cd "$darwin_orig_dir" 3805*5ddc57e5SXin Li else 3806*5ddc57e5SXin Li cd $darwin_orig_dir 3807*5ddc57e5SXin Li func_extract_an_archive "$my_xdir" "$my_xabs" 3808*5ddc57e5SXin Li fi # $darwin_arches 3809*5ddc57e5SXin Li } # !$opt_dry_run 3810*5ddc57e5SXin Li ;; 3811*5ddc57e5SXin Li *) 3812*5ddc57e5SXin Li func_extract_an_archive "$my_xdir" "$my_xabs" 3813*5ddc57e5SXin Li ;; 3814*5ddc57e5SXin Li esac 3815*5ddc57e5SXin Li my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816*5ddc57e5SXin Li done 3817*5ddc57e5SXin Li 3818*5ddc57e5SXin Li func_extract_archives_result="$my_oldobjs" 3819*5ddc57e5SXin Li} 3820*5ddc57e5SXin Li 3821*5ddc57e5SXin Li 3822*5ddc57e5SXin Li# func_emit_wrapper [arg=no] 3823*5ddc57e5SXin Li# 3824*5ddc57e5SXin Li# Emit a libtool wrapper script on stdout. 3825*5ddc57e5SXin Li# Don't directly open a file because we may want to 3826*5ddc57e5SXin Li# incorporate the script contents within a cygwin/mingw 3827*5ddc57e5SXin Li# wrapper executable. Must ONLY be called from within 3828*5ddc57e5SXin Li# func_mode_link because it depends on a number of variables 3829*5ddc57e5SXin Li# set therein. 3830*5ddc57e5SXin Li# 3831*5ddc57e5SXin Li# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 3832*5ddc57e5SXin Li# variable will take. If 'yes', then the emitted script 3833*5ddc57e5SXin Li# will assume that the directory in which it is stored is 3834*5ddc57e5SXin Li# the $objdir directory. This is a cygwin/mingw-specific 3835*5ddc57e5SXin Li# behavior. 3836*5ddc57e5SXin Lifunc_emit_wrapper () 3837*5ddc57e5SXin Li{ 3838*5ddc57e5SXin Li func_emit_wrapper_arg1=${1-no} 3839*5ddc57e5SXin Li 3840*5ddc57e5SXin Li $ECHO "\ 3841*5ddc57e5SXin Li#! $SHELL 3842*5ddc57e5SXin Li 3843*5ddc57e5SXin Li# $output - temporary wrapper script for $objdir/$outputname 3844*5ddc57e5SXin Li# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845*5ddc57e5SXin Li# 3846*5ddc57e5SXin Li# The $output program cannot be directly executed until all the libtool 3847*5ddc57e5SXin Li# libraries that it depends on are installed. 3848*5ddc57e5SXin Li# 3849*5ddc57e5SXin Li# This wrapper script should never be moved out of the build directory. 3850*5ddc57e5SXin Li# If it is, it will not operate correctly. 3851*5ddc57e5SXin Li 3852*5ddc57e5SXin Li# Sed substitution that helps us do robust quoting. It backslashifies 3853*5ddc57e5SXin Li# metacharacters that are still active within double-quoted strings. 3854*5ddc57e5SXin Lised_quote_subst='$sed_quote_subst' 3855*5ddc57e5SXin Li 3856*5ddc57e5SXin Li# Be Bourne compatible 3857*5ddc57e5SXin Liif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858*5ddc57e5SXin Li emulate sh 3859*5ddc57e5SXin Li NULLCMD=: 3860*5ddc57e5SXin Li # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861*5ddc57e5SXin Li # is contrary to our usage. Disable this feature. 3862*5ddc57e5SXin Li alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863*5ddc57e5SXin Li setopt NO_GLOB_SUBST 3864*5ddc57e5SXin Lielse 3865*5ddc57e5SXin Li case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866*5ddc57e5SXin Lifi 3867*5ddc57e5SXin LiBIN_SH=xpg4; export BIN_SH # for Tru64 3868*5ddc57e5SXin LiDUALCASE=1; export DUALCASE # for MKS sh 3869*5ddc57e5SXin Li 3870*5ddc57e5SXin Li# The HP-UX ksh and POSIX shell print the target directory to stdout 3871*5ddc57e5SXin Li# if CDPATH is set. 3872*5ddc57e5SXin Li(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873*5ddc57e5SXin Li 3874*5ddc57e5SXin Lirelink_command=\"$relink_command\" 3875*5ddc57e5SXin Li 3876*5ddc57e5SXin Li# This environment variable determines our operation mode. 3877*5ddc57e5SXin Liif test \"\$libtool_install_magic\" = \"$magic\"; then 3878*5ddc57e5SXin Li # install mode needs the following variables: 3879*5ddc57e5SXin Li generated_by_libtool_version='$macro_version' 3880*5ddc57e5SXin Li notinst_deplibs='$notinst_deplibs' 3881*5ddc57e5SXin Lielse 3882*5ddc57e5SXin Li # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883*5ddc57e5SXin Li if test \"\$libtool_execute_magic\" != \"$magic\"; then 3884*5ddc57e5SXin Li file=\"\$0\"" 3885*5ddc57e5SXin Li 3886*5ddc57e5SXin Li qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 3887*5ddc57e5SXin Li $ECHO "\ 3888*5ddc57e5SXin Li 3889*5ddc57e5SXin Li# A function that is used when there is no print builtin or printf. 3890*5ddc57e5SXin Lifunc_fallback_echo () 3891*5ddc57e5SXin Li{ 3892*5ddc57e5SXin Li eval 'cat <<_LTECHO_EOF 3893*5ddc57e5SXin Li\$1 3894*5ddc57e5SXin Li_LTECHO_EOF' 3895*5ddc57e5SXin Li} 3896*5ddc57e5SXin Li ECHO=\"$qECHO\" 3897*5ddc57e5SXin Li fi 3898*5ddc57e5SXin Li 3899*5ddc57e5SXin Li# Very basic option parsing. These options are (a) specific to 3900*5ddc57e5SXin Li# the libtool wrapper, (b) are identical between the wrapper 3901*5ddc57e5SXin Li# /script/ and the wrapper /executable/ which is used only on 3902*5ddc57e5SXin Li# windows platforms, and (c) all begin with the string "--lt-" 3903*5ddc57e5SXin Li# (application programs are unlikely to have options which match 3904*5ddc57e5SXin Li# this pattern). 3905*5ddc57e5SXin Li# 3906*5ddc57e5SXin Li# There are only two supported options: --lt-debug and 3907*5ddc57e5SXin Li# --lt-dump-script. There is, deliberately, no --lt-help. 3908*5ddc57e5SXin Li# 3909*5ddc57e5SXin Li# The first argument to this parsing function should be the 3910*5ddc57e5SXin Li# script's $0 value, followed by "$@". 3911*5ddc57e5SXin Lilt_option_debug= 3912*5ddc57e5SXin Lifunc_parse_lt_options () 3913*5ddc57e5SXin Li{ 3914*5ddc57e5SXin Li lt_script_arg0=\$0 3915*5ddc57e5SXin Li shift 3916*5ddc57e5SXin Li for lt_opt 3917*5ddc57e5SXin Li do 3918*5ddc57e5SXin Li case \"\$lt_opt\" in 3919*5ddc57e5SXin Li --lt-debug) lt_option_debug=1 ;; 3920*5ddc57e5SXin Li --lt-dump-script) 3921*5ddc57e5SXin Li lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3922*5ddc57e5SXin Li test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3923*5ddc57e5SXin Li lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3924*5ddc57e5SXin Li cat \"\$lt_dump_D/\$lt_dump_F\" 3925*5ddc57e5SXin Li exit 0 3926*5ddc57e5SXin Li ;; 3927*5ddc57e5SXin Li --lt-*) 3928*5ddc57e5SXin Li \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3929*5ddc57e5SXin Li exit 1 3930*5ddc57e5SXin Li ;; 3931*5ddc57e5SXin Li esac 3932*5ddc57e5SXin Li done 3933*5ddc57e5SXin Li 3934*5ddc57e5SXin Li # Print the debug banner immediately: 3935*5ddc57e5SXin Li if test -n \"\$lt_option_debug\"; then 3936*5ddc57e5SXin Li echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3937*5ddc57e5SXin Li fi 3938*5ddc57e5SXin Li} 3939*5ddc57e5SXin Li 3940*5ddc57e5SXin Li# Used when --lt-debug. Prints its arguments to stdout 3941*5ddc57e5SXin Li# (redirection is the responsibility of the caller) 3942*5ddc57e5SXin Lifunc_lt_dump_args () 3943*5ddc57e5SXin Li{ 3944*5ddc57e5SXin Li lt_dump_args_N=1; 3945*5ddc57e5SXin Li for lt_arg 3946*5ddc57e5SXin Li do 3947*5ddc57e5SXin Li \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3948*5ddc57e5SXin Li lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3949*5ddc57e5SXin Li done 3950*5ddc57e5SXin Li} 3951*5ddc57e5SXin Li 3952*5ddc57e5SXin Li# Core function for launching the target application 3953*5ddc57e5SXin Lifunc_exec_program_core () 3954*5ddc57e5SXin Li{ 3955*5ddc57e5SXin Li" 3956*5ddc57e5SXin Li case $host in 3957*5ddc57e5SXin Li # Backslashes separate directories on plain windows 3958*5ddc57e5SXin Li *-*-mingw | *-*-os2* | *-cegcc*) 3959*5ddc57e5SXin Li $ECHO "\ 3960*5ddc57e5SXin Li if test -n \"\$lt_option_debug\"; then 3961*5ddc57e5SXin Li \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3962*5ddc57e5SXin Li func_lt_dump_args \${1+\"\$@\"} 1>&2 3963*5ddc57e5SXin Li fi 3964*5ddc57e5SXin Li exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3965*5ddc57e5SXin Li" 3966*5ddc57e5SXin Li ;; 3967*5ddc57e5SXin Li 3968*5ddc57e5SXin Li *) 3969*5ddc57e5SXin Li $ECHO "\ 3970*5ddc57e5SXin Li if test -n \"\$lt_option_debug\"; then 3971*5ddc57e5SXin Li \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3972*5ddc57e5SXin Li func_lt_dump_args \${1+\"\$@\"} 1>&2 3973*5ddc57e5SXin Li fi 3974*5ddc57e5SXin Li exec \"\$progdir/\$program\" \${1+\"\$@\"} 3975*5ddc57e5SXin Li" 3976*5ddc57e5SXin Li ;; 3977*5ddc57e5SXin Li esac 3978*5ddc57e5SXin Li $ECHO "\ 3979*5ddc57e5SXin Li \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3980*5ddc57e5SXin Li exit 1 3981*5ddc57e5SXin Li} 3982*5ddc57e5SXin Li 3983*5ddc57e5SXin Li# A function to encapsulate launching the target application 3984*5ddc57e5SXin Li# Strips options in the --lt-* namespace from \$@ and 3985*5ddc57e5SXin Li# launches target application with the remaining arguments. 3986*5ddc57e5SXin Lifunc_exec_program () 3987*5ddc57e5SXin Li{ 3988*5ddc57e5SXin Li case \" \$* \" in 3989*5ddc57e5SXin Li *\\ --lt-*) 3990*5ddc57e5SXin Li for lt_wr_arg 3991*5ddc57e5SXin Li do 3992*5ddc57e5SXin Li case \$lt_wr_arg in 3993*5ddc57e5SXin Li --lt-*) ;; 3994*5ddc57e5SXin Li *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3995*5ddc57e5SXin Li esac 3996*5ddc57e5SXin Li shift 3997*5ddc57e5SXin Li done ;; 3998*5ddc57e5SXin Li esac 3999*5ddc57e5SXin Li func_exec_program_core \${1+\"\$@\"} 4000*5ddc57e5SXin Li} 4001*5ddc57e5SXin Li 4002*5ddc57e5SXin Li # Parse options 4003*5ddc57e5SXin Li func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4004*5ddc57e5SXin Li 4005*5ddc57e5SXin Li # Find the directory that this script lives in. 4006*5ddc57e5SXin Li thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007*5ddc57e5SXin Li test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4008*5ddc57e5SXin Li 4009*5ddc57e5SXin Li # Follow symbolic links until we get to the real thisdir. 4010*5ddc57e5SXin Li file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011*5ddc57e5SXin Li while test -n \"\$file\"; do 4012*5ddc57e5SXin Li destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4013*5ddc57e5SXin Li 4014*5ddc57e5SXin Li # If there was a directory component, then change thisdir. 4015*5ddc57e5SXin Li if test \"x\$destdir\" != \"x\$file\"; then 4016*5ddc57e5SXin Li case \"\$destdir\" in 4017*5ddc57e5SXin Li [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018*5ddc57e5SXin Li *) thisdir=\"\$thisdir/\$destdir\" ;; 4019*5ddc57e5SXin Li esac 4020*5ddc57e5SXin Li fi 4021*5ddc57e5SXin Li 4022*5ddc57e5SXin Li file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 4023*5ddc57e5SXin Li file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024*5ddc57e5SXin Li done 4025*5ddc57e5SXin Li 4026*5ddc57e5SXin Li # Usually 'no', except on cygwin/mingw when embedded into 4027*5ddc57e5SXin Li # the cwrapper. 4028*5ddc57e5SXin Li WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029*5ddc57e5SXin Li if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030*5ddc57e5SXin Li # special case for '.' 4031*5ddc57e5SXin Li if test \"\$thisdir\" = \".\"; then 4032*5ddc57e5SXin Li thisdir=\`pwd\` 4033*5ddc57e5SXin Li fi 4034*5ddc57e5SXin Li # remove .libs from thisdir 4035*5ddc57e5SXin Li case \"\$thisdir\" in 4036*5ddc57e5SXin Li *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037*5ddc57e5SXin Li $objdir ) thisdir=. ;; 4038*5ddc57e5SXin Li esac 4039*5ddc57e5SXin Li fi 4040*5ddc57e5SXin Li 4041*5ddc57e5SXin Li # Try to get the absolute directory name. 4042*5ddc57e5SXin Li absdir=\`cd \"\$thisdir\" && pwd\` 4043*5ddc57e5SXin Li test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044*5ddc57e5SXin Li" 4045*5ddc57e5SXin Li 4046*5ddc57e5SXin Li if test "$fast_install" = yes; then 4047*5ddc57e5SXin Li $ECHO "\ 4048*5ddc57e5SXin Li program=lt-'$outputname'$exeext 4049*5ddc57e5SXin Li progdir=\"\$thisdir/$objdir\" 4050*5ddc57e5SXin Li 4051*5ddc57e5SXin Li if test ! -f \"\$progdir/\$program\" || 4052*5ddc57e5SXin Li { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053*5ddc57e5SXin Li test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054*5ddc57e5SXin Li 4055*5ddc57e5SXin Li file=\"\$\$-\$program\" 4056*5ddc57e5SXin Li 4057*5ddc57e5SXin Li if test ! -d \"\$progdir\"; then 4058*5ddc57e5SXin Li $MKDIR \"\$progdir\" 4059*5ddc57e5SXin Li else 4060*5ddc57e5SXin Li $RM \"\$progdir/\$file\" 4061*5ddc57e5SXin Li fi" 4062*5ddc57e5SXin Li 4063*5ddc57e5SXin Li $ECHO "\ 4064*5ddc57e5SXin Li 4065*5ddc57e5SXin Li # relink executable if necessary 4066*5ddc57e5SXin Li if test -n \"\$relink_command\"; then 4067*5ddc57e5SXin Li if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068*5ddc57e5SXin Li else 4069*5ddc57e5SXin Li $ECHO \"\$relink_command_output\" >&2 4070*5ddc57e5SXin Li $RM \"\$progdir/\$file\" 4071*5ddc57e5SXin Li exit 1 4072*5ddc57e5SXin Li fi 4073*5ddc57e5SXin Li fi 4074*5ddc57e5SXin Li 4075*5ddc57e5SXin Li $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076*5ddc57e5SXin Li { $RM \"\$progdir/\$program\"; 4077*5ddc57e5SXin Li $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078*5ddc57e5SXin Li $RM \"\$progdir/\$file\" 4079*5ddc57e5SXin Li fi" 4080*5ddc57e5SXin Li else 4081*5ddc57e5SXin Li $ECHO "\ 4082*5ddc57e5SXin Li program='$outputname' 4083*5ddc57e5SXin Li progdir=\"\$thisdir/$objdir\" 4084*5ddc57e5SXin Li" 4085*5ddc57e5SXin Li fi 4086*5ddc57e5SXin Li 4087*5ddc57e5SXin Li $ECHO "\ 4088*5ddc57e5SXin Li 4089*5ddc57e5SXin Li if test -f \"\$progdir/\$program\"; then" 4090*5ddc57e5SXin Li 4091*5ddc57e5SXin Li # fixup the dll searchpath if we need to. 4092*5ddc57e5SXin Li # 4093*5ddc57e5SXin Li # Fix the DLL searchpath if we need to. Do this before prepending 4094*5ddc57e5SXin Li # to shlibpath, because on Windows, both are PATH and uninstalled 4095*5ddc57e5SXin Li # libraries must come first. 4096*5ddc57e5SXin Li if test -n "$dllsearchpath"; then 4097*5ddc57e5SXin Li $ECHO "\ 4098*5ddc57e5SXin Li # Add the dll search path components to the executable PATH 4099*5ddc57e5SXin Li PATH=$dllsearchpath:\$PATH 4100*5ddc57e5SXin Li" 4101*5ddc57e5SXin Li fi 4102*5ddc57e5SXin Li 4103*5ddc57e5SXin Li # Export our shlibpath_var if we have one. 4104*5ddc57e5SXin Li if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105*5ddc57e5SXin Li $ECHO "\ 4106*5ddc57e5SXin Li # Add our own library path to $shlibpath_var 4107*5ddc57e5SXin Li $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108*5ddc57e5SXin Li 4109*5ddc57e5SXin Li # Some systems cannot cope with colon-terminated $shlibpath_var 4110*5ddc57e5SXin Li # The second colon is a workaround for a bug in BeOS R4 sed 4111*5ddc57e5SXin Li $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4112*5ddc57e5SXin Li 4113*5ddc57e5SXin Li export $shlibpath_var 4114*5ddc57e5SXin Li" 4115*5ddc57e5SXin Li fi 4116*5ddc57e5SXin Li 4117*5ddc57e5SXin Li $ECHO "\ 4118*5ddc57e5SXin Li if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119*5ddc57e5SXin Li # Run the actual program with our arguments. 4120*5ddc57e5SXin Li func_exec_program \${1+\"\$@\"} 4121*5ddc57e5SXin Li fi 4122*5ddc57e5SXin Li else 4123*5ddc57e5SXin Li # The program doesn't exist. 4124*5ddc57e5SXin Li \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125*5ddc57e5SXin Li \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 4126*5ddc57e5SXin Li \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127*5ddc57e5SXin Li exit 1 4128*5ddc57e5SXin Li fi 4129*5ddc57e5SXin Lifi\ 4130*5ddc57e5SXin Li" 4131*5ddc57e5SXin Li} 4132*5ddc57e5SXin Li 4133*5ddc57e5SXin Li 4134*5ddc57e5SXin Li# func_emit_cwrapperexe_src 4135*5ddc57e5SXin Li# emit the source code for a wrapper executable on stdout 4136*5ddc57e5SXin Li# Must ONLY be called from within func_mode_link because 4137*5ddc57e5SXin Li# it depends on a number of variable set therein. 4138*5ddc57e5SXin Lifunc_emit_cwrapperexe_src () 4139*5ddc57e5SXin Li{ 4140*5ddc57e5SXin Li cat <<EOF 4141*5ddc57e5SXin Li 4142*5ddc57e5SXin Li/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4143*5ddc57e5SXin Li Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4144*5ddc57e5SXin Li 4145*5ddc57e5SXin Li The $output program cannot be directly executed until all the libtool 4146*5ddc57e5SXin Li libraries that it depends on are installed. 4147*5ddc57e5SXin Li 4148*5ddc57e5SXin Li This wrapper executable should never be moved out of the build directory. 4149*5ddc57e5SXin Li If it is, it will not operate correctly. 4150*5ddc57e5SXin Li*/ 4151*5ddc57e5SXin LiEOF 4152*5ddc57e5SXin Li cat <<"EOF" 4153*5ddc57e5SXin Li#ifdef _MSC_VER 4154*5ddc57e5SXin Li# define _CRT_SECURE_NO_DEPRECATE 1 4155*5ddc57e5SXin Li#endif 4156*5ddc57e5SXin Li#include <stdio.h> 4157*5ddc57e5SXin Li#include <stdlib.h> 4158*5ddc57e5SXin Li#ifdef _MSC_VER 4159*5ddc57e5SXin Li# include <direct.h> 4160*5ddc57e5SXin Li# include <process.h> 4161*5ddc57e5SXin Li# include <io.h> 4162*5ddc57e5SXin Li#else 4163*5ddc57e5SXin Li# include <unistd.h> 4164*5ddc57e5SXin Li# include <stdint.h> 4165*5ddc57e5SXin Li# ifdef __CYGWIN__ 4166*5ddc57e5SXin Li# include <io.h> 4167*5ddc57e5SXin Li# endif 4168*5ddc57e5SXin Li#endif 4169*5ddc57e5SXin Li#include <malloc.h> 4170*5ddc57e5SXin Li#include <stdarg.h> 4171*5ddc57e5SXin Li#include <assert.h> 4172*5ddc57e5SXin Li#include <string.h> 4173*5ddc57e5SXin Li#include <ctype.h> 4174*5ddc57e5SXin Li#include <errno.h> 4175*5ddc57e5SXin Li#include <fcntl.h> 4176*5ddc57e5SXin Li#include <sys/stat.h> 4177*5ddc57e5SXin Li 4178*5ddc57e5SXin Li/* declarations of non-ANSI functions */ 4179*5ddc57e5SXin Li#if defined(__MINGW32__) 4180*5ddc57e5SXin Li# ifdef __STRICT_ANSI__ 4181*5ddc57e5SXin Liint _putenv (const char *); 4182*5ddc57e5SXin Li# endif 4183*5ddc57e5SXin Li#elif defined(__CYGWIN__) 4184*5ddc57e5SXin Li# ifdef __STRICT_ANSI__ 4185*5ddc57e5SXin Lichar *realpath (const char *, char *); 4186*5ddc57e5SXin Liint putenv (char *); 4187*5ddc57e5SXin Liint setenv (const char *, const char *, int); 4188*5ddc57e5SXin Li# endif 4189*5ddc57e5SXin Li/* #elif defined (other platforms) ... */ 4190*5ddc57e5SXin Li#endif 4191*5ddc57e5SXin Li 4192*5ddc57e5SXin Li/* portability defines, excluding path handling macros */ 4193*5ddc57e5SXin Li#if defined(_MSC_VER) 4194*5ddc57e5SXin Li# define setmode _setmode 4195*5ddc57e5SXin Li# define stat _stat 4196*5ddc57e5SXin Li# define chmod _chmod 4197*5ddc57e5SXin Li# define getcwd _getcwd 4198*5ddc57e5SXin Li# define putenv _putenv 4199*5ddc57e5SXin Li# define S_IXUSR _S_IEXEC 4200*5ddc57e5SXin Li# ifndef _INTPTR_T_DEFINED 4201*5ddc57e5SXin Li# define _INTPTR_T_DEFINED 4202*5ddc57e5SXin Li# define intptr_t int 4203*5ddc57e5SXin Li# endif 4204*5ddc57e5SXin Li#elif defined(__MINGW32__) 4205*5ddc57e5SXin Li# define setmode _setmode 4206*5ddc57e5SXin Li# define stat _stat 4207*5ddc57e5SXin Li# define chmod _chmod 4208*5ddc57e5SXin Li# define getcwd _getcwd 4209*5ddc57e5SXin Li# define putenv _putenv 4210*5ddc57e5SXin Li#elif defined(__CYGWIN__) 4211*5ddc57e5SXin Li# define HAVE_SETENV 4212*5ddc57e5SXin Li# define FOPEN_WB "wb" 4213*5ddc57e5SXin Li/* #elif defined (other platforms) ... */ 4214*5ddc57e5SXin Li#endif 4215*5ddc57e5SXin Li 4216*5ddc57e5SXin Li#if defined(PATH_MAX) 4217*5ddc57e5SXin Li# define LT_PATHMAX PATH_MAX 4218*5ddc57e5SXin Li#elif defined(MAXPATHLEN) 4219*5ddc57e5SXin Li# define LT_PATHMAX MAXPATHLEN 4220*5ddc57e5SXin Li#else 4221*5ddc57e5SXin Li# define LT_PATHMAX 1024 4222*5ddc57e5SXin Li#endif 4223*5ddc57e5SXin Li 4224*5ddc57e5SXin Li#ifndef S_IXOTH 4225*5ddc57e5SXin Li# define S_IXOTH 0 4226*5ddc57e5SXin Li#endif 4227*5ddc57e5SXin Li#ifndef S_IXGRP 4228*5ddc57e5SXin Li# define S_IXGRP 0 4229*5ddc57e5SXin Li#endif 4230*5ddc57e5SXin Li 4231*5ddc57e5SXin Li/* path handling portability macros */ 4232*5ddc57e5SXin Li#ifndef DIR_SEPARATOR 4233*5ddc57e5SXin Li# define DIR_SEPARATOR '/' 4234*5ddc57e5SXin Li# define PATH_SEPARATOR ':' 4235*5ddc57e5SXin Li#endif 4236*5ddc57e5SXin Li 4237*5ddc57e5SXin Li#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4238*5ddc57e5SXin Li defined (__OS2__) 4239*5ddc57e5SXin Li# define HAVE_DOS_BASED_FILE_SYSTEM 4240*5ddc57e5SXin Li# define FOPEN_WB "wb" 4241*5ddc57e5SXin Li# ifndef DIR_SEPARATOR_2 4242*5ddc57e5SXin Li# define DIR_SEPARATOR_2 '\\' 4243*5ddc57e5SXin Li# endif 4244*5ddc57e5SXin Li# ifndef PATH_SEPARATOR_2 4245*5ddc57e5SXin Li# define PATH_SEPARATOR_2 ';' 4246*5ddc57e5SXin Li# endif 4247*5ddc57e5SXin Li#endif 4248*5ddc57e5SXin Li 4249*5ddc57e5SXin Li#ifndef DIR_SEPARATOR_2 4250*5ddc57e5SXin Li# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251*5ddc57e5SXin Li#else /* DIR_SEPARATOR_2 */ 4252*5ddc57e5SXin Li# define IS_DIR_SEPARATOR(ch) \ 4253*5ddc57e5SXin Li (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254*5ddc57e5SXin Li#endif /* DIR_SEPARATOR_2 */ 4255*5ddc57e5SXin Li 4256*5ddc57e5SXin Li#ifndef PATH_SEPARATOR_2 4257*5ddc57e5SXin Li# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258*5ddc57e5SXin Li#else /* PATH_SEPARATOR_2 */ 4259*5ddc57e5SXin Li# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260*5ddc57e5SXin Li#endif /* PATH_SEPARATOR_2 */ 4261*5ddc57e5SXin Li 4262*5ddc57e5SXin Li#ifndef FOPEN_WB 4263*5ddc57e5SXin Li# define FOPEN_WB "w" 4264*5ddc57e5SXin Li#endif 4265*5ddc57e5SXin Li#ifndef _O_BINARY 4266*5ddc57e5SXin Li# define _O_BINARY 0 4267*5ddc57e5SXin Li#endif 4268*5ddc57e5SXin Li 4269*5ddc57e5SXin Li#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270*5ddc57e5SXin Li#define XFREE(stale) do { \ 4271*5ddc57e5SXin Li if (stale) { free ((void *) stale); stale = 0; } \ 4272*5ddc57e5SXin Li} while (0) 4273*5ddc57e5SXin Li 4274*5ddc57e5SXin Li#if defined(LT_DEBUGWRAPPER) 4275*5ddc57e5SXin Listatic int lt_debug = 1; 4276*5ddc57e5SXin Li#else 4277*5ddc57e5SXin Listatic int lt_debug = 0; 4278*5ddc57e5SXin Li#endif 4279*5ddc57e5SXin Li 4280*5ddc57e5SXin Liconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4281*5ddc57e5SXin Li 4282*5ddc57e5SXin Livoid *xmalloc (size_t num); 4283*5ddc57e5SXin Lichar *xstrdup (const char *string); 4284*5ddc57e5SXin Liconst char *base_name (const char *name); 4285*5ddc57e5SXin Lichar *find_executable (const char *wrapper); 4286*5ddc57e5SXin Lichar *chase_symlinks (const char *pathspec); 4287*5ddc57e5SXin Liint make_executable (const char *path); 4288*5ddc57e5SXin Liint check_executable (const char *path); 4289*5ddc57e5SXin Lichar *strendzap (char *str, const char *pat); 4290*5ddc57e5SXin Livoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 4291*5ddc57e5SXin Livoid lt_fatal (const char *file, int line, const char *message, ...); 4292*5ddc57e5SXin Listatic const char *nonnull (const char *s); 4293*5ddc57e5SXin Listatic const char *nonempty (const char *s); 4294*5ddc57e5SXin Livoid lt_setenv (const char *name, const char *value); 4295*5ddc57e5SXin Lichar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296*5ddc57e5SXin Livoid lt_update_exe_path (const char *name, const char *value); 4297*5ddc57e5SXin Livoid lt_update_lib_path (const char *name, const char *value); 4298*5ddc57e5SXin Lichar **prepare_spawn (char **argv); 4299*5ddc57e5SXin Livoid lt_dump_script (FILE *f); 4300*5ddc57e5SXin LiEOF 4301*5ddc57e5SXin Li 4302*5ddc57e5SXin Li cat <<EOF 4303*5ddc57e5SXin Livolatile const char * MAGIC_EXE = "$magic_exe"; 4304*5ddc57e5SXin Liconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305*5ddc57e5SXin LiEOF 4306*5ddc57e5SXin Li 4307*5ddc57e5SXin Li if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4308*5ddc57e5SXin Li func_to_host_path "$temp_rpath" 4309*5ddc57e5SXin Li cat <<EOF 4310*5ddc57e5SXin Liconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311*5ddc57e5SXin LiEOF 4312*5ddc57e5SXin Li else 4313*5ddc57e5SXin Li cat <<"EOF" 4314*5ddc57e5SXin Liconst char * LIB_PATH_VALUE = ""; 4315*5ddc57e5SXin LiEOF 4316*5ddc57e5SXin Li fi 4317*5ddc57e5SXin Li 4318*5ddc57e5SXin Li if test -n "$dllsearchpath"; then 4319*5ddc57e5SXin Li func_to_host_path "$dllsearchpath:" 4320*5ddc57e5SXin Li cat <<EOF 4321*5ddc57e5SXin Liconst char * EXE_PATH_VARNAME = "PATH"; 4322*5ddc57e5SXin Liconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4323*5ddc57e5SXin LiEOF 4324*5ddc57e5SXin Li else 4325*5ddc57e5SXin Li cat <<"EOF" 4326*5ddc57e5SXin Liconst char * EXE_PATH_VARNAME = ""; 4327*5ddc57e5SXin Liconst char * EXE_PATH_VALUE = ""; 4328*5ddc57e5SXin LiEOF 4329*5ddc57e5SXin Li fi 4330*5ddc57e5SXin Li 4331*5ddc57e5SXin Li if test "$fast_install" = yes; then 4332*5ddc57e5SXin Li cat <<EOF 4333*5ddc57e5SXin Liconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334*5ddc57e5SXin LiEOF 4335*5ddc57e5SXin Li else 4336*5ddc57e5SXin Li cat <<EOF 4337*5ddc57e5SXin Liconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338*5ddc57e5SXin LiEOF 4339*5ddc57e5SXin Li fi 4340*5ddc57e5SXin Li 4341*5ddc57e5SXin Li 4342*5ddc57e5SXin Li cat <<"EOF" 4343*5ddc57e5SXin Li 4344*5ddc57e5SXin Li#define LTWRAPPER_OPTION_PREFIX "--lt-" 4345*5ddc57e5SXin Li 4346*5ddc57e5SXin Listatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347*5ddc57e5SXin Listatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 4348*5ddc57e5SXin Listatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4349*5ddc57e5SXin Li 4350*5ddc57e5SXin Liint 4351*5ddc57e5SXin Limain (int argc, char *argv[]) 4352*5ddc57e5SXin Li{ 4353*5ddc57e5SXin Li char **newargz; 4354*5ddc57e5SXin Li int newargc; 4355*5ddc57e5SXin Li char *tmp_pathspec; 4356*5ddc57e5SXin Li char *actual_cwrapper_path; 4357*5ddc57e5SXin Li char *actual_cwrapper_name; 4358*5ddc57e5SXin Li char *target_name; 4359*5ddc57e5SXin Li char *lt_argv_zero; 4360*5ddc57e5SXin Li intptr_t rval = 127; 4361*5ddc57e5SXin Li 4362*5ddc57e5SXin Li int i; 4363*5ddc57e5SXin Li 4364*5ddc57e5SXin Li program_name = (char *) xstrdup (base_name (argv[0])); 4365*5ddc57e5SXin Li newargz = XMALLOC (char *, argc + 1); 4366*5ddc57e5SXin Li 4367*5ddc57e5SXin Li /* very simple arg parsing; don't want to rely on getopt 4368*5ddc57e5SXin Li * also, copy all non cwrapper options to newargz, except 4369*5ddc57e5SXin Li * argz[0], which is handled differently 4370*5ddc57e5SXin Li */ 4371*5ddc57e5SXin Li newargc=0; 4372*5ddc57e5SXin Li for (i = 1; i < argc; i++) 4373*5ddc57e5SXin Li { 4374*5ddc57e5SXin Li if (strcmp (argv[i], dumpscript_opt) == 0) 4375*5ddc57e5SXin Li { 4376*5ddc57e5SXin LiEOF 4377*5ddc57e5SXin Li case "$host" in 4378*5ddc57e5SXin Li *mingw* | *cygwin* ) 4379*5ddc57e5SXin Li # make stdout use "unix" line endings 4380*5ddc57e5SXin Li echo " setmode(1,_O_BINARY);" 4381*5ddc57e5SXin Li ;; 4382*5ddc57e5SXin Li esac 4383*5ddc57e5SXin Li 4384*5ddc57e5SXin Li cat <<"EOF" 4385*5ddc57e5SXin Li lt_dump_script (stdout); 4386*5ddc57e5SXin Li return 0; 4387*5ddc57e5SXin Li } 4388*5ddc57e5SXin Li if (strcmp (argv[i], debug_opt) == 0) 4389*5ddc57e5SXin Li { 4390*5ddc57e5SXin Li lt_debug = 1; 4391*5ddc57e5SXin Li continue; 4392*5ddc57e5SXin Li } 4393*5ddc57e5SXin Li if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 4394*5ddc57e5SXin Li { 4395*5ddc57e5SXin Li /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 4396*5ddc57e5SXin Li namespace, but it is not one of the ones we know about and 4397*5ddc57e5SXin Li have already dealt with, above (inluding dump-script), then 4398*5ddc57e5SXin Li report an error. Otherwise, targets might begin to believe 4399*5ddc57e5SXin Li they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 4400*5ddc57e5SXin Li namespace. The first time any user complains about this, we'll 4401*5ddc57e5SXin Li need to make LTWRAPPER_OPTION_PREFIX a configure-time option 4402*5ddc57e5SXin Li or a configure.ac-settable value. 4403*5ddc57e5SXin Li */ 4404*5ddc57e5SXin Li lt_fatal (__FILE__, __LINE__, 4405*5ddc57e5SXin Li "unrecognized %s option: '%s'", 4406*5ddc57e5SXin Li ltwrapper_option_prefix, argv[i]); 4407*5ddc57e5SXin Li } 4408*5ddc57e5SXin Li /* otherwise ... */ 4409*5ddc57e5SXin Li newargz[++newargc] = xstrdup (argv[i]); 4410*5ddc57e5SXin Li } 4411*5ddc57e5SXin Li newargz[++newargc] = NULL; 4412*5ddc57e5SXin Li 4413*5ddc57e5SXin LiEOF 4414*5ddc57e5SXin Li cat <<EOF 4415*5ddc57e5SXin Li /* The GNU banner must be the first non-error debug message */ 4416*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 4417*5ddc57e5SXin LiEOF 4418*5ddc57e5SXin Li cat <<"EOF" 4419*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 4420*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4421*5ddc57e5SXin Li 4422*5ddc57e5SXin Li tmp_pathspec = find_executable (argv[0]); 4423*5ddc57e5SXin Li if (tmp_pathspec == NULL) 4424*5ddc57e5SXin Li lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 4425*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, 4426*5ddc57e5SXin Li "(main) found exe (before symlink chase) at: %s\n", 4427*5ddc57e5SXin Li tmp_pathspec); 4428*5ddc57e5SXin Li 4429*5ddc57e5SXin Li actual_cwrapper_path = chase_symlinks (tmp_pathspec); 4430*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, 4431*5ddc57e5SXin Li "(main) found exe (after symlink chase) at: %s\n", 4432*5ddc57e5SXin Li actual_cwrapper_path); 4433*5ddc57e5SXin Li XFREE (tmp_pathspec); 4434*5ddc57e5SXin Li 4435*5ddc57e5SXin Li actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436*5ddc57e5SXin Li strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437*5ddc57e5SXin Li 4438*5ddc57e5SXin Li /* wrapper name transforms */ 4439*5ddc57e5SXin Li strendzap (actual_cwrapper_name, ".exe"); 4440*5ddc57e5SXin Li tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441*5ddc57e5SXin Li XFREE (actual_cwrapper_name); 4442*5ddc57e5SXin Li actual_cwrapper_name = tmp_pathspec; 4443*5ddc57e5SXin Li tmp_pathspec = 0; 4444*5ddc57e5SXin Li 4445*5ddc57e5SXin Li /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446*5ddc57e5SXin Li target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447*5ddc57e5SXin Li strendzap (target_name, ".exe"); 4448*5ddc57e5SXin Li tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449*5ddc57e5SXin Li XFREE (target_name); 4450*5ddc57e5SXin Li target_name = tmp_pathspec; 4451*5ddc57e5SXin Li tmp_pathspec = 0; 4452*5ddc57e5SXin Li 4453*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, 4454*5ddc57e5SXin Li "(main) libtool target name: %s\n", 4455*5ddc57e5SXin Li target_name); 4456*5ddc57e5SXin LiEOF 4457*5ddc57e5SXin Li 4458*5ddc57e5SXin Li cat <<EOF 4459*5ddc57e5SXin Li newargz[0] = 4460*5ddc57e5SXin Li XMALLOC (char, (strlen (actual_cwrapper_path) + 4461*5ddc57e5SXin Li strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462*5ddc57e5SXin Li strcpy (newargz[0], actual_cwrapper_path); 4463*5ddc57e5SXin Li strcat (newargz[0], "$objdir"); 4464*5ddc57e5SXin Li strcat (newargz[0], "/"); 4465*5ddc57e5SXin LiEOF 4466*5ddc57e5SXin Li 4467*5ddc57e5SXin Li cat <<"EOF" 4468*5ddc57e5SXin Li /* stop here, and copy so we don't have to do this twice */ 4469*5ddc57e5SXin Li tmp_pathspec = xstrdup (newargz[0]); 4470*5ddc57e5SXin Li 4471*5ddc57e5SXin Li /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472*5ddc57e5SXin Li strcat (newargz[0], actual_cwrapper_name); 4473*5ddc57e5SXin Li 4474*5ddc57e5SXin Li /* DO want the lt- prefix here if it exists, so use target_name */ 4475*5ddc57e5SXin Li lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476*5ddc57e5SXin Li XFREE (tmp_pathspec); 4477*5ddc57e5SXin Li tmp_pathspec = NULL; 4478*5ddc57e5SXin LiEOF 4479*5ddc57e5SXin Li 4480*5ddc57e5SXin Li case $host_os in 4481*5ddc57e5SXin Li mingw*) 4482*5ddc57e5SXin Li cat <<"EOF" 4483*5ddc57e5SXin Li { 4484*5ddc57e5SXin Li char* p; 4485*5ddc57e5SXin Li while ((p = strchr (newargz[0], '\\')) != NULL) 4486*5ddc57e5SXin Li { 4487*5ddc57e5SXin Li *p = '/'; 4488*5ddc57e5SXin Li } 4489*5ddc57e5SXin Li while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490*5ddc57e5SXin Li { 4491*5ddc57e5SXin Li *p = '/'; 4492*5ddc57e5SXin Li } 4493*5ddc57e5SXin Li } 4494*5ddc57e5SXin LiEOF 4495*5ddc57e5SXin Li ;; 4496*5ddc57e5SXin Li esac 4497*5ddc57e5SXin Li 4498*5ddc57e5SXin Li cat <<"EOF" 4499*5ddc57e5SXin Li XFREE (target_name); 4500*5ddc57e5SXin Li XFREE (actual_cwrapper_path); 4501*5ddc57e5SXin Li XFREE (actual_cwrapper_name); 4502*5ddc57e5SXin Li 4503*5ddc57e5SXin Li lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504*5ddc57e5SXin Li lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 4505*5ddc57e5SXin Li /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 4506*5ddc57e5SXin Li be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 4507*5ddc57e5SXin Li because on Windows, both *_VARNAMEs are PATH but uninstalled 4508*5ddc57e5SXin Li libraries must come first. */ 4509*5ddc57e5SXin Li lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 4510*5ddc57e5SXin Li lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4511*5ddc57e5SXin Li 4512*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 4513*5ddc57e5SXin Li nonnull (lt_argv_zero)); 4514*5ddc57e5SXin Li for (i = 0; i < newargc; i++) 4515*5ddc57e5SXin Li { 4516*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 4517*5ddc57e5SXin Li i, nonnull (newargz[i])); 4518*5ddc57e5SXin Li } 4519*5ddc57e5SXin Li 4520*5ddc57e5SXin LiEOF 4521*5ddc57e5SXin Li 4522*5ddc57e5SXin Li case $host_os in 4523*5ddc57e5SXin Li mingw*) 4524*5ddc57e5SXin Li cat <<"EOF" 4525*5ddc57e5SXin Li /* execv doesn't actually work on mingw as expected on unix */ 4526*5ddc57e5SXin Li newargz = prepare_spawn (newargz); 4527*5ddc57e5SXin Li rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528*5ddc57e5SXin Li if (rval == -1) 4529*5ddc57e5SXin Li { 4530*5ddc57e5SXin Li /* failed to start process */ 4531*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, 4532*5ddc57e5SXin Li "(main) failed to launch target \"%s\": %s\n", 4533*5ddc57e5SXin Li lt_argv_zero, nonnull (strerror (errno))); 4534*5ddc57e5SXin Li return 127; 4535*5ddc57e5SXin Li } 4536*5ddc57e5SXin Li return rval; 4537*5ddc57e5SXin LiEOF 4538*5ddc57e5SXin Li ;; 4539*5ddc57e5SXin Li *) 4540*5ddc57e5SXin Li cat <<"EOF" 4541*5ddc57e5SXin Li execv (lt_argv_zero, newargz); 4542*5ddc57e5SXin Li return rval; /* =127, but avoids unused variable warning */ 4543*5ddc57e5SXin LiEOF 4544*5ddc57e5SXin Li ;; 4545*5ddc57e5SXin Li esac 4546*5ddc57e5SXin Li 4547*5ddc57e5SXin Li cat <<"EOF" 4548*5ddc57e5SXin Li} 4549*5ddc57e5SXin Li 4550*5ddc57e5SXin Livoid * 4551*5ddc57e5SXin Lixmalloc (size_t num) 4552*5ddc57e5SXin Li{ 4553*5ddc57e5SXin Li void *p = (void *) malloc (num); 4554*5ddc57e5SXin Li if (!p) 4555*5ddc57e5SXin Li lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4556*5ddc57e5SXin Li 4557*5ddc57e5SXin Li return p; 4558*5ddc57e5SXin Li} 4559*5ddc57e5SXin Li 4560*5ddc57e5SXin Lichar * 4561*5ddc57e5SXin Lixstrdup (const char *string) 4562*5ddc57e5SXin Li{ 4563*5ddc57e5SXin Li return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564*5ddc57e5SXin Li string) : NULL; 4565*5ddc57e5SXin Li} 4566*5ddc57e5SXin Li 4567*5ddc57e5SXin Liconst char * 4568*5ddc57e5SXin Libase_name (const char *name) 4569*5ddc57e5SXin Li{ 4570*5ddc57e5SXin Li const char *base; 4571*5ddc57e5SXin Li 4572*5ddc57e5SXin Li#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573*5ddc57e5SXin Li /* Skip over the disk name in MSDOS pathnames. */ 4574*5ddc57e5SXin Li if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575*5ddc57e5SXin Li name += 2; 4576*5ddc57e5SXin Li#endif 4577*5ddc57e5SXin Li 4578*5ddc57e5SXin Li for (base = name; *name; name++) 4579*5ddc57e5SXin Li if (IS_DIR_SEPARATOR (*name)) 4580*5ddc57e5SXin Li base = name + 1; 4581*5ddc57e5SXin Li return base; 4582*5ddc57e5SXin Li} 4583*5ddc57e5SXin Li 4584*5ddc57e5SXin Liint 4585*5ddc57e5SXin Licheck_executable (const char *path) 4586*5ddc57e5SXin Li{ 4587*5ddc57e5SXin Li struct stat st; 4588*5ddc57e5SXin Li 4589*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 4590*5ddc57e5SXin Li nonempty (path)); 4591*5ddc57e5SXin Li if ((!path) || (!*path)) 4592*5ddc57e5SXin Li return 0; 4593*5ddc57e5SXin Li 4594*5ddc57e5SXin Li if ((stat (path, &st) >= 0) 4595*5ddc57e5SXin Li && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596*5ddc57e5SXin Li return 1; 4597*5ddc57e5SXin Li else 4598*5ddc57e5SXin Li return 0; 4599*5ddc57e5SXin Li} 4600*5ddc57e5SXin Li 4601*5ddc57e5SXin Liint 4602*5ddc57e5SXin Limake_executable (const char *path) 4603*5ddc57e5SXin Li{ 4604*5ddc57e5SXin Li int rval = 0; 4605*5ddc57e5SXin Li struct stat st; 4606*5ddc57e5SXin Li 4607*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 4608*5ddc57e5SXin Li nonempty (path)); 4609*5ddc57e5SXin Li if ((!path) || (!*path)) 4610*5ddc57e5SXin Li return 0; 4611*5ddc57e5SXin Li 4612*5ddc57e5SXin Li if (stat (path, &st) >= 0) 4613*5ddc57e5SXin Li { 4614*5ddc57e5SXin Li rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615*5ddc57e5SXin Li } 4616*5ddc57e5SXin Li return rval; 4617*5ddc57e5SXin Li} 4618*5ddc57e5SXin Li 4619*5ddc57e5SXin Li/* Searches for the full path of the wrapper. Returns 4620*5ddc57e5SXin Li newly allocated full path name if found, NULL otherwise 4621*5ddc57e5SXin Li Does not chase symlinks, even on platforms that support them. 4622*5ddc57e5SXin Li*/ 4623*5ddc57e5SXin Lichar * 4624*5ddc57e5SXin Lifind_executable (const char *wrapper) 4625*5ddc57e5SXin Li{ 4626*5ddc57e5SXin Li int has_slash = 0; 4627*5ddc57e5SXin Li const char *p; 4628*5ddc57e5SXin Li const char *p_next; 4629*5ddc57e5SXin Li /* static buffer for getcwd */ 4630*5ddc57e5SXin Li char tmp[LT_PATHMAX + 1]; 4631*5ddc57e5SXin Li int tmp_len; 4632*5ddc57e5SXin Li char *concat_name; 4633*5ddc57e5SXin Li 4634*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 4635*5ddc57e5SXin Li nonempty (wrapper)); 4636*5ddc57e5SXin Li 4637*5ddc57e5SXin Li if ((wrapper == NULL) || (*wrapper == '\0')) 4638*5ddc57e5SXin Li return NULL; 4639*5ddc57e5SXin Li 4640*5ddc57e5SXin Li /* Absolute path? */ 4641*5ddc57e5SXin Li#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642*5ddc57e5SXin Li if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643*5ddc57e5SXin Li { 4644*5ddc57e5SXin Li concat_name = xstrdup (wrapper); 4645*5ddc57e5SXin Li if (check_executable (concat_name)) 4646*5ddc57e5SXin Li return concat_name; 4647*5ddc57e5SXin Li XFREE (concat_name); 4648*5ddc57e5SXin Li } 4649*5ddc57e5SXin Li else 4650*5ddc57e5SXin Li { 4651*5ddc57e5SXin Li#endif 4652*5ddc57e5SXin Li if (IS_DIR_SEPARATOR (wrapper[0])) 4653*5ddc57e5SXin Li { 4654*5ddc57e5SXin Li concat_name = xstrdup (wrapper); 4655*5ddc57e5SXin Li if (check_executable (concat_name)) 4656*5ddc57e5SXin Li return concat_name; 4657*5ddc57e5SXin Li XFREE (concat_name); 4658*5ddc57e5SXin Li } 4659*5ddc57e5SXin Li#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660*5ddc57e5SXin Li } 4661*5ddc57e5SXin Li#endif 4662*5ddc57e5SXin Li 4663*5ddc57e5SXin Li for (p = wrapper; *p; p++) 4664*5ddc57e5SXin Li if (*p == '/') 4665*5ddc57e5SXin Li { 4666*5ddc57e5SXin Li has_slash = 1; 4667*5ddc57e5SXin Li break; 4668*5ddc57e5SXin Li } 4669*5ddc57e5SXin Li if (!has_slash) 4670*5ddc57e5SXin Li { 4671*5ddc57e5SXin Li /* no slashes; search PATH */ 4672*5ddc57e5SXin Li const char *path = getenv ("PATH"); 4673*5ddc57e5SXin Li if (path != NULL) 4674*5ddc57e5SXin Li { 4675*5ddc57e5SXin Li for (p = path; *p; p = p_next) 4676*5ddc57e5SXin Li { 4677*5ddc57e5SXin Li const char *q; 4678*5ddc57e5SXin Li size_t p_len; 4679*5ddc57e5SXin Li for (q = p; *q; q++) 4680*5ddc57e5SXin Li if (IS_PATH_SEPARATOR (*q)) 4681*5ddc57e5SXin Li break; 4682*5ddc57e5SXin Li p_len = q - p; 4683*5ddc57e5SXin Li p_next = (*q == '\0' ? q : q + 1); 4684*5ddc57e5SXin Li if (p_len == 0) 4685*5ddc57e5SXin Li { 4686*5ddc57e5SXin Li /* empty path: current directory */ 4687*5ddc57e5SXin Li if (getcwd (tmp, LT_PATHMAX) == NULL) 4688*5ddc57e5SXin Li lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4689*5ddc57e5SXin Li nonnull (strerror (errno))); 4690*5ddc57e5SXin Li tmp_len = strlen (tmp); 4691*5ddc57e5SXin Li concat_name = 4692*5ddc57e5SXin Li XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693*5ddc57e5SXin Li memcpy (concat_name, tmp, tmp_len); 4694*5ddc57e5SXin Li concat_name[tmp_len] = '/'; 4695*5ddc57e5SXin Li strcpy (concat_name + tmp_len + 1, wrapper); 4696*5ddc57e5SXin Li } 4697*5ddc57e5SXin Li else 4698*5ddc57e5SXin Li { 4699*5ddc57e5SXin Li concat_name = 4700*5ddc57e5SXin Li XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701*5ddc57e5SXin Li memcpy (concat_name, p, p_len); 4702*5ddc57e5SXin Li concat_name[p_len] = '/'; 4703*5ddc57e5SXin Li strcpy (concat_name + p_len + 1, wrapper); 4704*5ddc57e5SXin Li } 4705*5ddc57e5SXin Li if (check_executable (concat_name)) 4706*5ddc57e5SXin Li return concat_name; 4707*5ddc57e5SXin Li XFREE (concat_name); 4708*5ddc57e5SXin Li } 4709*5ddc57e5SXin Li } 4710*5ddc57e5SXin Li /* not found in PATH; assume curdir */ 4711*5ddc57e5SXin Li } 4712*5ddc57e5SXin Li /* Relative path | not found in path: prepend cwd */ 4713*5ddc57e5SXin Li if (getcwd (tmp, LT_PATHMAX) == NULL) 4714*5ddc57e5SXin Li lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4715*5ddc57e5SXin Li nonnull (strerror (errno))); 4716*5ddc57e5SXin Li tmp_len = strlen (tmp); 4717*5ddc57e5SXin Li concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718*5ddc57e5SXin Li memcpy (concat_name, tmp, tmp_len); 4719*5ddc57e5SXin Li concat_name[tmp_len] = '/'; 4720*5ddc57e5SXin Li strcpy (concat_name + tmp_len + 1, wrapper); 4721*5ddc57e5SXin Li 4722*5ddc57e5SXin Li if (check_executable (concat_name)) 4723*5ddc57e5SXin Li return concat_name; 4724*5ddc57e5SXin Li XFREE (concat_name); 4725*5ddc57e5SXin Li return NULL; 4726*5ddc57e5SXin Li} 4727*5ddc57e5SXin Li 4728*5ddc57e5SXin Lichar * 4729*5ddc57e5SXin Lichase_symlinks (const char *pathspec) 4730*5ddc57e5SXin Li{ 4731*5ddc57e5SXin Li#ifndef S_ISLNK 4732*5ddc57e5SXin Li return xstrdup (pathspec); 4733*5ddc57e5SXin Li#else 4734*5ddc57e5SXin Li char buf[LT_PATHMAX]; 4735*5ddc57e5SXin Li struct stat s; 4736*5ddc57e5SXin Li char *tmp_pathspec = xstrdup (pathspec); 4737*5ddc57e5SXin Li char *p; 4738*5ddc57e5SXin Li int has_symlinks = 0; 4739*5ddc57e5SXin Li while (strlen (tmp_pathspec) && !has_symlinks) 4740*5ddc57e5SXin Li { 4741*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, 4742*5ddc57e5SXin Li "checking path component for symlinks: %s\n", 4743*5ddc57e5SXin Li tmp_pathspec); 4744*5ddc57e5SXin Li if (lstat (tmp_pathspec, &s) == 0) 4745*5ddc57e5SXin Li { 4746*5ddc57e5SXin Li if (S_ISLNK (s.st_mode) != 0) 4747*5ddc57e5SXin Li { 4748*5ddc57e5SXin Li has_symlinks = 1; 4749*5ddc57e5SXin Li break; 4750*5ddc57e5SXin Li } 4751*5ddc57e5SXin Li 4752*5ddc57e5SXin Li /* search backwards for last DIR_SEPARATOR */ 4753*5ddc57e5SXin Li p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754*5ddc57e5SXin Li while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755*5ddc57e5SXin Li p--; 4756*5ddc57e5SXin Li if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757*5ddc57e5SXin Li { 4758*5ddc57e5SXin Li /* no more DIR_SEPARATORS left */ 4759*5ddc57e5SXin Li break; 4760*5ddc57e5SXin Li } 4761*5ddc57e5SXin Li *p = '\0'; 4762*5ddc57e5SXin Li } 4763*5ddc57e5SXin Li else 4764*5ddc57e5SXin Li { 4765*5ddc57e5SXin Li lt_fatal (__FILE__, __LINE__, 4766*5ddc57e5SXin Li "error accessing file \"%s\": %s", 4767*5ddc57e5SXin Li tmp_pathspec, nonnull (strerror (errno))); 4768*5ddc57e5SXin Li } 4769*5ddc57e5SXin Li } 4770*5ddc57e5SXin Li XFREE (tmp_pathspec); 4771*5ddc57e5SXin Li 4772*5ddc57e5SXin Li if (!has_symlinks) 4773*5ddc57e5SXin Li { 4774*5ddc57e5SXin Li return xstrdup (pathspec); 4775*5ddc57e5SXin Li } 4776*5ddc57e5SXin Li 4777*5ddc57e5SXin Li tmp_pathspec = realpath (pathspec, buf); 4778*5ddc57e5SXin Li if (tmp_pathspec == 0) 4779*5ddc57e5SXin Li { 4780*5ddc57e5SXin Li lt_fatal (__FILE__, __LINE__, 4781*5ddc57e5SXin Li "could not follow symlinks for %s", pathspec); 4782*5ddc57e5SXin Li } 4783*5ddc57e5SXin Li return xstrdup (tmp_pathspec); 4784*5ddc57e5SXin Li#endif 4785*5ddc57e5SXin Li} 4786*5ddc57e5SXin Li 4787*5ddc57e5SXin Lichar * 4788*5ddc57e5SXin Listrendzap (char *str, const char *pat) 4789*5ddc57e5SXin Li{ 4790*5ddc57e5SXin Li size_t len, patlen; 4791*5ddc57e5SXin Li 4792*5ddc57e5SXin Li assert (str != NULL); 4793*5ddc57e5SXin Li assert (pat != NULL); 4794*5ddc57e5SXin Li 4795*5ddc57e5SXin Li len = strlen (str); 4796*5ddc57e5SXin Li patlen = strlen (pat); 4797*5ddc57e5SXin Li 4798*5ddc57e5SXin Li if (patlen <= len) 4799*5ddc57e5SXin Li { 4800*5ddc57e5SXin Li str += len - patlen; 4801*5ddc57e5SXin Li if (strcmp (str, pat) == 0) 4802*5ddc57e5SXin Li *str = '\0'; 4803*5ddc57e5SXin Li } 4804*5ddc57e5SXin Li return str; 4805*5ddc57e5SXin Li} 4806*5ddc57e5SXin Li 4807*5ddc57e5SXin Livoid 4808*5ddc57e5SXin Lilt_debugprintf (const char *file, int line, const char *fmt, ...) 4809*5ddc57e5SXin Li{ 4810*5ddc57e5SXin Li va_list args; 4811*5ddc57e5SXin Li if (lt_debug) 4812*5ddc57e5SXin Li { 4813*5ddc57e5SXin Li (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4814*5ddc57e5SXin Li va_start (args, fmt); 4815*5ddc57e5SXin Li (void) vfprintf (stderr, fmt, args); 4816*5ddc57e5SXin Li va_end (args); 4817*5ddc57e5SXin Li } 4818*5ddc57e5SXin Li} 4819*5ddc57e5SXin Li 4820*5ddc57e5SXin Listatic void 4821*5ddc57e5SXin Lilt_error_core (int exit_status, const char *file, 4822*5ddc57e5SXin Li int line, const char *mode, 4823*5ddc57e5SXin Li const char *message, va_list ap) 4824*5ddc57e5SXin Li{ 4825*5ddc57e5SXin Li fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826*5ddc57e5SXin Li vfprintf (stderr, message, ap); 4827*5ddc57e5SXin Li fprintf (stderr, ".\n"); 4828*5ddc57e5SXin Li 4829*5ddc57e5SXin Li if (exit_status >= 0) 4830*5ddc57e5SXin Li exit (exit_status); 4831*5ddc57e5SXin Li} 4832*5ddc57e5SXin Li 4833*5ddc57e5SXin Livoid 4834*5ddc57e5SXin Lilt_fatal (const char *file, int line, const char *message, ...) 4835*5ddc57e5SXin Li{ 4836*5ddc57e5SXin Li va_list ap; 4837*5ddc57e5SXin Li va_start (ap, message); 4838*5ddc57e5SXin Li lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839*5ddc57e5SXin Li va_end (ap); 4840*5ddc57e5SXin Li} 4841*5ddc57e5SXin Li 4842*5ddc57e5SXin Listatic const char * 4843*5ddc57e5SXin Linonnull (const char *s) 4844*5ddc57e5SXin Li{ 4845*5ddc57e5SXin Li return s ? s : "(null)"; 4846*5ddc57e5SXin Li} 4847*5ddc57e5SXin Li 4848*5ddc57e5SXin Listatic const char * 4849*5ddc57e5SXin Linonempty (const char *s) 4850*5ddc57e5SXin Li{ 4851*5ddc57e5SXin Li return (s && !*s) ? "(empty)" : nonnull (s); 4852*5ddc57e5SXin Li} 4853*5ddc57e5SXin Li 4854*5ddc57e5SXin Livoid 4855*5ddc57e5SXin Lilt_setenv (const char *name, const char *value) 4856*5ddc57e5SXin Li{ 4857*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, 4858*5ddc57e5SXin Li "(lt_setenv) setting '%s' to '%s'\n", 4859*5ddc57e5SXin Li nonnull (name), nonnull (value)); 4860*5ddc57e5SXin Li { 4861*5ddc57e5SXin Li#ifdef HAVE_SETENV 4862*5ddc57e5SXin Li /* always make a copy, for consistency with !HAVE_SETENV */ 4863*5ddc57e5SXin Li char *str = xstrdup (value); 4864*5ddc57e5SXin Li setenv (name, str, 1); 4865*5ddc57e5SXin Li#else 4866*5ddc57e5SXin Li int len = strlen (name) + 1 + strlen (value) + 1; 4867*5ddc57e5SXin Li char *str = XMALLOC (char, len); 4868*5ddc57e5SXin Li sprintf (str, "%s=%s", name, value); 4869*5ddc57e5SXin Li if (putenv (str) != EXIT_SUCCESS) 4870*5ddc57e5SXin Li { 4871*5ddc57e5SXin Li XFREE (str); 4872*5ddc57e5SXin Li } 4873*5ddc57e5SXin Li#endif 4874*5ddc57e5SXin Li } 4875*5ddc57e5SXin Li} 4876*5ddc57e5SXin Li 4877*5ddc57e5SXin Lichar * 4878*5ddc57e5SXin Lilt_extend_str (const char *orig_value, const char *add, int to_end) 4879*5ddc57e5SXin Li{ 4880*5ddc57e5SXin Li char *new_value; 4881*5ddc57e5SXin Li if (orig_value && *orig_value) 4882*5ddc57e5SXin Li { 4883*5ddc57e5SXin Li int orig_value_len = strlen (orig_value); 4884*5ddc57e5SXin Li int add_len = strlen (add); 4885*5ddc57e5SXin Li new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886*5ddc57e5SXin Li if (to_end) 4887*5ddc57e5SXin Li { 4888*5ddc57e5SXin Li strcpy (new_value, orig_value); 4889*5ddc57e5SXin Li strcpy (new_value + orig_value_len, add); 4890*5ddc57e5SXin Li } 4891*5ddc57e5SXin Li else 4892*5ddc57e5SXin Li { 4893*5ddc57e5SXin Li strcpy (new_value, add); 4894*5ddc57e5SXin Li strcpy (new_value + add_len, orig_value); 4895*5ddc57e5SXin Li } 4896*5ddc57e5SXin Li } 4897*5ddc57e5SXin Li else 4898*5ddc57e5SXin Li { 4899*5ddc57e5SXin Li new_value = xstrdup (add); 4900*5ddc57e5SXin Li } 4901*5ddc57e5SXin Li return new_value; 4902*5ddc57e5SXin Li} 4903*5ddc57e5SXin Li 4904*5ddc57e5SXin Livoid 4905*5ddc57e5SXin Lilt_update_exe_path (const char *name, const char *value) 4906*5ddc57e5SXin Li{ 4907*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, 4908*5ddc57e5SXin Li "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4909*5ddc57e5SXin Li nonnull (name), nonnull (value)); 4910*5ddc57e5SXin Li 4911*5ddc57e5SXin Li if (name && *name && value && *value) 4912*5ddc57e5SXin Li { 4913*5ddc57e5SXin Li char *new_value = lt_extend_str (getenv (name), value, 0); 4914*5ddc57e5SXin Li /* some systems can't cope with a ':'-terminated path #' */ 4915*5ddc57e5SXin Li int len = strlen (new_value); 4916*5ddc57e5SXin Li while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917*5ddc57e5SXin Li { 4918*5ddc57e5SXin Li new_value[len-1] = '\0'; 4919*5ddc57e5SXin Li } 4920*5ddc57e5SXin Li lt_setenv (name, new_value); 4921*5ddc57e5SXin Li XFREE (new_value); 4922*5ddc57e5SXin Li } 4923*5ddc57e5SXin Li} 4924*5ddc57e5SXin Li 4925*5ddc57e5SXin Livoid 4926*5ddc57e5SXin Lilt_update_lib_path (const char *name, const char *value) 4927*5ddc57e5SXin Li{ 4928*5ddc57e5SXin Li lt_debugprintf (__FILE__, __LINE__, 4929*5ddc57e5SXin Li "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4930*5ddc57e5SXin Li nonnull (name), nonnull (value)); 4931*5ddc57e5SXin Li 4932*5ddc57e5SXin Li if (name && *name && value && *value) 4933*5ddc57e5SXin Li { 4934*5ddc57e5SXin Li char *new_value = lt_extend_str (getenv (name), value, 0); 4935*5ddc57e5SXin Li lt_setenv (name, new_value); 4936*5ddc57e5SXin Li XFREE (new_value); 4937*5ddc57e5SXin Li } 4938*5ddc57e5SXin Li} 4939*5ddc57e5SXin Li 4940*5ddc57e5SXin LiEOF 4941*5ddc57e5SXin Li case $host_os in 4942*5ddc57e5SXin Li mingw*) 4943*5ddc57e5SXin Li cat <<"EOF" 4944*5ddc57e5SXin Li 4945*5ddc57e5SXin Li/* Prepares an argument vector before calling spawn(). 4946*5ddc57e5SXin Li Note that spawn() does not by itself call the command interpreter 4947*5ddc57e5SXin Li (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4948*5ddc57e5SXin Li ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4949*5ddc57e5SXin Li GetVersionEx(&v); 4950*5ddc57e5SXin Li v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4951*5ddc57e5SXin Li }) ? "cmd.exe" : "command.com"). 4952*5ddc57e5SXin Li Instead it simply concatenates the arguments, separated by ' ', and calls 4953*5ddc57e5SXin Li CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4954*5ddc57e5SXin Li interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4955*5ddc57e5SXin Li special way: 4956*5ddc57e5SXin Li - Space and tab are interpreted as delimiters. They are not treated as 4957*5ddc57e5SXin Li delimiters if they are surrounded by double quotes: "...". 4958*5ddc57e5SXin Li - Unescaped double quotes are removed from the input. Their only effect is 4959*5ddc57e5SXin Li that within double quotes, space and tab are treated like normal 4960*5ddc57e5SXin Li characters. 4961*5ddc57e5SXin Li - Backslashes not followed by double quotes are not special. 4962*5ddc57e5SXin Li - But 2*n+1 backslashes followed by a double quote become 4963*5ddc57e5SXin Li n backslashes followed by a double quote (n >= 0): 4964*5ddc57e5SXin Li \" -> " 4965*5ddc57e5SXin Li \\\" -> \" 4966*5ddc57e5SXin Li \\\\\" -> \\" 4967*5ddc57e5SXin Li */ 4968*5ddc57e5SXin Li#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" 4969*5ddc57e5SXin Li#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" 4970*5ddc57e5SXin Lichar ** 4971*5ddc57e5SXin Liprepare_spawn (char **argv) 4972*5ddc57e5SXin Li{ 4973*5ddc57e5SXin Li size_t argc; 4974*5ddc57e5SXin Li char **new_argv; 4975*5ddc57e5SXin Li size_t i; 4976*5ddc57e5SXin Li 4977*5ddc57e5SXin Li /* Count number of arguments. */ 4978*5ddc57e5SXin Li for (argc = 0; argv[argc] != NULL; argc++) 4979*5ddc57e5SXin Li ; 4980*5ddc57e5SXin Li 4981*5ddc57e5SXin Li /* Allocate new argument vector. */ 4982*5ddc57e5SXin Li new_argv = XMALLOC (char *, argc + 1); 4983*5ddc57e5SXin Li 4984*5ddc57e5SXin Li /* Put quoted arguments into the new argument vector. */ 4985*5ddc57e5SXin Li for (i = 0; i < argc; i++) 4986*5ddc57e5SXin Li { 4987*5ddc57e5SXin Li const char *string = argv[i]; 4988*5ddc57e5SXin Li 4989*5ddc57e5SXin Li if (string[0] == '\0') 4990*5ddc57e5SXin Li new_argv[i] = xstrdup ("\"\""); 4991*5ddc57e5SXin Li else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4992*5ddc57e5SXin Li { 4993*5ddc57e5SXin Li int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4994*5ddc57e5SXin Li size_t length; 4995*5ddc57e5SXin Li unsigned int backslashes; 4996*5ddc57e5SXin Li const char *s; 4997*5ddc57e5SXin Li char *quoted_string; 4998*5ddc57e5SXin Li char *p; 4999*5ddc57e5SXin Li 5000*5ddc57e5SXin Li length = 0; 5001*5ddc57e5SXin Li backslashes = 0; 5002*5ddc57e5SXin Li if (quote_around) 5003*5ddc57e5SXin Li length++; 5004*5ddc57e5SXin Li for (s = string; *s != '\0'; s++) 5005*5ddc57e5SXin Li { 5006*5ddc57e5SXin Li char c = *s; 5007*5ddc57e5SXin Li if (c == '"') 5008*5ddc57e5SXin Li length += backslashes + 1; 5009*5ddc57e5SXin Li length++; 5010*5ddc57e5SXin Li if (c == '\\') 5011*5ddc57e5SXin Li backslashes++; 5012*5ddc57e5SXin Li else 5013*5ddc57e5SXin Li backslashes = 0; 5014*5ddc57e5SXin Li } 5015*5ddc57e5SXin Li if (quote_around) 5016*5ddc57e5SXin Li length += backslashes + 1; 5017*5ddc57e5SXin Li 5018*5ddc57e5SXin Li quoted_string = XMALLOC (char, length + 1); 5019*5ddc57e5SXin Li 5020*5ddc57e5SXin Li p = quoted_string; 5021*5ddc57e5SXin Li backslashes = 0; 5022*5ddc57e5SXin Li if (quote_around) 5023*5ddc57e5SXin Li *p++ = '"'; 5024*5ddc57e5SXin Li for (s = string; *s != '\0'; s++) 5025*5ddc57e5SXin Li { 5026*5ddc57e5SXin Li char c = *s; 5027*5ddc57e5SXin Li if (c == '"') 5028*5ddc57e5SXin Li { 5029*5ddc57e5SXin Li unsigned int j; 5030*5ddc57e5SXin Li for (j = backslashes + 1; j > 0; j--) 5031*5ddc57e5SXin Li *p++ = '\\'; 5032*5ddc57e5SXin Li } 5033*5ddc57e5SXin Li *p++ = c; 5034*5ddc57e5SXin Li if (c == '\\') 5035*5ddc57e5SXin Li backslashes++; 5036*5ddc57e5SXin Li else 5037*5ddc57e5SXin Li backslashes = 0; 5038*5ddc57e5SXin Li } 5039*5ddc57e5SXin Li if (quote_around) 5040*5ddc57e5SXin Li { 5041*5ddc57e5SXin Li unsigned int j; 5042*5ddc57e5SXin Li for (j = backslashes; j > 0; j--) 5043*5ddc57e5SXin Li *p++ = '\\'; 5044*5ddc57e5SXin Li *p++ = '"'; 5045*5ddc57e5SXin Li } 5046*5ddc57e5SXin Li *p = '\0'; 5047*5ddc57e5SXin Li 5048*5ddc57e5SXin Li new_argv[i] = quoted_string; 5049*5ddc57e5SXin Li } 5050*5ddc57e5SXin Li else 5051*5ddc57e5SXin Li new_argv[i] = (char *) string; 5052*5ddc57e5SXin Li } 5053*5ddc57e5SXin Li new_argv[argc] = NULL; 5054*5ddc57e5SXin Li 5055*5ddc57e5SXin Li return new_argv; 5056*5ddc57e5SXin Li} 5057*5ddc57e5SXin LiEOF 5058*5ddc57e5SXin Li ;; 5059*5ddc57e5SXin Li esac 5060*5ddc57e5SXin Li 5061*5ddc57e5SXin Li cat <<"EOF" 5062*5ddc57e5SXin Livoid lt_dump_script (FILE* f) 5063*5ddc57e5SXin Li{ 5064*5ddc57e5SXin LiEOF 5065*5ddc57e5SXin Li func_emit_wrapper yes | 5066*5ddc57e5SXin Li $SED -n -e ' 5067*5ddc57e5SXin Lis/^\(.\{79\}\)\(..*\)/\1\ 5068*5ddc57e5SXin Li\2/ 5069*5ddc57e5SXin Lih 5070*5ddc57e5SXin Lis/\([\\"]\)/\\\1/g 5071*5ddc57e5SXin Lis/$/\\n/ 5072*5ddc57e5SXin Lis/\([^\n]*\).*/ fputs ("\1", f);/p 5073*5ddc57e5SXin Lig 5074*5ddc57e5SXin LiD' 5075*5ddc57e5SXin Li cat <<"EOF" 5076*5ddc57e5SXin Li} 5077*5ddc57e5SXin LiEOF 5078*5ddc57e5SXin Li} 5079*5ddc57e5SXin Li# end: func_emit_cwrapperexe_src 5080*5ddc57e5SXin Li 5081*5ddc57e5SXin Li# func_win32_import_lib_p ARG 5082*5ddc57e5SXin Li# True if ARG is an import lib, as indicated by $file_magic_cmd 5083*5ddc57e5SXin Lifunc_win32_import_lib_p () 5084*5ddc57e5SXin Li{ 5085*5ddc57e5SXin Li $opt_debug 5086*5ddc57e5SXin Li case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 5087*5ddc57e5SXin Li *import*) : ;; 5088*5ddc57e5SXin Li *) false ;; 5089*5ddc57e5SXin Li esac 5090*5ddc57e5SXin Li} 5091*5ddc57e5SXin Li 5092*5ddc57e5SXin Li# func_mode_link arg... 5093*5ddc57e5SXin Lifunc_mode_link () 5094*5ddc57e5SXin Li{ 5095*5ddc57e5SXin Li $opt_debug 5096*5ddc57e5SXin Li case $host in 5097*5ddc57e5SXin Li *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098*5ddc57e5SXin Li # It is impossible to link a dll without this setting, and 5099*5ddc57e5SXin Li # we shouldn't force the makefile maintainer to figure out 5100*5ddc57e5SXin Li # which system we are compiling for in order to pass an extra 5101*5ddc57e5SXin Li # flag for every libtool invocation. 5102*5ddc57e5SXin Li # allow_undefined=no 5103*5ddc57e5SXin Li 5104*5ddc57e5SXin Li # FIXME: Unfortunately, there are problems with the above when trying 5105*5ddc57e5SXin Li # to make a dll which has undefined symbols, in which case not 5106*5ddc57e5SXin Li # even a static library is built. For now, we need to specify 5107*5ddc57e5SXin Li # -no-undefined on the libtool link line when we can be certain 5108*5ddc57e5SXin Li # that all symbols are satisfied, otherwise we get a static library. 5109*5ddc57e5SXin Li allow_undefined=yes 5110*5ddc57e5SXin Li ;; 5111*5ddc57e5SXin Li *) 5112*5ddc57e5SXin Li allow_undefined=yes 5113*5ddc57e5SXin Li ;; 5114*5ddc57e5SXin Li esac 5115*5ddc57e5SXin Li libtool_args=$nonopt 5116*5ddc57e5SXin Li base_compile="$nonopt $@" 5117*5ddc57e5SXin Li compile_command=$nonopt 5118*5ddc57e5SXin Li finalize_command=$nonopt 5119*5ddc57e5SXin Li 5120*5ddc57e5SXin Li compile_rpath= 5121*5ddc57e5SXin Li finalize_rpath= 5122*5ddc57e5SXin Li compile_shlibpath= 5123*5ddc57e5SXin Li finalize_shlibpath= 5124*5ddc57e5SXin Li convenience= 5125*5ddc57e5SXin Li old_convenience= 5126*5ddc57e5SXin Li deplibs= 5127*5ddc57e5SXin Li old_deplibs= 5128*5ddc57e5SXin Li compiler_flags= 5129*5ddc57e5SXin Li linker_flags= 5130*5ddc57e5SXin Li dllsearchpath= 5131*5ddc57e5SXin Li lib_search_path=`pwd` 5132*5ddc57e5SXin Li inst_prefix_dir= 5133*5ddc57e5SXin Li new_inherited_linker_flags= 5134*5ddc57e5SXin Li 5135*5ddc57e5SXin Li avoid_version=no 5136*5ddc57e5SXin Li bindir= 5137*5ddc57e5SXin Li dlfiles= 5138*5ddc57e5SXin Li dlprefiles= 5139*5ddc57e5SXin Li dlself=no 5140*5ddc57e5SXin Li export_dynamic=no 5141*5ddc57e5SXin Li export_symbols= 5142*5ddc57e5SXin Li export_symbols_regex= 5143*5ddc57e5SXin Li generated= 5144*5ddc57e5SXin Li libobjs= 5145*5ddc57e5SXin Li ltlibs= 5146*5ddc57e5SXin Li module=no 5147*5ddc57e5SXin Li no_install=no 5148*5ddc57e5SXin Li objs= 5149*5ddc57e5SXin Li non_pic_objects= 5150*5ddc57e5SXin Li precious_files_regex= 5151*5ddc57e5SXin Li prefer_static_libs=no 5152*5ddc57e5SXin Li preload=no 5153*5ddc57e5SXin Li prev= 5154*5ddc57e5SXin Li prevarg= 5155*5ddc57e5SXin Li release= 5156*5ddc57e5SXin Li rpath= 5157*5ddc57e5SXin Li xrpath= 5158*5ddc57e5SXin Li perm_rpath= 5159*5ddc57e5SXin Li temp_rpath= 5160*5ddc57e5SXin Li thread_safe=no 5161*5ddc57e5SXin Li vinfo= 5162*5ddc57e5SXin Li vinfo_number=no 5163*5ddc57e5SXin Li weak_libs= 5164*5ddc57e5SXin Li single_module="${wl}-single_module" 5165*5ddc57e5SXin Li func_infer_tag $base_compile 5166*5ddc57e5SXin Li 5167*5ddc57e5SXin Li # We need to know -static, to get the right output filenames. 5168*5ddc57e5SXin Li for arg 5169*5ddc57e5SXin Li do 5170*5ddc57e5SXin Li case $arg in 5171*5ddc57e5SXin Li -shared) 5172*5ddc57e5SXin Li test "$build_libtool_libs" != yes && \ 5173*5ddc57e5SXin Li func_fatal_configuration "can not build a shared library" 5174*5ddc57e5SXin Li build_old_libs=no 5175*5ddc57e5SXin Li break 5176*5ddc57e5SXin Li ;; 5177*5ddc57e5SXin Li -all-static | -static | -static-libtool-libs) 5178*5ddc57e5SXin Li case $arg in 5179*5ddc57e5SXin Li -all-static) 5180*5ddc57e5SXin Li if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181*5ddc57e5SXin Li func_warning "complete static linking is impossible in this configuration" 5182*5ddc57e5SXin Li fi 5183*5ddc57e5SXin Li if test -n "$link_static_flag"; then 5184*5ddc57e5SXin Li dlopen_self=$dlopen_self_static 5185*5ddc57e5SXin Li fi 5186*5ddc57e5SXin Li prefer_static_libs=yes 5187*5ddc57e5SXin Li ;; 5188*5ddc57e5SXin Li -static) 5189*5ddc57e5SXin Li if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190*5ddc57e5SXin Li dlopen_self=$dlopen_self_static 5191*5ddc57e5SXin Li fi 5192*5ddc57e5SXin Li prefer_static_libs=built 5193*5ddc57e5SXin Li ;; 5194*5ddc57e5SXin Li -static-libtool-libs) 5195*5ddc57e5SXin Li if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196*5ddc57e5SXin Li dlopen_self=$dlopen_self_static 5197*5ddc57e5SXin Li fi 5198*5ddc57e5SXin Li prefer_static_libs=yes 5199*5ddc57e5SXin Li ;; 5200*5ddc57e5SXin Li esac 5201*5ddc57e5SXin Li build_libtool_libs=no 5202*5ddc57e5SXin Li build_old_libs=yes 5203*5ddc57e5SXin Li break 5204*5ddc57e5SXin Li ;; 5205*5ddc57e5SXin Li esac 5206*5ddc57e5SXin Li done 5207*5ddc57e5SXin Li 5208*5ddc57e5SXin Li # See if our shared archives depend on static archives. 5209*5ddc57e5SXin Li test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5210*5ddc57e5SXin Li 5211*5ddc57e5SXin Li # Go through the arguments, transforming them on the way. 5212*5ddc57e5SXin Li while test "$#" -gt 0; do 5213*5ddc57e5SXin Li arg="$1" 5214*5ddc57e5SXin Li shift 5215*5ddc57e5SXin Li func_quote_for_eval "$arg" 5216*5ddc57e5SXin Li qarg=$func_quote_for_eval_unquoted_result 5217*5ddc57e5SXin Li func_append libtool_args " $func_quote_for_eval_result" 5218*5ddc57e5SXin Li 5219*5ddc57e5SXin Li # If the previous option needs an argument, assign it. 5220*5ddc57e5SXin Li if test -n "$prev"; then 5221*5ddc57e5SXin Li case $prev in 5222*5ddc57e5SXin Li output) 5223*5ddc57e5SXin Li func_append compile_command " @OUTPUT@" 5224*5ddc57e5SXin Li func_append finalize_command " @OUTPUT@" 5225*5ddc57e5SXin Li ;; 5226*5ddc57e5SXin Li esac 5227*5ddc57e5SXin Li 5228*5ddc57e5SXin Li case $prev in 5229*5ddc57e5SXin Li bindir) 5230*5ddc57e5SXin Li bindir="$arg" 5231*5ddc57e5SXin Li prev= 5232*5ddc57e5SXin Li continue 5233*5ddc57e5SXin Li ;; 5234*5ddc57e5SXin Li dlfiles|dlprefiles) 5235*5ddc57e5SXin Li if test "$preload" = no; then 5236*5ddc57e5SXin Li # Add the symbol object into the linking commands. 5237*5ddc57e5SXin Li func_append compile_command " @SYMFILE@" 5238*5ddc57e5SXin Li func_append finalize_command " @SYMFILE@" 5239*5ddc57e5SXin Li preload=yes 5240*5ddc57e5SXin Li fi 5241*5ddc57e5SXin Li case $arg in 5242*5ddc57e5SXin Li *.la | *.lo) ;; # We handle these cases below. 5243*5ddc57e5SXin Li force) 5244*5ddc57e5SXin Li if test "$dlself" = no; then 5245*5ddc57e5SXin Li dlself=needless 5246*5ddc57e5SXin Li export_dynamic=yes 5247*5ddc57e5SXin Li fi 5248*5ddc57e5SXin Li prev= 5249*5ddc57e5SXin Li continue 5250*5ddc57e5SXin Li ;; 5251*5ddc57e5SXin Li self) 5252*5ddc57e5SXin Li if test "$prev" = dlprefiles; then 5253*5ddc57e5SXin Li dlself=yes 5254*5ddc57e5SXin Li elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255*5ddc57e5SXin Li dlself=yes 5256*5ddc57e5SXin Li else 5257*5ddc57e5SXin Li dlself=needless 5258*5ddc57e5SXin Li export_dynamic=yes 5259*5ddc57e5SXin Li fi 5260*5ddc57e5SXin Li prev= 5261*5ddc57e5SXin Li continue 5262*5ddc57e5SXin Li ;; 5263*5ddc57e5SXin Li *) 5264*5ddc57e5SXin Li if test "$prev" = dlfiles; then 5265*5ddc57e5SXin Li func_append dlfiles " $arg" 5266*5ddc57e5SXin Li else 5267*5ddc57e5SXin Li func_append dlprefiles " $arg" 5268*5ddc57e5SXin Li fi 5269*5ddc57e5SXin Li prev= 5270*5ddc57e5SXin Li continue 5271*5ddc57e5SXin Li ;; 5272*5ddc57e5SXin Li esac 5273*5ddc57e5SXin Li ;; 5274*5ddc57e5SXin Li expsyms) 5275*5ddc57e5SXin Li export_symbols="$arg" 5276*5ddc57e5SXin Li test -f "$arg" \ 5277*5ddc57e5SXin Li || func_fatal_error "symbol file \`$arg' does not exist" 5278*5ddc57e5SXin Li prev= 5279*5ddc57e5SXin Li continue 5280*5ddc57e5SXin Li ;; 5281*5ddc57e5SXin Li expsyms_regex) 5282*5ddc57e5SXin Li export_symbols_regex="$arg" 5283*5ddc57e5SXin Li prev= 5284*5ddc57e5SXin Li continue 5285*5ddc57e5SXin Li ;; 5286*5ddc57e5SXin Li framework) 5287*5ddc57e5SXin Li case $host in 5288*5ddc57e5SXin Li *-*-darwin*) 5289*5ddc57e5SXin Li case "$deplibs " in 5290*5ddc57e5SXin Li *" $qarg.ltframework "*) ;; 5291*5ddc57e5SXin Li *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292*5ddc57e5SXin Li ;; 5293*5ddc57e5SXin Li esac 5294*5ddc57e5SXin Li ;; 5295*5ddc57e5SXin Li esac 5296*5ddc57e5SXin Li prev= 5297*5ddc57e5SXin Li continue 5298*5ddc57e5SXin Li ;; 5299*5ddc57e5SXin Li inst_prefix) 5300*5ddc57e5SXin Li inst_prefix_dir="$arg" 5301*5ddc57e5SXin Li prev= 5302*5ddc57e5SXin Li continue 5303*5ddc57e5SXin Li ;; 5304*5ddc57e5SXin Li objectlist) 5305*5ddc57e5SXin Li if test -f "$arg"; then 5306*5ddc57e5SXin Li save_arg=$arg 5307*5ddc57e5SXin Li moreargs= 5308*5ddc57e5SXin Li for fil in `cat "$save_arg"` 5309*5ddc57e5SXin Li do 5310*5ddc57e5SXin Li# func_append moreargs " $fil" 5311*5ddc57e5SXin Li arg=$fil 5312*5ddc57e5SXin Li # A libtool-controlled object. 5313*5ddc57e5SXin Li 5314*5ddc57e5SXin Li # Check to see that this really is a libtool object. 5315*5ddc57e5SXin Li if func_lalib_unsafe_p "$arg"; then 5316*5ddc57e5SXin Li pic_object= 5317*5ddc57e5SXin Li non_pic_object= 5318*5ddc57e5SXin Li 5319*5ddc57e5SXin Li # Read the .lo file 5320*5ddc57e5SXin Li func_source "$arg" 5321*5ddc57e5SXin Li 5322*5ddc57e5SXin Li if test -z "$pic_object" || 5323*5ddc57e5SXin Li test -z "$non_pic_object" || 5324*5ddc57e5SXin Li test "$pic_object" = none && 5325*5ddc57e5SXin Li test "$non_pic_object" = none; then 5326*5ddc57e5SXin Li func_fatal_error "cannot find name of object for \`$arg'" 5327*5ddc57e5SXin Li fi 5328*5ddc57e5SXin Li 5329*5ddc57e5SXin Li # Extract subdirectory from the argument. 5330*5ddc57e5SXin Li func_dirname "$arg" "/" "" 5331*5ddc57e5SXin Li xdir="$func_dirname_result" 5332*5ddc57e5SXin Li 5333*5ddc57e5SXin Li if test "$pic_object" != none; then 5334*5ddc57e5SXin Li # Prepend the subdirectory the object is found in. 5335*5ddc57e5SXin Li pic_object="$xdir$pic_object" 5336*5ddc57e5SXin Li 5337*5ddc57e5SXin Li if test "$prev" = dlfiles; then 5338*5ddc57e5SXin Li if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5339*5ddc57e5SXin Li func_append dlfiles " $pic_object" 5340*5ddc57e5SXin Li prev= 5341*5ddc57e5SXin Li continue 5342*5ddc57e5SXin Li else 5343*5ddc57e5SXin Li # If libtool objects are unsupported, then we need to preload. 5344*5ddc57e5SXin Li prev=dlprefiles 5345*5ddc57e5SXin Li fi 5346*5ddc57e5SXin Li fi 5347*5ddc57e5SXin Li 5348*5ddc57e5SXin Li # CHECK ME: I think I busted this. -Ossama 5349*5ddc57e5SXin Li if test "$prev" = dlprefiles; then 5350*5ddc57e5SXin Li # Preload the old-style object. 5351*5ddc57e5SXin Li func_append dlprefiles " $pic_object" 5352*5ddc57e5SXin Li prev= 5353*5ddc57e5SXin Li fi 5354*5ddc57e5SXin Li 5355*5ddc57e5SXin Li # A PIC object. 5356*5ddc57e5SXin Li func_append libobjs " $pic_object" 5357*5ddc57e5SXin Li arg="$pic_object" 5358*5ddc57e5SXin Li fi 5359*5ddc57e5SXin Li 5360*5ddc57e5SXin Li # Non-PIC object. 5361*5ddc57e5SXin Li if test "$non_pic_object" != none; then 5362*5ddc57e5SXin Li # Prepend the subdirectory the object is found in. 5363*5ddc57e5SXin Li non_pic_object="$xdir$non_pic_object" 5364*5ddc57e5SXin Li 5365*5ddc57e5SXin Li # A standard non-PIC object 5366*5ddc57e5SXin Li func_append non_pic_objects " $non_pic_object" 5367*5ddc57e5SXin Li if test -z "$pic_object" || test "$pic_object" = none ; then 5368*5ddc57e5SXin Li arg="$non_pic_object" 5369*5ddc57e5SXin Li fi 5370*5ddc57e5SXin Li else 5371*5ddc57e5SXin Li # If the PIC object exists, use it instead. 5372*5ddc57e5SXin Li # $xdir was prepended to $pic_object above. 5373*5ddc57e5SXin Li non_pic_object="$pic_object" 5374*5ddc57e5SXin Li func_append non_pic_objects " $non_pic_object" 5375*5ddc57e5SXin Li fi 5376*5ddc57e5SXin Li else 5377*5ddc57e5SXin Li # Only an error if not doing a dry-run. 5378*5ddc57e5SXin Li if $opt_dry_run; then 5379*5ddc57e5SXin Li # Extract subdirectory from the argument. 5380*5ddc57e5SXin Li func_dirname "$arg" "/" "" 5381*5ddc57e5SXin Li xdir="$func_dirname_result" 5382*5ddc57e5SXin Li 5383*5ddc57e5SXin Li func_lo2o "$arg" 5384*5ddc57e5SXin Li pic_object=$xdir$objdir/$func_lo2o_result 5385*5ddc57e5SXin Li non_pic_object=$xdir$func_lo2o_result 5386*5ddc57e5SXin Li func_append libobjs " $pic_object" 5387*5ddc57e5SXin Li func_append non_pic_objects " $non_pic_object" 5388*5ddc57e5SXin Li else 5389*5ddc57e5SXin Li func_fatal_error "\`$arg' is not a valid libtool object" 5390*5ddc57e5SXin Li fi 5391*5ddc57e5SXin Li fi 5392*5ddc57e5SXin Li done 5393*5ddc57e5SXin Li else 5394*5ddc57e5SXin Li func_fatal_error "link input file \`$arg' does not exist" 5395*5ddc57e5SXin Li fi 5396*5ddc57e5SXin Li arg=$save_arg 5397*5ddc57e5SXin Li prev= 5398*5ddc57e5SXin Li continue 5399*5ddc57e5SXin Li ;; 5400*5ddc57e5SXin Li precious_regex) 5401*5ddc57e5SXin Li precious_files_regex="$arg" 5402*5ddc57e5SXin Li prev= 5403*5ddc57e5SXin Li continue 5404*5ddc57e5SXin Li ;; 5405*5ddc57e5SXin Li release) 5406*5ddc57e5SXin Li release="-$arg" 5407*5ddc57e5SXin Li prev= 5408*5ddc57e5SXin Li continue 5409*5ddc57e5SXin Li ;; 5410*5ddc57e5SXin Li rpath | xrpath) 5411*5ddc57e5SXin Li # We need an absolute path. 5412*5ddc57e5SXin Li case $arg in 5413*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]*) ;; 5414*5ddc57e5SXin Li *) 5415*5ddc57e5SXin Li func_fatal_error "only absolute run-paths are allowed" 5416*5ddc57e5SXin Li ;; 5417*5ddc57e5SXin Li esac 5418*5ddc57e5SXin Li if test "$prev" = rpath; then 5419*5ddc57e5SXin Li case "$rpath " in 5420*5ddc57e5SXin Li *" $arg "*) ;; 5421*5ddc57e5SXin Li *) func_append rpath " $arg" ;; 5422*5ddc57e5SXin Li esac 5423*5ddc57e5SXin Li else 5424*5ddc57e5SXin Li case "$xrpath " in 5425*5ddc57e5SXin Li *" $arg "*) ;; 5426*5ddc57e5SXin Li *) func_append xrpath " $arg" ;; 5427*5ddc57e5SXin Li esac 5428*5ddc57e5SXin Li fi 5429*5ddc57e5SXin Li prev= 5430*5ddc57e5SXin Li continue 5431*5ddc57e5SXin Li ;; 5432*5ddc57e5SXin Li shrext) 5433*5ddc57e5SXin Li shrext_cmds="$arg" 5434*5ddc57e5SXin Li prev= 5435*5ddc57e5SXin Li continue 5436*5ddc57e5SXin Li ;; 5437*5ddc57e5SXin Li weak) 5438*5ddc57e5SXin Li func_append weak_libs " $arg" 5439*5ddc57e5SXin Li prev= 5440*5ddc57e5SXin Li continue 5441*5ddc57e5SXin Li ;; 5442*5ddc57e5SXin Li xcclinker) 5443*5ddc57e5SXin Li func_append linker_flags " $qarg" 5444*5ddc57e5SXin Li func_append compiler_flags " $qarg" 5445*5ddc57e5SXin Li prev= 5446*5ddc57e5SXin Li func_append compile_command " $qarg" 5447*5ddc57e5SXin Li func_append finalize_command " $qarg" 5448*5ddc57e5SXin Li continue 5449*5ddc57e5SXin Li ;; 5450*5ddc57e5SXin Li xcompiler) 5451*5ddc57e5SXin Li func_append compiler_flags " $qarg" 5452*5ddc57e5SXin Li prev= 5453*5ddc57e5SXin Li func_append compile_command " $qarg" 5454*5ddc57e5SXin Li func_append finalize_command " $qarg" 5455*5ddc57e5SXin Li continue 5456*5ddc57e5SXin Li ;; 5457*5ddc57e5SXin Li xlinker) 5458*5ddc57e5SXin Li func_append linker_flags " $qarg" 5459*5ddc57e5SXin Li func_append compiler_flags " $wl$qarg" 5460*5ddc57e5SXin Li prev= 5461*5ddc57e5SXin Li func_append compile_command " $wl$qarg" 5462*5ddc57e5SXin Li func_append finalize_command " $wl$qarg" 5463*5ddc57e5SXin Li continue 5464*5ddc57e5SXin Li ;; 5465*5ddc57e5SXin Li *) 5466*5ddc57e5SXin Li eval "$prev=\"\$arg\"" 5467*5ddc57e5SXin Li prev= 5468*5ddc57e5SXin Li continue 5469*5ddc57e5SXin Li ;; 5470*5ddc57e5SXin Li esac 5471*5ddc57e5SXin Li fi # test -n "$prev" 5472*5ddc57e5SXin Li 5473*5ddc57e5SXin Li prevarg="$arg" 5474*5ddc57e5SXin Li 5475*5ddc57e5SXin Li case $arg in 5476*5ddc57e5SXin Li -all-static) 5477*5ddc57e5SXin Li if test -n "$link_static_flag"; then 5478*5ddc57e5SXin Li # See comment for -static flag below, for more details. 5479*5ddc57e5SXin Li func_append compile_command " $link_static_flag" 5480*5ddc57e5SXin Li func_append finalize_command " $link_static_flag" 5481*5ddc57e5SXin Li fi 5482*5ddc57e5SXin Li continue 5483*5ddc57e5SXin Li ;; 5484*5ddc57e5SXin Li 5485*5ddc57e5SXin Li -allow-undefined) 5486*5ddc57e5SXin Li # FIXME: remove this flag sometime in the future. 5487*5ddc57e5SXin Li func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488*5ddc57e5SXin Li ;; 5489*5ddc57e5SXin Li 5490*5ddc57e5SXin Li -avoid-version) 5491*5ddc57e5SXin Li avoid_version=yes 5492*5ddc57e5SXin Li continue 5493*5ddc57e5SXin Li ;; 5494*5ddc57e5SXin Li 5495*5ddc57e5SXin Li -bindir) 5496*5ddc57e5SXin Li prev=bindir 5497*5ddc57e5SXin Li continue 5498*5ddc57e5SXin Li ;; 5499*5ddc57e5SXin Li 5500*5ddc57e5SXin Li -dlopen) 5501*5ddc57e5SXin Li prev=dlfiles 5502*5ddc57e5SXin Li continue 5503*5ddc57e5SXin Li ;; 5504*5ddc57e5SXin Li 5505*5ddc57e5SXin Li -dlpreopen) 5506*5ddc57e5SXin Li prev=dlprefiles 5507*5ddc57e5SXin Li continue 5508*5ddc57e5SXin Li ;; 5509*5ddc57e5SXin Li 5510*5ddc57e5SXin Li -export-dynamic) 5511*5ddc57e5SXin Li export_dynamic=yes 5512*5ddc57e5SXin Li continue 5513*5ddc57e5SXin Li ;; 5514*5ddc57e5SXin Li 5515*5ddc57e5SXin Li -export-symbols | -export-symbols-regex) 5516*5ddc57e5SXin Li if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517*5ddc57e5SXin Li func_fatal_error "more than one -exported-symbols argument is not allowed" 5518*5ddc57e5SXin Li fi 5519*5ddc57e5SXin Li if test "X$arg" = "X-export-symbols"; then 5520*5ddc57e5SXin Li prev=expsyms 5521*5ddc57e5SXin Li else 5522*5ddc57e5SXin Li prev=expsyms_regex 5523*5ddc57e5SXin Li fi 5524*5ddc57e5SXin Li continue 5525*5ddc57e5SXin Li ;; 5526*5ddc57e5SXin Li 5527*5ddc57e5SXin Li -framework) 5528*5ddc57e5SXin Li prev=framework 5529*5ddc57e5SXin Li continue 5530*5ddc57e5SXin Li ;; 5531*5ddc57e5SXin Li 5532*5ddc57e5SXin Li -inst-prefix-dir) 5533*5ddc57e5SXin Li prev=inst_prefix 5534*5ddc57e5SXin Li continue 5535*5ddc57e5SXin Li ;; 5536*5ddc57e5SXin Li 5537*5ddc57e5SXin Li # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538*5ddc57e5SXin Li # so, if we see these flags be careful not to treat them like -L 5539*5ddc57e5SXin Li -L[A-Z][A-Z]*:*) 5540*5ddc57e5SXin Li case $with_gcc/$host in 5541*5ddc57e5SXin Li no/*-*-irix* | /*-*-irix*) 5542*5ddc57e5SXin Li func_append compile_command " $arg" 5543*5ddc57e5SXin Li func_append finalize_command " $arg" 5544*5ddc57e5SXin Li ;; 5545*5ddc57e5SXin Li esac 5546*5ddc57e5SXin Li continue 5547*5ddc57e5SXin Li ;; 5548*5ddc57e5SXin Li 5549*5ddc57e5SXin Li -L*) 5550*5ddc57e5SXin Li func_stripname "-L" '' "$arg" 5551*5ddc57e5SXin Li if test -z "$func_stripname_result"; then 5552*5ddc57e5SXin Li if test "$#" -gt 0; then 5553*5ddc57e5SXin Li func_fatal_error "require no space between \`-L' and \`$1'" 5554*5ddc57e5SXin Li else 5555*5ddc57e5SXin Li func_fatal_error "need path for \`-L' option" 5556*5ddc57e5SXin Li fi 5557*5ddc57e5SXin Li fi 5558*5ddc57e5SXin Li func_resolve_sysroot "$func_stripname_result" 5559*5ddc57e5SXin Li dir=$func_resolve_sysroot_result 5560*5ddc57e5SXin Li # We need an absolute path. 5561*5ddc57e5SXin Li case $dir in 5562*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]*) ;; 5563*5ddc57e5SXin Li *) 5564*5ddc57e5SXin Li absdir=`cd "$dir" && pwd` 5565*5ddc57e5SXin Li test -z "$absdir" && \ 5566*5ddc57e5SXin Li func_fatal_error "cannot determine absolute directory name of \`$dir'" 5567*5ddc57e5SXin Li dir="$absdir" 5568*5ddc57e5SXin Li ;; 5569*5ddc57e5SXin Li esac 5570*5ddc57e5SXin Li case "$deplibs " in 5571*5ddc57e5SXin Li *" -L$dir "* | *" $arg "*) 5572*5ddc57e5SXin Li # Will only happen for absolute or sysroot arguments 5573*5ddc57e5SXin Li ;; 5574*5ddc57e5SXin Li *) 5575*5ddc57e5SXin Li # Preserve sysroot, but never include relative directories 5576*5ddc57e5SXin Li case $dir in 5577*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 5578*5ddc57e5SXin Li *) func_append deplibs " -L$dir" ;; 5579*5ddc57e5SXin Li esac 5580*5ddc57e5SXin Li func_append lib_search_path " $dir" 5581*5ddc57e5SXin Li ;; 5582*5ddc57e5SXin Li esac 5583*5ddc57e5SXin Li case $host in 5584*5ddc57e5SXin Li *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5585*5ddc57e5SXin Li testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586*5ddc57e5SXin Li case :$dllsearchpath: in 5587*5ddc57e5SXin Li *":$dir:"*) ;; 5588*5ddc57e5SXin Li ::) dllsearchpath=$dir;; 5589*5ddc57e5SXin Li *) func_append dllsearchpath ":$dir";; 5590*5ddc57e5SXin Li esac 5591*5ddc57e5SXin Li case :$dllsearchpath: in 5592*5ddc57e5SXin Li *":$testbindir:"*) ;; 5593*5ddc57e5SXin Li ::) dllsearchpath=$testbindir;; 5594*5ddc57e5SXin Li *) func_append dllsearchpath ":$testbindir";; 5595*5ddc57e5SXin Li esac 5596*5ddc57e5SXin Li ;; 5597*5ddc57e5SXin Li esac 5598*5ddc57e5SXin Li continue 5599*5ddc57e5SXin Li ;; 5600*5ddc57e5SXin Li 5601*5ddc57e5SXin Li -l*) 5602*5ddc57e5SXin Li if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603*5ddc57e5SXin Li case $host in 5604*5ddc57e5SXin Li *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605*5ddc57e5SXin Li # These systems don't actually have a C or math library (as such) 5606*5ddc57e5SXin Li continue 5607*5ddc57e5SXin Li ;; 5608*5ddc57e5SXin Li *-*-os2*) 5609*5ddc57e5SXin Li # These systems don't actually have a C library (as such) 5610*5ddc57e5SXin Li test "X$arg" = "X-lc" && continue 5611*5ddc57e5SXin Li ;; 5612*5ddc57e5SXin Li *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613*5ddc57e5SXin Li # Do not include libc due to us having libc/libc_r. 5614*5ddc57e5SXin Li test "X$arg" = "X-lc" && continue 5615*5ddc57e5SXin Li ;; 5616*5ddc57e5SXin Li *-*-rhapsody* | *-*-darwin1.[012]) 5617*5ddc57e5SXin Li # Rhapsody C and math libraries are in the System framework 5618*5ddc57e5SXin Li func_append deplibs " System.ltframework" 5619*5ddc57e5SXin Li continue 5620*5ddc57e5SXin Li ;; 5621*5ddc57e5SXin Li *-*-sco3.2v5* | *-*-sco5v6*) 5622*5ddc57e5SXin Li # Causes problems with __ctype 5623*5ddc57e5SXin Li test "X$arg" = "X-lc" && continue 5624*5ddc57e5SXin Li ;; 5625*5ddc57e5SXin Li *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626*5ddc57e5SXin Li # Compiler inserts libc in the correct place for threads to work 5627*5ddc57e5SXin Li test "X$arg" = "X-lc" && continue 5628*5ddc57e5SXin Li ;; 5629*5ddc57e5SXin Li esac 5630*5ddc57e5SXin Li elif test "X$arg" = "X-lc_r"; then 5631*5ddc57e5SXin Li case $host in 5632*5ddc57e5SXin Li *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633*5ddc57e5SXin Li # Do not include libc_r directly, use -pthread flag. 5634*5ddc57e5SXin Li continue 5635*5ddc57e5SXin Li ;; 5636*5ddc57e5SXin Li esac 5637*5ddc57e5SXin Li fi 5638*5ddc57e5SXin Li func_append deplibs " $arg" 5639*5ddc57e5SXin Li continue 5640*5ddc57e5SXin Li ;; 5641*5ddc57e5SXin Li 5642*5ddc57e5SXin Li -module) 5643*5ddc57e5SXin Li module=yes 5644*5ddc57e5SXin Li continue 5645*5ddc57e5SXin Li ;; 5646*5ddc57e5SXin Li 5647*5ddc57e5SXin Li # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648*5ddc57e5SXin Li # classes, name mangling, and exception handling. 5649*5ddc57e5SXin Li # Darwin uses the -arch flag to determine output architecture. 5650*5ddc57e5SXin Li -model|-arch|-isysroot|--sysroot) 5651*5ddc57e5SXin Li func_append compiler_flags " $arg" 5652*5ddc57e5SXin Li func_append compile_command " $arg" 5653*5ddc57e5SXin Li func_append finalize_command " $arg" 5654*5ddc57e5SXin Li prev=xcompiler 5655*5ddc57e5SXin Li continue 5656*5ddc57e5SXin Li ;; 5657*5ddc57e5SXin Li 5658*5ddc57e5SXin Li -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 5659*5ddc57e5SXin Li |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 5660*5ddc57e5SXin Li func_append compiler_flags " $arg" 5661*5ddc57e5SXin Li func_append compile_command " $arg" 5662*5ddc57e5SXin Li func_append finalize_command " $arg" 5663*5ddc57e5SXin Li case "$new_inherited_linker_flags " in 5664*5ddc57e5SXin Li *" $arg "*) ;; 5665*5ddc57e5SXin Li * ) func_append new_inherited_linker_flags " $arg" ;; 5666*5ddc57e5SXin Li esac 5667*5ddc57e5SXin Li continue 5668*5ddc57e5SXin Li ;; 5669*5ddc57e5SXin Li 5670*5ddc57e5SXin Li -multi_module) 5671*5ddc57e5SXin Li single_module="${wl}-multi_module" 5672*5ddc57e5SXin Li continue 5673*5ddc57e5SXin Li ;; 5674*5ddc57e5SXin Li 5675*5ddc57e5SXin Li -no-fast-install) 5676*5ddc57e5SXin Li fast_install=no 5677*5ddc57e5SXin Li continue 5678*5ddc57e5SXin Li ;; 5679*5ddc57e5SXin Li 5680*5ddc57e5SXin Li -no-install) 5681*5ddc57e5SXin Li case $host in 5682*5ddc57e5SXin Li *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683*5ddc57e5SXin Li # The PATH hackery in wrapper scripts is required on Windows 5684*5ddc57e5SXin Li # and Darwin in order for the loader to find any dlls it needs. 5685*5ddc57e5SXin Li func_warning "\`-no-install' is ignored for $host" 5686*5ddc57e5SXin Li func_warning "assuming \`-no-fast-install' instead" 5687*5ddc57e5SXin Li fast_install=no 5688*5ddc57e5SXin Li ;; 5689*5ddc57e5SXin Li *) no_install=yes ;; 5690*5ddc57e5SXin Li esac 5691*5ddc57e5SXin Li continue 5692*5ddc57e5SXin Li ;; 5693*5ddc57e5SXin Li 5694*5ddc57e5SXin Li -no-undefined) 5695*5ddc57e5SXin Li allow_undefined=no 5696*5ddc57e5SXin Li continue 5697*5ddc57e5SXin Li ;; 5698*5ddc57e5SXin Li 5699*5ddc57e5SXin Li -objectlist) 5700*5ddc57e5SXin Li prev=objectlist 5701*5ddc57e5SXin Li continue 5702*5ddc57e5SXin Li ;; 5703*5ddc57e5SXin Li 5704*5ddc57e5SXin Li -o) prev=output ;; 5705*5ddc57e5SXin Li 5706*5ddc57e5SXin Li -precious-files-regex) 5707*5ddc57e5SXin Li prev=precious_regex 5708*5ddc57e5SXin Li continue 5709*5ddc57e5SXin Li ;; 5710*5ddc57e5SXin Li 5711*5ddc57e5SXin Li -release) 5712*5ddc57e5SXin Li prev=release 5713*5ddc57e5SXin Li continue 5714*5ddc57e5SXin Li ;; 5715*5ddc57e5SXin Li 5716*5ddc57e5SXin Li -rpath) 5717*5ddc57e5SXin Li prev=rpath 5718*5ddc57e5SXin Li continue 5719*5ddc57e5SXin Li ;; 5720*5ddc57e5SXin Li 5721*5ddc57e5SXin Li -R) 5722*5ddc57e5SXin Li prev=xrpath 5723*5ddc57e5SXin Li continue 5724*5ddc57e5SXin Li ;; 5725*5ddc57e5SXin Li 5726*5ddc57e5SXin Li -R*) 5727*5ddc57e5SXin Li func_stripname '-R' '' "$arg" 5728*5ddc57e5SXin Li dir=$func_stripname_result 5729*5ddc57e5SXin Li # We need an absolute path. 5730*5ddc57e5SXin Li case $dir in 5731*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]*) ;; 5732*5ddc57e5SXin Li =*) 5733*5ddc57e5SXin Li func_stripname '=' '' "$dir" 5734*5ddc57e5SXin Li dir=$lt_sysroot$func_stripname_result 5735*5ddc57e5SXin Li ;; 5736*5ddc57e5SXin Li *) 5737*5ddc57e5SXin Li func_fatal_error "only absolute run-paths are allowed" 5738*5ddc57e5SXin Li ;; 5739*5ddc57e5SXin Li esac 5740*5ddc57e5SXin Li case "$xrpath " in 5741*5ddc57e5SXin Li *" $dir "*) ;; 5742*5ddc57e5SXin Li *) func_append xrpath " $dir" ;; 5743*5ddc57e5SXin Li esac 5744*5ddc57e5SXin Li continue 5745*5ddc57e5SXin Li ;; 5746*5ddc57e5SXin Li 5747*5ddc57e5SXin Li -shared) 5748*5ddc57e5SXin Li # The effects of -shared are defined in a previous loop. 5749*5ddc57e5SXin Li continue 5750*5ddc57e5SXin Li ;; 5751*5ddc57e5SXin Li 5752*5ddc57e5SXin Li -shrext) 5753*5ddc57e5SXin Li prev=shrext 5754*5ddc57e5SXin Li continue 5755*5ddc57e5SXin Li ;; 5756*5ddc57e5SXin Li 5757*5ddc57e5SXin Li -static | -static-libtool-libs) 5758*5ddc57e5SXin Li # The effects of -static are defined in a previous loop. 5759*5ddc57e5SXin Li # We used to do the same as -all-static on platforms that 5760*5ddc57e5SXin Li # didn't have a PIC flag, but the assumption that the effects 5761*5ddc57e5SXin Li # would be equivalent was wrong. It would break on at least 5762*5ddc57e5SXin Li # Digital Unix and AIX. 5763*5ddc57e5SXin Li continue 5764*5ddc57e5SXin Li ;; 5765*5ddc57e5SXin Li 5766*5ddc57e5SXin Li -thread-safe) 5767*5ddc57e5SXin Li thread_safe=yes 5768*5ddc57e5SXin Li continue 5769*5ddc57e5SXin Li ;; 5770*5ddc57e5SXin Li 5771*5ddc57e5SXin Li -version-info) 5772*5ddc57e5SXin Li prev=vinfo 5773*5ddc57e5SXin Li continue 5774*5ddc57e5SXin Li ;; 5775*5ddc57e5SXin Li 5776*5ddc57e5SXin Li -version-number) 5777*5ddc57e5SXin Li prev=vinfo 5778*5ddc57e5SXin Li vinfo_number=yes 5779*5ddc57e5SXin Li continue 5780*5ddc57e5SXin Li ;; 5781*5ddc57e5SXin Li 5782*5ddc57e5SXin Li -weak) 5783*5ddc57e5SXin Li prev=weak 5784*5ddc57e5SXin Li continue 5785*5ddc57e5SXin Li ;; 5786*5ddc57e5SXin Li 5787*5ddc57e5SXin Li -Wc,*) 5788*5ddc57e5SXin Li func_stripname '-Wc,' '' "$arg" 5789*5ddc57e5SXin Li args=$func_stripname_result 5790*5ddc57e5SXin Li arg= 5791*5ddc57e5SXin Li save_ifs="$IFS"; IFS=',' 5792*5ddc57e5SXin Li for flag in $args; do 5793*5ddc57e5SXin Li IFS="$save_ifs" 5794*5ddc57e5SXin Li func_quote_for_eval "$flag" 5795*5ddc57e5SXin Li func_append arg " $func_quote_for_eval_result" 5796*5ddc57e5SXin Li func_append compiler_flags " $func_quote_for_eval_result" 5797*5ddc57e5SXin Li done 5798*5ddc57e5SXin Li IFS="$save_ifs" 5799*5ddc57e5SXin Li func_stripname ' ' '' "$arg" 5800*5ddc57e5SXin Li arg=$func_stripname_result 5801*5ddc57e5SXin Li ;; 5802*5ddc57e5SXin Li 5803*5ddc57e5SXin Li -Wl,*) 5804*5ddc57e5SXin Li func_stripname '-Wl,' '' "$arg" 5805*5ddc57e5SXin Li args=$func_stripname_result 5806*5ddc57e5SXin Li arg= 5807*5ddc57e5SXin Li save_ifs="$IFS"; IFS=',' 5808*5ddc57e5SXin Li for flag in $args; do 5809*5ddc57e5SXin Li IFS="$save_ifs" 5810*5ddc57e5SXin Li func_quote_for_eval "$flag" 5811*5ddc57e5SXin Li func_append arg " $wl$func_quote_for_eval_result" 5812*5ddc57e5SXin Li func_append compiler_flags " $wl$func_quote_for_eval_result" 5813*5ddc57e5SXin Li func_append linker_flags " $func_quote_for_eval_result" 5814*5ddc57e5SXin Li done 5815*5ddc57e5SXin Li IFS="$save_ifs" 5816*5ddc57e5SXin Li func_stripname ' ' '' "$arg" 5817*5ddc57e5SXin Li arg=$func_stripname_result 5818*5ddc57e5SXin Li ;; 5819*5ddc57e5SXin Li 5820*5ddc57e5SXin Li -Xcompiler) 5821*5ddc57e5SXin Li prev=xcompiler 5822*5ddc57e5SXin Li continue 5823*5ddc57e5SXin Li ;; 5824*5ddc57e5SXin Li 5825*5ddc57e5SXin Li -Xlinker) 5826*5ddc57e5SXin Li prev=xlinker 5827*5ddc57e5SXin Li continue 5828*5ddc57e5SXin Li ;; 5829*5ddc57e5SXin Li 5830*5ddc57e5SXin Li -XCClinker) 5831*5ddc57e5SXin Li prev=xcclinker 5832*5ddc57e5SXin Li continue 5833*5ddc57e5SXin Li ;; 5834*5ddc57e5SXin Li 5835*5ddc57e5SXin Li # -msg_* for osf cc 5836*5ddc57e5SXin Li -msg_*) 5837*5ddc57e5SXin Li func_quote_for_eval "$arg" 5838*5ddc57e5SXin Li arg="$func_quote_for_eval_result" 5839*5ddc57e5SXin Li ;; 5840*5ddc57e5SXin Li 5841*5ddc57e5SXin Li # Flags to be passed through unchanged, with rationale: 5842*5ddc57e5SXin Li # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5843*5ddc57e5SXin Li # -r[0-9][0-9]* specify processor for the SGI compiler 5844*5ddc57e5SXin Li # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5845*5ddc57e5SXin Li # +DA*, +DD* enable 64-bit mode for the HP compiler 5846*5ddc57e5SXin Li # -q* compiler args for the IBM compiler 5847*5ddc57e5SXin Li # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5848*5ddc57e5SXin Li # -F/path path to uninstalled frameworks, gcc on darwin 5849*5ddc57e5SXin Li # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5850*5ddc57e5SXin Li # @file GCC response files 5851*5ddc57e5SXin Li # -tp=* Portland pgcc target processor selection 5852*5ddc57e5SXin Li # --sysroot=* for sysroot support 5853*5ddc57e5SXin Li # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854*5ddc57e5SXin Li -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5855*5ddc57e5SXin Li -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 5856*5ddc57e5SXin Li -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857*5ddc57e5SXin Li func_quote_for_eval "$arg" 5858*5ddc57e5SXin Li arg="$func_quote_for_eval_result" 5859*5ddc57e5SXin Li func_append compile_command " $arg" 5860*5ddc57e5SXin Li func_append finalize_command " $arg" 5861*5ddc57e5SXin Li func_append compiler_flags " $arg" 5862*5ddc57e5SXin Li continue 5863*5ddc57e5SXin Li ;; 5864*5ddc57e5SXin Li 5865*5ddc57e5SXin Li # Some other compiler flag. 5866*5ddc57e5SXin Li -* | +*) 5867*5ddc57e5SXin Li func_quote_for_eval "$arg" 5868*5ddc57e5SXin Li arg="$func_quote_for_eval_result" 5869*5ddc57e5SXin Li ;; 5870*5ddc57e5SXin Li 5871*5ddc57e5SXin Li *.$objext) 5872*5ddc57e5SXin Li # A standard object. 5873*5ddc57e5SXin Li func_append objs " $arg" 5874*5ddc57e5SXin Li ;; 5875*5ddc57e5SXin Li 5876*5ddc57e5SXin Li *.lo) 5877*5ddc57e5SXin Li # A libtool-controlled object. 5878*5ddc57e5SXin Li 5879*5ddc57e5SXin Li # Check to see that this really is a libtool object. 5880*5ddc57e5SXin Li if func_lalib_unsafe_p "$arg"; then 5881*5ddc57e5SXin Li pic_object= 5882*5ddc57e5SXin Li non_pic_object= 5883*5ddc57e5SXin Li 5884*5ddc57e5SXin Li # Read the .lo file 5885*5ddc57e5SXin Li func_source "$arg" 5886*5ddc57e5SXin Li 5887*5ddc57e5SXin Li if test -z "$pic_object" || 5888*5ddc57e5SXin Li test -z "$non_pic_object" || 5889*5ddc57e5SXin Li test "$pic_object" = none && 5890*5ddc57e5SXin Li test "$non_pic_object" = none; then 5891*5ddc57e5SXin Li func_fatal_error "cannot find name of object for \`$arg'" 5892*5ddc57e5SXin Li fi 5893*5ddc57e5SXin Li 5894*5ddc57e5SXin Li # Extract subdirectory from the argument. 5895*5ddc57e5SXin Li func_dirname "$arg" "/" "" 5896*5ddc57e5SXin Li xdir="$func_dirname_result" 5897*5ddc57e5SXin Li 5898*5ddc57e5SXin Li if test "$pic_object" != none; then 5899*5ddc57e5SXin Li # Prepend the subdirectory the object is found in. 5900*5ddc57e5SXin Li pic_object="$xdir$pic_object" 5901*5ddc57e5SXin Li 5902*5ddc57e5SXin Li if test "$prev" = dlfiles; then 5903*5ddc57e5SXin Li if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5904*5ddc57e5SXin Li func_append dlfiles " $pic_object" 5905*5ddc57e5SXin Li prev= 5906*5ddc57e5SXin Li continue 5907*5ddc57e5SXin Li else 5908*5ddc57e5SXin Li # If libtool objects are unsupported, then we need to preload. 5909*5ddc57e5SXin Li prev=dlprefiles 5910*5ddc57e5SXin Li fi 5911*5ddc57e5SXin Li fi 5912*5ddc57e5SXin Li 5913*5ddc57e5SXin Li # CHECK ME: I think I busted this. -Ossama 5914*5ddc57e5SXin Li if test "$prev" = dlprefiles; then 5915*5ddc57e5SXin Li # Preload the old-style object. 5916*5ddc57e5SXin Li func_append dlprefiles " $pic_object" 5917*5ddc57e5SXin Li prev= 5918*5ddc57e5SXin Li fi 5919*5ddc57e5SXin Li 5920*5ddc57e5SXin Li # A PIC object. 5921*5ddc57e5SXin Li func_append libobjs " $pic_object" 5922*5ddc57e5SXin Li arg="$pic_object" 5923*5ddc57e5SXin Li fi 5924*5ddc57e5SXin Li 5925*5ddc57e5SXin Li # Non-PIC object. 5926*5ddc57e5SXin Li if test "$non_pic_object" != none; then 5927*5ddc57e5SXin Li # Prepend the subdirectory the object is found in. 5928*5ddc57e5SXin Li non_pic_object="$xdir$non_pic_object" 5929*5ddc57e5SXin Li 5930*5ddc57e5SXin Li # A standard non-PIC object 5931*5ddc57e5SXin Li func_append non_pic_objects " $non_pic_object" 5932*5ddc57e5SXin Li if test -z "$pic_object" || test "$pic_object" = none ; then 5933*5ddc57e5SXin Li arg="$non_pic_object" 5934*5ddc57e5SXin Li fi 5935*5ddc57e5SXin Li else 5936*5ddc57e5SXin Li # If the PIC object exists, use it instead. 5937*5ddc57e5SXin Li # $xdir was prepended to $pic_object above. 5938*5ddc57e5SXin Li non_pic_object="$pic_object" 5939*5ddc57e5SXin Li func_append non_pic_objects " $non_pic_object" 5940*5ddc57e5SXin Li fi 5941*5ddc57e5SXin Li else 5942*5ddc57e5SXin Li # Only an error if not doing a dry-run. 5943*5ddc57e5SXin Li if $opt_dry_run; then 5944*5ddc57e5SXin Li # Extract subdirectory from the argument. 5945*5ddc57e5SXin Li func_dirname "$arg" "/" "" 5946*5ddc57e5SXin Li xdir="$func_dirname_result" 5947*5ddc57e5SXin Li 5948*5ddc57e5SXin Li func_lo2o "$arg" 5949*5ddc57e5SXin Li pic_object=$xdir$objdir/$func_lo2o_result 5950*5ddc57e5SXin Li non_pic_object=$xdir$func_lo2o_result 5951*5ddc57e5SXin Li func_append libobjs " $pic_object" 5952*5ddc57e5SXin Li func_append non_pic_objects " $non_pic_object" 5953*5ddc57e5SXin Li else 5954*5ddc57e5SXin Li func_fatal_error "\`$arg' is not a valid libtool object" 5955*5ddc57e5SXin Li fi 5956*5ddc57e5SXin Li fi 5957*5ddc57e5SXin Li ;; 5958*5ddc57e5SXin Li 5959*5ddc57e5SXin Li *.$libext) 5960*5ddc57e5SXin Li # An archive. 5961*5ddc57e5SXin Li func_append deplibs " $arg" 5962*5ddc57e5SXin Li func_append old_deplibs " $arg" 5963*5ddc57e5SXin Li continue 5964*5ddc57e5SXin Li ;; 5965*5ddc57e5SXin Li 5966*5ddc57e5SXin Li *.la) 5967*5ddc57e5SXin Li # A libtool-controlled library. 5968*5ddc57e5SXin Li 5969*5ddc57e5SXin Li func_resolve_sysroot "$arg" 5970*5ddc57e5SXin Li if test "$prev" = dlfiles; then 5971*5ddc57e5SXin Li # This library was specified with -dlopen. 5972*5ddc57e5SXin Li func_append dlfiles " $func_resolve_sysroot_result" 5973*5ddc57e5SXin Li prev= 5974*5ddc57e5SXin Li elif test "$prev" = dlprefiles; then 5975*5ddc57e5SXin Li # The library was specified with -dlpreopen. 5976*5ddc57e5SXin Li func_append dlprefiles " $func_resolve_sysroot_result" 5977*5ddc57e5SXin Li prev= 5978*5ddc57e5SXin Li else 5979*5ddc57e5SXin Li func_append deplibs " $func_resolve_sysroot_result" 5980*5ddc57e5SXin Li fi 5981*5ddc57e5SXin Li continue 5982*5ddc57e5SXin Li ;; 5983*5ddc57e5SXin Li 5984*5ddc57e5SXin Li # Some other compiler argument. 5985*5ddc57e5SXin Li *) 5986*5ddc57e5SXin Li # Unknown arguments in both finalize_command and compile_command need 5987*5ddc57e5SXin Li # to be aesthetically quoted because they are evaled later. 5988*5ddc57e5SXin Li func_quote_for_eval "$arg" 5989*5ddc57e5SXin Li arg="$func_quote_for_eval_result" 5990*5ddc57e5SXin Li ;; 5991*5ddc57e5SXin Li esac # arg 5992*5ddc57e5SXin Li 5993*5ddc57e5SXin Li # Now actually substitute the argument into the commands. 5994*5ddc57e5SXin Li if test -n "$arg"; then 5995*5ddc57e5SXin Li func_append compile_command " $arg" 5996*5ddc57e5SXin Li func_append finalize_command " $arg" 5997*5ddc57e5SXin Li fi 5998*5ddc57e5SXin Li done # argument parsing loop 5999*5ddc57e5SXin Li 6000*5ddc57e5SXin Li test -n "$prev" && \ 6001*5ddc57e5SXin Li func_fatal_help "the \`$prevarg' option requires an argument" 6002*5ddc57e5SXin Li 6003*5ddc57e5SXin Li if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004*5ddc57e5SXin Li eval arg=\"$export_dynamic_flag_spec\" 6005*5ddc57e5SXin Li func_append compile_command " $arg" 6006*5ddc57e5SXin Li func_append finalize_command " $arg" 6007*5ddc57e5SXin Li fi 6008*5ddc57e5SXin Li 6009*5ddc57e5SXin Li oldlibs= 6010*5ddc57e5SXin Li # calculate the name of the file, without its directory 6011*5ddc57e5SXin Li func_basename "$output" 6012*5ddc57e5SXin Li outputname="$func_basename_result" 6013*5ddc57e5SXin Li libobjs_save="$libobjs" 6014*5ddc57e5SXin Li 6015*5ddc57e5SXin Li if test -n "$shlibpath_var"; then 6016*5ddc57e5SXin Li # get the directories listed in $shlibpath_var 6017*5ddc57e5SXin Li eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018*5ddc57e5SXin Li else 6019*5ddc57e5SXin Li shlib_search_path= 6020*5ddc57e5SXin Li fi 6021*5ddc57e5SXin Li eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022*5ddc57e5SXin Li eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023*5ddc57e5SXin Li 6024*5ddc57e5SXin Li func_dirname "$output" "/" "" 6025*5ddc57e5SXin Li output_objdir="$func_dirname_result$objdir" 6026*5ddc57e5SXin Li func_to_tool_file "$output_objdir/" 6027*5ddc57e5SXin Li tool_output_objdir=$func_to_tool_file_result 6028*5ddc57e5SXin Li # Create the object directory. 6029*5ddc57e5SXin Li func_mkdir_p "$output_objdir" 6030*5ddc57e5SXin Li 6031*5ddc57e5SXin Li # Determine the type of output 6032*5ddc57e5SXin Li case $output in 6033*5ddc57e5SXin Li "") 6034*5ddc57e5SXin Li func_fatal_help "you must specify an output file" 6035*5ddc57e5SXin Li ;; 6036*5ddc57e5SXin Li *.$libext) linkmode=oldlib ;; 6037*5ddc57e5SXin Li *.lo | *.$objext) linkmode=obj ;; 6038*5ddc57e5SXin Li *.la) linkmode=lib ;; 6039*5ddc57e5SXin Li *) linkmode=prog ;; # Anything else should be a program. 6040*5ddc57e5SXin Li esac 6041*5ddc57e5SXin Li 6042*5ddc57e5SXin Li specialdeplibs= 6043*5ddc57e5SXin Li 6044*5ddc57e5SXin Li libs= 6045*5ddc57e5SXin Li # Find all interdependent deplibs by searching for libraries 6046*5ddc57e5SXin Li # that are linked more than once (e.g. -la -lb -la) 6047*5ddc57e5SXin Li for deplib in $deplibs; do 6048*5ddc57e5SXin Li if $opt_preserve_dup_deps ; then 6049*5ddc57e5SXin Li case "$libs " in 6050*5ddc57e5SXin Li *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051*5ddc57e5SXin Li esac 6052*5ddc57e5SXin Li fi 6053*5ddc57e5SXin Li func_append libs " $deplib" 6054*5ddc57e5SXin Li done 6055*5ddc57e5SXin Li 6056*5ddc57e5SXin Li if test "$linkmode" = lib; then 6057*5ddc57e5SXin Li libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058*5ddc57e5SXin Li 6059*5ddc57e5SXin Li # Compute libraries that are listed more than once in $predeps 6060*5ddc57e5SXin Li # $postdeps and mark them as special (i.e., whose duplicates are 6061*5ddc57e5SXin Li # not to be eliminated). 6062*5ddc57e5SXin Li pre_post_deps= 6063*5ddc57e5SXin Li if $opt_duplicate_compiler_generated_deps; then 6064*5ddc57e5SXin Li for pre_post_dep in $predeps $postdeps; do 6065*5ddc57e5SXin Li case "$pre_post_deps " in 6066*5ddc57e5SXin Li *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067*5ddc57e5SXin Li esac 6068*5ddc57e5SXin Li func_append pre_post_deps " $pre_post_dep" 6069*5ddc57e5SXin Li done 6070*5ddc57e5SXin Li fi 6071*5ddc57e5SXin Li pre_post_deps= 6072*5ddc57e5SXin Li fi 6073*5ddc57e5SXin Li 6074*5ddc57e5SXin Li deplibs= 6075*5ddc57e5SXin Li newdependency_libs= 6076*5ddc57e5SXin Li newlib_search_path= 6077*5ddc57e5SXin Li need_relink=no # whether we're linking any uninstalled libtool libraries 6078*5ddc57e5SXin Li notinst_deplibs= # not-installed libtool libraries 6079*5ddc57e5SXin Li notinst_path= # paths that contain not-installed libtool libraries 6080*5ddc57e5SXin Li 6081*5ddc57e5SXin Li case $linkmode in 6082*5ddc57e5SXin Li lib) 6083*5ddc57e5SXin Li passes="conv dlpreopen link" 6084*5ddc57e5SXin Li for file in $dlfiles $dlprefiles; do 6085*5ddc57e5SXin Li case $file in 6086*5ddc57e5SXin Li *.la) ;; 6087*5ddc57e5SXin Li *) 6088*5ddc57e5SXin Li func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089*5ddc57e5SXin Li ;; 6090*5ddc57e5SXin Li esac 6091*5ddc57e5SXin Li done 6092*5ddc57e5SXin Li ;; 6093*5ddc57e5SXin Li prog) 6094*5ddc57e5SXin Li compile_deplibs= 6095*5ddc57e5SXin Li finalize_deplibs= 6096*5ddc57e5SXin Li alldeplibs=no 6097*5ddc57e5SXin Li newdlfiles= 6098*5ddc57e5SXin Li newdlprefiles= 6099*5ddc57e5SXin Li passes="conv scan dlopen dlpreopen link" 6100*5ddc57e5SXin Li ;; 6101*5ddc57e5SXin Li *) passes="conv" 6102*5ddc57e5SXin Li ;; 6103*5ddc57e5SXin Li esac 6104*5ddc57e5SXin Li 6105*5ddc57e5SXin Li for pass in $passes; do 6106*5ddc57e5SXin Li # The preopen pass in lib mode reverses $deplibs; put it back here 6107*5ddc57e5SXin Li # so that -L comes before libs that need it for instance... 6108*5ddc57e5SXin Li if test "$linkmode,$pass" = "lib,link"; then 6109*5ddc57e5SXin Li ## FIXME: Find the place where the list is rebuilt in the wrong 6110*5ddc57e5SXin Li ## order, and fix it there properly 6111*5ddc57e5SXin Li tmp_deplibs= 6112*5ddc57e5SXin Li for deplib in $deplibs; do 6113*5ddc57e5SXin Li tmp_deplibs="$deplib $tmp_deplibs" 6114*5ddc57e5SXin Li done 6115*5ddc57e5SXin Li deplibs="$tmp_deplibs" 6116*5ddc57e5SXin Li fi 6117*5ddc57e5SXin Li 6118*5ddc57e5SXin Li if test "$linkmode,$pass" = "lib,link" || 6119*5ddc57e5SXin Li test "$linkmode,$pass" = "prog,scan"; then 6120*5ddc57e5SXin Li libs="$deplibs" 6121*5ddc57e5SXin Li deplibs= 6122*5ddc57e5SXin Li fi 6123*5ddc57e5SXin Li if test "$linkmode" = prog; then 6124*5ddc57e5SXin Li case $pass in 6125*5ddc57e5SXin Li dlopen) libs="$dlfiles" ;; 6126*5ddc57e5SXin Li dlpreopen) libs="$dlprefiles" ;; 6127*5ddc57e5SXin Li link) 6128*5ddc57e5SXin Li libs="$deplibs %DEPLIBS%" 6129*5ddc57e5SXin Li test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" 6130*5ddc57e5SXin Li ;; 6131*5ddc57e5SXin Li esac 6132*5ddc57e5SXin Li fi 6133*5ddc57e5SXin Li if test "$linkmode,$pass" = "lib,dlpreopen"; then 6134*5ddc57e5SXin Li # Collect and forward deplibs of preopened libtool libs 6135*5ddc57e5SXin Li for lib in $dlprefiles; do 6136*5ddc57e5SXin Li # Ignore non-libtool-libs 6137*5ddc57e5SXin Li dependency_libs= 6138*5ddc57e5SXin Li func_resolve_sysroot "$lib" 6139*5ddc57e5SXin Li case $lib in 6140*5ddc57e5SXin Li *.la) func_source "$func_resolve_sysroot_result" ;; 6141*5ddc57e5SXin Li esac 6142*5ddc57e5SXin Li 6143*5ddc57e5SXin Li # Collect preopened libtool deplibs, except any this library 6144*5ddc57e5SXin Li # has declared as weak libs 6145*5ddc57e5SXin Li for deplib in $dependency_libs; do 6146*5ddc57e5SXin Li func_basename "$deplib" 6147*5ddc57e5SXin Li deplib_base=$func_basename_result 6148*5ddc57e5SXin Li case " $weak_libs " in 6149*5ddc57e5SXin Li *" $deplib_base "*) ;; 6150*5ddc57e5SXin Li *) func_append deplibs " $deplib" ;; 6151*5ddc57e5SXin Li esac 6152*5ddc57e5SXin Li done 6153*5ddc57e5SXin Li done 6154*5ddc57e5SXin Li libs="$dlprefiles" 6155*5ddc57e5SXin Li fi 6156*5ddc57e5SXin Li if test "$pass" = dlopen; then 6157*5ddc57e5SXin Li # Collect dlpreopened libraries 6158*5ddc57e5SXin Li save_deplibs="$deplibs" 6159*5ddc57e5SXin Li deplibs= 6160*5ddc57e5SXin Li fi 6161*5ddc57e5SXin Li 6162*5ddc57e5SXin Li for deplib in $libs; do 6163*5ddc57e5SXin Li lib= 6164*5ddc57e5SXin Li found=no 6165*5ddc57e5SXin Li case $deplib in 6166*5ddc57e5SXin Li -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 6167*5ddc57e5SXin Li |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 6168*5ddc57e5SXin Li if test "$linkmode,$pass" = "prog,link"; then 6169*5ddc57e5SXin Li compile_deplibs="$deplib $compile_deplibs" 6170*5ddc57e5SXin Li finalize_deplibs="$deplib $finalize_deplibs" 6171*5ddc57e5SXin Li else 6172*5ddc57e5SXin Li func_append compiler_flags " $deplib" 6173*5ddc57e5SXin Li if test "$linkmode" = lib ; then 6174*5ddc57e5SXin Li case "$new_inherited_linker_flags " in 6175*5ddc57e5SXin Li *" $deplib "*) ;; 6176*5ddc57e5SXin Li * ) func_append new_inherited_linker_flags " $deplib" ;; 6177*5ddc57e5SXin Li esac 6178*5ddc57e5SXin Li fi 6179*5ddc57e5SXin Li fi 6180*5ddc57e5SXin Li continue 6181*5ddc57e5SXin Li ;; 6182*5ddc57e5SXin Li -l*) 6183*5ddc57e5SXin Li if test "$linkmode" != lib && test "$linkmode" != prog; then 6184*5ddc57e5SXin Li func_warning "\`-l' is ignored for archives/objects" 6185*5ddc57e5SXin Li continue 6186*5ddc57e5SXin Li fi 6187*5ddc57e5SXin Li func_stripname '-l' '' "$deplib" 6188*5ddc57e5SXin Li name=$func_stripname_result 6189*5ddc57e5SXin Li if test "$linkmode" = lib; then 6190*5ddc57e5SXin Li searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6191*5ddc57e5SXin Li else 6192*5ddc57e5SXin Li searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6193*5ddc57e5SXin Li fi 6194*5ddc57e5SXin Li for searchdir in $searchdirs; do 6195*5ddc57e5SXin Li for search_ext in .la $std_shrext .so .a; do 6196*5ddc57e5SXin Li # Search the libtool library 6197*5ddc57e5SXin Li lib="$searchdir/lib${name}${search_ext}" 6198*5ddc57e5SXin Li if test -f "$lib"; then 6199*5ddc57e5SXin Li if test "$search_ext" = ".la"; then 6200*5ddc57e5SXin Li found=yes 6201*5ddc57e5SXin Li else 6202*5ddc57e5SXin Li found=no 6203*5ddc57e5SXin Li fi 6204*5ddc57e5SXin Li break 2 6205*5ddc57e5SXin Li fi 6206*5ddc57e5SXin Li done 6207*5ddc57e5SXin Li done 6208*5ddc57e5SXin Li if test "$found" != yes; then 6209*5ddc57e5SXin Li # deplib doesn't seem to be a libtool library 6210*5ddc57e5SXin Li if test "$linkmode,$pass" = "prog,link"; then 6211*5ddc57e5SXin Li compile_deplibs="$deplib $compile_deplibs" 6212*5ddc57e5SXin Li finalize_deplibs="$deplib $finalize_deplibs" 6213*5ddc57e5SXin Li else 6214*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6215*5ddc57e5SXin Li test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6216*5ddc57e5SXin Li fi 6217*5ddc57e5SXin Li continue 6218*5ddc57e5SXin Li else # deplib is a libtool library 6219*5ddc57e5SXin Li # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6220*5ddc57e5SXin Li # We need to do some special things here, and not later. 6221*5ddc57e5SXin Li if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6222*5ddc57e5SXin Li case " $predeps $postdeps " in 6223*5ddc57e5SXin Li *" $deplib "*) 6224*5ddc57e5SXin Li if func_lalib_p "$lib"; then 6225*5ddc57e5SXin Li library_names= 6226*5ddc57e5SXin Li old_library= 6227*5ddc57e5SXin Li func_source "$lib" 6228*5ddc57e5SXin Li for l in $old_library $library_names; do 6229*5ddc57e5SXin Li ll="$l" 6230*5ddc57e5SXin Li done 6231*5ddc57e5SXin Li if test "X$ll" = "X$old_library" ; then # only static version available 6232*5ddc57e5SXin Li found=no 6233*5ddc57e5SXin Li func_dirname "$lib" "" "." 6234*5ddc57e5SXin Li ladir="$func_dirname_result" 6235*5ddc57e5SXin Li lib=$ladir/$old_library 6236*5ddc57e5SXin Li if test "$linkmode,$pass" = "prog,link"; then 6237*5ddc57e5SXin Li compile_deplibs="$deplib $compile_deplibs" 6238*5ddc57e5SXin Li finalize_deplibs="$deplib $finalize_deplibs" 6239*5ddc57e5SXin Li else 6240*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6241*5ddc57e5SXin Li test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6242*5ddc57e5SXin Li fi 6243*5ddc57e5SXin Li continue 6244*5ddc57e5SXin Li fi 6245*5ddc57e5SXin Li fi 6246*5ddc57e5SXin Li ;; 6247*5ddc57e5SXin Li *) ;; 6248*5ddc57e5SXin Li esac 6249*5ddc57e5SXin Li fi 6250*5ddc57e5SXin Li fi 6251*5ddc57e5SXin Li ;; # -l 6252*5ddc57e5SXin Li *.ltframework) 6253*5ddc57e5SXin Li if test "$linkmode,$pass" = "prog,link"; then 6254*5ddc57e5SXin Li compile_deplibs="$deplib $compile_deplibs" 6255*5ddc57e5SXin Li finalize_deplibs="$deplib $finalize_deplibs" 6256*5ddc57e5SXin Li else 6257*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6258*5ddc57e5SXin Li if test "$linkmode" = lib ; then 6259*5ddc57e5SXin Li case "$new_inherited_linker_flags " in 6260*5ddc57e5SXin Li *" $deplib "*) ;; 6261*5ddc57e5SXin Li * ) func_append new_inherited_linker_flags " $deplib" ;; 6262*5ddc57e5SXin Li esac 6263*5ddc57e5SXin Li fi 6264*5ddc57e5SXin Li fi 6265*5ddc57e5SXin Li continue 6266*5ddc57e5SXin Li ;; 6267*5ddc57e5SXin Li -L*) 6268*5ddc57e5SXin Li case $linkmode in 6269*5ddc57e5SXin Li lib) 6270*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6271*5ddc57e5SXin Li test "$pass" = conv && continue 6272*5ddc57e5SXin Li newdependency_libs="$deplib $newdependency_libs" 6273*5ddc57e5SXin Li func_stripname '-L' '' "$deplib" 6274*5ddc57e5SXin Li func_resolve_sysroot "$func_stripname_result" 6275*5ddc57e5SXin Li func_append newlib_search_path " $func_resolve_sysroot_result" 6276*5ddc57e5SXin Li ;; 6277*5ddc57e5SXin Li prog) 6278*5ddc57e5SXin Li if test "$pass" = conv; then 6279*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6280*5ddc57e5SXin Li continue 6281*5ddc57e5SXin Li fi 6282*5ddc57e5SXin Li if test "$pass" = scan; then 6283*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6284*5ddc57e5SXin Li else 6285*5ddc57e5SXin Li compile_deplibs="$deplib $compile_deplibs" 6286*5ddc57e5SXin Li finalize_deplibs="$deplib $finalize_deplibs" 6287*5ddc57e5SXin Li fi 6288*5ddc57e5SXin Li func_stripname '-L' '' "$deplib" 6289*5ddc57e5SXin Li func_resolve_sysroot "$func_stripname_result" 6290*5ddc57e5SXin Li func_append newlib_search_path " $func_resolve_sysroot_result" 6291*5ddc57e5SXin Li ;; 6292*5ddc57e5SXin Li *) 6293*5ddc57e5SXin Li func_warning "\`-L' is ignored for archives/objects" 6294*5ddc57e5SXin Li ;; 6295*5ddc57e5SXin Li esac # linkmode 6296*5ddc57e5SXin Li continue 6297*5ddc57e5SXin Li ;; # -L 6298*5ddc57e5SXin Li -R*) 6299*5ddc57e5SXin Li if test "$pass" = link; then 6300*5ddc57e5SXin Li func_stripname '-R' '' "$deplib" 6301*5ddc57e5SXin Li func_resolve_sysroot "$func_stripname_result" 6302*5ddc57e5SXin Li dir=$func_resolve_sysroot_result 6303*5ddc57e5SXin Li # Make sure the xrpath contains only unique directories. 6304*5ddc57e5SXin Li case "$xrpath " in 6305*5ddc57e5SXin Li *" $dir "*) ;; 6306*5ddc57e5SXin Li *) func_append xrpath " $dir" ;; 6307*5ddc57e5SXin Li esac 6308*5ddc57e5SXin Li fi 6309*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6310*5ddc57e5SXin Li continue 6311*5ddc57e5SXin Li ;; 6312*5ddc57e5SXin Li *.la) 6313*5ddc57e5SXin Li func_resolve_sysroot "$deplib" 6314*5ddc57e5SXin Li lib=$func_resolve_sysroot_result 6315*5ddc57e5SXin Li ;; 6316*5ddc57e5SXin Li *.$libext) 6317*5ddc57e5SXin Li if test "$pass" = conv; then 6318*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6319*5ddc57e5SXin Li continue 6320*5ddc57e5SXin Li fi 6321*5ddc57e5SXin Li case $linkmode in 6322*5ddc57e5SXin Li lib) 6323*5ddc57e5SXin Li # Linking convenience modules into shared libraries is allowed, 6324*5ddc57e5SXin Li # but linking other static libraries is non-portable. 6325*5ddc57e5SXin Li case " $dlpreconveniencelibs " in 6326*5ddc57e5SXin Li *" $deplib "*) ;; 6327*5ddc57e5SXin Li *) 6328*5ddc57e5SXin Li valid_a_lib=no 6329*5ddc57e5SXin Li case $deplibs_check_method in 6330*5ddc57e5SXin Li match_pattern*) 6331*5ddc57e5SXin Li set dummy $deplibs_check_method; shift 6332*5ddc57e5SXin Li match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6333*5ddc57e5SXin Li if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6334*5ddc57e5SXin Li | $EGREP "$match_pattern_regex" > /dev/null; then 6335*5ddc57e5SXin Li valid_a_lib=yes 6336*5ddc57e5SXin Li fi 6337*5ddc57e5SXin Li ;; 6338*5ddc57e5SXin Li pass_all) 6339*5ddc57e5SXin Li valid_a_lib=yes 6340*5ddc57e5SXin Li ;; 6341*5ddc57e5SXin Li esac 6342*5ddc57e5SXin Li if test "$valid_a_lib" != yes; then 6343*5ddc57e5SXin Li echo 6344*5ddc57e5SXin Li $ECHO "*** Warning: Trying to link with static lib archive $deplib." 6345*5ddc57e5SXin Li echo "*** I have the capability to make that library automatically link in when" 6346*5ddc57e5SXin Li echo "*** you link to this library. But I can only do this if you have a" 6347*5ddc57e5SXin Li echo "*** shared version of the library, which you do not appear to have" 6348*5ddc57e5SXin Li echo "*** because the file extensions .$libext of this argument makes me believe" 6349*5ddc57e5SXin Li echo "*** that it is just a static archive that I should not use here." 6350*5ddc57e5SXin Li else 6351*5ddc57e5SXin Li echo 6352*5ddc57e5SXin Li $ECHO "*** Warning: Linking the shared library $output against the" 6353*5ddc57e5SXin Li $ECHO "*** static library $deplib is not portable!" 6354*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6355*5ddc57e5SXin Li fi 6356*5ddc57e5SXin Li ;; 6357*5ddc57e5SXin Li esac 6358*5ddc57e5SXin Li continue 6359*5ddc57e5SXin Li ;; 6360*5ddc57e5SXin Li prog) 6361*5ddc57e5SXin Li if test "$pass" != link; then 6362*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6363*5ddc57e5SXin Li else 6364*5ddc57e5SXin Li compile_deplibs="$deplib $compile_deplibs" 6365*5ddc57e5SXin Li finalize_deplibs="$deplib $finalize_deplibs" 6366*5ddc57e5SXin Li fi 6367*5ddc57e5SXin Li continue 6368*5ddc57e5SXin Li ;; 6369*5ddc57e5SXin Li esac # linkmode 6370*5ddc57e5SXin Li ;; # *.$libext 6371*5ddc57e5SXin Li *.lo | *.$objext) 6372*5ddc57e5SXin Li if test "$pass" = conv; then 6373*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6374*5ddc57e5SXin Li elif test "$linkmode" = prog; then 6375*5ddc57e5SXin Li if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6376*5ddc57e5SXin Li # If there is no dlopen support or we're linking statically, 6377*5ddc57e5SXin Li # we need to preload. 6378*5ddc57e5SXin Li func_append newdlprefiles " $deplib" 6379*5ddc57e5SXin Li compile_deplibs="$deplib $compile_deplibs" 6380*5ddc57e5SXin Li finalize_deplibs="$deplib $finalize_deplibs" 6381*5ddc57e5SXin Li else 6382*5ddc57e5SXin Li func_append newdlfiles " $deplib" 6383*5ddc57e5SXin Li fi 6384*5ddc57e5SXin Li fi 6385*5ddc57e5SXin Li continue 6386*5ddc57e5SXin Li ;; 6387*5ddc57e5SXin Li %DEPLIBS%) 6388*5ddc57e5SXin Li alldeplibs=yes 6389*5ddc57e5SXin Li continue 6390*5ddc57e5SXin Li ;; 6391*5ddc57e5SXin Li esac # case $deplib 6392*5ddc57e5SXin Li 6393*5ddc57e5SXin Li if test "$found" = yes || test -f "$lib"; then : 6394*5ddc57e5SXin Li else 6395*5ddc57e5SXin Li func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6396*5ddc57e5SXin Li fi 6397*5ddc57e5SXin Li 6398*5ddc57e5SXin Li # Check to see that this really is a libtool archive. 6399*5ddc57e5SXin Li func_lalib_unsafe_p "$lib" \ 6400*5ddc57e5SXin Li || func_fatal_error "\`$lib' is not a valid libtool archive" 6401*5ddc57e5SXin Li 6402*5ddc57e5SXin Li func_dirname "$lib" "" "." 6403*5ddc57e5SXin Li ladir="$func_dirname_result" 6404*5ddc57e5SXin Li 6405*5ddc57e5SXin Li dlname= 6406*5ddc57e5SXin Li dlopen= 6407*5ddc57e5SXin Li dlpreopen= 6408*5ddc57e5SXin Li libdir= 6409*5ddc57e5SXin Li library_names= 6410*5ddc57e5SXin Li old_library= 6411*5ddc57e5SXin Li inherited_linker_flags= 6412*5ddc57e5SXin Li # If the library was installed with an old release of libtool, 6413*5ddc57e5SXin Li # it will not redefine variables installed, or shouldnotlink 6414*5ddc57e5SXin Li installed=yes 6415*5ddc57e5SXin Li shouldnotlink=no 6416*5ddc57e5SXin Li avoidtemprpath= 6417*5ddc57e5SXin Li 6418*5ddc57e5SXin Li 6419*5ddc57e5SXin Li # Read the .la file 6420*5ddc57e5SXin Li func_source "$lib" 6421*5ddc57e5SXin Li 6422*5ddc57e5SXin Li # Convert "-framework foo" to "foo.ltframework" 6423*5ddc57e5SXin Li if test -n "$inherited_linker_flags"; then 6424*5ddc57e5SXin Li tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6425*5ddc57e5SXin Li for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6426*5ddc57e5SXin Li case " $new_inherited_linker_flags " in 6427*5ddc57e5SXin Li *" $tmp_inherited_linker_flag "*) ;; 6428*5ddc57e5SXin Li *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6429*5ddc57e5SXin Li esac 6430*5ddc57e5SXin Li done 6431*5ddc57e5SXin Li fi 6432*5ddc57e5SXin Li dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6433*5ddc57e5SXin Li if test "$linkmode,$pass" = "lib,link" || 6434*5ddc57e5SXin Li test "$linkmode,$pass" = "prog,scan" || 6435*5ddc57e5SXin Li { test "$linkmode" != prog && test "$linkmode" != lib; }; then 6436*5ddc57e5SXin Li test -n "$dlopen" && func_append dlfiles " $dlopen" 6437*5ddc57e5SXin Li test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6438*5ddc57e5SXin Li fi 6439*5ddc57e5SXin Li 6440*5ddc57e5SXin Li if test "$pass" = conv; then 6441*5ddc57e5SXin Li # Only check for convenience libraries 6442*5ddc57e5SXin Li deplibs="$lib $deplibs" 6443*5ddc57e5SXin Li if test -z "$libdir"; then 6444*5ddc57e5SXin Li if test -z "$old_library"; then 6445*5ddc57e5SXin Li func_fatal_error "cannot find name of link library for \`$lib'" 6446*5ddc57e5SXin Li fi 6447*5ddc57e5SXin Li # It is a libtool convenience library, so add in its objects. 6448*5ddc57e5SXin Li func_append convenience " $ladir/$objdir/$old_library" 6449*5ddc57e5SXin Li func_append old_convenience " $ladir/$objdir/$old_library" 6450*5ddc57e5SXin Li tmp_libs= 6451*5ddc57e5SXin Li for deplib in $dependency_libs; do 6452*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6453*5ddc57e5SXin Li if $opt_preserve_dup_deps ; then 6454*5ddc57e5SXin Li case "$tmp_libs " in 6455*5ddc57e5SXin Li *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6456*5ddc57e5SXin Li esac 6457*5ddc57e5SXin Li fi 6458*5ddc57e5SXin Li func_append tmp_libs " $deplib" 6459*5ddc57e5SXin Li done 6460*5ddc57e5SXin Li elif test "$linkmode" != prog && test "$linkmode" != lib; then 6461*5ddc57e5SXin Li func_fatal_error "\`$lib' is not a convenience library" 6462*5ddc57e5SXin Li fi 6463*5ddc57e5SXin Li continue 6464*5ddc57e5SXin Li fi # $pass = conv 6465*5ddc57e5SXin Li 6466*5ddc57e5SXin Li 6467*5ddc57e5SXin Li # Get the name of the library we link against. 6468*5ddc57e5SXin Li linklib= 6469*5ddc57e5SXin Li if test -n "$old_library" && 6470*5ddc57e5SXin Li { test "$prefer_static_libs" = yes || 6471*5ddc57e5SXin Li test "$prefer_static_libs,$installed" = "built,no"; }; then 6472*5ddc57e5SXin Li linklib=$old_library 6473*5ddc57e5SXin Li else 6474*5ddc57e5SXin Li for l in $old_library $library_names; do 6475*5ddc57e5SXin Li linklib="$l" 6476*5ddc57e5SXin Li done 6477*5ddc57e5SXin Li fi 6478*5ddc57e5SXin Li if test -z "$linklib"; then 6479*5ddc57e5SXin Li func_fatal_error "cannot find name of link library for \`$lib'" 6480*5ddc57e5SXin Li fi 6481*5ddc57e5SXin Li 6482*5ddc57e5SXin Li # This library was specified with -dlopen. 6483*5ddc57e5SXin Li if test "$pass" = dlopen; then 6484*5ddc57e5SXin Li if test -z "$libdir"; then 6485*5ddc57e5SXin Li func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6486*5ddc57e5SXin Li fi 6487*5ddc57e5SXin Li if test -z "$dlname" || 6488*5ddc57e5SXin Li test "$dlopen_support" != yes || 6489*5ddc57e5SXin Li test "$build_libtool_libs" = no; then 6490*5ddc57e5SXin Li # If there is no dlname, no dlopen support or we're linking 6491*5ddc57e5SXin Li # statically, we need to preload. We also need to preload any 6492*5ddc57e5SXin Li # dependent libraries so libltdl's deplib preloader doesn't 6493*5ddc57e5SXin Li # bomb out in the load deplibs phase. 6494*5ddc57e5SXin Li func_append dlprefiles " $lib $dependency_libs" 6495*5ddc57e5SXin Li else 6496*5ddc57e5SXin Li func_append newdlfiles " $lib" 6497*5ddc57e5SXin Li fi 6498*5ddc57e5SXin Li continue 6499*5ddc57e5SXin Li fi # $pass = dlopen 6500*5ddc57e5SXin Li 6501*5ddc57e5SXin Li # We need an absolute path. 6502*5ddc57e5SXin Li case $ladir in 6503*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6504*5ddc57e5SXin Li *) 6505*5ddc57e5SXin Li abs_ladir=`cd "$ladir" && pwd` 6506*5ddc57e5SXin Li if test -z "$abs_ladir"; then 6507*5ddc57e5SXin Li func_warning "cannot determine absolute directory name of \`$ladir'" 6508*5ddc57e5SXin Li func_warning "passing it literally to the linker, although it might fail" 6509*5ddc57e5SXin Li abs_ladir="$ladir" 6510*5ddc57e5SXin Li fi 6511*5ddc57e5SXin Li ;; 6512*5ddc57e5SXin Li esac 6513*5ddc57e5SXin Li func_basename "$lib" 6514*5ddc57e5SXin Li laname="$func_basename_result" 6515*5ddc57e5SXin Li 6516*5ddc57e5SXin Li # Find the relevant object directory and library name. 6517*5ddc57e5SXin Li if test "X$installed" = Xyes; then 6518*5ddc57e5SXin Li if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6519*5ddc57e5SXin Li func_warning "library \`$lib' was moved." 6520*5ddc57e5SXin Li dir="$ladir" 6521*5ddc57e5SXin Li absdir="$abs_ladir" 6522*5ddc57e5SXin Li libdir="$abs_ladir" 6523*5ddc57e5SXin Li else 6524*5ddc57e5SXin Li dir="$lt_sysroot$libdir" 6525*5ddc57e5SXin Li absdir="$lt_sysroot$libdir" 6526*5ddc57e5SXin Li fi 6527*5ddc57e5SXin Li test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6528*5ddc57e5SXin Li else 6529*5ddc57e5SXin Li if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6530*5ddc57e5SXin Li dir="$ladir" 6531*5ddc57e5SXin Li absdir="$abs_ladir" 6532*5ddc57e5SXin Li # Remove this search path later 6533*5ddc57e5SXin Li func_append notinst_path " $abs_ladir" 6534*5ddc57e5SXin Li else 6535*5ddc57e5SXin Li dir="$ladir/$objdir" 6536*5ddc57e5SXin Li absdir="$abs_ladir/$objdir" 6537*5ddc57e5SXin Li # Remove this search path later 6538*5ddc57e5SXin Li func_append notinst_path " $abs_ladir" 6539*5ddc57e5SXin Li fi 6540*5ddc57e5SXin Li fi # $installed = yes 6541*5ddc57e5SXin Li func_stripname 'lib' '.la' "$laname" 6542*5ddc57e5SXin Li name=$func_stripname_result 6543*5ddc57e5SXin Li 6544*5ddc57e5SXin Li # This library was specified with -dlpreopen. 6545*5ddc57e5SXin Li if test "$pass" = dlpreopen; then 6546*5ddc57e5SXin Li if test -z "$libdir" && test "$linkmode" = prog; then 6547*5ddc57e5SXin Li func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6548*5ddc57e5SXin Li fi 6549*5ddc57e5SXin Li case "$host" in 6550*5ddc57e5SXin Li # special handling for platforms with PE-DLLs. 6551*5ddc57e5SXin Li *cygwin* | *mingw* | *cegcc* ) 6552*5ddc57e5SXin Li # Linker will automatically link against shared library if both 6553*5ddc57e5SXin Li # static and shared are present. Therefore, ensure we extract 6554*5ddc57e5SXin Li # symbols from the import library if a shared library is present 6555*5ddc57e5SXin Li # (otherwise, the dlopen module name will be incorrect). We do 6556*5ddc57e5SXin Li # this by putting the import library name into $newdlprefiles. 6557*5ddc57e5SXin Li # We recover the dlopen module name by 'saving' the la file 6558*5ddc57e5SXin Li # name in a special purpose variable, and (later) extracting the 6559*5ddc57e5SXin Li # dlname from the la file. 6560*5ddc57e5SXin Li if test -n "$dlname"; then 6561*5ddc57e5SXin Li func_tr_sh "$dir/$linklib" 6562*5ddc57e5SXin Li eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 6563*5ddc57e5SXin Li func_append newdlprefiles " $dir/$linklib" 6564*5ddc57e5SXin Li else 6565*5ddc57e5SXin Li func_append newdlprefiles " $dir/$old_library" 6566*5ddc57e5SXin Li # Keep a list of preopened convenience libraries to check 6567*5ddc57e5SXin Li # that they are being used correctly in the link pass. 6568*5ddc57e5SXin Li test -z "$libdir" && \ 6569*5ddc57e5SXin Li func_append dlpreconveniencelibs " $dir/$old_library" 6570*5ddc57e5SXin Li fi 6571*5ddc57e5SXin Li ;; 6572*5ddc57e5SXin Li * ) 6573*5ddc57e5SXin Li # Prefer using a static library (so that no silly _DYNAMIC symbols 6574*5ddc57e5SXin Li # are required to link). 6575*5ddc57e5SXin Li if test -n "$old_library"; then 6576*5ddc57e5SXin Li func_append newdlprefiles " $dir/$old_library" 6577*5ddc57e5SXin Li # Keep a list of preopened convenience libraries to check 6578*5ddc57e5SXin Li # that they are being used correctly in the link pass. 6579*5ddc57e5SXin Li test -z "$libdir" && \ 6580*5ddc57e5SXin Li func_append dlpreconveniencelibs " $dir/$old_library" 6581*5ddc57e5SXin Li # Otherwise, use the dlname, so that lt_dlopen finds it. 6582*5ddc57e5SXin Li elif test -n "$dlname"; then 6583*5ddc57e5SXin Li func_append newdlprefiles " $dir/$dlname" 6584*5ddc57e5SXin Li else 6585*5ddc57e5SXin Li func_append newdlprefiles " $dir/$linklib" 6586*5ddc57e5SXin Li fi 6587*5ddc57e5SXin Li ;; 6588*5ddc57e5SXin Li esac 6589*5ddc57e5SXin Li fi # $pass = dlpreopen 6590*5ddc57e5SXin Li 6591*5ddc57e5SXin Li if test -z "$libdir"; then 6592*5ddc57e5SXin Li # Link the convenience library 6593*5ddc57e5SXin Li if test "$linkmode" = lib; then 6594*5ddc57e5SXin Li deplibs="$dir/$old_library $deplibs" 6595*5ddc57e5SXin Li elif test "$linkmode,$pass" = "prog,link"; then 6596*5ddc57e5SXin Li compile_deplibs="$dir/$old_library $compile_deplibs" 6597*5ddc57e5SXin Li finalize_deplibs="$dir/$old_library $finalize_deplibs" 6598*5ddc57e5SXin Li else 6599*5ddc57e5SXin Li deplibs="$lib $deplibs" # used for prog,scan pass 6600*5ddc57e5SXin Li fi 6601*5ddc57e5SXin Li continue 6602*5ddc57e5SXin Li fi 6603*5ddc57e5SXin Li 6604*5ddc57e5SXin Li 6605*5ddc57e5SXin Li if test "$linkmode" = prog && test "$pass" != link; then 6606*5ddc57e5SXin Li func_append newlib_search_path " $ladir" 6607*5ddc57e5SXin Li deplibs="$lib $deplibs" 6608*5ddc57e5SXin Li 6609*5ddc57e5SXin Li linkalldeplibs=no 6610*5ddc57e5SXin Li if test "$link_all_deplibs" != no || test -z "$library_names" || 6611*5ddc57e5SXin Li test "$build_libtool_libs" = no; then 6612*5ddc57e5SXin Li linkalldeplibs=yes 6613*5ddc57e5SXin Li fi 6614*5ddc57e5SXin Li 6615*5ddc57e5SXin Li tmp_libs= 6616*5ddc57e5SXin Li for deplib in $dependency_libs; do 6617*5ddc57e5SXin Li case $deplib in 6618*5ddc57e5SXin Li -L*) func_stripname '-L' '' "$deplib" 6619*5ddc57e5SXin Li func_resolve_sysroot "$func_stripname_result" 6620*5ddc57e5SXin Li func_append newlib_search_path " $func_resolve_sysroot_result" 6621*5ddc57e5SXin Li ;; 6622*5ddc57e5SXin Li esac 6623*5ddc57e5SXin Li # Need to link against all dependency_libs? 6624*5ddc57e5SXin Li if test "$linkalldeplibs" = yes; then 6625*5ddc57e5SXin Li deplibs="$deplib $deplibs" 6626*5ddc57e5SXin Li else 6627*5ddc57e5SXin Li # Need to hardcode shared library paths 6628*5ddc57e5SXin Li # or/and link against static libraries 6629*5ddc57e5SXin Li newdependency_libs="$deplib $newdependency_libs" 6630*5ddc57e5SXin Li fi 6631*5ddc57e5SXin Li if $opt_preserve_dup_deps ; then 6632*5ddc57e5SXin Li case "$tmp_libs " in 6633*5ddc57e5SXin Li *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6634*5ddc57e5SXin Li esac 6635*5ddc57e5SXin Li fi 6636*5ddc57e5SXin Li func_append tmp_libs " $deplib" 6637*5ddc57e5SXin Li done # for deplib 6638*5ddc57e5SXin Li continue 6639*5ddc57e5SXin Li fi # $linkmode = prog... 6640*5ddc57e5SXin Li 6641*5ddc57e5SXin Li if test "$linkmode,$pass" = "prog,link"; then 6642*5ddc57e5SXin Li if test -n "$library_names" && 6643*5ddc57e5SXin Li { { test "$prefer_static_libs" = no || 6644*5ddc57e5SXin Li test "$prefer_static_libs,$installed" = "built,yes"; } || 6645*5ddc57e5SXin Li test -z "$old_library"; }; then 6646*5ddc57e5SXin Li # We need to hardcode the library path 6647*5ddc57e5SXin Li if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6648*5ddc57e5SXin Li # Make sure the rpath contains only unique directories. 6649*5ddc57e5SXin Li case "$temp_rpath:" in 6650*5ddc57e5SXin Li *"$absdir:"*) ;; 6651*5ddc57e5SXin Li *) func_append temp_rpath "$absdir:" ;; 6652*5ddc57e5SXin Li esac 6653*5ddc57e5SXin Li fi 6654*5ddc57e5SXin Li 6655*5ddc57e5SXin Li # Hardcode the library path. 6656*5ddc57e5SXin Li # Skip directories that are in the system default run-time 6657*5ddc57e5SXin Li # search path. 6658*5ddc57e5SXin Li case " $sys_lib_dlsearch_path " in 6659*5ddc57e5SXin Li *" $absdir "*) ;; 6660*5ddc57e5SXin Li *) 6661*5ddc57e5SXin Li case "$compile_rpath " in 6662*5ddc57e5SXin Li *" $absdir "*) ;; 6663*5ddc57e5SXin Li *) func_append compile_rpath " $absdir" ;; 6664*5ddc57e5SXin Li esac 6665*5ddc57e5SXin Li ;; 6666*5ddc57e5SXin Li esac 6667*5ddc57e5SXin Li case " $sys_lib_dlsearch_path " in 6668*5ddc57e5SXin Li *" $libdir "*) ;; 6669*5ddc57e5SXin Li *) 6670*5ddc57e5SXin Li case "$finalize_rpath " in 6671*5ddc57e5SXin Li *" $libdir "*) ;; 6672*5ddc57e5SXin Li *) func_append finalize_rpath " $libdir" ;; 6673*5ddc57e5SXin Li esac 6674*5ddc57e5SXin Li ;; 6675*5ddc57e5SXin Li esac 6676*5ddc57e5SXin Li fi # $linkmode,$pass = prog,link... 6677*5ddc57e5SXin Li 6678*5ddc57e5SXin Li if test "$alldeplibs" = yes && 6679*5ddc57e5SXin Li { test "$deplibs_check_method" = pass_all || 6680*5ddc57e5SXin Li { test "$build_libtool_libs" = yes && 6681*5ddc57e5SXin Li test -n "$library_names"; }; }; then 6682*5ddc57e5SXin Li # We only need to search for static libraries 6683*5ddc57e5SXin Li continue 6684*5ddc57e5SXin Li fi 6685*5ddc57e5SXin Li fi 6686*5ddc57e5SXin Li 6687*5ddc57e5SXin Li link_static=no # Whether the deplib will be linked statically 6688*5ddc57e5SXin Li use_static_libs=$prefer_static_libs 6689*5ddc57e5SXin Li if test "$use_static_libs" = built && test "$installed" = yes; then 6690*5ddc57e5SXin Li use_static_libs=no 6691*5ddc57e5SXin Li fi 6692*5ddc57e5SXin Li if test -n "$library_names" && 6693*5ddc57e5SXin Li { test "$use_static_libs" = no || test -z "$old_library"; }; then 6694*5ddc57e5SXin Li case $host in 6695*5ddc57e5SXin Li *cygwin* | *mingw* | *cegcc*) 6696*5ddc57e5SXin Li # No point in relinking DLLs because paths are not encoded 6697*5ddc57e5SXin Li func_append notinst_deplibs " $lib" 6698*5ddc57e5SXin Li need_relink=no 6699*5ddc57e5SXin Li ;; 6700*5ddc57e5SXin Li *) 6701*5ddc57e5SXin Li if test "$installed" = no; then 6702*5ddc57e5SXin Li func_append notinst_deplibs " $lib" 6703*5ddc57e5SXin Li need_relink=yes 6704*5ddc57e5SXin Li fi 6705*5ddc57e5SXin Li ;; 6706*5ddc57e5SXin Li esac 6707*5ddc57e5SXin Li # This is a shared library 6708*5ddc57e5SXin Li 6709*5ddc57e5SXin Li # Warn about portability, can't link against -module's on some 6710*5ddc57e5SXin Li # systems (darwin). Don't bleat about dlopened modules though! 6711*5ddc57e5SXin Li dlopenmodule="" 6712*5ddc57e5SXin Li for dlpremoduletest in $dlprefiles; do 6713*5ddc57e5SXin Li if test "X$dlpremoduletest" = "X$lib"; then 6714*5ddc57e5SXin Li dlopenmodule="$dlpremoduletest" 6715*5ddc57e5SXin Li break 6716*5ddc57e5SXin Li fi 6717*5ddc57e5SXin Li done 6718*5ddc57e5SXin Li if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 6719*5ddc57e5SXin Li echo 6720*5ddc57e5SXin Li if test "$linkmode" = prog; then 6721*5ddc57e5SXin Li $ECHO "*** Warning: Linking the executable $output against the loadable module" 6722*5ddc57e5SXin Li else 6723*5ddc57e5SXin Li $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6724*5ddc57e5SXin Li fi 6725*5ddc57e5SXin Li $ECHO "*** $linklib is not portable!" 6726*5ddc57e5SXin Li fi 6727*5ddc57e5SXin Li if test "$linkmode" = lib && 6728*5ddc57e5SXin Li test "$hardcode_into_libs" = yes; then 6729*5ddc57e5SXin Li # Hardcode the library path. 6730*5ddc57e5SXin Li # Skip directories that are in the system default run-time 6731*5ddc57e5SXin Li # search path. 6732*5ddc57e5SXin Li case " $sys_lib_dlsearch_path " in 6733*5ddc57e5SXin Li *" $absdir "*) ;; 6734*5ddc57e5SXin Li *) 6735*5ddc57e5SXin Li case "$compile_rpath " in 6736*5ddc57e5SXin Li *" $absdir "*) ;; 6737*5ddc57e5SXin Li *) func_append compile_rpath " $absdir" ;; 6738*5ddc57e5SXin Li esac 6739*5ddc57e5SXin Li ;; 6740*5ddc57e5SXin Li esac 6741*5ddc57e5SXin Li case " $sys_lib_dlsearch_path " in 6742*5ddc57e5SXin Li *" $libdir "*) ;; 6743*5ddc57e5SXin Li *) 6744*5ddc57e5SXin Li case "$finalize_rpath " in 6745*5ddc57e5SXin Li *" $libdir "*) ;; 6746*5ddc57e5SXin Li *) func_append finalize_rpath " $libdir" ;; 6747*5ddc57e5SXin Li esac 6748*5ddc57e5SXin Li ;; 6749*5ddc57e5SXin Li esac 6750*5ddc57e5SXin Li fi 6751*5ddc57e5SXin Li 6752*5ddc57e5SXin Li if test -n "$old_archive_from_expsyms_cmds"; then 6753*5ddc57e5SXin Li # figure out the soname 6754*5ddc57e5SXin Li set dummy $library_names 6755*5ddc57e5SXin Li shift 6756*5ddc57e5SXin Li realname="$1" 6757*5ddc57e5SXin Li shift 6758*5ddc57e5SXin Li libname=`eval "\\$ECHO \"$libname_spec\""` 6759*5ddc57e5SXin Li # use dlname if we got it. it's perfectly good, no? 6760*5ddc57e5SXin Li if test -n "$dlname"; then 6761*5ddc57e5SXin Li soname="$dlname" 6762*5ddc57e5SXin Li elif test -n "$soname_spec"; then 6763*5ddc57e5SXin Li # bleh windows 6764*5ddc57e5SXin Li case $host in 6765*5ddc57e5SXin Li *cygwin* | mingw* | *cegcc*) 6766*5ddc57e5SXin Li func_arith $current - $age 6767*5ddc57e5SXin Li major=$func_arith_result 6768*5ddc57e5SXin Li versuffix="-$major" 6769*5ddc57e5SXin Li ;; 6770*5ddc57e5SXin Li esac 6771*5ddc57e5SXin Li eval soname=\"$soname_spec\" 6772*5ddc57e5SXin Li else 6773*5ddc57e5SXin Li soname="$realname" 6774*5ddc57e5SXin Li fi 6775*5ddc57e5SXin Li 6776*5ddc57e5SXin Li # Make a new name for the extract_expsyms_cmds to use 6777*5ddc57e5SXin Li soroot="$soname" 6778*5ddc57e5SXin Li func_basename "$soroot" 6779*5ddc57e5SXin Li soname="$func_basename_result" 6780*5ddc57e5SXin Li func_stripname 'lib' '.dll' "$soname" 6781*5ddc57e5SXin Li newlib=libimp-$func_stripname_result.a 6782*5ddc57e5SXin Li 6783*5ddc57e5SXin Li # If the library has no export list, then create one now 6784*5ddc57e5SXin Li if test -f "$output_objdir/$soname-def"; then : 6785*5ddc57e5SXin Li else 6786*5ddc57e5SXin Li func_verbose "extracting exported symbol list from \`$soname'" 6787*5ddc57e5SXin Li func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6788*5ddc57e5SXin Li fi 6789*5ddc57e5SXin Li 6790*5ddc57e5SXin Li # Create $newlib 6791*5ddc57e5SXin Li if test -f "$output_objdir/$newlib"; then :; else 6792*5ddc57e5SXin Li func_verbose "generating import library for \`$soname'" 6793*5ddc57e5SXin Li func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6794*5ddc57e5SXin Li fi 6795*5ddc57e5SXin Li # make sure the library variables are pointing to the new library 6796*5ddc57e5SXin Li dir=$output_objdir 6797*5ddc57e5SXin Li linklib=$newlib 6798*5ddc57e5SXin Li fi # test -n "$old_archive_from_expsyms_cmds" 6799*5ddc57e5SXin Li 6800*5ddc57e5SXin Li if test "$linkmode" = prog || test "$opt_mode" != relink; then 6801*5ddc57e5SXin Li add_shlibpath= 6802*5ddc57e5SXin Li add_dir= 6803*5ddc57e5SXin Li add= 6804*5ddc57e5SXin Li lib_linked=yes 6805*5ddc57e5SXin Li case $hardcode_action in 6806*5ddc57e5SXin Li immediate | unsupported) 6807*5ddc57e5SXin Li if test "$hardcode_direct" = no; then 6808*5ddc57e5SXin Li add="$dir/$linklib" 6809*5ddc57e5SXin Li case $host in 6810*5ddc57e5SXin Li *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6811*5ddc57e5SXin Li *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6812*5ddc57e5SXin Li *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6813*5ddc57e5SXin Li *-*-unixware7*) add_dir="-L$dir" ;; 6814*5ddc57e5SXin Li *-*-darwin* ) 6815*5ddc57e5SXin Li # if the lib is a (non-dlopened) module then we can not 6816*5ddc57e5SXin Li # link against it, someone is ignoring the earlier warnings 6817*5ddc57e5SXin Li if /usr/bin/file -L $add 2> /dev/null | 6818*5ddc57e5SXin Li $GREP ": [^:]* bundle" >/dev/null ; then 6819*5ddc57e5SXin Li if test "X$dlopenmodule" != "X$lib"; then 6820*5ddc57e5SXin Li $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6821*5ddc57e5SXin Li if test -z "$old_library" ; then 6822*5ddc57e5SXin Li echo 6823*5ddc57e5SXin Li echo "*** And there doesn't seem to be a static archive available" 6824*5ddc57e5SXin Li echo "*** The link will probably fail, sorry" 6825*5ddc57e5SXin Li else 6826*5ddc57e5SXin Li add="$dir/$old_library" 6827*5ddc57e5SXin Li fi 6828*5ddc57e5SXin Li elif test -n "$old_library"; then 6829*5ddc57e5SXin Li add="$dir/$old_library" 6830*5ddc57e5SXin Li fi 6831*5ddc57e5SXin Li fi 6832*5ddc57e5SXin Li esac 6833*5ddc57e5SXin Li elif test "$hardcode_minus_L" = no; then 6834*5ddc57e5SXin Li case $host in 6835*5ddc57e5SXin Li *-*-sunos*) add_shlibpath="$dir" ;; 6836*5ddc57e5SXin Li esac 6837*5ddc57e5SXin Li add_dir="-L$dir" 6838*5ddc57e5SXin Li add="-l$name" 6839*5ddc57e5SXin Li elif test "$hardcode_shlibpath_var" = no; then 6840*5ddc57e5SXin Li add_shlibpath="$dir" 6841*5ddc57e5SXin Li add="-l$name" 6842*5ddc57e5SXin Li else 6843*5ddc57e5SXin Li lib_linked=no 6844*5ddc57e5SXin Li fi 6845*5ddc57e5SXin Li ;; 6846*5ddc57e5SXin Li relink) 6847*5ddc57e5SXin Li if test "$hardcode_direct" = yes && 6848*5ddc57e5SXin Li test "$hardcode_direct_absolute" = no; then 6849*5ddc57e5SXin Li add="$dir/$linklib" 6850*5ddc57e5SXin Li elif test "$hardcode_minus_L" = yes; then 6851*5ddc57e5SXin Li add_dir="-L$absdir" 6852*5ddc57e5SXin Li # Try looking first in the location we're being installed to. 6853*5ddc57e5SXin Li if test -n "$inst_prefix_dir"; then 6854*5ddc57e5SXin Li case $libdir in 6855*5ddc57e5SXin Li [\\/]*) 6856*5ddc57e5SXin Li func_append add_dir " -L$inst_prefix_dir$libdir" 6857*5ddc57e5SXin Li ;; 6858*5ddc57e5SXin Li esac 6859*5ddc57e5SXin Li fi 6860*5ddc57e5SXin Li add="-l$name" 6861*5ddc57e5SXin Li elif test "$hardcode_shlibpath_var" = yes; then 6862*5ddc57e5SXin Li add_shlibpath="$dir" 6863*5ddc57e5SXin Li add="-l$name" 6864*5ddc57e5SXin Li else 6865*5ddc57e5SXin Li lib_linked=no 6866*5ddc57e5SXin Li fi 6867*5ddc57e5SXin Li ;; 6868*5ddc57e5SXin Li *) lib_linked=no ;; 6869*5ddc57e5SXin Li esac 6870*5ddc57e5SXin Li 6871*5ddc57e5SXin Li if test "$lib_linked" != yes; then 6872*5ddc57e5SXin Li func_fatal_configuration "unsupported hardcode properties" 6873*5ddc57e5SXin Li fi 6874*5ddc57e5SXin Li 6875*5ddc57e5SXin Li if test -n "$add_shlibpath"; then 6876*5ddc57e5SXin Li case :$compile_shlibpath: in 6877*5ddc57e5SXin Li *":$add_shlibpath:"*) ;; 6878*5ddc57e5SXin Li *) func_append compile_shlibpath "$add_shlibpath:" ;; 6879*5ddc57e5SXin Li esac 6880*5ddc57e5SXin Li fi 6881*5ddc57e5SXin Li if test "$linkmode" = prog; then 6882*5ddc57e5SXin Li test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6883*5ddc57e5SXin Li test -n "$add" && compile_deplibs="$add $compile_deplibs" 6884*5ddc57e5SXin Li else 6885*5ddc57e5SXin Li test -n "$add_dir" && deplibs="$add_dir $deplibs" 6886*5ddc57e5SXin Li test -n "$add" && deplibs="$add $deplibs" 6887*5ddc57e5SXin Li if test "$hardcode_direct" != yes && 6888*5ddc57e5SXin Li test "$hardcode_minus_L" != yes && 6889*5ddc57e5SXin Li test "$hardcode_shlibpath_var" = yes; then 6890*5ddc57e5SXin Li case :$finalize_shlibpath: in 6891*5ddc57e5SXin Li *":$libdir:"*) ;; 6892*5ddc57e5SXin Li *) func_append finalize_shlibpath "$libdir:" ;; 6893*5ddc57e5SXin Li esac 6894*5ddc57e5SXin Li fi 6895*5ddc57e5SXin Li fi 6896*5ddc57e5SXin Li fi 6897*5ddc57e5SXin Li 6898*5ddc57e5SXin Li if test "$linkmode" = prog || test "$opt_mode" = relink; then 6899*5ddc57e5SXin Li add_shlibpath= 6900*5ddc57e5SXin Li add_dir= 6901*5ddc57e5SXin Li add= 6902*5ddc57e5SXin Li # Finalize command for both is simple: just hardcode it. 6903*5ddc57e5SXin Li if test "$hardcode_direct" = yes && 6904*5ddc57e5SXin Li test "$hardcode_direct_absolute" = no; then 6905*5ddc57e5SXin Li add="$libdir/$linklib" 6906*5ddc57e5SXin Li elif test "$hardcode_minus_L" = yes; then 6907*5ddc57e5SXin Li add_dir="-L$libdir" 6908*5ddc57e5SXin Li add="-l$name" 6909*5ddc57e5SXin Li elif test "$hardcode_shlibpath_var" = yes; then 6910*5ddc57e5SXin Li case :$finalize_shlibpath: in 6911*5ddc57e5SXin Li *":$libdir:"*) ;; 6912*5ddc57e5SXin Li *) func_append finalize_shlibpath "$libdir:" ;; 6913*5ddc57e5SXin Li esac 6914*5ddc57e5SXin Li add="-l$name" 6915*5ddc57e5SXin Li elif test "$hardcode_automatic" = yes; then 6916*5ddc57e5SXin Li if test -n "$inst_prefix_dir" && 6917*5ddc57e5SXin Li test -f "$inst_prefix_dir$libdir/$linklib" ; then 6918*5ddc57e5SXin Li add="$inst_prefix_dir$libdir/$linklib" 6919*5ddc57e5SXin Li else 6920*5ddc57e5SXin Li add="$libdir/$linklib" 6921*5ddc57e5SXin Li fi 6922*5ddc57e5SXin Li else 6923*5ddc57e5SXin Li # We cannot seem to hardcode it, guess we'll fake it. 6924*5ddc57e5SXin Li add_dir="-L$libdir" 6925*5ddc57e5SXin Li # Try looking first in the location we're being installed to. 6926*5ddc57e5SXin Li if test -n "$inst_prefix_dir"; then 6927*5ddc57e5SXin Li case $libdir in 6928*5ddc57e5SXin Li [\\/]*) 6929*5ddc57e5SXin Li func_append add_dir " -L$inst_prefix_dir$libdir" 6930*5ddc57e5SXin Li ;; 6931*5ddc57e5SXin Li esac 6932*5ddc57e5SXin Li fi 6933*5ddc57e5SXin Li add="-l$name" 6934*5ddc57e5SXin Li fi 6935*5ddc57e5SXin Li 6936*5ddc57e5SXin Li if test "$linkmode" = prog; then 6937*5ddc57e5SXin Li test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6938*5ddc57e5SXin Li test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6939*5ddc57e5SXin Li else 6940*5ddc57e5SXin Li test -n "$add_dir" && deplibs="$add_dir $deplibs" 6941*5ddc57e5SXin Li test -n "$add" && deplibs="$add $deplibs" 6942*5ddc57e5SXin Li fi 6943*5ddc57e5SXin Li fi 6944*5ddc57e5SXin Li elif test "$linkmode" = prog; then 6945*5ddc57e5SXin Li # Here we assume that one of hardcode_direct or hardcode_minus_L 6946*5ddc57e5SXin Li # is not unsupported. This is valid on all known static and 6947*5ddc57e5SXin Li # shared platforms. 6948*5ddc57e5SXin Li if test "$hardcode_direct" != unsupported; then 6949*5ddc57e5SXin Li test -n "$old_library" && linklib="$old_library" 6950*5ddc57e5SXin Li compile_deplibs="$dir/$linklib $compile_deplibs" 6951*5ddc57e5SXin Li finalize_deplibs="$dir/$linklib $finalize_deplibs" 6952*5ddc57e5SXin Li else 6953*5ddc57e5SXin Li compile_deplibs="-l$name -L$dir $compile_deplibs" 6954*5ddc57e5SXin Li finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6955*5ddc57e5SXin Li fi 6956*5ddc57e5SXin Li elif test "$build_libtool_libs" = yes; then 6957*5ddc57e5SXin Li # Not a shared library 6958*5ddc57e5SXin Li if test "$deplibs_check_method" != pass_all; then 6959*5ddc57e5SXin Li # We're trying link a shared library against a static one 6960*5ddc57e5SXin Li # but the system doesn't support it. 6961*5ddc57e5SXin Li 6962*5ddc57e5SXin Li # Just print a warning and add the library to dependency_libs so 6963*5ddc57e5SXin Li # that the program can be linked against the static library. 6964*5ddc57e5SXin Li echo 6965*5ddc57e5SXin Li $ECHO "*** Warning: This system can not link to static lib archive $lib." 6966*5ddc57e5SXin Li echo "*** I have the capability to make that library automatically link in when" 6967*5ddc57e5SXin Li echo "*** you link to this library. But I can only do this if you have a" 6968*5ddc57e5SXin Li echo "*** shared version of the library, which you do not appear to have." 6969*5ddc57e5SXin Li if test "$module" = yes; then 6970*5ddc57e5SXin Li echo "*** But as you try to build a module library, libtool will still create " 6971*5ddc57e5SXin Li echo "*** a static module, that should work as long as the dlopening application" 6972*5ddc57e5SXin Li echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6973*5ddc57e5SXin Li if test -z "$global_symbol_pipe"; then 6974*5ddc57e5SXin Li echo 6975*5ddc57e5SXin Li echo "*** However, this would only work if libtool was able to extract symbol" 6976*5ddc57e5SXin Li echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6977*5ddc57e5SXin Li echo "*** not find such a program. So, this module is probably useless." 6978*5ddc57e5SXin Li echo "*** \`nm' from GNU binutils and a full rebuild may help." 6979*5ddc57e5SXin Li fi 6980*5ddc57e5SXin Li if test "$build_old_libs" = no; then 6981*5ddc57e5SXin Li build_libtool_libs=module 6982*5ddc57e5SXin Li build_old_libs=yes 6983*5ddc57e5SXin Li else 6984*5ddc57e5SXin Li build_libtool_libs=no 6985*5ddc57e5SXin Li fi 6986*5ddc57e5SXin Li fi 6987*5ddc57e5SXin Li else 6988*5ddc57e5SXin Li deplibs="$dir/$old_library $deplibs" 6989*5ddc57e5SXin Li link_static=yes 6990*5ddc57e5SXin Li fi 6991*5ddc57e5SXin Li fi # link shared/static library? 6992*5ddc57e5SXin Li 6993*5ddc57e5SXin Li if test "$linkmode" = lib; then 6994*5ddc57e5SXin Li if test -n "$dependency_libs" && 6995*5ddc57e5SXin Li { test "$hardcode_into_libs" != yes || 6996*5ddc57e5SXin Li test "$build_old_libs" = yes || 6997*5ddc57e5SXin Li test "$link_static" = yes; }; then 6998*5ddc57e5SXin Li # Extract -R from dependency_libs 6999*5ddc57e5SXin Li temp_deplibs= 7000*5ddc57e5SXin Li for libdir in $dependency_libs; do 7001*5ddc57e5SXin Li case $libdir in 7002*5ddc57e5SXin Li -R*) func_stripname '-R' '' "$libdir" 7003*5ddc57e5SXin Li temp_xrpath=$func_stripname_result 7004*5ddc57e5SXin Li case " $xrpath " in 7005*5ddc57e5SXin Li *" $temp_xrpath "*) ;; 7006*5ddc57e5SXin Li *) func_append xrpath " $temp_xrpath";; 7007*5ddc57e5SXin Li esac;; 7008*5ddc57e5SXin Li *) func_append temp_deplibs " $libdir";; 7009*5ddc57e5SXin Li esac 7010*5ddc57e5SXin Li done 7011*5ddc57e5SXin Li dependency_libs="$temp_deplibs" 7012*5ddc57e5SXin Li fi 7013*5ddc57e5SXin Li 7014*5ddc57e5SXin Li func_append newlib_search_path " $absdir" 7015*5ddc57e5SXin Li # Link against this library 7016*5ddc57e5SXin Li test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7017*5ddc57e5SXin Li # ... and its dependency_libs 7018*5ddc57e5SXin Li tmp_libs= 7019*5ddc57e5SXin Li for deplib in $dependency_libs; do 7020*5ddc57e5SXin Li newdependency_libs="$deplib $newdependency_libs" 7021*5ddc57e5SXin Li case $deplib in 7022*5ddc57e5SXin Li -L*) func_stripname '-L' '' "$deplib" 7023*5ddc57e5SXin Li func_resolve_sysroot "$func_stripname_result";; 7024*5ddc57e5SXin Li *) func_resolve_sysroot "$deplib" ;; 7025*5ddc57e5SXin Li esac 7026*5ddc57e5SXin Li if $opt_preserve_dup_deps ; then 7027*5ddc57e5SXin Li case "$tmp_libs " in 7028*5ddc57e5SXin Li *" $func_resolve_sysroot_result "*) 7029*5ddc57e5SXin Li func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7030*5ddc57e5SXin Li esac 7031*5ddc57e5SXin Li fi 7032*5ddc57e5SXin Li func_append tmp_libs " $func_resolve_sysroot_result" 7033*5ddc57e5SXin Li done 7034*5ddc57e5SXin Li 7035*5ddc57e5SXin Li if test "$link_all_deplibs" != no; then 7036*5ddc57e5SXin Li # Add the search paths of all dependency libraries 7037*5ddc57e5SXin Li for deplib in $dependency_libs; do 7038*5ddc57e5SXin Li path= 7039*5ddc57e5SXin Li case $deplib in 7040*5ddc57e5SXin Li -L*) path="$deplib" ;; 7041*5ddc57e5SXin Li *.la) 7042*5ddc57e5SXin Li func_resolve_sysroot "$deplib" 7043*5ddc57e5SXin Li deplib=$func_resolve_sysroot_result 7044*5ddc57e5SXin Li func_dirname "$deplib" "" "." 7045*5ddc57e5SXin Li dir=$func_dirname_result 7046*5ddc57e5SXin Li # We need an absolute path. 7047*5ddc57e5SXin Li case $dir in 7048*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7049*5ddc57e5SXin Li *) 7050*5ddc57e5SXin Li absdir=`cd "$dir" && pwd` 7051*5ddc57e5SXin Li if test -z "$absdir"; then 7052*5ddc57e5SXin Li func_warning "cannot determine absolute directory name of \`$dir'" 7053*5ddc57e5SXin Li absdir="$dir" 7054*5ddc57e5SXin Li fi 7055*5ddc57e5SXin Li ;; 7056*5ddc57e5SXin Li esac 7057*5ddc57e5SXin Li if $GREP "^installed=no" $deplib > /dev/null; then 7058*5ddc57e5SXin Li case $host in 7059*5ddc57e5SXin Li *-*-darwin*) 7060*5ddc57e5SXin Li depdepl= 7061*5ddc57e5SXin Li eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7062*5ddc57e5SXin Li if test -n "$deplibrary_names" ; then 7063*5ddc57e5SXin Li for tmp in $deplibrary_names ; do 7064*5ddc57e5SXin Li depdepl=$tmp 7065*5ddc57e5SXin Li done 7066*5ddc57e5SXin Li if test -f "$absdir/$objdir/$depdepl" ; then 7067*5ddc57e5SXin Li depdepl="$absdir/$objdir/$depdepl" 7068*5ddc57e5SXin Li darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7069*5ddc57e5SXin Li if test -z "$darwin_install_name"; then 7070*5ddc57e5SXin Li darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7071*5ddc57e5SXin Li fi 7072*5ddc57e5SXin Li func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 7073*5ddc57e5SXin Li func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7074*5ddc57e5SXin Li path= 7075*5ddc57e5SXin Li fi 7076*5ddc57e5SXin Li fi 7077*5ddc57e5SXin Li ;; 7078*5ddc57e5SXin Li *) 7079*5ddc57e5SXin Li path="-L$absdir/$objdir" 7080*5ddc57e5SXin Li ;; 7081*5ddc57e5SXin Li esac 7082*5ddc57e5SXin Li else 7083*5ddc57e5SXin Li eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7084*5ddc57e5SXin Li test -z "$libdir" && \ 7085*5ddc57e5SXin Li func_fatal_error "\`$deplib' is not a valid libtool archive" 7086*5ddc57e5SXin Li test "$absdir" != "$libdir" && \ 7087*5ddc57e5SXin Li func_warning "\`$deplib' seems to be moved" 7088*5ddc57e5SXin Li 7089*5ddc57e5SXin Li path="-L$absdir" 7090*5ddc57e5SXin Li fi 7091*5ddc57e5SXin Li ;; 7092*5ddc57e5SXin Li esac 7093*5ddc57e5SXin Li case " $deplibs " in 7094*5ddc57e5SXin Li *" $path "*) ;; 7095*5ddc57e5SXin Li *) deplibs="$path $deplibs" ;; 7096*5ddc57e5SXin Li esac 7097*5ddc57e5SXin Li done 7098*5ddc57e5SXin Li fi # link_all_deplibs != no 7099*5ddc57e5SXin Li fi # linkmode = lib 7100*5ddc57e5SXin Li done # for deplib in $libs 7101*5ddc57e5SXin Li if test "$pass" = link; then 7102*5ddc57e5SXin Li if test "$linkmode" = "prog"; then 7103*5ddc57e5SXin Li compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7104*5ddc57e5SXin Li finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7105*5ddc57e5SXin Li else 7106*5ddc57e5SXin Li compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7107*5ddc57e5SXin Li fi 7108*5ddc57e5SXin Li fi 7109*5ddc57e5SXin Li dependency_libs="$newdependency_libs" 7110*5ddc57e5SXin Li if test "$pass" = dlpreopen; then 7111*5ddc57e5SXin Li # Link the dlpreopened libraries before other libraries 7112*5ddc57e5SXin Li for deplib in $save_deplibs; do 7113*5ddc57e5SXin Li deplibs="$deplib $deplibs" 7114*5ddc57e5SXin Li done 7115*5ddc57e5SXin Li fi 7116*5ddc57e5SXin Li if test "$pass" != dlopen; then 7117*5ddc57e5SXin Li if test "$pass" != conv; then 7118*5ddc57e5SXin Li # Make sure lib_search_path contains only unique directories. 7119*5ddc57e5SXin Li lib_search_path= 7120*5ddc57e5SXin Li for dir in $newlib_search_path; do 7121*5ddc57e5SXin Li case "$lib_search_path " in 7122*5ddc57e5SXin Li *" $dir "*) ;; 7123*5ddc57e5SXin Li *) func_append lib_search_path " $dir" ;; 7124*5ddc57e5SXin Li esac 7125*5ddc57e5SXin Li done 7126*5ddc57e5SXin Li newlib_search_path= 7127*5ddc57e5SXin Li fi 7128*5ddc57e5SXin Li 7129*5ddc57e5SXin Li if test "$linkmode,$pass" != "prog,link"; then 7130*5ddc57e5SXin Li vars="deplibs" 7131*5ddc57e5SXin Li else 7132*5ddc57e5SXin Li vars="compile_deplibs finalize_deplibs" 7133*5ddc57e5SXin Li fi 7134*5ddc57e5SXin Li for var in $vars dependency_libs; do 7135*5ddc57e5SXin Li # Add libraries to $var in reverse order 7136*5ddc57e5SXin Li eval tmp_libs=\"\$$var\" 7137*5ddc57e5SXin Li new_libs= 7138*5ddc57e5SXin Li for deplib in $tmp_libs; do 7139*5ddc57e5SXin Li # FIXME: Pedantically, this is the right thing to do, so 7140*5ddc57e5SXin Li # that some nasty dependency loop isn't accidentally 7141*5ddc57e5SXin Li # broken: 7142*5ddc57e5SXin Li #new_libs="$deplib $new_libs" 7143*5ddc57e5SXin Li # Pragmatically, this seems to cause very few problems in 7144*5ddc57e5SXin Li # practice: 7145*5ddc57e5SXin Li case $deplib in 7146*5ddc57e5SXin Li -L*) new_libs="$deplib $new_libs" ;; 7147*5ddc57e5SXin Li -R*) ;; 7148*5ddc57e5SXin Li *) 7149*5ddc57e5SXin Li # And here is the reason: when a library appears more 7150*5ddc57e5SXin Li # than once as an explicit dependence of a library, or 7151*5ddc57e5SXin Li # is implicitly linked in more than once by the 7152*5ddc57e5SXin Li # compiler, it is considered special, and multiple 7153*5ddc57e5SXin Li # occurrences thereof are not removed. Compare this 7154*5ddc57e5SXin Li # with having the same library being listed as a 7155*5ddc57e5SXin Li # dependency of multiple other libraries: in this case, 7156*5ddc57e5SXin Li # we know (pedantically, we assume) the library does not 7157*5ddc57e5SXin Li # need to be listed more than once, so we keep only the 7158*5ddc57e5SXin Li # last copy. This is not always right, but it is rare 7159*5ddc57e5SXin Li # enough that we require users that really mean to play 7160*5ddc57e5SXin Li # such unportable linking tricks to link the library 7161*5ddc57e5SXin Li # using -Wl,-lname, so that libtool does not consider it 7162*5ddc57e5SXin Li # for duplicate removal. 7163*5ddc57e5SXin Li case " $specialdeplibs " in 7164*5ddc57e5SXin Li *" $deplib "*) new_libs="$deplib $new_libs" ;; 7165*5ddc57e5SXin Li *) 7166*5ddc57e5SXin Li case " $new_libs " in 7167*5ddc57e5SXin Li *" $deplib "*) ;; 7168*5ddc57e5SXin Li *) new_libs="$deplib $new_libs" ;; 7169*5ddc57e5SXin Li esac 7170*5ddc57e5SXin Li ;; 7171*5ddc57e5SXin Li esac 7172*5ddc57e5SXin Li ;; 7173*5ddc57e5SXin Li esac 7174*5ddc57e5SXin Li done 7175*5ddc57e5SXin Li tmp_libs= 7176*5ddc57e5SXin Li for deplib in $new_libs; do 7177*5ddc57e5SXin Li case $deplib in 7178*5ddc57e5SXin Li -L*) 7179*5ddc57e5SXin Li case " $tmp_libs " in 7180*5ddc57e5SXin Li *" $deplib "*) ;; 7181*5ddc57e5SXin Li *) func_append tmp_libs " $deplib" ;; 7182*5ddc57e5SXin Li esac 7183*5ddc57e5SXin Li ;; 7184*5ddc57e5SXin Li *) func_append tmp_libs " $deplib" ;; 7185*5ddc57e5SXin Li esac 7186*5ddc57e5SXin Li done 7187*5ddc57e5SXin Li eval $var=\"$tmp_libs\" 7188*5ddc57e5SXin Li done # for var 7189*5ddc57e5SXin Li fi 7190*5ddc57e5SXin Li # Last step: remove runtime libs from dependency_libs 7191*5ddc57e5SXin Li # (they stay in deplibs) 7192*5ddc57e5SXin Li tmp_libs= 7193*5ddc57e5SXin Li for i in $dependency_libs ; do 7194*5ddc57e5SXin Li case " $predeps $postdeps $compiler_lib_search_path " in 7195*5ddc57e5SXin Li *" $i "*) 7196*5ddc57e5SXin Li i="" 7197*5ddc57e5SXin Li ;; 7198*5ddc57e5SXin Li esac 7199*5ddc57e5SXin Li if test -n "$i" ; then 7200*5ddc57e5SXin Li func_append tmp_libs " $i" 7201*5ddc57e5SXin Li fi 7202*5ddc57e5SXin Li done 7203*5ddc57e5SXin Li dependency_libs=$tmp_libs 7204*5ddc57e5SXin Li done # for pass 7205*5ddc57e5SXin Li if test "$linkmode" = prog; then 7206*5ddc57e5SXin Li dlfiles="$newdlfiles" 7207*5ddc57e5SXin Li fi 7208*5ddc57e5SXin Li if test "$linkmode" = prog || test "$linkmode" = lib; then 7209*5ddc57e5SXin Li dlprefiles="$newdlprefiles" 7210*5ddc57e5SXin Li fi 7211*5ddc57e5SXin Li 7212*5ddc57e5SXin Li case $linkmode in 7213*5ddc57e5SXin Li oldlib) 7214*5ddc57e5SXin Li if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7215*5ddc57e5SXin Li func_warning "\`-dlopen' is ignored for archives" 7216*5ddc57e5SXin Li fi 7217*5ddc57e5SXin Li 7218*5ddc57e5SXin Li case " $deplibs" in 7219*5ddc57e5SXin Li *\ -l* | *\ -L*) 7220*5ddc57e5SXin Li func_warning "\`-l' and \`-L' are ignored for archives" ;; 7221*5ddc57e5SXin Li esac 7222*5ddc57e5SXin Li 7223*5ddc57e5SXin Li test -n "$rpath" && \ 7224*5ddc57e5SXin Li func_warning "\`-rpath' is ignored for archives" 7225*5ddc57e5SXin Li 7226*5ddc57e5SXin Li test -n "$xrpath" && \ 7227*5ddc57e5SXin Li func_warning "\`-R' is ignored for archives" 7228*5ddc57e5SXin Li 7229*5ddc57e5SXin Li test -n "$vinfo" && \ 7230*5ddc57e5SXin Li func_warning "\`-version-info/-version-number' is ignored for archives" 7231*5ddc57e5SXin Li 7232*5ddc57e5SXin Li test -n "$release" && \ 7233*5ddc57e5SXin Li func_warning "\`-release' is ignored for archives" 7234*5ddc57e5SXin Li 7235*5ddc57e5SXin Li test -n "$export_symbols$export_symbols_regex" && \ 7236*5ddc57e5SXin Li func_warning "\`-export-symbols' is ignored for archives" 7237*5ddc57e5SXin Li 7238*5ddc57e5SXin Li # Now set the variables for building old libraries. 7239*5ddc57e5SXin Li build_libtool_libs=no 7240*5ddc57e5SXin Li oldlibs="$output" 7241*5ddc57e5SXin Li func_append objs "$old_deplibs" 7242*5ddc57e5SXin Li ;; 7243*5ddc57e5SXin Li 7244*5ddc57e5SXin Li lib) 7245*5ddc57e5SXin Li # Make sure we only generate libraries of the form `libNAME.la'. 7246*5ddc57e5SXin Li case $outputname in 7247*5ddc57e5SXin Li lib*) 7248*5ddc57e5SXin Li func_stripname 'lib' '.la' "$outputname" 7249*5ddc57e5SXin Li name=$func_stripname_result 7250*5ddc57e5SXin Li eval shared_ext=\"$shrext_cmds\" 7251*5ddc57e5SXin Li eval libname=\"$libname_spec\" 7252*5ddc57e5SXin Li ;; 7253*5ddc57e5SXin Li *) 7254*5ddc57e5SXin Li test "$module" = no && \ 7255*5ddc57e5SXin Li func_fatal_help "libtool library \`$output' must begin with \`lib'" 7256*5ddc57e5SXin Li 7257*5ddc57e5SXin Li if test "$need_lib_prefix" != no; then 7258*5ddc57e5SXin Li # Add the "lib" prefix for modules if required 7259*5ddc57e5SXin Li func_stripname '' '.la' "$outputname" 7260*5ddc57e5SXin Li name=$func_stripname_result 7261*5ddc57e5SXin Li eval shared_ext=\"$shrext_cmds\" 7262*5ddc57e5SXin Li eval libname=\"$libname_spec\" 7263*5ddc57e5SXin Li else 7264*5ddc57e5SXin Li func_stripname '' '.la' "$outputname" 7265*5ddc57e5SXin Li libname=$func_stripname_result 7266*5ddc57e5SXin Li fi 7267*5ddc57e5SXin Li ;; 7268*5ddc57e5SXin Li esac 7269*5ddc57e5SXin Li 7270*5ddc57e5SXin Li if test -n "$objs"; then 7271*5ddc57e5SXin Li if test "$deplibs_check_method" != pass_all; then 7272*5ddc57e5SXin Li func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7273*5ddc57e5SXin Li else 7274*5ddc57e5SXin Li echo 7275*5ddc57e5SXin Li $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7276*5ddc57e5SXin Li $ECHO "*** objects $objs is not portable!" 7277*5ddc57e5SXin Li func_append libobjs " $objs" 7278*5ddc57e5SXin Li fi 7279*5ddc57e5SXin Li fi 7280*5ddc57e5SXin Li 7281*5ddc57e5SXin Li test "$dlself" != no && \ 7282*5ddc57e5SXin Li func_warning "\`-dlopen self' is ignored for libtool libraries" 7283*5ddc57e5SXin Li 7284*5ddc57e5SXin Li set dummy $rpath 7285*5ddc57e5SXin Li shift 7286*5ddc57e5SXin Li test "$#" -gt 1 && \ 7287*5ddc57e5SXin Li func_warning "ignoring multiple \`-rpath's for a libtool library" 7288*5ddc57e5SXin Li 7289*5ddc57e5SXin Li install_libdir="$1" 7290*5ddc57e5SXin Li 7291*5ddc57e5SXin Li oldlibs= 7292*5ddc57e5SXin Li if test -z "$rpath"; then 7293*5ddc57e5SXin Li if test "$build_libtool_libs" = yes; then 7294*5ddc57e5SXin Li # Building a libtool convenience library. 7295*5ddc57e5SXin Li # Some compilers have problems with a `.al' extension so 7296*5ddc57e5SXin Li # convenience libraries should have the same extension an 7297*5ddc57e5SXin Li # archive normally would. 7298*5ddc57e5SXin Li oldlibs="$output_objdir/$libname.$libext $oldlibs" 7299*5ddc57e5SXin Li build_libtool_libs=convenience 7300*5ddc57e5SXin Li build_old_libs=yes 7301*5ddc57e5SXin Li fi 7302*5ddc57e5SXin Li 7303*5ddc57e5SXin Li test -n "$vinfo" && \ 7304*5ddc57e5SXin Li func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7305*5ddc57e5SXin Li 7306*5ddc57e5SXin Li test -n "$release" && \ 7307*5ddc57e5SXin Li func_warning "\`-release' is ignored for convenience libraries" 7308*5ddc57e5SXin Li else 7309*5ddc57e5SXin Li 7310*5ddc57e5SXin Li # Parse the version information argument. 7311*5ddc57e5SXin Li save_ifs="$IFS"; IFS=':' 7312*5ddc57e5SXin Li set dummy $vinfo 0 0 0 7313*5ddc57e5SXin Li shift 7314*5ddc57e5SXin Li IFS="$save_ifs" 7315*5ddc57e5SXin Li 7316*5ddc57e5SXin Li test -n "$7" && \ 7317*5ddc57e5SXin Li func_fatal_help "too many parameters to \`-version-info'" 7318*5ddc57e5SXin Li 7319*5ddc57e5SXin Li # convert absolute version numbers to libtool ages 7320*5ddc57e5SXin Li # this retains compatibility with .la files and attempts 7321*5ddc57e5SXin Li # to make the code below a bit more comprehensible 7322*5ddc57e5SXin Li 7323*5ddc57e5SXin Li case $vinfo_number in 7324*5ddc57e5SXin Li yes) 7325*5ddc57e5SXin Li number_major="$1" 7326*5ddc57e5SXin Li number_minor="$2" 7327*5ddc57e5SXin Li number_revision="$3" 7328*5ddc57e5SXin Li # 7329*5ddc57e5SXin Li # There are really only two kinds -- those that 7330*5ddc57e5SXin Li # use the current revision as the major version 7331*5ddc57e5SXin Li # and those that subtract age and use age as 7332*5ddc57e5SXin Li # a minor version. But, then there is irix 7333*5ddc57e5SXin Li # which has an extra 1 added just for fun 7334*5ddc57e5SXin Li # 7335*5ddc57e5SXin Li case $version_type in 7336*5ddc57e5SXin Li # correct linux to gnu/linux during the next big refactor 7337*5ddc57e5SXin Li darwin|linux|osf|windows|none) 7338*5ddc57e5SXin Li func_arith $number_major + $number_minor 7339*5ddc57e5SXin Li current=$func_arith_result 7340*5ddc57e5SXin Li age="$number_minor" 7341*5ddc57e5SXin Li revision="$number_revision" 7342*5ddc57e5SXin Li ;; 7343*5ddc57e5SXin Li freebsd-aout|freebsd-elf|qnx|sunos) 7344*5ddc57e5SXin Li current="$number_major" 7345*5ddc57e5SXin Li revision="$number_minor" 7346*5ddc57e5SXin Li age="0" 7347*5ddc57e5SXin Li ;; 7348*5ddc57e5SXin Li irix|nonstopux) 7349*5ddc57e5SXin Li func_arith $number_major + $number_minor 7350*5ddc57e5SXin Li current=$func_arith_result 7351*5ddc57e5SXin Li age="$number_minor" 7352*5ddc57e5SXin Li revision="$number_minor" 7353*5ddc57e5SXin Li lt_irix_increment=no 7354*5ddc57e5SXin Li ;; 7355*5ddc57e5SXin Li *) 7356*5ddc57e5SXin Li func_fatal_configuration "$modename: unknown library version type \`$version_type'" 7357*5ddc57e5SXin Li ;; 7358*5ddc57e5SXin Li esac 7359*5ddc57e5SXin Li ;; 7360*5ddc57e5SXin Li no) 7361*5ddc57e5SXin Li current="$1" 7362*5ddc57e5SXin Li revision="$2" 7363*5ddc57e5SXin Li age="$3" 7364*5ddc57e5SXin Li ;; 7365*5ddc57e5SXin Li esac 7366*5ddc57e5SXin Li 7367*5ddc57e5SXin Li # Check that each of the things are valid numbers. 7368*5ddc57e5SXin Li case $current in 7369*5ddc57e5SXin Li 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]) ;; 7370*5ddc57e5SXin Li *) 7371*5ddc57e5SXin Li func_error "CURRENT \`$current' must be a nonnegative integer" 7372*5ddc57e5SXin Li func_fatal_error "\`$vinfo' is not valid version information" 7373*5ddc57e5SXin Li ;; 7374*5ddc57e5SXin Li esac 7375*5ddc57e5SXin Li 7376*5ddc57e5SXin Li case $revision in 7377*5ddc57e5SXin Li 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]) ;; 7378*5ddc57e5SXin Li *) 7379*5ddc57e5SXin Li func_error "REVISION \`$revision' must be a nonnegative integer" 7380*5ddc57e5SXin Li func_fatal_error "\`$vinfo' is not valid version information" 7381*5ddc57e5SXin Li ;; 7382*5ddc57e5SXin Li esac 7383*5ddc57e5SXin Li 7384*5ddc57e5SXin Li case $age in 7385*5ddc57e5SXin Li 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]) ;; 7386*5ddc57e5SXin Li *) 7387*5ddc57e5SXin Li func_error "AGE \`$age' must be a nonnegative integer" 7388*5ddc57e5SXin Li func_fatal_error "\`$vinfo' is not valid version information" 7389*5ddc57e5SXin Li ;; 7390*5ddc57e5SXin Li esac 7391*5ddc57e5SXin Li 7392*5ddc57e5SXin Li if test "$age" -gt "$current"; then 7393*5ddc57e5SXin Li func_error "AGE \`$age' is greater than the current interface number \`$current'" 7394*5ddc57e5SXin Li func_fatal_error "\`$vinfo' is not valid version information" 7395*5ddc57e5SXin Li fi 7396*5ddc57e5SXin Li 7397*5ddc57e5SXin Li # Calculate the version variables. 7398*5ddc57e5SXin Li major= 7399*5ddc57e5SXin Li versuffix= 7400*5ddc57e5SXin Li verstring= 7401*5ddc57e5SXin Li case $version_type in 7402*5ddc57e5SXin Li none) ;; 7403*5ddc57e5SXin Li 7404*5ddc57e5SXin Li darwin) 7405*5ddc57e5SXin Li # Like Linux, but with the current version available in 7406*5ddc57e5SXin Li # verstring for coding it into the library header 7407*5ddc57e5SXin Li func_arith $current - $age 7408*5ddc57e5SXin Li major=.$func_arith_result 7409*5ddc57e5SXin Li versuffix="$major.$age.$revision" 7410*5ddc57e5SXin Li # Darwin ld doesn't like 0 for these options... 7411*5ddc57e5SXin Li func_arith $current + 1 7412*5ddc57e5SXin Li minor_current=$func_arith_result 7413*5ddc57e5SXin Li xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7414*5ddc57e5SXin Li verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7415*5ddc57e5SXin Li ;; 7416*5ddc57e5SXin Li 7417*5ddc57e5SXin Li freebsd-aout) 7418*5ddc57e5SXin Li major=".$current" 7419*5ddc57e5SXin Li versuffix=".$current.$revision"; 7420*5ddc57e5SXin Li ;; 7421*5ddc57e5SXin Li 7422*5ddc57e5SXin Li freebsd-elf) 7423*5ddc57e5SXin Li major=".$current" 7424*5ddc57e5SXin Li versuffix=".$current" 7425*5ddc57e5SXin Li ;; 7426*5ddc57e5SXin Li 7427*5ddc57e5SXin Li irix | nonstopux) 7428*5ddc57e5SXin Li if test "X$lt_irix_increment" = "Xno"; then 7429*5ddc57e5SXin Li func_arith $current - $age 7430*5ddc57e5SXin Li else 7431*5ddc57e5SXin Li func_arith $current - $age + 1 7432*5ddc57e5SXin Li fi 7433*5ddc57e5SXin Li major=$func_arith_result 7434*5ddc57e5SXin Li 7435*5ddc57e5SXin Li case $version_type in 7436*5ddc57e5SXin Li nonstopux) verstring_prefix=nonstopux ;; 7437*5ddc57e5SXin Li *) verstring_prefix=sgi ;; 7438*5ddc57e5SXin Li esac 7439*5ddc57e5SXin Li verstring="$verstring_prefix$major.$revision" 7440*5ddc57e5SXin Li 7441*5ddc57e5SXin Li # Add in all the interfaces that we are compatible with. 7442*5ddc57e5SXin Li loop=$revision 7443*5ddc57e5SXin Li while test "$loop" -ne 0; do 7444*5ddc57e5SXin Li func_arith $revision - $loop 7445*5ddc57e5SXin Li iface=$func_arith_result 7446*5ddc57e5SXin Li func_arith $loop - 1 7447*5ddc57e5SXin Li loop=$func_arith_result 7448*5ddc57e5SXin Li verstring="$verstring_prefix$major.$iface:$verstring" 7449*5ddc57e5SXin Li done 7450*5ddc57e5SXin Li 7451*5ddc57e5SXin Li # Before this point, $major must not contain `.'. 7452*5ddc57e5SXin Li major=.$major 7453*5ddc57e5SXin Li versuffix="$major.$revision" 7454*5ddc57e5SXin Li ;; 7455*5ddc57e5SXin Li 7456*5ddc57e5SXin Li linux) # correct to gnu/linux during the next big refactor 7457*5ddc57e5SXin Li func_arith $current - $age 7458*5ddc57e5SXin Li major=.$func_arith_result 7459*5ddc57e5SXin Li versuffix="$major.$age.$revision" 7460*5ddc57e5SXin Li ;; 7461*5ddc57e5SXin Li 7462*5ddc57e5SXin Li osf) 7463*5ddc57e5SXin Li func_arith $current - $age 7464*5ddc57e5SXin Li major=.$func_arith_result 7465*5ddc57e5SXin Li versuffix=".$current.$age.$revision" 7466*5ddc57e5SXin Li verstring="$current.$age.$revision" 7467*5ddc57e5SXin Li 7468*5ddc57e5SXin Li # Add in all the interfaces that we are compatible with. 7469*5ddc57e5SXin Li loop=$age 7470*5ddc57e5SXin Li while test "$loop" -ne 0; do 7471*5ddc57e5SXin Li func_arith $current - $loop 7472*5ddc57e5SXin Li iface=$func_arith_result 7473*5ddc57e5SXin Li func_arith $loop - 1 7474*5ddc57e5SXin Li loop=$func_arith_result 7475*5ddc57e5SXin Li verstring="$verstring:${iface}.0" 7476*5ddc57e5SXin Li done 7477*5ddc57e5SXin Li 7478*5ddc57e5SXin Li # Make executables depend on our current version. 7479*5ddc57e5SXin Li func_append verstring ":${current}.0" 7480*5ddc57e5SXin Li ;; 7481*5ddc57e5SXin Li 7482*5ddc57e5SXin Li qnx) 7483*5ddc57e5SXin Li major=".$current" 7484*5ddc57e5SXin Li versuffix=".$current" 7485*5ddc57e5SXin Li ;; 7486*5ddc57e5SXin Li 7487*5ddc57e5SXin Li sunos) 7488*5ddc57e5SXin Li major=".$current" 7489*5ddc57e5SXin Li versuffix=".$current.$revision" 7490*5ddc57e5SXin Li ;; 7491*5ddc57e5SXin Li 7492*5ddc57e5SXin Li windows) 7493*5ddc57e5SXin Li # Use '-' rather than '.', since we only want one 7494*5ddc57e5SXin Li # extension on DOS 8.3 filesystems. 7495*5ddc57e5SXin Li func_arith $current - $age 7496*5ddc57e5SXin Li major=$func_arith_result 7497*5ddc57e5SXin Li versuffix="-$major" 7498*5ddc57e5SXin Li ;; 7499*5ddc57e5SXin Li 7500*5ddc57e5SXin Li *) 7501*5ddc57e5SXin Li func_fatal_configuration "unknown library version type \`$version_type'" 7502*5ddc57e5SXin Li ;; 7503*5ddc57e5SXin Li esac 7504*5ddc57e5SXin Li 7505*5ddc57e5SXin Li # Clear the version info if we defaulted, and they specified a release. 7506*5ddc57e5SXin Li if test -z "$vinfo" && test -n "$release"; then 7507*5ddc57e5SXin Li major= 7508*5ddc57e5SXin Li case $version_type in 7509*5ddc57e5SXin Li darwin) 7510*5ddc57e5SXin Li # we can't check for "0.0" in archive_cmds due to quoting 7511*5ddc57e5SXin Li # problems, so we reset it completely 7512*5ddc57e5SXin Li verstring= 7513*5ddc57e5SXin Li ;; 7514*5ddc57e5SXin Li *) 7515*5ddc57e5SXin Li verstring="0.0" 7516*5ddc57e5SXin Li ;; 7517*5ddc57e5SXin Li esac 7518*5ddc57e5SXin Li if test "$need_version" = no; then 7519*5ddc57e5SXin Li versuffix= 7520*5ddc57e5SXin Li else 7521*5ddc57e5SXin Li versuffix=".0.0" 7522*5ddc57e5SXin Li fi 7523*5ddc57e5SXin Li fi 7524*5ddc57e5SXin Li 7525*5ddc57e5SXin Li # Remove version info from name if versioning should be avoided 7526*5ddc57e5SXin Li if test "$avoid_version" = yes && test "$need_version" = no; then 7527*5ddc57e5SXin Li major= 7528*5ddc57e5SXin Li versuffix= 7529*5ddc57e5SXin Li verstring="" 7530*5ddc57e5SXin Li fi 7531*5ddc57e5SXin Li 7532*5ddc57e5SXin Li # Check to see if the archive will have undefined symbols. 7533*5ddc57e5SXin Li if test "$allow_undefined" = yes; then 7534*5ddc57e5SXin Li if test "$allow_undefined_flag" = unsupported; then 7535*5ddc57e5SXin Li func_warning "undefined symbols not allowed in $host shared libraries" 7536*5ddc57e5SXin Li build_libtool_libs=no 7537*5ddc57e5SXin Li build_old_libs=yes 7538*5ddc57e5SXin Li fi 7539*5ddc57e5SXin Li else 7540*5ddc57e5SXin Li # Don't allow undefined symbols. 7541*5ddc57e5SXin Li allow_undefined_flag="$no_undefined_flag" 7542*5ddc57e5SXin Li fi 7543*5ddc57e5SXin Li 7544*5ddc57e5SXin Li fi 7545*5ddc57e5SXin Li 7546*5ddc57e5SXin Li func_generate_dlsyms "$libname" "$libname" "yes" 7547*5ddc57e5SXin Li func_append libobjs " $symfileobj" 7548*5ddc57e5SXin Li test "X$libobjs" = "X " && libobjs= 7549*5ddc57e5SXin Li 7550*5ddc57e5SXin Li if test "$opt_mode" != relink; then 7551*5ddc57e5SXin Li # Remove our outputs, but don't remove object files since they 7552*5ddc57e5SXin Li # may have been created when compiling PIC objects. 7553*5ddc57e5SXin Li removelist= 7554*5ddc57e5SXin Li tempremovelist=`$ECHO "$output_objdir/*"` 7555*5ddc57e5SXin Li for p in $tempremovelist; do 7556*5ddc57e5SXin Li case $p in 7557*5ddc57e5SXin Li *.$objext | *.gcno) 7558*5ddc57e5SXin Li ;; 7559*5ddc57e5SXin Li $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7560*5ddc57e5SXin Li if test "X$precious_files_regex" != "X"; then 7561*5ddc57e5SXin Li if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7562*5ddc57e5SXin Li then 7563*5ddc57e5SXin Li continue 7564*5ddc57e5SXin Li fi 7565*5ddc57e5SXin Li fi 7566*5ddc57e5SXin Li func_append removelist " $p" 7567*5ddc57e5SXin Li ;; 7568*5ddc57e5SXin Li *) ;; 7569*5ddc57e5SXin Li esac 7570*5ddc57e5SXin Li done 7571*5ddc57e5SXin Li test -n "$removelist" && \ 7572*5ddc57e5SXin Li func_show_eval "${RM}r \$removelist" 7573*5ddc57e5SXin Li fi 7574*5ddc57e5SXin Li 7575*5ddc57e5SXin Li # Now set the variables for building old libraries. 7576*5ddc57e5SXin Li if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 7577*5ddc57e5SXin Li func_append oldlibs " $output_objdir/$libname.$libext" 7578*5ddc57e5SXin Li 7579*5ddc57e5SXin Li # Transform .lo files to .o files. 7580*5ddc57e5SXin Li oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7581*5ddc57e5SXin Li fi 7582*5ddc57e5SXin Li 7583*5ddc57e5SXin Li # Eliminate all temporary directories. 7584*5ddc57e5SXin Li #for path in $notinst_path; do 7585*5ddc57e5SXin Li # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 7586*5ddc57e5SXin Li # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 7587*5ddc57e5SXin Li # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7588*5ddc57e5SXin Li #done 7589*5ddc57e5SXin Li 7590*5ddc57e5SXin Li if test -n "$xrpath"; then 7591*5ddc57e5SXin Li # If the user specified any rpath flags, then add them. 7592*5ddc57e5SXin Li temp_xrpath= 7593*5ddc57e5SXin Li for libdir in $xrpath; do 7594*5ddc57e5SXin Li func_replace_sysroot "$libdir" 7595*5ddc57e5SXin Li func_append temp_xrpath " -R$func_replace_sysroot_result" 7596*5ddc57e5SXin Li case "$finalize_rpath " in 7597*5ddc57e5SXin Li *" $libdir "*) ;; 7598*5ddc57e5SXin Li *) func_append finalize_rpath " $libdir" ;; 7599*5ddc57e5SXin Li esac 7600*5ddc57e5SXin Li done 7601*5ddc57e5SXin Li if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7602*5ddc57e5SXin Li dependency_libs="$temp_xrpath $dependency_libs" 7603*5ddc57e5SXin Li fi 7604*5ddc57e5SXin Li fi 7605*5ddc57e5SXin Li 7606*5ddc57e5SXin Li # Make sure dlfiles contains only unique files that won't be dlpreopened 7607*5ddc57e5SXin Li old_dlfiles="$dlfiles" 7608*5ddc57e5SXin Li dlfiles= 7609*5ddc57e5SXin Li for lib in $old_dlfiles; do 7610*5ddc57e5SXin Li case " $dlprefiles $dlfiles " in 7611*5ddc57e5SXin Li *" $lib "*) ;; 7612*5ddc57e5SXin Li *) func_append dlfiles " $lib" ;; 7613*5ddc57e5SXin Li esac 7614*5ddc57e5SXin Li done 7615*5ddc57e5SXin Li 7616*5ddc57e5SXin Li # Make sure dlprefiles contains only unique files 7617*5ddc57e5SXin Li old_dlprefiles="$dlprefiles" 7618*5ddc57e5SXin Li dlprefiles= 7619*5ddc57e5SXin Li for lib in $old_dlprefiles; do 7620*5ddc57e5SXin Li case "$dlprefiles " in 7621*5ddc57e5SXin Li *" $lib "*) ;; 7622*5ddc57e5SXin Li *) func_append dlprefiles " $lib" ;; 7623*5ddc57e5SXin Li esac 7624*5ddc57e5SXin Li done 7625*5ddc57e5SXin Li 7626*5ddc57e5SXin Li if test "$build_libtool_libs" = yes; then 7627*5ddc57e5SXin Li if test -n "$rpath"; then 7628*5ddc57e5SXin Li case $host in 7629*5ddc57e5SXin Li *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7630*5ddc57e5SXin Li # these systems don't actually have a c library (as such)! 7631*5ddc57e5SXin Li ;; 7632*5ddc57e5SXin Li *-*-rhapsody* | *-*-darwin1.[012]) 7633*5ddc57e5SXin Li # Rhapsody C library is in the System framework 7634*5ddc57e5SXin Li func_append deplibs " System.ltframework" 7635*5ddc57e5SXin Li ;; 7636*5ddc57e5SXin Li *-*-netbsd*) 7637*5ddc57e5SXin Li # Don't link with libc until the a.out ld.so is fixed. 7638*5ddc57e5SXin Li ;; 7639*5ddc57e5SXin Li *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7640*5ddc57e5SXin Li # Do not include libc due to us having libc/libc_r. 7641*5ddc57e5SXin Li ;; 7642*5ddc57e5SXin Li *-*-sco3.2v5* | *-*-sco5v6*) 7643*5ddc57e5SXin Li # Causes problems with __ctype 7644*5ddc57e5SXin Li ;; 7645*5ddc57e5SXin Li *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7646*5ddc57e5SXin Li # Compiler inserts libc in the correct place for threads to work 7647*5ddc57e5SXin Li ;; 7648*5ddc57e5SXin Li *) 7649*5ddc57e5SXin Li # Add libc to deplibs on all other systems if necessary. 7650*5ddc57e5SXin Li if test "$build_libtool_need_lc" = "yes"; then 7651*5ddc57e5SXin Li func_append deplibs " -lc" 7652*5ddc57e5SXin Li fi 7653*5ddc57e5SXin Li ;; 7654*5ddc57e5SXin Li esac 7655*5ddc57e5SXin Li fi 7656*5ddc57e5SXin Li 7657*5ddc57e5SXin Li # Transform deplibs into only deplibs that can be linked in shared. 7658*5ddc57e5SXin Li name_save=$name 7659*5ddc57e5SXin Li libname_save=$libname 7660*5ddc57e5SXin Li release_save=$release 7661*5ddc57e5SXin Li versuffix_save=$versuffix 7662*5ddc57e5SXin Li major_save=$major 7663*5ddc57e5SXin Li # I'm not sure if I'm treating the release correctly. I think 7664*5ddc57e5SXin Li # release should show up in the -l (ie -lgmp5) so we don't want to 7665*5ddc57e5SXin Li # add it in twice. Is that correct? 7666*5ddc57e5SXin Li release="" 7667*5ddc57e5SXin Li versuffix="" 7668*5ddc57e5SXin Li major="" 7669*5ddc57e5SXin Li newdeplibs= 7670*5ddc57e5SXin Li droppeddeps=no 7671*5ddc57e5SXin Li case $deplibs_check_method in 7672*5ddc57e5SXin Li pass_all) 7673*5ddc57e5SXin Li # Don't check for shared/static. Everything works. 7674*5ddc57e5SXin Li # This might be a little naive. We might want to check 7675*5ddc57e5SXin Li # whether the library exists or not. But this is on 7676*5ddc57e5SXin Li # osf3 & osf4 and I'm not really sure... Just 7677*5ddc57e5SXin Li # implementing what was already the behavior. 7678*5ddc57e5SXin Li newdeplibs=$deplibs 7679*5ddc57e5SXin Li ;; 7680*5ddc57e5SXin Li test_compile) 7681*5ddc57e5SXin Li # This code stresses the "libraries are programs" paradigm to its 7682*5ddc57e5SXin Li # limits. Maybe even breaks it. We compile a program, linking it 7683*5ddc57e5SXin Li # against the deplibs as a proxy for the library. Then we can check 7684*5ddc57e5SXin Li # whether they linked in statically or dynamically with ldd. 7685*5ddc57e5SXin Li $opt_dry_run || $RM conftest.c 7686*5ddc57e5SXin Li cat > conftest.c <<EOF 7687*5ddc57e5SXin Li int main() { return 0; } 7688*5ddc57e5SXin LiEOF 7689*5ddc57e5SXin Li $opt_dry_run || $RM conftest 7690*5ddc57e5SXin Li if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7691*5ddc57e5SXin Li ldd_output=`ldd conftest` 7692*5ddc57e5SXin Li for i in $deplibs; do 7693*5ddc57e5SXin Li case $i in 7694*5ddc57e5SXin Li -l*) 7695*5ddc57e5SXin Li func_stripname -l '' "$i" 7696*5ddc57e5SXin Li name=$func_stripname_result 7697*5ddc57e5SXin Li if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7698*5ddc57e5SXin Li case " $predeps $postdeps " in 7699*5ddc57e5SXin Li *" $i "*) 7700*5ddc57e5SXin Li func_append newdeplibs " $i" 7701*5ddc57e5SXin Li i="" 7702*5ddc57e5SXin Li ;; 7703*5ddc57e5SXin Li esac 7704*5ddc57e5SXin Li fi 7705*5ddc57e5SXin Li if test -n "$i" ; then 7706*5ddc57e5SXin Li libname=`eval "\\$ECHO \"$libname_spec\""` 7707*5ddc57e5SXin Li deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7708*5ddc57e5SXin Li set dummy $deplib_matches; shift 7709*5ddc57e5SXin Li deplib_match=$1 7710*5ddc57e5SXin Li if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7711*5ddc57e5SXin Li func_append newdeplibs " $i" 7712*5ddc57e5SXin Li else 7713*5ddc57e5SXin Li droppeddeps=yes 7714*5ddc57e5SXin Li echo 7715*5ddc57e5SXin Li $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7716*5ddc57e5SXin Li echo "*** I have the capability to make that library automatically link in when" 7717*5ddc57e5SXin Li echo "*** you link to this library. But I can only do this if you have a" 7718*5ddc57e5SXin Li echo "*** shared version of the library, which I believe you do not have" 7719*5ddc57e5SXin Li echo "*** because a test_compile did reveal that the linker did not use it for" 7720*5ddc57e5SXin Li echo "*** its dynamic dependency list that programs get resolved with at runtime." 7721*5ddc57e5SXin Li fi 7722*5ddc57e5SXin Li fi 7723*5ddc57e5SXin Li ;; 7724*5ddc57e5SXin Li *) 7725*5ddc57e5SXin Li func_append newdeplibs " $i" 7726*5ddc57e5SXin Li ;; 7727*5ddc57e5SXin Li esac 7728*5ddc57e5SXin Li done 7729*5ddc57e5SXin Li else 7730*5ddc57e5SXin Li # Error occurred in the first compile. Let's try to salvage 7731*5ddc57e5SXin Li # the situation: Compile a separate program for each library. 7732*5ddc57e5SXin Li for i in $deplibs; do 7733*5ddc57e5SXin Li case $i in 7734*5ddc57e5SXin Li -l*) 7735*5ddc57e5SXin Li func_stripname -l '' "$i" 7736*5ddc57e5SXin Li name=$func_stripname_result 7737*5ddc57e5SXin Li $opt_dry_run || $RM conftest 7738*5ddc57e5SXin Li if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7739*5ddc57e5SXin Li ldd_output=`ldd conftest` 7740*5ddc57e5SXin Li if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7741*5ddc57e5SXin Li case " $predeps $postdeps " in 7742*5ddc57e5SXin Li *" $i "*) 7743*5ddc57e5SXin Li func_append newdeplibs " $i" 7744*5ddc57e5SXin Li i="" 7745*5ddc57e5SXin Li ;; 7746*5ddc57e5SXin Li esac 7747*5ddc57e5SXin Li fi 7748*5ddc57e5SXin Li if test -n "$i" ; then 7749*5ddc57e5SXin Li libname=`eval "\\$ECHO \"$libname_spec\""` 7750*5ddc57e5SXin Li deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7751*5ddc57e5SXin Li set dummy $deplib_matches; shift 7752*5ddc57e5SXin Li deplib_match=$1 7753*5ddc57e5SXin Li if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7754*5ddc57e5SXin Li func_append newdeplibs " $i" 7755*5ddc57e5SXin Li else 7756*5ddc57e5SXin Li droppeddeps=yes 7757*5ddc57e5SXin Li echo 7758*5ddc57e5SXin Li $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7759*5ddc57e5SXin Li echo "*** I have the capability to make that library automatically link in when" 7760*5ddc57e5SXin Li echo "*** you link to this library. But I can only do this if you have a" 7761*5ddc57e5SXin Li echo "*** shared version of the library, which you do not appear to have" 7762*5ddc57e5SXin Li echo "*** because a test_compile did reveal that the linker did not use this one" 7763*5ddc57e5SXin Li echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7764*5ddc57e5SXin Li fi 7765*5ddc57e5SXin Li fi 7766*5ddc57e5SXin Li else 7767*5ddc57e5SXin Li droppeddeps=yes 7768*5ddc57e5SXin Li echo 7769*5ddc57e5SXin Li $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 7770*5ddc57e5SXin Li echo "*** make it link in! You will probably need to install it or some" 7771*5ddc57e5SXin Li echo "*** library that it depends on before this library will be fully" 7772*5ddc57e5SXin Li echo "*** functional. Installing it before continuing would be even better." 7773*5ddc57e5SXin Li fi 7774*5ddc57e5SXin Li ;; 7775*5ddc57e5SXin Li *) 7776*5ddc57e5SXin Li func_append newdeplibs " $i" 7777*5ddc57e5SXin Li ;; 7778*5ddc57e5SXin Li esac 7779*5ddc57e5SXin Li done 7780*5ddc57e5SXin Li fi 7781*5ddc57e5SXin Li ;; 7782*5ddc57e5SXin Li file_magic*) 7783*5ddc57e5SXin Li set dummy $deplibs_check_method; shift 7784*5ddc57e5SXin Li file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7785*5ddc57e5SXin Li for a_deplib in $deplibs; do 7786*5ddc57e5SXin Li case $a_deplib in 7787*5ddc57e5SXin Li -l*) 7788*5ddc57e5SXin Li func_stripname -l '' "$a_deplib" 7789*5ddc57e5SXin Li name=$func_stripname_result 7790*5ddc57e5SXin Li if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7791*5ddc57e5SXin Li case " $predeps $postdeps " in 7792*5ddc57e5SXin Li *" $a_deplib "*) 7793*5ddc57e5SXin Li func_append newdeplibs " $a_deplib" 7794*5ddc57e5SXin Li a_deplib="" 7795*5ddc57e5SXin Li ;; 7796*5ddc57e5SXin Li esac 7797*5ddc57e5SXin Li fi 7798*5ddc57e5SXin Li if test -n "$a_deplib" ; then 7799*5ddc57e5SXin Li libname=`eval "\\$ECHO \"$libname_spec\""` 7800*5ddc57e5SXin Li if test -n "$file_magic_glob"; then 7801*5ddc57e5SXin Li libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 7802*5ddc57e5SXin Li else 7803*5ddc57e5SXin Li libnameglob=$libname 7804*5ddc57e5SXin Li fi 7805*5ddc57e5SXin Li test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7806*5ddc57e5SXin Li for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7807*5ddc57e5SXin Li if test "$want_nocaseglob" = yes; then 7808*5ddc57e5SXin Li shopt -s nocaseglob 7809*5ddc57e5SXin Li potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7810*5ddc57e5SXin Li $nocaseglob 7811*5ddc57e5SXin Li else 7812*5ddc57e5SXin Li potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7813*5ddc57e5SXin Li fi 7814*5ddc57e5SXin Li for potent_lib in $potential_libs; do 7815*5ddc57e5SXin Li # Follow soft links. 7816*5ddc57e5SXin Li if ls -lLd "$potent_lib" 2>/dev/null | 7817*5ddc57e5SXin Li $GREP " -> " >/dev/null; then 7818*5ddc57e5SXin Li continue 7819*5ddc57e5SXin Li fi 7820*5ddc57e5SXin Li # The statement above tries to avoid entering an 7821*5ddc57e5SXin Li # endless loop below, in case of cyclic links. 7822*5ddc57e5SXin Li # We might still enter an endless loop, since a link 7823*5ddc57e5SXin Li # loop can be closed while we follow links, 7824*5ddc57e5SXin Li # but so what? 7825*5ddc57e5SXin Li potlib="$potent_lib" 7826*5ddc57e5SXin Li while test -h "$potlib" 2>/dev/null; do 7827*5ddc57e5SXin Li potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7828*5ddc57e5SXin Li case $potliblink in 7829*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 7830*5ddc57e5SXin Li *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7831*5ddc57e5SXin Li esac 7832*5ddc57e5SXin Li done 7833*5ddc57e5SXin Li if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7834*5ddc57e5SXin Li $SED -e 10q | 7835*5ddc57e5SXin Li $EGREP "$file_magic_regex" > /dev/null; then 7836*5ddc57e5SXin Li func_append newdeplibs " $a_deplib" 7837*5ddc57e5SXin Li a_deplib="" 7838*5ddc57e5SXin Li break 2 7839*5ddc57e5SXin Li fi 7840*5ddc57e5SXin Li done 7841*5ddc57e5SXin Li done 7842*5ddc57e5SXin Li fi 7843*5ddc57e5SXin Li if test -n "$a_deplib" ; then 7844*5ddc57e5SXin Li droppeddeps=yes 7845*5ddc57e5SXin Li echo 7846*5ddc57e5SXin Li $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7847*5ddc57e5SXin Li echo "*** I have the capability to make that library automatically link in when" 7848*5ddc57e5SXin Li echo "*** you link to this library. But I can only do this if you have a" 7849*5ddc57e5SXin Li echo "*** shared version of the library, which you do not appear to have" 7850*5ddc57e5SXin Li echo "*** because I did check the linker path looking for a file starting" 7851*5ddc57e5SXin Li if test -z "$potlib" ; then 7852*5ddc57e5SXin Li $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7853*5ddc57e5SXin Li else 7854*5ddc57e5SXin Li $ECHO "*** with $libname and none of the candidates passed a file format test" 7855*5ddc57e5SXin Li $ECHO "*** using a file magic. Last file checked: $potlib" 7856*5ddc57e5SXin Li fi 7857*5ddc57e5SXin Li fi 7858*5ddc57e5SXin Li ;; 7859*5ddc57e5SXin Li *) 7860*5ddc57e5SXin Li # Add a -L argument. 7861*5ddc57e5SXin Li func_append newdeplibs " $a_deplib" 7862*5ddc57e5SXin Li ;; 7863*5ddc57e5SXin Li esac 7864*5ddc57e5SXin Li done # Gone through all deplibs. 7865*5ddc57e5SXin Li ;; 7866*5ddc57e5SXin Li match_pattern*) 7867*5ddc57e5SXin Li set dummy $deplibs_check_method; shift 7868*5ddc57e5SXin Li match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7869*5ddc57e5SXin Li for a_deplib in $deplibs; do 7870*5ddc57e5SXin Li case $a_deplib in 7871*5ddc57e5SXin Li -l*) 7872*5ddc57e5SXin Li func_stripname -l '' "$a_deplib" 7873*5ddc57e5SXin Li name=$func_stripname_result 7874*5ddc57e5SXin Li if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7875*5ddc57e5SXin Li case " $predeps $postdeps " in 7876*5ddc57e5SXin Li *" $a_deplib "*) 7877*5ddc57e5SXin Li func_append newdeplibs " $a_deplib" 7878*5ddc57e5SXin Li a_deplib="" 7879*5ddc57e5SXin Li ;; 7880*5ddc57e5SXin Li esac 7881*5ddc57e5SXin Li fi 7882*5ddc57e5SXin Li if test -n "$a_deplib" ; then 7883*5ddc57e5SXin Li libname=`eval "\\$ECHO \"$libname_spec\""` 7884*5ddc57e5SXin Li for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7885*5ddc57e5SXin Li potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7886*5ddc57e5SXin Li for potent_lib in $potential_libs; do 7887*5ddc57e5SXin Li potlib="$potent_lib" # see symlink-check above in file_magic test 7888*5ddc57e5SXin Li if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7889*5ddc57e5SXin Li $EGREP "$match_pattern_regex" > /dev/null; then 7890*5ddc57e5SXin Li func_append newdeplibs " $a_deplib" 7891*5ddc57e5SXin Li a_deplib="" 7892*5ddc57e5SXin Li break 2 7893*5ddc57e5SXin Li fi 7894*5ddc57e5SXin Li done 7895*5ddc57e5SXin Li done 7896*5ddc57e5SXin Li fi 7897*5ddc57e5SXin Li if test -n "$a_deplib" ; then 7898*5ddc57e5SXin Li droppeddeps=yes 7899*5ddc57e5SXin Li echo 7900*5ddc57e5SXin Li $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7901*5ddc57e5SXin Li echo "*** I have the capability to make that library automatically link in when" 7902*5ddc57e5SXin Li echo "*** you link to this library. But I can only do this if you have a" 7903*5ddc57e5SXin Li echo "*** shared version of the library, which you do not appear to have" 7904*5ddc57e5SXin Li echo "*** because I did check the linker path looking for a file starting" 7905*5ddc57e5SXin Li if test -z "$potlib" ; then 7906*5ddc57e5SXin Li $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7907*5ddc57e5SXin Li else 7908*5ddc57e5SXin Li $ECHO "*** with $libname and none of the candidates passed a file format test" 7909*5ddc57e5SXin Li $ECHO "*** using a regex pattern. Last file checked: $potlib" 7910*5ddc57e5SXin Li fi 7911*5ddc57e5SXin Li fi 7912*5ddc57e5SXin Li ;; 7913*5ddc57e5SXin Li *) 7914*5ddc57e5SXin Li # Add a -L argument. 7915*5ddc57e5SXin Li func_append newdeplibs " $a_deplib" 7916*5ddc57e5SXin Li ;; 7917*5ddc57e5SXin Li esac 7918*5ddc57e5SXin Li done # Gone through all deplibs. 7919*5ddc57e5SXin Li ;; 7920*5ddc57e5SXin Li none | unknown | *) 7921*5ddc57e5SXin Li newdeplibs="" 7922*5ddc57e5SXin Li tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7923*5ddc57e5SXin Li if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7924*5ddc57e5SXin Li for i in $predeps $postdeps ; do 7925*5ddc57e5SXin Li # can't use Xsed below, because $i might contain '/' 7926*5ddc57e5SXin Li tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7927*5ddc57e5SXin Li done 7928*5ddc57e5SXin Li fi 7929*5ddc57e5SXin Li case $tmp_deplibs in 7930*5ddc57e5SXin Li *[!\ \ ]*) 7931*5ddc57e5SXin Li echo 7932*5ddc57e5SXin Li if test "X$deplibs_check_method" = "Xnone"; then 7933*5ddc57e5SXin Li echo "*** Warning: inter-library dependencies are not supported in this platform." 7934*5ddc57e5SXin Li else 7935*5ddc57e5SXin Li echo "*** Warning: inter-library dependencies are not known to be supported." 7936*5ddc57e5SXin Li fi 7937*5ddc57e5SXin Li echo "*** All declared inter-library dependencies are being dropped." 7938*5ddc57e5SXin Li droppeddeps=yes 7939*5ddc57e5SXin Li ;; 7940*5ddc57e5SXin Li esac 7941*5ddc57e5SXin Li ;; 7942*5ddc57e5SXin Li esac 7943*5ddc57e5SXin Li versuffix=$versuffix_save 7944*5ddc57e5SXin Li major=$major_save 7945*5ddc57e5SXin Li release=$release_save 7946*5ddc57e5SXin Li libname=$libname_save 7947*5ddc57e5SXin Li name=$name_save 7948*5ddc57e5SXin Li 7949*5ddc57e5SXin Li case $host in 7950*5ddc57e5SXin Li *-*-rhapsody* | *-*-darwin1.[012]) 7951*5ddc57e5SXin Li # On Rhapsody replace the C library with the System framework 7952*5ddc57e5SXin Li newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7953*5ddc57e5SXin Li ;; 7954*5ddc57e5SXin Li esac 7955*5ddc57e5SXin Li 7956*5ddc57e5SXin Li if test "$droppeddeps" = yes; then 7957*5ddc57e5SXin Li if test "$module" = yes; then 7958*5ddc57e5SXin Li echo 7959*5ddc57e5SXin Li echo "*** Warning: libtool could not satisfy all declared inter-library" 7960*5ddc57e5SXin Li $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7961*5ddc57e5SXin Li echo "*** a static module, that should work as long as the dlopening" 7962*5ddc57e5SXin Li echo "*** application is linked with the -dlopen flag." 7963*5ddc57e5SXin Li if test -z "$global_symbol_pipe"; then 7964*5ddc57e5SXin Li echo 7965*5ddc57e5SXin Li echo "*** However, this would only work if libtool was able to extract symbol" 7966*5ddc57e5SXin Li echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7967*5ddc57e5SXin Li echo "*** not find such a program. So, this module is probably useless." 7968*5ddc57e5SXin Li echo "*** \`nm' from GNU binutils and a full rebuild may help." 7969*5ddc57e5SXin Li fi 7970*5ddc57e5SXin Li if test "$build_old_libs" = no; then 7971*5ddc57e5SXin Li oldlibs="$output_objdir/$libname.$libext" 7972*5ddc57e5SXin Li build_libtool_libs=module 7973*5ddc57e5SXin Li build_old_libs=yes 7974*5ddc57e5SXin Li else 7975*5ddc57e5SXin Li build_libtool_libs=no 7976*5ddc57e5SXin Li fi 7977*5ddc57e5SXin Li else 7978*5ddc57e5SXin Li echo "*** The inter-library dependencies that have been dropped here will be" 7979*5ddc57e5SXin Li echo "*** automatically added whenever a program is linked with this library" 7980*5ddc57e5SXin Li echo "*** or is declared to -dlopen it." 7981*5ddc57e5SXin Li 7982*5ddc57e5SXin Li if test "$allow_undefined" = no; then 7983*5ddc57e5SXin Li echo 7984*5ddc57e5SXin Li echo "*** Since this library must not contain undefined symbols," 7985*5ddc57e5SXin Li echo "*** because either the platform does not support them or" 7986*5ddc57e5SXin Li echo "*** it was explicitly requested with -no-undefined," 7987*5ddc57e5SXin Li echo "*** libtool will only create a static version of it." 7988*5ddc57e5SXin Li if test "$build_old_libs" = no; then 7989*5ddc57e5SXin Li oldlibs="$output_objdir/$libname.$libext" 7990*5ddc57e5SXin Li build_libtool_libs=module 7991*5ddc57e5SXin Li build_old_libs=yes 7992*5ddc57e5SXin Li else 7993*5ddc57e5SXin Li build_libtool_libs=no 7994*5ddc57e5SXin Li fi 7995*5ddc57e5SXin Li fi 7996*5ddc57e5SXin Li fi 7997*5ddc57e5SXin Li fi 7998*5ddc57e5SXin Li # Done checking deplibs! 7999*5ddc57e5SXin Li deplibs=$newdeplibs 8000*5ddc57e5SXin Li fi 8001*5ddc57e5SXin Li # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8002*5ddc57e5SXin Li case $host in 8003*5ddc57e5SXin Li *-*-darwin*) 8004*5ddc57e5SXin Li newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8005*5ddc57e5SXin Li new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8006*5ddc57e5SXin Li deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8007*5ddc57e5SXin Li ;; 8008*5ddc57e5SXin Li esac 8009*5ddc57e5SXin Li 8010*5ddc57e5SXin Li # move library search paths that coincide with paths to not yet 8011*5ddc57e5SXin Li # installed libraries to the beginning of the library search list 8012*5ddc57e5SXin Li new_libs= 8013*5ddc57e5SXin Li for path in $notinst_path; do 8014*5ddc57e5SXin Li case " $new_libs " in 8015*5ddc57e5SXin Li *" -L$path/$objdir "*) ;; 8016*5ddc57e5SXin Li *) 8017*5ddc57e5SXin Li case " $deplibs " in 8018*5ddc57e5SXin Li *" -L$path/$objdir "*) 8019*5ddc57e5SXin Li func_append new_libs " -L$path/$objdir" ;; 8020*5ddc57e5SXin Li esac 8021*5ddc57e5SXin Li ;; 8022*5ddc57e5SXin Li esac 8023*5ddc57e5SXin Li done 8024*5ddc57e5SXin Li for deplib in $deplibs; do 8025*5ddc57e5SXin Li case $deplib in 8026*5ddc57e5SXin Li -L*) 8027*5ddc57e5SXin Li case " $new_libs " in 8028*5ddc57e5SXin Li *" $deplib "*) ;; 8029*5ddc57e5SXin Li *) func_append new_libs " $deplib" ;; 8030*5ddc57e5SXin Li esac 8031*5ddc57e5SXin Li ;; 8032*5ddc57e5SXin Li *) func_append new_libs " $deplib" ;; 8033*5ddc57e5SXin Li esac 8034*5ddc57e5SXin Li done 8035*5ddc57e5SXin Li deplibs="$new_libs" 8036*5ddc57e5SXin Li 8037*5ddc57e5SXin Li # All the library-specific variables (install_libdir is set above). 8038*5ddc57e5SXin Li library_names= 8039*5ddc57e5SXin Li old_library= 8040*5ddc57e5SXin Li dlname= 8041*5ddc57e5SXin Li 8042*5ddc57e5SXin Li # Test again, we may have decided not to build it any more 8043*5ddc57e5SXin Li if test "$build_libtool_libs" = yes; then 8044*5ddc57e5SXin Li # Remove ${wl} instances when linking with ld. 8045*5ddc57e5SXin Li # FIXME: should test the right _cmds variable. 8046*5ddc57e5SXin Li case $archive_cmds in 8047*5ddc57e5SXin Li *\$LD\ *) wl= ;; 8048*5ddc57e5SXin Li esac 8049*5ddc57e5SXin Li if test "$hardcode_into_libs" = yes; then 8050*5ddc57e5SXin Li # Hardcode the library paths 8051*5ddc57e5SXin Li hardcode_libdirs= 8052*5ddc57e5SXin Li dep_rpath= 8053*5ddc57e5SXin Li rpath="$finalize_rpath" 8054*5ddc57e5SXin Li test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8055*5ddc57e5SXin Li for libdir in $rpath; do 8056*5ddc57e5SXin Li if test -n "$hardcode_libdir_flag_spec"; then 8057*5ddc57e5SXin Li if test -n "$hardcode_libdir_separator"; then 8058*5ddc57e5SXin Li func_replace_sysroot "$libdir" 8059*5ddc57e5SXin Li libdir=$func_replace_sysroot_result 8060*5ddc57e5SXin Li if test -z "$hardcode_libdirs"; then 8061*5ddc57e5SXin Li hardcode_libdirs="$libdir" 8062*5ddc57e5SXin Li else 8063*5ddc57e5SXin Li # Just accumulate the unique libdirs. 8064*5ddc57e5SXin Li case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8065*5ddc57e5SXin Li *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8066*5ddc57e5SXin Li ;; 8067*5ddc57e5SXin Li *) 8068*5ddc57e5SXin Li func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8069*5ddc57e5SXin Li ;; 8070*5ddc57e5SXin Li esac 8071*5ddc57e5SXin Li fi 8072*5ddc57e5SXin Li else 8073*5ddc57e5SXin Li eval flag=\"$hardcode_libdir_flag_spec\" 8074*5ddc57e5SXin Li func_append dep_rpath " $flag" 8075*5ddc57e5SXin Li fi 8076*5ddc57e5SXin Li elif test -n "$runpath_var"; then 8077*5ddc57e5SXin Li case "$perm_rpath " in 8078*5ddc57e5SXin Li *" $libdir "*) ;; 8079*5ddc57e5SXin Li *) func_append perm_rpath " $libdir" ;; 8080*5ddc57e5SXin Li esac 8081*5ddc57e5SXin Li fi 8082*5ddc57e5SXin Li done 8083*5ddc57e5SXin Li # Substitute the hardcoded libdirs into the rpath. 8084*5ddc57e5SXin Li if test -n "$hardcode_libdir_separator" && 8085*5ddc57e5SXin Li test -n "$hardcode_libdirs"; then 8086*5ddc57e5SXin Li libdir="$hardcode_libdirs" 8087*5ddc57e5SXin Li eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8088*5ddc57e5SXin Li fi 8089*5ddc57e5SXin Li if test -n "$runpath_var" && test -n "$perm_rpath"; then 8090*5ddc57e5SXin Li # We should set the runpath_var. 8091*5ddc57e5SXin Li rpath= 8092*5ddc57e5SXin Li for dir in $perm_rpath; do 8093*5ddc57e5SXin Li func_append rpath "$dir:" 8094*5ddc57e5SXin Li done 8095*5ddc57e5SXin Li eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8096*5ddc57e5SXin Li fi 8097*5ddc57e5SXin Li test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8098*5ddc57e5SXin Li fi 8099*5ddc57e5SXin Li 8100*5ddc57e5SXin Li shlibpath="$finalize_shlibpath" 8101*5ddc57e5SXin Li test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8102*5ddc57e5SXin Li if test -n "$shlibpath"; then 8103*5ddc57e5SXin Li eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8104*5ddc57e5SXin Li fi 8105*5ddc57e5SXin Li 8106*5ddc57e5SXin Li # Get the real and link names of the library. 8107*5ddc57e5SXin Li eval shared_ext=\"$shrext_cmds\" 8108*5ddc57e5SXin Li eval library_names=\"$library_names_spec\" 8109*5ddc57e5SXin Li set dummy $library_names 8110*5ddc57e5SXin Li shift 8111*5ddc57e5SXin Li realname="$1" 8112*5ddc57e5SXin Li shift 8113*5ddc57e5SXin Li 8114*5ddc57e5SXin Li if test -n "$soname_spec"; then 8115*5ddc57e5SXin Li eval soname=\"$soname_spec\" 8116*5ddc57e5SXin Li else 8117*5ddc57e5SXin Li soname="$realname" 8118*5ddc57e5SXin Li fi 8119*5ddc57e5SXin Li if test -z "$dlname"; then 8120*5ddc57e5SXin Li dlname=$soname 8121*5ddc57e5SXin Li fi 8122*5ddc57e5SXin Li 8123*5ddc57e5SXin Li lib="$output_objdir/$realname" 8124*5ddc57e5SXin Li linknames= 8125*5ddc57e5SXin Li for link 8126*5ddc57e5SXin Li do 8127*5ddc57e5SXin Li func_append linknames " $link" 8128*5ddc57e5SXin Li done 8129*5ddc57e5SXin Li 8130*5ddc57e5SXin Li # Use standard objects if they are pic 8131*5ddc57e5SXin Li test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8132*5ddc57e5SXin Li test "X$libobjs" = "X " && libobjs= 8133*5ddc57e5SXin Li 8134*5ddc57e5SXin Li delfiles= 8135*5ddc57e5SXin Li if test -n "$export_symbols" && test -n "$include_expsyms"; then 8136*5ddc57e5SXin Li $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8137*5ddc57e5SXin Li export_symbols="$output_objdir/$libname.uexp" 8138*5ddc57e5SXin Li func_append delfiles " $export_symbols" 8139*5ddc57e5SXin Li fi 8140*5ddc57e5SXin Li 8141*5ddc57e5SXin Li orig_export_symbols= 8142*5ddc57e5SXin Li case $host_os in 8143*5ddc57e5SXin Li cygwin* | mingw* | cegcc*) 8144*5ddc57e5SXin Li if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8145*5ddc57e5SXin Li # exporting using user supplied symfile 8146*5ddc57e5SXin Li if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8147*5ddc57e5SXin Li # and it's NOT already a .def file. Must figure out 8148*5ddc57e5SXin Li # which of the given symbols are data symbols and tag 8149*5ddc57e5SXin Li # them as such. So, trigger use of export_symbols_cmds. 8150*5ddc57e5SXin Li # export_symbols gets reassigned inside the "prepare 8151*5ddc57e5SXin Li # the list of exported symbols" if statement, so the 8152*5ddc57e5SXin Li # include_expsyms logic still works. 8153*5ddc57e5SXin Li orig_export_symbols="$export_symbols" 8154*5ddc57e5SXin Li export_symbols= 8155*5ddc57e5SXin Li always_export_symbols=yes 8156*5ddc57e5SXin Li fi 8157*5ddc57e5SXin Li fi 8158*5ddc57e5SXin Li ;; 8159*5ddc57e5SXin Li esac 8160*5ddc57e5SXin Li 8161*5ddc57e5SXin Li # Prepare the list of exported symbols 8162*5ddc57e5SXin Li if test -z "$export_symbols"; then 8163*5ddc57e5SXin Li if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8164*5ddc57e5SXin Li func_verbose "generating symbol list for \`$libname.la'" 8165*5ddc57e5SXin Li export_symbols="$output_objdir/$libname.exp" 8166*5ddc57e5SXin Li $opt_dry_run || $RM $export_symbols 8167*5ddc57e5SXin Li cmds=$export_symbols_cmds 8168*5ddc57e5SXin Li save_ifs="$IFS"; IFS='~' 8169*5ddc57e5SXin Li for cmd1 in $cmds; do 8170*5ddc57e5SXin Li IFS="$save_ifs" 8171*5ddc57e5SXin Li # Take the normal branch if the nm_file_list_spec branch 8172*5ddc57e5SXin Li # doesn't work or if tool conversion is not needed. 8173*5ddc57e5SXin Li case $nm_file_list_spec~$to_tool_file_cmd in 8174*5ddc57e5SXin Li *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 8175*5ddc57e5SXin Li try_normal_branch=yes 8176*5ddc57e5SXin Li eval cmd=\"$cmd1\" 8177*5ddc57e5SXin Li func_len " $cmd" 8178*5ddc57e5SXin Li len=$func_len_result 8179*5ddc57e5SXin Li ;; 8180*5ddc57e5SXin Li *) 8181*5ddc57e5SXin Li try_normal_branch=no 8182*5ddc57e5SXin Li ;; 8183*5ddc57e5SXin Li esac 8184*5ddc57e5SXin Li if test "$try_normal_branch" = yes \ 8185*5ddc57e5SXin Li && { test "$len" -lt "$max_cmd_len" \ 8186*5ddc57e5SXin Li || test "$max_cmd_len" -le -1; } 8187*5ddc57e5SXin Li then 8188*5ddc57e5SXin Li func_show_eval "$cmd" 'exit $?' 8189*5ddc57e5SXin Li skipped_export=false 8190*5ddc57e5SXin Li elif test -n "$nm_file_list_spec"; then 8191*5ddc57e5SXin Li func_basename "$output" 8192*5ddc57e5SXin Li output_la=$func_basename_result 8193*5ddc57e5SXin Li save_libobjs=$libobjs 8194*5ddc57e5SXin Li save_output=$output 8195*5ddc57e5SXin Li output=${output_objdir}/${output_la}.nm 8196*5ddc57e5SXin Li func_to_tool_file "$output" 8197*5ddc57e5SXin Li libobjs=$nm_file_list_spec$func_to_tool_file_result 8198*5ddc57e5SXin Li func_append delfiles " $output" 8199*5ddc57e5SXin Li func_verbose "creating $NM input file list: $output" 8200*5ddc57e5SXin Li for obj in $save_libobjs; do 8201*5ddc57e5SXin Li func_to_tool_file "$obj" 8202*5ddc57e5SXin Li $ECHO "$func_to_tool_file_result" 8203*5ddc57e5SXin Li done > "$output" 8204*5ddc57e5SXin Li eval cmd=\"$cmd1\" 8205*5ddc57e5SXin Li func_show_eval "$cmd" 'exit $?' 8206*5ddc57e5SXin Li output=$save_output 8207*5ddc57e5SXin Li libobjs=$save_libobjs 8208*5ddc57e5SXin Li skipped_export=false 8209*5ddc57e5SXin Li else 8210*5ddc57e5SXin Li # The command line is too long to execute in one step. 8211*5ddc57e5SXin Li func_verbose "using reloadable object file for export list..." 8212*5ddc57e5SXin Li skipped_export=: 8213*5ddc57e5SXin Li # Break out early, otherwise skipped_export may be 8214*5ddc57e5SXin Li # set to false by a later but shorter cmd. 8215*5ddc57e5SXin Li break 8216*5ddc57e5SXin Li fi 8217*5ddc57e5SXin Li done 8218*5ddc57e5SXin Li IFS="$save_ifs" 8219*5ddc57e5SXin Li if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8220*5ddc57e5SXin Li func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8221*5ddc57e5SXin Li func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8222*5ddc57e5SXin Li fi 8223*5ddc57e5SXin Li fi 8224*5ddc57e5SXin Li fi 8225*5ddc57e5SXin Li 8226*5ddc57e5SXin Li if test -n "$export_symbols" && test -n "$include_expsyms"; then 8227*5ddc57e5SXin Li tmp_export_symbols="$export_symbols" 8228*5ddc57e5SXin Li test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8229*5ddc57e5SXin Li $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8230*5ddc57e5SXin Li fi 8231*5ddc57e5SXin Li 8232*5ddc57e5SXin Li if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8233*5ddc57e5SXin Li # The given exports_symbols file has to be filtered, so filter it. 8234*5ddc57e5SXin Li func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8235*5ddc57e5SXin Li # FIXME: $output_objdir/$libname.filter potentially contains lots of 8236*5ddc57e5SXin Li # 's' commands which not all seds can handle. GNU sed should be fine 8237*5ddc57e5SXin Li # though. Also, the filter scales superlinearly with the number of 8238*5ddc57e5SXin Li # global variables. join(1) would be nice here, but unfortunately 8239*5ddc57e5SXin Li # isn't a blessed tool. 8240*5ddc57e5SXin Li $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8241*5ddc57e5SXin Li func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8242*5ddc57e5SXin Li export_symbols=$output_objdir/$libname.def 8243*5ddc57e5SXin Li $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8244*5ddc57e5SXin Li fi 8245*5ddc57e5SXin Li 8246*5ddc57e5SXin Li tmp_deplibs= 8247*5ddc57e5SXin Li for test_deplib in $deplibs; do 8248*5ddc57e5SXin Li case " $convenience " in 8249*5ddc57e5SXin Li *" $test_deplib "*) ;; 8250*5ddc57e5SXin Li *) 8251*5ddc57e5SXin Li func_append tmp_deplibs " $test_deplib" 8252*5ddc57e5SXin Li ;; 8253*5ddc57e5SXin Li esac 8254*5ddc57e5SXin Li done 8255*5ddc57e5SXin Li deplibs="$tmp_deplibs" 8256*5ddc57e5SXin Li 8257*5ddc57e5SXin Li if test -n "$convenience"; then 8258*5ddc57e5SXin Li if test -n "$whole_archive_flag_spec" && 8259*5ddc57e5SXin Li test "$compiler_needs_object" = yes && 8260*5ddc57e5SXin Li test -z "$libobjs"; then 8261*5ddc57e5SXin Li # extract the archives, so we have objects to list. 8262*5ddc57e5SXin Li # TODO: could optimize this to just extract one archive. 8263*5ddc57e5SXin Li whole_archive_flag_spec= 8264*5ddc57e5SXin Li fi 8265*5ddc57e5SXin Li if test -n "$whole_archive_flag_spec"; then 8266*5ddc57e5SXin Li save_libobjs=$libobjs 8267*5ddc57e5SXin Li eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8268*5ddc57e5SXin Li test "X$libobjs" = "X " && libobjs= 8269*5ddc57e5SXin Li else 8270*5ddc57e5SXin Li gentop="$output_objdir/${outputname}x" 8271*5ddc57e5SXin Li func_append generated " $gentop" 8272*5ddc57e5SXin Li 8273*5ddc57e5SXin Li func_extract_archives $gentop $convenience 8274*5ddc57e5SXin Li func_append libobjs " $func_extract_archives_result" 8275*5ddc57e5SXin Li test "X$libobjs" = "X " && libobjs= 8276*5ddc57e5SXin Li fi 8277*5ddc57e5SXin Li fi 8278*5ddc57e5SXin Li 8279*5ddc57e5SXin Li if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8280*5ddc57e5SXin Li eval flag=\"$thread_safe_flag_spec\" 8281*5ddc57e5SXin Li func_append linker_flags " $flag" 8282*5ddc57e5SXin Li fi 8283*5ddc57e5SXin Li 8284*5ddc57e5SXin Li # Make a backup of the uninstalled library when relinking 8285*5ddc57e5SXin Li if test "$opt_mode" = relink; then 8286*5ddc57e5SXin Li $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8287*5ddc57e5SXin Li fi 8288*5ddc57e5SXin Li 8289*5ddc57e5SXin Li # Do each of the archive commands. 8290*5ddc57e5SXin Li if test "$module" = yes && test -n "$module_cmds" ; then 8291*5ddc57e5SXin Li if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8292*5ddc57e5SXin Li eval test_cmds=\"$module_expsym_cmds\" 8293*5ddc57e5SXin Li cmds=$module_expsym_cmds 8294*5ddc57e5SXin Li else 8295*5ddc57e5SXin Li eval test_cmds=\"$module_cmds\" 8296*5ddc57e5SXin Li cmds=$module_cmds 8297*5ddc57e5SXin Li fi 8298*5ddc57e5SXin Li else 8299*5ddc57e5SXin Li if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8300*5ddc57e5SXin Li eval test_cmds=\"$archive_expsym_cmds\" 8301*5ddc57e5SXin Li cmds=$archive_expsym_cmds 8302*5ddc57e5SXin Li else 8303*5ddc57e5SXin Li eval test_cmds=\"$archive_cmds\" 8304*5ddc57e5SXin Li cmds=$archive_cmds 8305*5ddc57e5SXin Li fi 8306*5ddc57e5SXin Li fi 8307*5ddc57e5SXin Li 8308*5ddc57e5SXin Li if test "X$skipped_export" != "X:" && 8309*5ddc57e5SXin Li func_len " $test_cmds" && 8310*5ddc57e5SXin Li len=$func_len_result && 8311*5ddc57e5SXin Li test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8312*5ddc57e5SXin Li : 8313*5ddc57e5SXin Li else 8314*5ddc57e5SXin Li # The command line is too long to link in one step, link piecewise 8315*5ddc57e5SXin Li # or, if using GNU ld and skipped_export is not :, use a linker 8316*5ddc57e5SXin Li # script. 8317*5ddc57e5SXin Li 8318*5ddc57e5SXin Li # Save the value of $output and $libobjs because we want to 8319*5ddc57e5SXin Li # use them later. If we have whole_archive_flag_spec, we 8320*5ddc57e5SXin Li # want to use save_libobjs as it was before 8321*5ddc57e5SXin Li # whole_archive_flag_spec was expanded, because we can't 8322*5ddc57e5SXin Li # assume the linker understands whole_archive_flag_spec. 8323*5ddc57e5SXin Li # This may have to be revisited, in case too many 8324*5ddc57e5SXin Li # convenience libraries get linked in and end up exceeding 8325*5ddc57e5SXin Li # the spec. 8326*5ddc57e5SXin Li if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8327*5ddc57e5SXin Li save_libobjs=$libobjs 8328*5ddc57e5SXin Li fi 8329*5ddc57e5SXin Li save_output=$output 8330*5ddc57e5SXin Li func_basename "$output" 8331*5ddc57e5SXin Li output_la=$func_basename_result 8332*5ddc57e5SXin Li 8333*5ddc57e5SXin Li # Clear the reloadable object creation command queue and 8334*5ddc57e5SXin Li # initialize k to one. 8335*5ddc57e5SXin Li test_cmds= 8336*5ddc57e5SXin Li concat_cmds= 8337*5ddc57e5SXin Li objlist= 8338*5ddc57e5SXin Li last_robj= 8339*5ddc57e5SXin Li k=1 8340*5ddc57e5SXin Li 8341*5ddc57e5SXin Li if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8342*5ddc57e5SXin Li output=${output_objdir}/${output_la}.lnkscript 8343*5ddc57e5SXin Li func_verbose "creating GNU ld script: $output" 8344*5ddc57e5SXin Li echo 'INPUT (' > $output 8345*5ddc57e5SXin Li for obj in $save_libobjs 8346*5ddc57e5SXin Li do 8347*5ddc57e5SXin Li func_to_tool_file "$obj" 8348*5ddc57e5SXin Li $ECHO "$func_to_tool_file_result" >> $output 8349*5ddc57e5SXin Li done 8350*5ddc57e5SXin Li echo ')' >> $output 8351*5ddc57e5SXin Li func_append delfiles " $output" 8352*5ddc57e5SXin Li func_to_tool_file "$output" 8353*5ddc57e5SXin Li output=$func_to_tool_file_result 8354*5ddc57e5SXin Li elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8355*5ddc57e5SXin Li output=${output_objdir}/${output_la}.lnk 8356*5ddc57e5SXin Li func_verbose "creating linker input file list: $output" 8357*5ddc57e5SXin Li : > $output 8358*5ddc57e5SXin Li set x $save_libobjs 8359*5ddc57e5SXin Li shift 8360*5ddc57e5SXin Li firstobj= 8361*5ddc57e5SXin Li if test "$compiler_needs_object" = yes; then 8362*5ddc57e5SXin Li firstobj="$1 " 8363*5ddc57e5SXin Li shift 8364*5ddc57e5SXin Li fi 8365*5ddc57e5SXin Li for obj 8366*5ddc57e5SXin Li do 8367*5ddc57e5SXin Li func_to_tool_file "$obj" 8368*5ddc57e5SXin Li $ECHO "$func_to_tool_file_result" >> $output 8369*5ddc57e5SXin Li done 8370*5ddc57e5SXin Li func_append delfiles " $output" 8371*5ddc57e5SXin Li func_to_tool_file "$output" 8372*5ddc57e5SXin Li output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8373*5ddc57e5SXin Li else 8374*5ddc57e5SXin Li if test -n "$save_libobjs"; then 8375*5ddc57e5SXin Li func_verbose "creating reloadable object files..." 8376*5ddc57e5SXin Li output=$output_objdir/$output_la-${k}.$objext 8377*5ddc57e5SXin Li eval test_cmds=\"$reload_cmds\" 8378*5ddc57e5SXin Li func_len " $test_cmds" 8379*5ddc57e5SXin Li len0=$func_len_result 8380*5ddc57e5SXin Li len=$len0 8381*5ddc57e5SXin Li 8382*5ddc57e5SXin Li # Loop over the list of objects to be linked. 8383*5ddc57e5SXin Li for obj in $save_libobjs 8384*5ddc57e5SXin Li do 8385*5ddc57e5SXin Li func_len " $obj" 8386*5ddc57e5SXin Li func_arith $len + $func_len_result 8387*5ddc57e5SXin Li len=$func_arith_result 8388*5ddc57e5SXin Li if test "X$objlist" = X || 8389*5ddc57e5SXin Li test "$len" -lt "$max_cmd_len"; then 8390*5ddc57e5SXin Li func_append objlist " $obj" 8391*5ddc57e5SXin Li else 8392*5ddc57e5SXin Li # The command $test_cmds is almost too long, add a 8393*5ddc57e5SXin Li # command to the queue. 8394*5ddc57e5SXin Li if test "$k" -eq 1 ; then 8395*5ddc57e5SXin Li # The first file doesn't have a previous command to add. 8396*5ddc57e5SXin Li reload_objs=$objlist 8397*5ddc57e5SXin Li eval concat_cmds=\"$reload_cmds\" 8398*5ddc57e5SXin Li else 8399*5ddc57e5SXin Li # All subsequent reloadable object files will link in 8400*5ddc57e5SXin Li # the last one created. 8401*5ddc57e5SXin Li reload_objs="$objlist $last_robj" 8402*5ddc57e5SXin Li eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8403*5ddc57e5SXin Li fi 8404*5ddc57e5SXin Li last_robj=$output_objdir/$output_la-${k}.$objext 8405*5ddc57e5SXin Li func_arith $k + 1 8406*5ddc57e5SXin Li k=$func_arith_result 8407*5ddc57e5SXin Li output=$output_objdir/$output_la-${k}.$objext 8408*5ddc57e5SXin Li objlist=" $obj" 8409*5ddc57e5SXin Li func_len " $last_robj" 8410*5ddc57e5SXin Li func_arith $len0 + $func_len_result 8411*5ddc57e5SXin Li len=$func_arith_result 8412*5ddc57e5SXin Li fi 8413*5ddc57e5SXin Li done 8414*5ddc57e5SXin Li # Handle the remaining objects by creating one last 8415*5ddc57e5SXin Li # reloadable object file. All subsequent reloadable object 8416*5ddc57e5SXin Li # files will link in the last one created. 8417*5ddc57e5SXin Li test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8418*5ddc57e5SXin Li reload_objs="$objlist $last_robj" 8419*5ddc57e5SXin Li eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8420*5ddc57e5SXin Li if test -n "$last_robj"; then 8421*5ddc57e5SXin Li eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8422*5ddc57e5SXin Li fi 8423*5ddc57e5SXin Li func_append delfiles " $output" 8424*5ddc57e5SXin Li 8425*5ddc57e5SXin Li else 8426*5ddc57e5SXin Li output= 8427*5ddc57e5SXin Li fi 8428*5ddc57e5SXin Li 8429*5ddc57e5SXin Li if ${skipped_export-false}; then 8430*5ddc57e5SXin Li func_verbose "generating symbol list for \`$libname.la'" 8431*5ddc57e5SXin Li export_symbols="$output_objdir/$libname.exp" 8432*5ddc57e5SXin Li $opt_dry_run || $RM $export_symbols 8433*5ddc57e5SXin Li libobjs=$output 8434*5ddc57e5SXin Li # Append the command to create the export file. 8435*5ddc57e5SXin Li test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8436*5ddc57e5SXin Li eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8437*5ddc57e5SXin Li if test -n "$last_robj"; then 8438*5ddc57e5SXin Li eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8439*5ddc57e5SXin Li fi 8440*5ddc57e5SXin Li fi 8441*5ddc57e5SXin Li 8442*5ddc57e5SXin Li test -n "$save_libobjs" && 8443*5ddc57e5SXin Li func_verbose "creating a temporary reloadable object file: $output" 8444*5ddc57e5SXin Li 8445*5ddc57e5SXin Li # Loop through the commands generated above and execute them. 8446*5ddc57e5SXin Li save_ifs="$IFS"; IFS='~' 8447*5ddc57e5SXin Li for cmd in $concat_cmds; do 8448*5ddc57e5SXin Li IFS="$save_ifs" 8449*5ddc57e5SXin Li $opt_silent || { 8450*5ddc57e5SXin Li func_quote_for_expand "$cmd" 8451*5ddc57e5SXin Li eval "func_echo $func_quote_for_expand_result" 8452*5ddc57e5SXin Li } 8453*5ddc57e5SXin Li $opt_dry_run || eval "$cmd" || { 8454*5ddc57e5SXin Li lt_exit=$? 8455*5ddc57e5SXin Li 8456*5ddc57e5SXin Li # Restore the uninstalled library and exit 8457*5ddc57e5SXin Li if test "$opt_mode" = relink; then 8458*5ddc57e5SXin Li ( cd "$output_objdir" && \ 8459*5ddc57e5SXin Li $RM "${realname}T" && \ 8460*5ddc57e5SXin Li $MV "${realname}U" "$realname" ) 8461*5ddc57e5SXin Li fi 8462*5ddc57e5SXin Li 8463*5ddc57e5SXin Li exit $lt_exit 8464*5ddc57e5SXin Li } 8465*5ddc57e5SXin Li done 8466*5ddc57e5SXin Li IFS="$save_ifs" 8467*5ddc57e5SXin Li 8468*5ddc57e5SXin Li if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8469*5ddc57e5SXin Li func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8470*5ddc57e5SXin Li func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8471*5ddc57e5SXin Li fi 8472*5ddc57e5SXin Li fi 8473*5ddc57e5SXin Li 8474*5ddc57e5SXin Li if ${skipped_export-false}; then 8475*5ddc57e5SXin Li if test -n "$export_symbols" && test -n "$include_expsyms"; then 8476*5ddc57e5SXin Li tmp_export_symbols="$export_symbols" 8477*5ddc57e5SXin Li test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8478*5ddc57e5SXin Li $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8479*5ddc57e5SXin Li fi 8480*5ddc57e5SXin Li 8481*5ddc57e5SXin Li if test -n "$orig_export_symbols"; then 8482*5ddc57e5SXin Li # The given exports_symbols file has to be filtered, so filter it. 8483*5ddc57e5SXin Li func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8484*5ddc57e5SXin Li # FIXME: $output_objdir/$libname.filter potentially contains lots of 8485*5ddc57e5SXin Li # 's' commands which not all seds can handle. GNU sed should be fine 8486*5ddc57e5SXin Li # though. Also, the filter scales superlinearly with the number of 8487*5ddc57e5SXin Li # global variables. join(1) would be nice here, but unfortunately 8488*5ddc57e5SXin Li # isn't a blessed tool. 8489*5ddc57e5SXin Li $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8490*5ddc57e5SXin Li func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8491*5ddc57e5SXin Li export_symbols=$output_objdir/$libname.def 8492*5ddc57e5SXin Li $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8493*5ddc57e5SXin Li fi 8494*5ddc57e5SXin Li fi 8495*5ddc57e5SXin Li 8496*5ddc57e5SXin Li libobjs=$output 8497*5ddc57e5SXin Li # Restore the value of output. 8498*5ddc57e5SXin Li output=$save_output 8499*5ddc57e5SXin Li 8500*5ddc57e5SXin Li if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8501*5ddc57e5SXin Li eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8502*5ddc57e5SXin Li test "X$libobjs" = "X " && libobjs= 8503*5ddc57e5SXin Li fi 8504*5ddc57e5SXin Li # Expand the library linking commands again to reset the 8505*5ddc57e5SXin Li # value of $libobjs for piecewise linking. 8506*5ddc57e5SXin Li 8507*5ddc57e5SXin Li # Do each of the archive commands. 8508*5ddc57e5SXin Li if test "$module" = yes && test -n "$module_cmds" ; then 8509*5ddc57e5SXin Li if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8510*5ddc57e5SXin Li cmds=$module_expsym_cmds 8511*5ddc57e5SXin Li else 8512*5ddc57e5SXin Li cmds=$module_cmds 8513*5ddc57e5SXin Li fi 8514*5ddc57e5SXin Li else 8515*5ddc57e5SXin Li if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8516*5ddc57e5SXin Li cmds=$archive_expsym_cmds 8517*5ddc57e5SXin Li else 8518*5ddc57e5SXin Li cmds=$archive_cmds 8519*5ddc57e5SXin Li fi 8520*5ddc57e5SXin Li fi 8521*5ddc57e5SXin Li fi 8522*5ddc57e5SXin Li 8523*5ddc57e5SXin Li if test -n "$delfiles"; then 8524*5ddc57e5SXin Li # Append the command to remove temporary files to $cmds. 8525*5ddc57e5SXin Li eval cmds=\"\$cmds~\$RM $delfiles\" 8526*5ddc57e5SXin Li fi 8527*5ddc57e5SXin Li 8528*5ddc57e5SXin Li # Add any objects from preloaded convenience libraries 8529*5ddc57e5SXin Li if test -n "$dlprefiles"; then 8530*5ddc57e5SXin Li gentop="$output_objdir/${outputname}x" 8531*5ddc57e5SXin Li func_append generated " $gentop" 8532*5ddc57e5SXin Li 8533*5ddc57e5SXin Li func_extract_archives $gentop $dlprefiles 8534*5ddc57e5SXin Li func_append libobjs " $func_extract_archives_result" 8535*5ddc57e5SXin Li test "X$libobjs" = "X " && libobjs= 8536*5ddc57e5SXin Li fi 8537*5ddc57e5SXin Li 8538*5ddc57e5SXin Li save_ifs="$IFS"; IFS='~' 8539*5ddc57e5SXin Li for cmd in $cmds; do 8540*5ddc57e5SXin Li IFS="$save_ifs" 8541*5ddc57e5SXin Li eval cmd=\"$cmd\" 8542*5ddc57e5SXin Li $opt_silent || { 8543*5ddc57e5SXin Li func_quote_for_expand "$cmd" 8544*5ddc57e5SXin Li eval "func_echo $func_quote_for_expand_result" 8545*5ddc57e5SXin Li } 8546*5ddc57e5SXin Li $opt_dry_run || eval "$cmd" || { 8547*5ddc57e5SXin Li lt_exit=$? 8548*5ddc57e5SXin Li 8549*5ddc57e5SXin Li # Restore the uninstalled library and exit 8550*5ddc57e5SXin Li if test "$opt_mode" = relink; then 8551*5ddc57e5SXin Li ( cd "$output_objdir" && \ 8552*5ddc57e5SXin Li $RM "${realname}T" && \ 8553*5ddc57e5SXin Li $MV "${realname}U" "$realname" ) 8554*5ddc57e5SXin Li fi 8555*5ddc57e5SXin Li 8556*5ddc57e5SXin Li exit $lt_exit 8557*5ddc57e5SXin Li } 8558*5ddc57e5SXin Li done 8559*5ddc57e5SXin Li IFS="$save_ifs" 8560*5ddc57e5SXin Li 8561*5ddc57e5SXin Li # Restore the uninstalled library and exit 8562*5ddc57e5SXin Li if test "$opt_mode" = relink; then 8563*5ddc57e5SXin Li $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8564*5ddc57e5SXin Li 8565*5ddc57e5SXin Li if test -n "$convenience"; then 8566*5ddc57e5SXin Li if test -z "$whole_archive_flag_spec"; then 8567*5ddc57e5SXin Li func_show_eval '${RM}r "$gentop"' 8568*5ddc57e5SXin Li fi 8569*5ddc57e5SXin Li fi 8570*5ddc57e5SXin Li 8571*5ddc57e5SXin Li exit $EXIT_SUCCESS 8572*5ddc57e5SXin Li fi 8573*5ddc57e5SXin Li 8574*5ddc57e5SXin Li # Create links to the real library. 8575*5ddc57e5SXin Li for linkname in $linknames; do 8576*5ddc57e5SXin Li if test "$realname" != "$linkname"; then 8577*5ddc57e5SXin Li func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8578*5ddc57e5SXin Li fi 8579*5ddc57e5SXin Li done 8580*5ddc57e5SXin Li 8581*5ddc57e5SXin Li # If -module or -export-dynamic was specified, set the dlname. 8582*5ddc57e5SXin Li if test "$module" = yes || test "$export_dynamic" = yes; then 8583*5ddc57e5SXin Li # On all known operating systems, these are identical. 8584*5ddc57e5SXin Li dlname="$soname" 8585*5ddc57e5SXin Li fi 8586*5ddc57e5SXin Li fi 8587*5ddc57e5SXin Li ;; 8588*5ddc57e5SXin Li 8589*5ddc57e5SXin Li obj) 8590*5ddc57e5SXin Li if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8591*5ddc57e5SXin Li func_warning "\`-dlopen' is ignored for objects" 8592*5ddc57e5SXin Li fi 8593*5ddc57e5SXin Li 8594*5ddc57e5SXin Li case " $deplibs" in 8595*5ddc57e5SXin Li *\ -l* | *\ -L*) 8596*5ddc57e5SXin Li func_warning "\`-l' and \`-L' are ignored for objects" ;; 8597*5ddc57e5SXin Li esac 8598*5ddc57e5SXin Li 8599*5ddc57e5SXin Li test -n "$rpath" && \ 8600*5ddc57e5SXin Li func_warning "\`-rpath' is ignored for objects" 8601*5ddc57e5SXin Li 8602*5ddc57e5SXin Li test -n "$xrpath" && \ 8603*5ddc57e5SXin Li func_warning "\`-R' is ignored for objects" 8604*5ddc57e5SXin Li 8605*5ddc57e5SXin Li test -n "$vinfo" && \ 8606*5ddc57e5SXin Li func_warning "\`-version-info' is ignored for objects" 8607*5ddc57e5SXin Li 8608*5ddc57e5SXin Li test -n "$release" && \ 8609*5ddc57e5SXin Li func_warning "\`-release' is ignored for objects" 8610*5ddc57e5SXin Li 8611*5ddc57e5SXin Li case $output in 8612*5ddc57e5SXin Li *.lo) 8613*5ddc57e5SXin Li test -n "$objs$old_deplibs" && \ 8614*5ddc57e5SXin Li func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8615*5ddc57e5SXin Li 8616*5ddc57e5SXin Li libobj=$output 8617*5ddc57e5SXin Li func_lo2o "$libobj" 8618*5ddc57e5SXin Li obj=$func_lo2o_result 8619*5ddc57e5SXin Li ;; 8620*5ddc57e5SXin Li *) 8621*5ddc57e5SXin Li libobj= 8622*5ddc57e5SXin Li obj="$output" 8623*5ddc57e5SXin Li ;; 8624*5ddc57e5SXin Li esac 8625*5ddc57e5SXin Li 8626*5ddc57e5SXin Li # Delete the old objects. 8627*5ddc57e5SXin Li $opt_dry_run || $RM $obj $libobj 8628*5ddc57e5SXin Li 8629*5ddc57e5SXin Li # Objects from convenience libraries. This assumes 8630*5ddc57e5SXin Li # single-version convenience libraries. Whenever we create 8631*5ddc57e5SXin Li # different ones for PIC/non-PIC, this we'll have to duplicate 8632*5ddc57e5SXin Li # the extraction. 8633*5ddc57e5SXin Li reload_conv_objs= 8634*5ddc57e5SXin Li gentop= 8635*5ddc57e5SXin Li # reload_cmds runs $LD directly, so let us get rid of 8636*5ddc57e5SXin Li # -Wl from whole_archive_flag_spec and hope we can get by with 8637*5ddc57e5SXin Li # turning comma into space.. 8638*5ddc57e5SXin Li wl= 8639*5ddc57e5SXin Li 8640*5ddc57e5SXin Li if test -n "$convenience"; then 8641*5ddc57e5SXin Li if test -n "$whole_archive_flag_spec"; then 8642*5ddc57e5SXin Li eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 8643*5ddc57e5SXin Li reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8644*5ddc57e5SXin Li else 8645*5ddc57e5SXin Li gentop="$output_objdir/${obj}x" 8646*5ddc57e5SXin Li func_append generated " $gentop" 8647*5ddc57e5SXin Li 8648*5ddc57e5SXin Li func_extract_archives $gentop $convenience 8649*5ddc57e5SXin Li reload_conv_objs="$reload_objs $func_extract_archives_result" 8650*5ddc57e5SXin Li fi 8651*5ddc57e5SXin Li fi 8652*5ddc57e5SXin Li 8653*5ddc57e5SXin Li # If we're not building shared, we need to use non_pic_objs 8654*5ddc57e5SXin Li test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 8655*5ddc57e5SXin Li 8656*5ddc57e5SXin Li # Create the old-style object. 8657*5ddc57e5SXin Li reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8658*5ddc57e5SXin Li 8659*5ddc57e5SXin Li output="$obj" 8660*5ddc57e5SXin Li func_execute_cmds "$reload_cmds" 'exit $?' 8661*5ddc57e5SXin Li 8662*5ddc57e5SXin Li # Exit if we aren't doing a library object file. 8663*5ddc57e5SXin Li if test -z "$libobj"; then 8664*5ddc57e5SXin Li if test -n "$gentop"; then 8665*5ddc57e5SXin Li func_show_eval '${RM}r "$gentop"' 8666*5ddc57e5SXin Li fi 8667*5ddc57e5SXin Li 8668*5ddc57e5SXin Li exit $EXIT_SUCCESS 8669*5ddc57e5SXin Li fi 8670*5ddc57e5SXin Li 8671*5ddc57e5SXin Li if test "$build_libtool_libs" != yes; then 8672*5ddc57e5SXin Li if test -n "$gentop"; then 8673*5ddc57e5SXin Li func_show_eval '${RM}r "$gentop"' 8674*5ddc57e5SXin Li fi 8675*5ddc57e5SXin Li 8676*5ddc57e5SXin Li # Create an invalid libtool object if no PIC, so that we don't 8677*5ddc57e5SXin Li # accidentally link it into a program. 8678*5ddc57e5SXin Li # $show "echo timestamp > $libobj" 8679*5ddc57e5SXin Li # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8680*5ddc57e5SXin Li exit $EXIT_SUCCESS 8681*5ddc57e5SXin Li fi 8682*5ddc57e5SXin Li 8683*5ddc57e5SXin Li if test -n "$pic_flag" || test "$pic_mode" != default; then 8684*5ddc57e5SXin Li # Only do commands if we really have different PIC objects. 8685*5ddc57e5SXin Li reload_objs="$libobjs $reload_conv_objs" 8686*5ddc57e5SXin Li output="$libobj" 8687*5ddc57e5SXin Li func_execute_cmds "$reload_cmds" 'exit $?' 8688*5ddc57e5SXin Li fi 8689*5ddc57e5SXin Li 8690*5ddc57e5SXin Li if test -n "$gentop"; then 8691*5ddc57e5SXin Li func_show_eval '${RM}r "$gentop"' 8692*5ddc57e5SXin Li fi 8693*5ddc57e5SXin Li 8694*5ddc57e5SXin Li exit $EXIT_SUCCESS 8695*5ddc57e5SXin Li ;; 8696*5ddc57e5SXin Li 8697*5ddc57e5SXin Li prog) 8698*5ddc57e5SXin Li case $host in 8699*5ddc57e5SXin Li *cygwin*) func_stripname '' '.exe' "$output" 8700*5ddc57e5SXin Li output=$func_stripname_result.exe;; 8701*5ddc57e5SXin Li esac 8702*5ddc57e5SXin Li test -n "$vinfo" && \ 8703*5ddc57e5SXin Li func_warning "\`-version-info' is ignored for programs" 8704*5ddc57e5SXin Li 8705*5ddc57e5SXin Li test -n "$release" && \ 8706*5ddc57e5SXin Li func_warning "\`-release' is ignored for programs" 8707*5ddc57e5SXin Li 8708*5ddc57e5SXin Li test "$preload" = yes \ 8709*5ddc57e5SXin Li && test "$dlopen_support" = unknown \ 8710*5ddc57e5SXin Li && test "$dlopen_self" = unknown \ 8711*5ddc57e5SXin Li && test "$dlopen_self_static" = unknown && \ 8712*5ddc57e5SXin Li func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8713*5ddc57e5SXin Li 8714*5ddc57e5SXin Li case $host in 8715*5ddc57e5SXin Li *-*-rhapsody* | *-*-darwin1.[012]) 8716*5ddc57e5SXin Li # On Rhapsody replace the C library is the System framework 8717*5ddc57e5SXin Li compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 8718*5ddc57e5SXin Li finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8719*5ddc57e5SXin Li ;; 8720*5ddc57e5SXin Li esac 8721*5ddc57e5SXin Li 8722*5ddc57e5SXin Li case $host in 8723*5ddc57e5SXin Li *-*-darwin*) 8724*5ddc57e5SXin Li # Don't allow lazy linking, it breaks C++ global constructors 8725*5ddc57e5SXin Li # But is supposedly fixed on 10.4 or later (yay!). 8726*5ddc57e5SXin Li if test "$tagname" = CXX ; then 8727*5ddc57e5SXin Li case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8728*5ddc57e5SXin Li 10.[0123]) 8729*5ddc57e5SXin Li func_append compile_command " ${wl}-bind_at_load" 8730*5ddc57e5SXin Li func_append finalize_command " ${wl}-bind_at_load" 8731*5ddc57e5SXin Li ;; 8732*5ddc57e5SXin Li esac 8733*5ddc57e5SXin Li fi 8734*5ddc57e5SXin Li # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8735*5ddc57e5SXin Li compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8736*5ddc57e5SXin Li finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8737*5ddc57e5SXin Li ;; 8738*5ddc57e5SXin Li esac 8739*5ddc57e5SXin Li 8740*5ddc57e5SXin Li 8741*5ddc57e5SXin Li # move library search paths that coincide with paths to not yet 8742*5ddc57e5SXin Li # installed libraries to the beginning of the library search list 8743*5ddc57e5SXin Li new_libs= 8744*5ddc57e5SXin Li for path in $notinst_path; do 8745*5ddc57e5SXin Li case " $new_libs " in 8746*5ddc57e5SXin Li *" -L$path/$objdir "*) ;; 8747*5ddc57e5SXin Li *) 8748*5ddc57e5SXin Li case " $compile_deplibs " in 8749*5ddc57e5SXin Li *" -L$path/$objdir "*) 8750*5ddc57e5SXin Li func_append new_libs " -L$path/$objdir" ;; 8751*5ddc57e5SXin Li esac 8752*5ddc57e5SXin Li ;; 8753*5ddc57e5SXin Li esac 8754*5ddc57e5SXin Li done 8755*5ddc57e5SXin Li for deplib in $compile_deplibs; do 8756*5ddc57e5SXin Li case $deplib in 8757*5ddc57e5SXin Li -L*) 8758*5ddc57e5SXin Li case " $new_libs " in 8759*5ddc57e5SXin Li *" $deplib "*) ;; 8760*5ddc57e5SXin Li *) func_append new_libs " $deplib" ;; 8761*5ddc57e5SXin Li esac 8762*5ddc57e5SXin Li ;; 8763*5ddc57e5SXin Li *) func_append new_libs " $deplib" ;; 8764*5ddc57e5SXin Li esac 8765*5ddc57e5SXin Li done 8766*5ddc57e5SXin Li compile_deplibs="$new_libs" 8767*5ddc57e5SXin Li 8768*5ddc57e5SXin Li 8769*5ddc57e5SXin Li func_append compile_command " $compile_deplibs" 8770*5ddc57e5SXin Li func_append finalize_command " $finalize_deplibs" 8771*5ddc57e5SXin Li 8772*5ddc57e5SXin Li if test -n "$rpath$xrpath"; then 8773*5ddc57e5SXin Li # If the user specified any rpath flags, then add them. 8774*5ddc57e5SXin Li for libdir in $rpath $xrpath; do 8775*5ddc57e5SXin Li # This is the magic to use -rpath. 8776*5ddc57e5SXin Li case "$finalize_rpath " in 8777*5ddc57e5SXin Li *" $libdir "*) ;; 8778*5ddc57e5SXin Li *) func_append finalize_rpath " $libdir" ;; 8779*5ddc57e5SXin Li esac 8780*5ddc57e5SXin Li done 8781*5ddc57e5SXin Li fi 8782*5ddc57e5SXin Li 8783*5ddc57e5SXin Li # Now hardcode the library paths 8784*5ddc57e5SXin Li rpath= 8785*5ddc57e5SXin Li hardcode_libdirs= 8786*5ddc57e5SXin Li for libdir in $compile_rpath $finalize_rpath; do 8787*5ddc57e5SXin Li if test -n "$hardcode_libdir_flag_spec"; then 8788*5ddc57e5SXin Li if test -n "$hardcode_libdir_separator"; then 8789*5ddc57e5SXin Li if test -z "$hardcode_libdirs"; then 8790*5ddc57e5SXin Li hardcode_libdirs="$libdir" 8791*5ddc57e5SXin Li else 8792*5ddc57e5SXin Li # Just accumulate the unique libdirs. 8793*5ddc57e5SXin Li case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8794*5ddc57e5SXin Li *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8795*5ddc57e5SXin Li ;; 8796*5ddc57e5SXin Li *) 8797*5ddc57e5SXin Li func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8798*5ddc57e5SXin Li ;; 8799*5ddc57e5SXin Li esac 8800*5ddc57e5SXin Li fi 8801*5ddc57e5SXin Li else 8802*5ddc57e5SXin Li eval flag=\"$hardcode_libdir_flag_spec\" 8803*5ddc57e5SXin Li func_append rpath " $flag" 8804*5ddc57e5SXin Li fi 8805*5ddc57e5SXin Li elif test -n "$runpath_var"; then 8806*5ddc57e5SXin Li case "$perm_rpath " in 8807*5ddc57e5SXin Li *" $libdir "*) ;; 8808*5ddc57e5SXin Li *) func_append perm_rpath " $libdir" ;; 8809*5ddc57e5SXin Li esac 8810*5ddc57e5SXin Li fi 8811*5ddc57e5SXin Li case $host in 8812*5ddc57e5SXin Li *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8813*5ddc57e5SXin Li testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8814*5ddc57e5SXin Li case :$dllsearchpath: in 8815*5ddc57e5SXin Li *":$libdir:"*) ;; 8816*5ddc57e5SXin Li ::) dllsearchpath=$libdir;; 8817*5ddc57e5SXin Li *) func_append dllsearchpath ":$libdir";; 8818*5ddc57e5SXin Li esac 8819*5ddc57e5SXin Li case :$dllsearchpath: in 8820*5ddc57e5SXin Li *":$testbindir:"*) ;; 8821*5ddc57e5SXin Li ::) dllsearchpath=$testbindir;; 8822*5ddc57e5SXin Li *) func_append dllsearchpath ":$testbindir";; 8823*5ddc57e5SXin Li esac 8824*5ddc57e5SXin Li ;; 8825*5ddc57e5SXin Li esac 8826*5ddc57e5SXin Li done 8827*5ddc57e5SXin Li # Substitute the hardcoded libdirs into the rpath. 8828*5ddc57e5SXin Li if test -n "$hardcode_libdir_separator" && 8829*5ddc57e5SXin Li test -n "$hardcode_libdirs"; then 8830*5ddc57e5SXin Li libdir="$hardcode_libdirs" 8831*5ddc57e5SXin Li eval rpath=\" $hardcode_libdir_flag_spec\" 8832*5ddc57e5SXin Li fi 8833*5ddc57e5SXin Li compile_rpath="$rpath" 8834*5ddc57e5SXin Li 8835*5ddc57e5SXin Li rpath= 8836*5ddc57e5SXin Li hardcode_libdirs= 8837*5ddc57e5SXin Li for libdir in $finalize_rpath; do 8838*5ddc57e5SXin Li if test -n "$hardcode_libdir_flag_spec"; then 8839*5ddc57e5SXin Li if test -n "$hardcode_libdir_separator"; then 8840*5ddc57e5SXin Li if test -z "$hardcode_libdirs"; then 8841*5ddc57e5SXin Li hardcode_libdirs="$libdir" 8842*5ddc57e5SXin Li else 8843*5ddc57e5SXin Li # Just accumulate the unique libdirs. 8844*5ddc57e5SXin Li case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8845*5ddc57e5SXin Li *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8846*5ddc57e5SXin Li ;; 8847*5ddc57e5SXin Li *) 8848*5ddc57e5SXin Li func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8849*5ddc57e5SXin Li ;; 8850*5ddc57e5SXin Li esac 8851*5ddc57e5SXin Li fi 8852*5ddc57e5SXin Li else 8853*5ddc57e5SXin Li eval flag=\"$hardcode_libdir_flag_spec\" 8854*5ddc57e5SXin Li func_append rpath " $flag" 8855*5ddc57e5SXin Li fi 8856*5ddc57e5SXin Li elif test -n "$runpath_var"; then 8857*5ddc57e5SXin Li case "$finalize_perm_rpath " in 8858*5ddc57e5SXin Li *" $libdir "*) ;; 8859*5ddc57e5SXin Li *) func_append finalize_perm_rpath " $libdir" ;; 8860*5ddc57e5SXin Li esac 8861*5ddc57e5SXin Li fi 8862*5ddc57e5SXin Li done 8863*5ddc57e5SXin Li # Substitute the hardcoded libdirs into the rpath. 8864*5ddc57e5SXin Li if test -n "$hardcode_libdir_separator" && 8865*5ddc57e5SXin Li test -n "$hardcode_libdirs"; then 8866*5ddc57e5SXin Li libdir="$hardcode_libdirs" 8867*5ddc57e5SXin Li eval rpath=\" $hardcode_libdir_flag_spec\" 8868*5ddc57e5SXin Li fi 8869*5ddc57e5SXin Li finalize_rpath="$rpath" 8870*5ddc57e5SXin Li 8871*5ddc57e5SXin Li if test -n "$libobjs" && test "$build_old_libs" = yes; then 8872*5ddc57e5SXin Li # Transform all the library objects into standard objects. 8873*5ddc57e5SXin Li compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8874*5ddc57e5SXin Li finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8875*5ddc57e5SXin Li fi 8876*5ddc57e5SXin Li 8877*5ddc57e5SXin Li func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8878*5ddc57e5SXin Li 8879*5ddc57e5SXin Li # template prelinking step 8880*5ddc57e5SXin Li if test -n "$prelink_cmds"; then 8881*5ddc57e5SXin Li func_execute_cmds "$prelink_cmds" 'exit $?' 8882*5ddc57e5SXin Li fi 8883*5ddc57e5SXin Li 8884*5ddc57e5SXin Li wrappers_required=yes 8885*5ddc57e5SXin Li case $host in 8886*5ddc57e5SXin Li *cegcc* | *mingw32ce*) 8887*5ddc57e5SXin Li # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 8888*5ddc57e5SXin Li wrappers_required=no 8889*5ddc57e5SXin Li ;; 8890*5ddc57e5SXin Li *cygwin* | *mingw* ) 8891*5ddc57e5SXin Li if test "$build_libtool_libs" != yes; then 8892*5ddc57e5SXin Li wrappers_required=no 8893*5ddc57e5SXin Li fi 8894*5ddc57e5SXin Li ;; 8895*5ddc57e5SXin Li *) 8896*5ddc57e5SXin Li if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8897*5ddc57e5SXin Li wrappers_required=no 8898*5ddc57e5SXin Li fi 8899*5ddc57e5SXin Li ;; 8900*5ddc57e5SXin Li esac 8901*5ddc57e5SXin Li if test "$wrappers_required" = no; then 8902*5ddc57e5SXin Li # Replace the output file specification. 8903*5ddc57e5SXin Li compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8904*5ddc57e5SXin Li link_command="$compile_command$compile_rpath" 8905*5ddc57e5SXin Li 8906*5ddc57e5SXin Li # We have no uninstalled library dependencies, so finalize right now. 8907*5ddc57e5SXin Li exit_status=0 8908*5ddc57e5SXin Li func_show_eval "$link_command" 'exit_status=$?' 8909*5ddc57e5SXin Li 8910*5ddc57e5SXin Li if test -n "$postlink_cmds"; then 8911*5ddc57e5SXin Li func_to_tool_file "$output" 8912*5ddc57e5SXin Li postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8913*5ddc57e5SXin Li func_execute_cmds "$postlink_cmds" 'exit $?' 8914*5ddc57e5SXin Li fi 8915*5ddc57e5SXin Li 8916*5ddc57e5SXin Li # Delete the generated files. 8917*5ddc57e5SXin Li if test -f "$output_objdir/${outputname}S.${objext}"; then 8918*5ddc57e5SXin Li func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8919*5ddc57e5SXin Li fi 8920*5ddc57e5SXin Li 8921*5ddc57e5SXin Li exit $exit_status 8922*5ddc57e5SXin Li fi 8923*5ddc57e5SXin Li 8924*5ddc57e5SXin Li if test -n "$compile_shlibpath$finalize_shlibpath"; then 8925*5ddc57e5SXin Li compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8926*5ddc57e5SXin Li fi 8927*5ddc57e5SXin Li if test -n "$finalize_shlibpath"; then 8928*5ddc57e5SXin Li finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8929*5ddc57e5SXin Li fi 8930*5ddc57e5SXin Li 8931*5ddc57e5SXin Li compile_var= 8932*5ddc57e5SXin Li finalize_var= 8933*5ddc57e5SXin Li if test -n "$runpath_var"; then 8934*5ddc57e5SXin Li if test -n "$perm_rpath"; then 8935*5ddc57e5SXin Li # We should set the runpath_var. 8936*5ddc57e5SXin Li rpath= 8937*5ddc57e5SXin Li for dir in $perm_rpath; do 8938*5ddc57e5SXin Li func_append rpath "$dir:" 8939*5ddc57e5SXin Li done 8940*5ddc57e5SXin Li compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8941*5ddc57e5SXin Li fi 8942*5ddc57e5SXin Li if test -n "$finalize_perm_rpath"; then 8943*5ddc57e5SXin Li # We should set the runpath_var. 8944*5ddc57e5SXin Li rpath= 8945*5ddc57e5SXin Li for dir in $finalize_perm_rpath; do 8946*5ddc57e5SXin Li func_append rpath "$dir:" 8947*5ddc57e5SXin Li done 8948*5ddc57e5SXin Li finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8949*5ddc57e5SXin Li fi 8950*5ddc57e5SXin Li fi 8951*5ddc57e5SXin Li 8952*5ddc57e5SXin Li if test "$no_install" = yes; then 8953*5ddc57e5SXin Li # We don't need to create a wrapper script. 8954*5ddc57e5SXin Li link_command="$compile_var$compile_command$compile_rpath" 8955*5ddc57e5SXin Li # Replace the output file specification. 8956*5ddc57e5SXin Li link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8957*5ddc57e5SXin Li # Delete the old output file. 8958*5ddc57e5SXin Li $opt_dry_run || $RM $output 8959*5ddc57e5SXin Li # Link the executable and exit 8960*5ddc57e5SXin Li func_show_eval "$link_command" 'exit $?' 8961*5ddc57e5SXin Li 8962*5ddc57e5SXin Li if test -n "$postlink_cmds"; then 8963*5ddc57e5SXin Li func_to_tool_file "$output" 8964*5ddc57e5SXin Li postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8965*5ddc57e5SXin Li func_execute_cmds "$postlink_cmds" 'exit $?' 8966*5ddc57e5SXin Li fi 8967*5ddc57e5SXin Li 8968*5ddc57e5SXin Li exit $EXIT_SUCCESS 8969*5ddc57e5SXin Li fi 8970*5ddc57e5SXin Li 8971*5ddc57e5SXin Li if test "$hardcode_action" = relink; then 8972*5ddc57e5SXin Li # Fast installation is not supported 8973*5ddc57e5SXin Li link_command="$compile_var$compile_command$compile_rpath" 8974*5ddc57e5SXin Li relink_command="$finalize_var$finalize_command$finalize_rpath" 8975*5ddc57e5SXin Li 8976*5ddc57e5SXin Li func_warning "this platform does not like uninstalled shared libraries" 8977*5ddc57e5SXin Li func_warning "\`$output' will be relinked during installation" 8978*5ddc57e5SXin Li else 8979*5ddc57e5SXin Li if test "$fast_install" != no; then 8980*5ddc57e5SXin Li link_command="$finalize_var$compile_command$finalize_rpath" 8981*5ddc57e5SXin Li if test "$fast_install" = yes; then 8982*5ddc57e5SXin Li relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8983*5ddc57e5SXin Li else 8984*5ddc57e5SXin Li # fast_install is set to needless 8985*5ddc57e5SXin Li relink_command= 8986*5ddc57e5SXin Li fi 8987*5ddc57e5SXin Li else 8988*5ddc57e5SXin Li link_command="$compile_var$compile_command$compile_rpath" 8989*5ddc57e5SXin Li relink_command="$finalize_var$finalize_command$finalize_rpath" 8990*5ddc57e5SXin Li fi 8991*5ddc57e5SXin Li fi 8992*5ddc57e5SXin Li 8993*5ddc57e5SXin Li # Replace the output file specification. 8994*5ddc57e5SXin Li link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8995*5ddc57e5SXin Li 8996*5ddc57e5SXin Li # Delete the old output files. 8997*5ddc57e5SXin Li $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8998*5ddc57e5SXin Li 8999*5ddc57e5SXin Li func_show_eval "$link_command" 'exit $?' 9000*5ddc57e5SXin Li 9001*5ddc57e5SXin Li if test -n "$postlink_cmds"; then 9002*5ddc57e5SXin Li func_to_tool_file "$output_objdir/$outputname" 9003*5ddc57e5SXin Li 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'` 9004*5ddc57e5SXin Li func_execute_cmds "$postlink_cmds" 'exit $?' 9005*5ddc57e5SXin Li fi 9006*5ddc57e5SXin Li 9007*5ddc57e5SXin Li # Now create the wrapper script. 9008*5ddc57e5SXin Li func_verbose "creating $output" 9009*5ddc57e5SXin Li 9010*5ddc57e5SXin Li # Quote the relink command for shipping. 9011*5ddc57e5SXin Li if test -n "$relink_command"; then 9012*5ddc57e5SXin Li # Preserve any variables that may affect compiler behavior 9013*5ddc57e5SXin Li for var in $variables_saved_for_relink; do 9014*5ddc57e5SXin Li if eval test -z \"\${$var+set}\"; then 9015*5ddc57e5SXin Li relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9016*5ddc57e5SXin Li elif eval var_value=\$$var; test -z "$var_value"; then 9017*5ddc57e5SXin Li relink_command="$var=; export $var; $relink_command" 9018*5ddc57e5SXin Li else 9019*5ddc57e5SXin Li func_quote_for_eval "$var_value" 9020*5ddc57e5SXin Li relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9021*5ddc57e5SXin Li fi 9022*5ddc57e5SXin Li done 9023*5ddc57e5SXin Li relink_command="(cd `pwd`; $relink_command)" 9024*5ddc57e5SXin Li relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9025*5ddc57e5SXin Li fi 9026*5ddc57e5SXin Li 9027*5ddc57e5SXin Li # Only actually do things if not in dry run mode. 9028*5ddc57e5SXin Li $opt_dry_run || { 9029*5ddc57e5SXin Li # win32 will think the script is a binary if it has 9030*5ddc57e5SXin Li # a .exe suffix, so we strip it off here. 9031*5ddc57e5SXin Li case $output in 9032*5ddc57e5SXin Li *.exe) func_stripname '' '.exe' "$output" 9033*5ddc57e5SXin Li output=$func_stripname_result ;; 9034*5ddc57e5SXin Li esac 9035*5ddc57e5SXin Li # test for cygwin because mv fails w/o .exe extensions 9036*5ddc57e5SXin Li case $host in 9037*5ddc57e5SXin Li *cygwin*) 9038*5ddc57e5SXin Li exeext=.exe 9039*5ddc57e5SXin Li func_stripname '' '.exe' "$outputname" 9040*5ddc57e5SXin Li outputname=$func_stripname_result ;; 9041*5ddc57e5SXin Li *) exeext= ;; 9042*5ddc57e5SXin Li esac 9043*5ddc57e5SXin Li case $host in 9044*5ddc57e5SXin Li *cygwin* | *mingw* ) 9045*5ddc57e5SXin Li func_dirname_and_basename "$output" "" "." 9046*5ddc57e5SXin Li output_name=$func_basename_result 9047*5ddc57e5SXin Li output_path=$func_dirname_result 9048*5ddc57e5SXin Li cwrappersource="$output_path/$objdir/lt-$output_name.c" 9049*5ddc57e5SXin Li cwrapper="$output_path/$output_name.exe" 9050*5ddc57e5SXin Li $RM $cwrappersource $cwrapper 9051*5ddc57e5SXin Li trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9052*5ddc57e5SXin Li 9053*5ddc57e5SXin Li func_emit_cwrapperexe_src > $cwrappersource 9054*5ddc57e5SXin Li 9055*5ddc57e5SXin Li # The wrapper executable is built using the $host compiler, 9056*5ddc57e5SXin Li # because it contains $host paths and files. If cross- 9057*5ddc57e5SXin Li # compiling, it, like the target executable, must be 9058*5ddc57e5SXin Li # executed on the $host or under an emulation environment. 9059*5ddc57e5SXin Li $opt_dry_run || { 9060*5ddc57e5SXin Li $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9061*5ddc57e5SXin Li $STRIP $cwrapper 9062*5ddc57e5SXin Li } 9063*5ddc57e5SXin Li 9064*5ddc57e5SXin Li # Now, create the wrapper script for func_source use: 9065*5ddc57e5SXin Li func_ltwrapper_scriptname $cwrapper 9066*5ddc57e5SXin Li $RM $func_ltwrapper_scriptname_result 9067*5ddc57e5SXin Li trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9068*5ddc57e5SXin Li $opt_dry_run || { 9069*5ddc57e5SXin Li # note: this script will not be executed, so do not chmod. 9070*5ddc57e5SXin Li if test "x$build" = "x$host" ; then 9071*5ddc57e5SXin Li $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9072*5ddc57e5SXin Li else 9073*5ddc57e5SXin Li func_emit_wrapper no > $func_ltwrapper_scriptname_result 9074*5ddc57e5SXin Li fi 9075*5ddc57e5SXin Li } 9076*5ddc57e5SXin Li ;; 9077*5ddc57e5SXin Li * ) 9078*5ddc57e5SXin Li $RM $output 9079*5ddc57e5SXin Li trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9080*5ddc57e5SXin Li 9081*5ddc57e5SXin Li func_emit_wrapper no > $output 9082*5ddc57e5SXin Li chmod +x $output 9083*5ddc57e5SXin Li ;; 9084*5ddc57e5SXin Li esac 9085*5ddc57e5SXin Li } 9086*5ddc57e5SXin Li exit $EXIT_SUCCESS 9087*5ddc57e5SXin Li ;; 9088*5ddc57e5SXin Li esac 9089*5ddc57e5SXin Li 9090*5ddc57e5SXin Li # See if we need to build an old-fashioned archive. 9091*5ddc57e5SXin Li for oldlib in $oldlibs; do 9092*5ddc57e5SXin Li 9093*5ddc57e5SXin Li if test "$build_libtool_libs" = convenience; then 9094*5ddc57e5SXin Li oldobjs="$libobjs_save $symfileobj" 9095*5ddc57e5SXin Li addlibs="$convenience" 9096*5ddc57e5SXin Li build_libtool_libs=no 9097*5ddc57e5SXin Li else 9098*5ddc57e5SXin Li if test "$build_libtool_libs" = module; then 9099*5ddc57e5SXin Li oldobjs="$libobjs_save" 9100*5ddc57e5SXin Li build_libtool_libs=no 9101*5ddc57e5SXin Li else 9102*5ddc57e5SXin Li oldobjs="$old_deplibs $non_pic_objects" 9103*5ddc57e5SXin Li if test "$preload" = yes && test -f "$symfileobj"; then 9104*5ddc57e5SXin Li func_append oldobjs " $symfileobj" 9105*5ddc57e5SXin Li fi 9106*5ddc57e5SXin Li fi 9107*5ddc57e5SXin Li addlibs="$old_convenience" 9108*5ddc57e5SXin Li fi 9109*5ddc57e5SXin Li 9110*5ddc57e5SXin Li if test -n "$addlibs"; then 9111*5ddc57e5SXin Li gentop="$output_objdir/${outputname}x" 9112*5ddc57e5SXin Li func_append generated " $gentop" 9113*5ddc57e5SXin Li 9114*5ddc57e5SXin Li func_extract_archives $gentop $addlibs 9115*5ddc57e5SXin Li func_append oldobjs " $func_extract_archives_result" 9116*5ddc57e5SXin Li fi 9117*5ddc57e5SXin Li 9118*5ddc57e5SXin Li # Do each command in the archive commands. 9119*5ddc57e5SXin Li if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9120*5ddc57e5SXin Li cmds=$old_archive_from_new_cmds 9121*5ddc57e5SXin Li else 9122*5ddc57e5SXin Li 9123*5ddc57e5SXin Li # Add any objects from preloaded convenience libraries 9124*5ddc57e5SXin Li if test -n "$dlprefiles"; then 9125*5ddc57e5SXin Li gentop="$output_objdir/${outputname}x" 9126*5ddc57e5SXin Li func_append generated " $gentop" 9127*5ddc57e5SXin Li 9128*5ddc57e5SXin Li func_extract_archives $gentop $dlprefiles 9129*5ddc57e5SXin Li func_append oldobjs " $func_extract_archives_result" 9130*5ddc57e5SXin Li fi 9131*5ddc57e5SXin Li 9132*5ddc57e5SXin Li # POSIX demands no paths to be encoded in archives. We have 9133*5ddc57e5SXin Li # to avoid creating archives with duplicate basenames if we 9134*5ddc57e5SXin Li # might have to extract them afterwards, e.g., when creating a 9135*5ddc57e5SXin Li # static archive out of a convenience library, or when linking 9136*5ddc57e5SXin Li # the entirety of a libtool archive into another (currently 9137*5ddc57e5SXin Li # not supported by libtool). 9138*5ddc57e5SXin Li if (for obj in $oldobjs 9139*5ddc57e5SXin Li do 9140*5ddc57e5SXin Li func_basename "$obj" 9141*5ddc57e5SXin Li $ECHO "$func_basename_result" 9142*5ddc57e5SXin Li done | sort | sort -uc >/dev/null 2>&1); then 9143*5ddc57e5SXin Li : 9144*5ddc57e5SXin Li else 9145*5ddc57e5SXin Li echo "copying selected object files to avoid basename conflicts..." 9146*5ddc57e5SXin Li gentop="$output_objdir/${outputname}x" 9147*5ddc57e5SXin Li func_append generated " $gentop" 9148*5ddc57e5SXin Li func_mkdir_p "$gentop" 9149*5ddc57e5SXin Li save_oldobjs=$oldobjs 9150*5ddc57e5SXin Li oldobjs= 9151*5ddc57e5SXin Li counter=1 9152*5ddc57e5SXin Li for obj in $save_oldobjs 9153*5ddc57e5SXin Li do 9154*5ddc57e5SXin Li func_basename "$obj" 9155*5ddc57e5SXin Li objbase="$func_basename_result" 9156*5ddc57e5SXin Li case " $oldobjs " in 9157*5ddc57e5SXin Li " ") oldobjs=$obj ;; 9158*5ddc57e5SXin Li *[\ /]"$objbase "*) 9159*5ddc57e5SXin Li while :; do 9160*5ddc57e5SXin Li # Make sure we don't pick an alternate name that also 9161*5ddc57e5SXin Li # overlaps. 9162*5ddc57e5SXin Li newobj=lt$counter-$objbase 9163*5ddc57e5SXin Li func_arith $counter + 1 9164*5ddc57e5SXin Li counter=$func_arith_result 9165*5ddc57e5SXin Li case " $oldobjs " in 9166*5ddc57e5SXin Li *[\ /]"$newobj "*) ;; 9167*5ddc57e5SXin Li *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9168*5ddc57e5SXin Li esac 9169*5ddc57e5SXin Li done 9170*5ddc57e5SXin Li func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 9171*5ddc57e5SXin Li func_append oldobjs " $gentop/$newobj" 9172*5ddc57e5SXin Li ;; 9173*5ddc57e5SXin Li *) func_append oldobjs " $obj" ;; 9174*5ddc57e5SXin Li esac 9175*5ddc57e5SXin Li done 9176*5ddc57e5SXin Li fi 9177*5ddc57e5SXin Li func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 9178*5ddc57e5SXin Li tool_oldlib=$func_to_tool_file_result 9179*5ddc57e5SXin Li eval cmds=\"$old_archive_cmds\" 9180*5ddc57e5SXin Li 9181*5ddc57e5SXin Li func_len " $cmds" 9182*5ddc57e5SXin Li len=$func_len_result 9183*5ddc57e5SXin Li if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9184*5ddc57e5SXin Li cmds=$old_archive_cmds 9185*5ddc57e5SXin Li elif test -n "$archiver_list_spec"; then 9186*5ddc57e5SXin Li func_verbose "using command file archive linking..." 9187*5ddc57e5SXin Li for obj in $oldobjs 9188*5ddc57e5SXin Li do 9189*5ddc57e5SXin Li func_to_tool_file "$obj" 9190*5ddc57e5SXin Li $ECHO "$func_to_tool_file_result" 9191*5ddc57e5SXin Li done > $output_objdir/$libname.libcmd 9192*5ddc57e5SXin Li func_to_tool_file "$output_objdir/$libname.libcmd" 9193*5ddc57e5SXin Li oldobjs=" $archiver_list_spec$func_to_tool_file_result" 9194*5ddc57e5SXin Li cmds=$old_archive_cmds 9195*5ddc57e5SXin Li else 9196*5ddc57e5SXin Li # the command line is too long to link in one step, link in parts 9197*5ddc57e5SXin Li func_verbose "using piecewise archive linking..." 9198*5ddc57e5SXin Li save_RANLIB=$RANLIB 9199*5ddc57e5SXin Li RANLIB=: 9200*5ddc57e5SXin Li objlist= 9201*5ddc57e5SXin Li concat_cmds= 9202*5ddc57e5SXin Li save_oldobjs=$oldobjs 9203*5ddc57e5SXin Li oldobjs= 9204*5ddc57e5SXin Li # Is there a better way of finding the last object in the list? 9205*5ddc57e5SXin Li for obj in $save_oldobjs 9206*5ddc57e5SXin Li do 9207*5ddc57e5SXin Li last_oldobj=$obj 9208*5ddc57e5SXin Li done 9209*5ddc57e5SXin Li eval test_cmds=\"$old_archive_cmds\" 9210*5ddc57e5SXin Li func_len " $test_cmds" 9211*5ddc57e5SXin Li len0=$func_len_result 9212*5ddc57e5SXin Li len=$len0 9213*5ddc57e5SXin Li for obj in $save_oldobjs 9214*5ddc57e5SXin Li do 9215*5ddc57e5SXin Li func_len " $obj" 9216*5ddc57e5SXin Li func_arith $len + $func_len_result 9217*5ddc57e5SXin Li len=$func_arith_result 9218*5ddc57e5SXin Li func_append objlist " $obj" 9219*5ddc57e5SXin Li if test "$len" -lt "$max_cmd_len"; then 9220*5ddc57e5SXin Li : 9221*5ddc57e5SXin Li else 9222*5ddc57e5SXin Li # the above command should be used before it gets too long 9223*5ddc57e5SXin Li oldobjs=$objlist 9224*5ddc57e5SXin Li if test "$obj" = "$last_oldobj" ; then 9225*5ddc57e5SXin Li RANLIB=$save_RANLIB 9226*5ddc57e5SXin Li fi 9227*5ddc57e5SXin Li test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9228*5ddc57e5SXin Li eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9229*5ddc57e5SXin Li objlist= 9230*5ddc57e5SXin Li len=$len0 9231*5ddc57e5SXin Li fi 9232*5ddc57e5SXin Li done 9233*5ddc57e5SXin Li RANLIB=$save_RANLIB 9234*5ddc57e5SXin Li oldobjs=$objlist 9235*5ddc57e5SXin Li if test "X$oldobjs" = "X" ; then 9236*5ddc57e5SXin Li eval cmds=\"\$concat_cmds\" 9237*5ddc57e5SXin Li else 9238*5ddc57e5SXin Li eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9239*5ddc57e5SXin Li fi 9240*5ddc57e5SXin Li fi 9241*5ddc57e5SXin Li fi 9242*5ddc57e5SXin Li func_execute_cmds "$cmds" 'exit $?' 9243*5ddc57e5SXin Li done 9244*5ddc57e5SXin Li 9245*5ddc57e5SXin Li test -n "$generated" && \ 9246*5ddc57e5SXin Li func_show_eval "${RM}r$generated" 9247*5ddc57e5SXin Li 9248*5ddc57e5SXin Li # Now create the libtool archive. 9249*5ddc57e5SXin Li case $output in 9250*5ddc57e5SXin Li *.la) 9251*5ddc57e5SXin Li old_library= 9252*5ddc57e5SXin Li test "$build_old_libs" = yes && old_library="$libname.$libext" 9253*5ddc57e5SXin Li func_verbose "creating $output" 9254*5ddc57e5SXin Li 9255*5ddc57e5SXin Li # Preserve any variables that may affect compiler behavior 9256*5ddc57e5SXin Li for var in $variables_saved_for_relink; do 9257*5ddc57e5SXin Li if eval test -z \"\${$var+set}\"; then 9258*5ddc57e5SXin Li relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9259*5ddc57e5SXin Li elif eval var_value=\$$var; test -z "$var_value"; then 9260*5ddc57e5SXin Li relink_command="$var=; export $var; $relink_command" 9261*5ddc57e5SXin Li else 9262*5ddc57e5SXin Li func_quote_for_eval "$var_value" 9263*5ddc57e5SXin Li relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9264*5ddc57e5SXin Li fi 9265*5ddc57e5SXin Li done 9266*5ddc57e5SXin Li # Quote the link command for shipping. 9267*5ddc57e5SXin Li relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 9268*5ddc57e5SXin Li relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9269*5ddc57e5SXin Li if test "$hardcode_automatic" = yes ; then 9270*5ddc57e5SXin Li relink_command= 9271*5ddc57e5SXin Li fi 9272*5ddc57e5SXin Li 9273*5ddc57e5SXin Li # Only create the output if not a dry run. 9274*5ddc57e5SXin Li $opt_dry_run || { 9275*5ddc57e5SXin Li for installed in no yes; do 9276*5ddc57e5SXin Li if test "$installed" = yes; then 9277*5ddc57e5SXin Li if test -z "$install_libdir"; then 9278*5ddc57e5SXin Li break 9279*5ddc57e5SXin Li fi 9280*5ddc57e5SXin Li output="$output_objdir/$outputname"i 9281*5ddc57e5SXin Li # Replace all uninstalled libtool libraries with the installed ones 9282*5ddc57e5SXin Li newdependency_libs= 9283*5ddc57e5SXin Li for deplib in $dependency_libs; do 9284*5ddc57e5SXin Li case $deplib in 9285*5ddc57e5SXin Li *.la) 9286*5ddc57e5SXin Li func_basename "$deplib" 9287*5ddc57e5SXin Li name="$func_basename_result" 9288*5ddc57e5SXin Li func_resolve_sysroot "$deplib" 9289*5ddc57e5SXin Li eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9290*5ddc57e5SXin Li test -z "$libdir" && \ 9291*5ddc57e5SXin Li func_fatal_error "\`$deplib' is not a valid libtool archive" 9292*5ddc57e5SXin Li func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 9293*5ddc57e5SXin Li ;; 9294*5ddc57e5SXin Li -L*) 9295*5ddc57e5SXin Li func_stripname -L '' "$deplib" 9296*5ddc57e5SXin Li func_replace_sysroot "$func_stripname_result" 9297*5ddc57e5SXin Li func_append newdependency_libs " -L$func_replace_sysroot_result" 9298*5ddc57e5SXin Li ;; 9299*5ddc57e5SXin Li -R*) 9300*5ddc57e5SXin Li func_stripname -R '' "$deplib" 9301*5ddc57e5SXin Li func_replace_sysroot "$func_stripname_result" 9302*5ddc57e5SXin Li func_append newdependency_libs " -R$func_replace_sysroot_result" 9303*5ddc57e5SXin Li ;; 9304*5ddc57e5SXin Li *) func_append newdependency_libs " $deplib" ;; 9305*5ddc57e5SXin Li esac 9306*5ddc57e5SXin Li done 9307*5ddc57e5SXin Li dependency_libs="$newdependency_libs" 9308*5ddc57e5SXin Li newdlfiles= 9309*5ddc57e5SXin Li 9310*5ddc57e5SXin Li for lib in $dlfiles; do 9311*5ddc57e5SXin Li case $lib in 9312*5ddc57e5SXin Li *.la) 9313*5ddc57e5SXin Li func_basename "$lib" 9314*5ddc57e5SXin Li name="$func_basename_result" 9315*5ddc57e5SXin Li eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9316*5ddc57e5SXin Li test -z "$libdir" && \ 9317*5ddc57e5SXin Li func_fatal_error "\`$lib' is not a valid libtool archive" 9318*5ddc57e5SXin Li func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9319*5ddc57e5SXin Li ;; 9320*5ddc57e5SXin Li *) func_append newdlfiles " $lib" ;; 9321*5ddc57e5SXin Li esac 9322*5ddc57e5SXin Li done 9323*5ddc57e5SXin Li dlfiles="$newdlfiles" 9324*5ddc57e5SXin Li newdlprefiles= 9325*5ddc57e5SXin Li for lib in $dlprefiles; do 9326*5ddc57e5SXin Li case $lib in 9327*5ddc57e5SXin Li *.la) 9328*5ddc57e5SXin Li # Only pass preopened files to the pseudo-archive (for 9329*5ddc57e5SXin Li # eventual linking with the app. that links it) if we 9330*5ddc57e5SXin Li # didn't already link the preopened objects directly into 9331*5ddc57e5SXin Li # the library: 9332*5ddc57e5SXin Li func_basename "$lib" 9333*5ddc57e5SXin Li name="$func_basename_result" 9334*5ddc57e5SXin Li eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9335*5ddc57e5SXin Li test -z "$libdir" && \ 9336*5ddc57e5SXin Li func_fatal_error "\`$lib' is not a valid libtool archive" 9337*5ddc57e5SXin Li func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9338*5ddc57e5SXin Li ;; 9339*5ddc57e5SXin Li esac 9340*5ddc57e5SXin Li done 9341*5ddc57e5SXin Li dlprefiles="$newdlprefiles" 9342*5ddc57e5SXin Li else 9343*5ddc57e5SXin Li newdlfiles= 9344*5ddc57e5SXin Li for lib in $dlfiles; do 9345*5ddc57e5SXin Li case $lib in 9346*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9347*5ddc57e5SXin Li *) abs=`pwd`"/$lib" ;; 9348*5ddc57e5SXin Li esac 9349*5ddc57e5SXin Li func_append newdlfiles " $abs" 9350*5ddc57e5SXin Li done 9351*5ddc57e5SXin Li dlfiles="$newdlfiles" 9352*5ddc57e5SXin Li newdlprefiles= 9353*5ddc57e5SXin Li for lib in $dlprefiles; do 9354*5ddc57e5SXin Li case $lib in 9355*5ddc57e5SXin Li [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9356*5ddc57e5SXin Li *) abs=`pwd`"/$lib" ;; 9357*5ddc57e5SXin Li esac 9358*5ddc57e5SXin Li func_append newdlprefiles " $abs" 9359*5ddc57e5SXin Li done 9360*5ddc57e5SXin Li dlprefiles="$newdlprefiles" 9361*5ddc57e5SXin Li fi 9362*5ddc57e5SXin Li $RM $output 9363*5ddc57e5SXin Li # place dlname in correct position for cygwin 9364*5ddc57e5SXin Li # In fact, it would be nice if we could use this code for all target 9365*5ddc57e5SXin Li # systems that can't hard-code library paths into their executables 9366*5ddc57e5SXin Li # and that have no shared library path variable independent of PATH, 9367*5ddc57e5SXin Li # but it turns out we can't easily determine that from inspecting 9368*5ddc57e5SXin Li # libtool variables, so we have to hard-code the OSs to which it 9369*5ddc57e5SXin Li # applies here; at the moment, that means platforms that use the PE 9370*5ddc57e5SXin Li # object format with DLL files. See the long comment at the top of 9371*5ddc57e5SXin Li # tests/bindir.at for full details. 9372*5ddc57e5SXin Li tdlname=$dlname 9373*5ddc57e5SXin Li case $host,$output,$installed,$module,$dlname in 9374*5ddc57e5SXin Li *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 9375*5ddc57e5SXin Li # If a -bindir argument was supplied, place the dll there. 9376*5ddc57e5SXin Li if test "x$bindir" != x ; 9377*5ddc57e5SXin Li then 9378*5ddc57e5SXin Li func_relative_path "$install_libdir" "$bindir" 9379*5ddc57e5SXin Li tdlname=$func_relative_path_result$dlname 9380*5ddc57e5SXin Li else 9381*5ddc57e5SXin Li # Otherwise fall back on heuristic. 9382*5ddc57e5SXin Li tdlname=../bin/$dlname 9383*5ddc57e5SXin Li fi 9384*5ddc57e5SXin Li ;; 9385*5ddc57e5SXin Li esac 9386*5ddc57e5SXin Li $ECHO > $output "\ 9387*5ddc57e5SXin Li# $outputname - a libtool library file 9388*5ddc57e5SXin Li# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9389*5ddc57e5SXin Li# 9390*5ddc57e5SXin Li# Please DO NOT delete this file! 9391*5ddc57e5SXin Li# It is necessary for linking the library. 9392*5ddc57e5SXin Li 9393*5ddc57e5SXin Li# The name that we can dlopen(3). 9394*5ddc57e5SXin Lidlname='$tdlname' 9395*5ddc57e5SXin Li 9396*5ddc57e5SXin Li# Names of this library. 9397*5ddc57e5SXin Lilibrary_names='$library_names' 9398*5ddc57e5SXin Li 9399*5ddc57e5SXin Li# The name of the static archive. 9400*5ddc57e5SXin Liold_library='$old_library' 9401*5ddc57e5SXin Li 9402*5ddc57e5SXin Li# Linker flags that can not go in dependency_libs. 9403*5ddc57e5SXin Liinherited_linker_flags='$new_inherited_linker_flags' 9404*5ddc57e5SXin Li 9405*5ddc57e5SXin Li# Libraries that this one depends upon. 9406*5ddc57e5SXin Lidependency_libs='$dependency_libs' 9407*5ddc57e5SXin Li 9408*5ddc57e5SXin Li# Names of additional weak libraries provided by this library 9409*5ddc57e5SXin Liweak_library_names='$weak_libs' 9410*5ddc57e5SXin Li 9411*5ddc57e5SXin Li# Version information for $libname. 9412*5ddc57e5SXin Licurrent=$current 9413*5ddc57e5SXin Liage=$age 9414*5ddc57e5SXin Lirevision=$revision 9415*5ddc57e5SXin Li 9416*5ddc57e5SXin Li# Is this an already installed library? 9417*5ddc57e5SXin Liinstalled=$installed 9418*5ddc57e5SXin Li 9419*5ddc57e5SXin Li# Should we warn about portability when linking against -modules? 9420*5ddc57e5SXin Lishouldnotlink=$module 9421*5ddc57e5SXin Li 9422*5ddc57e5SXin Li# Files to dlopen/dlpreopen 9423*5ddc57e5SXin Lidlopen='$dlfiles' 9424*5ddc57e5SXin Lidlpreopen='$dlprefiles' 9425*5ddc57e5SXin Li 9426*5ddc57e5SXin Li# Directory that this library needs to be installed in: 9427*5ddc57e5SXin Lilibdir='$install_libdir'" 9428*5ddc57e5SXin Li if test "$installed" = no && test "$need_relink" = yes; then 9429*5ddc57e5SXin Li $ECHO >> $output "\ 9430*5ddc57e5SXin Lirelink_command=\"$relink_command\"" 9431*5ddc57e5SXin Li fi 9432*5ddc57e5SXin Li done 9433*5ddc57e5SXin Li } 9434*5ddc57e5SXin Li 9435*5ddc57e5SXin Li # Do a symbolic link so that the libtool archive can be found in 9436*5ddc57e5SXin Li # LD_LIBRARY_PATH before the program is installed. 9437*5ddc57e5SXin Li func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9438*5ddc57e5SXin Li ;; 9439*5ddc57e5SXin Li esac 9440*5ddc57e5SXin Li exit $EXIT_SUCCESS 9441*5ddc57e5SXin Li} 9442*5ddc57e5SXin Li 9443*5ddc57e5SXin Li{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9444*5ddc57e5SXin Li func_mode_link ${1+"$@"} 9445*5ddc57e5SXin Li 9446*5ddc57e5SXin Li 9447*5ddc57e5SXin Li# func_mode_uninstall arg... 9448*5ddc57e5SXin Lifunc_mode_uninstall () 9449*5ddc57e5SXin Li{ 9450*5ddc57e5SXin Li $opt_debug 9451*5ddc57e5SXin Li RM="$nonopt" 9452*5ddc57e5SXin Li files= 9453*5ddc57e5SXin Li rmforce= 9454*5ddc57e5SXin Li exit_status=0 9455*5ddc57e5SXin Li 9456*5ddc57e5SXin Li # This variable tells wrapper scripts just to set variables rather 9457*5ddc57e5SXin Li # than running their programs. 9458*5ddc57e5SXin Li libtool_install_magic="$magic" 9459*5ddc57e5SXin Li 9460*5ddc57e5SXin Li for arg 9461*5ddc57e5SXin Li do 9462*5ddc57e5SXin Li case $arg in 9463*5ddc57e5SXin Li -f) func_append RM " $arg"; rmforce=yes ;; 9464*5ddc57e5SXin Li -*) func_append RM " $arg" ;; 9465*5ddc57e5SXin Li *) func_append files " $arg" ;; 9466*5ddc57e5SXin Li esac 9467*5ddc57e5SXin Li done 9468*5ddc57e5SXin Li 9469*5ddc57e5SXin Li test -z "$RM" && \ 9470*5ddc57e5SXin Li func_fatal_help "you must specify an RM program" 9471*5ddc57e5SXin Li 9472*5ddc57e5SXin Li rmdirs= 9473*5ddc57e5SXin Li 9474*5ddc57e5SXin Li for file in $files; do 9475*5ddc57e5SXin Li func_dirname "$file" "" "." 9476*5ddc57e5SXin Li dir="$func_dirname_result" 9477*5ddc57e5SXin Li if test "X$dir" = X.; then 9478*5ddc57e5SXin Li odir="$objdir" 9479*5ddc57e5SXin Li else 9480*5ddc57e5SXin Li odir="$dir/$objdir" 9481*5ddc57e5SXin Li fi 9482*5ddc57e5SXin Li func_basename "$file" 9483*5ddc57e5SXin Li name="$func_basename_result" 9484*5ddc57e5SXin Li test "$opt_mode" = uninstall && odir="$dir" 9485*5ddc57e5SXin Li 9486*5ddc57e5SXin Li # Remember odir for removal later, being careful to avoid duplicates 9487*5ddc57e5SXin Li if test "$opt_mode" = clean; then 9488*5ddc57e5SXin Li case " $rmdirs " in 9489*5ddc57e5SXin Li *" $odir "*) ;; 9490*5ddc57e5SXin Li *) func_append rmdirs " $odir" ;; 9491*5ddc57e5SXin Li esac 9492*5ddc57e5SXin Li fi 9493*5ddc57e5SXin Li 9494*5ddc57e5SXin Li # Don't error if the file doesn't exist and rm -f was used. 9495*5ddc57e5SXin Li if { test -L "$file"; } >/dev/null 2>&1 || 9496*5ddc57e5SXin Li { test -h "$file"; } >/dev/null 2>&1 || 9497*5ddc57e5SXin Li test -f "$file"; then 9498*5ddc57e5SXin Li : 9499*5ddc57e5SXin Li elif test -d "$file"; then 9500*5ddc57e5SXin Li exit_status=1 9501*5ddc57e5SXin Li continue 9502*5ddc57e5SXin Li elif test "$rmforce" = yes; then 9503*5ddc57e5SXin Li continue 9504*5ddc57e5SXin Li fi 9505*5ddc57e5SXin Li 9506*5ddc57e5SXin Li rmfiles="$file" 9507*5ddc57e5SXin Li 9508*5ddc57e5SXin Li case $name in 9509*5ddc57e5SXin Li *.la) 9510*5ddc57e5SXin Li # Possibly a libtool archive, so verify it. 9511*5ddc57e5SXin Li if func_lalib_p "$file"; then 9512*5ddc57e5SXin Li func_source $dir/$name 9513*5ddc57e5SXin Li 9514*5ddc57e5SXin Li # Delete the libtool libraries and symlinks. 9515*5ddc57e5SXin Li for n in $library_names; do 9516*5ddc57e5SXin Li func_append rmfiles " $odir/$n" 9517*5ddc57e5SXin Li done 9518*5ddc57e5SXin Li test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9519*5ddc57e5SXin Li 9520*5ddc57e5SXin Li case "$opt_mode" in 9521*5ddc57e5SXin Li clean) 9522*5ddc57e5SXin Li case " $library_names " in 9523*5ddc57e5SXin Li *" $dlname "*) ;; 9524*5ddc57e5SXin Li *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9525*5ddc57e5SXin Li esac 9526*5ddc57e5SXin Li test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9527*5ddc57e5SXin Li ;; 9528*5ddc57e5SXin Li uninstall) 9529*5ddc57e5SXin Li if test -n "$library_names"; then 9530*5ddc57e5SXin Li # Do each command in the postuninstall commands. 9531*5ddc57e5SXin Li func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9532*5ddc57e5SXin Li fi 9533*5ddc57e5SXin Li 9534*5ddc57e5SXin Li if test -n "$old_library"; then 9535*5ddc57e5SXin Li # Do each command in the old_postuninstall commands. 9536*5ddc57e5SXin Li func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9537*5ddc57e5SXin Li fi 9538*5ddc57e5SXin Li # FIXME: should reinstall the best remaining shared library. 9539*5ddc57e5SXin Li ;; 9540*5ddc57e5SXin Li esac 9541*5ddc57e5SXin Li fi 9542*5ddc57e5SXin Li ;; 9543*5ddc57e5SXin Li 9544*5ddc57e5SXin Li *.lo) 9545*5ddc57e5SXin Li # Possibly a libtool object, so verify it. 9546*5ddc57e5SXin Li if func_lalib_p "$file"; then 9547*5ddc57e5SXin Li 9548*5ddc57e5SXin Li # Read the .lo file 9549*5ddc57e5SXin Li func_source $dir/$name 9550*5ddc57e5SXin Li 9551*5ddc57e5SXin Li # Add PIC object to the list of files to remove. 9552*5ddc57e5SXin Li if test -n "$pic_object" && 9553*5ddc57e5SXin Li test "$pic_object" != none; then 9554*5ddc57e5SXin Li func_append rmfiles " $dir/$pic_object" 9555*5ddc57e5SXin Li fi 9556*5ddc57e5SXin Li 9557*5ddc57e5SXin Li # Add non-PIC object to the list of files to remove. 9558*5ddc57e5SXin Li if test -n "$non_pic_object" && 9559*5ddc57e5SXin Li test "$non_pic_object" != none; then 9560*5ddc57e5SXin Li func_append rmfiles " $dir/$non_pic_object" 9561*5ddc57e5SXin Li fi 9562*5ddc57e5SXin Li fi 9563*5ddc57e5SXin Li ;; 9564*5ddc57e5SXin Li 9565*5ddc57e5SXin Li *) 9566*5ddc57e5SXin Li if test "$opt_mode" = clean ; then 9567*5ddc57e5SXin Li noexename=$name 9568*5ddc57e5SXin Li case $file in 9569*5ddc57e5SXin Li *.exe) 9570*5ddc57e5SXin Li func_stripname '' '.exe' "$file" 9571*5ddc57e5SXin Li file=$func_stripname_result 9572*5ddc57e5SXin Li func_stripname '' '.exe' "$name" 9573*5ddc57e5SXin Li noexename=$func_stripname_result 9574*5ddc57e5SXin Li # $file with .exe has already been added to rmfiles, 9575*5ddc57e5SXin Li # add $file without .exe 9576*5ddc57e5SXin Li func_append rmfiles " $file" 9577*5ddc57e5SXin Li ;; 9578*5ddc57e5SXin Li esac 9579*5ddc57e5SXin Li # Do a test to see if this is a libtool program. 9580*5ddc57e5SXin Li if func_ltwrapper_p "$file"; then 9581*5ddc57e5SXin Li if func_ltwrapper_executable_p "$file"; then 9582*5ddc57e5SXin Li func_ltwrapper_scriptname "$file" 9583*5ddc57e5SXin Li relink_command= 9584*5ddc57e5SXin Li func_source $func_ltwrapper_scriptname_result 9585*5ddc57e5SXin Li func_append rmfiles " $func_ltwrapper_scriptname_result" 9586*5ddc57e5SXin Li else 9587*5ddc57e5SXin Li relink_command= 9588*5ddc57e5SXin Li func_source $dir/$noexename 9589*5ddc57e5SXin Li fi 9590*5ddc57e5SXin Li 9591*5ddc57e5SXin Li # note $name still contains .exe if it was in $file originally 9592*5ddc57e5SXin Li # as does the version of $file that was added into $rmfiles 9593*5ddc57e5SXin Li func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9594*5ddc57e5SXin Li if test "$fast_install" = yes && test -n "$relink_command"; then 9595*5ddc57e5SXin Li func_append rmfiles " $odir/lt-$name" 9596*5ddc57e5SXin Li fi 9597*5ddc57e5SXin Li if test "X$noexename" != "X$name" ; then 9598*5ddc57e5SXin Li func_append rmfiles " $odir/lt-${noexename}.c" 9599*5ddc57e5SXin Li fi 9600*5ddc57e5SXin Li fi 9601*5ddc57e5SXin Li fi 9602*5ddc57e5SXin Li ;; 9603*5ddc57e5SXin Li esac 9604*5ddc57e5SXin Li func_show_eval "$RM $rmfiles" 'exit_status=1' 9605*5ddc57e5SXin Li done 9606*5ddc57e5SXin Li 9607*5ddc57e5SXin Li # Try to remove the ${objdir}s in the directories where we deleted files 9608*5ddc57e5SXin Li for dir in $rmdirs; do 9609*5ddc57e5SXin Li if test -d "$dir"; then 9610*5ddc57e5SXin Li func_show_eval "rmdir $dir >/dev/null 2>&1" 9611*5ddc57e5SXin Li fi 9612*5ddc57e5SXin Li done 9613*5ddc57e5SXin Li 9614*5ddc57e5SXin Li exit $exit_status 9615*5ddc57e5SXin Li} 9616*5ddc57e5SXin Li 9617*5ddc57e5SXin Li{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9618*5ddc57e5SXin Li func_mode_uninstall ${1+"$@"} 9619*5ddc57e5SXin Li 9620*5ddc57e5SXin Litest -z "$opt_mode" && { 9621*5ddc57e5SXin Li help="$generic_help" 9622*5ddc57e5SXin Li func_fatal_help "you must specify a MODE" 9623*5ddc57e5SXin Li} 9624*5ddc57e5SXin Li 9625*5ddc57e5SXin Litest -z "$exec_cmd" && \ 9626*5ddc57e5SXin Li func_fatal_help "invalid operation mode \`$opt_mode'" 9627*5ddc57e5SXin Li 9628*5ddc57e5SXin Liif test -n "$exec_cmd"; then 9629*5ddc57e5SXin Li eval exec "$exec_cmd" 9630*5ddc57e5SXin Li exit $EXIT_FAILURE 9631*5ddc57e5SXin Lifi 9632*5ddc57e5SXin Li 9633*5ddc57e5SXin Liexit $exit_status 9634*5ddc57e5SXin Li 9635*5ddc57e5SXin Li 9636*5ddc57e5SXin Li# The TAGs below are defined such that we never get into a situation 9637*5ddc57e5SXin Li# in which we disable both kinds of libraries. Given conflicting 9638*5ddc57e5SXin Li# choices, we go for a static library, that is the most portable, 9639*5ddc57e5SXin Li# since we can't tell whether shared libraries were disabled because 9640*5ddc57e5SXin Li# the user asked for that or because the platform doesn't support 9641*5ddc57e5SXin Li# them. This is particularly important on AIX, because we don't 9642*5ddc57e5SXin Li# support having both static and shared libraries enabled at the same 9643*5ddc57e5SXin Li# time on that platform, so we default to a shared-only configuration. 9644*5ddc57e5SXin Li# If a disable-shared tag is given, we'll fallback to a static-only 9645*5ddc57e5SXin Li# configuration. But we'll never go from static-only to shared-only. 9646*5ddc57e5SXin Li 9647*5ddc57e5SXin Li# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9648*5ddc57e5SXin Libuild_libtool_libs=no 9649*5ddc57e5SXin Libuild_old_libs=yes 9650*5ddc57e5SXin Li# ### END LIBTOOL TAG CONFIG: disable-shared 9651*5ddc57e5SXin Li 9652*5ddc57e5SXin Li# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9653*5ddc57e5SXin Libuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9654*5ddc57e5SXin Li# ### END LIBTOOL TAG CONFIG: disable-static 9655*5ddc57e5SXin Li 9656*5ddc57e5SXin Li# Local Variables: 9657*5ddc57e5SXin Li# mode:shell-script 9658*5ddc57e5SXin Li# sh-indentation:2 9659*5ddc57e5SXin Li# End: 9660*5ddc57e5SXin Li# vi:sw=2 9661*5ddc57e5SXin Li 9662