1*2e9d4914SAndroid Build Coastguard Worker 2*2e9d4914SAndroid Build Coastguard Worker# libtool (GNU libtool) 2.4.2 3*2e9d4914SAndroid Build Coastguard Worker# Written by Gordon Matzigkeit <[email protected]>, 1996 4*2e9d4914SAndroid Build Coastguard Worker 5*2e9d4914SAndroid Build Coastguard Worker# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 6*2e9d4914SAndroid Build Coastguard Worker# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7*2e9d4914SAndroid Build Coastguard Worker# This is free software; see the source for copying conditions. There is NO 8*2e9d4914SAndroid Build Coastguard Worker# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9*2e9d4914SAndroid Build Coastguard Worker 10*2e9d4914SAndroid Build Coastguard Worker# GNU Libtool is free software; you can redistribute it and/or modify 11*2e9d4914SAndroid Build Coastguard Worker# it under the terms of the GNU General Public License as published by 12*2e9d4914SAndroid Build Coastguard Worker# the Free Software Foundation; either version 2 of the License, or 13*2e9d4914SAndroid Build Coastguard Worker# (at your option) any later version. 14*2e9d4914SAndroid Build Coastguard Worker# 15*2e9d4914SAndroid Build Coastguard Worker# As a special exception to the GNU General Public License, 16*2e9d4914SAndroid Build Coastguard Worker# if you distribute this file as part of a program or library that 17*2e9d4914SAndroid Build Coastguard Worker# is built using GNU Libtool, you may include this file under the 18*2e9d4914SAndroid Build Coastguard Worker# same distribution terms that you use for the rest of that program. 19*2e9d4914SAndroid Build Coastguard Worker# 20*2e9d4914SAndroid Build Coastguard Worker# GNU Libtool is distributed in the hope that it will be useful, but 21*2e9d4914SAndroid Build Coastguard Worker# WITHOUT ANY WARRANTY; without even the implied warranty of 22*2e9d4914SAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23*2e9d4914SAndroid Build Coastguard Worker# General Public License for more details. 24*2e9d4914SAndroid Build Coastguard Worker# 25*2e9d4914SAndroid Build Coastguard Worker# You should have received a copy of the GNU General Public License 26*2e9d4914SAndroid Build Coastguard Worker# along with GNU Libtool; see the file COPYING. If not, a copy 27*2e9d4914SAndroid Build Coastguard Worker# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28*2e9d4914SAndroid Build Coastguard Worker# or obtained by writing to the Free Software Foundation, Inc., 29*2e9d4914SAndroid Build Coastguard Worker# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30*2e9d4914SAndroid Build Coastguard Worker 31*2e9d4914SAndroid Build Coastguard Worker# Usage: $progname [OPTION]... [MODE-ARG]... 32*2e9d4914SAndroid Build Coastguard Worker# 33*2e9d4914SAndroid Build Coastguard Worker# Provide generalized library-building support services. 34*2e9d4914SAndroid Build Coastguard Worker# 35*2e9d4914SAndroid Build Coastguard Worker# --config show all configuration variables 36*2e9d4914SAndroid Build Coastguard Worker# --debug enable verbose shell tracing 37*2e9d4914SAndroid Build Coastguard Worker# -n, --dry-run display commands without modifying any files 38*2e9d4914SAndroid Build Coastguard Worker# --features display basic configuration information and exit 39*2e9d4914SAndroid Build Coastguard Worker# --mode=MODE use operation mode MODE 40*2e9d4914SAndroid Build Coastguard Worker# --preserve-dup-deps don't remove duplicate dependency libraries 41*2e9d4914SAndroid Build Coastguard Worker# --quiet, --silent don't print informational messages 42*2e9d4914SAndroid Build Coastguard Worker# --no-quiet, --no-silent 43*2e9d4914SAndroid Build Coastguard Worker# print informational messages (default) 44*2e9d4914SAndroid Build Coastguard Worker# --no-warn don't display warning messages 45*2e9d4914SAndroid Build Coastguard Worker# --tag=TAG use configuration variables from tag TAG 46*2e9d4914SAndroid Build Coastguard Worker# -v, --verbose print more informational messages than default 47*2e9d4914SAndroid Build Coastguard Worker# --no-verbose don't print the extra informational messages 48*2e9d4914SAndroid Build Coastguard Worker# --version print version information 49*2e9d4914SAndroid Build Coastguard Worker# -h, --help, --help-all print short, long, or detailed help message 50*2e9d4914SAndroid Build Coastguard Worker# 51*2e9d4914SAndroid Build Coastguard Worker# MODE must be one of the following: 52*2e9d4914SAndroid Build Coastguard Worker# 53*2e9d4914SAndroid Build Coastguard Worker# clean remove files from the build directory 54*2e9d4914SAndroid Build Coastguard Worker# compile compile a source file into a libtool object 55*2e9d4914SAndroid Build Coastguard Worker# execute automatically set library path, then run a program 56*2e9d4914SAndroid Build Coastguard Worker# finish complete the installation of libtool libraries 57*2e9d4914SAndroid Build Coastguard Worker# install install libraries or executables 58*2e9d4914SAndroid Build Coastguard Worker# link create a library or an executable 59*2e9d4914SAndroid Build Coastguard Worker# uninstall remove libraries from an installed directory 60*2e9d4914SAndroid Build Coastguard Worker# 61*2e9d4914SAndroid Build Coastguard Worker# MODE-ARGS vary depending on the MODE. When passed as first option, 62*2e9d4914SAndroid Build Coastguard Worker# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63*2e9d4914SAndroid Build Coastguard Worker# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64*2e9d4914SAndroid Build Coastguard Worker# 65*2e9d4914SAndroid Build Coastguard Worker# When reporting a bug, please describe a test case to reproduce it and 66*2e9d4914SAndroid Build Coastguard Worker# include the following information: 67*2e9d4914SAndroid Build Coastguard Worker# 68*2e9d4914SAndroid Build Coastguard Worker# host-triplet: $host 69*2e9d4914SAndroid Build Coastguard Worker# shell: $SHELL 70*2e9d4914SAndroid Build Coastguard Worker# compiler: $LTCC 71*2e9d4914SAndroid Build Coastguard Worker# compiler flags: $LTCFLAGS 72*2e9d4914SAndroid Build Coastguard Worker# linker: $LD (gnu? $with_gnu_ld) 73*2e9d4914SAndroid Build Coastguard Worker# $progname: (GNU libtool) 2.4.2 74*2e9d4914SAndroid Build Coastguard Worker# automake: $automake_version 75*2e9d4914SAndroid Build Coastguard Worker# autoconf: $autoconf_version 76*2e9d4914SAndroid Build Coastguard Worker# 77*2e9d4914SAndroid Build Coastguard Worker# Report bugs to <[email protected]>. 78*2e9d4914SAndroid Build Coastguard Worker# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 79*2e9d4914SAndroid Build Coastguard Worker# General help using GNU software: <http://www.gnu.org/gethelp/>. 80*2e9d4914SAndroid Build Coastguard Worker 81*2e9d4914SAndroid Build Coastguard WorkerPROGRAM=libtool 82*2e9d4914SAndroid Build Coastguard WorkerPACKAGE=libtool 83*2e9d4914SAndroid Build Coastguard WorkerVERSION=2.4.2 84*2e9d4914SAndroid Build Coastguard WorkerTIMESTAMP="" 85*2e9d4914SAndroid Build Coastguard Workerpackage_revision=1.3337 86*2e9d4914SAndroid Build Coastguard Worker 87*2e9d4914SAndroid Build Coastguard Worker# Be Bourne compatible 88*2e9d4914SAndroid Build Coastguard Workerif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 89*2e9d4914SAndroid Build Coastguard Worker emulate sh 90*2e9d4914SAndroid Build Coastguard Worker NULLCMD=: 91*2e9d4914SAndroid Build Coastguard Worker # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 92*2e9d4914SAndroid Build Coastguard Worker # is contrary to our usage. Disable this feature. 93*2e9d4914SAndroid Build Coastguard Worker alias -g '${1+"$@"}'='"$@"' 94*2e9d4914SAndroid Build Coastguard Worker setopt NO_GLOB_SUBST 95*2e9d4914SAndroid Build Coastguard Workerelse 96*2e9d4914SAndroid Build Coastguard Worker case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 97*2e9d4914SAndroid Build Coastguard Workerfi 98*2e9d4914SAndroid Build Coastguard WorkerBIN_SH=xpg4; export BIN_SH # for Tru64 99*2e9d4914SAndroid Build Coastguard WorkerDUALCASE=1; export DUALCASE # for MKS sh 100*2e9d4914SAndroid Build Coastguard Worker 101*2e9d4914SAndroid Build Coastguard Worker# A function that is used when there is no print builtin or printf. 102*2e9d4914SAndroid Build Coastguard Workerfunc_fallback_echo () 103*2e9d4914SAndroid Build Coastguard Worker{ 104*2e9d4914SAndroid Build Coastguard Worker eval 'cat <<_LTECHO_EOF 105*2e9d4914SAndroid Build Coastguard Worker$1 106*2e9d4914SAndroid Build Coastguard Worker_LTECHO_EOF' 107*2e9d4914SAndroid Build Coastguard Worker} 108*2e9d4914SAndroid Build Coastguard Worker 109*2e9d4914SAndroid Build Coastguard Worker# NLS nuisances: We save the old values to restore during execute mode. 110*2e9d4914SAndroid Build Coastguard Workerlt_user_locale= 111*2e9d4914SAndroid Build Coastguard Workerlt_safe_locale= 112*2e9d4914SAndroid Build Coastguard Workerfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 113*2e9d4914SAndroid Build Coastguard Workerdo 114*2e9d4914SAndroid Build Coastguard Worker eval "if test \"\${$lt_var+set}\" = set; then 115*2e9d4914SAndroid Build Coastguard Worker save_$lt_var=\$$lt_var 116*2e9d4914SAndroid Build Coastguard Worker $lt_var=C 117*2e9d4914SAndroid Build Coastguard Worker export $lt_var 118*2e9d4914SAndroid Build Coastguard Worker lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 119*2e9d4914SAndroid Build Coastguard Worker lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 120*2e9d4914SAndroid Build Coastguard Worker fi" 121*2e9d4914SAndroid Build Coastguard Workerdone 122*2e9d4914SAndroid Build Coastguard WorkerLC_ALL=C 123*2e9d4914SAndroid Build Coastguard WorkerLANGUAGE=C 124*2e9d4914SAndroid Build Coastguard Workerexport LANGUAGE LC_ALL 125*2e9d4914SAndroid Build Coastguard Worker 126*2e9d4914SAndroid Build Coastguard Worker$lt_unset CDPATH 127*2e9d4914SAndroid Build Coastguard Worker 128*2e9d4914SAndroid Build Coastguard Worker 129*2e9d4914SAndroid Build Coastguard Worker# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 130*2e9d4914SAndroid Build Coastguard Worker# is ksh but when the shell is invoked as "sh" and the current value of 131*2e9d4914SAndroid Build Coastguard Worker# the _XPG environment variable is not equal to 1 (one), the special 132*2e9d4914SAndroid Build Coastguard Worker# positional parameter $0, within a function call, is the name of the 133*2e9d4914SAndroid Build Coastguard Worker# function. 134*2e9d4914SAndroid Build Coastguard Workerprogpath="$0" 135*2e9d4914SAndroid Build Coastguard Worker 136*2e9d4914SAndroid Build Coastguard Worker 137*2e9d4914SAndroid Build Coastguard Worker 138*2e9d4914SAndroid Build Coastguard Worker: ${CP="cp -f"} 139*2e9d4914SAndroid Build Coastguard Workertest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140*2e9d4914SAndroid Build Coastguard Worker: ${MAKE="make"} 141*2e9d4914SAndroid Build Coastguard Worker: ${MKDIR="mkdir"} 142*2e9d4914SAndroid Build Coastguard Worker: ${MV="mv -f"} 143*2e9d4914SAndroid Build Coastguard Worker: ${RM="rm -f"} 144*2e9d4914SAndroid Build Coastguard Worker: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 145*2e9d4914SAndroid Build Coastguard Worker: ${Xsed="$SED -e 1s/^X//"} 146*2e9d4914SAndroid Build Coastguard Worker 147*2e9d4914SAndroid Build Coastguard Worker# Global variables: 148*2e9d4914SAndroid Build Coastguard WorkerEXIT_SUCCESS=0 149*2e9d4914SAndroid Build Coastguard WorkerEXIT_FAILURE=1 150*2e9d4914SAndroid Build Coastguard WorkerEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 151*2e9d4914SAndroid Build Coastguard WorkerEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152*2e9d4914SAndroid Build Coastguard Worker 153*2e9d4914SAndroid Build Coastguard Workerexit_status=$EXIT_SUCCESS 154*2e9d4914SAndroid Build Coastguard Worker 155*2e9d4914SAndroid Build Coastguard Worker# Make sure IFS has a sensible default 156*2e9d4914SAndroid Build Coastguard Workerlt_nl=' 157*2e9d4914SAndroid Build Coastguard Worker' 158*2e9d4914SAndroid Build Coastguard WorkerIFS=" $lt_nl" 159*2e9d4914SAndroid Build Coastguard Worker 160*2e9d4914SAndroid Build Coastguard Workerdirname="s,/[^/]*$,," 161*2e9d4914SAndroid Build Coastguard Workerbasename="s,^.*/,," 162*2e9d4914SAndroid Build Coastguard Worker 163*2e9d4914SAndroid Build Coastguard Worker# func_dirname file append nondir_replacement 164*2e9d4914SAndroid Build Coastguard Worker# Compute the dirname of FILE. If nonempty, add APPEND to the result, 165*2e9d4914SAndroid Build Coastguard Worker# otherwise set result to NONDIR_REPLACEMENT. 166*2e9d4914SAndroid Build Coastguard Workerfunc_dirname () 167*2e9d4914SAndroid Build Coastguard Worker{ 168*2e9d4914SAndroid Build Coastguard Worker func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 169*2e9d4914SAndroid Build Coastguard Worker if test "X$func_dirname_result" = "X${1}"; then 170*2e9d4914SAndroid Build Coastguard Worker func_dirname_result="${3}" 171*2e9d4914SAndroid Build Coastguard Worker else 172*2e9d4914SAndroid Build Coastguard Worker func_dirname_result="$func_dirname_result${2}" 173*2e9d4914SAndroid Build Coastguard Worker fi 174*2e9d4914SAndroid Build Coastguard Worker} # func_dirname may be replaced by extended shell implementation 175*2e9d4914SAndroid Build Coastguard Worker 176*2e9d4914SAndroid Build Coastguard Worker 177*2e9d4914SAndroid Build Coastguard Worker# func_basename file 178*2e9d4914SAndroid Build Coastguard Workerfunc_basename () 179*2e9d4914SAndroid Build Coastguard Worker{ 180*2e9d4914SAndroid Build Coastguard Worker func_basename_result=`$ECHO "${1}" | $SED "$basename"` 181*2e9d4914SAndroid Build Coastguard Worker} # func_basename may be replaced by extended shell implementation 182*2e9d4914SAndroid Build Coastguard Worker 183*2e9d4914SAndroid Build Coastguard Worker 184*2e9d4914SAndroid Build Coastguard Worker# func_dirname_and_basename file append nondir_replacement 185*2e9d4914SAndroid Build Coastguard Worker# perform func_basename and func_dirname in a single function 186*2e9d4914SAndroid Build Coastguard Worker# call: 187*2e9d4914SAndroid Build Coastguard Worker# dirname: Compute the dirname of FILE. If nonempty, 188*2e9d4914SAndroid Build Coastguard Worker# add APPEND to the result, otherwise set result 189*2e9d4914SAndroid Build Coastguard Worker# to NONDIR_REPLACEMENT. 190*2e9d4914SAndroid Build Coastguard Worker# value returned in "$func_dirname_result" 191*2e9d4914SAndroid Build Coastguard Worker# basename: Compute filename of FILE. 192*2e9d4914SAndroid Build Coastguard Worker# value retuned in "$func_basename_result" 193*2e9d4914SAndroid Build Coastguard Worker# Implementation must be kept synchronized with func_dirname 194*2e9d4914SAndroid Build Coastguard Worker# and func_basename. For efficiency, we do not delegate to 195*2e9d4914SAndroid Build Coastguard Worker# those functions but instead duplicate the functionality here. 196*2e9d4914SAndroid Build Coastguard Workerfunc_dirname_and_basename () 197*2e9d4914SAndroid Build Coastguard Worker{ 198*2e9d4914SAndroid Build Coastguard Worker # Extract subdirectory from the argument. 199*2e9d4914SAndroid Build Coastguard Worker func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 200*2e9d4914SAndroid Build Coastguard Worker if test "X$func_dirname_result" = "X${1}"; then 201*2e9d4914SAndroid Build Coastguard Worker func_dirname_result="${3}" 202*2e9d4914SAndroid Build Coastguard Worker else 203*2e9d4914SAndroid Build Coastguard Worker func_dirname_result="$func_dirname_result${2}" 204*2e9d4914SAndroid Build Coastguard Worker fi 205*2e9d4914SAndroid Build Coastguard Worker func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 206*2e9d4914SAndroid Build Coastguard Worker} # func_dirname_and_basename may be replaced by extended shell implementation 207*2e9d4914SAndroid Build Coastguard Worker 208*2e9d4914SAndroid Build Coastguard Worker 209*2e9d4914SAndroid Build Coastguard Worker# func_stripname prefix suffix name 210*2e9d4914SAndroid Build Coastguard Worker# strip PREFIX and SUFFIX off of NAME. 211*2e9d4914SAndroid Build Coastguard Worker# PREFIX and SUFFIX must not contain globbing or regex special 212*2e9d4914SAndroid Build Coastguard Worker# characters, hashes, percent signs, but SUFFIX may contain a leading 213*2e9d4914SAndroid Build Coastguard Worker# dot (in which case that matches only a dot). 214*2e9d4914SAndroid Build Coastguard Worker# func_strip_suffix prefix name 215*2e9d4914SAndroid Build Coastguard Workerfunc_stripname () 216*2e9d4914SAndroid Build Coastguard Worker{ 217*2e9d4914SAndroid Build Coastguard Worker case ${2} in 218*2e9d4914SAndroid Build Coastguard Worker .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 219*2e9d4914SAndroid Build Coastguard Worker *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 220*2e9d4914SAndroid Build Coastguard Worker esac 221*2e9d4914SAndroid Build Coastguard Worker} # func_stripname may be replaced by extended shell implementation 222*2e9d4914SAndroid Build Coastguard Worker 223*2e9d4914SAndroid Build Coastguard Worker 224*2e9d4914SAndroid Build Coastguard Worker# These SED scripts presuppose an absolute path with a trailing slash. 225*2e9d4914SAndroid Build Coastguard Workerpathcar='s,^/\([^/]*\).*$,\1,' 226*2e9d4914SAndroid Build Coastguard Workerpathcdr='s,^/[^/]*,,' 227*2e9d4914SAndroid Build Coastguard Workerremovedotparts=':dotsl 228*2e9d4914SAndroid Build Coastguard Worker s@/\./@/@g 229*2e9d4914SAndroid Build Coastguard Worker t dotsl 230*2e9d4914SAndroid Build Coastguard Worker s,/\.$,/,' 231*2e9d4914SAndroid Build Coastguard Workercollapseslashes='s@/\{1,\}@/@g' 232*2e9d4914SAndroid Build Coastguard Workerfinalslash='s,/*$,/,' 233*2e9d4914SAndroid Build Coastguard Worker 234*2e9d4914SAndroid Build Coastguard Worker# func_normal_abspath PATH 235*2e9d4914SAndroid Build Coastguard Worker# Remove doubled-up and trailing slashes, "." path components, 236*2e9d4914SAndroid Build Coastguard Worker# and cancel out any ".." path components in PATH after making 237*2e9d4914SAndroid Build Coastguard Worker# it an absolute path. 238*2e9d4914SAndroid Build Coastguard Worker# value returned in "$func_normal_abspath_result" 239*2e9d4914SAndroid Build Coastguard Workerfunc_normal_abspath () 240*2e9d4914SAndroid Build Coastguard Worker{ 241*2e9d4914SAndroid Build Coastguard Worker # Start from root dir and reassemble the path. 242*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_result= 243*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_tpath=$1 244*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_altnamespace= 245*2e9d4914SAndroid Build Coastguard Worker case $func_normal_abspath_tpath in 246*2e9d4914SAndroid Build Coastguard Worker "") 247*2e9d4914SAndroid Build Coastguard Worker # Empty path, that just means $cwd. 248*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '/' "`pwd`" 249*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_result=$func_stripname_result 250*2e9d4914SAndroid Build Coastguard Worker return 251*2e9d4914SAndroid Build Coastguard Worker ;; 252*2e9d4914SAndroid Build Coastguard Worker # The next three entries are used to spot a run of precisely 253*2e9d4914SAndroid Build Coastguard Worker # two leading slashes without using negated character classes; 254*2e9d4914SAndroid Build Coastguard Worker # we take advantage of case's first-match behaviour. 255*2e9d4914SAndroid Build Coastguard Worker ///*) 256*2e9d4914SAndroid Build Coastguard Worker # Unusual form of absolute path, do nothing. 257*2e9d4914SAndroid Build Coastguard Worker ;; 258*2e9d4914SAndroid Build Coastguard Worker //*) 259*2e9d4914SAndroid Build Coastguard Worker # Not necessarily an ordinary path; POSIX reserves leading '//' 260*2e9d4914SAndroid Build Coastguard Worker # and for example Cygwin uses it to access remote file shares 261*2e9d4914SAndroid Build Coastguard Worker # over CIFS/SMB, so we conserve a leading double slash if found. 262*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_altnamespace=/ 263*2e9d4914SAndroid Build Coastguard Worker ;; 264*2e9d4914SAndroid Build Coastguard Worker /*) 265*2e9d4914SAndroid Build Coastguard Worker # Absolute path, do nothing. 266*2e9d4914SAndroid Build Coastguard Worker ;; 267*2e9d4914SAndroid Build Coastguard Worker *) 268*2e9d4914SAndroid Build Coastguard Worker # Relative path, prepend $cwd. 269*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 270*2e9d4914SAndroid Build Coastguard Worker ;; 271*2e9d4914SAndroid Build Coastguard Worker esac 272*2e9d4914SAndroid Build Coastguard Worker # Cancel out all the simple stuff to save iterations. We also want 273*2e9d4914SAndroid Build Coastguard Worker # the path to end with a slash for ease of parsing, so make sure 274*2e9d4914SAndroid Build Coastguard Worker # there is one (and only one) here. 275*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 276*2e9d4914SAndroid Build Coastguard Worker -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 277*2e9d4914SAndroid Build Coastguard Worker while :; do 278*2e9d4914SAndroid Build Coastguard Worker # Processed it all yet? 279*2e9d4914SAndroid Build Coastguard Worker if test "$func_normal_abspath_tpath" = / ; then 280*2e9d4914SAndroid Build Coastguard Worker # If we ascended to the root using ".." the result may be empty now. 281*2e9d4914SAndroid Build Coastguard Worker if test -z "$func_normal_abspath_result" ; then 282*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_result=/ 283*2e9d4914SAndroid Build Coastguard Worker fi 284*2e9d4914SAndroid Build Coastguard Worker break 285*2e9d4914SAndroid Build Coastguard Worker fi 286*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 287*2e9d4914SAndroid Build Coastguard Worker -e "$pathcar"` 288*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 289*2e9d4914SAndroid Build Coastguard Worker -e "$pathcdr"` 290*2e9d4914SAndroid Build Coastguard Worker # Figure out what to do with it 291*2e9d4914SAndroid Build Coastguard Worker case $func_normal_abspath_tcomponent in 292*2e9d4914SAndroid Build Coastguard Worker "") 293*2e9d4914SAndroid Build Coastguard Worker # Trailing empty path component, ignore it. 294*2e9d4914SAndroid Build Coastguard Worker ;; 295*2e9d4914SAndroid Build Coastguard Worker ..) 296*2e9d4914SAndroid Build Coastguard Worker # Parent dir; strip last assembled component from result. 297*2e9d4914SAndroid Build Coastguard Worker func_dirname "$func_normal_abspath_result" 298*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_result=$func_dirname_result 299*2e9d4914SAndroid Build Coastguard Worker ;; 300*2e9d4914SAndroid Build Coastguard Worker *) 301*2e9d4914SAndroid Build Coastguard Worker # Actual path component, append it. 302*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 303*2e9d4914SAndroid Build Coastguard Worker ;; 304*2e9d4914SAndroid Build Coastguard Worker esac 305*2e9d4914SAndroid Build Coastguard Worker done 306*2e9d4914SAndroid Build Coastguard Worker # Restore leading double-slash if one was found on entry. 307*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 308*2e9d4914SAndroid Build Coastguard Worker} 309*2e9d4914SAndroid Build Coastguard Worker 310*2e9d4914SAndroid Build Coastguard Worker# func_relative_path SRCDIR DSTDIR 311*2e9d4914SAndroid Build Coastguard Worker# generates a relative path from SRCDIR to DSTDIR, with a trailing 312*2e9d4914SAndroid Build Coastguard Worker# slash if non-empty, suitable for immediately appending a filename 313*2e9d4914SAndroid Build Coastguard Worker# without needing to append a separator. 314*2e9d4914SAndroid Build Coastguard Worker# value returned in "$func_relative_path_result" 315*2e9d4914SAndroid Build Coastguard Workerfunc_relative_path () 316*2e9d4914SAndroid Build Coastguard Worker{ 317*2e9d4914SAndroid Build Coastguard Worker func_relative_path_result= 318*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath "$1" 319*2e9d4914SAndroid Build Coastguard Worker func_relative_path_tlibdir=$func_normal_abspath_result 320*2e9d4914SAndroid Build Coastguard Worker func_normal_abspath "$2" 321*2e9d4914SAndroid Build Coastguard Worker func_relative_path_tbindir=$func_normal_abspath_result 322*2e9d4914SAndroid Build Coastguard Worker 323*2e9d4914SAndroid Build Coastguard Worker # Ascend the tree starting from libdir 324*2e9d4914SAndroid Build Coastguard Worker while :; do 325*2e9d4914SAndroid Build Coastguard Worker # check if we have found a prefix of bindir 326*2e9d4914SAndroid Build Coastguard Worker case $func_relative_path_tbindir in 327*2e9d4914SAndroid Build Coastguard Worker $func_relative_path_tlibdir) 328*2e9d4914SAndroid Build Coastguard Worker # found an exact match 329*2e9d4914SAndroid Build Coastguard Worker func_relative_path_tcancelled= 330*2e9d4914SAndroid Build Coastguard Worker break 331*2e9d4914SAndroid Build Coastguard Worker ;; 332*2e9d4914SAndroid Build Coastguard Worker $func_relative_path_tlibdir*) 333*2e9d4914SAndroid Build Coastguard Worker # found a matching prefix 334*2e9d4914SAndroid Build Coastguard Worker func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 335*2e9d4914SAndroid Build Coastguard Worker func_relative_path_tcancelled=$func_stripname_result 336*2e9d4914SAndroid Build Coastguard Worker if test -z "$func_relative_path_result"; then 337*2e9d4914SAndroid Build Coastguard Worker func_relative_path_result=. 338*2e9d4914SAndroid Build Coastguard Worker fi 339*2e9d4914SAndroid Build Coastguard Worker break 340*2e9d4914SAndroid Build Coastguard Worker ;; 341*2e9d4914SAndroid Build Coastguard Worker *) 342*2e9d4914SAndroid Build Coastguard Worker func_dirname $func_relative_path_tlibdir 343*2e9d4914SAndroid Build Coastguard Worker func_relative_path_tlibdir=${func_dirname_result} 344*2e9d4914SAndroid Build Coastguard Worker if test "x$func_relative_path_tlibdir" = x ; then 345*2e9d4914SAndroid Build Coastguard Worker # Have to descend all the way to the root! 346*2e9d4914SAndroid Build Coastguard Worker func_relative_path_result=../$func_relative_path_result 347*2e9d4914SAndroid Build Coastguard Worker func_relative_path_tcancelled=$func_relative_path_tbindir 348*2e9d4914SAndroid Build Coastguard Worker break 349*2e9d4914SAndroid Build Coastguard Worker fi 350*2e9d4914SAndroid Build Coastguard Worker func_relative_path_result=../$func_relative_path_result 351*2e9d4914SAndroid Build Coastguard Worker ;; 352*2e9d4914SAndroid Build Coastguard Worker esac 353*2e9d4914SAndroid Build Coastguard Worker done 354*2e9d4914SAndroid Build Coastguard Worker 355*2e9d4914SAndroid Build Coastguard Worker # Now calculate path; take care to avoid doubling-up slashes. 356*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '/' "$func_relative_path_result" 357*2e9d4914SAndroid Build Coastguard Worker func_relative_path_result=$func_stripname_result 358*2e9d4914SAndroid Build Coastguard Worker func_stripname '/' '/' "$func_relative_path_tcancelled" 359*2e9d4914SAndroid Build Coastguard Worker if test "x$func_stripname_result" != x ; then 360*2e9d4914SAndroid Build Coastguard Worker func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 361*2e9d4914SAndroid Build Coastguard Worker fi 362*2e9d4914SAndroid Build Coastguard Worker 363*2e9d4914SAndroid Build Coastguard Worker # Normalisation. If bindir is libdir, return empty string, 364*2e9d4914SAndroid Build Coastguard Worker # else relative path ending with a slash; either way, target 365*2e9d4914SAndroid Build Coastguard Worker # file name can be directly appended. 366*2e9d4914SAndroid Build Coastguard Worker if test ! -z "$func_relative_path_result"; then 367*2e9d4914SAndroid Build Coastguard Worker func_stripname './' '' "$func_relative_path_result/" 368*2e9d4914SAndroid Build Coastguard Worker func_relative_path_result=$func_stripname_result 369*2e9d4914SAndroid Build Coastguard Worker fi 370*2e9d4914SAndroid Build Coastguard Worker} 371*2e9d4914SAndroid Build Coastguard Worker 372*2e9d4914SAndroid Build Coastguard Worker# The name of this program: 373*2e9d4914SAndroid Build Coastguard Workerfunc_dirname_and_basename "$progpath" 374*2e9d4914SAndroid Build Coastguard Workerprogname=$func_basename_result 375*2e9d4914SAndroid Build Coastguard Worker 376*2e9d4914SAndroid Build Coastguard Worker# Make sure we have an absolute path for reexecution: 377*2e9d4914SAndroid Build Coastguard Workercase $progpath in 378*2e9d4914SAndroid Build Coastguard Worker [\\/]*|[A-Za-z]:\\*) ;; 379*2e9d4914SAndroid Build Coastguard Worker *[\\/]*) 380*2e9d4914SAndroid Build Coastguard Worker progdir=$func_dirname_result 381*2e9d4914SAndroid Build Coastguard Worker progdir=`cd "$progdir" && pwd` 382*2e9d4914SAndroid Build Coastguard Worker progpath="$progdir/$progname" 383*2e9d4914SAndroid Build Coastguard Worker ;; 384*2e9d4914SAndroid Build Coastguard Worker *) 385*2e9d4914SAndroid Build Coastguard Worker save_IFS="$IFS" 386*2e9d4914SAndroid Build Coastguard Worker IFS=${PATH_SEPARATOR-:} 387*2e9d4914SAndroid Build Coastguard Worker for progdir in $PATH; do 388*2e9d4914SAndroid Build Coastguard Worker IFS="$save_IFS" 389*2e9d4914SAndroid Build Coastguard Worker test -x "$progdir/$progname" && break 390*2e9d4914SAndroid Build Coastguard Worker done 391*2e9d4914SAndroid Build Coastguard Worker IFS="$save_IFS" 392*2e9d4914SAndroid Build Coastguard Worker test -n "$progdir" || progdir=`pwd` 393*2e9d4914SAndroid Build Coastguard Worker progpath="$progdir/$progname" 394*2e9d4914SAndroid Build Coastguard Worker ;; 395*2e9d4914SAndroid Build Coastguard Workeresac 396*2e9d4914SAndroid Build Coastguard Worker 397*2e9d4914SAndroid Build Coastguard Worker# Sed substitution that helps us do robust quoting. It backslashifies 398*2e9d4914SAndroid Build Coastguard Worker# metacharacters that are still active within double-quoted strings. 399*2e9d4914SAndroid Build Coastguard WorkerXsed="${SED}"' -e 1s/^X//' 400*2e9d4914SAndroid Build Coastguard Workersed_quote_subst='s/\([`"$\\]\)/\\\1/g' 401*2e9d4914SAndroid Build Coastguard Worker 402*2e9d4914SAndroid Build Coastguard Worker# Same as above, but do not quote variable references. 403*2e9d4914SAndroid Build Coastguard Workerdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404*2e9d4914SAndroid Build Coastguard Worker 405*2e9d4914SAndroid Build Coastguard Worker# Sed substitution that turns a string into a regex matching for the 406*2e9d4914SAndroid Build Coastguard Worker# string literally. 407*2e9d4914SAndroid Build Coastguard Workersed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 408*2e9d4914SAndroid Build Coastguard Worker 409*2e9d4914SAndroid Build Coastguard Worker# Sed substitution that converts a w32 file name or path 410*2e9d4914SAndroid Build Coastguard Worker# which contains forward slashes, into one that contains 411*2e9d4914SAndroid Build Coastguard Worker# (escaped) backslashes. A very naive implementation. 412*2e9d4914SAndroid Build Coastguard Workerlt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 413*2e9d4914SAndroid Build Coastguard Worker 414*2e9d4914SAndroid Build Coastguard Worker# Re-`\' parameter expansions in output of double_quote_subst that were 415*2e9d4914SAndroid Build Coastguard Worker# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 416*2e9d4914SAndroid Build Coastguard Worker# in input to double_quote_subst, that '$' was protected from expansion. 417*2e9d4914SAndroid Build Coastguard Worker# Since each input `\' is now two `\'s, look for any number of runs of 418*2e9d4914SAndroid Build Coastguard Worker# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 419*2e9d4914SAndroid Build Coastguard Workerbs='\\' 420*2e9d4914SAndroid Build Coastguard Workerbs2='\\\\' 421*2e9d4914SAndroid Build Coastguard Workerbs4='\\\\\\\\' 422*2e9d4914SAndroid Build Coastguard Workerdollar='\$' 423*2e9d4914SAndroid Build Coastguard Workersed_double_backslash="\ 424*2e9d4914SAndroid Build Coastguard Worker s/$bs4/&\\ 425*2e9d4914SAndroid Build Coastguard Worker/g 426*2e9d4914SAndroid Build Coastguard Worker s/^$bs2$dollar/$bs&/ 427*2e9d4914SAndroid Build Coastguard Worker s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 428*2e9d4914SAndroid Build Coastguard Worker s/\n//g" 429*2e9d4914SAndroid Build Coastguard Worker 430*2e9d4914SAndroid Build Coastguard Worker# Standard options: 431*2e9d4914SAndroid Build Coastguard Workeropt_dry_run=false 432*2e9d4914SAndroid Build Coastguard Workeropt_help=false 433*2e9d4914SAndroid Build Coastguard Workeropt_quiet=false 434*2e9d4914SAndroid Build Coastguard Workeropt_verbose=false 435*2e9d4914SAndroid Build Coastguard Workeropt_warning=: 436*2e9d4914SAndroid Build Coastguard Worker 437*2e9d4914SAndroid Build Coastguard Worker# func_echo arg... 438*2e9d4914SAndroid Build Coastguard Worker# Echo program name prefixed message, along with the current mode 439*2e9d4914SAndroid Build Coastguard Worker# name if it has been set yet. 440*2e9d4914SAndroid Build Coastguard Workerfunc_echo () 441*2e9d4914SAndroid Build Coastguard Worker{ 442*2e9d4914SAndroid Build Coastguard Worker $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 443*2e9d4914SAndroid Build Coastguard Worker} 444*2e9d4914SAndroid Build Coastguard Worker 445*2e9d4914SAndroid Build Coastguard Worker# func_verbose arg... 446*2e9d4914SAndroid Build Coastguard Worker# Echo program name prefixed message in verbose mode only. 447*2e9d4914SAndroid Build Coastguard Workerfunc_verbose () 448*2e9d4914SAndroid Build Coastguard Worker{ 449*2e9d4914SAndroid Build Coastguard Worker $opt_verbose && func_echo ${1+"$@"} 450*2e9d4914SAndroid Build Coastguard Worker 451*2e9d4914SAndroid Build Coastguard Worker # A bug in bash halts the script if the last line of a function 452*2e9d4914SAndroid Build Coastguard Worker # fails when set -e is in force, so we need another command to 453*2e9d4914SAndroid Build Coastguard Worker # work around that: 454*2e9d4914SAndroid Build Coastguard Worker : 455*2e9d4914SAndroid Build Coastguard Worker} 456*2e9d4914SAndroid Build Coastguard Worker 457*2e9d4914SAndroid Build Coastguard Worker# func_echo_all arg... 458*2e9d4914SAndroid Build Coastguard Worker# Invoke $ECHO with all args, space-separated. 459*2e9d4914SAndroid Build Coastguard Workerfunc_echo_all () 460*2e9d4914SAndroid Build Coastguard Worker{ 461*2e9d4914SAndroid Build Coastguard Worker $ECHO "$*" 462*2e9d4914SAndroid Build Coastguard Worker} 463*2e9d4914SAndroid Build Coastguard Worker 464*2e9d4914SAndroid Build Coastguard Worker# func_error arg... 465*2e9d4914SAndroid Build Coastguard Worker# Echo program name prefixed message to standard error. 466*2e9d4914SAndroid Build Coastguard Workerfunc_error () 467*2e9d4914SAndroid Build Coastguard Worker{ 468*2e9d4914SAndroid Build Coastguard Worker $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 469*2e9d4914SAndroid Build Coastguard Worker} 470*2e9d4914SAndroid Build Coastguard Worker 471*2e9d4914SAndroid Build Coastguard Worker# func_warning arg... 472*2e9d4914SAndroid Build Coastguard Worker# Echo program name prefixed warning message to standard error. 473*2e9d4914SAndroid Build Coastguard Workerfunc_warning () 474*2e9d4914SAndroid Build Coastguard Worker{ 475*2e9d4914SAndroid Build Coastguard Worker $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476*2e9d4914SAndroid Build Coastguard Worker 477*2e9d4914SAndroid Build Coastguard Worker # bash bug again: 478*2e9d4914SAndroid Build Coastguard Worker : 479*2e9d4914SAndroid Build Coastguard Worker} 480*2e9d4914SAndroid Build Coastguard Worker 481*2e9d4914SAndroid Build Coastguard Worker# func_fatal_error arg... 482*2e9d4914SAndroid Build Coastguard Worker# Echo program name prefixed message to standard error, and exit. 483*2e9d4914SAndroid Build Coastguard Workerfunc_fatal_error () 484*2e9d4914SAndroid Build Coastguard Worker{ 485*2e9d4914SAndroid Build Coastguard Worker func_error ${1+"$@"} 486*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_FAILURE 487*2e9d4914SAndroid Build Coastguard Worker} 488*2e9d4914SAndroid Build Coastguard Worker 489*2e9d4914SAndroid Build Coastguard Worker# func_fatal_help arg... 490*2e9d4914SAndroid Build Coastguard Worker# Echo program name prefixed message to standard error, followed by 491*2e9d4914SAndroid Build Coastguard Worker# a help hint, and exit. 492*2e9d4914SAndroid Build Coastguard Workerfunc_fatal_help () 493*2e9d4914SAndroid Build Coastguard Worker{ 494*2e9d4914SAndroid Build Coastguard Worker func_error ${1+"$@"} 495*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "$help" 496*2e9d4914SAndroid Build Coastguard Worker} 497*2e9d4914SAndroid Build Coastguard Workerhelp="Try \`$progname --help' for more information." ## default 498*2e9d4914SAndroid Build Coastguard Worker 499*2e9d4914SAndroid Build Coastguard Worker 500*2e9d4914SAndroid Build Coastguard Worker# func_grep expression filename 501*2e9d4914SAndroid Build Coastguard Worker# Check whether EXPRESSION matches any line of FILENAME, without output. 502*2e9d4914SAndroid Build Coastguard Workerfunc_grep () 503*2e9d4914SAndroid Build Coastguard Worker{ 504*2e9d4914SAndroid Build Coastguard Worker $GREP "$1" "$2" >/dev/null 2>&1 505*2e9d4914SAndroid Build Coastguard Worker} 506*2e9d4914SAndroid Build Coastguard Worker 507*2e9d4914SAndroid Build Coastguard Worker 508*2e9d4914SAndroid Build Coastguard Worker# func_mkdir_p directory-path 509*2e9d4914SAndroid Build Coastguard Worker# Make sure the entire path to DIRECTORY-PATH is available. 510*2e9d4914SAndroid Build Coastguard Workerfunc_mkdir_p () 511*2e9d4914SAndroid Build Coastguard Worker{ 512*2e9d4914SAndroid Build Coastguard Worker my_directory_path="$1" 513*2e9d4914SAndroid Build Coastguard Worker my_dir_list= 514*2e9d4914SAndroid Build Coastguard Worker 515*2e9d4914SAndroid Build Coastguard Worker if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516*2e9d4914SAndroid Build Coastguard Worker 517*2e9d4914SAndroid Build Coastguard Worker # Protect directory names starting with `-' 518*2e9d4914SAndroid Build Coastguard Worker case $my_directory_path in 519*2e9d4914SAndroid Build Coastguard Worker -*) my_directory_path="./$my_directory_path" ;; 520*2e9d4914SAndroid Build Coastguard Worker esac 521*2e9d4914SAndroid Build Coastguard Worker 522*2e9d4914SAndroid Build Coastguard Worker # While some portion of DIR does not yet exist... 523*2e9d4914SAndroid Build Coastguard Worker while test ! -d "$my_directory_path"; do 524*2e9d4914SAndroid Build Coastguard Worker # ...make a list in topmost first order. Use a colon delimited 525*2e9d4914SAndroid Build Coastguard Worker # list incase some portion of path contains whitespace. 526*2e9d4914SAndroid Build Coastguard Worker my_dir_list="$my_directory_path:$my_dir_list" 527*2e9d4914SAndroid Build Coastguard Worker 528*2e9d4914SAndroid Build Coastguard Worker # If the last portion added has no slash in it, the list is done 529*2e9d4914SAndroid Build Coastguard Worker case $my_directory_path in */*) ;; *) break ;; esac 530*2e9d4914SAndroid Build Coastguard Worker 531*2e9d4914SAndroid Build Coastguard Worker # ...otherwise throw away the child directory and loop 532*2e9d4914SAndroid Build Coastguard Worker my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533*2e9d4914SAndroid Build Coastguard Worker done 534*2e9d4914SAndroid Build Coastguard Worker my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535*2e9d4914SAndroid Build Coastguard Worker 536*2e9d4914SAndroid Build Coastguard Worker save_mkdir_p_IFS="$IFS"; IFS=':' 537*2e9d4914SAndroid Build Coastguard Worker for my_dir in $my_dir_list; do 538*2e9d4914SAndroid Build Coastguard Worker IFS="$save_mkdir_p_IFS" 539*2e9d4914SAndroid Build Coastguard Worker # mkdir can fail with a `File exist' error if two processes 540*2e9d4914SAndroid Build Coastguard Worker # try to create one of the directories concurrently. Don't 541*2e9d4914SAndroid Build Coastguard Worker # stop in that case! 542*2e9d4914SAndroid Build Coastguard Worker $MKDIR "$my_dir" 2>/dev/null || : 543*2e9d4914SAndroid Build Coastguard Worker done 544*2e9d4914SAndroid Build Coastguard Worker IFS="$save_mkdir_p_IFS" 545*2e9d4914SAndroid Build Coastguard Worker 546*2e9d4914SAndroid Build Coastguard Worker # Bail out if we (or some other process) failed to create a directory. 547*2e9d4914SAndroid Build Coastguard Worker test -d "$my_directory_path" || \ 548*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "Failed to create \`$1'" 549*2e9d4914SAndroid Build Coastguard Worker fi 550*2e9d4914SAndroid Build Coastguard Worker} 551*2e9d4914SAndroid Build Coastguard Worker 552*2e9d4914SAndroid Build Coastguard Worker 553*2e9d4914SAndroid Build Coastguard Worker# func_mktempdir [string] 554*2e9d4914SAndroid Build Coastguard Worker# Make a temporary directory that won't clash with other running 555*2e9d4914SAndroid Build Coastguard Worker# libtool processes, and avoids race conditions if possible. If 556*2e9d4914SAndroid Build Coastguard Worker# given, STRING is the basename for that directory. 557*2e9d4914SAndroid Build Coastguard Workerfunc_mktempdir () 558*2e9d4914SAndroid Build Coastguard Worker{ 559*2e9d4914SAndroid Build Coastguard Worker my_template="${TMPDIR-/tmp}/${1-$progname}" 560*2e9d4914SAndroid Build Coastguard Worker 561*2e9d4914SAndroid Build Coastguard Worker if test "$opt_dry_run" = ":"; then 562*2e9d4914SAndroid Build Coastguard Worker # Return a directory name, but don't create it in dry-run mode 563*2e9d4914SAndroid Build Coastguard Worker my_tmpdir="${my_template}-$$" 564*2e9d4914SAndroid Build Coastguard Worker else 565*2e9d4914SAndroid Build Coastguard Worker 566*2e9d4914SAndroid Build Coastguard Worker # If mktemp works, use that first and foremost 567*2e9d4914SAndroid Build Coastguard Worker my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 568*2e9d4914SAndroid Build Coastguard Worker 569*2e9d4914SAndroid Build Coastguard Worker if test ! -d "$my_tmpdir"; then 570*2e9d4914SAndroid Build Coastguard Worker # Failing that, at least try and use $RANDOM to avoid a race 571*2e9d4914SAndroid Build Coastguard Worker my_tmpdir="${my_template}-${RANDOM-0}$$" 572*2e9d4914SAndroid Build Coastguard Worker 573*2e9d4914SAndroid Build Coastguard Worker save_mktempdir_umask=`umask` 574*2e9d4914SAndroid Build Coastguard Worker umask 0077 575*2e9d4914SAndroid Build Coastguard Worker $MKDIR "$my_tmpdir" 576*2e9d4914SAndroid Build Coastguard Worker umask $save_mktempdir_umask 577*2e9d4914SAndroid Build Coastguard Worker fi 578*2e9d4914SAndroid Build Coastguard Worker 579*2e9d4914SAndroid Build Coastguard Worker # If we're not in dry-run mode, bomb out on failure 580*2e9d4914SAndroid Build Coastguard Worker test -d "$my_tmpdir" || \ 581*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 582*2e9d4914SAndroid Build Coastguard Worker fi 583*2e9d4914SAndroid Build Coastguard Worker 584*2e9d4914SAndroid Build Coastguard Worker $ECHO "$my_tmpdir" 585*2e9d4914SAndroid Build Coastguard Worker} 586*2e9d4914SAndroid Build Coastguard Worker 587*2e9d4914SAndroid Build Coastguard Worker 588*2e9d4914SAndroid Build Coastguard Worker# func_quote_for_eval arg 589*2e9d4914SAndroid Build Coastguard Worker# Aesthetically quote ARG to be evaled later. 590*2e9d4914SAndroid Build Coastguard Worker# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 591*2e9d4914SAndroid Build Coastguard Worker# is double-quoted, suitable for a subsequent eval, whereas 592*2e9d4914SAndroid Build Coastguard Worker# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 593*2e9d4914SAndroid Build Coastguard Worker# which are still active within double quotes backslashified. 594*2e9d4914SAndroid Build Coastguard Workerfunc_quote_for_eval () 595*2e9d4914SAndroid Build Coastguard Worker{ 596*2e9d4914SAndroid Build Coastguard Worker case $1 in 597*2e9d4914SAndroid Build Coastguard Worker *[\\\`\"\$]*) 598*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599*2e9d4914SAndroid Build Coastguard Worker *) 600*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval_unquoted_result="$1" ;; 601*2e9d4914SAndroid Build Coastguard Worker esac 602*2e9d4914SAndroid Build Coastguard Worker 603*2e9d4914SAndroid Build Coastguard Worker case $func_quote_for_eval_unquoted_result in 604*2e9d4914SAndroid Build Coastguard Worker # Double-quote args containing shell metacharacters to delay 605*2e9d4914SAndroid Build Coastguard Worker # word splitting, command substitution and and variable 606*2e9d4914SAndroid Build Coastguard Worker # expansion for a subsequent eval. 607*2e9d4914SAndroid Build Coastguard Worker # Many Bourne shells cannot handle close brackets correctly 608*2e9d4914SAndroid Build Coastguard Worker # in scan sets, so we specify it separately. 609*2e9d4914SAndroid Build Coastguard Worker *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 610*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611*2e9d4914SAndroid Build Coastguard Worker ;; 612*2e9d4914SAndroid Build Coastguard Worker *) 613*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 614*2e9d4914SAndroid Build Coastguard Worker esac 615*2e9d4914SAndroid Build Coastguard Worker} 616*2e9d4914SAndroid Build Coastguard Worker 617*2e9d4914SAndroid Build Coastguard Worker 618*2e9d4914SAndroid Build Coastguard Worker# func_quote_for_expand arg 619*2e9d4914SAndroid Build Coastguard Worker# Aesthetically quote ARG to be evaled later; same as above, 620*2e9d4914SAndroid Build Coastguard Worker# but do not quote variable references. 621*2e9d4914SAndroid Build Coastguard Workerfunc_quote_for_expand () 622*2e9d4914SAndroid Build Coastguard Worker{ 623*2e9d4914SAndroid Build Coastguard Worker case $1 in 624*2e9d4914SAndroid Build Coastguard Worker *[\\\`\"]*) 625*2e9d4914SAndroid Build Coastguard Worker my_arg=`$ECHO "$1" | $SED \ 626*2e9d4914SAndroid Build Coastguard Worker -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 627*2e9d4914SAndroid Build Coastguard Worker *) 628*2e9d4914SAndroid Build Coastguard Worker my_arg="$1" ;; 629*2e9d4914SAndroid Build Coastguard Worker esac 630*2e9d4914SAndroid Build Coastguard Worker 631*2e9d4914SAndroid Build Coastguard Worker case $my_arg in 632*2e9d4914SAndroid Build Coastguard Worker # Double-quote args containing shell metacharacters to delay 633*2e9d4914SAndroid Build Coastguard Worker # word splitting and command substitution for a subsequent eval. 634*2e9d4914SAndroid Build Coastguard Worker # Many Bourne shells cannot handle close brackets correctly 635*2e9d4914SAndroid Build Coastguard Worker # in scan sets, so we specify it separately. 636*2e9d4914SAndroid Build Coastguard Worker *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 637*2e9d4914SAndroid Build Coastguard Worker my_arg="\"$my_arg\"" 638*2e9d4914SAndroid Build Coastguard Worker ;; 639*2e9d4914SAndroid Build Coastguard Worker esac 640*2e9d4914SAndroid Build Coastguard Worker 641*2e9d4914SAndroid Build Coastguard Worker func_quote_for_expand_result="$my_arg" 642*2e9d4914SAndroid Build Coastguard Worker} 643*2e9d4914SAndroid Build Coastguard Worker 644*2e9d4914SAndroid Build Coastguard Worker 645*2e9d4914SAndroid Build Coastguard Worker# func_show_eval cmd [fail_exp] 646*2e9d4914SAndroid Build Coastguard Worker# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 647*2e9d4914SAndroid Build Coastguard Worker# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 648*2e9d4914SAndroid Build Coastguard Worker# is given, then evaluate it. 649*2e9d4914SAndroid Build Coastguard Workerfunc_show_eval () 650*2e9d4914SAndroid Build Coastguard Worker{ 651*2e9d4914SAndroid Build Coastguard Worker my_cmd="$1" 652*2e9d4914SAndroid Build Coastguard Worker my_fail_exp="${2-:}" 653*2e9d4914SAndroid Build Coastguard Worker 654*2e9d4914SAndroid Build Coastguard Worker ${opt_silent-false} || { 655*2e9d4914SAndroid Build Coastguard Worker func_quote_for_expand "$my_cmd" 656*2e9d4914SAndroid Build Coastguard Worker eval "func_echo $func_quote_for_expand_result" 657*2e9d4914SAndroid Build Coastguard Worker } 658*2e9d4914SAndroid Build Coastguard Worker 659*2e9d4914SAndroid Build Coastguard Worker if ${opt_dry_run-false}; then :; else 660*2e9d4914SAndroid Build Coastguard Worker eval "$my_cmd" 661*2e9d4914SAndroid Build Coastguard Worker my_status=$? 662*2e9d4914SAndroid Build Coastguard Worker if test "$my_status" -eq 0; then :; else 663*2e9d4914SAndroid Build Coastguard Worker eval "(exit $my_status); $my_fail_exp" 664*2e9d4914SAndroid Build Coastguard Worker fi 665*2e9d4914SAndroid Build Coastguard Worker fi 666*2e9d4914SAndroid Build Coastguard Worker} 667*2e9d4914SAndroid Build Coastguard Worker 668*2e9d4914SAndroid Build Coastguard Worker 669*2e9d4914SAndroid Build Coastguard Worker# func_show_eval_locale cmd [fail_exp] 670*2e9d4914SAndroid Build Coastguard Worker# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 671*2e9d4914SAndroid Build Coastguard Worker# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 672*2e9d4914SAndroid Build Coastguard Worker# is given, then evaluate it. Use the saved locale for evaluation. 673*2e9d4914SAndroid Build Coastguard Workerfunc_show_eval_locale () 674*2e9d4914SAndroid Build Coastguard Worker{ 675*2e9d4914SAndroid Build Coastguard Worker my_cmd="$1" 676*2e9d4914SAndroid Build Coastguard Worker my_fail_exp="${2-:}" 677*2e9d4914SAndroid Build Coastguard Worker 678*2e9d4914SAndroid Build Coastguard Worker ${opt_silent-false} || { 679*2e9d4914SAndroid Build Coastguard Worker func_quote_for_expand "$my_cmd" 680*2e9d4914SAndroid Build Coastguard Worker eval "func_echo $func_quote_for_expand_result" 681*2e9d4914SAndroid Build Coastguard Worker } 682*2e9d4914SAndroid Build Coastguard Worker 683*2e9d4914SAndroid Build Coastguard Worker if ${opt_dry_run-false}; then :; else 684*2e9d4914SAndroid Build Coastguard Worker eval "$lt_user_locale 685*2e9d4914SAndroid Build Coastguard Worker $my_cmd" 686*2e9d4914SAndroid Build Coastguard Worker my_status=$? 687*2e9d4914SAndroid Build Coastguard Worker eval "$lt_safe_locale" 688*2e9d4914SAndroid Build Coastguard Worker if test "$my_status" -eq 0; then :; else 689*2e9d4914SAndroid Build Coastguard Worker eval "(exit $my_status); $my_fail_exp" 690*2e9d4914SAndroid Build Coastguard Worker fi 691*2e9d4914SAndroid Build Coastguard Worker fi 692*2e9d4914SAndroid Build Coastguard Worker} 693*2e9d4914SAndroid Build Coastguard Worker 694*2e9d4914SAndroid Build Coastguard Worker# func_tr_sh 695*2e9d4914SAndroid Build Coastguard Worker# Turn $1 into a string suitable for a shell variable name. 696*2e9d4914SAndroid Build Coastguard Worker# Result is stored in $func_tr_sh_result. All characters 697*2e9d4914SAndroid Build Coastguard Worker# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 698*2e9d4914SAndroid Build Coastguard Worker# if $1 begins with a digit, a '_' is prepended as well. 699*2e9d4914SAndroid Build Coastguard Workerfunc_tr_sh () 700*2e9d4914SAndroid Build Coastguard Worker{ 701*2e9d4914SAndroid Build Coastguard Worker case $1 in 702*2e9d4914SAndroid Build Coastguard Worker [0-9]* | *[!a-zA-Z0-9_]*) 703*2e9d4914SAndroid Build Coastguard Worker func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 704*2e9d4914SAndroid Build Coastguard Worker ;; 705*2e9d4914SAndroid Build Coastguard Worker * ) 706*2e9d4914SAndroid Build Coastguard Worker func_tr_sh_result=$1 707*2e9d4914SAndroid Build Coastguard Worker ;; 708*2e9d4914SAndroid Build Coastguard Worker esac 709*2e9d4914SAndroid Build Coastguard Worker} 710*2e9d4914SAndroid Build Coastguard Worker 711*2e9d4914SAndroid Build Coastguard Worker 712*2e9d4914SAndroid Build Coastguard Worker# func_version 713*2e9d4914SAndroid Build Coastguard Worker# Echo version message to standard output and exit. 714*2e9d4914SAndroid Build Coastguard Workerfunc_version () 715*2e9d4914SAndroid Build Coastguard Worker{ 716*2e9d4914SAndroid Build Coastguard Worker $opt_debug 717*2e9d4914SAndroid Build Coastguard Worker 718*2e9d4914SAndroid Build Coastguard Worker $SED -n '/(C)/!b go 719*2e9d4914SAndroid Build Coastguard Worker :more 720*2e9d4914SAndroid Build Coastguard Worker /\./!{ 721*2e9d4914SAndroid Build Coastguard Worker N 722*2e9d4914SAndroid Build Coastguard Worker s/\n# / / 723*2e9d4914SAndroid Build Coastguard Worker b more 724*2e9d4914SAndroid Build Coastguard Worker } 725*2e9d4914SAndroid Build Coastguard Worker :go 726*2e9d4914SAndroid Build Coastguard Worker /^# '$PROGRAM' (GNU /,/# warranty; / { 727*2e9d4914SAndroid Build Coastguard Worker s/^# // 728*2e9d4914SAndroid Build Coastguard Worker s/^# *$// 729*2e9d4914SAndroid Build Coastguard Worker s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 730*2e9d4914SAndroid Build Coastguard Worker p 731*2e9d4914SAndroid Build Coastguard Worker }' < "$progpath" 732*2e9d4914SAndroid Build Coastguard Worker exit $? 733*2e9d4914SAndroid Build Coastguard Worker} 734*2e9d4914SAndroid Build Coastguard Worker 735*2e9d4914SAndroid Build Coastguard Worker# func_usage 736*2e9d4914SAndroid Build Coastguard Worker# Echo short help message to standard output and exit. 737*2e9d4914SAndroid Build Coastguard Workerfunc_usage () 738*2e9d4914SAndroid Build Coastguard Worker{ 739*2e9d4914SAndroid Build Coastguard Worker $opt_debug 740*2e9d4914SAndroid Build Coastguard Worker 741*2e9d4914SAndroid Build Coastguard Worker $SED -n '/^# Usage:/,/^# *.*--help/ { 742*2e9d4914SAndroid Build Coastguard Worker s/^# // 743*2e9d4914SAndroid Build Coastguard Worker s/^# *$// 744*2e9d4914SAndroid Build Coastguard Worker s/\$progname/'$progname'/ 745*2e9d4914SAndroid Build Coastguard Worker p 746*2e9d4914SAndroid Build Coastguard Worker }' < "$progpath" 747*2e9d4914SAndroid Build Coastguard Worker echo 748*2e9d4914SAndroid Build Coastguard Worker $ECHO "run \`$progname --help | more' for full usage" 749*2e9d4914SAndroid Build Coastguard Worker exit $? 750*2e9d4914SAndroid Build Coastguard Worker} 751*2e9d4914SAndroid Build Coastguard Worker 752*2e9d4914SAndroid Build Coastguard Worker# func_help [NOEXIT] 753*2e9d4914SAndroid Build Coastguard Worker# Echo long help message to standard output and exit, 754*2e9d4914SAndroid Build Coastguard Worker# unless 'noexit' is passed as argument. 755*2e9d4914SAndroid Build Coastguard Workerfunc_help () 756*2e9d4914SAndroid Build Coastguard Worker{ 757*2e9d4914SAndroid Build Coastguard Worker $opt_debug 758*2e9d4914SAndroid Build Coastguard Worker 759*2e9d4914SAndroid Build Coastguard Worker $SED -n '/^# Usage:/,/# Report bugs to/ { 760*2e9d4914SAndroid Build Coastguard Worker :print 761*2e9d4914SAndroid Build Coastguard Worker s/^# // 762*2e9d4914SAndroid Build Coastguard Worker s/^# *$// 763*2e9d4914SAndroid Build Coastguard Worker s*\$progname*'$progname'* 764*2e9d4914SAndroid Build Coastguard Worker s*\$host*'"$host"'* 765*2e9d4914SAndroid Build Coastguard Worker s*\$SHELL*'"$SHELL"'* 766*2e9d4914SAndroid Build Coastguard Worker s*\$LTCC*'"$LTCC"'* 767*2e9d4914SAndroid Build Coastguard Worker s*\$LTCFLAGS*'"$LTCFLAGS"'* 768*2e9d4914SAndroid Build Coastguard Worker s*\$LD*'"$LD"'* 769*2e9d4914SAndroid Build Coastguard Worker s/\$with_gnu_ld/'"$with_gnu_ld"'/ 770*2e9d4914SAndroid Build Coastguard Worker s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 771*2e9d4914SAndroid Build Coastguard Worker s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 772*2e9d4914SAndroid Build Coastguard Worker p 773*2e9d4914SAndroid Build Coastguard Worker d 774*2e9d4914SAndroid Build Coastguard Worker } 775*2e9d4914SAndroid Build Coastguard Worker /^# .* home page:/b print 776*2e9d4914SAndroid Build Coastguard Worker /^# General help using/b print 777*2e9d4914SAndroid Build Coastguard Worker ' < "$progpath" 778*2e9d4914SAndroid Build Coastguard Worker ret=$? 779*2e9d4914SAndroid Build Coastguard Worker if test -z "$1"; then 780*2e9d4914SAndroid Build Coastguard Worker exit $ret 781*2e9d4914SAndroid Build Coastguard Worker fi 782*2e9d4914SAndroid Build Coastguard Worker} 783*2e9d4914SAndroid Build Coastguard Worker 784*2e9d4914SAndroid Build Coastguard Worker# func_missing_arg argname 785*2e9d4914SAndroid Build Coastguard Worker# Echo program name prefixed message to standard error and set global 786*2e9d4914SAndroid Build Coastguard Worker# exit_cmd. 787*2e9d4914SAndroid Build Coastguard Workerfunc_missing_arg () 788*2e9d4914SAndroid Build Coastguard Worker{ 789*2e9d4914SAndroid Build Coastguard Worker $opt_debug 790*2e9d4914SAndroid Build Coastguard Worker 791*2e9d4914SAndroid Build Coastguard Worker func_error "missing argument for $1." 792*2e9d4914SAndroid Build Coastguard Worker exit_cmd=exit 793*2e9d4914SAndroid Build Coastguard Worker} 794*2e9d4914SAndroid Build Coastguard Worker 795*2e9d4914SAndroid Build Coastguard Worker 796*2e9d4914SAndroid Build Coastguard Worker# func_split_short_opt shortopt 797*2e9d4914SAndroid Build Coastguard Worker# Set func_split_short_opt_name and func_split_short_opt_arg shell 798*2e9d4914SAndroid Build Coastguard Worker# variables after splitting SHORTOPT after the 2nd character. 799*2e9d4914SAndroid Build Coastguard Workerfunc_split_short_opt () 800*2e9d4914SAndroid Build Coastguard Worker{ 801*2e9d4914SAndroid Build Coastguard Worker my_sed_short_opt='1s/^\(..\).*$/\1/;q' 802*2e9d4914SAndroid Build Coastguard Worker my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 803*2e9d4914SAndroid Build Coastguard Worker 804*2e9d4914SAndroid Build Coastguard Worker func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 805*2e9d4914SAndroid Build Coastguard Worker func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 806*2e9d4914SAndroid Build Coastguard Worker} # func_split_short_opt may be replaced by extended shell implementation 807*2e9d4914SAndroid Build Coastguard Worker 808*2e9d4914SAndroid Build Coastguard Worker 809*2e9d4914SAndroid Build Coastguard Worker# func_split_long_opt longopt 810*2e9d4914SAndroid Build Coastguard Worker# Set func_split_long_opt_name and func_split_long_opt_arg shell 811*2e9d4914SAndroid Build Coastguard Worker# variables after splitting LONGOPT at the `=' sign. 812*2e9d4914SAndroid Build Coastguard Workerfunc_split_long_opt () 813*2e9d4914SAndroid Build Coastguard Worker{ 814*2e9d4914SAndroid Build Coastguard Worker my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 815*2e9d4914SAndroid Build Coastguard Worker my_sed_long_arg='1s/^--[^=]*=//' 816*2e9d4914SAndroid Build Coastguard Worker 817*2e9d4914SAndroid Build Coastguard Worker func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 818*2e9d4914SAndroid Build Coastguard Worker func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 819*2e9d4914SAndroid Build Coastguard Worker} # func_split_long_opt may be replaced by extended shell implementation 820*2e9d4914SAndroid Build Coastguard Worker 821*2e9d4914SAndroid Build Coastguard Workerexit_cmd=: 822*2e9d4914SAndroid Build Coastguard Worker 823*2e9d4914SAndroid Build Coastguard Worker 824*2e9d4914SAndroid Build Coastguard Worker 825*2e9d4914SAndroid Build Coastguard Worker 826*2e9d4914SAndroid Build Coastguard Worker 827*2e9d4914SAndroid Build Coastguard Workermagic="%%%MAGIC variable%%%" 828*2e9d4914SAndroid Build Coastguard Workermagic_exe="%%%MAGIC EXE variable%%%" 829*2e9d4914SAndroid Build Coastguard Worker 830*2e9d4914SAndroid Build Coastguard Worker# Global variables. 831*2e9d4914SAndroid Build Coastguard Workernonopt= 832*2e9d4914SAndroid Build Coastguard Workerpreserve_args= 833*2e9d4914SAndroid Build Coastguard Workerlo2o="s/\\.lo\$/.${objext}/" 834*2e9d4914SAndroid Build Coastguard Workero2lo="s/\\.${objext}\$/.lo/" 835*2e9d4914SAndroid Build Coastguard Workerextracted_archives= 836*2e9d4914SAndroid Build Coastguard Workerextracted_serial=0 837*2e9d4914SAndroid Build Coastguard Worker 838*2e9d4914SAndroid Build Coastguard Worker# If this variable is set in any of the actions, the command in it 839*2e9d4914SAndroid Build Coastguard Worker# will be execed at the end. This prevents here-documents from being 840*2e9d4914SAndroid Build Coastguard Worker# left over by shells. 841*2e9d4914SAndroid Build Coastguard Workerexec_cmd= 842*2e9d4914SAndroid Build Coastguard Worker 843*2e9d4914SAndroid Build Coastguard Worker# func_append var value 844*2e9d4914SAndroid Build Coastguard Worker# Append VALUE to the end of shell variable VAR. 845*2e9d4914SAndroid Build Coastguard Workerfunc_append () 846*2e9d4914SAndroid Build Coastguard Worker{ 847*2e9d4914SAndroid Build Coastguard Worker eval "${1}=\$${1}\${2}" 848*2e9d4914SAndroid Build Coastguard Worker} # func_append may be replaced by extended shell implementation 849*2e9d4914SAndroid Build Coastguard Worker 850*2e9d4914SAndroid Build Coastguard Worker# func_append_quoted var value 851*2e9d4914SAndroid Build Coastguard Worker# Quote VALUE and append to the end of shell variable VAR, separated 852*2e9d4914SAndroid Build Coastguard Worker# by a space. 853*2e9d4914SAndroid Build Coastguard Workerfunc_append_quoted () 854*2e9d4914SAndroid Build Coastguard Worker{ 855*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "${2}" 856*2e9d4914SAndroid Build Coastguard Worker eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 857*2e9d4914SAndroid Build Coastguard Worker} # func_append_quoted may be replaced by extended shell implementation 858*2e9d4914SAndroid Build Coastguard Worker 859*2e9d4914SAndroid Build Coastguard Worker 860*2e9d4914SAndroid Build Coastguard Worker# func_arith arithmetic-term... 861*2e9d4914SAndroid Build Coastguard Workerfunc_arith () 862*2e9d4914SAndroid Build Coastguard Worker{ 863*2e9d4914SAndroid Build Coastguard Worker func_arith_result=`expr "${@}"` 864*2e9d4914SAndroid Build Coastguard Worker} # func_arith may be replaced by extended shell implementation 865*2e9d4914SAndroid Build Coastguard Worker 866*2e9d4914SAndroid Build Coastguard Worker 867*2e9d4914SAndroid Build Coastguard Worker# func_len string 868*2e9d4914SAndroid Build Coastguard Worker# STRING may not start with a hyphen. 869*2e9d4914SAndroid Build Coastguard Workerfunc_len () 870*2e9d4914SAndroid Build Coastguard Worker{ 871*2e9d4914SAndroid Build Coastguard Worker func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 872*2e9d4914SAndroid Build Coastguard Worker} # func_len may be replaced by extended shell implementation 873*2e9d4914SAndroid Build Coastguard Worker 874*2e9d4914SAndroid Build Coastguard Worker 875*2e9d4914SAndroid Build Coastguard Worker# func_lo2o object 876*2e9d4914SAndroid Build Coastguard Workerfunc_lo2o () 877*2e9d4914SAndroid Build Coastguard Worker{ 878*2e9d4914SAndroid Build Coastguard Worker func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 879*2e9d4914SAndroid Build Coastguard Worker} # func_lo2o may be replaced by extended shell implementation 880*2e9d4914SAndroid Build Coastguard Worker 881*2e9d4914SAndroid Build Coastguard Worker 882*2e9d4914SAndroid Build Coastguard Worker# func_xform libobj-or-source 883*2e9d4914SAndroid Build Coastguard Workerfunc_xform () 884*2e9d4914SAndroid Build Coastguard Worker{ 885*2e9d4914SAndroid Build Coastguard Worker func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 886*2e9d4914SAndroid Build Coastguard Worker} # func_xform may be replaced by extended shell implementation 887*2e9d4914SAndroid Build Coastguard Worker 888*2e9d4914SAndroid Build Coastguard Worker 889*2e9d4914SAndroid Build Coastguard Worker# func_fatal_configuration arg... 890*2e9d4914SAndroid Build Coastguard Worker# Echo program name prefixed message to standard error, followed by 891*2e9d4914SAndroid Build Coastguard Worker# a configuration failure hint, and exit. 892*2e9d4914SAndroid Build Coastguard Workerfunc_fatal_configuration () 893*2e9d4914SAndroid Build Coastguard Worker{ 894*2e9d4914SAndroid Build Coastguard Worker func_error ${1+"$@"} 895*2e9d4914SAndroid Build Coastguard Worker func_error "See the $PACKAGE documentation for more information." 896*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "Fatal configuration error." 897*2e9d4914SAndroid Build Coastguard Worker} 898*2e9d4914SAndroid Build Coastguard Worker 899*2e9d4914SAndroid Build Coastguard Worker 900*2e9d4914SAndroid Build Coastguard Worker# func_config 901*2e9d4914SAndroid Build Coastguard Worker# Display the configuration for all the tags in this script. 902*2e9d4914SAndroid Build Coastguard Workerfunc_config () 903*2e9d4914SAndroid Build Coastguard Worker{ 904*2e9d4914SAndroid Build Coastguard Worker re_begincf='^# ### BEGIN LIBTOOL' 905*2e9d4914SAndroid Build Coastguard Worker re_endcf='^# ### END LIBTOOL' 906*2e9d4914SAndroid Build Coastguard Worker 907*2e9d4914SAndroid Build Coastguard Worker # Default configuration. 908*2e9d4914SAndroid Build Coastguard Worker $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 909*2e9d4914SAndroid Build Coastguard Worker 910*2e9d4914SAndroid Build Coastguard Worker # Now print the configurations for the tags. 911*2e9d4914SAndroid Build Coastguard Worker for tagname in $taglist; do 912*2e9d4914SAndroid Build Coastguard Worker $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 913*2e9d4914SAndroid Build Coastguard Worker done 914*2e9d4914SAndroid Build Coastguard Worker 915*2e9d4914SAndroid Build Coastguard Worker exit $? 916*2e9d4914SAndroid Build Coastguard Worker} 917*2e9d4914SAndroid Build Coastguard Worker 918*2e9d4914SAndroid Build Coastguard Worker# func_features 919*2e9d4914SAndroid Build Coastguard Worker# Display the features supported by this script. 920*2e9d4914SAndroid Build Coastguard Workerfunc_features () 921*2e9d4914SAndroid Build Coastguard Worker{ 922*2e9d4914SAndroid Build Coastguard Worker echo "host: $host" 923*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = yes; then 924*2e9d4914SAndroid Build Coastguard Worker echo "enable shared libraries" 925*2e9d4914SAndroid Build Coastguard Worker else 926*2e9d4914SAndroid Build Coastguard Worker echo "disable shared libraries" 927*2e9d4914SAndroid Build Coastguard Worker fi 928*2e9d4914SAndroid Build Coastguard Worker if test "$build_old_libs" = yes; then 929*2e9d4914SAndroid Build Coastguard Worker echo "enable static libraries" 930*2e9d4914SAndroid Build Coastguard Worker else 931*2e9d4914SAndroid Build Coastguard Worker echo "disable static libraries" 932*2e9d4914SAndroid Build Coastguard Worker fi 933*2e9d4914SAndroid Build Coastguard Worker 934*2e9d4914SAndroid Build Coastguard Worker exit $? 935*2e9d4914SAndroid Build Coastguard Worker} 936*2e9d4914SAndroid Build Coastguard Worker 937*2e9d4914SAndroid Build Coastguard Worker# func_enable_tag tagname 938*2e9d4914SAndroid Build Coastguard Worker# Verify that TAGNAME is valid, and either flag an error and exit, or 939*2e9d4914SAndroid Build Coastguard Worker# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940*2e9d4914SAndroid Build Coastguard Worker# variable here. 941*2e9d4914SAndroid Build Coastguard Workerfunc_enable_tag () 942*2e9d4914SAndroid Build Coastguard Worker{ 943*2e9d4914SAndroid Build Coastguard Worker # Global variable: 944*2e9d4914SAndroid Build Coastguard Worker tagname="$1" 945*2e9d4914SAndroid Build Coastguard Worker 946*2e9d4914SAndroid Build Coastguard Worker re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 947*2e9d4914SAndroid Build Coastguard Worker re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 948*2e9d4914SAndroid Build Coastguard Worker sed_extractcf="/$re_begincf/,/$re_endcf/p" 949*2e9d4914SAndroid Build Coastguard Worker 950*2e9d4914SAndroid Build Coastguard Worker # Validate tagname. 951*2e9d4914SAndroid Build Coastguard Worker case $tagname in 952*2e9d4914SAndroid Build Coastguard Worker *[!-_A-Za-z0-9,/]*) 953*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "invalid tag name: $tagname" 954*2e9d4914SAndroid Build Coastguard Worker ;; 955*2e9d4914SAndroid Build Coastguard Worker esac 956*2e9d4914SAndroid Build Coastguard Worker 957*2e9d4914SAndroid Build Coastguard Worker # Don't test for the "default" C tag, as we know it's 958*2e9d4914SAndroid Build Coastguard Worker # there but not specially marked. 959*2e9d4914SAndroid Build Coastguard Worker case $tagname in 960*2e9d4914SAndroid Build Coastguard Worker CC) ;; 961*2e9d4914SAndroid Build Coastguard Worker *) 962*2e9d4914SAndroid Build Coastguard Worker if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 963*2e9d4914SAndroid Build Coastguard Worker taglist="$taglist $tagname" 964*2e9d4914SAndroid Build Coastguard Worker 965*2e9d4914SAndroid Build Coastguard Worker # Evaluate the configuration. Be careful to quote the path 966*2e9d4914SAndroid Build Coastguard Worker # and the sed script, to avoid splitting on whitespace, but 967*2e9d4914SAndroid Build Coastguard Worker # also don't use non-portable quotes within backquotes within 968*2e9d4914SAndroid Build Coastguard Worker # quotes we have to do it in 2 steps: 969*2e9d4914SAndroid Build Coastguard Worker extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 970*2e9d4914SAndroid Build Coastguard Worker eval "$extractedcf" 971*2e9d4914SAndroid Build Coastguard Worker else 972*2e9d4914SAndroid Build Coastguard Worker func_error "ignoring unknown tag $tagname" 973*2e9d4914SAndroid Build Coastguard Worker fi 974*2e9d4914SAndroid Build Coastguard Worker ;; 975*2e9d4914SAndroid Build Coastguard Worker esac 976*2e9d4914SAndroid Build Coastguard Worker} 977*2e9d4914SAndroid Build Coastguard Worker 978*2e9d4914SAndroid Build Coastguard Worker# func_check_version_match 979*2e9d4914SAndroid Build Coastguard Worker# Ensure that we are using m4 macros, and libtool script from the same 980*2e9d4914SAndroid Build Coastguard Worker# release of libtool. 981*2e9d4914SAndroid Build Coastguard Workerfunc_check_version_match () 982*2e9d4914SAndroid Build Coastguard Worker{ 983*2e9d4914SAndroid Build Coastguard Worker if test "$package_revision" != "$macro_revision"; then 984*2e9d4914SAndroid Build Coastguard Worker if test "$VERSION" != "$macro_version"; then 985*2e9d4914SAndroid Build Coastguard Worker if test -z "$macro_version"; then 986*2e9d4914SAndroid Build Coastguard Worker cat >&2 <<_LT_EOF 987*2e9d4914SAndroid Build Coastguard Worker$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 988*2e9d4914SAndroid Build Coastguard Worker$progname: definition of this LT_INIT comes from an older release. 989*2e9d4914SAndroid Build Coastguard Worker$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 990*2e9d4914SAndroid Build Coastguard Worker$progname: and run autoconf again. 991*2e9d4914SAndroid Build Coastguard Worker_LT_EOF 992*2e9d4914SAndroid Build Coastguard Worker else 993*2e9d4914SAndroid Build Coastguard Worker cat >&2 <<_LT_EOF 994*2e9d4914SAndroid Build Coastguard Worker$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 995*2e9d4914SAndroid Build Coastguard Worker$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 996*2e9d4914SAndroid Build Coastguard Worker$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 997*2e9d4914SAndroid Build Coastguard Worker$progname: and run autoconf again. 998*2e9d4914SAndroid Build Coastguard Worker_LT_EOF 999*2e9d4914SAndroid Build Coastguard Worker fi 1000*2e9d4914SAndroid Build Coastguard Worker else 1001*2e9d4914SAndroid Build Coastguard Worker cat >&2 <<_LT_EOF 1002*2e9d4914SAndroid Build Coastguard Worker$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1003*2e9d4914SAndroid Build Coastguard Worker$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1004*2e9d4914SAndroid Build Coastguard Worker$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1005*2e9d4914SAndroid Build Coastguard Worker$progname: of $PACKAGE $VERSION and run autoconf again. 1006*2e9d4914SAndroid Build Coastguard Worker_LT_EOF 1007*2e9d4914SAndroid Build Coastguard Worker fi 1008*2e9d4914SAndroid Build Coastguard Worker 1009*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_MISMATCH 1010*2e9d4914SAndroid Build Coastguard Worker fi 1011*2e9d4914SAndroid Build Coastguard Worker} 1012*2e9d4914SAndroid Build Coastguard Worker 1013*2e9d4914SAndroid Build Coastguard Worker 1014*2e9d4914SAndroid Build Coastguard Worker# Shorthand for --mode=foo, only valid as the first argument 1015*2e9d4914SAndroid Build Coastguard Workercase $1 in 1016*2e9d4914SAndroid Build Coastguard Workerclean|clea|cle|cl) 1017*2e9d4914SAndroid Build Coastguard Worker shift; set dummy --mode clean ${1+"$@"}; shift 1018*2e9d4914SAndroid Build Coastguard Worker ;; 1019*2e9d4914SAndroid Build Coastguard Workercompile|compil|compi|comp|com|co|c) 1020*2e9d4914SAndroid Build Coastguard Worker shift; set dummy --mode compile ${1+"$@"}; shift 1021*2e9d4914SAndroid Build Coastguard Worker ;; 1022*2e9d4914SAndroid Build Coastguard Workerexecute|execut|execu|exec|exe|ex|e) 1023*2e9d4914SAndroid Build Coastguard Worker shift; set dummy --mode execute ${1+"$@"}; shift 1024*2e9d4914SAndroid Build Coastguard Worker ;; 1025*2e9d4914SAndroid Build Coastguard Workerfinish|finis|fini|fin|fi|f) 1026*2e9d4914SAndroid Build Coastguard Worker shift; set dummy --mode finish ${1+"$@"}; shift 1027*2e9d4914SAndroid Build Coastguard Worker ;; 1028*2e9d4914SAndroid Build Coastguard Workerinstall|instal|insta|inst|ins|in|i) 1029*2e9d4914SAndroid Build Coastguard Worker shift; set dummy --mode install ${1+"$@"}; shift 1030*2e9d4914SAndroid Build Coastguard Worker ;; 1031*2e9d4914SAndroid Build Coastguard Workerlink|lin|li|l) 1032*2e9d4914SAndroid Build Coastguard Worker shift; set dummy --mode link ${1+"$@"}; shift 1033*2e9d4914SAndroid Build Coastguard Worker ;; 1034*2e9d4914SAndroid Build Coastguard Workeruninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 1035*2e9d4914SAndroid Build Coastguard Worker shift; set dummy --mode uninstall ${1+"$@"}; shift 1036*2e9d4914SAndroid Build Coastguard Worker ;; 1037*2e9d4914SAndroid Build Coastguard Workeresac 1038*2e9d4914SAndroid Build Coastguard Worker 1039*2e9d4914SAndroid Build Coastguard Worker 1040*2e9d4914SAndroid Build Coastguard Worker 1041*2e9d4914SAndroid Build Coastguard Worker# Option defaults: 1042*2e9d4914SAndroid Build Coastguard Workeropt_debug=: 1043*2e9d4914SAndroid Build Coastguard Workeropt_dry_run=false 1044*2e9d4914SAndroid Build Coastguard Workeropt_config=false 1045*2e9d4914SAndroid Build Coastguard Workeropt_preserve_dup_deps=false 1046*2e9d4914SAndroid Build Coastguard Workeropt_features=false 1047*2e9d4914SAndroid Build Coastguard Workeropt_finish=false 1048*2e9d4914SAndroid Build Coastguard Workeropt_help=false 1049*2e9d4914SAndroid Build Coastguard Workeropt_help_all=false 1050*2e9d4914SAndroid Build Coastguard Workeropt_silent=: 1051*2e9d4914SAndroid Build Coastguard Workeropt_warning=: 1052*2e9d4914SAndroid Build Coastguard Workeropt_verbose=: 1053*2e9d4914SAndroid Build Coastguard Workeropt_silent=false 1054*2e9d4914SAndroid Build Coastguard Workeropt_verbose=false 1055*2e9d4914SAndroid Build Coastguard Worker 1056*2e9d4914SAndroid Build Coastguard Worker 1057*2e9d4914SAndroid Build Coastguard Worker# Parse options once, thoroughly. This comes as soon as possible in the 1058*2e9d4914SAndroid Build Coastguard Worker# script to make things like `--version' happen as quickly as we can. 1059*2e9d4914SAndroid Build Coastguard Worker{ 1060*2e9d4914SAndroid Build Coastguard Worker # this just eases exit handling 1061*2e9d4914SAndroid Build Coastguard Worker while test $# -gt 0; do 1062*2e9d4914SAndroid Build Coastguard Worker opt="$1" 1063*2e9d4914SAndroid Build Coastguard Worker shift 1064*2e9d4914SAndroid Build Coastguard Worker case $opt in 1065*2e9d4914SAndroid Build Coastguard Worker --debug|-x) opt_debug='set -x' 1066*2e9d4914SAndroid Build Coastguard Worker func_echo "enabling shell trace mode" 1067*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1068*2e9d4914SAndroid Build Coastguard Worker ;; 1069*2e9d4914SAndroid Build Coastguard Worker --dry-run|--dryrun|-n) 1070*2e9d4914SAndroid Build Coastguard Worker opt_dry_run=: 1071*2e9d4914SAndroid Build Coastguard Worker ;; 1072*2e9d4914SAndroid Build Coastguard Worker --config) 1073*2e9d4914SAndroid Build Coastguard Worker opt_config=: 1074*2e9d4914SAndroid Build Coastguard Workerfunc_config 1075*2e9d4914SAndroid Build Coastguard Worker ;; 1076*2e9d4914SAndroid Build Coastguard Worker --dlopen|-dlopen) 1077*2e9d4914SAndroid Build Coastguard Worker optarg="$1" 1078*2e9d4914SAndroid Build Coastguard Worker opt_dlopen="${opt_dlopen+$opt_dlopen 1079*2e9d4914SAndroid Build Coastguard Worker}$optarg" 1080*2e9d4914SAndroid Build Coastguard Worker shift 1081*2e9d4914SAndroid Build Coastguard Worker ;; 1082*2e9d4914SAndroid Build Coastguard Worker --preserve-dup-deps) 1083*2e9d4914SAndroid Build Coastguard Worker opt_preserve_dup_deps=: 1084*2e9d4914SAndroid Build Coastguard Worker ;; 1085*2e9d4914SAndroid Build Coastguard Worker --features) 1086*2e9d4914SAndroid Build Coastguard Worker opt_features=: 1087*2e9d4914SAndroid Build Coastguard Workerfunc_features 1088*2e9d4914SAndroid Build Coastguard Worker ;; 1089*2e9d4914SAndroid Build Coastguard Worker --finish) 1090*2e9d4914SAndroid Build Coastguard Worker opt_finish=: 1091*2e9d4914SAndroid Build Coastguard Workerset dummy --mode finish ${1+"$@"}; shift 1092*2e9d4914SAndroid Build Coastguard Worker ;; 1093*2e9d4914SAndroid Build Coastguard Worker --help) 1094*2e9d4914SAndroid Build Coastguard Worker opt_help=: 1095*2e9d4914SAndroid Build Coastguard Worker ;; 1096*2e9d4914SAndroid Build Coastguard Worker --help-all) 1097*2e9d4914SAndroid Build Coastguard Worker opt_help_all=: 1098*2e9d4914SAndroid Build Coastguard Workeropt_help=': help-all' 1099*2e9d4914SAndroid Build Coastguard Worker ;; 1100*2e9d4914SAndroid Build Coastguard Worker --mode) 1101*2e9d4914SAndroid Build Coastguard Worker test $# = 0 && func_missing_arg $opt && break 1102*2e9d4914SAndroid Build Coastguard Worker optarg="$1" 1103*2e9d4914SAndroid Build Coastguard Worker opt_mode="$optarg" 1104*2e9d4914SAndroid Build Coastguard Workercase $optarg in 1105*2e9d4914SAndroid Build Coastguard Worker # Valid mode arguments: 1106*2e9d4914SAndroid Build Coastguard Worker clean|compile|execute|finish|install|link|relink|uninstall) ;; 1107*2e9d4914SAndroid Build Coastguard Worker 1108*2e9d4914SAndroid Build Coastguard Worker # Catch anything else as an error 1109*2e9d4914SAndroid Build Coastguard Worker *) func_error "invalid argument for $opt" 1110*2e9d4914SAndroid Build Coastguard Worker exit_cmd=exit 1111*2e9d4914SAndroid Build Coastguard Worker break 1112*2e9d4914SAndroid Build Coastguard Worker ;; 1113*2e9d4914SAndroid Build Coastguard Workeresac 1114*2e9d4914SAndroid Build Coastguard Worker shift 1115*2e9d4914SAndroid Build Coastguard Worker ;; 1116*2e9d4914SAndroid Build Coastguard Worker --no-silent|--no-quiet) 1117*2e9d4914SAndroid Build Coastguard Worker opt_silent=false 1118*2e9d4914SAndroid Build Coastguard Workerfunc_append preserve_args " $opt" 1119*2e9d4914SAndroid Build Coastguard Worker ;; 1120*2e9d4914SAndroid Build Coastguard Worker --no-warning|--no-warn) 1121*2e9d4914SAndroid Build Coastguard Worker opt_warning=false 1122*2e9d4914SAndroid Build Coastguard Workerfunc_append preserve_args " $opt" 1123*2e9d4914SAndroid Build Coastguard Worker ;; 1124*2e9d4914SAndroid Build Coastguard Worker --no-verbose) 1125*2e9d4914SAndroid Build Coastguard Worker opt_verbose=false 1126*2e9d4914SAndroid Build Coastguard Workerfunc_append preserve_args " $opt" 1127*2e9d4914SAndroid Build Coastguard Worker ;; 1128*2e9d4914SAndroid Build Coastguard Worker --silent|--quiet) 1129*2e9d4914SAndroid Build Coastguard Worker opt_silent=: 1130*2e9d4914SAndroid Build Coastguard Workerfunc_append preserve_args " $opt" 1131*2e9d4914SAndroid Build Coastguard Worker opt_verbose=false 1132*2e9d4914SAndroid Build Coastguard Worker ;; 1133*2e9d4914SAndroid Build Coastguard Worker --verbose|-v) 1134*2e9d4914SAndroid Build Coastguard Worker opt_verbose=: 1135*2e9d4914SAndroid Build Coastguard Workerfunc_append preserve_args " $opt" 1136*2e9d4914SAndroid Build Coastguard Workeropt_silent=false 1137*2e9d4914SAndroid Build Coastguard Worker ;; 1138*2e9d4914SAndroid Build Coastguard Worker --tag) 1139*2e9d4914SAndroid Build Coastguard Worker test $# = 0 && func_missing_arg $opt && break 1140*2e9d4914SAndroid Build Coastguard Worker optarg="$1" 1141*2e9d4914SAndroid Build Coastguard Worker opt_tag="$optarg" 1142*2e9d4914SAndroid Build Coastguard Workerfunc_append preserve_args " $opt $optarg" 1143*2e9d4914SAndroid Build Coastguard Workerfunc_enable_tag "$optarg" 1144*2e9d4914SAndroid Build Coastguard Worker shift 1145*2e9d4914SAndroid Build Coastguard Worker ;; 1146*2e9d4914SAndroid Build Coastguard Worker 1147*2e9d4914SAndroid Build Coastguard Worker -\?|-h) func_usage ;; 1148*2e9d4914SAndroid Build Coastguard Worker --help) func_help ;; 1149*2e9d4914SAndroid Build Coastguard Worker --version) func_version ;; 1150*2e9d4914SAndroid Build Coastguard Worker 1151*2e9d4914SAndroid Build Coastguard Worker # Separate optargs to long options: 1152*2e9d4914SAndroid Build Coastguard Worker --*=*) 1153*2e9d4914SAndroid Build Coastguard Worker func_split_long_opt "$opt" 1154*2e9d4914SAndroid Build Coastguard Worker set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1155*2e9d4914SAndroid Build Coastguard Worker shift 1156*2e9d4914SAndroid Build Coastguard Worker ;; 1157*2e9d4914SAndroid Build Coastguard Worker 1158*2e9d4914SAndroid Build Coastguard Worker # Separate non-argument short options: 1159*2e9d4914SAndroid Build Coastguard Worker -\?*|-h*|-n*|-v*) 1160*2e9d4914SAndroid Build Coastguard Worker func_split_short_opt "$opt" 1161*2e9d4914SAndroid Build Coastguard Worker set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 1162*2e9d4914SAndroid Build Coastguard Worker shift 1163*2e9d4914SAndroid Build Coastguard Worker ;; 1164*2e9d4914SAndroid Build Coastguard Worker 1165*2e9d4914SAndroid Build Coastguard Worker --) break ;; 1166*2e9d4914SAndroid Build Coastguard Worker -*) func_fatal_help "unrecognized option \`$opt'" ;; 1167*2e9d4914SAndroid Build Coastguard Worker *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1168*2e9d4914SAndroid Build Coastguard Worker esac 1169*2e9d4914SAndroid Build Coastguard Worker done 1170*2e9d4914SAndroid Build Coastguard Worker 1171*2e9d4914SAndroid Build Coastguard Worker # Validate options: 1172*2e9d4914SAndroid Build Coastguard Worker 1173*2e9d4914SAndroid Build Coastguard Worker # save first non-option argument 1174*2e9d4914SAndroid Build Coastguard Worker if test "$#" -gt 0; then 1175*2e9d4914SAndroid Build Coastguard Worker nonopt="$opt" 1176*2e9d4914SAndroid Build Coastguard Worker shift 1177*2e9d4914SAndroid Build Coastguard Worker fi 1178*2e9d4914SAndroid Build Coastguard Worker 1179*2e9d4914SAndroid Build Coastguard Worker # preserve --debug 1180*2e9d4914SAndroid Build Coastguard Worker test "$opt_debug" = : || func_append preserve_args " --debug" 1181*2e9d4914SAndroid Build Coastguard Worker 1182*2e9d4914SAndroid Build Coastguard Worker case $host in 1183*2e9d4914SAndroid Build Coastguard Worker *cygwin* | *mingw* | *pw32* | *cegcc*) 1184*2e9d4914SAndroid Build Coastguard Worker # don't eliminate duplications in $postdeps and $predeps 1185*2e9d4914SAndroid Build Coastguard Worker opt_duplicate_compiler_generated_deps=: 1186*2e9d4914SAndroid Build Coastguard Worker ;; 1187*2e9d4914SAndroid Build Coastguard Worker *) 1188*2e9d4914SAndroid Build Coastguard Worker opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1189*2e9d4914SAndroid Build Coastguard Worker ;; 1190*2e9d4914SAndroid Build Coastguard Worker esac 1191*2e9d4914SAndroid Build Coastguard Worker 1192*2e9d4914SAndroid Build Coastguard Worker $opt_help || { 1193*2e9d4914SAndroid Build Coastguard Worker # Sanity checks first: 1194*2e9d4914SAndroid Build Coastguard Worker func_check_version_match 1195*2e9d4914SAndroid Build Coastguard Worker 1196*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1197*2e9d4914SAndroid Build Coastguard Worker func_fatal_configuration "not configured to build any kind of library" 1198*2e9d4914SAndroid Build Coastguard Worker fi 1199*2e9d4914SAndroid Build Coastguard Worker 1200*2e9d4914SAndroid Build Coastguard Worker # Darwin sucks 1201*2e9d4914SAndroid Build Coastguard Worker eval std_shrext=\"$shrext_cmds\" 1202*2e9d4914SAndroid Build Coastguard Worker 1203*2e9d4914SAndroid Build Coastguard Worker # Only execute mode is allowed to have -dlopen flags. 1204*2e9d4914SAndroid Build Coastguard Worker if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 1205*2e9d4914SAndroid Build Coastguard Worker func_error "unrecognized option \`-dlopen'" 1206*2e9d4914SAndroid Build Coastguard Worker $ECHO "$help" 1>&2 1207*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_FAILURE 1208*2e9d4914SAndroid Build Coastguard Worker fi 1209*2e9d4914SAndroid Build Coastguard Worker 1210*2e9d4914SAndroid Build Coastguard Worker # Change the help message to a mode-specific one. 1211*2e9d4914SAndroid Build Coastguard Worker generic_help="$help" 1212*2e9d4914SAndroid Build Coastguard Worker help="Try \`$progname --help --mode=$opt_mode' for more information." 1213*2e9d4914SAndroid Build Coastguard Worker } 1214*2e9d4914SAndroid Build Coastguard Worker 1215*2e9d4914SAndroid Build Coastguard Worker 1216*2e9d4914SAndroid Build Coastguard Worker # Bail if the options were screwed 1217*2e9d4914SAndroid Build Coastguard Worker $exit_cmd $EXIT_FAILURE 1218*2e9d4914SAndroid Build Coastguard Worker} 1219*2e9d4914SAndroid Build Coastguard Worker 1220*2e9d4914SAndroid Build Coastguard Worker 1221*2e9d4914SAndroid Build Coastguard Worker 1222*2e9d4914SAndroid Build Coastguard Worker 1223*2e9d4914SAndroid Build Coastguard Worker## ----------- ## 1224*2e9d4914SAndroid Build Coastguard Worker## Main. ## 1225*2e9d4914SAndroid Build Coastguard Worker## ----------- ## 1226*2e9d4914SAndroid Build Coastguard Worker 1227*2e9d4914SAndroid Build Coastguard Worker# func_lalib_p file 1228*2e9d4914SAndroid Build Coastguard Worker# True iff FILE is a libtool `.la' library or `.lo' object file. 1229*2e9d4914SAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 1230*2e9d4914SAndroid Build Coastguard Worker# determined imposters. 1231*2e9d4914SAndroid Build Coastguard Workerfunc_lalib_p () 1232*2e9d4914SAndroid Build Coastguard Worker{ 1233*2e9d4914SAndroid Build Coastguard Worker test -f "$1" && 1234*2e9d4914SAndroid Build Coastguard Worker $SED -e 4q "$1" 2>/dev/null \ 1235*2e9d4914SAndroid Build Coastguard Worker | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236*2e9d4914SAndroid Build Coastguard Worker} 1237*2e9d4914SAndroid Build Coastguard Worker 1238*2e9d4914SAndroid Build Coastguard Worker# func_lalib_unsafe_p file 1239*2e9d4914SAndroid Build Coastguard Worker# True iff FILE is a libtool `.la' library or `.lo' object file. 1240*2e9d4914SAndroid Build Coastguard Worker# This function implements the same check as func_lalib_p without 1241*2e9d4914SAndroid Build Coastguard Worker# resorting to external programs. To this end, it redirects stdin and 1242*2e9d4914SAndroid Build Coastguard Worker# closes it afterwards, without saving the original file descriptor. 1243*2e9d4914SAndroid Build Coastguard Worker# As a safety measure, use it only where a negative result would be 1244*2e9d4914SAndroid Build Coastguard Worker# fatal anyway. Works if `file' does not exist. 1245*2e9d4914SAndroid Build Coastguard Workerfunc_lalib_unsafe_p () 1246*2e9d4914SAndroid Build Coastguard Worker{ 1247*2e9d4914SAndroid Build Coastguard Worker lalib_p=no 1248*2e9d4914SAndroid Build Coastguard Worker if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249*2e9d4914SAndroid Build Coastguard Worker for lalib_p_l in 1 2 3 4 1250*2e9d4914SAndroid Build Coastguard Worker do 1251*2e9d4914SAndroid Build Coastguard Worker read lalib_p_line 1252*2e9d4914SAndroid Build Coastguard Worker case "$lalib_p_line" in 1253*2e9d4914SAndroid Build Coastguard Worker \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254*2e9d4914SAndroid Build Coastguard Worker esac 1255*2e9d4914SAndroid Build Coastguard Worker done 1256*2e9d4914SAndroid Build Coastguard Worker exec 0<&5 5<&- 1257*2e9d4914SAndroid Build Coastguard Worker fi 1258*2e9d4914SAndroid Build Coastguard Worker test "$lalib_p" = yes 1259*2e9d4914SAndroid Build Coastguard Worker} 1260*2e9d4914SAndroid Build Coastguard Worker 1261*2e9d4914SAndroid Build Coastguard Worker# func_ltwrapper_script_p file 1262*2e9d4914SAndroid Build Coastguard Worker# True iff FILE is a libtool wrapper script 1263*2e9d4914SAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 1264*2e9d4914SAndroid Build Coastguard Worker# determined imposters. 1265*2e9d4914SAndroid Build Coastguard Workerfunc_ltwrapper_script_p () 1266*2e9d4914SAndroid Build Coastguard Worker{ 1267*2e9d4914SAndroid Build Coastguard Worker func_lalib_p "$1" 1268*2e9d4914SAndroid Build Coastguard Worker} 1269*2e9d4914SAndroid Build Coastguard Worker 1270*2e9d4914SAndroid Build Coastguard Worker# func_ltwrapper_executable_p file 1271*2e9d4914SAndroid Build Coastguard Worker# True iff FILE is a libtool wrapper executable 1272*2e9d4914SAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 1273*2e9d4914SAndroid Build Coastguard Worker# determined imposters. 1274*2e9d4914SAndroid Build Coastguard Workerfunc_ltwrapper_executable_p () 1275*2e9d4914SAndroid Build Coastguard Worker{ 1276*2e9d4914SAndroid Build Coastguard Worker func_ltwrapper_exec_suffix= 1277*2e9d4914SAndroid Build Coastguard Worker case $1 in 1278*2e9d4914SAndroid Build Coastguard Worker *.exe) ;; 1279*2e9d4914SAndroid Build Coastguard Worker *) func_ltwrapper_exec_suffix=.exe ;; 1280*2e9d4914SAndroid Build Coastguard Worker esac 1281*2e9d4914SAndroid Build Coastguard Worker $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282*2e9d4914SAndroid Build Coastguard Worker} 1283*2e9d4914SAndroid Build Coastguard Worker 1284*2e9d4914SAndroid Build Coastguard Worker# func_ltwrapper_scriptname file 1285*2e9d4914SAndroid Build Coastguard Worker# Assumes file is an ltwrapper_executable 1286*2e9d4914SAndroid Build Coastguard Worker# uses $file to determine the appropriate filename for a 1287*2e9d4914SAndroid Build Coastguard Worker# temporary ltwrapper_script. 1288*2e9d4914SAndroid Build Coastguard Workerfunc_ltwrapper_scriptname () 1289*2e9d4914SAndroid Build Coastguard Worker{ 1290*2e9d4914SAndroid Build Coastguard Worker func_dirname_and_basename "$1" "" "." 1291*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '.exe' "$func_basename_result" 1292*2e9d4914SAndroid Build Coastguard Worker func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293*2e9d4914SAndroid Build Coastguard Worker} 1294*2e9d4914SAndroid Build Coastguard Worker 1295*2e9d4914SAndroid Build Coastguard Worker# func_ltwrapper_p file 1296*2e9d4914SAndroid Build Coastguard Worker# True iff FILE is a libtool wrapper script or wrapper executable 1297*2e9d4914SAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 1298*2e9d4914SAndroid Build Coastguard Worker# determined imposters. 1299*2e9d4914SAndroid Build Coastguard Workerfunc_ltwrapper_p () 1300*2e9d4914SAndroid Build Coastguard Worker{ 1301*2e9d4914SAndroid Build Coastguard Worker func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302*2e9d4914SAndroid Build Coastguard Worker} 1303*2e9d4914SAndroid Build Coastguard Worker 1304*2e9d4914SAndroid Build Coastguard Worker 1305*2e9d4914SAndroid Build Coastguard Worker# func_execute_cmds commands fail_cmd 1306*2e9d4914SAndroid Build Coastguard Worker# Execute tilde-delimited COMMANDS. 1307*2e9d4914SAndroid Build Coastguard Worker# If FAIL_CMD is given, eval that upon failure. 1308*2e9d4914SAndroid Build Coastguard Worker# FAIL_CMD may read-access the current command in variable CMD! 1309*2e9d4914SAndroid Build Coastguard Workerfunc_execute_cmds () 1310*2e9d4914SAndroid Build Coastguard Worker{ 1311*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1312*2e9d4914SAndroid Build Coastguard Worker save_ifs=$IFS; IFS='~' 1313*2e9d4914SAndroid Build Coastguard Worker for cmd in $1; do 1314*2e9d4914SAndroid Build Coastguard Worker IFS=$save_ifs 1315*2e9d4914SAndroid Build Coastguard Worker eval cmd=\"$cmd\" 1316*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$cmd" "${2-:}" 1317*2e9d4914SAndroid Build Coastguard Worker done 1318*2e9d4914SAndroid Build Coastguard Worker IFS=$save_ifs 1319*2e9d4914SAndroid Build Coastguard Worker} 1320*2e9d4914SAndroid Build Coastguard Worker 1321*2e9d4914SAndroid Build Coastguard Worker 1322*2e9d4914SAndroid Build Coastguard Worker# func_source file 1323*2e9d4914SAndroid Build Coastguard Worker# Source FILE, adding directory component if necessary. 1324*2e9d4914SAndroid Build Coastguard Worker# Note that it is not necessary on cygwin/mingw to append a dot to 1325*2e9d4914SAndroid Build Coastguard Worker# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326*2e9d4914SAndroid Build Coastguard Worker# behavior happens only for exec(3), not for open(2)! Also, sourcing 1327*2e9d4914SAndroid Build Coastguard Worker# `FILE.' does not work on cygwin managed mounts. 1328*2e9d4914SAndroid Build Coastguard Workerfunc_source () 1329*2e9d4914SAndroid Build Coastguard Worker{ 1330*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1331*2e9d4914SAndroid Build Coastguard Worker case $1 in 1332*2e9d4914SAndroid Build Coastguard Worker */* | *\\*) . "$1" ;; 1333*2e9d4914SAndroid Build Coastguard Worker *) . "./$1" ;; 1334*2e9d4914SAndroid Build Coastguard Worker esac 1335*2e9d4914SAndroid Build Coastguard Worker} 1336*2e9d4914SAndroid Build Coastguard Worker 1337*2e9d4914SAndroid Build Coastguard Worker 1338*2e9d4914SAndroid Build Coastguard Worker# func_resolve_sysroot PATH 1339*2e9d4914SAndroid Build Coastguard Worker# Replace a leading = in PATH with a sysroot. Store the result into 1340*2e9d4914SAndroid Build Coastguard Worker# func_resolve_sysroot_result 1341*2e9d4914SAndroid Build Coastguard Workerfunc_resolve_sysroot () 1342*2e9d4914SAndroid Build Coastguard Worker{ 1343*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot_result=$1 1344*2e9d4914SAndroid Build Coastguard Worker case $func_resolve_sysroot_result in 1345*2e9d4914SAndroid Build Coastguard Worker =*) 1346*2e9d4914SAndroid Build Coastguard Worker func_stripname '=' '' "$func_resolve_sysroot_result" 1347*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 1348*2e9d4914SAndroid Build Coastguard Worker ;; 1349*2e9d4914SAndroid Build Coastguard Worker esac 1350*2e9d4914SAndroid Build Coastguard Worker} 1351*2e9d4914SAndroid Build Coastguard Worker 1352*2e9d4914SAndroid Build Coastguard Worker# func_replace_sysroot PATH 1353*2e9d4914SAndroid Build Coastguard Worker# If PATH begins with the sysroot, replace it with = and 1354*2e9d4914SAndroid Build Coastguard Worker# store the result into func_replace_sysroot_result. 1355*2e9d4914SAndroid Build Coastguard Workerfunc_replace_sysroot () 1356*2e9d4914SAndroid Build Coastguard Worker{ 1357*2e9d4914SAndroid Build Coastguard Worker case "$lt_sysroot:$1" in 1358*2e9d4914SAndroid Build Coastguard Worker ?*:"$lt_sysroot"*) 1359*2e9d4914SAndroid Build Coastguard Worker func_stripname "$lt_sysroot" '' "$1" 1360*2e9d4914SAndroid Build Coastguard Worker func_replace_sysroot_result="=$func_stripname_result" 1361*2e9d4914SAndroid Build Coastguard Worker ;; 1362*2e9d4914SAndroid Build Coastguard Worker *) 1363*2e9d4914SAndroid Build Coastguard Worker # Including no sysroot. 1364*2e9d4914SAndroid Build Coastguard Worker func_replace_sysroot_result=$1 1365*2e9d4914SAndroid Build Coastguard Worker ;; 1366*2e9d4914SAndroid Build Coastguard Worker esac 1367*2e9d4914SAndroid Build Coastguard Worker} 1368*2e9d4914SAndroid Build Coastguard Worker 1369*2e9d4914SAndroid Build Coastguard Worker# func_infer_tag arg 1370*2e9d4914SAndroid Build Coastguard Worker# Infer tagged configuration to use if any are available and 1371*2e9d4914SAndroid Build Coastguard Worker# if one wasn't chosen via the "--tag" command line option. 1372*2e9d4914SAndroid Build Coastguard Worker# Only attempt this if the compiler in the base compile 1373*2e9d4914SAndroid Build Coastguard Worker# command doesn't match the default compiler. 1374*2e9d4914SAndroid Build Coastguard Worker# arg is usually of the form 'gcc ...' 1375*2e9d4914SAndroid Build Coastguard Workerfunc_infer_tag () 1376*2e9d4914SAndroid Build Coastguard Worker{ 1377*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1378*2e9d4914SAndroid Build Coastguard Worker if test -n "$available_tags" && test -z "$tagname"; then 1379*2e9d4914SAndroid Build Coastguard Worker CC_quoted= 1380*2e9d4914SAndroid Build Coastguard Worker for arg in $CC; do 1381*2e9d4914SAndroid Build Coastguard Worker func_append_quoted CC_quoted "$arg" 1382*2e9d4914SAndroid Build Coastguard Worker done 1383*2e9d4914SAndroid Build Coastguard Worker CC_expanded=`func_echo_all $CC` 1384*2e9d4914SAndroid Build Coastguard Worker CC_quoted_expanded=`func_echo_all $CC_quoted` 1385*2e9d4914SAndroid Build Coastguard Worker case $@ in 1386*2e9d4914SAndroid Build Coastguard Worker # Blanks in the command may have been stripped by the calling shell, 1387*2e9d4914SAndroid Build Coastguard Worker # but not from the CC environment variable when configure was run. 1388*2e9d4914SAndroid Build Coastguard Worker " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1389*2e9d4914SAndroid Build Coastguard Worker " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390*2e9d4914SAndroid Build Coastguard Worker # Blanks at the start of $base_compile will cause this to fail 1391*2e9d4914SAndroid Build Coastguard Worker # if we don't check for them as well. 1392*2e9d4914SAndroid Build Coastguard Worker *) 1393*2e9d4914SAndroid Build Coastguard Worker for z in $available_tags; do 1394*2e9d4914SAndroid Build Coastguard Worker if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395*2e9d4914SAndroid Build Coastguard Worker # Evaluate the configuration. 1396*2e9d4914SAndroid Build Coastguard Worker eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397*2e9d4914SAndroid Build Coastguard Worker CC_quoted= 1398*2e9d4914SAndroid Build Coastguard Worker for arg in $CC; do 1399*2e9d4914SAndroid Build Coastguard Worker # Double-quote args containing other shell metacharacters. 1400*2e9d4914SAndroid Build Coastguard Worker func_append_quoted CC_quoted "$arg" 1401*2e9d4914SAndroid Build Coastguard Worker done 1402*2e9d4914SAndroid Build Coastguard Worker CC_expanded=`func_echo_all $CC` 1403*2e9d4914SAndroid Build Coastguard Worker CC_quoted_expanded=`func_echo_all $CC_quoted` 1404*2e9d4914SAndroid Build Coastguard Worker case "$@ " in 1405*2e9d4914SAndroid Build Coastguard Worker " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1406*2e9d4914SAndroid Build Coastguard Worker " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407*2e9d4914SAndroid Build Coastguard Worker # The compiler in the base compile command matches 1408*2e9d4914SAndroid Build Coastguard Worker # the one in the tagged configuration. 1409*2e9d4914SAndroid Build Coastguard Worker # Assume this is the tagged configuration we want. 1410*2e9d4914SAndroid Build Coastguard Worker tagname=$z 1411*2e9d4914SAndroid Build Coastguard Worker break 1412*2e9d4914SAndroid Build Coastguard Worker ;; 1413*2e9d4914SAndroid Build Coastguard Worker esac 1414*2e9d4914SAndroid Build Coastguard Worker fi 1415*2e9d4914SAndroid Build Coastguard Worker done 1416*2e9d4914SAndroid Build Coastguard Worker # If $tagname still isn't set, then no tagged configuration 1417*2e9d4914SAndroid Build Coastguard Worker # was found and let the user know that the "--tag" command 1418*2e9d4914SAndroid Build Coastguard Worker # line option must be used. 1419*2e9d4914SAndroid Build Coastguard Worker if test -z "$tagname"; then 1420*2e9d4914SAndroid Build Coastguard Worker func_echo "unable to infer tagged configuration" 1421*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "specify a tag with \`--tag'" 1422*2e9d4914SAndroid Build Coastguard Worker# else 1423*2e9d4914SAndroid Build Coastguard Worker# func_verbose "using $tagname tagged configuration" 1424*2e9d4914SAndroid Build Coastguard Worker fi 1425*2e9d4914SAndroid Build Coastguard Worker ;; 1426*2e9d4914SAndroid Build Coastguard Worker esac 1427*2e9d4914SAndroid Build Coastguard Worker fi 1428*2e9d4914SAndroid Build Coastguard Worker} 1429*2e9d4914SAndroid Build Coastguard Worker 1430*2e9d4914SAndroid Build Coastguard Worker 1431*2e9d4914SAndroid Build Coastguard Worker 1432*2e9d4914SAndroid Build Coastguard Worker# func_write_libtool_object output_name pic_name nonpic_name 1433*2e9d4914SAndroid Build Coastguard Worker# Create a libtool object file (analogous to a ".la" file), 1434*2e9d4914SAndroid Build Coastguard Worker# but don't create it if we're doing a dry run. 1435*2e9d4914SAndroid Build Coastguard Workerfunc_write_libtool_object () 1436*2e9d4914SAndroid Build Coastguard Worker{ 1437*2e9d4914SAndroid Build Coastguard Worker write_libobj=${1} 1438*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = yes; then 1439*2e9d4914SAndroid Build Coastguard Worker write_lobj=\'${2}\' 1440*2e9d4914SAndroid Build Coastguard Worker else 1441*2e9d4914SAndroid Build Coastguard Worker write_lobj=none 1442*2e9d4914SAndroid Build Coastguard Worker fi 1443*2e9d4914SAndroid Build Coastguard Worker 1444*2e9d4914SAndroid Build Coastguard Worker if test "$build_old_libs" = yes; then 1445*2e9d4914SAndroid Build Coastguard Worker write_oldobj=\'${3}\' 1446*2e9d4914SAndroid Build Coastguard Worker else 1447*2e9d4914SAndroid Build Coastguard Worker write_oldobj=none 1448*2e9d4914SAndroid Build Coastguard Worker fi 1449*2e9d4914SAndroid Build Coastguard Worker 1450*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 1451*2e9d4914SAndroid Build Coastguard Worker cat >${write_libobj}T <<EOF 1452*2e9d4914SAndroid Build Coastguard Worker# $write_libobj - a libtool object file 1453*2e9d4914SAndroid Build Coastguard Worker# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454*2e9d4914SAndroid Build Coastguard Worker# 1455*2e9d4914SAndroid Build Coastguard Worker# Please DO NOT delete this file! 1456*2e9d4914SAndroid Build Coastguard Worker# It is necessary for linking the library. 1457*2e9d4914SAndroid Build Coastguard Worker 1458*2e9d4914SAndroid Build Coastguard Worker# Name of the PIC object. 1459*2e9d4914SAndroid Build Coastguard Workerpic_object=$write_lobj 1460*2e9d4914SAndroid Build Coastguard Worker 1461*2e9d4914SAndroid Build Coastguard Worker# Name of the non-PIC object 1462*2e9d4914SAndroid Build Coastguard Workernon_pic_object=$write_oldobj 1463*2e9d4914SAndroid Build Coastguard Worker 1464*2e9d4914SAndroid Build Coastguard WorkerEOF 1465*2e9d4914SAndroid Build Coastguard Worker $MV "${write_libobj}T" "${write_libobj}" 1466*2e9d4914SAndroid Build Coastguard Worker } 1467*2e9d4914SAndroid Build Coastguard Worker} 1468*2e9d4914SAndroid Build Coastguard Worker 1469*2e9d4914SAndroid Build Coastguard Worker 1470*2e9d4914SAndroid Build Coastguard Worker################################################## 1471*2e9d4914SAndroid Build Coastguard Worker# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 1472*2e9d4914SAndroid Build Coastguard Worker################################################## 1473*2e9d4914SAndroid Build Coastguard Worker 1474*2e9d4914SAndroid Build Coastguard Worker# func_convert_core_file_wine_to_w32 ARG 1475*2e9d4914SAndroid Build Coastguard Worker# Helper function used by file name conversion functions when $build is *nix, 1476*2e9d4914SAndroid Build Coastguard Worker# and $host is mingw, cygwin, or some other w32 environment. Relies on a 1477*2e9d4914SAndroid Build Coastguard Worker# correctly configured wine environment available, with the winepath program 1478*2e9d4914SAndroid Build Coastguard Worker# in $build's $PATH. 1479*2e9d4914SAndroid Build Coastguard Worker# 1480*2e9d4914SAndroid Build Coastguard Worker# ARG is the $build file name to be converted to w32 format. 1481*2e9d4914SAndroid Build Coastguard Worker# Result is available in $func_convert_core_file_wine_to_w32_result, and will 1482*2e9d4914SAndroid Build Coastguard Worker# be empty on error (or when ARG is empty) 1483*2e9d4914SAndroid Build Coastguard Workerfunc_convert_core_file_wine_to_w32 () 1484*2e9d4914SAndroid Build Coastguard Worker{ 1485*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1486*2e9d4914SAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_result="$1" 1487*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1488*2e9d4914SAndroid Build Coastguard Worker # Unfortunately, winepath does not exit with a non-zero error code, so we 1489*2e9d4914SAndroid Build Coastguard Worker # are forced to check the contents of stdout. On the other hand, if the 1490*2e9d4914SAndroid Build Coastguard Worker # command is not found, the shell will set an exit code of 127 and print 1491*2e9d4914SAndroid Build Coastguard Worker # *an error message* to stdout. So we must check for both error code of 1492*2e9d4914SAndroid Build Coastguard Worker # zero AND non-empty stdout, which explains the odd construction: 1493*2e9d4914SAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 1494*2e9d4914SAndroid Build Coastguard Worker if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 1495*2e9d4914SAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 1496*2e9d4914SAndroid Build Coastguard Worker $SED -e "$lt_sed_naive_backslashify"` 1497*2e9d4914SAndroid Build Coastguard Worker else 1498*2e9d4914SAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_result= 1499*2e9d4914SAndroid Build Coastguard Worker fi 1500*2e9d4914SAndroid Build Coastguard Worker fi 1501*2e9d4914SAndroid Build Coastguard Worker} 1502*2e9d4914SAndroid Build Coastguard Worker# end: func_convert_core_file_wine_to_w32 1503*2e9d4914SAndroid Build Coastguard Worker 1504*2e9d4914SAndroid Build Coastguard Worker 1505*2e9d4914SAndroid Build Coastguard Worker# func_convert_core_path_wine_to_w32 ARG 1506*2e9d4914SAndroid Build Coastguard Worker# Helper function used by path conversion functions when $build is *nix, and 1507*2e9d4914SAndroid Build Coastguard Worker# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 1508*2e9d4914SAndroid Build Coastguard Worker# configured wine environment available, with the winepath program in $build's 1509*2e9d4914SAndroid Build Coastguard Worker# $PATH. Assumes ARG has no leading or trailing path separator characters. 1510*2e9d4914SAndroid Build Coastguard Worker# 1511*2e9d4914SAndroid Build Coastguard Worker# ARG is path to be converted from $build format to win32. 1512*2e9d4914SAndroid Build Coastguard Worker# Result is available in $func_convert_core_path_wine_to_w32_result. 1513*2e9d4914SAndroid Build Coastguard Worker# Unconvertible file (directory) names in ARG are skipped; if no directory names 1514*2e9d4914SAndroid Build Coastguard Worker# are convertible, then the result may be empty. 1515*2e9d4914SAndroid Build Coastguard Workerfunc_convert_core_path_wine_to_w32 () 1516*2e9d4914SAndroid Build Coastguard Worker{ 1517*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1518*2e9d4914SAndroid Build Coastguard Worker # unfortunately, winepath doesn't convert paths, only file names 1519*2e9d4914SAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32_result="" 1520*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1521*2e9d4914SAndroid Build Coastguard Worker oldIFS=$IFS 1522*2e9d4914SAndroid Build Coastguard Worker IFS=: 1523*2e9d4914SAndroid Build Coastguard Worker for func_convert_core_path_wine_to_w32_f in $1; do 1524*2e9d4914SAndroid Build Coastguard Worker IFS=$oldIFS 1525*2e9d4914SAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 1526*2e9d4914SAndroid Build Coastguard Worker if test -n "$func_convert_core_file_wine_to_w32_result" ; then 1527*2e9d4914SAndroid Build Coastguard Worker if test -z "$func_convert_core_path_wine_to_w32_result"; then 1528*2e9d4914SAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 1529*2e9d4914SAndroid Build Coastguard Worker else 1530*2e9d4914SAndroid Build Coastguard Worker func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 1531*2e9d4914SAndroid Build Coastguard Worker fi 1532*2e9d4914SAndroid Build Coastguard Worker fi 1533*2e9d4914SAndroid Build Coastguard Worker done 1534*2e9d4914SAndroid Build Coastguard Worker IFS=$oldIFS 1535*2e9d4914SAndroid Build Coastguard Worker fi 1536*2e9d4914SAndroid Build Coastguard Worker} 1537*2e9d4914SAndroid Build Coastguard Worker# end: func_convert_core_path_wine_to_w32 1538*2e9d4914SAndroid Build Coastguard Worker 1539*2e9d4914SAndroid Build Coastguard Worker 1540*2e9d4914SAndroid Build Coastguard Worker# func_cygpath ARGS... 1541*2e9d4914SAndroid Build Coastguard Worker# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 1542*2e9d4914SAndroid Build Coastguard Worker# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 1543*2e9d4914SAndroid Build Coastguard Worker# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 1544*2e9d4914SAndroid Build Coastguard Worker# (2), returns the Cygwin file name or path in func_cygpath_result (input 1545*2e9d4914SAndroid Build Coastguard Worker# file name or path is assumed to be in w32 format, as previously converted 1546*2e9d4914SAndroid Build Coastguard Worker# from $build's *nix or MSYS format). In case (3), returns the w32 file name 1547*2e9d4914SAndroid Build Coastguard Worker# or path in func_cygpath_result (input file name or path is assumed to be in 1548*2e9d4914SAndroid Build Coastguard Worker# Cygwin format). Returns an empty string on error. 1549*2e9d4914SAndroid Build Coastguard Worker# 1550*2e9d4914SAndroid Build Coastguard Worker# ARGS are passed to cygpath, with the last one being the file name or path to 1551*2e9d4914SAndroid Build Coastguard Worker# be converted. 1552*2e9d4914SAndroid Build Coastguard Worker# 1553*2e9d4914SAndroid Build Coastguard Worker# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 1554*2e9d4914SAndroid Build Coastguard Worker# environment variable; do not put it in $PATH. 1555*2e9d4914SAndroid Build Coastguard Workerfunc_cygpath () 1556*2e9d4914SAndroid Build Coastguard Worker{ 1557*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1558*2e9d4914SAndroid Build Coastguard Worker if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 1559*2e9d4914SAndroid Build Coastguard Worker func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 1560*2e9d4914SAndroid Build Coastguard Worker if test "$?" -ne 0; then 1561*2e9d4914SAndroid Build Coastguard Worker # on failure, ensure result is empty 1562*2e9d4914SAndroid Build Coastguard Worker func_cygpath_result= 1563*2e9d4914SAndroid Build Coastguard Worker fi 1564*2e9d4914SAndroid Build Coastguard Worker else 1565*2e9d4914SAndroid Build Coastguard Worker func_cygpath_result= 1566*2e9d4914SAndroid Build Coastguard Worker func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 1567*2e9d4914SAndroid Build Coastguard Worker fi 1568*2e9d4914SAndroid Build Coastguard Worker} 1569*2e9d4914SAndroid Build Coastguard Worker#end: func_cygpath 1570*2e9d4914SAndroid Build Coastguard Worker 1571*2e9d4914SAndroid Build Coastguard Worker 1572*2e9d4914SAndroid Build Coastguard Worker# func_convert_core_msys_to_w32 ARG 1573*2e9d4914SAndroid Build Coastguard Worker# Convert file name or path ARG from MSYS format to w32 format. Return 1574*2e9d4914SAndroid Build Coastguard Worker# result in func_convert_core_msys_to_w32_result. 1575*2e9d4914SAndroid Build Coastguard Workerfunc_convert_core_msys_to_w32 () 1576*2e9d4914SAndroid Build Coastguard Worker{ 1577*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1578*2e9d4914SAndroid Build Coastguard Worker # awkward: cmd appends spaces to result 1579*2e9d4914SAndroid Build Coastguard Worker func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 1580*2e9d4914SAndroid Build Coastguard Worker $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 1581*2e9d4914SAndroid Build Coastguard Worker} 1582*2e9d4914SAndroid Build Coastguard Worker#end: func_convert_core_msys_to_w32 1583*2e9d4914SAndroid Build Coastguard Worker 1584*2e9d4914SAndroid Build Coastguard Worker 1585*2e9d4914SAndroid Build Coastguard Worker# func_convert_file_check ARG1 ARG2 1586*2e9d4914SAndroid Build Coastguard Worker# Verify that ARG1 (a file name in $build format) was converted to $host 1587*2e9d4914SAndroid Build Coastguard Worker# format in ARG2. Otherwise, emit an error message, but continue (resetting 1588*2e9d4914SAndroid Build Coastguard Worker# func_to_host_file_result to ARG1). 1589*2e9d4914SAndroid Build Coastguard Workerfunc_convert_file_check () 1590*2e9d4914SAndroid Build Coastguard Worker{ 1591*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1592*2e9d4914SAndroid Build Coastguard Worker if test -z "$2" && test -n "$1" ; then 1593*2e9d4914SAndroid Build Coastguard Worker func_error "Could not determine host file name corresponding to" 1594*2e9d4914SAndroid Build Coastguard Worker func_error " \`$1'" 1595*2e9d4914SAndroid Build Coastguard Worker func_error "Continuing, but uninstalled executables may not work." 1596*2e9d4914SAndroid Build Coastguard Worker # Fallback: 1597*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$1" 1598*2e9d4914SAndroid Build Coastguard Worker fi 1599*2e9d4914SAndroid Build Coastguard Worker} 1600*2e9d4914SAndroid Build Coastguard Worker# end func_convert_file_check 1601*2e9d4914SAndroid Build Coastguard Worker 1602*2e9d4914SAndroid Build Coastguard Worker 1603*2e9d4914SAndroid Build Coastguard Worker# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 1604*2e9d4914SAndroid Build Coastguard Worker# Verify that FROM_PATH (a path in $build format) was converted to $host 1605*2e9d4914SAndroid Build Coastguard Worker# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 1606*2e9d4914SAndroid Build Coastguard Worker# func_to_host_file_result to a simplistic fallback value (see below). 1607*2e9d4914SAndroid Build Coastguard Workerfunc_convert_path_check () 1608*2e9d4914SAndroid Build Coastguard Worker{ 1609*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1610*2e9d4914SAndroid Build Coastguard Worker if test -z "$4" && test -n "$3"; then 1611*2e9d4914SAndroid Build Coastguard Worker func_error "Could not determine the host path corresponding to" 1612*2e9d4914SAndroid Build Coastguard Worker func_error " \`$3'" 1613*2e9d4914SAndroid Build Coastguard Worker func_error "Continuing, but uninstalled executables may not work." 1614*2e9d4914SAndroid Build Coastguard Worker # Fallback. This is a deliberately simplistic "conversion" and 1615*2e9d4914SAndroid Build Coastguard Worker # should not be "improved". See libtool.info. 1616*2e9d4914SAndroid Build Coastguard Worker if test "x$1" != "x$2"; then 1617*2e9d4914SAndroid Build Coastguard Worker lt_replace_pathsep_chars="s|$1|$2|g" 1618*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result=`echo "$3" | 1619*2e9d4914SAndroid Build Coastguard Worker $SED -e "$lt_replace_pathsep_chars"` 1620*2e9d4914SAndroid Build Coastguard Worker else 1621*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$3" 1622*2e9d4914SAndroid Build Coastguard Worker fi 1623*2e9d4914SAndroid Build Coastguard Worker fi 1624*2e9d4914SAndroid Build Coastguard Worker} 1625*2e9d4914SAndroid Build Coastguard Worker# end func_convert_path_check 1626*2e9d4914SAndroid Build Coastguard Worker 1627*2e9d4914SAndroid Build Coastguard Worker 1628*2e9d4914SAndroid Build Coastguard Worker# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 1629*2e9d4914SAndroid Build Coastguard Worker# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 1630*2e9d4914SAndroid Build Coastguard Worker# and appending REPL if ORIG matches BACKPAT. 1631*2e9d4914SAndroid Build Coastguard Workerfunc_convert_path_front_back_pathsep () 1632*2e9d4914SAndroid Build Coastguard Worker{ 1633*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1634*2e9d4914SAndroid Build Coastguard Worker case $4 in 1635*2e9d4914SAndroid Build Coastguard Worker $1 ) func_to_host_path_result="$3$func_to_host_path_result" 1636*2e9d4914SAndroid Build Coastguard Worker ;; 1637*2e9d4914SAndroid Build Coastguard Worker esac 1638*2e9d4914SAndroid Build Coastguard Worker case $4 in 1639*2e9d4914SAndroid Build Coastguard Worker $2 ) func_append func_to_host_path_result "$3" 1640*2e9d4914SAndroid Build Coastguard Worker ;; 1641*2e9d4914SAndroid Build Coastguard Worker esac 1642*2e9d4914SAndroid Build Coastguard Worker} 1643*2e9d4914SAndroid Build Coastguard Worker# end func_convert_path_front_back_pathsep 1644*2e9d4914SAndroid Build Coastguard Worker 1645*2e9d4914SAndroid Build Coastguard Worker 1646*2e9d4914SAndroid Build Coastguard Worker################################################## 1647*2e9d4914SAndroid Build Coastguard Worker# $build to $host FILE NAME CONVERSION FUNCTIONS # 1648*2e9d4914SAndroid Build Coastguard Worker################################################## 1649*2e9d4914SAndroid Build Coastguard Worker# invoked via `$to_host_file_cmd ARG' 1650*2e9d4914SAndroid Build Coastguard Worker# 1651*2e9d4914SAndroid Build Coastguard Worker# In each case, ARG is the path to be converted from $build to $host format. 1652*2e9d4914SAndroid Build Coastguard Worker# Result will be available in $func_to_host_file_result. 1653*2e9d4914SAndroid Build Coastguard Worker 1654*2e9d4914SAndroid Build Coastguard Worker 1655*2e9d4914SAndroid Build Coastguard Worker# func_to_host_file ARG 1656*2e9d4914SAndroid Build Coastguard Worker# Converts the file name ARG from $build format to $host format. Return result 1657*2e9d4914SAndroid Build Coastguard Worker# in func_to_host_file_result. 1658*2e9d4914SAndroid Build Coastguard Workerfunc_to_host_file () 1659*2e9d4914SAndroid Build Coastguard Worker{ 1660*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1661*2e9d4914SAndroid Build Coastguard Worker $to_host_file_cmd "$1" 1662*2e9d4914SAndroid Build Coastguard Worker} 1663*2e9d4914SAndroid Build Coastguard Worker# end func_to_host_file 1664*2e9d4914SAndroid Build Coastguard Worker 1665*2e9d4914SAndroid Build Coastguard Worker 1666*2e9d4914SAndroid Build Coastguard Worker# func_to_tool_file ARG LAZY 1667*2e9d4914SAndroid Build Coastguard Worker# converts the file name ARG from $build format to toolchain format. Return 1668*2e9d4914SAndroid Build Coastguard Worker# result in func_to_tool_file_result. If the conversion in use is listed 1669*2e9d4914SAndroid Build Coastguard Worker# in (the comma separated) LAZY, no conversion takes place. 1670*2e9d4914SAndroid Build Coastguard Workerfunc_to_tool_file () 1671*2e9d4914SAndroid Build Coastguard Worker{ 1672*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1673*2e9d4914SAndroid Build Coastguard Worker case ,$2, in 1674*2e9d4914SAndroid Build Coastguard Worker *,"$to_tool_file_cmd",*) 1675*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file_result=$1 1676*2e9d4914SAndroid Build Coastguard Worker ;; 1677*2e9d4914SAndroid Build Coastguard Worker *) 1678*2e9d4914SAndroid Build Coastguard Worker $to_tool_file_cmd "$1" 1679*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file_result=$func_to_host_file_result 1680*2e9d4914SAndroid Build Coastguard Worker ;; 1681*2e9d4914SAndroid Build Coastguard Worker esac 1682*2e9d4914SAndroid Build Coastguard Worker} 1683*2e9d4914SAndroid Build Coastguard Worker# end func_to_tool_file 1684*2e9d4914SAndroid Build Coastguard Worker 1685*2e9d4914SAndroid Build Coastguard Worker 1686*2e9d4914SAndroid Build Coastguard Worker# func_convert_file_noop ARG 1687*2e9d4914SAndroid Build Coastguard Worker# Copy ARG to func_to_host_file_result. 1688*2e9d4914SAndroid Build Coastguard Workerfunc_convert_file_noop () 1689*2e9d4914SAndroid Build Coastguard Worker{ 1690*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$1" 1691*2e9d4914SAndroid Build Coastguard Worker} 1692*2e9d4914SAndroid Build Coastguard Worker# end func_convert_file_noop 1693*2e9d4914SAndroid Build Coastguard Worker 1694*2e9d4914SAndroid Build Coastguard Worker 1695*2e9d4914SAndroid Build Coastguard Worker# func_convert_file_msys_to_w32 ARG 1696*2e9d4914SAndroid Build Coastguard Worker# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 1697*2e9d4914SAndroid Build Coastguard Worker# conversion to w32 is not available inside the cwrapper. Returns result in 1698*2e9d4914SAndroid Build Coastguard Worker# func_to_host_file_result. 1699*2e9d4914SAndroid Build Coastguard Workerfunc_convert_file_msys_to_w32 () 1700*2e9d4914SAndroid Build Coastguard Worker{ 1701*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1702*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$1" 1703*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1704*2e9d4914SAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$1" 1705*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$func_convert_core_msys_to_w32_result" 1706*2e9d4914SAndroid Build Coastguard Worker fi 1707*2e9d4914SAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 1708*2e9d4914SAndroid Build Coastguard Worker} 1709*2e9d4914SAndroid Build Coastguard Worker# end func_convert_file_msys_to_w32 1710*2e9d4914SAndroid Build Coastguard Worker 1711*2e9d4914SAndroid Build Coastguard Worker 1712*2e9d4914SAndroid Build Coastguard Worker# func_convert_file_cygwin_to_w32 ARG 1713*2e9d4914SAndroid Build Coastguard Worker# Convert file name ARG from Cygwin to w32 format. Returns result in 1714*2e9d4914SAndroid Build Coastguard Worker# func_to_host_file_result. 1715*2e9d4914SAndroid Build Coastguard Workerfunc_convert_file_cygwin_to_w32 () 1716*2e9d4914SAndroid Build Coastguard Worker{ 1717*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1718*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$1" 1719*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1720*2e9d4914SAndroid Build Coastguard Worker # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 1721*2e9d4914SAndroid Build Coastguard Worker # LT_CYGPATH in this case. 1722*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result=`cygpath -m "$1"` 1723*2e9d4914SAndroid Build Coastguard Worker fi 1724*2e9d4914SAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 1725*2e9d4914SAndroid Build Coastguard Worker} 1726*2e9d4914SAndroid Build Coastguard Worker# end func_convert_file_cygwin_to_w32 1727*2e9d4914SAndroid Build Coastguard Worker 1728*2e9d4914SAndroid Build Coastguard Worker 1729*2e9d4914SAndroid Build Coastguard Worker# func_convert_file_nix_to_w32 ARG 1730*2e9d4914SAndroid Build Coastguard Worker# Convert file name ARG from *nix to w32 format. Requires a wine environment 1731*2e9d4914SAndroid Build Coastguard Worker# and a working winepath. Returns result in func_to_host_file_result. 1732*2e9d4914SAndroid Build Coastguard Workerfunc_convert_file_nix_to_w32 () 1733*2e9d4914SAndroid Build Coastguard Worker{ 1734*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1735*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$1" 1736*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1737*2e9d4914SAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32 "$1" 1738*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 1739*2e9d4914SAndroid Build Coastguard Worker fi 1740*2e9d4914SAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 1741*2e9d4914SAndroid Build Coastguard Worker} 1742*2e9d4914SAndroid Build Coastguard Worker# end func_convert_file_nix_to_w32 1743*2e9d4914SAndroid Build Coastguard Worker 1744*2e9d4914SAndroid Build Coastguard Worker 1745*2e9d4914SAndroid Build Coastguard Worker# func_convert_file_msys_to_cygwin ARG 1746*2e9d4914SAndroid Build Coastguard Worker# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1747*2e9d4914SAndroid Build Coastguard Worker# Returns result in func_to_host_file_result. 1748*2e9d4914SAndroid Build Coastguard Workerfunc_convert_file_msys_to_cygwin () 1749*2e9d4914SAndroid Build Coastguard Worker{ 1750*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1751*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$1" 1752*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1753*2e9d4914SAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$1" 1754*2e9d4914SAndroid Build Coastguard Worker func_cygpath -u "$func_convert_core_msys_to_w32_result" 1755*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$func_cygpath_result" 1756*2e9d4914SAndroid Build Coastguard Worker fi 1757*2e9d4914SAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 1758*2e9d4914SAndroid Build Coastguard Worker} 1759*2e9d4914SAndroid Build Coastguard Worker# end func_convert_file_msys_to_cygwin 1760*2e9d4914SAndroid Build Coastguard Worker 1761*2e9d4914SAndroid Build Coastguard Worker 1762*2e9d4914SAndroid Build Coastguard Worker# func_convert_file_nix_to_cygwin ARG 1763*2e9d4914SAndroid Build Coastguard Worker# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 1764*2e9d4914SAndroid Build Coastguard Worker# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 1765*2e9d4914SAndroid Build Coastguard Worker# in func_to_host_file_result. 1766*2e9d4914SAndroid Build Coastguard Workerfunc_convert_file_nix_to_cygwin () 1767*2e9d4914SAndroid Build Coastguard Worker{ 1768*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1769*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$1" 1770*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1771*2e9d4914SAndroid Build Coastguard Worker # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 1772*2e9d4914SAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32 "$1" 1773*2e9d4914SAndroid Build Coastguard Worker func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 1774*2e9d4914SAndroid Build Coastguard Worker func_to_host_file_result="$func_cygpath_result" 1775*2e9d4914SAndroid Build Coastguard Worker fi 1776*2e9d4914SAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 1777*2e9d4914SAndroid Build Coastguard Worker} 1778*2e9d4914SAndroid Build Coastguard Worker# end func_convert_file_nix_to_cygwin 1779*2e9d4914SAndroid Build Coastguard Worker 1780*2e9d4914SAndroid Build Coastguard Worker 1781*2e9d4914SAndroid Build Coastguard Worker############################################# 1782*2e9d4914SAndroid Build Coastguard Worker# $build to $host PATH CONVERSION FUNCTIONS # 1783*2e9d4914SAndroid Build Coastguard Worker############################################# 1784*2e9d4914SAndroid Build Coastguard Worker# invoked via `$to_host_path_cmd ARG' 1785*2e9d4914SAndroid Build Coastguard Worker# 1786*2e9d4914SAndroid Build Coastguard Worker# In each case, ARG is the path to be converted from $build to $host format. 1787*2e9d4914SAndroid Build Coastguard Worker# The result will be available in $func_to_host_path_result. 1788*2e9d4914SAndroid Build Coastguard Worker# 1789*2e9d4914SAndroid Build Coastguard Worker# Path separators are also converted from $build format to $host format. If 1790*2e9d4914SAndroid Build Coastguard Worker# ARG begins or ends with a path separator character, it is preserved (but 1791*2e9d4914SAndroid Build Coastguard Worker# converted to $host format) on output. 1792*2e9d4914SAndroid Build Coastguard Worker# 1793*2e9d4914SAndroid Build Coastguard Worker# All path conversion functions are named using the following convention: 1794*2e9d4914SAndroid Build Coastguard Worker# file name conversion function : func_convert_file_X_to_Y () 1795*2e9d4914SAndroid Build Coastguard Worker# path conversion function : func_convert_path_X_to_Y () 1796*2e9d4914SAndroid Build Coastguard Worker# where, for any given $build/$host combination the 'X_to_Y' value is the 1797*2e9d4914SAndroid Build Coastguard Worker# same. If conversion functions are added for new $build/$host combinations, 1798*2e9d4914SAndroid Build Coastguard Worker# the two new functions must follow this pattern, or func_init_to_host_path_cmd 1799*2e9d4914SAndroid Build Coastguard Worker# will break. 1800*2e9d4914SAndroid Build Coastguard Worker 1801*2e9d4914SAndroid Build Coastguard Worker 1802*2e9d4914SAndroid Build Coastguard Worker# func_init_to_host_path_cmd 1803*2e9d4914SAndroid Build Coastguard Worker# Ensures that function "pointer" variable $to_host_path_cmd is set to the 1804*2e9d4914SAndroid Build Coastguard Worker# appropriate value, based on the value of $to_host_file_cmd. 1805*2e9d4914SAndroid Build Coastguard Workerto_host_path_cmd= 1806*2e9d4914SAndroid Build Coastguard Workerfunc_init_to_host_path_cmd () 1807*2e9d4914SAndroid Build Coastguard Worker{ 1808*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1809*2e9d4914SAndroid Build Coastguard Worker if test -z "$to_host_path_cmd"; then 1810*2e9d4914SAndroid Build Coastguard Worker func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 1811*2e9d4914SAndroid Build Coastguard Worker to_host_path_cmd="func_convert_path_${func_stripname_result}" 1812*2e9d4914SAndroid Build Coastguard Worker fi 1813*2e9d4914SAndroid Build Coastguard Worker} 1814*2e9d4914SAndroid Build Coastguard Worker 1815*2e9d4914SAndroid Build Coastguard Worker 1816*2e9d4914SAndroid Build Coastguard Worker# func_to_host_path ARG 1817*2e9d4914SAndroid Build Coastguard Worker# Converts the path ARG from $build format to $host format. Return result 1818*2e9d4914SAndroid Build Coastguard Worker# in func_to_host_path_result. 1819*2e9d4914SAndroid Build Coastguard Workerfunc_to_host_path () 1820*2e9d4914SAndroid Build Coastguard Worker{ 1821*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1822*2e9d4914SAndroid Build Coastguard Worker func_init_to_host_path_cmd 1823*2e9d4914SAndroid Build Coastguard Worker $to_host_path_cmd "$1" 1824*2e9d4914SAndroid Build Coastguard Worker} 1825*2e9d4914SAndroid Build Coastguard Worker# end func_to_host_path 1826*2e9d4914SAndroid Build Coastguard Worker 1827*2e9d4914SAndroid Build Coastguard Worker 1828*2e9d4914SAndroid Build Coastguard Worker# func_convert_path_noop ARG 1829*2e9d4914SAndroid Build Coastguard Worker# Copy ARG to func_to_host_path_result. 1830*2e9d4914SAndroid Build Coastguard Workerfunc_convert_path_noop () 1831*2e9d4914SAndroid Build Coastguard Worker{ 1832*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$1" 1833*2e9d4914SAndroid Build Coastguard Worker} 1834*2e9d4914SAndroid Build Coastguard Worker# end func_convert_path_noop 1835*2e9d4914SAndroid Build Coastguard Worker 1836*2e9d4914SAndroid Build Coastguard Worker 1837*2e9d4914SAndroid Build Coastguard Worker# func_convert_path_msys_to_w32 ARG 1838*2e9d4914SAndroid Build Coastguard Worker# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 1839*2e9d4914SAndroid Build Coastguard Worker# conversion to w32 is not available inside the cwrapper. Returns result in 1840*2e9d4914SAndroid Build Coastguard Worker# func_to_host_path_result. 1841*2e9d4914SAndroid Build Coastguard Workerfunc_convert_path_msys_to_w32 () 1842*2e9d4914SAndroid Build Coastguard Worker{ 1843*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1844*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$1" 1845*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1846*2e9d4914SAndroid Build Coastguard Worker # Remove leading and trailing path separator characters from ARG. MSYS 1847*2e9d4914SAndroid Build Coastguard Worker # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 1848*2e9d4914SAndroid Build Coastguard Worker # and winepath ignores them completely. 1849*2e9d4914SAndroid Build Coastguard Worker func_stripname : : "$1" 1850*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 1851*2e9d4914SAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1852*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$func_convert_core_msys_to_w32_result" 1853*2e9d4914SAndroid Build Coastguard Worker func_convert_path_check : ";" \ 1854*2e9d4914SAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 1855*2e9d4914SAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1856*2e9d4914SAndroid Build Coastguard Worker fi 1857*2e9d4914SAndroid Build Coastguard Worker} 1858*2e9d4914SAndroid Build Coastguard Worker# end func_convert_path_msys_to_w32 1859*2e9d4914SAndroid Build Coastguard Worker 1860*2e9d4914SAndroid Build Coastguard Worker 1861*2e9d4914SAndroid Build Coastguard Worker# func_convert_path_cygwin_to_w32 ARG 1862*2e9d4914SAndroid Build Coastguard Worker# Convert path ARG from Cygwin to w32 format. Returns result in 1863*2e9d4914SAndroid Build Coastguard Worker# func_to_host_file_result. 1864*2e9d4914SAndroid Build Coastguard Workerfunc_convert_path_cygwin_to_w32 () 1865*2e9d4914SAndroid Build Coastguard Worker{ 1866*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1867*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$1" 1868*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1869*2e9d4914SAndroid Build Coastguard Worker # See func_convert_path_msys_to_w32: 1870*2e9d4914SAndroid Build Coastguard Worker func_stripname : : "$1" 1871*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 1872*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 1873*2e9d4914SAndroid Build Coastguard Worker func_convert_path_check : ";" \ 1874*2e9d4914SAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 1875*2e9d4914SAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1876*2e9d4914SAndroid Build Coastguard Worker fi 1877*2e9d4914SAndroid Build Coastguard Worker} 1878*2e9d4914SAndroid Build Coastguard Worker# end func_convert_path_cygwin_to_w32 1879*2e9d4914SAndroid Build Coastguard Worker 1880*2e9d4914SAndroid Build Coastguard Worker 1881*2e9d4914SAndroid Build Coastguard Worker# func_convert_path_nix_to_w32 ARG 1882*2e9d4914SAndroid Build Coastguard Worker# Convert path ARG from *nix to w32 format. Requires a wine environment and 1883*2e9d4914SAndroid Build Coastguard Worker# a working winepath. Returns result in func_to_host_file_result. 1884*2e9d4914SAndroid Build Coastguard Workerfunc_convert_path_nix_to_w32 () 1885*2e9d4914SAndroid Build Coastguard Worker{ 1886*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1887*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$1" 1888*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1889*2e9d4914SAndroid Build Coastguard Worker # See func_convert_path_msys_to_w32: 1890*2e9d4914SAndroid Build Coastguard Worker func_stripname : : "$1" 1891*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 1892*2e9d4914SAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1893*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 1894*2e9d4914SAndroid Build Coastguard Worker func_convert_path_check : ";" \ 1895*2e9d4914SAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 1896*2e9d4914SAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1897*2e9d4914SAndroid Build Coastguard Worker fi 1898*2e9d4914SAndroid Build Coastguard Worker} 1899*2e9d4914SAndroid Build Coastguard Worker# end func_convert_path_nix_to_w32 1900*2e9d4914SAndroid Build Coastguard Worker 1901*2e9d4914SAndroid Build Coastguard Worker 1902*2e9d4914SAndroid Build Coastguard Worker# func_convert_path_msys_to_cygwin ARG 1903*2e9d4914SAndroid Build Coastguard Worker# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1904*2e9d4914SAndroid Build Coastguard Worker# Returns result in func_to_host_file_result. 1905*2e9d4914SAndroid Build Coastguard Workerfunc_convert_path_msys_to_cygwin () 1906*2e9d4914SAndroid Build Coastguard Worker{ 1907*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1908*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$1" 1909*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1910*2e9d4914SAndroid Build Coastguard Worker # See func_convert_path_msys_to_w32: 1911*2e9d4914SAndroid Build Coastguard Worker func_stripname : : "$1" 1912*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 1913*2e9d4914SAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1914*2e9d4914SAndroid Build Coastguard Worker func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 1915*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$func_cygpath_result" 1916*2e9d4914SAndroid Build Coastguard Worker func_convert_path_check : : \ 1917*2e9d4914SAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 1918*2e9d4914SAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1919*2e9d4914SAndroid Build Coastguard Worker fi 1920*2e9d4914SAndroid Build Coastguard Worker} 1921*2e9d4914SAndroid Build Coastguard Worker# end func_convert_path_msys_to_cygwin 1922*2e9d4914SAndroid Build Coastguard Worker 1923*2e9d4914SAndroid Build Coastguard Worker 1924*2e9d4914SAndroid Build Coastguard Worker# func_convert_path_nix_to_cygwin ARG 1925*2e9d4914SAndroid Build Coastguard Worker# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 1926*2e9d4914SAndroid Build Coastguard Worker# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 1927*2e9d4914SAndroid Build Coastguard Worker# func_to_host_file_result. 1928*2e9d4914SAndroid Build Coastguard Workerfunc_convert_path_nix_to_cygwin () 1929*2e9d4914SAndroid Build Coastguard Worker{ 1930*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1931*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$1" 1932*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 1933*2e9d4914SAndroid Build Coastguard Worker # Remove leading and trailing path separator characters from 1934*2e9d4914SAndroid Build Coastguard Worker # ARG. msys behavior is inconsistent here, cygpath turns them 1935*2e9d4914SAndroid Build Coastguard Worker # into '.;' and ';.', and winepath ignores them completely. 1936*2e9d4914SAndroid Build Coastguard Worker func_stripname : : "$1" 1937*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 1938*2e9d4914SAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1939*2e9d4914SAndroid Build Coastguard Worker func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 1940*2e9d4914SAndroid Build Coastguard Worker func_to_host_path_result="$func_cygpath_result" 1941*2e9d4914SAndroid Build Coastguard Worker func_convert_path_check : : \ 1942*2e9d4914SAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 1943*2e9d4914SAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1944*2e9d4914SAndroid Build Coastguard Worker fi 1945*2e9d4914SAndroid Build Coastguard Worker} 1946*2e9d4914SAndroid Build Coastguard Worker# end func_convert_path_nix_to_cygwin 1947*2e9d4914SAndroid Build Coastguard Worker 1948*2e9d4914SAndroid Build Coastguard Worker 1949*2e9d4914SAndroid Build Coastguard Worker# func_mode_compile arg... 1950*2e9d4914SAndroid Build Coastguard Workerfunc_mode_compile () 1951*2e9d4914SAndroid Build Coastguard Worker{ 1952*2e9d4914SAndroid Build Coastguard Worker $opt_debug 1953*2e9d4914SAndroid Build Coastguard Worker # Get the compilation command and the source file. 1954*2e9d4914SAndroid Build Coastguard Worker base_compile= 1955*2e9d4914SAndroid Build Coastguard Worker srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956*2e9d4914SAndroid Build Coastguard Worker suppress_opt=yes 1957*2e9d4914SAndroid Build Coastguard Worker suppress_output= 1958*2e9d4914SAndroid Build Coastguard Worker arg_mode=normal 1959*2e9d4914SAndroid Build Coastguard Worker libobj= 1960*2e9d4914SAndroid Build Coastguard Worker later= 1961*2e9d4914SAndroid Build Coastguard Worker pie_flag= 1962*2e9d4914SAndroid Build Coastguard Worker 1963*2e9d4914SAndroid Build Coastguard Worker for arg 1964*2e9d4914SAndroid Build Coastguard Worker do 1965*2e9d4914SAndroid Build Coastguard Worker case $arg_mode in 1966*2e9d4914SAndroid Build Coastguard Worker arg ) 1967*2e9d4914SAndroid Build Coastguard Worker # do not "continue". Instead, add this to base_compile 1968*2e9d4914SAndroid Build Coastguard Worker lastarg="$arg" 1969*2e9d4914SAndroid Build Coastguard Worker arg_mode=normal 1970*2e9d4914SAndroid Build Coastguard Worker ;; 1971*2e9d4914SAndroid Build Coastguard Worker 1972*2e9d4914SAndroid Build Coastguard Worker target ) 1973*2e9d4914SAndroid Build Coastguard Worker libobj="$arg" 1974*2e9d4914SAndroid Build Coastguard Worker arg_mode=normal 1975*2e9d4914SAndroid Build Coastguard Worker continue 1976*2e9d4914SAndroid Build Coastguard Worker ;; 1977*2e9d4914SAndroid Build Coastguard Worker 1978*2e9d4914SAndroid Build Coastguard Worker normal ) 1979*2e9d4914SAndroid Build Coastguard Worker # Accept any command-line options. 1980*2e9d4914SAndroid Build Coastguard Worker case $arg in 1981*2e9d4914SAndroid Build Coastguard Worker -o) 1982*2e9d4914SAndroid Build Coastguard Worker test -n "$libobj" && \ 1983*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "you cannot specify \`-o' more than once" 1984*2e9d4914SAndroid Build Coastguard Worker arg_mode=target 1985*2e9d4914SAndroid Build Coastguard Worker continue 1986*2e9d4914SAndroid Build Coastguard Worker ;; 1987*2e9d4914SAndroid Build Coastguard Worker 1988*2e9d4914SAndroid Build Coastguard Worker -pie | -fpie | -fPIE) 1989*2e9d4914SAndroid Build Coastguard Worker func_append pie_flag " $arg" 1990*2e9d4914SAndroid Build Coastguard Worker continue 1991*2e9d4914SAndroid Build Coastguard Worker ;; 1992*2e9d4914SAndroid Build Coastguard Worker 1993*2e9d4914SAndroid Build Coastguard Worker -shared | -static | -prefer-pic | -prefer-non-pic) 1994*2e9d4914SAndroid Build Coastguard Worker func_append later " $arg" 1995*2e9d4914SAndroid Build Coastguard Worker continue 1996*2e9d4914SAndroid Build Coastguard Worker ;; 1997*2e9d4914SAndroid Build Coastguard Worker 1998*2e9d4914SAndroid Build Coastguard Worker -no-suppress) 1999*2e9d4914SAndroid Build Coastguard Worker suppress_opt=no 2000*2e9d4914SAndroid Build Coastguard Worker continue 2001*2e9d4914SAndroid Build Coastguard Worker ;; 2002*2e9d4914SAndroid Build Coastguard Worker 2003*2e9d4914SAndroid Build Coastguard Worker -Xcompiler) 2004*2e9d4914SAndroid Build Coastguard Worker arg_mode=arg # the next one goes into the "base_compile" arg list 2005*2e9d4914SAndroid Build Coastguard Worker continue # The current "srcfile" will either be retained or 2006*2e9d4914SAndroid Build Coastguard Worker ;; # replaced later. I would guess that would be a bug. 2007*2e9d4914SAndroid Build Coastguard Worker 2008*2e9d4914SAndroid Build Coastguard Worker -Wc,*) 2009*2e9d4914SAndroid Build Coastguard Worker func_stripname '-Wc,' '' "$arg" 2010*2e9d4914SAndroid Build Coastguard Worker args=$func_stripname_result 2011*2e9d4914SAndroid Build Coastguard Worker lastarg= 2012*2e9d4914SAndroid Build Coastguard Worker save_ifs="$IFS"; IFS=',' 2013*2e9d4914SAndroid Build Coastguard Worker for arg in $args; do 2014*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 2015*2e9d4914SAndroid Build Coastguard Worker func_append_quoted lastarg "$arg" 2016*2e9d4914SAndroid Build Coastguard Worker done 2017*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 2018*2e9d4914SAndroid Build Coastguard Worker func_stripname ' ' '' "$lastarg" 2019*2e9d4914SAndroid Build Coastguard Worker lastarg=$func_stripname_result 2020*2e9d4914SAndroid Build Coastguard Worker 2021*2e9d4914SAndroid Build Coastguard Worker # Add the arguments to base_compile. 2022*2e9d4914SAndroid Build Coastguard Worker func_append base_compile " $lastarg" 2023*2e9d4914SAndroid Build Coastguard Worker continue 2024*2e9d4914SAndroid Build Coastguard Worker ;; 2025*2e9d4914SAndroid Build Coastguard Worker 2026*2e9d4914SAndroid Build Coastguard Worker *) 2027*2e9d4914SAndroid Build Coastguard Worker # Accept the current argument as the source file. 2028*2e9d4914SAndroid Build Coastguard Worker # The previous "srcfile" becomes the current argument. 2029*2e9d4914SAndroid Build Coastguard Worker # 2030*2e9d4914SAndroid Build Coastguard Worker lastarg="$srcfile" 2031*2e9d4914SAndroid Build Coastguard Worker srcfile="$arg" 2032*2e9d4914SAndroid Build Coastguard Worker ;; 2033*2e9d4914SAndroid Build Coastguard Worker esac # case $arg 2034*2e9d4914SAndroid Build Coastguard Worker ;; 2035*2e9d4914SAndroid Build Coastguard Worker esac # case $arg_mode 2036*2e9d4914SAndroid Build Coastguard Worker 2037*2e9d4914SAndroid Build Coastguard Worker # Aesthetically quote the previous argument. 2038*2e9d4914SAndroid Build Coastguard Worker func_append_quoted base_compile "$lastarg" 2039*2e9d4914SAndroid Build Coastguard Worker done # for arg 2040*2e9d4914SAndroid Build Coastguard Worker 2041*2e9d4914SAndroid Build Coastguard Worker case $arg_mode in 2042*2e9d4914SAndroid Build Coastguard Worker arg) 2043*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "you must specify an argument for -Xcompile" 2044*2e9d4914SAndroid Build Coastguard Worker ;; 2045*2e9d4914SAndroid Build Coastguard Worker target) 2046*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "you must specify a target with \`-o'" 2047*2e9d4914SAndroid Build Coastguard Worker ;; 2048*2e9d4914SAndroid Build Coastguard Worker *) 2049*2e9d4914SAndroid Build Coastguard Worker # Get the name of the library object. 2050*2e9d4914SAndroid Build Coastguard Worker test -z "$libobj" && { 2051*2e9d4914SAndroid Build Coastguard Worker func_basename "$srcfile" 2052*2e9d4914SAndroid Build Coastguard Worker libobj="$func_basename_result" 2053*2e9d4914SAndroid Build Coastguard Worker } 2054*2e9d4914SAndroid Build Coastguard Worker ;; 2055*2e9d4914SAndroid Build Coastguard Worker esac 2056*2e9d4914SAndroid Build Coastguard Worker 2057*2e9d4914SAndroid Build Coastguard Worker # Recognize several different file suffixes. 2058*2e9d4914SAndroid Build Coastguard Worker # If the user specifies -o file.o, it is replaced with file.lo 2059*2e9d4914SAndroid Build Coastguard Worker case $libobj in 2060*2e9d4914SAndroid Build Coastguard Worker *.[cCFSifmso] | \ 2061*2e9d4914SAndroid Build Coastguard Worker *.ada | *.adb | *.ads | *.asm | \ 2062*2e9d4914SAndroid Build Coastguard Worker *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2063*2e9d4914SAndroid Build Coastguard Worker *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064*2e9d4914SAndroid Build Coastguard Worker func_xform "$libobj" 2065*2e9d4914SAndroid Build Coastguard Worker libobj=$func_xform_result 2066*2e9d4914SAndroid Build Coastguard Worker ;; 2067*2e9d4914SAndroid Build Coastguard Worker esac 2068*2e9d4914SAndroid Build Coastguard Worker 2069*2e9d4914SAndroid Build Coastguard Worker case $libobj in 2070*2e9d4914SAndroid Build Coastguard Worker *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2071*2e9d4914SAndroid Build Coastguard Worker *) 2072*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot determine name of library object from \`$libobj'" 2073*2e9d4914SAndroid Build Coastguard Worker ;; 2074*2e9d4914SAndroid Build Coastguard Worker esac 2075*2e9d4914SAndroid Build Coastguard Worker 2076*2e9d4914SAndroid Build Coastguard Worker func_infer_tag $base_compile 2077*2e9d4914SAndroid Build Coastguard Worker 2078*2e9d4914SAndroid Build Coastguard Worker for arg in $later; do 2079*2e9d4914SAndroid Build Coastguard Worker case $arg in 2080*2e9d4914SAndroid Build Coastguard Worker -shared) 2081*2e9d4914SAndroid Build Coastguard Worker test "$build_libtool_libs" != yes && \ 2082*2e9d4914SAndroid Build Coastguard Worker func_fatal_configuration "can not build a shared library" 2083*2e9d4914SAndroid Build Coastguard Worker build_old_libs=no 2084*2e9d4914SAndroid Build Coastguard Worker continue 2085*2e9d4914SAndroid Build Coastguard Worker ;; 2086*2e9d4914SAndroid Build Coastguard Worker 2087*2e9d4914SAndroid Build Coastguard Worker -static) 2088*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=no 2089*2e9d4914SAndroid Build Coastguard Worker build_old_libs=yes 2090*2e9d4914SAndroid Build Coastguard Worker continue 2091*2e9d4914SAndroid Build Coastguard Worker ;; 2092*2e9d4914SAndroid Build Coastguard Worker 2093*2e9d4914SAndroid Build Coastguard Worker -prefer-pic) 2094*2e9d4914SAndroid Build Coastguard Worker pic_mode=yes 2095*2e9d4914SAndroid Build Coastguard Worker continue 2096*2e9d4914SAndroid Build Coastguard Worker ;; 2097*2e9d4914SAndroid Build Coastguard Worker 2098*2e9d4914SAndroid Build Coastguard Worker -prefer-non-pic) 2099*2e9d4914SAndroid Build Coastguard Worker pic_mode=no 2100*2e9d4914SAndroid Build Coastguard Worker continue 2101*2e9d4914SAndroid Build Coastguard Worker ;; 2102*2e9d4914SAndroid Build Coastguard Worker esac 2103*2e9d4914SAndroid Build Coastguard Worker done 2104*2e9d4914SAndroid Build Coastguard Worker 2105*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$libobj" 2106*2e9d4914SAndroid Build Coastguard Worker test "X$libobj" != "X$func_quote_for_eval_result" \ 2107*2e9d4914SAndroid Build Coastguard Worker && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2108*2e9d4914SAndroid Build Coastguard Worker && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109*2e9d4914SAndroid Build Coastguard Worker func_dirname_and_basename "$obj" "/" "" 2110*2e9d4914SAndroid Build Coastguard Worker objname="$func_basename_result" 2111*2e9d4914SAndroid Build Coastguard Worker xdir="$func_dirname_result" 2112*2e9d4914SAndroid Build Coastguard Worker lobj=${xdir}$objdir/$objname 2113*2e9d4914SAndroid Build Coastguard Worker 2114*2e9d4914SAndroid Build Coastguard Worker test -z "$base_compile" && \ 2115*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "you must specify a compilation command" 2116*2e9d4914SAndroid Build Coastguard Worker 2117*2e9d4914SAndroid Build Coastguard Worker # Delete any leftover library objects. 2118*2e9d4914SAndroid Build Coastguard Worker if test "$build_old_libs" = yes; then 2119*2e9d4914SAndroid Build Coastguard Worker removelist="$obj $lobj $libobj ${libobj}T" 2120*2e9d4914SAndroid Build Coastguard Worker else 2121*2e9d4914SAndroid Build Coastguard Worker removelist="$lobj $libobj ${libobj}T" 2122*2e9d4914SAndroid Build Coastguard Worker fi 2123*2e9d4914SAndroid Build Coastguard Worker 2124*2e9d4914SAndroid Build Coastguard Worker # On Cygwin there's no "real" PIC flag so we must build both object types 2125*2e9d4914SAndroid Build Coastguard Worker case $host_os in 2126*2e9d4914SAndroid Build Coastguard Worker cygwin* | mingw* | pw32* | os2* | cegcc*) 2127*2e9d4914SAndroid Build Coastguard Worker pic_mode=default 2128*2e9d4914SAndroid Build Coastguard Worker ;; 2129*2e9d4914SAndroid Build Coastguard Worker esac 2130*2e9d4914SAndroid Build Coastguard Worker if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2131*2e9d4914SAndroid Build Coastguard Worker # non-PIC code in shared libraries is not supported 2132*2e9d4914SAndroid Build Coastguard Worker pic_mode=default 2133*2e9d4914SAndroid Build Coastguard Worker fi 2134*2e9d4914SAndroid Build Coastguard Worker 2135*2e9d4914SAndroid Build Coastguard Worker # Calculate the filename of the output object if compiler does 2136*2e9d4914SAndroid Build Coastguard Worker # not support -o with -c 2137*2e9d4914SAndroid Build Coastguard Worker if test "$compiler_c_o" = no; then 2138*2e9d4914SAndroid Build Coastguard Worker output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2139*2e9d4914SAndroid Build Coastguard Worker lockfile="$output_obj.lock" 2140*2e9d4914SAndroid Build Coastguard Worker else 2141*2e9d4914SAndroid Build Coastguard Worker output_obj= 2142*2e9d4914SAndroid Build Coastguard Worker need_locks=no 2143*2e9d4914SAndroid Build Coastguard Worker lockfile= 2144*2e9d4914SAndroid Build Coastguard Worker fi 2145*2e9d4914SAndroid Build Coastguard Worker 2146*2e9d4914SAndroid Build Coastguard Worker # Lock this critical section if it is needed 2147*2e9d4914SAndroid Build Coastguard Worker # We use this script file to make the link, it avoids creating a new file 2148*2e9d4914SAndroid Build Coastguard Worker if test "$need_locks" = yes; then 2149*2e9d4914SAndroid Build Coastguard Worker until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150*2e9d4914SAndroid Build Coastguard Worker func_echo "Waiting for $lockfile to be removed" 2151*2e9d4914SAndroid Build Coastguard Worker sleep 2 2152*2e9d4914SAndroid Build Coastguard Worker done 2153*2e9d4914SAndroid Build Coastguard Worker elif test "$need_locks" = warn; then 2154*2e9d4914SAndroid Build Coastguard Worker if test -f "$lockfile"; then 2155*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 2156*2e9d4914SAndroid Build Coastguard Worker*** ERROR, $lockfile exists and contains: 2157*2e9d4914SAndroid Build Coastguard Worker`cat $lockfile 2>/dev/null` 2158*2e9d4914SAndroid Build Coastguard Worker 2159*2e9d4914SAndroid Build Coastguard WorkerThis indicates that another process is trying to use the same 2160*2e9d4914SAndroid Build Coastguard Workertemporary object file, and libtool could not work around it because 2161*2e9d4914SAndroid Build Coastguard Workeryour compiler does not support \`-c' and \`-o' together. If you 2162*2e9d4914SAndroid Build Coastguard Workerrepeat this compilation, it may succeed, by chance, but you had better 2163*2e9d4914SAndroid Build Coastguard Workeravoid parallel builds (make -j) in this platform, or get a better 2164*2e9d4914SAndroid Build Coastguard Workercompiler." 2165*2e9d4914SAndroid Build Coastguard Worker 2166*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 2167*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_FAILURE 2168*2e9d4914SAndroid Build Coastguard Worker fi 2169*2e9d4914SAndroid Build Coastguard Worker func_append removelist " $output_obj" 2170*2e9d4914SAndroid Build Coastguard Worker $ECHO "$srcfile" > "$lockfile" 2171*2e9d4914SAndroid Build Coastguard Worker fi 2172*2e9d4914SAndroid Build Coastguard Worker 2173*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 2174*2e9d4914SAndroid Build Coastguard Worker func_append removelist " $lockfile" 2175*2e9d4914SAndroid Build Coastguard Worker trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176*2e9d4914SAndroid Build Coastguard Worker 2177*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 2178*2e9d4914SAndroid Build Coastguard Worker srcfile=$func_to_tool_file_result 2179*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$srcfile" 2180*2e9d4914SAndroid Build Coastguard Worker qsrcfile=$func_quote_for_eval_result 2181*2e9d4914SAndroid Build Coastguard Worker 2182*2e9d4914SAndroid Build Coastguard Worker # Only build a PIC object if we are building libtool libraries. 2183*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = yes; then 2184*2e9d4914SAndroid Build Coastguard Worker # Without this assignment, base_compile gets emptied. 2185*2e9d4914SAndroid Build Coastguard Worker fbsd_hideous_sh_bug=$base_compile 2186*2e9d4914SAndroid Build Coastguard Worker 2187*2e9d4914SAndroid Build Coastguard Worker if test "$pic_mode" != no; then 2188*2e9d4914SAndroid Build Coastguard Worker command="$base_compile $qsrcfile $pic_flag" 2189*2e9d4914SAndroid Build Coastguard Worker else 2190*2e9d4914SAndroid Build Coastguard Worker # Don't build PIC code 2191*2e9d4914SAndroid Build Coastguard Worker command="$base_compile $qsrcfile" 2192*2e9d4914SAndroid Build Coastguard Worker fi 2193*2e9d4914SAndroid Build Coastguard Worker 2194*2e9d4914SAndroid Build Coastguard Worker func_mkdir_p "$xdir$objdir" 2195*2e9d4914SAndroid Build Coastguard Worker 2196*2e9d4914SAndroid Build Coastguard Worker if test -z "$output_obj"; then 2197*2e9d4914SAndroid Build Coastguard Worker # Place PIC objects in $objdir 2198*2e9d4914SAndroid Build Coastguard Worker func_append command " -o $lobj" 2199*2e9d4914SAndroid Build Coastguard Worker fi 2200*2e9d4914SAndroid Build Coastguard Worker 2201*2e9d4914SAndroid Build Coastguard Worker func_show_eval_locale "$command" \ 2202*2e9d4914SAndroid Build Coastguard Worker 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2203*2e9d4914SAndroid Build Coastguard Worker 2204*2e9d4914SAndroid Build Coastguard Worker if test "$need_locks" = warn && 2205*2e9d4914SAndroid Build Coastguard Worker test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 2207*2e9d4914SAndroid Build Coastguard Worker*** ERROR, $lockfile contains: 2208*2e9d4914SAndroid Build Coastguard Worker`cat $lockfile 2>/dev/null` 2209*2e9d4914SAndroid Build Coastguard Worker 2210*2e9d4914SAndroid Build Coastguard Workerbut it should contain: 2211*2e9d4914SAndroid Build Coastguard Worker$srcfile 2212*2e9d4914SAndroid Build Coastguard Worker 2213*2e9d4914SAndroid Build Coastguard WorkerThis indicates that another process is trying to use the same 2214*2e9d4914SAndroid Build Coastguard Workertemporary object file, and libtool could not work around it because 2215*2e9d4914SAndroid Build Coastguard Workeryour compiler does not support \`-c' and \`-o' together. If you 2216*2e9d4914SAndroid Build Coastguard Workerrepeat this compilation, it may succeed, by chance, but you had better 2217*2e9d4914SAndroid Build Coastguard Workeravoid parallel builds (make -j) in this platform, or get a better 2218*2e9d4914SAndroid Build Coastguard Workercompiler." 2219*2e9d4914SAndroid Build Coastguard Worker 2220*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 2221*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_FAILURE 2222*2e9d4914SAndroid Build Coastguard Worker fi 2223*2e9d4914SAndroid Build Coastguard Worker 2224*2e9d4914SAndroid Build Coastguard Worker # Just move the object if needed, then go on to compile the next one 2225*2e9d4914SAndroid Build Coastguard Worker if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226*2e9d4914SAndroid Build Coastguard Worker func_show_eval '$MV "$output_obj" "$lobj"' \ 2227*2e9d4914SAndroid Build Coastguard Worker 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2228*2e9d4914SAndroid Build Coastguard Worker fi 2229*2e9d4914SAndroid Build Coastguard Worker 2230*2e9d4914SAndroid Build Coastguard Worker # Allow error messages only from the first compilation. 2231*2e9d4914SAndroid Build Coastguard Worker if test "$suppress_opt" = yes; then 2232*2e9d4914SAndroid Build Coastguard Worker suppress_output=' >/dev/null 2>&1' 2233*2e9d4914SAndroid Build Coastguard Worker fi 2234*2e9d4914SAndroid Build Coastguard Worker fi 2235*2e9d4914SAndroid Build Coastguard Worker 2236*2e9d4914SAndroid Build Coastguard Worker # Only build a position-dependent object if we build old libraries. 2237*2e9d4914SAndroid Build Coastguard Worker if test "$build_old_libs" = yes; then 2238*2e9d4914SAndroid Build Coastguard Worker if test "$pic_mode" != yes; then 2239*2e9d4914SAndroid Build Coastguard Worker # Don't build PIC code 2240*2e9d4914SAndroid Build Coastguard Worker command="$base_compile $qsrcfile$pie_flag" 2241*2e9d4914SAndroid Build Coastguard Worker else 2242*2e9d4914SAndroid Build Coastguard Worker command="$base_compile $qsrcfile $pic_flag" 2243*2e9d4914SAndroid Build Coastguard Worker fi 2244*2e9d4914SAndroid Build Coastguard Worker if test "$compiler_c_o" = yes; then 2245*2e9d4914SAndroid Build Coastguard Worker func_append command " -o $obj" 2246*2e9d4914SAndroid Build Coastguard Worker fi 2247*2e9d4914SAndroid Build Coastguard Worker 2248*2e9d4914SAndroid Build Coastguard Worker # Suppress compiler output if we already did a PIC compilation. 2249*2e9d4914SAndroid Build Coastguard Worker func_append command "$suppress_output" 2250*2e9d4914SAndroid Build Coastguard Worker func_show_eval_locale "$command" \ 2251*2e9d4914SAndroid Build Coastguard Worker '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2252*2e9d4914SAndroid Build Coastguard Worker 2253*2e9d4914SAndroid Build Coastguard Worker if test "$need_locks" = warn && 2254*2e9d4914SAndroid Build Coastguard Worker test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 2256*2e9d4914SAndroid Build Coastguard Worker*** ERROR, $lockfile contains: 2257*2e9d4914SAndroid Build Coastguard Worker`cat $lockfile 2>/dev/null` 2258*2e9d4914SAndroid Build Coastguard Worker 2259*2e9d4914SAndroid Build Coastguard Workerbut it should contain: 2260*2e9d4914SAndroid Build Coastguard Worker$srcfile 2261*2e9d4914SAndroid Build Coastguard Worker 2262*2e9d4914SAndroid Build Coastguard WorkerThis indicates that another process is trying to use the same 2263*2e9d4914SAndroid Build Coastguard Workertemporary object file, and libtool could not work around it because 2264*2e9d4914SAndroid Build Coastguard Workeryour compiler does not support \`-c' and \`-o' together. If you 2265*2e9d4914SAndroid Build Coastguard Workerrepeat this compilation, it may succeed, by chance, but you had better 2266*2e9d4914SAndroid Build Coastguard Workeravoid parallel builds (make -j) in this platform, or get a better 2267*2e9d4914SAndroid Build Coastguard Workercompiler." 2268*2e9d4914SAndroid Build Coastguard Worker 2269*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 2270*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_FAILURE 2271*2e9d4914SAndroid Build Coastguard Worker fi 2272*2e9d4914SAndroid Build Coastguard Worker 2273*2e9d4914SAndroid Build Coastguard Worker # Just move the object if needed 2274*2e9d4914SAndroid Build Coastguard Worker if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275*2e9d4914SAndroid Build Coastguard Worker func_show_eval '$MV "$output_obj" "$obj"' \ 2276*2e9d4914SAndroid Build Coastguard Worker 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2277*2e9d4914SAndroid Build Coastguard Worker fi 2278*2e9d4914SAndroid Build Coastguard Worker fi 2279*2e9d4914SAndroid Build Coastguard Worker 2280*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 2281*2e9d4914SAndroid Build Coastguard Worker func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2282*2e9d4914SAndroid Build Coastguard Worker 2283*2e9d4914SAndroid Build Coastguard Worker # Unlock the critical section if it was locked 2284*2e9d4914SAndroid Build Coastguard Worker if test "$need_locks" != no; then 2285*2e9d4914SAndroid Build Coastguard Worker removelist=$lockfile 2286*2e9d4914SAndroid Build Coastguard Worker $RM "$lockfile" 2287*2e9d4914SAndroid Build Coastguard Worker fi 2288*2e9d4914SAndroid Build Coastguard Worker } 2289*2e9d4914SAndroid Build Coastguard Worker 2290*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 2291*2e9d4914SAndroid Build Coastguard Worker} 2292*2e9d4914SAndroid Build Coastguard Worker 2293*2e9d4914SAndroid Build Coastguard Worker$opt_help || { 2294*2e9d4914SAndroid Build Coastguard Worker test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295*2e9d4914SAndroid Build Coastguard Worker} 2296*2e9d4914SAndroid Build Coastguard Worker 2297*2e9d4914SAndroid Build Coastguard Workerfunc_mode_help () 2298*2e9d4914SAndroid Build Coastguard Worker{ 2299*2e9d4914SAndroid Build Coastguard Worker # We need to display help for each of the modes. 2300*2e9d4914SAndroid Build Coastguard Worker case $opt_mode in 2301*2e9d4914SAndroid Build Coastguard Worker "") 2302*2e9d4914SAndroid Build Coastguard Worker # Generic help is extracted from the usage comments 2303*2e9d4914SAndroid Build Coastguard Worker # at the start of this file. 2304*2e9d4914SAndroid Build Coastguard Worker func_help 2305*2e9d4914SAndroid Build Coastguard Worker ;; 2306*2e9d4914SAndroid Build Coastguard Worker 2307*2e9d4914SAndroid Build Coastguard Worker clean) 2308*2e9d4914SAndroid Build Coastguard Worker $ECHO \ 2309*2e9d4914SAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2310*2e9d4914SAndroid Build Coastguard Worker 2311*2e9d4914SAndroid Build Coastguard WorkerRemove files from the build directory. 2312*2e9d4914SAndroid Build Coastguard Worker 2313*2e9d4914SAndroid Build Coastguard WorkerRM is the name of the program to use to delete files associated with each FILE 2314*2e9d4914SAndroid Build Coastguard Worker(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315*2e9d4914SAndroid Build Coastguard Workerto RM. 2316*2e9d4914SAndroid Build Coastguard Worker 2317*2e9d4914SAndroid Build Coastguard WorkerIf FILE is a libtool library, object or program, all the files associated 2318*2e9d4914SAndroid Build Coastguard Workerwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319*2e9d4914SAndroid Build Coastguard Worker ;; 2320*2e9d4914SAndroid Build Coastguard Worker 2321*2e9d4914SAndroid Build Coastguard Worker compile) 2322*2e9d4914SAndroid Build Coastguard Worker $ECHO \ 2323*2e9d4914SAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2324*2e9d4914SAndroid Build Coastguard Worker 2325*2e9d4914SAndroid Build Coastguard WorkerCompile a source file into a libtool library object. 2326*2e9d4914SAndroid Build Coastguard Worker 2327*2e9d4914SAndroid Build Coastguard WorkerThis mode accepts the following additional options: 2328*2e9d4914SAndroid Build Coastguard Worker 2329*2e9d4914SAndroid Build Coastguard Worker -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330*2e9d4914SAndroid Build Coastguard Worker -no-suppress do not suppress compiler output for multiple passes 2331*2e9d4914SAndroid Build Coastguard Worker -prefer-pic try to build PIC objects only 2332*2e9d4914SAndroid Build Coastguard Worker -prefer-non-pic try to build non-PIC objects only 2333*2e9d4914SAndroid Build Coastguard Worker -shared do not build a \`.o' file suitable for static linking 2334*2e9d4914SAndroid Build Coastguard Worker -static only build a \`.o' file suitable for static linking 2335*2e9d4914SAndroid Build Coastguard Worker -Wc,FLAG pass FLAG directly to the compiler 2336*2e9d4914SAndroid Build Coastguard Worker 2337*2e9d4914SAndroid Build Coastguard WorkerCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338*2e9d4914SAndroid Build Coastguard Workerfrom the given SOURCEFILE. 2339*2e9d4914SAndroid Build Coastguard Worker 2340*2e9d4914SAndroid Build Coastguard WorkerThe output file name is determined by removing the directory component from 2341*2e9d4914SAndroid Build Coastguard WorkerSOURCEFILE, then substituting the C source code suffix \`.c' with the 2342*2e9d4914SAndroid Build Coastguard Workerlibrary object suffix, \`.lo'." 2343*2e9d4914SAndroid Build Coastguard Worker ;; 2344*2e9d4914SAndroid Build Coastguard Worker 2345*2e9d4914SAndroid Build Coastguard Worker execute) 2346*2e9d4914SAndroid Build Coastguard Worker $ECHO \ 2347*2e9d4914SAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2348*2e9d4914SAndroid Build Coastguard Worker 2349*2e9d4914SAndroid Build Coastguard WorkerAutomatically set library path, then run a program. 2350*2e9d4914SAndroid Build Coastguard Worker 2351*2e9d4914SAndroid Build Coastguard WorkerThis mode accepts the following additional options: 2352*2e9d4914SAndroid Build Coastguard Worker 2353*2e9d4914SAndroid Build Coastguard Worker -dlopen FILE add the directory containing FILE to the library path 2354*2e9d4914SAndroid Build Coastguard Worker 2355*2e9d4914SAndroid Build Coastguard WorkerThis mode sets the library path environment variable according to \`-dlopen' 2356*2e9d4914SAndroid Build Coastguard Workerflags. 2357*2e9d4914SAndroid Build Coastguard Worker 2358*2e9d4914SAndroid Build Coastguard WorkerIf any of the ARGS are libtool executable wrappers, then they are translated 2359*2e9d4914SAndroid Build Coastguard Workerinto their corresponding uninstalled binary, and any of their required library 2360*2e9d4914SAndroid Build Coastguard Workerdirectories are added to the library path. 2361*2e9d4914SAndroid Build Coastguard Worker 2362*2e9d4914SAndroid Build Coastguard WorkerThen, COMMAND is executed, with ARGS as arguments." 2363*2e9d4914SAndroid Build Coastguard Worker ;; 2364*2e9d4914SAndroid Build Coastguard Worker 2365*2e9d4914SAndroid Build Coastguard Worker finish) 2366*2e9d4914SAndroid Build Coastguard Worker $ECHO \ 2367*2e9d4914SAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2368*2e9d4914SAndroid Build Coastguard Worker 2369*2e9d4914SAndroid Build Coastguard WorkerComplete the installation of libtool libraries. 2370*2e9d4914SAndroid Build Coastguard Worker 2371*2e9d4914SAndroid Build Coastguard WorkerEach LIBDIR is a directory that contains libtool libraries. 2372*2e9d4914SAndroid Build Coastguard Worker 2373*2e9d4914SAndroid Build Coastguard WorkerThe commands that this mode executes may require superuser privileges. Use 2374*2e9d4914SAndroid Build Coastguard Workerthe \`--dry-run' option if you just want to see what would be executed." 2375*2e9d4914SAndroid Build Coastguard Worker ;; 2376*2e9d4914SAndroid Build Coastguard Worker 2377*2e9d4914SAndroid Build Coastguard Worker install) 2378*2e9d4914SAndroid Build Coastguard Worker $ECHO \ 2379*2e9d4914SAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2380*2e9d4914SAndroid Build Coastguard Worker 2381*2e9d4914SAndroid Build Coastguard WorkerInstall executables or libraries. 2382*2e9d4914SAndroid Build Coastguard Worker 2383*2e9d4914SAndroid Build Coastguard WorkerINSTALL-COMMAND is the installation command. The first component should be 2384*2e9d4914SAndroid Build Coastguard Workereither the \`install' or \`cp' program. 2385*2e9d4914SAndroid Build Coastguard Worker 2386*2e9d4914SAndroid Build Coastguard WorkerThe following components of INSTALL-COMMAND are treated specially: 2387*2e9d4914SAndroid Build Coastguard Worker 2388*2e9d4914SAndroid Build Coastguard Worker -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2389*2e9d4914SAndroid Build Coastguard Worker 2390*2e9d4914SAndroid Build Coastguard WorkerThe rest of the components are interpreted as arguments to that command (only 2391*2e9d4914SAndroid Build Coastguard WorkerBSD-compatible install options are recognized)." 2392*2e9d4914SAndroid Build Coastguard Worker ;; 2393*2e9d4914SAndroid Build Coastguard Worker 2394*2e9d4914SAndroid Build Coastguard Worker link) 2395*2e9d4914SAndroid Build Coastguard Worker $ECHO \ 2396*2e9d4914SAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2397*2e9d4914SAndroid Build Coastguard Worker 2398*2e9d4914SAndroid Build Coastguard WorkerLink object files or libraries together to form another library, or to 2399*2e9d4914SAndroid Build Coastguard Workercreate an executable program. 2400*2e9d4914SAndroid Build Coastguard Worker 2401*2e9d4914SAndroid Build Coastguard WorkerLINK-COMMAND is a command using the C compiler that you would use to create 2402*2e9d4914SAndroid Build Coastguard Workera program from several object files. 2403*2e9d4914SAndroid Build Coastguard Worker 2404*2e9d4914SAndroid Build Coastguard WorkerThe following components of LINK-COMMAND are treated specially: 2405*2e9d4914SAndroid Build Coastguard Worker 2406*2e9d4914SAndroid Build Coastguard Worker -all-static do not do any dynamic linking at all 2407*2e9d4914SAndroid Build Coastguard Worker -avoid-version do not add a version suffix if possible 2408*2e9d4914SAndroid Build Coastguard Worker -bindir BINDIR specify path to binaries directory (for systems where 2409*2e9d4914SAndroid Build Coastguard Worker libraries must be found in the PATH setting at runtime) 2410*2e9d4914SAndroid Build Coastguard Worker -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411*2e9d4914SAndroid Build Coastguard Worker -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412*2e9d4914SAndroid Build Coastguard Worker -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413*2e9d4914SAndroid Build Coastguard Worker -export-symbols SYMFILE 2414*2e9d4914SAndroid Build Coastguard Worker try to export only the symbols listed in SYMFILE 2415*2e9d4914SAndroid Build Coastguard Worker -export-symbols-regex REGEX 2416*2e9d4914SAndroid Build Coastguard Worker try to export only the symbols matching REGEX 2417*2e9d4914SAndroid Build Coastguard Worker -LLIBDIR search LIBDIR for required installed libraries 2418*2e9d4914SAndroid Build Coastguard Worker -lNAME OUTPUT-FILE requires the installed library libNAME 2419*2e9d4914SAndroid Build Coastguard Worker -module build a library that can dlopened 2420*2e9d4914SAndroid Build Coastguard Worker -no-fast-install disable the fast-install mode 2421*2e9d4914SAndroid Build Coastguard Worker -no-install link a not-installable executable 2422*2e9d4914SAndroid Build Coastguard Worker -no-undefined declare that a library does not refer to external symbols 2423*2e9d4914SAndroid Build Coastguard Worker -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2424*2e9d4914SAndroid Build Coastguard Worker -objectlist FILE Use a list of object files found in FILE to specify objects 2425*2e9d4914SAndroid Build Coastguard Worker -precious-files-regex REGEX 2426*2e9d4914SAndroid Build Coastguard Worker don't remove output files matching REGEX 2427*2e9d4914SAndroid Build Coastguard Worker -release RELEASE specify package release information 2428*2e9d4914SAndroid Build Coastguard Worker -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429*2e9d4914SAndroid Build Coastguard Worker -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430*2e9d4914SAndroid Build Coastguard Worker -shared only do dynamic linking of libtool libraries 2431*2e9d4914SAndroid Build Coastguard Worker -shrext SUFFIX override the standard shared library file extension 2432*2e9d4914SAndroid Build Coastguard Worker -static do not do any dynamic linking of uninstalled libtool libraries 2433*2e9d4914SAndroid Build Coastguard Worker -static-libtool-libs 2434*2e9d4914SAndroid Build Coastguard Worker do not do any dynamic linking of libtool libraries 2435*2e9d4914SAndroid Build Coastguard Worker -version-info CURRENT[:REVISION[:AGE]] 2436*2e9d4914SAndroid Build Coastguard Worker specify library version info [each variable defaults to 0] 2437*2e9d4914SAndroid Build Coastguard Worker -weak LIBNAME declare that the target provides the LIBNAME interface 2438*2e9d4914SAndroid Build Coastguard Worker -Wc,FLAG 2439*2e9d4914SAndroid Build Coastguard Worker -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 2440*2e9d4914SAndroid Build Coastguard Worker -Wl,FLAG 2441*2e9d4914SAndroid Build Coastguard Worker -Xlinker FLAG pass linker-specific FLAG directly to the linker 2442*2e9d4914SAndroid Build Coastguard Worker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2443*2e9d4914SAndroid Build Coastguard Worker 2444*2e9d4914SAndroid Build Coastguard WorkerAll other options (arguments beginning with \`-') are ignored. 2445*2e9d4914SAndroid Build Coastguard Worker 2446*2e9d4914SAndroid Build Coastguard WorkerEvery other argument is treated as a filename. Files ending in \`.la' are 2447*2e9d4914SAndroid Build Coastguard Workertreated as uninstalled libtool libraries, other files are standard or library 2448*2e9d4914SAndroid Build Coastguard Workerobject files. 2449*2e9d4914SAndroid Build Coastguard Worker 2450*2e9d4914SAndroid Build Coastguard WorkerIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2451*2e9d4914SAndroid Build Coastguard Workeronly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452*2e9d4914SAndroid Build Coastguard Workerrequired, except when creating a convenience library. 2453*2e9d4914SAndroid Build Coastguard Worker 2454*2e9d4914SAndroid Build Coastguard WorkerIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2455*2e9d4914SAndroid Build Coastguard Workerusing \`ar' and \`ranlib', or on Windows using \`lib'. 2456*2e9d4914SAndroid Build Coastguard Worker 2457*2e9d4914SAndroid Build Coastguard WorkerIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458*2e9d4914SAndroid Build Coastguard Workeris created, otherwise an executable program is created." 2459*2e9d4914SAndroid Build Coastguard Worker ;; 2460*2e9d4914SAndroid Build Coastguard Worker 2461*2e9d4914SAndroid Build Coastguard Worker uninstall) 2462*2e9d4914SAndroid Build Coastguard Worker $ECHO \ 2463*2e9d4914SAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2464*2e9d4914SAndroid Build Coastguard Worker 2465*2e9d4914SAndroid Build Coastguard WorkerRemove libraries from an installation directory. 2466*2e9d4914SAndroid Build Coastguard Worker 2467*2e9d4914SAndroid Build Coastguard WorkerRM is the name of the program to use to delete files associated with each FILE 2468*2e9d4914SAndroid Build Coastguard Worker(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469*2e9d4914SAndroid Build Coastguard Workerto RM. 2470*2e9d4914SAndroid Build Coastguard Worker 2471*2e9d4914SAndroid Build Coastguard WorkerIf FILE is a libtool library, all the files associated with it are deleted. 2472*2e9d4914SAndroid Build Coastguard WorkerOtherwise, only FILE itself is deleted using RM." 2473*2e9d4914SAndroid Build Coastguard Worker ;; 2474*2e9d4914SAndroid Build Coastguard Worker 2475*2e9d4914SAndroid Build Coastguard Worker *) 2476*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "invalid operation mode \`$opt_mode'" 2477*2e9d4914SAndroid Build Coastguard Worker ;; 2478*2e9d4914SAndroid Build Coastguard Worker esac 2479*2e9d4914SAndroid Build Coastguard Worker 2480*2e9d4914SAndroid Build Coastguard Worker echo 2481*2e9d4914SAndroid Build Coastguard Worker $ECHO "Try \`$progname --help' for more information about other modes." 2482*2e9d4914SAndroid Build Coastguard Worker} 2483*2e9d4914SAndroid Build Coastguard Worker 2484*2e9d4914SAndroid Build Coastguard Worker# Now that we've collected a possible --mode arg, show help if necessary 2485*2e9d4914SAndroid Build Coastguard Workerif $opt_help; then 2486*2e9d4914SAndroid Build Coastguard Worker if test "$opt_help" = :; then 2487*2e9d4914SAndroid Build Coastguard Worker func_mode_help 2488*2e9d4914SAndroid Build Coastguard Worker else 2489*2e9d4914SAndroid Build Coastguard Worker { 2490*2e9d4914SAndroid Build Coastguard Worker func_help noexit 2491*2e9d4914SAndroid Build Coastguard Worker for opt_mode in compile link execute install finish uninstall clean; do 2492*2e9d4914SAndroid Build Coastguard Worker func_mode_help 2493*2e9d4914SAndroid Build Coastguard Worker done 2494*2e9d4914SAndroid Build Coastguard Worker } | sed -n '1p; 2,$s/^Usage:/ or: /p' 2495*2e9d4914SAndroid Build Coastguard Worker { 2496*2e9d4914SAndroid Build Coastguard Worker func_help noexit 2497*2e9d4914SAndroid Build Coastguard Worker for opt_mode in compile link execute install finish uninstall clean; do 2498*2e9d4914SAndroid Build Coastguard Worker echo 2499*2e9d4914SAndroid Build Coastguard Worker func_mode_help 2500*2e9d4914SAndroid Build Coastguard Worker done 2501*2e9d4914SAndroid Build Coastguard Worker } | 2502*2e9d4914SAndroid Build Coastguard Worker sed '1d 2503*2e9d4914SAndroid Build Coastguard Worker /^When reporting/,/^Report/{ 2504*2e9d4914SAndroid Build Coastguard Worker H 2505*2e9d4914SAndroid Build Coastguard Worker d 2506*2e9d4914SAndroid Build Coastguard Worker } 2507*2e9d4914SAndroid Build Coastguard Worker $x 2508*2e9d4914SAndroid Build Coastguard Worker /information about other modes/d 2509*2e9d4914SAndroid Build Coastguard Worker /more detailed .*MODE/d 2510*2e9d4914SAndroid Build Coastguard Worker s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 2511*2e9d4914SAndroid Build Coastguard Worker fi 2512*2e9d4914SAndroid Build Coastguard Worker exit $? 2513*2e9d4914SAndroid Build Coastguard Workerfi 2514*2e9d4914SAndroid Build Coastguard Worker 2515*2e9d4914SAndroid Build Coastguard Worker 2516*2e9d4914SAndroid Build Coastguard Worker# func_mode_execute arg... 2517*2e9d4914SAndroid Build Coastguard Workerfunc_mode_execute () 2518*2e9d4914SAndroid Build Coastguard Worker{ 2519*2e9d4914SAndroid Build Coastguard Worker $opt_debug 2520*2e9d4914SAndroid Build Coastguard Worker # The first argument is the command name. 2521*2e9d4914SAndroid Build Coastguard Worker cmd="$nonopt" 2522*2e9d4914SAndroid Build Coastguard Worker test -z "$cmd" && \ 2523*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "you must specify a COMMAND" 2524*2e9d4914SAndroid Build Coastguard Worker 2525*2e9d4914SAndroid Build Coastguard Worker # Handle -dlopen flags immediately. 2526*2e9d4914SAndroid Build Coastguard Worker for file in $opt_dlopen; do 2527*2e9d4914SAndroid Build Coastguard Worker test -f "$file" \ 2528*2e9d4914SAndroid Build Coastguard Worker || func_fatal_help "\`$file' is not a file" 2529*2e9d4914SAndroid Build Coastguard Worker 2530*2e9d4914SAndroid Build Coastguard Worker dir= 2531*2e9d4914SAndroid Build Coastguard Worker case $file in 2532*2e9d4914SAndroid Build Coastguard Worker *.la) 2533*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$file" 2534*2e9d4914SAndroid Build Coastguard Worker file=$func_resolve_sysroot_result 2535*2e9d4914SAndroid Build Coastguard Worker 2536*2e9d4914SAndroid Build Coastguard Worker # Check to see that this really is a libtool archive. 2537*2e9d4914SAndroid Build Coastguard Worker func_lalib_unsafe_p "$file" \ 2538*2e9d4914SAndroid Build Coastguard Worker || func_fatal_help "\`$lib' is not a valid libtool archive" 2539*2e9d4914SAndroid Build Coastguard Worker 2540*2e9d4914SAndroid Build Coastguard Worker # Read the libtool library. 2541*2e9d4914SAndroid Build Coastguard Worker dlname= 2542*2e9d4914SAndroid Build Coastguard Worker library_names= 2543*2e9d4914SAndroid Build Coastguard Worker func_source "$file" 2544*2e9d4914SAndroid Build Coastguard Worker 2545*2e9d4914SAndroid Build Coastguard Worker # Skip this library if it cannot be dlopened. 2546*2e9d4914SAndroid Build Coastguard Worker if test -z "$dlname"; then 2547*2e9d4914SAndroid Build Coastguard Worker # Warn if it was a shared library. 2548*2e9d4914SAndroid Build Coastguard Worker test -n "$library_names" && \ 2549*2e9d4914SAndroid Build Coastguard Worker func_warning "\`$file' was not linked with \`-export-dynamic'" 2550*2e9d4914SAndroid Build Coastguard Worker continue 2551*2e9d4914SAndroid Build Coastguard Worker fi 2552*2e9d4914SAndroid Build Coastguard Worker 2553*2e9d4914SAndroid Build Coastguard Worker func_dirname "$file" "" "." 2554*2e9d4914SAndroid Build Coastguard Worker dir="$func_dirname_result" 2555*2e9d4914SAndroid Build Coastguard Worker 2556*2e9d4914SAndroid Build Coastguard Worker if test -f "$dir/$objdir/$dlname"; then 2557*2e9d4914SAndroid Build Coastguard Worker func_append dir "/$objdir" 2558*2e9d4914SAndroid Build Coastguard Worker else 2559*2e9d4914SAndroid Build Coastguard Worker if test ! -f "$dir/$dlname"; then 2560*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561*2e9d4914SAndroid Build Coastguard Worker fi 2562*2e9d4914SAndroid Build Coastguard Worker fi 2563*2e9d4914SAndroid Build Coastguard Worker ;; 2564*2e9d4914SAndroid Build Coastguard Worker 2565*2e9d4914SAndroid Build Coastguard Worker *.lo) 2566*2e9d4914SAndroid Build Coastguard Worker # Just add the directory containing the .lo file. 2567*2e9d4914SAndroid Build Coastguard Worker func_dirname "$file" "" "." 2568*2e9d4914SAndroid Build Coastguard Worker dir="$func_dirname_result" 2569*2e9d4914SAndroid Build Coastguard Worker ;; 2570*2e9d4914SAndroid Build Coastguard Worker 2571*2e9d4914SAndroid Build Coastguard Worker *) 2572*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2573*2e9d4914SAndroid Build Coastguard Worker continue 2574*2e9d4914SAndroid Build Coastguard Worker ;; 2575*2e9d4914SAndroid Build Coastguard Worker esac 2576*2e9d4914SAndroid Build Coastguard Worker 2577*2e9d4914SAndroid Build Coastguard Worker # Get the absolute pathname. 2578*2e9d4914SAndroid Build Coastguard Worker absdir=`cd "$dir" && pwd` 2579*2e9d4914SAndroid Build Coastguard Worker test -n "$absdir" && dir="$absdir" 2580*2e9d4914SAndroid Build Coastguard Worker 2581*2e9d4914SAndroid Build Coastguard Worker # Now add the directory to shlibpath_var. 2582*2e9d4914SAndroid Build Coastguard Worker if eval "test -z \"\$$shlibpath_var\""; then 2583*2e9d4914SAndroid Build Coastguard Worker eval "$shlibpath_var=\"\$dir\"" 2584*2e9d4914SAndroid Build Coastguard Worker else 2585*2e9d4914SAndroid Build Coastguard Worker eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586*2e9d4914SAndroid Build Coastguard Worker fi 2587*2e9d4914SAndroid Build Coastguard Worker done 2588*2e9d4914SAndroid Build Coastguard Worker 2589*2e9d4914SAndroid Build Coastguard Worker # This variable tells wrapper scripts just to set shlibpath_var 2590*2e9d4914SAndroid Build Coastguard Worker # rather than running their programs. 2591*2e9d4914SAndroid Build Coastguard Worker libtool_execute_magic="$magic" 2592*2e9d4914SAndroid Build Coastguard Worker 2593*2e9d4914SAndroid Build Coastguard Worker # Check if any of the arguments is a wrapper script. 2594*2e9d4914SAndroid Build Coastguard Worker args= 2595*2e9d4914SAndroid Build Coastguard Worker for file 2596*2e9d4914SAndroid Build Coastguard Worker do 2597*2e9d4914SAndroid Build Coastguard Worker case $file in 2598*2e9d4914SAndroid Build Coastguard Worker -* | *.la | *.lo ) ;; 2599*2e9d4914SAndroid Build Coastguard Worker *) 2600*2e9d4914SAndroid Build Coastguard Worker # Do a test to see if this is really a libtool program. 2601*2e9d4914SAndroid Build Coastguard Worker if func_ltwrapper_script_p "$file"; then 2602*2e9d4914SAndroid Build Coastguard Worker func_source "$file" 2603*2e9d4914SAndroid Build Coastguard Worker # Transform arg to wrapped name. 2604*2e9d4914SAndroid Build Coastguard Worker file="$progdir/$program" 2605*2e9d4914SAndroid Build Coastguard Worker elif func_ltwrapper_executable_p "$file"; then 2606*2e9d4914SAndroid Build Coastguard Worker func_ltwrapper_scriptname "$file" 2607*2e9d4914SAndroid Build Coastguard Worker func_source "$func_ltwrapper_scriptname_result" 2608*2e9d4914SAndroid Build Coastguard Worker # Transform arg to wrapped name. 2609*2e9d4914SAndroid Build Coastguard Worker file="$progdir/$program" 2610*2e9d4914SAndroid Build Coastguard Worker fi 2611*2e9d4914SAndroid Build Coastguard Worker ;; 2612*2e9d4914SAndroid Build Coastguard Worker esac 2613*2e9d4914SAndroid Build Coastguard Worker # Quote arguments (to preserve shell metacharacters). 2614*2e9d4914SAndroid Build Coastguard Worker func_append_quoted args "$file" 2615*2e9d4914SAndroid Build Coastguard Worker done 2616*2e9d4914SAndroid Build Coastguard Worker 2617*2e9d4914SAndroid Build Coastguard Worker if test "X$opt_dry_run" = Xfalse; then 2618*2e9d4914SAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 2619*2e9d4914SAndroid Build Coastguard Worker # Export the shlibpath_var. 2620*2e9d4914SAndroid Build Coastguard Worker eval "export $shlibpath_var" 2621*2e9d4914SAndroid Build Coastguard Worker fi 2622*2e9d4914SAndroid Build Coastguard Worker 2623*2e9d4914SAndroid Build Coastguard Worker # Restore saved environment variables 2624*2e9d4914SAndroid Build Coastguard Worker for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625*2e9d4914SAndroid Build Coastguard Worker do 2626*2e9d4914SAndroid Build Coastguard Worker eval "if test \"\${save_$lt_var+set}\" = set; then 2627*2e9d4914SAndroid Build Coastguard Worker $lt_var=\$save_$lt_var; export $lt_var 2628*2e9d4914SAndroid Build Coastguard Worker else 2629*2e9d4914SAndroid Build Coastguard Worker $lt_unset $lt_var 2630*2e9d4914SAndroid Build Coastguard Worker fi" 2631*2e9d4914SAndroid Build Coastguard Worker done 2632*2e9d4914SAndroid Build Coastguard Worker 2633*2e9d4914SAndroid Build Coastguard Worker # Now prepare to actually exec the command. 2634*2e9d4914SAndroid Build Coastguard Worker exec_cmd="\$cmd$args" 2635*2e9d4914SAndroid Build Coastguard Worker else 2636*2e9d4914SAndroid Build Coastguard Worker # Display what would be done. 2637*2e9d4914SAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 2638*2e9d4914SAndroid Build Coastguard Worker eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 2639*2e9d4914SAndroid Build Coastguard Worker echo "export $shlibpath_var" 2640*2e9d4914SAndroid Build Coastguard Worker fi 2641*2e9d4914SAndroid Build Coastguard Worker $ECHO "$cmd$args" 2642*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 2643*2e9d4914SAndroid Build Coastguard Worker fi 2644*2e9d4914SAndroid Build Coastguard Worker} 2645*2e9d4914SAndroid Build Coastguard Worker 2646*2e9d4914SAndroid Build Coastguard Workertest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2647*2e9d4914SAndroid Build Coastguard Worker 2648*2e9d4914SAndroid Build Coastguard Worker 2649*2e9d4914SAndroid Build Coastguard Worker# func_mode_finish arg... 2650*2e9d4914SAndroid Build Coastguard Workerfunc_mode_finish () 2651*2e9d4914SAndroid Build Coastguard Worker{ 2652*2e9d4914SAndroid Build Coastguard Worker $opt_debug 2653*2e9d4914SAndroid Build Coastguard Worker libs= 2654*2e9d4914SAndroid Build Coastguard Worker libdirs= 2655*2e9d4914SAndroid Build Coastguard Worker admincmds= 2656*2e9d4914SAndroid Build Coastguard Worker 2657*2e9d4914SAndroid Build Coastguard Worker for opt in "$nonopt" ${1+"$@"} 2658*2e9d4914SAndroid Build Coastguard Worker do 2659*2e9d4914SAndroid Build Coastguard Worker if test -d "$opt"; then 2660*2e9d4914SAndroid Build Coastguard Worker func_append libdirs " $opt" 2661*2e9d4914SAndroid Build Coastguard Worker 2662*2e9d4914SAndroid Build Coastguard Worker elif test -f "$opt"; then 2663*2e9d4914SAndroid Build Coastguard Worker if func_lalib_unsafe_p "$opt"; then 2664*2e9d4914SAndroid Build Coastguard Worker func_append libs " $opt" 2665*2e9d4914SAndroid Build Coastguard Worker else 2666*2e9d4914SAndroid Build Coastguard Worker func_warning "\`$opt' is not a valid libtool archive" 2667*2e9d4914SAndroid Build Coastguard Worker fi 2668*2e9d4914SAndroid Build Coastguard Worker 2669*2e9d4914SAndroid Build Coastguard Worker else 2670*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "invalid argument \`$opt'" 2671*2e9d4914SAndroid Build Coastguard Worker fi 2672*2e9d4914SAndroid Build Coastguard Worker done 2673*2e9d4914SAndroid Build Coastguard Worker 2674*2e9d4914SAndroid Build Coastguard Worker if test -n "$libs"; then 2675*2e9d4914SAndroid Build Coastguard Worker if test -n "$lt_sysroot"; then 2676*2e9d4914SAndroid Build Coastguard Worker sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 2677*2e9d4914SAndroid Build Coastguard Worker sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 2678*2e9d4914SAndroid Build Coastguard Worker else 2679*2e9d4914SAndroid Build Coastguard Worker sysroot_cmd= 2680*2e9d4914SAndroid Build Coastguard Worker fi 2681*2e9d4914SAndroid Build Coastguard Worker 2682*2e9d4914SAndroid Build Coastguard Worker # Remove sysroot references 2683*2e9d4914SAndroid Build Coastguard Worker if $opt_dry_run; then 2684*2e9d4914SAndroid Build Coastguard Worker for lib in $libs; do 2685*2e9d4914SAndroid Build Coastguard Worker echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 2686*2e9d4914SAndroid Build Coastguard Worker done 2687*2e9d4914SAndroid Build Coastguard Worker else 2688*2e9d4914SAndroid Build Coastguard Worker tmpdir=`func_mktempdir` 2689*2e9d4914SAndroid Build Coastguard Worker for lib in $libs; do 2690*2e9d4914SAndroid Build Coastguard Worker sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 2691*2e9d4914SAndroid Build Coastguard Worker > $tmpdir/tmp-la 2692*2e9d4914SAndroid Build Coastguard Worker mv -f $tmpdir/tmp-la $lib 2693*2e9d4914SAndroid Build Coastguard Worker done 2694*2e9d4914SAndroid Build Coastguard Worker ${RM}r "$tmpdir" 2695*2e9d4914SAndroid Build Coastguard Worker fi 2696*2e9d4914SAndroid Build Coastguard Worker fi 2697*2e9d4914SAndroid Build Coastguard Worker 2698*2e9d4914SAndroid Build Coastguard Worker if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699*2e9d4914SAndroid Build Coastguard Worker for libdir in $libdirs; do 2700*2e9d4914SAndroid Build Coastguard Worker if test -n "$finish_cmds"; then 2701*2e9d4914SAndroid Build Coastguard Worker # Do each command in the finish commands. 2702*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703*2e9d4914SAndroid Build Coastguard Worker'"$cmd"'"' 2704*2e9d4914SAndroid Build Coastguard Worker fi 2705*2e9d4914SAndroid Build Coastguard Worker if test -n "$finish_eval"; then 2706*2e9d4914SAndroid Build Coastguard Worker # Do the single finish_eval. 2707*2e9d4914SAndroid Build Coastguard Worker eval cmds=\"$finish_eval\" 2708*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || eval "$cmds" || func_append admincmds " 2709*2e9d4914SAndroid Build Coastguard Worker $cmds" 2710*2e9d4914SAndroid Build Coastguard Worker fi 2711*2e9d4914SAndroid Build Coastguard Worker done 2712*2e9d4914SAndroid Build Coastguard Worker fi 2713*2e9d4914SAndroid Build Coastguard Worker 2714*2e9d4914SAndroid Build Coastguard Worker # Exit here if they wanted silent mode. 2715*2e9d4914SAndroid Build Coastguard Worker $opt_silent && exit $EXIT_SUCCESS 2716*2e9d4914SAndroid Build Coastguard Worker 2717*2e9d4914SAndroid Build Coastguard Worker if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2718*2e9d4914SAndroid Build Coastguard Worker echo "----------------------------------------------------------------------" 2719*2e9d4914SAndroid Build Coastguard Worker echo "Libraries have been installed in:" 2720*2e9d4914SAndroid Build Coastguard Worker for libdir in $libdirs; do 2721*2e9d4914SAndroid Build Coastguard Worker $ECHO " $libdir" 2722*2e9d4914SAndroid Build Coastguard Worker done 2723*2e9d4914SAndroid Build Coastguard Worker echo 2724*2e9d4914SAndroid Build Coastguard Worker echo "If you ever happen to want to link against installed libraries" 2725*2e9d4914SAndroid Build Coastguard Worker echo "in a given directory, LIBDIR, you must either use libtool, and" 2726*2e9d4914SAndroid Build Coastguard Worker echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2727*2e9d4914SAndroid Build Coastguard Worker echo "flag during linking and do at least one of the following:" 2728*2e9d4914SAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 2729*2e9d4914SAndroid Build Coastguard Worker echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2730*2e9d4914SAndroid Build Coastguard Worker echo " during execution" 2731*2e9d4914SAndroid Build Coastguard Worker fi 2732*2e9d4914SAndroid Build Coastguard Worker if test -n "$runpath_var"; then 2733*2e9d4914SAndroid Build Coastguard Worker echo " - add LIBDIR to the \`$runpath_var' environment variable" 2734*2e9d4914SAndroid Build Coastguard Worker echo " during linking" 2735*2e9d4914SAndroid Build Coastguard Worker fi 2736*2e9d4914SAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 2737*2e9d4914SAndroid Build Coastguard Worker libdir=LIBDIR 2738*2e9d4914SAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 2739*2e9d4914SAndroid Build Coastguard Worker 2740*2e9d4914SAndroid Build Coastguard Worker $ECHO " - use the \`$flag' linker flag" 2741*2e9d4914SAndroid Build Coastguard Worker fi 2742*2e9d4914SAndroid Build Coastguard Worker if test -n "$admincmds"; then 2743*2e9d4914SAndroid Build Coastguard Worker $ECHO " - have your system administrator run these commands:$admincmds" 2744*2e9d4914SAndroid Build Coastguard Worker fi 2745*2e9d4914SAndroid Build Coastguard Worker if test -f /etc/ld.so.conf; then 2746*2e9d4914SAndroid Build Coastguard Worker echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2747*2e9d4914SAndroid Build Coastguard Worker fi 2748*2e9d4914SAndroid Build Coastguard Worker echo 2749*2e9d4914SAndroid Build Coastguard Worker 2750*2e9d4914SAndroid Build Coastguard Worker echo "See any operating system documentation about shared libraries for" 2751*2e9d4914SAndroid Build Coastguard Worker case $host in 2752*2e9d4914SAndroid Build Coastguard Worker solaris2.[6789]|solaris2.1[0-9]) 2753*2e9d4914SAndroid Build Coastguard Worker echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2754*2e9d4914SAndroid Build Coastguard Worker echo "pages." 2755*2e9d4914SAndroid Build Coastguard Worker ;; 2756*2e9d4914SAndroid Build Coastguard Worker *) 2757*2e9d4914SAndroid Build Coastguard Worker echo "more information, such as the ld(1) and ld.so(8) manual pages." 2758*2e9d4914SAndroid Build Coastguard Worker ;; 2759*2e9d4914SAndroid Build Coastguard Worker esac 2760*2e9d4914SAndroid Build Coastguard Worker echo "----------------------------------------------------------------------" 2761*2e9d4914SAndroid Build Coastguard Worker fi 2762*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 2763*2e9d4914SAndroid Build Coastguard Worker} 2764*2e9d4914SAndroid Build Coastguard Worker 2765*2e9d4914SAndroid Build Coastguard Workertest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766*2e9d4914SAndroid Build Coastguard Worker 2767*2e9d4914SAndroid Build Coastguard Worker 2768*2e9d4914SAndroid Build Coastguard Worker# func_mode_install arg... 2769*2e9d4914SAndroid Build Coastguard Workerfunc_mode_install () 2770*2e9d4914SAndroid Build Coastguard Worker{ 2771*2e9d4914SAndroid Build Coastguard Worker $opt_debug 2772*2e9d4914SAndroid Build Coastguard Worker # There may be an optional sh(1) argument at the beginning of 2773*2e9d4914SAndroid Build Coastguard Worker # install_prog (especially on Windows NT). 2774*2e9d4914SAndroid Build Coastguard Worker if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775*2e9d4914SAndroid Build Coastguard Worker # Allow the use of GNU shtool's install command. 2776*2e9d4914SAndroid Build Coastguard Worker case $nonopt in *shtool*) :;; *) false;; esac; then 2777*2e9d4914SAndroid Build Coastguard Worker # Aesthetically quote it. 2778*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$nonopt" 2779*2e9d4914SAndroid Build Coastguard Worker install_prog="$func_quote_for_eval_result " 2780*2e9d4914SAndroid Build Coastguard Worker arg=$1 2781*2e9d4914SAndroid Build Coastguard Worker shift 2782*2e9d4914SAndroid Build Coastguard Worker else 2783*2e9d4914SAndroid Build Coastguard Worker install_prog= 2784*2e9d4914SAndroid Build Coastguard Worker arg=$nonopt 2785*2e9d4914SAndroid Build Coastguard Worker fi 2786*2e9d4914SAndroid Build Coastguard Worker 2787*2e9d4914SAndroid Build Coastguard Worker # The real first argument should be the name of the installation program. 2788*2e9d4914SAndroid Build Coastguard Worker # Aesthetically quote it. 2789*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$arg" 2790*2e9d4914SAndroid Build Coastguard Worker func_append install_prog "$func_quote_for_eval_result" 2791*2e9d4914SAndroid Build Coastguard Worker install_shared_prog=$install_prog 2792*2e9d4914SAndroid Build Coastguard Worker case " $install_prog " in 2793*2e9d4914SAndroid Build Coastguard Worker *[\\\ /]cp\ *) install_cp=: ;; 2794*2e9d4914SAndroid Build Coastguard Worker *) install_cp=false ;; 2795*2e9d4914SAndroid Build Coastguard Worker esac 2796*2e9d4914SAndroid Build Coastguard Worker 2797*2e9d4914SAndroid Build Coastguard Worker # We need to accept at least all the BSD install flags. 2798*2e9d4914SAndroid Build Coastguard Worker dest= 2799*2e9d4914SAndroid Build Coastguard Worker files= 2800*2e9d4914SAndroid Build Coastguard Worker opts= 2801*2e9d4914SAndroid Build Coastguard Worker prev= 2802*2e9d4914SAndroid Build Coastguard Worker install_type= 2803*2e9d4914SAndroid Build Coastguard Worker isdir=no 2804*2e9d4914SAndroid Build Coastguard Worker stripme= 2805*2e9d4914SAndroid Build Coastguard Worker no_mode=: 2806*2e9d4914SAndroid Build Coastguard Worker for arg 2807*2e9d4914SAndroid Build Coastguard Worker do 2808*2e9d4914SAndroid Build Coastguard Worker arg2= 2809*2e9d4914SAndroid Build Coastguard Worker if test -n "$dest"; then 2810*2e9d4914SAndroid Build Coastguard Worker func_append files " $dest" 2811*2e9d4914SAndroid Build Coastguard Worker dest=$arg 2812*2e9d4914SAndroid Build Coastguard Worker continue 2813*2e9d4914SAndroid Build Coastguard Worker fi 2814*2e9d4914SAndroid Build Coastguard Worker 2815*2e9d4914SAndroid Build Coastguard Worker case $arg in 2816*2e9d4914SAndroid Build Coastguard Worker -d) isdir=yes ;; 2817*2e9d4914SAndroid Build Coastguard Worker -f) 2818*2e9d4914SAndroid Build Coastguard Worker if $install_cp; then :; else 2819*2e9d4914SAndroid Build Coastguard Worker prev=$arg 2820*2e9d4914SAndroid Build Coastguard Worker fi 2821*2e9d4914SAndroid Build Coastguard Worker ;; 2822*2e9d4914SAndroid Build Coastguard Worker -g | -m | -o) 2823*2e9d4914SAndroid Build Coastguard Worker prev=$arg 2824*2e9d4914SAndroid Build Coastguard Worker ;; 2825*2e9d4914SAndroid Build Coastguard Worker -s) 2826*2e9d4914SAndroid Build Coastguard Worker stripme=" -s" 2827*2e9d4914SAndroid Build Coastguard Worker continue 2828*2e9d4914SAndroid Build Coastguard Worker ;; 2829*2e9d4914SAndroid Build Coastguard Worker -*) 2830*2e9d4914SAndroid Build Coastguard Worker ;; 2831*2e9d4914SAndroid Build Coastguard Worker *) 2832*2e9d4914SAndroid Build Coastguard Worker # If the previous option needed an argument, then skip it. 2833*2e9d4914SAndroid Build Coastguard Worker if test -n "$prev"; then 2834*2e9d4914SAndroid Build Coastguard Worker if test "x$prev" = x-m && test -n "$install_override_mode"; then 2835*2e9d4914SAndroid Build Coastguard Worker arg2=$install_override_mode 2836*2e9d4914SAndroid Build Coastguard Worker no_mode=false 2837*2e9d4914SAndroid Build Coastguard Worker fi 2838*2e9d4914SAndroid Build Coastguard Worker prev= 2839*2e9d4914SAndroid Build Coastguard Worker else 2840*2e9d4914SAndroid Build Coastguard Worker dest=$arg 2841*2e9d4914SAndroid Build Coastguard Worker continue 2842*2e9d4914SAndroid Build Coastguard Worker fi 2843*2e9d4914SAndroid Build Coastguard Worker ;; 2844*2e9d4914SAndroid Build Coastguard Worker esac 2845*2e9d4914SAndroid Build Coastguard Worker 2846*2e9d4914SAndroid Build Coastguard Worker # Aesthetically quote the argument. 2847*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$arg" 2848*2e9d4914SAndroid Build Coastguard Worker func_append install_prog " $func_quote_for_eval_result" 2849*2e9d4914SAndroid Build Coastguard Worker if test -n "$arg2"; then 2850*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$arg2" 2851*2e9d4914SAndroid Build Coastguard Worker fi 2852*2e9d4914SAndroid Build Coastguard Worker func_append install_shared_prog " $func_quote_for_eval_result" 2853*2e9d4914SAndroid Build Coastguard Worker done 2854*2e9d4914SAndroid Build Coastguard Worker 2855*2e9d4914SAndroid Build Coastguard Worker test -z "$install_prog" && \ 2856*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "you must specify an install program" 2857*2e9d4914SAndroid Build Coastguard Worker 2858*2e9d4914SAndroid Build Coastguard Worker test -n "$prev" && \ 2859*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "the \`$prev' option requires an argument" 2860*2e9d4914SAndroid Build Coastguard Worker 2861*2e9d4914SAndroid Build Coastguard Worker if test -n "$install_override_mode" && $no_mode; then 2862*2e9d4914SAndroid Build Coastguard Worker if $install_cp; then :; else 2863*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$install_override_mode" 2864*2e9d4914SAndroid Build Coastguard Worker func_append install_shared_prog " -m $func_quote_for_eval_result" 2865*2e9d4914SAndroid Build Coastguard Worker fi 2866*2e9d4914SAndroid Build Coastguard Worker fi 2867*2e9d4914SAndroid Build Coastguard Worker 2868*2e9d4914SAndroid Build Coastguard Worker if test -z "$files"; then 2869*2e9d4914SAndroid Build Coastguard Worker if test -z "$dest"; then 2870*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "no file or destination specified" 2871*2e9d4914SAndroid Build Coastguard Worker else 2872*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "you must specify a destination" 2873*2e9d4914SAndroid Build Coastguard Worker fi 2874*2e9d4914SAndroid Build Coastguard Worker fi 2875*2e9d4914SAndroid Build Coastguard Worker 2876*2e9d4914SAndroid Build Coastguard Worker # Strip any trailing slash from the destination. 2877*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '/' "$dest" 2878*2e9d4914SAndroid Build Coastguard Worker dest=$func_stripname_result 2879*2e9d4914SAndroid Build Coastguard Worker 2880*2e9d4914SAndroid Build Coastguard Worker # Check to see that the destination is a directory. 2881*2e9d4914SAndroid Build Coastguard Worker test -d "$dest" && isdir=yes 2882*2e9d4914SAndroid Build Coastguard Worker if test "$isdir" = yes; then 2883*2e9d4914SAndroid Build Coastguard Worker destdir="$dest" 2884*2e9d4914SAndroid Build Coastguard Worker destname= 2885*2e9d4914SAndroid Build Coastguard Worker else 2886*2e9d4914SAndroid Build Coastguard Worker func_dirname_and_basename "$dest" "" "." 2887*2e9d4914SAndroid Build Coastguard Worker destdir="$func_dirname_result" 2888*2e9d4914SAndroid Build Coastguard Worker destname="$func_basename_result" 2889*2e9d4914SAndroid Build Coastguard Worker 2890*2e9d4914SAndroid Build Coastguard Worker # Not a directory, so check to see that there is only one file specified. 2891*2e9d4914SAndroid Build Coastguard Worker set dummy $files; shift 2892*2e9d4914SAndroid Build Coastguard Worker test "$#" -gt 1 && \ 2893*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "\`$dest' is not a directory" 2894*2e9d4914SAndroid Build Coastguard Worker fi 2895*2e9d4914SAndroid Build Coastguard Worker case $destdir in 2896*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 2897*2e9d4914SAndroid Build Coastguard Worker *) 2898*2e9d4914SAndroid Build Coastguard Worker for file in $files; do 2899*2e9d4914SAndroid Build Coastguard Worker case $file in 2900*2e9d4914SAndroid Build Coastguard Worker *.lo) ;; 2901*2e9d4914SAndroid Build Coastguard Worker *) 2902*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "\`$destdir' must be an absolute directory name" 2903*2e9d4914SAndroid Build Coastguard Worker ;; 2904*2e9d4914SAndroid Build Coastguard Worker esac 2905*2e9d4914SAndroid Build Coastguard Worker done 2906*2e9d4914SAndroid Build Coastguard Worker ;; 2907*2e9d4914SAndroid Build Coastguard Worker esac 2908*2e9d4914SAndroid Build Coastguard Worker 2909*2e9d4914SAndroid Build Coastguard Worker # This variable tells wrapper scripts just to set variables rather 2910*2e9d4914SAndroid Build Coastguard Worker # than running their programs. 2911*2e9d4914SAndroid Build Coastguard Worker libtool_install_magic="$magic" 2912*2e9d4914SAndroid Build Coastguard Worker 2913*2e9d4914SAndroid Build Coastguard Worker staticlibs= 2914*2e9d4914SAndroid Build Coastguard Worker future_libdirs= 2915*2e9d4914SAndroid Build Coastguard Worker current_libdirs= 2916*2e9d4914SAndroid Build Coastguard Worker for file in $files; do 2917*2e9d4914SAndroid Build Coastguard Worker 2918*2e9d4914SAndroid Build Coastguard Worker # Do each installation. 2919*2e9d4914SAndroid Build Coastguard Worker case $file in 2920*2e9d4914SAndroid Build Coastguard Worker *.$libext) 2921*2e9d4914SAndroid Build Coastguard Worker # Do the static libraries later. 2922*2e9d4914SAndroid Build Coastguard Worker func_append staticlibs " $file" 2923*2e9d4914SAndroid Build Coastguard Worker ;; 2924*2e9d4914SAndroid Build Coastguard Worker 2925*2e9d4914SAndroid Build Coastguard Worker *.la) 2926*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$file" 2927*2e9d4914SAndroid Build Coastguard Worker file=$func_resolve_sysroot_result 2928*2e9d4914SAndroid Build Coastguard Worker 2929*2e9d4914SAndroid Build Coastguard Worker # Check to see that this really is a libtool archive. 2930*2e9d4914SAndroid Build Coastguard Worker func_lalib_unsafe_p "$file" \ 2931*2e9d4914SAndroid Build Coastguard Worker || func_fatal_help "\`$file' is not a valid libtool archive" 2932*2e9d4914SAndroid Build Coastguard Worker 2933*2e9d4914SAndroid Build Coastguard Worker library_names= 2934*2e9d4914SAndroid Build Coastguard Worker old_library= 2935*2e9d4914SAndroid Build Coastguard Worker relink_command= 2936*2e9d4914SAndroid Build Coastguard Worker func_source "$file" 2937*2e9d4914SAndroid Build Coastguard Worker 2938*2e9d4914SAndroid Build Coastguard Worker # Add the libdir to current_libdirs if it is the destination. 2939*2e9d4914SAndroid Build Coastguard Worker if test "X$destdir" = "X$libdir"; then 2940*2e9d4914SAndroid Build Coastguard Worker case "$current_libdirs " in 2941*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 2942*2e9d4914SAndroid Build Coastguard Worker *) func_append current_libdirs " $libdir" ;; 2943*2e9d4914SAndroid Build Coastguard Worker esac 2944*2e9d4914SAndroid Build Coastguard Worker else 2945*2e9d4914SAndroid Build Coastguard Worker # Note the libdir as a future libdir. 2946*2e9d4914SAndroid Build Coastguard Worker case "$future_libdirs " in 2947*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 2948*2e9d4914SAndroid Build Coastguard Worker *) func_append future_libdirs " $libdir" ;; 2949*2e9d4914SAndroid Build Coastguard Worker esac 2950*2e9d4914SAndroid Build Coastguard Worker fi 2951*2e9d4914SAndroid Build Coastguard Worker 2952*2e9d4914SAndroid Build Coastguard Worker func_dirname "$file" "/" "" 2953*2e9d4914SAndroid Build Coastguard Worker dir="$func_dirname_result" 2954*2e9d4914SAndroid Build Coastguard Worker func_append dir "$objdir" 2955*2e9d4914SAndroid Build Coastguard Worker 2956*2e9d4914SAndroid Build Coastguard Worker if test -n "$relink_command"; then 2957*2e9d4914SAndroid Build Coastguard Worker # Determine the prefix the user has applied to our future dir. 2958*2e9d4914SAndroid Build Coastguard Worker inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959*2e9d4914SAndroid Build Coastguard Worker 2960*2e9d4914SAndroid Build Coastguard Worker # Don't allow the user to place us outside of our expected 2961*2e9d4914SAndroid Build Coastguard Worker # location b/c this prevents finding dependent libraries that 2962*2e9d4914SAndroid Build Coastguard Worker # are installed to the same prefix. 2963*2e9d4914SAndroid Build Coastguard Worker # At present, this check doesn't affect windows .dll's that 2964*2e9d4914SAndroid Build Coastguard Worker # are installed into $libdir/../bin (currently, that works fine) 2965*2e9d4914SAndroid Build Coastguard Worker # but it's something to keep an eye on. 2966*2e9d4914SAndroid Build Coastguard Worker test "$inst_prefix_dir" = "$destdir" && \ 2967*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968*2e9d4914SAndroid Build Coastguard Worker 2969*2e9d4914SAndroid Build Coastguard Worker if test -n "$inst_prefix_dir"; then 2970*2e9d4914SAndroid Build Coastguard Worker # Stick the inst_prefix_dir data into the link command. 2971*2e9d4914SAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972*2e9d4914SAndroid Build Coastguard Worker else 2973*2e9d4914SAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974*2e9d4914SAndroid Build Coastguard Worker fi 2975*2e9d4914SAndroid Build Coastguard Worker 2976*2e9d4914SAndroid Build Coastguard Worker func_warning "relinking \`$file'" 2977*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$relink_command" \ 2978*2e9d4914SAndroid Build Coastguard Worker 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979*2e9d4914SAndroid Build Coastguard Worker fi 2980*2e9d4914SAndroid Build Coastguard Worker 2981*2e9d4914SAndroid Build Coastguard Worker # See the names of the shared library. 2982*2e9d4914SAndroid Build Coastguard Worker set dummy $library_names; shift 2983*2e9d4914SAndroid Build Coastguard Worker if test -n "$1"; then 2984*2e9d4914SAndroid Build Coastguard Worker realname="$1" 2985*2e9d4914SAndroid Build Coastguard Worker shift 2986*2e9d4914SAndroid Build Coastguard Worker 2987*2e9d4914SAndroid Build Coastguard Worker srcname="$realname" 2988*2e9d4914SAndroid Build Coastguard Worker test -n "$relink_command" && srcname="$realname"T 2989*2e9d4914SAndroid Build Coastguard Worker 2990*2e9d4914SAndroid Build Coastguard Worker # Install the shared library and build the symlinks. 2991*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992*2e9d4914SAndroid Build Coastguard Worker 'exit $?' 2993*2e9d4914SAndroid Build Coastguard Worker tstripme="$stripme" 2994*2e9d4914SAndroid Build Coastguard Worker case $host_os in 2995*2e9d4914SAndroid Build Coastguard Worker cygwin* | mingw* | pw32* | cegcc*) 2996*2e9d4914SAndroid Build Coastguard Worker case $realname in 2997*2e9d4914SAndroid Build Coastguard Worker *.dll.a) 2998*2e9d4914SAndroid Build Coastguard Worker tstripme="" 2999*2e9d4914SAndroid Build Coastguard Worker ;; 3000*2e9d4914SAndroid Build Coastguard Worker esac 3001*2e9d4914SAndroid Build Coastguard Worker ;; 3002*2e9d4914SAndroid Build Coastguard Worker esac 3003*2e9d4914SAndroid Build Coastguard Worker if test -n "$tstripme" && test -n "$striplib"; then 3004*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$striplib $destdir/$realname" 'exit $?' 3005*2e9d4914SAndroid Build Coastguard Worker fi 3006*2e9d4914SAndroid Build Coastguard Worker 3007*2e9d4914SAndroid Build Coastguard Worker if test "$#" -gt 0; then 3008*2e9d4914SAndroid Build Coastguard Worker # Delete the old symlinks, and create new ones. 3009*2e9d4914SAndroid Build Coastguard Worker # Try `ln -sf' first, because the `ln' binary might depend on 3010*2e9d4914SAndroid Build Coastguard Worker # the symlink we replace! Solaris /bin/ln does not understand -f, 3011*2e9d4914SAndroid Build Coastguard Worker # so we also need to try rm && ln -s. 3012*2e9d4914SAndroid Build Coastguard Worker for linkname 3013*2e9d4914SAndroid Build Coastguard Worker do 3014*2e9d4914SAndroid Build Coastguard Worker test "$linkname" != "$realname" \ 3015*2e9d4914SAndroid Build Coastguard Worker && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3016*2e9d4914SAndroid Build Coastguard Worker done 3017*2e9d4914SAndroid Build Coastguard Worker fi 3018*2e9d4914SAndroid Build Coastguard Worker 3019*2e9d4914SAndroid Build Coastguard Worker # Do each command in the postinstall commands. 3020*2e9d4914SAndroid Build Coastguard Worker lib="$destdir/$realname" 3021*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$postinstall_cmds" 'exit $?' 3022*2e9d4914SAndroid Build Coastguard Worker fi 3023*2e9d4914SAndroid Build Coastguard Worker 3024*2e9d4914SAndroid Build Coastguard Worker # Install the pseudo-library for information purposes. 3025*2e9d4914SAndroid Build Coastguard Worker func_basename "$file" 3026*2e9d4914SAndroid Build Coastguard Worker name="$func_basename_result" 3027*2e9d4914SAndroid Build Coastguard Worker instname="$dir/$name"i 3028*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3029*2e9d4914SAndroid Build Coastguard Worker 3030*2e9d4914SAndroid Build Coastguard Worker # Maybe install the static library, too. 3031*2e9d4914SAndroid Build Coastguard Worker test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032*2e9d4914SAndroid Build Coastguard Worker ;; 3033*2e9d4914SAndroid Build Coastguard Worker 3034*2e9d4914SAndroid Build Coastguard Worker *.lo) 3035*2e9d4914SAndroid Build Coastguard Worker # Install (i.e. copy) a libtool object. 3036*2e9d4914SAndroid Build Coastguard Worker 3037*2e9d4914SAndroid Build Coastguard Worker # Figure out destination file name, if it wasn't already specified. 3038*2e9d4914SAndroid Build Coastguard Worker if test -n "$destname"; then 3039*2e9d4914SAndroid Build Coastguard Worker destfile="$destdir/$destname" 3040*2e9d4914SAndroid Build Coastguard Worker else 3041*2e9d4914SAndroid Build Coastguard Worker func_basename "$file" 3042*2e9d4914SAndroid Build Coastguard Worker destfile="$func_basename_result" 3043*2e9d4914SAndroid Build Coastguard Worker destfile="$destdir/$destfile" 3044*2e9d4914SAndroid Build Coastguard Worker fi 3045*2e9d4914SAndroid Build Coastguard Worker 3046*2e9d4914SAndroid Build Coastguard Worker # Deduce the name of the destination old-style object file. 3047*2e9d4914SAndroid Build Coastguard Worker case $destfile in 3048*2e9d4914SAndroid Build Coastguard Worker *.lo) 3049*2e9d4914SAndroid Build Coastguard Worker func_lo2o "$destfile" 3050*2e9d4914SAndroid Build Coastguard Worker staticdest=$func_lo2o_result 3051*2e9d4914SAndroid Build Coastguard Worker ;; 3052*2e9d4914SAndroid Build Coastguard Worker *.$objext) 3053*2e9d4914SAndroid Build Coastguard Worker staticdest="$destfile" 3054*2e9d4914SAndroid Build Coastguard Worker destfile= 3055*2e9d4914SAndroid Build Coastguard Worker ;; 3056*2e9d4914SAndroid Build Coastguard Worker *) 3057*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058*2e9d4914SAndroid Build Coastguard Worker ;; 3059*2e9d4914SAndroid Build Coastguard Worker esac 3060*2e9d4914SAndroid Build Coastguard Worker 3061*2e9d4914SAndroid Build Coastguard Worker # Install the libtool object if requested. 3062*2e9d4914SAndroid Build Coastguard Worker test -n "$destfile" && \ 3063*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$install_prog $file $destfile" 'exit $?' 3064*2e9d4914SAndroid Build Coastguard Worker 3065*2e9d4914SAndroid Build Coastguard Worker # Install the old object if enabled. 3066*2e9d4914SAndroid Build Coastguard Worker if test "$build_old_libs" = yes; then 3067*2e9d4914SAndroid Build Coastguard Worker # Deduce the name of the old-style object file. 3068*2e9d4914SAndroid Build Coastguard Worker func_lo2o "$file" 3069*2e9d4914SAndroid Build Coastguard Worker staticobj=$func_lo2o_result 3070*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3071*2e9d4914SAndroid Build Coastguard Worker fi 3072*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 3073*2e9d4914SAndroid Build Coastguard Worker ;; 3074*2e9d4914SAndroid Build Coastguard Worker 3075*2e9d4914SAndroid Build Coastguard Worker *) 3076*2e9d4914SAndroid Build Coastguard Worker # Figure out destination file name, if it wasn't already specified. 3077*2e9d4914SAndroid Build Coastguard Worker if test -n "$destname"; then 3078*2e9d4914SAndroid Build Coastguard Worker destfile="$destdir/$destname" 3079*2e9d4914SAndroid Build Coastguard Worker else 3080*2e9d4914SAndroid Build Coastguard Worker func_basename "$file" 3081*2e9d4914SAndroid Build Coastguard Worker destfile="$func_basename_result" 3082*2e9d4914SAndroid Build Coastguard Worker destfile="$destdir/$destfile" 3083*2e9d4914SAndroid Build Coastguard Worker fi 3084*2e9d4914SAndroid Build Coastguard Worker 3085*2e9d4914SAndroid Build Coastguard Worker # If the file is missing, and there is a .exe on the end, strip it 3086*2e9d4914SAndroid Build Coastguard Worker # because it is most likely a libtool script we actually want to 3087*2e9d4914SAndroid Build Coastguard Worker # install 3088*2e9d4914SAndroid Build Coastguard Worker stripped_ext="" 3089*2e9d4914SAndroid Build Coastguard Worker case $file in 3090*2e9d4914SAndroid Build Coastguard Worker *.exe) 3091*2e9d4914SAndroid Build Coastguard Worker if test ! -f "$file"; then 3092*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '.exe' "$file" 3093*2e9d4914SAndroid Build Coastguard Worker file=$func_stripname_result 3094*2e9d4914SAndroid Build Coastguard Worker stripped_ext=".exe" 3095*2e9d4914SAndroid Build Coastguard Worker fi 3096*2e9d4914SAndroid Build Coastguard Worker ;; 3097*2e9d4914SAndroid Build Coastguard Worker esac 3098*2e9d4914SAndroid Build Coastguard Worker 3099*2e9d4914SAndroid Build Coastguard Worker # Do a test to see if this is really a libtool program. 3100*2e9d4914SAndroid Build Coastguard Worker case $host in 3101*2e9d4914SAndroid Build Coastguard Worker *cygwin* | *mingw*) 3102*2e9d4914SAndroid Build Coastguard Worker if func_ltwrapper_executable_p "$file"; then 3103*2e9d4914SAndroid Build Coastguard Worker func_ltwrapper_scriptname "$file" 3104*2e9d4914SAndroid Build Coastguard Worker wrapper=$func_ltwrapper_scriptname_result 3105*2e9d4914SAndroid Build Coastguard Worker else 3106*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '.exe' "$file" 3107*2e9d4914SAndroid Build Coastguard Worker wrapper=$func_stripname_result 3108*2e9d4914SAndroid Build Coastguard Worker fi 3109*2e9d4914SAndroid Build Coastguard Worker ;; 3110*2e9d4914SAndroid Build Coastguard Worker *) 3111*2e9d4914SAndroid Build Coastguard Worker wrapper=$file 3112*2e9d4914SAndroid Build Coastguard Worker ;; 3113*2e9d4914SAndroid Build Coastguard Worker esac 3114*2e9d4914SAndroid Build Coastguard Worker if func_ltwrapper_script_p "$wrapper"; then 3115*2e9d4914SAndroid Build Coastguard Worker notinst_deplibs= 3116*2e9d4914SAndroid Build Coastguard Worker relink_command= 3117*2e9d4914SAndroid Build Coastguard Worker 3118*2e9d4914SAndroid Build Coastguard Worker func_source "$wrapper" 3119*2e9d4914SAndroid Build Coastguard Worker 3120*2e9d4914SAndroid Build Coastguard Worker # Check the variables that should have been set. 3121*2e9d4914SAndroid Build Coastguard Worker test -z "$generated_by_libtool_version" && \ 3122*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123*2e9d4914SAndroid Build Coastguard Worker 3124*2e9d4914SAndroid Build Coastguard Worker finalize=yes 3125*2e9d4914SAndroid Build Coastguard Worker for lib in $notinst_deplibs; do 3126*2e9d4914SAndroid Build Coastguard Worker # Check to see that each library is installed. 3127*2e9d4914SAndroid Build Coastguard Worker libdir= 3128*2e9d4914SAndroid Build Coastguard Worker if test -f "$lib"; then 3129*2e9d4914SAndroid Build Coastguard Worker func_source "$lib" 3130*2e9d4914SAndroid Build Coastguard Worker fi 3131*2e9d4914SAndroid Build Coastguard Worker libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132*2e9d4914SAndroid Build Coastguard Worker if test -n "$libdir" && test ! -f "$libfile"; then 3133*2e9d4914SAndroid Build Coastguard Worker func_warning "\`$lib' has not been installed in \`$libdir'" 3134*2e9d4914SAndroid Build Coastguard Worker finalize=no 3135*2e9d4914SAndroid Build Coastguard Worker fi 3136*2e9d4914SAndroid Build Coastguard Worker done 3137*2e9d4914SAndroid Build Coastguard Worker 3138*2e9d4914SAndroid Build Coastguard Worker relink_command= 3139*2e9d4914SAndroid Build Coastguard Worker func_source "$wrapper" 3140*2e9d4914SAndroid Build Coastguard Worker 3141*2e9d4914SAndroid Build Coastguard Worker outputname= 3142*2e9d4914SAndroid Build Coastguard Worker if test "$fast_install" = no && test -n "$relink_command"; then 3143*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 3144*2e9d4914SAndroid Build Coastguard Worker if test "$finalize" = yes; then 3145*2e9d4914SAndroid Build Coastguard Worker tmpdir=`func_mktempdir` 3146*2e9d4914SAndroid Build Coastguard Worker func_basename "$file$stripped_ext" 3147*2e9d4914SAndroid Build Coastguard Worker file="$func_basename_result" 3148*2e9d4914SAndroid Build Coastguard Worker outputname="$tmpdir/$file" 3149*2e9d4914SAndroid Build Coastguard Worker # Replace the output file specification. 3150*2e9d4914SAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151*2e9d4914SAndroid Build Coastguard Worker 3152*2e9d4914SAndroid Build Coastguard Worker $opt_silent || { 3153*2e9d4914SAndroid Build Coastguard Worker func_quote_for_expand "$relink_command" 3154*2e9d4914SAndroid Build Coastguard Worker eval "func_echo $func_quote_for_expand_result" 3155*2e9d4914SAndroid Build Coastguard Worker } 3156*2e9d4914SAndroid Build Coastguard Worker if eval "$relink_command"; then : 3157*2e9d4914SAndroid Build Coastguard Worker else 3158*2e9d4914SAndroid Build Coastguard Worker func_error "error: relink \`$file' with the above command before installing it" 3159*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || ${RM}r "$tmpdir" 3160*2e9d4914SAndroid Build Coastguard Worker continue 3161*2e9d4914SAndroid Build Coastguard Worker fi 3162*2e9d4914SAndroid Build Coastguard Worker file="$outputname" 3163*2e9d4914SAndroid Build Coastguard Worker else 3164*2e9d4914SAndroid Build Coastguard Worker func_warning "cannot relink \`$file'" 3165*2e9d4914SAndroid Build Coastguard Worker fi 3166*2e9d4914SAndroid Build Coastguard Worker } 3167*2e9d4914SAndroid Build Coastguard Worker else 3168*2e9d4914SAndroid Build Coastguard Worker # Install the binary that we compiled earlier. 3169*2e9d4914SAndroid Build Coastguard Worker file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3170*2e9d4914SAndroid Build Coastguard Worker fi 3171*2e9d4914SAndroid Build Coastguard Worker fi 3172*2e9d4914SAndroid Build Coastguard Worker 3173*2e9d4914SAndroid Build Coastguard Worker # remove .exe since cygwin /usr/bin/install will append another 3174*2e9d4914SAndroid Build Coastguard Worker # one anyway 3175*2e9d4914SAndroid Build Coastguard Worker case $install_prog,$host in 3176*2e9d4914SAndroid Build Coastguard Worker */usr/bin/install*,*cygwin*) 3177*2e9d4914SAndroid Build Coastguard Worker case $file:$destfile in 3178*2e9d4914SAndroid Build Coastguard Worker *.exe:*.exe) 3179*2e9d4914SAndroid Build Coastguard Worker # this is ok 3180*2e9d4914SAndroid Build Coastguard Worker ;; 3181*2e9d4914SAndroid Build Coastguard Worker *.exe:*) 3182*2e9d4914SAndroid Build Coastguard Worker destfile=$destfile.exe 3183*2e9d4914SAndroid Build Coastguard Worker ;; 3184*2e9d4914SAndroid Build Coastguard Worker *:*.exe) 3185*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '.exe' "$destfile" 3186*2e9d4914SAndroid Build Coastguard Worker destfile=$func_stripname_result 3187*2e9d4914SAndroid Build Coastguard Worker ;; 3188*2e9d4914SAndroid Build Coastguard Worker esac 3189*2e9d4914SAndroid Build Coastguard Worker ;; 3190*2e9d4914SAndroid Build Coastguard Worker esac 3191*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || if test -n "$outputname"; then 3193*2e9d4914SAndroid Build Coastguard Worker ${RM}r "$tmpdir" 3194*2e9d4914SAndroid Build Coastguard Worker fi 3195*2e9d4914SAndroid Build Coastguard Worker ;; 3196*2e9d4914SAndroid Build Coastguard Worker esac 3197*2e9d4914SAndroid Build Coastguard Worker done 3198*2e9d4914SAndroid Build Coastguard Worker 3199*2e9d4914SAndroid Build Coastguard Worker for file in $staticlibs; do 3200*2e9d4914SAndroid Build Coastguard Worker func_basename "$file" 3201*2e9d4914SAndroid Build Coastguard Worker name="$func_basename_result" 3202*2e9d4914SAndroid Build Coastguard Worker 3203*2e9d4914SAndroid Build Coastguard Worker # Set up the ranlib parameters. 3204*2e9d4914SAndroid Build Coastguard Worker oldlib="$destdir/$name" 3205*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 3206*2e9d4914SAndroid Build Coastguard Worker tool_oldlib=$func_to_tool_file_result 3207*2e9d4914SAndroid Build Coastguard Worker 3208*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209*2e9d4914SAndroid Build Coastguard Worker 3210*2e9d4914SAndroid Build Coastguard Worker if test -n "$stripme" && test -n "$old_striplib"; then 3211*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212*2e9d4914SAndroid Build Coastguard Worker fi 3213*2e9d4914SAndroid Build Coastguard Worker 3214*2e9d4914SAndroid Build Coastguard Worker # Do each command in the postinstall commands. 3215*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216*2e9d4914SAndroid Build Coastguard Worker done 3217*2e9d4914SAndroid Build Coastguard Worker 3218*2e9d4914SAndroid Build Coastguard Worker test -n "$future_libdirs" && \ 3219*2e9d4914SAndroid Build Coastguard Worker func_warning "remember to run \`$progname --finish$future_libdirs'" 3220*2e9d4914SAndroid Build Coastguard Worker 3221*2e9d4914SAndroid Build Coastguard Worker if test -n "$current_libdirs"; then 3222*2e9d4914SAndroid Build Coastguard Worker # Maybe just do a dry run. 3223*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224*2e9d4914SAndroid Build Coastguard Worker exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225*2e9d4914SAndroid Build Coastguard Worker else 3226*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 3227*2e9d4914SAndroid Build Coastguard Worker fi 3228*2e9d4914SAndroid Build Coastguard Worker} 3229*2e9d4914SAndroid Build Coastguard Worker 3230*2e9d4914SAndroid Build Coastguard Workertest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231*2e9d4914SAndroid Build Coastguard Worker 3232*2e9d4914SAndroid Build Coastguard Worker 3233*2e9d4914SAndroid Build Coastguard Worker# func_generate_dlsyms outputname originator pic_p 3234*2e9d4914SAndroid Build Coastguard Worker# Extract symbols from dlprefiles and create ${outputname}S.o with 3235*2e9d4914SAndroid Build Coastguard Worker# a dlpreopen symbol table. 3236*2e9d4914SAndroid Build Coastguard Workerfunc_generate_dlsyms () 3237*2e9d4914SAndroid Build Coastguard Worker{ 3238*2e9d4914SAndroid Build Coastguard Worker $opt_debug 3239*2e9d4914SAndroid Build Coastguard Worker my_outputname="$1" 3240*2e9d4914SAndroid Build Coastguard Worker my_originator="$2" 3241*2e9d4914SAndroid Build Coastguard Worker my_pic_p="${3-no}" 3242*2e9d4914SAndroid Build Coastguard Worker my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243*2e9d4914SAndroid Build Coastguard Worker my_dlsyms= 3244*2e9d4914SAndroid Build Coastguard Worker 3245*2e9d4914SAndroid Build Coastguard Worker if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246*2e9d4914SAndroid Build Coastguard Worker if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247*2e9d4914SAndroid Build Coastguard Worker my_dlsyms="${my_outputname}S.c" 3248*2e9d4914SAndroid Build Coastguard Worker else 3249*2e9d4914SAndroid Build Coastguard Worker func_error "not configured to extract global symbols from dlpreopened files" 3250*2e9d4914SAndroid Build Coastguard Worker fi 3251*2e9d4914SAndroid Build Coastguard Worker fi 3252*2e9d4914SAndroid Build Coastguard Worker 3253*2e9d4914SAndroid Build Coastguard Worker if test -n "$my_dlsyms"; then 3254*2e9d4914SAndroid Build Coastguard Worker case $my_dlsyms in 3255*2e9d4914SAndroid Build Coastguard Worker "") ;; 3256*2e9d4914SAndroid Build Coastguard Worker *.c) 3257*2e9d4914SAndroid Build Coastguard Worker # Discover the nlist of each of the dlfiles. 3258*2e9d4914SAndroid Build Coastguard Worker nlist="$output_objdir/${my_outputname}.nm" 3259*2e9d4914SAndroid Build Coastguard Worker 3260*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261*2e9d4914SAndroid Build Coastguard Worker 3262*2e9d4914SAndroid Build Coastguard Worker # Parse the name list into a source file. 3263*2e9d4914SAndroid Build Coastguard Worker func_verbose "creating $output_objdir/$my_dlsyms" 3264*2e9d4914SAndroid Build Coastguard Worker 3265*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266*2e9d4914SAndroid Build Coastguard Worker/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267*2e9d4914SAndroid Build Coastguard Worker/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268*2e9d4914SAndroid Build Coastguard Worker 3269*2e9d4914SAndroid Build Coastguard Worker#ifdef __cplusplus 3270*2e9d4914SAndroid Build Coastguard Workerextern \"C\" { 3271*2e9d4914SAndroid Build Coastguard Worker#endif 3272*2e9d4914SAndroid Build Coastguard Worker 3273*2e9d4914SAndroid Build Coastguard Worker#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 3274*2e9d4914SAndroid Build Coastguard Worker#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 3275*2e9d4914SAndroid Build Coastguard Worker#endif 3276*2e9d4914SAndroid Build Coastguard Worker 3277*2e9d4914SAndroid Build Coastguard Worker/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 3278*2e9d4914SAndroid Build Coastguard Worker#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 3279*2e9d4914SAndroid Build Coastguard Worker/* DATA imports from DLLs on WIN32 con't be const, because runtime 3280*2e9d4914SAndroid Build Coastguard Worker relocations are performed -- see ld's documentation on pseudo-relocs. */ 3281*2e9d4914SAndroid Build Coastguard Worker# define LT_DLSYM_CONST 3282*2e9d4914SAndroid Build Coastguard Worker#elif defined(__osf__) 3283*2e9d4914SAndroid Build Coastguard Worker/* This system does not cope well with relocations in const data. */ 3284*2e9d4914SAndroid Build Coastguard Worker# define LT_DLSYM_CONST 3285*2e9d4914SAndroid Build Coastguard Worker#else 3286*2e9d4914SAndroid Build Coastguard Worker# define LT_DLSYM_CONST const 3287*2e9d4914SAndroid Build Coastguard Worker#endif 3288*2e9d4914SAndroid Build Coastguard Worker 3289*2e9d4914SAndroid Build Coastguard Worker/* External symbol declarations for the compiler. */\ 3290*2e9d4914SAndroid Build Coastguard Worker" 3291*2e9d4914SAndroid Build Coastguard Worker 3292*2e9d4914SAndroid Build Coastguard Worker if test "$dlself" = yes; then 3293*2e9d4914SAndroid Build Coastguard Worker func_verbose "generating symbol list for \`$output'" 3294*2e9d4914SAndroid Build Coastguard Worker 3295*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296*2e9d4914SAndroid Build Coastguard Worker 3297*2e9d4914SAndroid Build Coastguard Worker # Add our own program objects to the symbol list. 3298*2e9d4914SAndroid Build Coastguard Worker progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299*2e9d4914SAndroid Build Coastguard Worker for progfile in $progfiles; do 3300*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$progfile" func_convert_file_msys_to_w32 3301*2e9d4914SAndroid Build Coastguard Worker func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 3302*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303*2e9d4914SAndroid Build Coastguard Worker done 3304*2e9d4914SAndroid Build Coastguard Worker 3305*2e9d4914SAndroid Build Coastguard Worker if test -n "$exclude_expsyms"; then 3306*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 3307*2e9d4914SAndroid Build Coastguard Worker eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308*2e9d4914SAndroid Build Coastguard Worker eval '$MV "$nlist"T "$nlist"' 3309*2e9d4914SAndroid Build Coastguard Worker } 3310*2e9d4914SAndroid Build Coastguard Worker fi 3311*2e9d4914SAndroid Build Coastguard Worker 3312*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols_regex"; then 3313*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 3314*2e9d4914SAndroid Build Coastguard Worker eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315*2e9d4914SAndroid Build Coastguard Worker eval '$MV "$nlist"T "$nlist"' 3316*2e9d4914SAndroid Build Coastguard Worker } 3317*2e9d4914SAndroid Build Coastguard Worker fi 3318*2e9d4914SAndroid Build Coastguard Worker 3319*2e9d4914SAndroid Build Coastguard Worker # Prepare the list of exported symbols 3320*2e9d4914SAndroid Build Coastguard Worker if test -z "$export_symbols"; then 3321*2e9d4914SAndroid Build Coastguard Worker export_symbols="$output_objdir/$outputname.exp" 3322*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 3323*2e9d4914SAndroid Build Coastguard Worker $RM $export_symbols 3324*2e9d4914SAndroid Build Coastguard Worker eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325*2e9d4914SAndroid Build Coastguard Worker case $host in 3326*2e9d4914SAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 3327*2e9d4914SAndroid Build Coastguard Worker eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328*2e9d4914SAndroid Build Coastguard Worker eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329*2e9d4914SAndroid Build Coastguard Worker ;; 3330*2e9d4914SAndroid Build Coastguard Worker esac 3331*2e9d4914SAndroid Build Coastguard Worker } 3332*2e9d4914SAndroid Build Coastguard Worker else 3333*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 3334*2e9d4914SAndroid Build Coastguard Worker eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335*2e9d4914SAndroid Build Coastguard Worker eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336*2e9d4914SAndroid Build Coastguard Worker eval '$MV "$nlist"T "$nlist"' 3337*2e9d4914SAndroid Build Coastguard Worker case $host in 3338*2e9d4914SAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 3339*2e9d4914SAndroid Build Coastguard Worker eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340*2e9d4914SAndroid Build Coastguard Worker eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341*2e9d4914SAndroid Build Coastguard Worker ;; 3342*2e9d4914SAndroid Build Coastguard Worker esac 3343*2e9d4914SAndroid Build Coastguard Worker } 3344*2e9d4914SAndroid Build Coastguard Worker fi 3345*2e9d4914SAndroid Build Coastguard Worker fi 3346*2e9d4914SAndroid Build Coastguard Worker 3347*2e9d4914SAndroid Build Coastguard Worker for dlprefile in $dlprefiles; do 3348*2e9d4914SAndroid Build Coastguard Worker func_verbose "extracting global C symbols from \`$dlprefile'" 3349*2e9d4914SAndroid Build Coastguard Worker func_basename "$dlprefile" 3350*2e9d4914SAndroid Build Coastguard Worker name="$func_basename_result" 3351*2e9d4914SAndroid Build Coastguard Worker case $host in 3352*2e9d4914SAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 3353*2e9d4914SAndroid Build Coastguard Worker # if an import library, we need to obtain dlname 3354*2e9d4914SAndroid Build Coastguard Worker if func_win32_import_lib_p "$dlprefile"; then 3355*2e9d4914SAndroid Build Coastguard Worker func_tr_sh "$dlprefile" 3356*2e9d4914SAndroid Build Coastguard Worker eval "curr_lafile=\$libfile_$func_tr_sh_result" 3357*2e9d4914SAndroid Build Coastguard Worker dlprefile_dlbasename="" 3358*2e9d4914SAndroid Build Coastguard Worker if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 3359*2e9d4914SAndroid Build Coastguard Worker # Use subshell, to avoid clobbering current variable values 3360*2e9d4914SAndroid Build Coastguard Worker dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 3361*2e9d4914SAndroid Build Coastguard Worker if test -n "$dlprefile_dlname" ; then 3362*2e9d4914SAndroid Build Coastguard Worker func_basename "$dlprefile_dlname" 3363*2e9d4914SAndroid Build Coastguard Worker dlprefile_dlbasename="$func_basename_result" 3364*2e9d4914SAndroid Build Coastguard Worker else 3365*2e9d4914SAndroid Build Coastguard Worker # no lafile. user explicitly requested -dlpreopen <import library>. 3366*2e9d4914SAndroid Build Coastguard Worker $sharedlib_from_linklib_cmd "$dlprefile" 3367*2e9d4914SAndroid Build Coastguard Worker dlprefile_dlbasename=$sharedlib_from_linklib_result 3368*2e9d4914SAndroid Build Coastguard Worker fi 3369*2e9d4914SAndroid Build Coastguard Worker fi 3370*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 3371*2e9d4914SAndroid Build Coastguard Worker if test -n "$dlprefile_dlbasename" ; then 3372*2e9d4914SAndroid Build Coastguard Worker eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 3373*2e9d4914SAndroid Build Coastguard Worker else 3374*2e9d4914SAndroid Build Coastguard Worker func_warning "Could not compute DLL name from $name" 3375*2e9d4914SAndroid Build Coastguard Worker eval '$ECHO ": $name " >> "$nlist"' 3376*2e9d4914SAndroid Build Coastguard Worker fi 3377*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3378*2e9d4914SAndroid Build Coastguard Worker eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 3379*2e9d4914SAndroid Build Coastguard Worker $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 3380*2e9d4914SAndroid Build Coastguard Worker } 3381*2e9d4914SAndroid Build Coastguard Worker else # not an import lib 3382*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 3383*2e9d4914SAndroid Build Coastguard Worker eval '$ECHO ": $name " >> "$nlist"' 3384*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3385*2e9d4914SAndroid Build Coastguard Worker eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3386*2e9d4914SAndroid Build Coastguard Worker } 3387*2e9d4914SAndroid Build Coastguard Worker fi 3388*2e9d4914SAndroid Build Coastguard Worker ;; 3389*2e9d4914SAndroid Build Coastguard Worker *) 3390*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 3391*2e9d4914SAndroid Build Coastguard Worker eval '$ECHO ": $name " >> "$nlist"' 3392*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3393*2e9d4914SAndroid Build Coastguard Worker eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3394*2e9d4914SAndroid Build Coastguard Worker } 3395*2e9d4914SAndroid Build Coastguard Worker ;; 3396*2e9d4914SAndroid Build Coastguard Worker esac 3397*2e9d4914SAndroid Build Coastguard Worker done 3398*2e9d4914SAndroid Build Coastguard Worker 3399*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 3400*2e9d4914SAndroid Build Coastguard Worker # Make sure we have at least an empty file. 3401*2e9d4914SAndroid Build Coastguard Worker test -f "$nlist" || : > "$nlist" 3402*2e9d4914SAndroid Build Coastguard Worker 3403*2e9d4914SAndroid Build Coastguard Worker if test -n "$exclude_expsyms"; then 3404*2e9d4914SAndroid Build Coastguard Worker $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405*2e9d4914SAndroid Build Coastguard Worker $MV "$nlist"T "$nlist" 3406*2e9d4914SAndroid Build Coastguard Worker fi 3407*2e9d4914SAndroid Build Coastguard Worker 3408*2e9d4914SAndroid Build Coastguard Worker # Try sorting and uniquifying the output. 3409*2e9d4914SAndroid Build Coastguard Worker if $GREP -v "^: " < "$nlist" | 3410*2e9d4914SAndroid Build Coastguard Worker if sort -k 3 </dev/null >/dev/null 2>&1; then 3411*2e9d4914SAndroid Build Coastguard Worker sort -k 3 3412*2e9d4914SAndroid Build Coastguard Worker else 3413*2e9d4914SAndroid Build Coastguard Worker sort +2 3414*2e9d4914SAndroid Build Coastguard Worker fi | 3415*2e9d4914SAndroid Build Coastguard Worker uniq > "$nlist"S; then 3416*2e9d4914SAndroid Build Coastguard Worker : 3417*2e9d4914SAndroid Build Coastguard Worker else 3418*2e9d4914SAndroid Build Coastguard Worker $GREP -v "^: " < "$nlist" > "$nlist"S 3419*2e9d4914SAndroid Build Coastguard Worker fi 3420*2e9d4914SAndroid Build Coastguard Worker 3421*2e9d4914SAndroid Build Coastguard Worker if test -f "$nlist"S; then 3422*2e9d4914SAndroid Build Coastguard Worker eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423*2e9d4914SAndroid Build Coastguard Worker else 3424*2e9d4914SAndroid Build Coastguard Worker echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425*2e9d4914SAndroid Build Coastguard Worker fi 3426*2e9d4914SAndroid Build Coastguard Worker 3427*2e9d4914SAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 3428*2e9d4914SAndroid Build Coastguard Worker 3429*2e9d4914SAndroid Build Coastguard Worker/* The mapping between symbol names and symbols. */ 3430*2e9d4914SAndroid Build Coastguard Workertypedef struct { 3431*2e9d4914SAndroid Build Coastguard Worker const char *name; 3432*2e9d4914SAndroid Build Coastguard Worker void *address; 3433*2e9d4914SAndroid Build Coastguard Worker} lt_dlsymlist; 3434*2e9d4914SAndroid Build Coastguard Workerextern LT_DLSYM_CONST lt_dlsymlist 3435*2e9d4914SAndroid Build Coastguard Workerlt_${my_prefix}_LTX_preloaded_symbols[]; 3436*2e9d4914SAndroid Build Coastguard WorkerLT_DLSYM_CONST lt_dlsymlist 3437*2e9d4914SAndroid Build Coastguard Workerlt_${my_prefix}_LTX_preloaded_symbols[] = 3438*2e9d4914SAndroid Build Coastguard Worker{\ 3439*2e9d4914SAndroid Build Coastguard Worker { \"$my_originator\", (void *) 0 }," 3440*2e9d4914SAndroid Build Coastguard Worker 3441*2e9d4914SAndroid Build Coastguard Worker case $need_lib_prefix in 3442*2e9d4914SAndroid Build Coastguard Worker no) 3443*2e9d4914SAndroid Build Coastguard Worker eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444*2e9d4914SAndroid Build Coastguard Worker ;; 3445*2e9d4914SAndroid Build Coastguard Worker *) 3446*2e9d4914SAndroid Build Coastguard Worker eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447*2e9d4914SAndroid Build Coastguard Worker ;; 3448*2e9d4914SAndroid Build Coastguard Worker esac 3449*2e9d4914SAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 3450*2e9d4914SAndroid Build Coastguard Worker {0, (void *) 0} 3451*2e9d4914SAndroid Build Coastguard Worker}; 3452*2e9d4914SAndroid Build Coastguard Worker 3453*2e9d4914SAndroid Build Coastguard Worker/* This works around a problem in FreeBSD linker */ 3454*2e9d4914SAndroid Build Coastguard Worker#ifdef FREEBSD_WORKAROUND 3455*2e9d4914SAndroid Build Coastguard Workerstatic const void *lt_preloaded_setup() { 3456*2e9d4914SAndroid Build Coastguard Worker return lt_${my_prefix}_LTX_preloaded_symbols; 3457*2e9d4914SAndroid Build Coastguard Worker} 3458*2e9d4914SAndroid Build Coastguard Worker#endif 3459*2e9d4914SAndroid Build Coastguard Worker 3460*2e9d4914SAndroid Build Coastguard Worker#ifdef __cplusplus 3461*2e9d4914SAndroid Build Coastguard Worker} 3462*2e9d4914SAndroid Build Coastguard Worker#endif\ 3463*2e9d4914SAndroid Build Coastguard Worker" 3464*2e9d4914SAndroid Build Coastguard Worker } # !$opt_dry_run 3465*2e9d4914SAndroid Build Coastguard Worker 3466*2e9d4914SAndroid Build Coastguard Worker pic_flag_for_symtable= 3467*2e9d4914SAndroid Build Coastguard Worker case "$compile_command " in 3468*2e9d4914SAndroid Build Coastguard Worker *" -static "*) ;; 3469*2e9d4914SAndroid Build Coastguard Worker *) 3470*2e9d4914SAndroid Build Coastguard Worker case $host in 3471*2e9d4914SAndroid Build Coastguard Worker # compiling the symbol table file with pic_flag works around 3472*2e9d4914SAndroid Build Coastguard Worker # a FreeBSD bug that causes programs to crash when -lm is 3473*2e9d4914SAndroid Build Coastguard Worker # linked before any other PIC object. But we must not use 3474*2e9d4914SAndroid Build Coastguard Worker # pic_flag when linking with -static. The problem exists in 3475*2e9d4914SAndroid Build Coastguard Worker # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3476*2e9d4914SAndroid Build Coastguard Worker *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477*2e9d4914SAndroid Build Coastguard Worker pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478*2e9d4914SAndroid Build Coastguard Worker *-*-hpux*) 3479*2e9d4914SAndroid Build Coastguard Worker pic_flag_for_symtable=" $pic_flag" ;; 3480*2e9d4914SAndroid Build Coastguard Worker *) 3481*2e9d4914SAndroid Build Coastguard Worker if test "X$my_pic_p" != Xno; then 3482*2e9d4914SAndroid Build Coastguard Worker pic_flag_for_symtable=" $pic_flag" 3483*2e9d4914SAndroid Build Coastguard Worker fi 3484*2e9d4914SAndroid Build Coastguard Worker ;; 3485*2e9d4914SAndroid Build Coastguard Worker esac 3486*2e9d4914SAndroid Build Coastguard Worker ;; 3487*2e9d4914SAndroid Build Coastguard Worker esac 3488*2e9d4914SAndroid Build Coastguard Worker symtab_cflags= 3489*2e9d4914SAndroid Build Coastguard Worker for arg in $LTCFLAGS; do 3490*2e9d4914SAndroid Build Coastguard Worker case $arg in 3491*2e9d4914SAndroid Build Coastguard Worker -pie | -fpie | -fPIE) ;; 3492*2e9d4914SAndroid Build Coastguard Worker *) func_append symtab_cflags " $arg" ;; 3493*2e9d4914SAndroid Build Coastguard Worker esac 3494*2e9d4914SAndroid Build Coastguard Worker done 3495*2e9d4914SAndroid Build Coastguard Worker 3496*2e9d4914SAndroid Build Coastguard Worker # Now compile the dynamic symbol file. 3497*2e9d4914SAndroid Build Coastguard Worker func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498*2e9d4914SAndroid Build Coastguard Worker 3499*2e9d4914SAndroid Build Coastguard Worker # Clean up the generated files. 3500*2e9d4914SAndroid Build Coastguard Worker func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501*2e9d4914SAndroid Build Coastguard Worker 3502*2e9d4914SAndroid Build Coastguard Worker # Transform the symbol file into the correct name. 3503*2e9d4914SAndroid Build Coastguard Worker symfileobj="$output_objdir/${my_outputname}S.$objext" 3504*2e9d4914SAndroid Build Coastguard Worker case $host in 3505*2e9d4914SAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 3506*2e9d4914SAndroid Build Coastguard Worker if test -f "$output_objdir/$my_outputname.def"; then 3507*2e9d4914SAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3508*2e9d4914SAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509*2e9d4914SAndroid Build Coastguard Worker else 3510*2e9d4914SAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3511*2e9d4914SAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512*2e9d4914SAndroid Build Coastguard Worker fi 3513*2e9d4914SAndroid Build Coastguard Worker ;; 3514*2e9d4914SAndroid Build Coastguard Worker *) 3515*2e9d4914SAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3516*2e9d4914SAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517*2e9d4914SAndroid Build Coastguard Worker ;; 3518*2e9d4914SAndroid Build Coastguard Worker esac 3519*2e9d4914SAndroid Build Coastguard Worker ;; 3520*2e9d4914SAndroid Build Coastguard Worker *) 3521*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522*2e9d4914SAndroid Build Coastguard Worker ;; 3523*2e9d4914SAndroid Build Coastguard Worker esac 3524*2e9d4914SAndroid Build Coastguard Worker else 3525*2e9d4914SAndroid Build Coastguard Worker # We keep going just in case the user didn't refer to 3526*2e9d4914SAndroid Build Coastguard Worker # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527*2e9d4914SAndroid Build Coastguard Worker # really was required. 3528*2e9d4914SAndroid Build Coastguard Worker 3529*2e9d4914SAndroid Build Coastguard Worker # Nullify the symbol file. 3530*2e9d4914SAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 3531*2e9d4914SAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532*2e9d4914SAndroid Build Coastguard Worker fi 3533*2e9d4914SAndroid Build Coastguard Worker} 3534*2e9d4914SAndroid Build Coastguard Worker 3535*2e9d4914SAndroid Build Coastguard Worker# func_win32_libid arg 3536*2e9d4914SAndroid Build Coastguard Worker# return the library type of file 'arg' 3537*2e9d4914SAndroid Build Coastguard Worker# 3538*2e9d4914SAndroid Build Coastguard Worker# Need a lot of goo to handle *both* DLLs and import libs 3539*2e9d4914SAndroid Build Coastguard Worker# Has to be a shell function in order to 'eat' the argument 3540*2e9d4914SAndroid Build Coastguard Worker# that is supplied when $file_magic_command is called. 3541*2e9d4914SAndroid Build Coastguard Worker# Despite the name, also deal with 64 bit binaries. 3542*2e9d4914SAndroid Build Coastguard Workerfunc_win32_libid () 3543*2e9d4914SAndroid Build Coastguard Worker{ 3544*2e9d4914SAndroid Build Coastguard Worker $opt_debug 3545*2e9d4914SAndroid Build Coastguard Worker win32_libid_type="unknown" 3546*2e9d4914SAndroid Build Coastguard Worker win32_fileres=`file -L $1 2>/dev/null` 3547*2e9d4914SAndroid Build Coastguard Worker case $win32_fileres in 3548*2e9d4914SAndroid Build Coastguard Worker *ar\ archive\ import\ library*) # definitely import 3549*2e9d4914SAndroid Build Coastguard Worker win32_libid_type="x86 archive import" 3550*2e9d4914SAndroid Build Coastguard Worker ;; 3551*2e9d4914SAndroid Build Coastguard Worker *ar\ archive*) # could be an import, or static 3552*2e9d4914SAndroid Build Coastguard Worker # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553*2e9d4914SAndroid Build Coastguard Worker if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 3554*2e9d4914SAndroid Build Coastguard Worker $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 3555*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$1" func_convert_file_msys_to_w32 3556*2e9d4914SAndroid Build Coastguard Worker win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557*2e9d4914SAndroid Build Coastguard Worker $SED -n -e ' 3558*2e9d4914SAndroid Build Coastguard Worker 1,100{ 3559*2e9d4914SAndroid Build Coastguard Worker / I /{ 3560*2e9d4914SAndroid Build Coastguard Worker s,.*,import, 3561*2e9d4914SAndroid Build Coastguard Worker p 3562*2e9d4914SAndroid Build Coastguard Worker q 3563*2e9d4914SAndroid Build Coastguard Worker } 3564*2e9d4914SAndroid Build Coastguard Worker }'` 3565*2e9d4914SAndroid Build Coastguard Worker case $win32_nmres in 3566*2e9d4914SAndroid Build Coastguard Worker import*) win32_libid_type="x86 archive import";; 3567*2e9d4914SAndroid Build Coastguard Worker *) win32_libid_type="x86 archive static";; 3568*2e9d4914SAndroid Build Coastguard Worker esac 3569*2e9d4914SAndroid Build Coastguard Worker fi 3570*2e9d4914SAndroid Build Coastguard Worker ;; 3571*2e9d4914SAndroid Build Coastguard Worker *DLL*) 3572*2e9d4914SAndroid Build Coastguard Worker win32_libid_type="x86 DLL" 3573*2e9d4914SAndroid Build Coastguard Worker ;; 3574*2e9d4914SAndroid Build Coastguard Worker *executable*) # but shell scripts are "executable" too... 3575*2e9d4914SAndroid Build Coastguard Worker case $win32_fileres in 3576*2e9d4914SAndroid Build Coastguard Worker *MS\ Windows\ PE\ Intel*) 3577*2e9d4914SAndroid Build Coastguard Worker win32_libid_type="x86 DLL" 3578*2e9d4914SAndroid Build Coastguard Worker ;; 3579*2e9d4914SAndroid Build Coastguard Worker esac 3580*2e9d4914SAndroid Build Coastguard Worker ;; 3581*2e9d4914SAndroid Build Coastguard Worker esac 3582*2e9d4914SAndroid Build Coastguard Worker $ECHO "$win32_libid_type" 3583*2e9d4914SAndroid Build Coastguard Worker} 3584*2e9d4914SAndroid Build Coastguard Worker 3585*2e9d4914SAndroid Build Coastguard Worker# func_cygming_dll_for_implib ARG 3586*2e9d4914SAndroid Build Coastguard Worker# 3587*2e9d4914SAndroid Build Coastguard Worker# Platform-specific function to extract the 3588*2e9d4914SAndroid Build Coastguard Worker# name of the DLL associated with the specified 3589*2e9d4914SAndroid Build Coastguard Worker# import library ARG. 3590*2e9d4914SAndroid Build Coastguard Worker# Invoked by eval'ing the libtool variable 3591*2e9d4914SAndroid Build Coastguard Worker# $sharedlib_from_linklib_cmd 3592*2e9d4914SAndroid Build Coastguard Worker# Result is available in the variable 3593*2e9d4914SAndroid Build Coastguard Worker# $sharedlib_from_linklib_result 3594*2e9d4914SAndroid Build Coastguard Workerfunc_cygming_dll_for_implib () 3595*2e9d4914SAndroid Build Coastguard Worker{ 3596*2e9d4914SAndroid Build Coastguard Worker $opt_debug 3597*2e9d4914SAndroid Build Coastguard Worker sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 3598*2e9d4914SAndroid Build Coastguard Worker} 3599*2e9d4914SAndroid Build Coastguard Worker 3600*2e9d4914SAndroid Build Coastguard Worker# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 3601*2e9d4914SAndroid Build Coastguard Worker# 3602*2e9d4914SAndroid Build Coastguard Worker# The is the core of a fallback implementation of a 3603*2e9d4914SAndroid Build Coastguard Worker# platform-specific function to extract the name of the 3604*2e9d4914SAndroid Build Coastguard Worker# DLL associated with the specified import library LIBNAME. 3605*2e9d4914SAndroid Build Coastguard Worker# 3606*2e9d4914SAndroid Build Coastguard Worker# SECTION_NAME is either .idata$6 or .idata$7, depending 3607*2e9d4914SAndroid Build Coastguard Worker# on the platform and compiler that created the implib. 3608*2e9d4914SAndroid Build Coastguard Worker# 3609*2e9d4914SAndroid Build Coastguard Worker# Echos the name of the DLL associated with the 3610*2e9d4914SAndroid Build Coastguard Worker# specified import library. 3611*2e9d4914SAndroid Build Coastguard Workerfunc_cygming_dll_for_implib_fallback_core () 3612*2e9d4914SAndroid Build Coastguard Worker{ 3613*2e9d4914SAndroid Build Coastguard Worker $opt_debug 3614*2e9d4914SAndroid Build Coastguard Worker match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 3615*2e9d4914SAndroid Build Coastguard Worker $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 3616*2e9d4914SAndroid Build Coastguard Worker $SED '/^Contents of section '"$match_literal"':/{ 3617*2e9d4914SAndroid Build Coastguard Worker # Place marker at beginning of archive member dllname section 3618*2e9d4914SAndroid Build Coastguard Worker s/.*/====MARK====/ 3619*2e9d4914SAndroid Build Coastguard Worker p 3620*2e9d4914SAndroid Build Coastguard Worker d 3621*2e9d4914SAndroid Build Coastguard Worker } 3622*2e9d4914SAndroid Build Coastguard Worker # These lines can sometimes be longer than 43 characters, but 3623*2e9d4914SAndroid Build Coastguard Worker # are always uninteresting 3624*2e9d4914SAndroid Build Coastguard Worker /:[ ]*file format pe[i]\{,1\}-/d 3625*2e9d4914SAndroid Build Coastguard Worker /^In archive [^:]*:/d 3626*2e9d4914SAndroid Build Coastguard Worker # Ensure marker is printed 3627*2e9d4914SAndroid Build Coastguard Worker /^====MARK====/p 3628*2e9d4914SAndroid Build Coastguard Worker # Remove all lines with less than 43 characters 3629*2e9d4914SAndroid Build Coastguard Worker /^.\{43\}/!d 3630*2e9d4914SAndroid Build Coastguard Worker # From remaining lines, remove first 43 characters 3631*2e9d4914SAndroid Build Coastguard Worker s/^.\{43\}//' | 3632*2e9d4914SAndroid Build Coastguard Worker $SED -n ' 3633*2e9d4914SAndroid Build Coastguard Worker # Join marker and all lines until next marker into a single line 3634*2e9d4914SAndroid Build Coastguard Worker /^====MARK====/ b para 3635*2e9d4914SAndroid Build Coastguard Worker H 3636*2e9d4914SAndroid Build Coastguard Worker $ b para 3637*2e9d4914SAndroid Build Coastguard Worker b 3638*2e9d4914SAndroid Build Coastguard Worker :para 3639*2e9d4914SAndroid Build Coastguard Worker x 3640*2e9d4914SAndroid Build Coastguard Worker s/\n//g 3641*2e9d4914SAndroid Build Coastguard Worker # Remove the marker 3642*2e9d4914SAndroid Build Coastguard Worker s/^====MARK====// 3643*2e9d4914SAndroid Build Coastguard Worker # Remove trailing dots and whitespace 3644*2e9d4914SAndroid Build Coastguard Worker s/[\. \t]*$// 3645*2e9d4914SAndroid Build Coastguard Worker # Print 3646*2e9d4914SAndroid Build Coastguard Worker /./p' | 3647*2e9d4914SAndroid Build Coastguard Worker # we now have a list, one entry per line, of the stringified 3648*2e9d4914SAndroid Build Coastguard Worker # contents of the appropriate section of all members of the 3649*2e9d4914SAndroid Build Coastguard Worker # archive which possess that section. Heuristic: eliminate 3650*2e9d4914SAndroid Build Coastguard Worker # all those which have a first or second character that is 3651*2e9d4914SAndroid Build Coastguard Worker # a '.' (that is, objdump's representation of an unprintable 3652*2e9d4914SAndroid Build Coastguard Worker # character.) This should work for all archives with less than 3653*2e9d4914SAndroid Build Coastguard Worker # 0x302f exports -- but will fail for DLLs whose name actually 3654*2e9d4914SAndroid Build Coastguard Worker # begins with a literal '.' or a single character followed by 3655*2e9d4914SAndroid Build Coastguard Worker # a '.'. 3656*2e9d4914SAndroid Build Coastguard Worker # 3657*2e9d4914SAndroid Build Coastguard Worker # Of those that remain, print the first one. 3658*2e9d4914SAndroid Build Coastguard Worker $SED -e '/^\./d;/^.\./d;q' 3659*2e9d4914SAndroid Build Coastguard Worker} 3660*2e9d4914SAndroid Build Coastguard Worker 3661*2e9d4914SAndroid Build Coastguard Worker# func_cygming_gnu_implib_p ARG 3662*2e9d4914SAndroid Build Coastguard Worker# This predicate returns with zero status (TRUE) if 3663*2e9d4914SAndroid Build Coastguard Worker# ARG is a GNU/binutils-style import library. Returns 3664*2e9d4914SAndroid Build Coastguard Worker# with nonzero status (FALSE) otherwise. 3665*2e9d4914SAndroid Build Coastguard Workerfunc_cygming_gnu_implib_p () 3666*2e9d4914SAndroid Build Coastguard Worker{ 3667*2e9d4914SAndroid Build Coastguard Worker $opt_debug 3668*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$1" func_convert_file_msys_to_w32 3669*2e9d4914SAndroid Build Coastguard Worker 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*2e9d4914SAndroid Build Coastguard Worker test -n "$func_cygming_gnu_implib_tmp" 3671*2e9d4914SAndroid Build Coastguard Worker} 3672*2e9d4914SAndroid Build Coastguard Worker 3673*2e9d4914SAndroid Build Coastguard Worker# func_cygming_ms_implib_p ARG 3674*2e9d4914SAndroid Build Coastguard Worker# This predicate returns with zero status (TRUE) if 3675*2e9d4914SAndroid Build Coastguard Worker# ARG is an MS-style import library. Returns 3676*2e9d4914SAndroid Build Coastguard Worker# with nonzero status (FALSE) otherwise. 3677*2e9d4914SAndroid Build Coastguard Workerfunc_cygming_ms_implib_p () 3678*2e9d4914SAndroid Build Coastguard Worker{ 3679*2e9d4914SAndroid Build Coastguard Worker $opt_debug 3680*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$1" func_convert_file_msys_to_w32 3681*2e9d4914SAndroid Build Coastguard Worker func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 3682*2e9d4914SAndroid Build Coastguard Worker test -n "$func_cygming_ms_implib_tmp" 3683*2e9d4914SAndroid Build Coastguard Worker} 3684*2e9d4914SAndroid Build Coastguard Worker 3685*2e9d4914SAndroid Build Coastguard Worker# func_cygming_dll_for_implib_fallback ARG 3686*2e9d4914SAndroid Build Coastguard Worker# Platform-specific function to extract the 3687*2e9d4914SAndroid Build Coastguard Worker# name of the DLL associated with the specified 3688*2e9d4914SAndroid Build Coastguard Worker# import library ARG. 3689*2e9d4914SAndroid Build Coastguard Worker# 3690*2e9d4914SAndroid Build Coastguard Worker# This fallback implementation is for use when $DLLTOOL 3691*2e9d4914SAndroid Build Coastguard Worker# does not support the --identify-strict option. 3692*2e9d4914SAndroid Build Coastguard Worker# Invoked by eval'ing the libtool variable 3693*2e9d4914SAndroid Build Coastguard Worker# $sharedlib_from_linklib_cmd 3694*2e9d4914SAndroid Build Coastguard Worker# Result is available in the variable 3695*2e9d4914SAndroid Build Coastguard Worker# $sharedlib_from_linklib_result 3696*2e9d4914SAndroid Build Coastguard Workerfunc_cygming_dll_for_implib_fallback () 3697*2e9d4914SAndroid Build Coastguard Worker{ 3698*2e9d4914SAndroid Build Coastguard Worker $opt_debug 3699*2e9d4914SAndroid Build Coastguard Worker if func_cygming_gnu_implib_p "$1" ; then 3700*2e9d4914SAndroid Build Coastguard Worker # binutils import library 3701*2e9d4914SAndroid Build Coastguard Worker sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 3702*2e9d4914SAndroid Build Coastguard Worker elif func_cygming_ms_implib_p "$1" ; then 3703*2e9d4914SAndroid Build Coastguard Worker # ms-generated import library 3704*2e9d4914SAndroid Build Coastguard Worker sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 3705*2e9d4914SAndroid Build Coastguard Worker else 3706*2e9d4914SAndroid Build Coastguard Worker # unknown 3707*2e9d4914SAndroid Build Coastguard Worker sharedlib_from_linklib_result="" 3708*2e9d4914SAndroid Build Coastguard Worker fi 3709*2e9d4914SAndroid Build Coastguard Worker} 3710*2e9d4914SAndroid Build Coastguard Worker 3711*2e9d4914SAndroid Build Coastguard Worker 3712*2e9d4914SAndroid Build Coastguard Worker# func_extract_an_archive dir oldlib 3713*2e9d4914SAndroid Build Coastguard Workerfunc_extract_an_archive () 3714*2e9d4914SAndroid Build Coastguard Worker{ 3715*2e9d4914SAndroid Build Coastguard Worker $opt_debug 3716*2e9d4914SAndroid Build Coastguard Worker f_ex_an_ar_dir="$1"; shift 3717*2e9d4914SAndroid Build Coastguard Worker f_ex_an_ar_oldlib="$1" 3718*2e9d4914SAndroid Build Coastguard Worker if test "$lock_old_archive_extraction" = yes; then 3719*2e9d4914SAndroid Build Coastguard Worker lockfile=$f_ex_an_ar_oldlib.lock 3720*2e9d4914SAndroid Build Coastguard Worker until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3721*2e9d4914SAndroid Build Coastguard Worker func_echo "Waiting for $lockfile to be removed" 3722*2e9d4914SAndroid Build Coastguard Worker sleep 2 3723*2e9d4914SAndroid Build Coastguard Worker done 3724*2e9d4914SAndroid Build Coastguard Worker fi 3725*2e9d4914SAndroid Build Coastguard Worker func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 3726*2e9d4914SAndroid Build Coastguard Worker 'stat=$?; rm -f "$lockfile"; exit $stat' 3727*2e9d4914SAndroid Build Coastguard Worker if test "$lock_old_archive_extraction" = yes; then 3728*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || rm -f "$lockfile" 3729*2e9d4914SAndroid Build Coastguard Worker fi 3730*2e9d4914SAndroid Build Coastguard Worker if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731*2e9d4914SAndroid Build Coastguard Worker : 3732*2e9d4914SAndroid Build Coastguard Worker else 3733*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734*2e9d4914SAndroid Build Coastguard Worker fi 3735*2e9d4914SAndroid Build Coastguard Worker} 3736*2e9d4914SAndroid Build Coastguard Worker 3737*2e9d4914SAndroid Build Coastguard Worker 3738*2e9d4914SAndroid Build Coastguard Worker# func_extract_archives gentop oldlib ... 3739*2e9d4914SAndroid Build Coastguard Workerfunc_extract_archives () 3740*2e9d4914SAndroid Build Coastguard Worker{ 3741*2e9d4914SAndroid Build Coastguard Worker $opt_debug 3742*2e9d4914SAndroid Build Coastguard Worker my_gentop="$1"; shift 3743*2e9d4914SAndroid Build Coastguard Worker my_oldlibs=${1+"$@"} 3744*2e9d4914SAndroid Build Coastguard Worker my_oldobjs="" 3745*2e9d4914SAndroid Build Coastguard Worker my_xlib="" 3746*2e9d4914SAndroid Build Coastguard Worker my_xabs="" 3747*2e9d4914SAndroid Build Coastguard Worker my_xdir="" 3748*2e9d4914SAndroid Build Coastguard Worker 3749*2e9d4914SAndroid Build Coastguard Worker for my_xlib in $my_oldlibs; do 3750*2e9d4914SAndroid Build Coastguard Worker # Extract the objects. 3751*2e9d4914SAndroid Build Coastguard Worker case $my_xlib in 3752*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753*2e9d4914SAndroid Build Coastguard Worker *) my_xabs=`pwd`"/$my_xlib" ;; 3754*2e9d4914SAndroid Build Coastguard Worker esac 3755*2e9d4914SAndroid Build Coastguard Worker func_basename "$my_xlib" 3756*2e9d4914SAndroid Build Coastguard Worker my_xlib="$func_basename_result" 3757*2e9d4914SAndroid Build Coastguard Worker my_xlib_u=$my_xlib 3758*2e9d4914SAndroid Build Coastguard Worker while :; do 3759*2e9d4914SAndroid Build Coastguard Worker case " $extracted_archives " in 3760*2e9d4914SAndroid Build Coastguard Worker *" $my_xlib_u "*) 3761*2e9d4914SAndroid Build Coastguard Worker func_arith $extracted_serial + 1 3762*2e9d4914SAndroid Build Coastguard Worker extracted_serial=$func_arith_result 3763*2e9d4914SAndroid Build Coastguard Worker my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764*2e9d4914SAndroid Build Coastguard Worker *) break ;; 3765*2e9d4914SAndroid Build Coastguard Worker esac 3766*2e9d4914SAndroid Build Coastguard Worker done 3767*2e9d4914SAndroid Build Coastguard Worker extracted_archives="$extracted_archives $my_xlib_u" 3768*2e9d4914SAndroid Build Coastguard Worker my_xdir="$my_gentop/$my_xlib_u" 3769*2e9d4914SAndroid Build Coastguard Worker 3770*2e9d4914SAndroid Build Coastguard Worker func_mkdir_p "$my_xdir" 3771*2e9d4914SAndroid Build Coastguard Worker 3772*2e9d4914SAndroid Build Coastguard Worker case $host in 3773*2e9d4914SAndroid Build Coastguard Worker *-darwin*) 3774*2e9d4914SAndroid Build Coastguard Worker func_verbose "Extracting $my_xabs" 3775*2e9d4914SAndroid Build Coastguard Worker # Do not bother doing anything if just a dry run 3776*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 3777*2e9d4914SAndroid Build Coastguard Worker darwin_orig_dir=`pwd` 3778*2e9d4914SAndroid Build Coastguard Worker cd $my_xdir || exit $? 3779*2e9d4914SAndroid Build Coastguard Worker darwin_archive=$my_xabs 3780*2e9d4914SAndroid Build Coastguard Worker darwin_curdir=`pwd` 3781*2e9d4914SAndroid Build Coastguard Worker darwin_base_archive=`basename "$darwin_archive"` 3782*2e9d4914SAndroid Build Coastguard Worker darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783*2e9d4914SAndroid Build Coastguard Worker if test -n "$darwin_arches"; then 3784*2e9d4914SAndroid Build Coastguard Worker darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785*2e9d4914SAndroid Build Coastguard Worker darwin_arch= 3786*2e9d4914SAndroid Build Coastguard Worker func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787*2e9d4914SAndroid Build Coastguard Worker for darwin_arch in $darwin_arches ; do 3788*2e9d4914SAndroid Build Coastguard Worker func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789*2e9d4914SAndroid Build Coastguard Worker $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790*2e9d4914SAndroid Build Coastguard Worker cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791*2e9d4914SAndroid Build Coastguard Worker func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792*2e9d4914SAndroid Build Coastguard Worker cd "$darwin_curdir" 3793*2e9d4914SAndroid Build Coastguard Worker $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794*2e9d4914SAndroid Build Coastguard Worker done # $darwin_arches 3795*2e9d4914SAndroid Build Coastguard Worker ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796*2e9d4914SAndroid Build Coastguard Worker darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797*2e9d4914SAndroid Build Coastguard Worker darwin_file= 3798*2e9d4914SAndroid Build Coastguard Worker darwin_files= 3799*2e9d4914SAndroid Build Coastguard Worker for darwin_file in $darwin_filelist; do 3800*2e9d4914SAndroid Build Coastguard Worker darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801*2e9d4914SAndroid Build Coastguard Worker $LIPO -create -output "$darwin_file" $darwin_files 3802*2e9d4914SAndroid Build Coastguard Worker done # $darwin_filelist 3803*2e9d4914SAndroid Build Coastguard Worker $RM -rf unfat-$$ 3804*2e9d4914SAndroid Build Coastguard Worker cd "$darwin_orig_dir" 3805*2e9d4914SAndroid Build Coastguard Worker else 3806*2e9d4914SAndroid Build Coastguard Worker cd $darwin_orig_dir 3807*2e9d4914SAndroid Build Coastguard Worker func_extract_an_archive "$my_xdir" "$my_xabs" 3808*2e9d4914SAndroid Build Coastguard Worker fi # $darwin_arches 3809*2e9d4914SAndroid Build Coastguard Worker } # !$opt_dry_run 3810*2e9d4914SAndroid Build Coastguard Worker ;; 3811*2e9d4914SAndroid Build Coastguard Worker *) 3812*2e9d4914SAndroid Build Coastguard Worker func_extract_an_archive "$my_xdir" "$my_xabs" 3813*2e9d4914SAndroid Build Coastguard Worker ;; 3814*2e9d4914SAndroid Build Coastguard Worker esac 3815*2e9d4914SAndroid Build Coastguard Worker my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816*2e9d4914SAndroid Build Coastguard Worker done 3817*2e9d4914SAndroid Build Coastguard Worker 3818*2e9d4914SAndroid Build Coastguard Worker func_extract_archives_result="$my_oldobjs" 3819*2e9d4914SAndroid Build Coastguard Worker} 3820*2e9d4914SAndroid Build Coastguard Worker 3821*2e9d4914SAndroid Build Coastguard Worker 3822*2e9d4914SAndroid Build Coastguard Worker# func_emit_wrapper [arg=no] 3823*2e9d4914SAndroid Build Coastguard Worker# 3824*2e9d4914SAndroid Build Coastguard Worker# Emit a libtool wrapper script on stdout. 3825*2e9d4914SAndroid Build Coastguard Worker# Don't directly open a file because we may want to 3826*2e9d4914SAndroid Build Coastguard Worker# incorporate the script contents within a cygwin/mingw 3827*2e9d4914SAndroid Build Coastguard Worker# wrapper executable. Must ONLY be called from within 3828*2e9d4914SAndroid Build Coastguard Worker# func_mode_link because it depends on a number of variables 3829*2e9d4914SAndroid Build Coastguard Worker# set therein. 3830*2e9d4914SAndroid Build Coastguard Worker# 3831*2e9d4914SAndroid Build Coastguard Worker# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 3832*2e9d4914SAndroid Build Coastguard Worker# variable will take. If 'yes', then the emitted script 3833*2e9d4914SAndroid Build Coastguard Worker# will assume that the directory in which it is stored is 3834*2e9d4914SAndroid Build Coastguard Worker# the $objdir directory. This is a cygwin/mingw-specific 3835*2e9d4914SAndroid Build Coastguard Worker# behavior. 3836*2e9d4914SAndroid Build Coastguard Workerfunc_emit_wrapper () 3837*2e9d4914SAndroid Build Coastguard Worker{ 3838*2e9d4914SAndroid Build Coastguard Worker func_emit_wrapper_arg1=${1-no} 3839*2e9d4914SAndroid Build Coastguard Worker 3840*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 3841*2e9d4914SAndroid Build Coastguard Worker#! $SHELL 3842*2e9d4914SAndroid Build Coastguard Worker 3843*2e9d4914SAndroid Build Coastguard Worker# $output - temporary wrapper script for $objdir/$outputname 3844*2e9d4914SAndroid Build Coastguard Worker# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845*2e9d4914SAndroid Build Coastguard Worker# 3846*2e9d4914SAndroid Build Coastguard Worker# The $output program cannot be directly executed until all the libtool 3847*2e9d4914SAndroid Build Coastguard Worker# libraries that it depends on are installed. 3848*2e9d4914SAndroid Build Coastguard Worker# 3849*2e9d4914SAndroid Build Coastguard Worker# This wrapper script should never be moved out of the build directory. 3850*2e9d4914SAndroid Build Coastguard Worker# If it is, it will not operate correctly. 3851*2e9d4914SAndroid Build Coastguard Worker 3852*2e9d4914SAndroid Build Coastguard Worker# Sed substitution that helps us do robust quoting. It backslashifies 3853*2e9d4914SAndroid Build Coastguard Worker# metacharacters that are still active within double-quoted strings. 3854*2e9d4914SAndroid Build Coastguard Workersed_quote_subst='$sed_quote_subst' 3855*2e9d4914SAndroid Build Coastguard Worker 3856*2e9d4914SAndroid Build Coastguard Worker# Be Bourne compatible 3857*2e9d4914SAndroid Build Coastguard Workerif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858*2e9d4914SAndroid Build Coastguard Worker emulate sh 3859*2e9d4914SAndroid Build Coastguard Worker NULLCMD=: 3860*2e9d4914SAndroid Build Coastguard Worker # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861*2e9d4914SAndroid Build Coastguard Worker # is contrary to our usage. Disable this feature. 3862*2e9d4914SAndroid Build Coastguard Worker alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863*2e9d4914SAndroid Build Coastguard Worker setopt NO_GLOB_SUBST 3864*2e9d4914SAndroid Build Coastguard Workerelse 3865*2e9d4914SAndroid Build Coastguard Worker case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866*2e9d4914SAndroid Build Coastguard Workerfi 3867*2e9d4914SAndroid Build Coastguard WorkerBIN_SH=xpg4; export BIN_SH # for Tru64 3868*2e9d4914SAndroid Build Coastguard WorkerDUALCASE=1; export DUALCASE # for MKS sh 3869*2e9d4914SAndroid Build Coastguard Worker 3870*2e9d4914SAndroid Build Coastguard Worker# The HP-UX ksh and POSIX shell print the target directory to stdout 3871*2e9d4914SAndroid Build Coastguard Worker# if CDPATH is set. 3872*2e9d4914SAndroid Build Coastguard Worker(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873*2e9d4914SAndroid Build Coastguard Worker 3874*2e9d4914SAndroid Build Coastguard Workerrelink_command=\"$relink_command\" 3875*2e9d4914SAndroid Build Coastguard Worker 3876*2e9d4914SAndroid Build Coastguard Worker# This environment variable determines our operation mode. 3877*2e9d4914SAndroid Build Coastguard Workerif test \"\$libtool_install_magic\" = \"$magic\"; then 3878*2e9d4914SAndroid Build Coastguard Worker # install mode needs the following variables: 3879*2e9d4914SAndroid Build Coastguard Worker generated_by_libtool_version='$macro_version' 3880*2e9d4914SAndroid Build Coastguard Worker notinst_deplibs='$notinst_deplibs' 3881*2e9d4914SAndroid Build Coastguard Workerelse 3882*2e9d4914SAndroid Build Coastguard Worker # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883*2e9d4914SAndroid Build Coastguard Worker if test \"\$libtool_execute_magic\" != \"$magic\"; then 3884*2e9d4914SAndroid Build Coastguard Worker file=\"\$0\"" 3885*2e9d4914SAndroid Build Coastguard Worker 3886*2e9d4914SAndroid Build Coastguard Worker qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 3887*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 3888*2e9d4914SAndroid Build Coastguard Worker 3889*2e9d4914SAndroid Build Coastguard Worker# A function that is used when there is no print builtin or printf. 3890*2e9d4914SAndroid Build Coastguard Workerfunc_fallback_echo () 3891*2e9d4914SAndroid Build Coastguard Worker{ 3892*2e9d4914SAndroid Build Coastguard Worker eval 'cat <<_LTECHO_EOF 3893*2e9d4914SAndroid Build Coastguard Worker\$1 3894*2e9d4914SAndroid Build Coastguard Worker_LTECHO_EOF' 3895*2e9d4914SAndroid Build Coastguard Worker} 3896*2e9d4914SAndroid Build Coastguard Worker ECHO=\"$qECHO\" 3897*2e9d4914SAndroid Build Coastguard Worker fi 3898*2e9d4914SAndroid Build Coastguard Worker 3899*2e9d4914SAndroid Build Coastguard Worker# Very basic option parsing. These options are (a) specific to 3900*2e9d4914SAndroid Build Coastguard Worker# the libtool wrapper, (b) are identical between the wrapper 3901*2e9d4914SAndroid Build Coastguard Worker# /script/ and the wrapper /executable/ which is used only on 3902*2e9d4914SAndroid Build Coastguard Worker# windows platforms, and (c) all begin with the string "--lt-" 3903*2e9d4914SAndroid Build Coastguard Worker# (application programs are unlikely to have options which match 3904*2e9d4914SAndroid Build Coastguard Worker# this pattern). 3905*2e9d4914SAndroid Build Coastguard Worker# 3906*2e9d4914SAndroid Build Coastguard Worker# There are only two supported options: --lt-debug and 3907*2e9d4914SAndroid Build Coastguard Worker# --lt-dump-script. There is, deliberately, no --lt-help. 3908*2e9d4914SAndroid Build Coastguard Worker# 3909*2e9d4914SAndroid Build Coastguard Worker# The first argument to this parsing function should be the 3910*2e9d4914SAndroid Build Coastguard Worker# script's $0 value, followed by "$@". 3911*2e9d4914SAndroid Build Coastguard Workerlt_option_debug= 3912*2e9d4914SAndroid Build Coastguard Workerfunc_parse_lt_options () 3913*2e9d4914SAndroid Build Coastguard Worker{ 3914*2e9d4914SAndroid Build Coastguard Worker lt_script_arg0=\$0 3915*2e9d4914SAndroid Build Coastguard Worker shift 3916*2e9d4914SAndroid Build Coastguard Worker for lt_opt 3917*2e9d4914SAndroid Build Coastguard Worker do 3918*2e9d4914SAndroid Build Coastguard Worker case \"\$lt_opt\" in 3919*2e9d4914SAndroid Build Coastguard Worker --lt-debug) lt_option_debug=1 ;; 3920*2e9d4914SAndroid Build Coastguard Worker --lt-dump-script) 3921*2e9d4914SAndroid Build Coastguard Worker lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3922*2e9d4914SAndroid Build Coastguard Worker test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3923*2e9d4914SAndroid Build Coastguard Worker lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3924*2e9d4914SAndroid Build Coastguard Worker cat \"\$lt_dump_D/\$lt_dump_F\" 3925*2e9d4914SAndroid Build Coastguard Worker exit 0 3926*2e9d4914SAndroid Build Coastguard Worker ;; 3927*2e9d4914SAndroid Build Coastguard Worker --lt-*) 3928*2e9d4914SAndroid Build Coastguard Worker \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3929*2e9d4914SAndroid Build Coastguard Worker exit 1 3930*2e9d4914SAndroid Build Coastguard Worker ;; 3931*2e9d4914SAndroid Build Coastguard Worker esac 3932*2e9d4914SAndroid Build Coastguard Worker done 3933*2e9d4914SAndroid Build Coastguard Worker 3934*2e9d4914SAndroid Build Coastguard Worker # Print the debug banner immediately: 3935*2e9d4914SAndroid Build Coastguard Worker if test -n \"\$lt_option_debug\"; then 3936*2e9d4914SAndroid Build Coastguard Worker echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3937*2e9d4914SAndroid Build Coastguard Worker fi 3938*2e9d4914SAndroid Build Coastguard Worker} 3939*2e9d4914SAndroid Build Coastguard Worker 3940*2e9d4914SAndroid Build Coastguard Worker# Used when --lt-debug. Prints its arguments to stdout 3941*2e9d4914SAndroid Build Coastguard Worker# (redirection is the responsibility of the caller) 3942*2e9d4914SAndroid Build Coastguard Workerfunc_lt_dump_args () 3943*2e9d4914SAndroid Build Coastguard Worker{ 3944*2e9d4914SAndroid Build Coastguard Worker lt_dump_args_N=1; 3945*2e9d4914SAndroid Build Coastguard Worker for lt_arg 3946*2e9d4914SAndroid Build Coastguard Worker do 3947*2e9d4914SAndroid Build Coastguard Worker \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3948*2e9d4914SAndroid Build Coastguard Worker lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3949*2e9d4914SAndroid Build Coastguard Worker done 3950*2e9d4914SAndroid Build Coastguard Worker} 3951*2e9d4914SAndroid Build Coastguard Worker 3952*2e9d4914SAndroid Build Coastguard Worker# Core function for launching the target application 3953*2e9d4914SAndroid Build Coastguard Workerfunc_exec_program_core () 3954*2e9d4914SAndroid Build Coastguard Worker{ 3955*2e9d4914SAndroid Build Coastguard Worker" 3956*2e9d4914SAndroid Build Coastguard Worker case $host in 3957*2e9d4914SAndroid Build Coastguard Worker # Backslashes separate directories on plain windows 3958*2e9d4914SAndroid Build Coastguard Worker *-*-mingw | *-*-os2* | *-cegcc*) 3959*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 3960*2e9d4914SAndroid Build Coastguard Worker if test -n \"\$lt_option_debug\"; then 3961*2e9d4914SAndroid Build Coastguard Worker \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3962*2e9d4914SAndroid Build Coastguard Worker func_lt_dump_args \${1+\"\$@\"} 1>&2 3963*2e9d4914SAndroid Build Coastguard Worker fi 3964*2e9d4914SAndroid Build Coastguard Worker exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3965*2e9d4914SAndroid Build Coastguard Worker" 3966*2e9d4914SAndroid Build Coastguard Worker ;; 3967*2e9d4914SAndroid Build Coastguard Worker 3968*2e9d4914SAndroid Build Coastguard Worker *) 3969*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 3970*2e9d4914SAndroid Build Coastguard Worker if test -n \"\$lt_option_debug\"; then 3971*2e9d4914SAndroid Build Coastguard Worker \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3972*2e9d4914SAndroid Build Coastguard Worker func_lt_dump_args \${1+\"\$@\"} 1>&2 3973*2e9d4914SAndroid Build Coastguard Worker fi 3974*2e9d4914SAndroid Build Coastguard Worker exec \"\$progdir/\$program\" \${1+\"\$@\"} 3975*2e9d4914SAndroid Build Coastguard Worker" 3976*2e9d4914SAndroid Build Coastguard Worker ;; 3977*2e9d4914SAndroid Build Coastguard Worker esac 3978*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 3979*2e9d4914SAndroid Build Coastguard Worker \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3980*2e9d4914SAndroid Build Coastguard Worker exit 1 3981*2e9d4914SAndroid Build Coastguard Worker} 3982*2e9d4914SAndroid Build Coastguard Worker 3983*2e9d4914SAndroid Build Coastguard Worker# A function to encapsulate launching the target application 3984*2e9d4914SAndroid Build Coastguard Worker# Strips options in the --lt-* namespace from \$@ and 3985*2e9d4914SAndroid Build Coastguard Worker# launches target application with the remaining arguments. 3986*2e9d4914SAndroid Build Coastguard Workerfunc_exec_program () 3987*2e9d4914SAndroid Build Coastguard Worker{ 3988*2e9d4914SAndroid Build Coastguard Worker case \" \$* \" in 3989*2e9d4914SAndroid Build Coastguard Worker *\\ --lt-*) 3990*2e9d4914SAndroid Build Coastguard Worker for lt_wr_arg 3991*2e9d4914SAndroid Build Coastguard Worker do 3992*2e9d4914SAndroid Build Coastguard Worker case \$lt_wr_arg in 3993*2e9d4914SAndroid Build Coastguard Worker --lt-*) ;; 3994*2e9d4914SAndroid Build Coastguard Worker *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3995*2e9d4914SAndroid Build Coastguard Worker esac 3996*2e9d4914SAndroid Build Coastguard Worker shift 3997*2e9d4914SAndroid Build Coastguard Worker done ;; 3998*2e9d4914SAndroid Build Coastguard Worker esac 3999*2e9d4914SAndroid Build Coastguard Worker func_exec_program_core \${1+\"\$@\"} 4000*2e9d4914SAndroid Build Coastguard Worker} 4001*2e9d4914SAndroid Build Coastguard Worker 4002*2e9d4914SAndroid Build Coastguard Worker # Parse options 4003*2e9d4914SAndroid Build Coastguard Worker func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4004*2e9d4914SAndroid Build Coastguard Worker 4005*2e9d4914SAndroid Build Coastguard Worker # Find the directory that this script lives in. 4006*2e9d4914SAndroid Build Coastguard Worker thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007*2e9d4914SAndroid Build Coastguard Worker test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4008*2e9d4914SAndroid Build Coastguard Worker 4009*2e9d4914SAndroid Build Coastguard Worker # Follow symbolic links until we get to the real thisdir. 4010*2e9d4914SAndroid Build Coastguard Worker file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011*2e9d4914SAndroid Build Coastguard Worker while test -n \"\$file\"; do 4012*2e9d4914SAndroid Build Coastguard Worker destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4013*2e9d4914SAndroid Build Coastguard Worker 4014*2e9d4914SAndroid Build Coastguard Worker # If there was a directory component, then change thisdir. 4015*2e9d4914SAndroid Build Coastguard Worker if test \"x\$destdir\" != \"x\$file\"; then 4016*2e9d4914SAndroid Build Coastguard Worker case \"\$destdir\" in 4017*2e9d4914SAndroid Build Coastguard Worker [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018*2e9d4914SAndroid Build Coastguard Worker *) thisdir=\"\$thisdir/\$destdir\" ;; 4019*2e9d4914SAndroid Build Coastguard Worker esac 4020*2e9d4914SAndroid Build Coastguard Worker fi 4021*2e9d4914SAndroid Build Coastguard Worker 4022*2e9d4914SAndroid Build Coastguard Worker file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 4023*2e9d4914SAndroid Build Coastguard Worker file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024*2e9d4914SAndroid Build Coastguard Worker done 4025*2e9d4914SAndroid Build Coastguard Worker 4026*2e9d4914SAndroid Build Coastguard Worker # Usually 'no', except on cygwin/mingw when embedded into 4027*2e9d4914SAndroid Build Coastguard Worker # the cwrapper. 4028*2e9d4914SAndroid Build Coastguard Worker WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029*2e9d4914SAndroid Build Coastguard Worker if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030*2e9d4914SAndroid Build Coastguard Worker # special case for '.' 4031*2e9d4914SAndroid Build Coastguard Worker if test \"\$thisdir\" = \".\"; then 4032*2e9d4914SAndroid Build Coastguard Worker thisdir=\`pwd\` 4033*2e9d4914SAndroid Build Coastguard Worker fi 4034*2e9d4914SAndroid Build Coastguard Worker # remove .libs from thisdir 4035*2e9d4914SAndroid Build Coastguard Worker case \"\$thisdir\" in 4036*2e9d4914SAndroid Build Coastguard Worker *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037*2e9d4914SAndroid Build Coastguard Worker $objdir ) thisdir=. ;; 4038*2e9d4914SAndroid Build Coastguard Worker esac 4039*2e9d4914SAndroid Build Coastguard Worker fi 4040*2e9d4914SAndroid Build Coastguard Worker 4041*2e9d4914SAndroid Build Coastguard Worker # Try to get the absolute directory name. 4042*2e9d4914SAndroid Build Coastguard Worker absdir=\`cd \"\$thisdir\" && pwd\` 4043*2e9d4914SAndroid Build Coastguard Worker test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044*2e9d4914SAndroid Build Coastguard Worker" 4045*2e9d4914SAndroid Build Coastguard Worker 4046*2e9d4914SAndroid Build Coastguard Worker if test "$fast_install" = yes; then 4047*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 4048*2e9d4914SAndroid Build Coastguard Worker program=lt-'$outputname'$exeext 4049*2e9d4914SAndroid Build Coastguard Worker progdir=\"\$thisdir/$objdir\" 4050*2e9d4914SAndroid Build Coastguard Worker 4051*2e9d4914SAndroid Build Coastguard Worker if test ! -f \"\$progdir/\$program\" || 4052*2e9d4914SAndroid Build Coastguard Worker { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053*2e9d4914SAndroid Build Coastguard Worker test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054*2e9d4914SAndroid Build Coastguard Worker 4055*2e9d4914SAndroid Build Coastguard Worker file=\"\$\$-\$program\" 4056*2e9d4914SAndroid Build Coastguard Worker 4057*2e9d4914SAndroid Build Coastguard Worker if test ! -d \"\$progdir\"; then 4058*2e9d4914SAndroid Build Coastguard Worker $MKDIR \"\$progdir\" 4059*2e9d4914SAndroid Build Coastguard Worker else 4060*2e9d4914SAndroid Build Coastguard Worker $RM \"\$progdir/\$file\" 4061*2e9d4914SAndroid Build Coastguard Worker fi" 4062*2e9d4914SAndroid Build Coastguard Worker 4063*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 4064*2e9d4914SAndroid Build Coastguard Worker 4065*2e9d4914SAndroid Build Coastguard Worker # relink executable if necessary 4066*2e9d4914SAndroid Build Coastguard Worker if test -n \"\$relink_command\"; then 4067*2e9d4914SAndroid Build Coastguard Worker if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068*2e9d4914SAndroid Build Coastguard Worker else 4069*2e9d4914SAndroid Build Coastguard Worker $ECHO \"\$relink_command_output\" >&2 4070*2e9d4914SAndroid Build Coastguard Worker $RM \"\$progdir/\$file\" 4071*2e9d4914SAndroid Build Coastguard Worker exit 1 4072*2e9d4914SAndroid Build Coastguard Worker fi 4073*2e9d4914SAndroid Build Coastguard Worker fi 4074*2e9d4914SAndroid Build Coastguard Worker 4075*2e9d4914SAndroid Build Coastguard Worker $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076*2e9d4914SAndroid Build Coastguard Worker { $RM \"\$progdir/\$program\"; 4077*2e9d4914SAndroid Build Coastguard Worker $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078*2e9d4914SAndroid Build Coastguard Worker $RM \"\$progdir/\$file\" 4079*2e9d4914SAndroid Build Coastguard Worker fi" 4080*2e9d4914SAndroid Build Coastguard Worker else 4081*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 4082*2e9d4914SAndroid Build Coastguard Worker program='$outputname' 4083*2e9d4914SAndroid Build Coastguard Worker progdir=\"\$thisdir/$objdir\" 4084*2e9d4914SAndroid Build Coastguard Worker" 4085*2e9d4914SAndroid Build Coastguard Worker fi 4086*2e9d4914SAndroid Build Coastguard Worker 4087*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 4088*2e9d4914SAndroid Build Coastguard Worker 4089*2e9d4914SAndroid Build Coastguard Worker if test -f \"\$progdir/\$program\"; then" 4090*2e9d4914SAndroid Build Coastguard Worker 4091*2e9d4914SAndroid Build Coastguard Worker # fixup the dll searchpath if we need to. 4092*2e9d4914SAndroid Build Coastguard Worker # 4093*2e9d4914SAndroid Build Coastguard Worker # Fix the DLL searchpath if we need to. Do this before prepending 4094*2e9d4914SAndroid Build Coastguard Worker # to shlibpath, because on Windows, both are PATH and uninstalled 4095*2e9d4914SAndroid Build Coastguard Worker # libraries must come first. 4096*2e9d4914SAndroid Build Coastguard Worker if test -n "$dllsearchpath"; then 4097*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 4098*2e9d4914SAndroid Build Coastguard Worker # Add the dll search path components to the executable PATH 4099*2e9d4914SAndroid Build Coastguard Worker PATH=$dllsearchpath:\$PATH 4100*2e9d4914SAndroid Build Coastguard Worker" 4101*2e9d4914SAndroid Build Coastguard Worker fi 4102*2e9d4914SAndroid Build Coastguard Worker 4103*2e9d4914SAndroid Build Coastguard Worker # Export our shlibpath_var if we have one. 4104*2e9d4914SAndroid Build Coastguard Worker if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 4106*2e9d4914SAndroid Build Coastguard Worker # Add our own library path to $shlibpath_var 4107*2e9d4914SAndroid Build Coastguard Worker $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108*2e9d4914SAndroid Build Coastguard Worker 4109*2e9d4914SAndroid Build Coastguard Worker # Some systems cannot cope with colon-terminated $shlibpath_var 4110*2e9d4914SAndroid Build Coastguard Worker # The second colon is a workaround for a bug in BeOS R4 sed 4111*2e9d4914SAndroid Build Coastguard Worker $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4112*2e9d4914SAndroid Build Coastguard Worker 4113*2e9d4914SAndroid Build Coastguard Worker export $shlibpath_var 4114*2e9d4914SAndroid Build Coastguard Worker" 4115*2e9d4914SAndroid Build Coastguard Worker fi 4116*2e9d4914SAndroid Build Coastguard Worker 4117*2e9d4914SAndroid Build Coastguard Worker $ECHO "\ 4118*2e9d4914SAndroid Build Coastguard Worker if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119*2e9d4914SAndroid Build Coastguard Worker # Run the actual program with our arguments. 4120*2e9d4914SAndroid Build Coastguard Worker func_exec_program \${1+\"\$@\"} 4121*2e9d4914SAndroid Build Coastguard Worker fi 4122*2e9d4914SAndroid Build Coastguard Worker else 4123*2e9d4914SAndroid Build Coastguard Worker # The program doesn't exist. 4124*2e9d4914SAndroid Build Coastguard Worker \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125*2e9d4914SAndroid Build Coastguard Worker \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 4126*2e9d4914SAndroid Build Coastguard Worker \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127*2e9d4914SAndroid Build Coastguard Worker exit 1 4128*2e9d4914SAndroid Build Coastguard Worker fi 4129*2e9d4914SAndroid Build Coastguard Workerfi\ 4130*2e9d4914SAndroid Build Coastguard Worker" 4131*2e9d4914SAndroid Build Coastguard Worker} 4132*2e9d4914SAndroid Build Coastguard Worker 4133*2e9d4914SAndroid Build Coastguard Worker 4134*2e9d4914SAndroid Build Coastguard Worker# func_emit_cwrapperexe_src 4135*2e9d4914SAndroid Build Coastguard Worker# emit the source code for a wrapper executable on stdout 4136*2e9d4914SAndroid Build Coastguard Worker# Must ONLY be called from within func_mode_link because 4137*2e9d4914SAndroid Build Coastguard Worker# it depends on a number of variable set therein. 4138*2e9d4914SAndroid Build Coastguard Workerfunc_emit_cwrapperexe_src () 4139*2e9d4914SAndroid Build Coastguard Worker{ 4140*2e9d4914SAndroid Build Coastguard Worker cat <<EOF 4141*2e9d4914SAndroid Build Coastguard Worker 4142*2e9d4914SAndroid Build Coastguard Worker/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4143*2e9d4914SAndroid Build Coastguard Worker Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4144*2e9d4914SAndroid Build Coastguard Worker 4145*2e9d4914SAndroid Build Coastguard Worker The $output program cannot be directly executed until all the libtool 4146*2e9d4914SAndroid Build Coastguard Worker libraries that it depends on are installed. 4147*2e9d4914SAndroid Build Coastguard Worker 4148*2e9d4914SAndroid Build Coastguard Worker This wrapper executable should never be moved out of the build directory. 4149*2e9d4914SAndroid Build Coastguard Worker If it is, it will not operate correctly. 4150*2e9d4914SAndroid Build Coastguard Worker*/ 4151*2e9d4914SAndroid Build Coastguard WorkerEOF 4152*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4153*2e9d4914SAndroid Build Coastguard Worker#ifdef _MSC_VER 4154*2e9d4914SAndroid Build Coastguard Worker# define _CRT_SECURE_NO_DEPRECATE 1 4155*2e9d4914SAndroid Build Coastguard Worker#endif 4156*2e9d4914SAndroid Build Coastguard Worker#include <stdio.h> 4157*2e9d4914SAndroid Build Coastguard Worker#include <stdlib.h> 4158*2e9d4914SAndroid Build Coastguard Worker#ifdef _MSC_VER 4159*2e9d4914SAndroid Build Coastguard Worker# include <direct.h> 4160*2e9d4914SAndroid Build Coastguard Worker# include <process.h> 4161*2e9d4914SAndroid Build Coastguard Worker# include <io.h> 4162*2e9d4914SAndroid Build Coastguard Worker#else 4163*2e9d4914SAndroid Build Coastguard Worker# include <unistd.h> 4164*2e9d4914SAndroid Build Coastguard Worker# include <stdint.h> 4165*2e9d4914SAndroid Build Coastguard Worker# ifdef __CYGWIN__ 4166*2e9d4914SAndroid Build Coastguard Worker# include <io.h> 4167*2e9d4914SAndroid Build Coastguard Worker# endif 4168*2e9d4914SAndroid Build Coastguard Worker#endif 4169*2e9d4914SAndroid Build Coastguard Worker#include <malloc.h> 4170*2e9d4914SAndroid Build Coastguard Worker#include <stdarg.h> 4171*2e9d4914SAndroid Build Coastguard Worker#include <assert.h> 4172*2e9d4914SAndroid Build Coastguard Worker#include <string.h> 4173*2e9d4914SAndroid Build Coastguard Worker#include <ctype.h> 4174*2e9d4914SAndroid Build Coastguard Worker#include <errno.h> 4175*2e9d4914SAndroid Build Coastguard Worker#include <fcntl.h> 4176*2e9d4914SAndroid Build Coastguard Worker#include <sys/stat.h> 4177*2e9d4914SAndroid Build Coastguard Worker 4178*2e9d4914SAndroid Build Coastguard Worker/* declarations of non-ANSI functions */ 4179*2e9d4914SAndroid Build Coastguard Worker#if defined(__MINGW32__) 4180*2e9d4914SAndroid Build Coastguard Worker# ifdef __STRICT_ANSI__ 4181*2e9d4914SAndroid Build Coastguard Workerint _putenv (const char *); 4182*2e9d4914SAndroid Build Coastguard Worker# endif 4183*2e9d4914SAndroid Build Coastguard Worker#elif defined(__CYGWIN__) 4184*2e9d4914SAndroid Build Coastguard Worker# ifdef __STRICT_ANSI__ 4185*2e9d4914SAndroid Build Coastguard Workerchar *realpath (const char *, char *); 4186*2e9d4914SAndroid Build Coastguard Workerint putenv (char *); 4187*2e9d4914SAndroid Build Coastguard Workerint setenv (const char *, const char *, int); 4188*2e9d4914SAndroid Build Coastguard Worker# endif 4189*2e9d4914SAndroid Build Coastguard Worker/* #elif defined (other platforms) ... */ 4190*2e9d4914SAndroid Build Coastguard Worker#endif 4191*2e9d4914SAndroid Build Coastguard Worker 4192*2e9d4914SAndroid Build Coastguard Worker/* portability defines, excluding path handling macros */ 4193*2e9d4914SAndroid Build Coastguard Worker#if defined(_MSC_VER) 4194*2e9d4914SAndroid Build Coastguard Worker# define setmode _setmode 4195*2e9d4914SAndroid Build Coastguard Worker# define stat _stat 4196*2e9d4914SAndroid Build Coastguard Worker# define chmod _chmod 4197*2e9d4914SAndroid Build Coastguard Worker# define getcwd _getcwd 4198*2e9d4914SAndroid Build Coastguard Worker# define putenv _putenv 4199*2e9d4914SAndroid Build Coastguard Worker# define S_IXUSR _S_IEXEC 4200*2e9d4914SAndroid Build Coastguard Worker# ifndef _INTPTR_T_DEFINED 4201*2e9d4914SAndroid Build Coastguard Worker# define _INTPTR_T_DEFINED 4202*2e9d4914SAndroid Build Coastguard Worker# define intptr_t int 4203*2e9d4914SAndroid Build Coastguard Worker# endif 4204*2e9d4914SAndroid Build Coastguard Worker#elif defined(__MINGW32__) 4205*2e9d4914SAndroid Build Coastguard Worker# define setmode _setmode 4206*2e9d4914SAndroid Build Coastguard Worker# define stat _stat 4207*2e9d4914SAndroid Build Coastguard Worker# define chmod _chmod 4208*2e9d4914SAndroid Build Coastguard Worker# define getcwd _getcwd 4209*2e9d4914SAndroid Build Coastguard Worker# define putenv _putenv 4210*2e9d4914SAndroid Build Coastguard Worker#elif defined(__CYGWIN__) 4211*2e9d4914SAndroid Build Coastguard Worker# define HAVE_SETENV 4212*2e9d4914SAndroid Build Coastguard Worker# define FOPEN_WB "wb" 4213*2e9d4914SAndroid Build Coastguard Worker/* #elif defined (other platforms) ... */ 4214*2e9d4914SAndroid Build Coastguard Worker#endif 4215*2e9d4914SAndroid Build Coastguard Worker 4216*2e9d4914SAndroid Build Coastguard Worker#if defined(PATH_MAX) 4217*2e9d4914SAndroid Build Coastguard Worker# define LT_PATHMAX PATH_MAX 4218*2e9d4914SAndroid Build Coastguard Worker#elif defined(MAXPATHLEN) 4219*2e9d4914SAndroid Build Coastguard Worker# define LT_PATHMAX MAXPATHLEN 4220*2e9d4914SAndroid Build Coastguard Worker#else 4221*2e9d4914SAndroid Build Coastguard Worker# define LT_PATHMAX 1024 4222*2e9d4914SAndroid Build Coastguard Worker#endif 4223*2e9d4914SAndroid Build Coastguard Worker 4224*2e9d4914SAndroid Build Coastguard Worker#ifndef S_IXOTH 4225*2e9d4914SAndroid Build Coastguard Worker# define S_IXOTH 0 4226*2e9d4914SAndroid Build Coastguard Worker#endif 4227*2e9d4914SAndroid Build Coastguard Worker#ifndef S_IXGRP 4228*2e9d4914SAndroid Build Coastguard Worker# define S_IXGRP 0 4229*2e9d4914SAndroid Build Coastguard Worker#endif 4230*2e9d4914SAndroid Build Coastguard Worker 4231*2e9d4914SAndroid Build Coastguard Worker/* path handling portability macros */ 4232*2e9d4914SAndroid Build Coastguard Worker#ifndef DIR_SEPARATOR 4233*2e9d4914SAndroid Build Coastguard Worker# define DIR_SEPARATOR '/' 4234*2e9d4914SAndroid Build Coastguard Worker# define PATH_SEPARATOR ':' 4235*2e9d4914SAndroid Build Coastguard Worker#endif 4236*2e9d4914SAndroid Build Coastguard Worker 4237*2e9d4914SAndroid Build Coastguard Worker#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4238*2e9d4914SAndroid Build Coastguard Worker defined (__OS2__) 4239*2e9d4914SAndroid Build Coastguard Worker# define HAVE_DOS_BASED_FILE_SYSTEM 4240*2e9d4914SAndroid Build Coastguard Worker# define FOPEN_WB "wb" 4241*2e9d4914SAndroid Build Coastguard Worker# ifndef DIR_SEPARATOR_2 4242*2e9d4914SAndroid Build Coastguard Worker# define DIR_SEPARATOR_2 '\\' 4243*2e9d4914SAndroid Build Coastguard Worker# endif 4244*2e9d4914SAndroid Build Coastguard Worker# ifndef PATH_SEPARATOR_2 4245*2e9d4914SAndroid Build Coastguard Worker# define PATH_SEPARATOR_2 ';' 4246*2e9d4914SAndroid Build Coastguard Worker# endif 4247*2e9d4914SAndroid Build Coastguard Worker#endif 4248*2e9d4914SAndroid Build Coastguard Worker 4249*2e9d4914SAndroid Build Coastguard Worker#ifndef DIR_SEPARATOR_2 4250*2e9d4914SAndroid Build Coastguard Worker# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251*2e9d4914SAndroid Build Coastguard Worker#else /* DIR_SEPARATOR_2 */ 4252*2e9d4914SAndroid Build Coastguard Worker# define IS_DIR_SEPARATOR(ch) \ 4253*2e9d4914SAndroid Build Coastguard Worker (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254*2e9d4914SAndroid Build Coastguard Worker#endif /* DIR_SEPARATOR_2 */ 4255*2e9d4914SAndroid Build Coastguard Worker 4256*2e9d4914SAndroid Build Coastguard Worker#ifndef PATH_SEPARATOR_2 4257*2e9d4914SAndroid Build Coastguard Worker# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258*2e9d4914SAndroid Build Coastguard Worker#else /* PATH_SEPARATOR_2 */ 4259*2e9d4914SAndroid Build Coastguard Worker# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260*2e9d4914SAndroid Build Coastguard Worker#endif /* PATH_SEPARATOR_2 */ 4261*2e9d4914SAndroid Build Coastguard Worker 4262*2e9d4914SAndroid Build Coastguard Worker#ifndef FOPEN_WB 4263*2e9d4914SAndroid Build Coastguard Worker# define FOPEN_WB "w" 4264*2e9d4914SAndroid Build Coastguard Worker#endif 4265*2e9d4914SAndroid Build Coastguard Worker#ifndef _O_BINARY 4266*2e9d4914SAndroid Build Coastguard Worker# define _O_BINARY 0 4267*2e9d4914SAndroid Build Coastguard Worker#endif 4268*2e9d4914SAndroid Build Coastguard Worker 4269*2e9d4914SAndroid Build Coastguard Worker#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270*2e9d4914SAndroid Build Coastguard Worker#define XFREE(stale) do { \ 4271*2e9d4914SAndroid Build Coastguard Worker if (stale) { free ((void *) stale); stale = 0; } \ 4272*2e9d4914SAndroid Build Coastguard Worker} while (0) 4273*2e9d4914SAndroid Build Coastguard Worker 4274*2e9d4914SAndroid Build Coastguard Worker#if defined(LT_DEBUGWRAPPER) 4275*2e9d4914SAndroid Build Coastguard Workerstatic int lt_debug = 1; 4276*2e9d4914SAndroid Build Coastguard Worker#else 4277*2e9d4914SAndroid Build Coastguard Workerstatic int lt_debug = 0; 4278*2e9d4914SAndroid Build Coastguard Worker#endif 4279*2e9d4914SAndroid Build Coastguard Worker 4280*2e9d4914SAndroid Build Coastguard Workerconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4281*2e9d4914SAndroid Build Coastguard Worker 4282*2e9d4914SAndroid Build Coastguard Workervoid *xmalloc (size_t num); 4283*2e9d4914SAndroid Build Coastguard Workerchar *xstrdup (const char *string); 4284*2e9d4914SAndroid Build Coastguard Workerconst char *base_name (const char *name); 4285*2e9d4914SAndroid Build Coastguard Workerchar *find_executable (const char *wrapper); 4286*2e9d4914SAndroid Build Coastguard Workerchar *chase_symlinks (const char *pathspec); 4287*2e9d4914SAndroid Build Coastguard Workerint make_executable (const char *path); 4288*2e9d4914SAndroid Build Coastguard Workerint check_executable (const char *path); 4289*2e9d4914SAndroid Build Coastguard Workerchar *strendzap (char *str, const char *pat); 4290*2e9d4914SAndroid Build Coastguard Workervoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 4291*2e9d4914SAndroid Build Coastguard Workervoid lt_fatal (const char *file, int line, const char *message, ...); 4292*2e9d4914SAndroid Build Coastguard Workerstatic const char *nonnull (const char *s); 4293*2e9d4914SAndroid Build Coastguard Workerstatic const char *nonempty (const char *s); 4294*2e9d4914SAndroid Build Coastguard Workervoid lt_setenv (const char *name, const char *value); 4295*2e9d4914SAndroid Build Coastguard Workerchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296*2e9d4914SAndroid Build Coastguard Workervoid lt_update_exe_path (const char *name, const char *value); 4297*2e9d4914SAndroid Build Coastguard Workervoid lt_update_lib_path (const char *name, const char *value); 4298*2e9d4914SAndroid Build Coastguard Workerchar **prepare_spawn (char **argv); 4299*2e9d4914SAndroid Build Coastguard Workervoid lt_dump_script (FILE *f); 4300*2e9d4914SAndroid Build Coastguard WorkerEOF 4301*2e9d4914SAndroid Build Coastguard Worker 4302*2e9d4914SAndroid Build Coastguard Worker cat <<EOF 4303*2e9d4914SAndroid Build Coastguard Workervolatile const char * MAGIC_EXE = "$magic_exe"; 4304*2e9d4914SAndroid Build Coastguard Workerconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305*2e9d4914SAndroid Build Coastguard WorkerEOF 4306*2e9d4914SAndroid Build Coastguard Worker 4307*2e9d4914SAndroid Build Coastguard Worker if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4308*2e9d4914SAndroid Build Coastguard Worker func_to_host_path "$temp_rpath" 4309*2e9d4914SAndroid Build Coastguard Worker cat <<EOF 4310*2e9d4914SAndroid Build Coastguard Workerconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311*2e9d4914SAndroid Build Coastguard WorkerEOF 4312*2e9d4914SAndroid Build Coastguard Worker else 4313*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4314*2e9d4914SAndroid Build Coastguard Workerconst char * LIB_PATH_VALUE = ""; 4315*2e9d4914SAndroid Build Coastguard WorkerEOF 4316*2e9d4914SAndroid Build Coastguard Worker fi 4317*2e9d4914SAndroid Build Coastguard Worker 4318*2e9d4914SAndroid Build Coastguard Worker if test -n "$dllsearchpath"; then 4319*2e9d4914SAndroid Build Coastguard Worker func_to_host_path "$dllsearchpath:" 4320*2e9d4914SAndroid Build Coastguard Worker cat <<EOF 4321*2e9d4914SAndroid Build Coastguard Workerconst char * EXE_PATH_VARNAME = "PATH"; 4322*2e9d4914SAndroid Build Coastguard Workerconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4323*2e9d4914SAndroid Build Coastguard WorkerEOF 4324*2e9d4914SAndroid Build Coastguard Worker else 4325*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4326*2e9d4914SAndroid Build Coastguard Workerconst char * EXE_PATH_VARNAME = ""; 4327*2e9d4914SAndroid Build Coastguard Workerconst char * EXE_PATH_VALUE = ""; 4328*2e9d4914SAndroid Build Coastguard WorkerEOF 4329*2e9d4914SAndroid Build Coastguard Worker fi 4330*2e9d4914SAndroid Build Coastguard Worker 4331*2e9d4914SAndroid Build Coastguard Worker if test "$fast_install" = yes; then 4332*2e9d4914SAndroid Build Coastguard Worker cat <<EOF 4333*2e9d4914SAndroid Build Coastguard Workerconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334*2e9d4914SAndroid Build Coastguard WorkerEOF 4335*2e9d4914SAndroid Build Coastguard Worker else 4336*2e9d4914SAndroid Build Coastguard Worker cat <<EOF 4337*2e9d4914SAndroid Build Coastguard Workerconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338*2e9d4914SAndroid Build Coastguard WorkerEOF 4339*2e9d4914SAndroid Build Coastguard Worker fi 4340*2e9d4914SAndroid Build Coastguard Worker 4341*2e9d4914SAndroid Build Coastguard Worker 4342*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4343*2e9d4914SAndroid Build Coastguard Worker 4344*2e9d4914SAndroid Build Coastguard Worker#define LTWRAPPER_OPTION_PREFIX "--lt-" 4345*2e9d4914SAndroid Build Coastguard Worker 4346*2e9d4914SAndroid Build Coastguard Workerstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347*2e9d4914SAndroid Build Coastguard Workerstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 4348*2e9d4914SAndroid Build Coastguard Workerstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4349*2e9d4914SAndroid Build Coastguard Worker 4350*2e9d4914SAndroid Build Coastguard Workerint 4351*2e9d4914SAndroid Build Coastguard Workermain (int argc, char *argv[]) 4352*2e9d4914SAndroid Build Coastguard Worker{ 4353*2e9d4914SAndroid Build Coastguard Worker char **newargz; 4354*2e9d4914SAndroid Build Coastguard Worker int newargc; 4355*2e9d4914SAndroid Build Coastguard Worker char *tmp_pathspec; 4356*2e9d4914SAndroid Build Coastguard Worker char *actual_cwrapper_path; 4357*2e9d4914SAndroid Build Coastguard Worker char *actual_cwrapper_name; 4358*2e9d4914SAndroid Build Coastguard Worker char *target_name; 4359*2e9d4914SAndroid Build Coastguard Worker char *lt_argv_zero; 4360*2e9d4914SAndroid Build Coastguard Worker intptr_t rval = 127; 4361*2e9d4914SAndroid Build Coastguard Worker 4362*2e9d4914SAndroid Build Coastguard Worker int i; 4363*2e9d4914SAndroid Build Coastguard Worker 4364*2e9d4914SAndroid Build Coastguard Worker program_name = (char *) xstrdup (base_name (argv[0])); 4365*2e9d4914SAndroid Build Coastguard Worker newargz = XMALLOC (char *, argc + 1); 4366*2e9d4914SAndroid Build Coastguard Worker 4367*2e9d4914SAndroid Build Coastguard Worker /* very simple arg parsing; don't want to rely on getopt 4368*2e9d4914SAndroid Build Coastguard Worker * also, copy all non cwrapper options to newargz, except 4369*2e9d4914SAndroid Build Coastguard Worker * argz[0], which is handled differently 4370*2e9d4914SAndroid Build Coastguard Worker */ 4371*2e9d4914SAndroid Build Coastguard Worker newargc=0; 4372*2e9d4914SAndroid Build Coastguard Worker for (i = 1; i < argc; i++) 4373*2e9d4914SAndroid Build Coastguard Worker { 4374*2e9d4914SAndroid Build Coastguard Worker if (strcmp (argv[i], dumpscript_opt) == 0) 4375*2e9d4914SAndroid Build Coastguard Worker { 4376*2e9d4914SAndroid Build Coastguard WorkerEOF 4377*2e9d4914SAndroid Build Coastguard Worker case "$host" in 4378*2e9d4914SAndroid Build Coastguard Worker *mingw* | *cygwin* ) 4379*2e9d4914SAndroid Build Coastguard Worker # make stdout use "unix" line endings 4380*2e9d4914SAndroid Build Coastguard Worker echo " setmode(1,_O_BINARY);" 4381*2e9d4914SAndroid Build Coastguard Worker ;; 4382*2e9d4914SAndroid Build Coastguard Worker esac 4383*2e9d4914SAndroid Build Coastguard Worker 4384*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4385*2e9d4914SAndroid Build Coastguard Worker lt_dump_script (stdout); 4386*2e9d4914SAndroid Build Coastguard Worker return 0; 4387*2e9d4914SAndroid Build Coastguard Worker } 4388*2e9d4914SAndroid Build Coastguard Worker if (strcmp (argv[i], debug_opt) == 0) 4389*2e9d4914SAndroid Build Coastguard Worker { 4390*2e9d4914SAndroid Build Coastguard Worker lt_debug = 1; 4391*2e9d4914SAndroid Build Coastguard Worker continue; 4392*2e9d4914SAndroid Build Coastguard Worker } 4393*2e9d4914SAndroid Build Coastguard Worker if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 4394*2e9d4914SAndroid Build Coastguard Worker { 4395*2e9d4914SAndroid Build Coastguard Worker /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 4396*2e9d4914SAndroid Build Coastguard Worker namespace, but it is not one of the ones we know about and 4397*2e9d4914SAndroid Build Coastguard Worker have already dealt with, above (inluding dump-script), then 4398*2e9d4914SAndroid Build Coastguard Worker report an error. Otherwise, targets might begin to believe 4399*2e9d4914SAndroid Build Coastguard Worker they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 4400*2e9d4914SAndroid Build Coastguard Worker namespace. The first time any user complains about this, we'll 4401*2e9d4914SAndroid Build Coastguard Worker need to make LTWRAPPER_OPTION_PREFIX a configure-time option 4402*2e9d4914SAndroid Build Coastguard Worker or a configure.ac-settable value. 4403*2e9d4914SAndroid Build Coastguard Worker */ 4404*2e9d4914SAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, 4405*2e9d4914SAndroid Build Coastguard Worker "unrecognized %s option: '%s'", 4406*2e9d4914SAndroid Build Coastguard Worker ltwrapper_option_prefix, argv[i]); 4407*2e9d4914SAndroid Build Coastguard Worker } 4408*2e9d4914SAndroid Build Coastguard Worker /* otherwise ... */ 4409*2e9d4914SAndroid Build Coastguard Worker newargz[++newargc] = xstrdup (argv[i]); 4410*2e9d4914SAndroid Build Coastguard Worker } 4411*2e9d4914SAndroid Build Coastguard Worker newargz[++newargc] = NULL; 4412*2e9d4914SAndroid Build Coastguard Worker 4413*2e9d4914SAndroid Build Coastguard WorkerEOF 4414*2e9d4914SAndroid Build Coastguard Worker cat <<EOF 4415*2e9d4914SAndroid Build Coastguard Worker /* The GNU banner must be the first non-error debug message */ 4416*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 4417*2e9d4914SAndroid Build Coastguard WorkerEOF 4418*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4419*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 4420*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4421*2e9d4914SAndroid Build Coastguard Worker 4422*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec = find_executable (argv[0]); 4423*2e9d4914SAndroid Build Coastguard Worker if (tmp_pathspec == NULL) 4424*2e9d4914SAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 4425*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 4426*2e9d4914SAndroid Build Coastguard Worker "(main) found exe (before symlink chase) at: %s\n", 4427*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec); 4428*2e9d4914SAndroid Build Coastguard Worker 4429*2e9d4914SAndroid Build Coastguard Worker actual_cwrapper_path = chase_symlinks (tmp_pathspec); 4430*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 4431*2e9d4914SAndroid Build Coastguard Worker "(main) found exe (after symlink chase) at: %s\n", 4432*2e9d4914SAndroid Build Coastguard Worker actual_cwrapper_path); 4433*2e9d4914SAndroid Build Coastguard Worker XFREE (tmp_pathspec); 4434*2e9d4914SAndroid Build Coastguard Worker 4435*2e9d4914SAndroid Build Coastguard Worker actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436*2e9d4914SAndroid Build Coastguard Worker strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437*2e9d4914SAndroid Build Coastguard Worker 4438*2e9d4914SAndroid Build Coastguard Worker /* wrapper name transforms */ 4439*2e9d4914SAndroid Build Coastguard Worker strendzap (actual_cwrapper_name, ".exe"); 4440*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441*2e9d4914SAndroid Build Coastguard Worker XFREE (actual_cwrapper_name); 4442*2e9d4914SAndroid Build Coastguard Worker actual_cwrapper_name = tmp_pathspec; 4443*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec = 0; 4444*2e9d4914SAndroid Build Coastguard Worker 4445*2e9d4914SAndroid Build Coastguard Worker /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446*2e9d4914SAndroid Build Coastguard Worker target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447*2e9d4914SAndroid Build Coastguard Worker strendzap (target_name, ".exe"); 4448*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449*2e9d4914SAndroid Build Coastguard Worker XFREE (target_name); 4450*2e9d4914SAndroid Build Coastguard Worker target_name = tmp_pathspec; 4451*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec = 0; 4452*2e9d4914SAndroid Build Coastguard Worker 4453*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 4454*2e9d4914SAndroid Build Coastguard Worker "(main) libtool target name: %s\n", 4455*2e9d4914SAndroid Build Coastguard Worker target_name); 4456*2e9d4914SAndroid Build Coastguard WorkerEOF 4457*2e9d4914SAndroid Build Coastguard Worker 4458*2e9d4914SAndroid Build Coastguard Worker cat <<EOF 4459*2e9d4914SAndroid Build Coastguard Worker newargz[0] = 4460*2e9d4914SAndroid Build Coastguard Worker XMALLOC (char, (strlen (actual_cwrapper_path) + 4461*2e9d4914SAndroid Build Coastguard Worker strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462*2e9d4914SAndroid Build Coastguard Worker strcpy (newargz[0], actual_cwrapper_path); 4463*2e9d4914SAndroid Build Coastguard Worker strcat (newargz[0], "$objdir"); 4464*2e9d4914SAndroid Build Coastguard Worker strcat (newargz[0], "/"); 4465*2e9d4914SAndroid Build Coastguard WorkerEOF 4466*2e9d4914SAndroid Build Coastguard Worker 4467*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4468*2e9d4914SAndroid Build Coastguard Worker /* stop here, and copy so we don't have to do this twice */ 4469*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec = xstrdup (newargz[0]); 4470*2e9d4914SAndroid Build Coastguard Worker 4471*2e9d4914SAndroid Build Coastguard Worker /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472*2e9d4914SAndroid Build Coastguard Worker strcat (newargz[0], actual_cwrapper_name); 4473*2e9d4914SAndroid Build Coastguard Worker 4474*2e9d4914SAndroid Build Coastguard Worker /* DO want the lt- prefix here if it exists, so use target_name */ 4475*2e9d4914SAndroid Build Coastguard Worker lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476*2e9d4914SAndroid Build Coastguard Worker XFREE (tmp_pathspec); 4477*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec = NULL; 4478*2e9d4914SAndroid Build Coastguard WorkerEOF 4479*2e9d4914SAndroid Build Coastguard Worker 4480*2e9d4914SAndroid Build Coastguard Worker case $host_os in 4481*2e9d4914SAndroid Build Coastguard Worker mingw*) 4482*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4483*2e9d4914SAndroid Build Coastguard Worker { 4484*2e9d4914SAndroid Build Coastguard Worker char* p; 4485*2e9d4914SAndroid Build Coastguard Worker while ((p = strchr (newargz[0], '\\')) != NULL) 4486*2e9d4914SAndroid Build Coastguard Worker { 4487*2e9d4914SAndroid Build Coastguard Worker *p = '/'; 4488*2e9d4914SAndroid Build Coastguard Worker } 4489*2e9d4914SAndroid Build Coastguard Worker while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490*2e9d4914SAndroid Build Coastguard Worker { 4491*2e9d4914SAndroid Build Coastguard Worker *p = '/'; 4492*2e9d4914SAndroid Build Coastguard Worker } 4493*2e9d4914SAndroid Build Coastguard Worker } 4494*2e9d4914SAndroid Build Coastguard WorkerEOF 4495*2e9d4914SAndroid Build Coastguard Worker ;; 4496*2e9d4914SAndroid Build Coastguard Worker esac 4497*2e9d4914SAndroid Build Coastguard Worker 4498*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4499*2e9d4914SAndroid Build Coastguard Worker XFREE (target_name); 4500*2e9d4914SAndroid Build Coastguard Worker XFREE (actual_cwrapper_path); 4501*2e9d4914SAndroid Build Coastguard Worker XFREE (actual_cwrapper_name); 4502*2e9d4914SAndroid Build Coastguard Worker 4503*2e9d4914SAndroid Build Coastguard Worker lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504*2e9d4914SAndroid Build Coastguard Worker lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 4505*2e9d4914SAndroid Build Coastguard Worker /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 4506*2e9d4914SAndroid Build Coastguard Worker be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 4507*2e9d4914SAndroid Build Coastguard Worker because on Windows, both *_VARNAMEs are PATH but uninstalled 4508*2e9d4914SAndroid Build Coastguard Worker libraries must come first. */ 4509*2e9d4914SAndroid Build Coastguard Worker lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 4510*2e9d4914SAndroid Build Coastguard Worker lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4511*2e9d4914SAndroid Build Coastguard Worker 4512*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 4513*2e9d4914SAndroid Build Coastguard Worker nonnull (lt_argv_zero)); 4514*2e9d4914SAndroid Build Coastguard Worker for (i = 0; i < newargc; i++) 4515*2e9d4914SAndroid Build Coastguard Worker { 4516*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 4517*2e9d4914SAndroid Build Coastguard Worker i, nonnull (newargz[i])); 4518*2e9d4914SAndroid Build Coastguard Worker } 4519*2e9d4914SAndroid Build Coastguard Worker 4520*2e9d4914SAndroid Build Coastguard WorkerEOF 4521*2e9d4914SAndroid Build Coastguard Worker 4522*2e9d4914SAndroid Build Coastguard Worker case $host_os in 4523*2e9d4914SAndroid Build Coastguard Worker mingw*) 4524*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4525*2e9d4914SAndroid Build Coastguard Worker /* execv doesn't actually work on mingw as expected on unix */ 4526*2e9d4914SAndroid Build Coastguard Worker newargz = prepare_spawn (newargz); 4527*2e9d4914SAndroid Build Coastguard Worker rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528*2e9d4914SAndroid Build Coastguard Worker if (rval == -1) 4529*2e9d4914SAndroid Build Coastguard Worker { 4530*2e9d4914SAndroid Build Coastguard Worker /* failed to start process */ 4531*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 4532*2e9d4914SAndroid Build Coastguard Worker "(main) failed to launch target \"%s\": %s\n", 4533*2e9d4914SAndroid Build Coastguard Worker lt_argv_zero, nonnull (strerror (errno))); 4534*2e9d4914SAndroid Build Coastguard Worker return 127; 4535*2e9d4914SAndroid Build Coastguard Worker } 4536*2e9d4914SAndroid Build Coastguard Worker return rval; 4537*2e9d4914SAndroid Build Coastguard WorkerEOF 4538*2e9d4914SAndroid Build Coastguard Worker ;; 4539*2e9d4914SAndroid Build Coastguard Worker *) 4540*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4541*2e9d4914SAndroid Build Coastguard Worker execv (lt_argv_zero, newargz); 4542*2e9d4914SAndroid Build Coastguard Worker return rval; /* =127, but avoids unused variable warning */ 4543*2e9d4914SAndroid Build Coastguard WorkerEOF 4544*2e9d4914SAndroid Build Coastguard Worker ;; 4545*2e9d4914SAndroid Build Coastguard Worker esac 4546*2e9d4914SAndroid Build Coastguard Worker 4547*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4548*2e9d4914SAndroid Build Coastguard Worker} 4549*2e9d4914SAndroid Build Coastguard Worker 4550*2e9d4914SAndroid Build Coastguard Workervoid * 4551*2e9d4914SAndroid Build Coastguard Workerxmalloc (size_t num) 4552*2e9d4914SAndroid Build Coastguard Worker{ 4553*2e9d4914SAndroid Build Coastguard Worker void *p = (void *) malloc (num); 4554*2e9d4914SAndroid Build Coastguard Worker if (!p) 4555*2e9d4914SAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4556*2e9d4914SAndroid Build Coastguard Worker 4557*2e9d4914SAndroid Build Coastguard Worker return p; 4558*2e9d4914SAndroid Build Coastguard Worker} 4559*2e9d4914SAndroid Build Coastguard Worker 4560*2e9d4914SAndroid Build Coastguard Workerchar * 4561*2e9d4914SAndroid Build Coastguard Workerxstrdup (const char *string) 4562*2e9d4914SAndroid Build Coastguard Worker{ 4563*2e9d4914SAndroid Build Coastguard Worker return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564*2e9d4914SAndroid Build Coastguard Worker string) : NULL; 4565*2e9d4914SAndroid Build Coastguard Worker} 4566*2e9d4914SAndroid Build Coastguard Worker 4567*2e9d4914SAndroid Build Coastguard Workerconst char * 4568*2e9d4914SAndroid Build Coastguard Workerbase_name (const char *name) 4569*2e9d4914SAndroid Build Coastguard Worker{ 4570*2e9d4914SAndroid Build Coastguard Worker const char *base; 4571*2e9d4914SAndroid Build Coastguard Worker 4572*2e9d4914SAndroid Build Coastguard Worker#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573*2e9d4914SAndroid Build Coastguard Worker /* Skip over the disk name in MSDOS pathnames. */ 4574*2e9d4914SAndroid Build Coastguard Worker if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575*2e9d4914SAndroid Build Coastguard Worker name += 2; 4576*2e9d4914SAndroid Build Coastguard Worker#endif 4577*2e9d4914SAndroid Build Coastguard Worker 4578*2e9d4914SAndroid Build Coastguard Worker for (base = name; *name; name++) 4579*2e9d4914SAndroid Build Coastguard Worker if (IS_DIR_SEPARATOR (*name)) 4580*2e9d4914SAndroid Build Coastguard Worker base = name + 1; 4581*2e9d4914SAndroid Build Coastguard Worker return base; 4582*2e9d4914SAndroid Build Coastguard Worker} 4583*2e9d4914SAndroid Build Coastguard Worker 4584*2e9d4914SAndroid Build Coastguard Workerint 4585*2e9d4914SAndroid Build Coastguard Workercheck_executable (const char *path) 4586*2e9d4914SAndroid Build Coastguard Worker{ 4587*2e9d4914SAndroid Build Coastguard Worker struct stat st; 4588*2e9d4914SAndroid Build Coastguard Worker 4589*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 4590*2e9d4914SAndroid Build Coastguard Worker nonempty (path)); 4591*2e9d4914SAndroid Build Coastguard Worker if ((!path) || (!*path)) 4592*2e9d4914SAndroid Build Coastguard Worker return 0; 4593*2e9d4914SAndroid Build Coastguard Worker 4594*2e9d4914SAndroid Build Coastguard Worker if ((stat (path, &st) >= 0) 4595*2e9d4914SAndroid Build Coastguard Worker && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596*2e9d4914SAndroid Build Coastguard Worker return 1; 4597*2e9d4914SAndroid Build Coastguard Worker else 4598*2e9d4914SAndroid Build Coastguard Worker return 0; 4599*2e9d4914SAndroid Build Coastguard Worker} 4600*2e9d4914SAndroid Build Coastguard Worker 4601*2e9d4914SAndroid Build Coastguard Workerint 4602*2e9d4914SAndroid Build Coastguard Workermake_executable (const char *path) 4603*2e9d4914SAndroid Build Coastguard Worker{ 4604*2e9d4914SAndroid Build Coastguard Worker int rval = 0; 4605*2e9d4914SAndroid Build Coastguard Worker struct stat st; 4606*2e9d4914SAndroid Build Coastguard Worker 4607*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 4608*2e9d4914SAndroid Build Coastguard Worker nonempty (path)); 4609*2e9d4914SAndroid Build Coastguard Worker if ((!path) || (!*path)) 4610*2e9d4914SAndroid Build Coastguard Worker return 0; 4611*2e9d4914SAndroid Build Coastguard Worker 4612*2e9d4914SAndroid Build Coastguard Worker if (stat (path, &st) >= 0) 4613*2e9d4914SAndroid Build Coastguard Worker { 4614*2e9d4914SAndroid Build Coastguard Worker rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615*2e9d4914SAndroid Build Coastguard Worker } 4616*2e9d4914SAndroid Build Coastguard Worker return rval; 4617*2e9d4914SAndroid Build Coastguard Worker} 4618*2e9d4914SAndroid Build Coastguard Worker 4619*2e9d4914SAndroid Build Coastguard Worker/* Searches for the full path of the wrapper. Returns 4620*2e9d4914SAndroid Build Coastguard Worker newly allocated full path name if found, NULL otherwise 4621*2e9d4914SAndroid Build Coastguard Worker Does not chase symlinks, even on platforms that support them. 4622*2e9d4914SAndroid Build Coastguard Worker*/ 4623*2e9d4914SAndroid Build Coastguard Workerchar * 4624*2e9d4914SAndroid Build Coastguard Workerfind_executable (const char *wrapper) 4625*2e9d4914SAndroid Build Coastguard Worker{ 4626*2e9d4914SAndroid Build Coastguard Worker int has_slash = 0; 4627*2e9d4914SAndroid Build Coastguard Worker const char *p; 4628*2e9d4914SAndroid Build Coastguard Worker const char *p_next; 4629*2e9d4914SAndroid Build Coastguard Worker /* static buffer for getcwd */ 4630*2e9d4914SAndroid Build Coastguard Worker char tmp[LT_PATHMAX + 1]; 4631*2e9d4914SAndroid Build Coastguard Worker int tmp_len; 4632*2e9d4914SAndroid Build Coastguard Worker char *concat_name; 4633*2e9d4914SAndroid Build Coastguard Worker 4634*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 4635*2e9d4914SAndroid Build Coastguard Worker nonempty (wrapper)); 4636*2e9d4914SAndroid Build Coastguard Worker 4637*2e9d4914SAndroid Build Coastguard Worker if ((wrapper == NULL) || (*wrapper == '\0')) 4638*2e9d4914SAndroid Build Coastguard Worker return NULL; 4639*2e9d4914SAndroid Build Coastguard Worker 4640*2e9d4914SAndroid Build Coastguard Worker /* Absolute path? */ 4641*2e9d4914SAndroid Build Coastguard Worker#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642*2e9d4914SAndroid Build Coastguard Worker if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643*2e9d4914SAndroid Build Coastguard Worker { 4644*2e9d4914SAndroid Build Coastguard Worker concat_name = xstrdup (wrapper); 4645*2e9d4914SAndroid Build Coastguard Worker if (check_executable (concat_name)) 4646*2e9d4914SAndroid Build Coastguard Worker return concat_name; 4647*2e9d4914SAndroid Build Coastguard Worker XFREE (concat_name); 4648*2e9d4914SAndroid Build Coastguard Worker } 4649*2e9d4914SAndroid Build Coastguard Worker else 4650*2e9d4914SAndroid Build Coastguard Worker { 4651*2e9d4914SAndroid Build Coastguard Worker#endif 4652*2e9d4914SAndroid Build Coastguard Worker if (IS_DIR_SEPARATOR (wrapper[0])) 4653*2e9d4914SAndroid Build Coastguard Worker { 4654*2e9d4914SAndroid Build Coastguard Worker concat_name = xstrdup (wrapper); 4655*2e9d4914SAndroid Build Coastguard Worker if (check_executable (concat_name)) 4656*2e9d4914SAndroid Build Coastguard Worker return concat_name; 4657*2e9d4914SAndroid Build Coastguard Worker XFREE (concat_name); 4658*2e9d4914SAndroid Build Coastguard Worker } 4659*2e9d4914SAndroid Build Coastguard Worker#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660*2e9d4914SAndroid Build Coastguard Worker } 4661*2e9d4914SAndroid Build Coastguard Worker#endif 4662*2e9d4914SAndroid Build Coastguard Worker 4663*2e9d4914SAndroid Build Coastguard Worker for (p = wrapper; *p; p++) 4664*2e9d4914SAndroid Build Coastguard Worker if (*p == '/') 4665*2e9d4914SAndroid Build Coastguard Worker { 4666*2e9d4914SAndroid Build Coastguard Worker has_slash = 1; 4667*2e9d4914SAndroid Build Coastguard Worker break; 4668*2e9d4914SAndroid Build Coastguard Worker } 4669*2e9d4914SAndroid Build Coastguard Worker if (!has_slash) 4670*2e9d4914SAndroid Build Coastguard Worker { 4671*2e9d4914SAndroid Build Coastguard Worker /* no slashes; search PATH */ 4672*2e9d4914SAndroid Build Coastguard Worker const char *path = getenv ("PATH"); 4673*2e9d4914SAndroid Build Coastguard Worker if (path != NULL) 4674*2e9d4914SAndroid Build Coastguard Worker { 4675*2e9d4914SAndroid Build Coastguard Worker for (p = path; *p; p = p_next) 4676*2e9d4914SAndroid Build Coastguard Worker { 4677*2e9d4914SAndroid Build Coastguard Worker const char *q; 4678*2e9d4914SAndroid Build Coastguard Worker size_t p_len; 4679*2e9d4914SAndroid Build Coastguard Worker for (q = p; *q; q++) 4680*2e9d4914SAndroid Build Coastguard Worker if (IS_PATH_SEPARATOR (*q)) 4681*2e9d4914SAndroid Build Coastguard Worker break; 4682*2e9d4914SAndroid Build Coastguard Worker p_len = q - p; 4683*2e9d4914SAndroid Build Coastguard Worker p_next = (*q == '\0' ? q : q + 1); 4684*2e9d4914SAndroid Build Coastguard Worker if (p_len == 0) 4685*2e9d4914SAndroid Build Coastguard Worker { 4686*2e9d4914SAndroid Build Coastguard Worker /* empty path: current directory */ 4687*2e9d4914SAndroid Build Coastguard Worker if (getcwd (tmp, LT_PATHMAX) == NULL) 4688*2e9d4914SAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4689*2e9d4914SAndroid Build Coastguard Worker nonnull (strerror (errno))); 4690*2e9d4914SAndroid Build Coastguard Worker tmp_len = strlen (tmp); 4691*2e9d4914SAndroid Build Coastguard Worker concat_name = 4692*2e9d4914SAndroid Build Coastguard Worker XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693*2e9d4914SAndroid Build Coastguard Worker memcpy (concat_name, tmp, tmp_len); 4694*2e9d4914SAndroid Build Coastguard Worker concat_name[tmp_len] = '/'; 4695*2e9d4914SAndroid Build Coastguard Worker strcpy (concat_name + tmp_len + 1, wrapper); 4696*2e9d4914SAndroid Build Coastguard Worker } 4697*2e9d4914SAndroid Build Coastguard Worker else 4698*2e9d4914SAndroid Build Coastguard Worker { 4699*2e9d4914SAndroid Build Coastguard Worker concat_name = 4700*2e9d4914SAndroid Build Coastguard Worker XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701*2e9d4914SAndroid Build Coastguard Worker memcpy (concat_name, p, p_len); 4702*2e9d4914SAndroid Build Coastguard Worker concat_name[p_len] = '/'; 4703*2e9d4914SAndroid Build Coastguard Worker strcpy (concat_name + p_len + 1, wrapper); 4704*2e9d4914SAndroid Build Coastguard Worker } 4705*2e9d4914SAndroid Build Coastguard Worker if (check_executable (concat_name)) 4706*2e9d4914SAndroid Build Coastguard Worker return concat_name; 4707*2e9d4914SAndroid Build Coastguard Worker XFREE (concat_name); 4708*2e9d4914SAndroid Build Coastguard Worker } 4709*2e9d4914SAndroid Build Coastguard Worker } 4710*2e9d4914SAndroid Build Coastguard Worker /* not found in PATH; assume curdir */ 4711*2e9d4914SAndroid Build Coastguard Worker } 4712*2e9d4914SAndroid Build Coastguard Worker /* Relative path | not found in path: prepend cwd */ 4713*2e9d4914SAndroid Build Coastguard Worker if (getcwd (tmp, LT_PATHMAX) == NULL) 4714*2e9d4914SAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4715*2e9d4914SAndroid Build Coastguard Worker nonnull (strerror (errno))); 4716*2e9d4914SAndroid Build Coastguard Worker tmp_len = strlen (tmp); 4717*2e9d4914SAndroid Build Coastguard Worker concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718*2e9d4914SAndroid Build Coastguard Worker memcpy (concat_name, tmp, tmp_len); 4719*2e9d4914SAndroid Build Coastguard Worker concat_name[tmp_len] = '/'; 4720*2e9d4914SAndroid Build Coastguard Worker strcpy (concat_name + tmp_len + 1, wrapper); 4721*2e9d4914SAndroid Build Coastguard Worker 4722*2e9d4914SAndroid Build Coastguard Worker if (check_executable (concat_name)) 4723*2e9d4914SAndroid Build Coastguard Worker return concat_name; 4724*2e9d4914SAndroid Build Coastguard Worker XFREE (concat_name); 4725*2e9d4914SAndroid Build Coastguard Worker return NULL; 4726*2e9d4914SAndroid Build Coastguard Worker} 4727*2e9d4914SAndroid Build Coastguard Worker 4728*2e9d4914SAndroid Build Coastguard Workerchar * 4729*2e9d4914SAndroid Build Coastguard Workerchase_symlinks (const char *pathspec) 4730*2e9d4914SAndroid Build Coastguard Worker{ 4731*2e9d4914SAndroid Build Coastguard Worker#ifndef S_ISLNK 4732*2e9d4914SAndroid Build Coastguard Worker return xstrdup (pathspec); 4733*2e9d4914SAndroid Build Coastguard Worker#else 4734*2e9d4914SAndroid Build Coastguard Worker char buf[LT_PATHMAX]; 4735*2e9d4914SAndroid Build Coastguard Worker struct stat s; 4736*2e9d4914SAndroid Build Coastguard Worker char *tmp_pathspec = xstrdup (pathspec); 4737*2e9d4914SAndroid Build Coastguard Worker char *p; 4738*2e9d4914SAndroid Build Coastguard Worker int has_symlinks = 0; 4739*2e9d4914SAndroid Build Coastguard Worker while (strlen (tmp_pathspec) && !has_symlinks) 4740*2e9d4914SAndroid Build Coastguard Worker { 4741*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 4742*2e9d4914SAndroid Build Coastguard Worker "checking path component for symlinks: %s\n", 4743*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec); 4744*2e9d4914SAndroid Build Coastguard Worker if (lstat (tmp_pathspec, &s) == 0) 4745*2e9d4914SAndroid Build Coastguard Worker { 4746*2e9d4914SAndroid Build Coastguard Worker if (S_ISLNK (s.st_mode) != 0) 4747*2e9d4914SAndroid Build Coastguard Worker { 4748*2e9d4914SAndroid Build Coastguard Worker has_symlinks = 1; 4749*2e9d4914SAndroid Build Coastguard Worker break; 4750*2e9d4914SAndroid Build Coastguard Worker } 4751*2e9d4914SAndroid Build Coastguard Worker 4752*2e9d4914SAndroid Build Coastguard Worker /* search backwards for last DIR_SEPARATOR */ 4753*2e9d4914SAndroid Build Coastguard Worker p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754*2e9d4914SAndroid Build Coastguard Worker while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755*2e9d4914SAndroid Build Coastguard Worker p--; 4756*2e9d4914SAndroid Build Coastguard Worker if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757*2e9d4914SAndroid Build Coastguard Worker { 4758*2e9d4914SAndroid Build Coastguard Worker /* no more DIR_SEPARATORS left */ 4759*2e9d4914SAndroid Build Coastguard Worker break; 4760*2e9d4914SAndroid Build Coastguard Worker } 4761*2e9d4914SAndroid Build Coastguard Worker *p = '\0'; 4762*2e9d4914SAndroid Build Coastguard Worker } 4763*2e9d4914SAndroid Build Coastguard Worker else 4764*2e9d4914SAndroid Build Coastguard Worker { 4765*2e9d4914SAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, 4766*2e9d4914SAndroid Build Coastguard Worker "error accessing file \"%s\": %s", 4767*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec, nonnull (strerror (errno))); 4768*2e9d4914SAndroid Build Coastguard Worker } 4769*2e9d4914SAndroid Build Coastguard Worker } 4770*2e9d4914SAndroid Build Coastguard Worker XFREE (tmp_pathspec); 4771*2e9d4914SAndroid Build Coastguard Worker 4772*2e9d4914SAndroid Build Coastguard Worker if (!has_symlinks) 4773*2e9d4914SAndroid Build Coastguard Worker { 4774*2e9d4914SAndroid Build Coastguard Worker return xstrdup (pathspec); 4775*2e9d4914SAndroid Build Coastguard Worker } 4776*2e9d4914SAndroid Build Coastguard Worker 4777*2e9d4914SAndroid Build Coastguard Worker tmp_pathspec = realpath (pathspec, buf); 4778*2e9d4914SAndroid Build Coastguard Worker if (tmp_pathspec == 0) 4779*2e9d4914SAndroid Build Coastguard Worker { 4780*2e9d4914SAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, 4781*2e9d4914SAndroid Build Coastguard Worker "could not follow symlinks for %s", pathspec); 4782*2e9d4914SAndroid Build Coastguard Worker } 4783*2e9d4914SAndroid Build Coastguard Worker return xstrdup (tmp_pathspec); 4784*2e9d4914SAndroid Build Coastguard Worker#endif 4785*2e9d4914SAndroid Build Coastguard Worker} 4786*2e9d4914SAndroid Build Coastguard Worker 4787*2e9d4914SAndroid Build Coastguard Workerchar * 4788*2e9d4914SAndroid Build Coastguard Workerstrendzap (char *str, const char *pat) 4789*2e9d4914SAndroid Build Coastguard Worker{ 4790*2e9d4914SAndroid Build Coastguard Worker size_t len, patlen; 4791*2e9d4914SAndroid Build Coastguard Worker 4792*2e9d4914SAndroid Build Coastguard Worker assert (str != NULL); 4793*2e9d4914SAndroid Build Coastguard Worker assert (pat != NULL); 4794*2e9d4914SAndroid Build Coastguard Worker 4795*2e9d4914SAndroid Build Coastguard Worker len = strlen (str); 4796*2e9d4914SAndroid Build Coastguard Worker patlen = strlen (pat); 4797*2e9d4914SAndroid Build Coastguard Worker 4798*2e9d4914SAndroid Build Coastguard Worker if (patlen <= len) 4799*2e9d4914SAndroid Build Coastguard Worker { 4800*2e9d4914SAndroid Build Coastguard Worker str += len - patlen; 4801*2e9d4914SAndroid Build Coastguard Worker if (strcmp (str, pat) == 0) 4802*2e9d4914SAndroid Build Coastguard Worker *str = '\0'; 4803*2e9d4914SAndroid Build Coastguard Worker } 4804*2e9d4914SAndroid Build Coastguard Worker return str; 4805*2e9d4914SAndroid Build Coastguard Worker} 4806*2e9d4914SAndroid Build Coastguard Worker 4807*2e9d4914SAndroid Build Coastguard Workervoid 4808*2e9d4914SAndroid Build Coastguard Workerlt_debugprintf (const char *file, int line, const char *fmt, ...) 4809*2e9d4914SAndroid Build Coastguard Worker{ 4810*2e9d4914SAndroid Build Coastguard Worker va_list args; 4811*2e9d4914SAndroid Build Coastguard Worker if (lt_debug) 4812*2e9d4914SAndroid Build Coastguard Worker { 4813*2e9d4914SAndroid Build Coastguard Worker (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4814*2e9d4914SAndroid Build Coastguard Worker va_start (args, fmt); 4815*2e9d4914SAndroid Build Coastguard Worker (void) vfprintf (stderr, fmt, args); 4816*2e9d4914SAndroid Build Coastguard Worker va_end (args); 4817*2e9d4914SAndroid Build Coastguard Worker } 4818*2e9d4914SAndroid Build Coastguard Worker} 4819*2e9d4914SAndroid Build Coastguard Worker 4820*2e9d4914SAndroid Build Coastguard Workerstatic void 4821*2e9d4914SAndroid Build Coastguard Workerlt_error_core (int exit_status, const char *file, 4822*2e9d4914SAndroid Build Coastguard Worker int line, const char *mode, 4823*2e9d4914SAndroid Build Coastguard Worker const char *message, va_list ap) 4824*2e9d4914SAndroid Build Coastguard Worker{ 4825*2e9d4914SAndroid Build Coastguard Worker fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826*2e9d4914SAndroid Build Coastguard Worker vfprintf (stderr, message, ap); 4827*2e9d4914SAndroid Build Coastguard Worker fprintf (stderr, ".\n"); 4828*2e9d4914SAndroid Build Coastguard Worker 4829*2e9d4914SAndroid Build Coastguard Worker if (exit_status >= 0) 4830*2e9d4914SAndroid Build Coastguard Worker exit (exit_status); 4831*2e9d4914SAndroid Build Coastguard Worker} 4832*2e9d4914SAndroid Build Coastguard Worker 4833*2e9d4914SAndroid Build Coastguard Workervoid 4834*2e9d4914SAndroid Build Coastguard Workerlt_fatal (const char *file, int line, const char *message, ...) 4835*2e9d4914SAndroid Build Coastguard Worker{ 4836*2e9d4914SAndroid Build Coastguard Worker va_list ap; 4837*2e9d4914SAndroid Build Coastguard Worker va_start (ap, message); 4838*2e9d4914SAndroid Build Coastguard Worker lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839*2e9d4914SAndroid Build Coastguard Worker va_end (ap); 4840*2e9d4914SAndroid Build Coastguard Worker} 4841*2e9d4914SAndroid Build Coastguard Worker 4842*2e9d4914SAndroid Build Coastguard Workerstatic const char * 4843*2e9d4914SAndroid Build Coastguard Workernonnull (const char *s) 4844*2e9d4914SAndroid Build Coastguard Worker{ 4845*2e9d4914SAndroid Build Coastguard Worker return s ? s : "(null)"; 4846*2e9d4914SAndroid Build Coastguard Worker} 4847*2e9d4914SAndroid Build Coastguard Worker 4848*2e9d4914SAndroid Build Coastguard Workerstatic const char * 4849*2e9d4914SAndroid Build Coastguard Workernonempty (const char *s) 4850*2e9d4914SAndroid Build Coastguard Worker{ 4851*2e9d4914SAndroid Build Coastguard Worker return (s && !*s) ? "(empty)" : nonnull (s); 4852*2e9d4914SAndroid Build Coastguard Worker} 4853*2e9d4914SAndroid Build Coastguard Worker 4854*2e9d4914SAndroid Build Coastguard Workervoid 4855*2e9d4914SAndroid Build Coastguard Workerlt_setenv (const char *name, const char *value) 4856*2e9d4914SAndroid Build Coastguard Worker{ 4857*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 4858*2e9d4914SAndroid Build Coastguard Worker "(lt_setenv) setting '%s' to '%s'\n", 4859*2e9d4914SAndroid Build Coastguard Worker nonnull (name), nonnull (value)); 4860*2e9d4914SAndroid Build Coastguard Worker { 4861*2e9d4914SAndroid Build Coastguard Worker#ifdef HAVE_SETENV 4862*2e9d4914SAndroid Build Coastguard Worker /* always make a copy, for consistency with !HAVE_SETENV */ 4863*2e9d4914SAndroid Build Coastguard Worker char *str = xstrdup (value); 4864*2e9d4914SAndroid Build Coastguard Worker setenv (name, str, 1); 4865*2e9d4914SAndroid Build Coastguard Worker#else 4866*2e9d4914SAndroid Build Coastguard Worker int len = strlen (name) + 1 + strlen (value) + 1; 4867*2e9d4914SAndroid Build Coastguard Worker char *str = XMALLOC (char, len); 4868*2e9d4914SAndroid Build Coastguard Worker sprintf (str, "%s=%s", name, value); 4869*2e9d4914SAndroid Build Coastguard Worker if (putenv (str) != EXIT_SUCCESS) 4870*2e9d4914SAndroid Build Coastguard Worker { 4871*2e9d4914SAndroid Build Coastguard Worker XFREE (str); 4872*2e9d4914SAndroid Build Coastguard Worker } 4873*2e9d4914SAndroid Build Coastguard Worker#endif 4874*2e9d4914SAndroid Build Coastguard Worker } 4875*2e9d4914SAndroid Build Coastguard Worker} 4876*2e9d4914SAndroid Build Coastguard Worker 4877*2e9d4914SAndroid Build Coastguard Workerchar * 4878*2e9d4914SAndroid Build Coastguard Workerlt_extend_str (const char *orig_value, const char *add, int to_end) 4879*2e9d4914SAndroid Build Coastguard Worker{ 4880*2e9d4914SAndroid Build Coastguard Worker char *new_value; 4881*2e9d4914SAndroid Build Coastguard Worker if (orig_value && *orig_value) 4882*2e9d4914SAndroid Build Coastguard Worker { 4883*2e9d4914SAndroid Build Coastguard Worker int orig_value_len = strlen (orig_value); 4884*2e9d4914SAndroid Build Coastguard Worker int add_len = strlen (add); 4885*2e9d4914SAndroid Build Coastguard Worker new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886*2e9d4914SAndroid Build Coastguard Worker if (to_end) 4887*2e9d4914SAndroid Build Coastguard Worker { 4888*2e9d4914SAndroid Build Coastguard Worker strcpy (new_value, orig_value); 4889*2e9d4914SAndroid Build Coastguard Worker strcpy (new_value + orig_value_len, add); 4890*2e9d4914SAndroid Build Coastguard Worker } 4891*2e9d4914SAndroid Build Coastguard Worker else 4892*2e9d4914SAndroid Build Coastguard Worker { 4893*2e9d4914SAndroid Build Coastguard Worker strcpy (new_value, add); 4894*2e9d4914SAndroid Build Coastguard Worker strcpy (new_value + add_len, orig_value); 4895*2e9d4914SAndroid Build Coastguard Worker } 4896*2e9d4914SAndroid Build Coastguard Worker } 4897*2e9d4914SAndroid Build Coastguard Worker else 4898*2e9d4914SAndroid Build Coastguard Worker { 4899*2e9d4914SAndroid Build Coastguard Worker new_value = xstrdup (add); 4900*2e9d4914SAndroid Build Coastguard Worker } 4901*2e9d4914SAndroid Build Coastguard Worker return new_value; 4902*2e9d4914SAndroid Build Coastguard Worker} 4903*2e9d4914SAndroid Build Coastguard Worker 4904*2e9d4914SAndroid Build Coastguard Workervoid 4905*2e9d4914SAndroid Build Coastguard Workerlt_update_exe_path (const char *name, const char *value) 4906*2e9d4914SAndroid Build Coastguard Worker{ 4907*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 4908*2e9d4914SAndroid Build Coastguard Worker "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4909*2e9d4914SAndroid Build Coastguard Worker nonnull (name), nonnull (value)); 4910*2e9d4914SAndroid Build Coastguard Worker 4911*2e9d4914SAndroid Build Coastguard Worker if (name && *name && value && *value) 4912*2e9d4914SAndroid Build Coastguard Worker { 4913*2e9d4914SAndroid Build Coastguard Worker char *new_value = lt_extend_str (getenv (name), value, 0); 4914*2e9d4914SAndroid Build Coastguard Worker /* some systems can't cope with a ':'-terminated path #' */ 4915*2e9d4914SAndroid Build Coastguard Worker int len = strlen (new_value); 4916*2e9d4914SAndroid Build Coastguard Worker while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917*2e9d4914SAndroid Build Coastguard Worker { 4918*2e9d4914SAndroid Build Coastguard Worker new_value[len-1] = '\0'; 4919*2e9d4914SAndroid Build Coastguard Worker } 4920*2e9d4914SAndroid Build Coastguard Worker lt_setenv (name, new_value); 4921*2e9d4914SAndroid Build Coastguard Worker XFREE (new_value); 4922*2e9d4914SAndroid Build Coastguard Worker } 4923*2e9d4914SAndroid Build Coastguard Worker} 4924*2e9d4914SAndroid Build Coastguard Worker 4925*2e9d4914SAndroid Build Coastguard Workervoid 4926*2e9d4914SAndroid Build Coastguard Workerlt_update_lib_path (const char *name, const char *value) 4927*2e9d4914SAndroid Build Coastguard Worker{ 4928*2e9d4914SAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 4929*2e9d4914SAndroid Build Coastguard Worker "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4930*2e9d4914SAndroid Build Coastguard Worker nonnull (name), nonnull (value)); 4931*2e9d4914SAndroid Build Coastguard Worker 4932*2e9d4914SAndroid Build Coastguard Worker if (name && *name && value && *value) 4933*2e9d4914SAndroid Build Coastguard Worker { 4934*2e9d4914SAndroid Build Coastguard Worker char *new_value = lt_extend_str (getenv (name), value, 0); 4935*2e9d4914SAndroid Build Coastguard Worker lt_setenv (name, new_value); 4936*2e9d4914SAndroid Build Coastguard Worker XFREE (new_value); 4937*2e9d4914SAndroid Build Coastguard Worker } 4938*2e9d4914SAndroid Build Coastguard Worker} 4939*2e9d4914SAndroid Build Coastguard Worker 4940*2e9d4914SAndroid Build Coastguard WorkerEOF 4941*2e9d4914SAndroid Build Coastguard Worker case $host_os in 4942*2e9d4914SAndroid Build Coastguard Worker mingw*) 4943*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 4944*2e9d4914SAndroid Build Coastguard Worker 4945*2e9d4914SAndroid Build Coastguard Worker/* Prepares an argument vector before calling spawn(). 4946*2e9d4914SAndroid Build Coastguard Worker Note that spawn() does not by itself call the command interpreter 4947*2e9d4914SAndroid Build Coastguard Worker (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4948*2e9d4914SAndroid Build Coastguard Worker ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4949*2e9d4914SAndroid Build Coastguard Worker GetVersionEx(&v); 4950*2e9d4914SAndroid Build Coastguard Worker v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4951*2e9d4914SAndroid Build Coastguard Worker }) ? "cmd.exe" : "command.com"). 4952*2e9d4914SAndroid Build Coastguard Worker Instead it simply concatenates the arguments, separated by ' ', and calls 4953*2e9d4914SAndroid Build Coastguard Worker CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4954*2e9d4914SAndroid Build Coastguard Worker interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4955*2e9d4914SAndroid Build Coastguard Worker special way: 4956*2e9d4914SAndroid Build Coastguard Worker - Space and tab are interpreted as delimiters. They are not treated as 4957*2e9d4914SAndroid Build Coastguard Worker delimiters if they are surrounded by double quotes: "...". 4958*2e9d4914SAndroid Build Coastguard Worker - Unescaped double quotes are removed from the input. Their only effect is 4959*2e9d4914SAndroid Build Coastguard Worker that within double quotes, space and tab are treated like normal 4960*2e9d4914SAndroid Build Coastguard Worker characters. 4961*2e9d4914SAndroid Build Coastguard Worker - Backslashes not followed by double quotes are not special. 4962*2e9d4914SAndroid Build Coastguard Worker - But 2*n+1 backslashes followed by a double quote become 4963*2e9d4914SAndroid Build Coastguard Worker n backslashes followed by a double quote (n >= 0): 4964*2e9d4914SAndroid Build Coastguard Worker \" -> " 4965*2e9d4914SAndroid Build Coastguard Worker \\\" -> \" 4966*2e9d4914SAndroid Build Coastguard Worker \\\\\" -> \\" 4967*2e9d4914SAndroid Build Coastguard Worker */ 4968*2e9d4914SAndroid Build Coastguard Worker#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*2e9d4914SAndroid Build Coastguard Worker#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*2e9d4914SAndroid Build Coastguard Workerchar ** 4971*2e9d4914SAndroid Build Coastguard Workerprepare_spawn (char **argv) 4972*2e9d4914SAndroid Build Coastguard Worker{ 4973*2e9d4914SAndroid Build Coastguard Worker size_t argc; 4974*2e9d4914SAndroid Build Coastguard Worker char **new_argv; 4975*2e9d4914SAndroid Build Coastguard Worker size_t i; 4976*2e9d4914SAndroid Build Coastguard Worker 4977*2e9d4914SAndroid Build Coastguard Worker /* Count number of arguments. */ 4978*2e9d4914SAndroid Build Coastguard Worker for (argc = 0; argv[argc] != NULL; argc++) 4979*2e9d4914SAndroid Build Coastguard Worker ; 4980*2e9d4914SAndroid Build Coastguard Worker 4981*2e9d4914SAndroid Build Coastguard Worker /* Allocate new argument vector. */ 4982*2e9d4914SAndroid Build Coastguard Worker new_argv = XMALLOC (char *, argc + 1); 4983*2e9d4914SAndroid Build Coastguard Worker 4984*2e9d4914SAndroid Build Coastguard Worker /* Put quoted arguments into the new argument vector. */ 4985*2e9d4914SAndroid Build Coastguard Worker for (i = 0; i < argc; i++) 4986*2e9d4914SAndroid Build Coastguard Worker { 4987*2e9d4914SAndroid Build Coastguard Worker const char *string = argv[i]; 4988*2e9d4914SAndroid Build Coastguard Worker 4989*2e9d4914SAndroid Build Coastguard Worker if (string[0] == '\0') 4990*2e9d4914SAndroid Build Coastguard Worker new_argv[i] = xstrdup ("\"\""); 4991*2e9d4914SAndroid Build Coastguard Worker else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4992*2e9d4914SAndroid Build Coastguard Worker { 4993*2e9d4914SAndroid Build Coastguard Worker int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4994*2e9d4914SAndroid Build Coastguard Worker size_t length; 4995*2e9d4914SAndroid Build Coastguard Worker unsigned int backslashes; 4996*2e9d4914SAndroid Build Coastguard Worker const char *s; 4997*2e9d4914SAndroid Build Coastguard Worker char *quoted_string; 4998*2e9d4914SAndroid Build Coastguard Worker char *p; 4999*2e9d4914SAndroid Build Coastguard Worker 5000*2e9d4914SAndroid Build Coastguard Worker length = 0; 5001*2e9d4914SAndroid Build Coastguard Worker backslashes = 0; 5002*2e9d4914SAndroid Build Coastguard Worker if (quote_around) 5003*2e9d4914SAndroid Build Coastguard Worker length++; 5004*2e9d4914SAndroid Build Coastguard Worker for (s = string; *s != '\0'; s++) 5005*2e9d4914SAndroid Build Coastguard Worker { 5006*2e9d4914SAndroid Build Coastguard Worker char c = *s; 5007*2e9d4914SAndroid Build Coastguard Worker if (c == '"') 5008*2e9d4914SAndroid Build Coastguard Worker length += backslashes + 1; 5009*2e9d4914SAndroid Build Coastguard Worker length++; 5010*2e9d4914SAndroid Build Coastguard Worker if (c == '\\') 5011*2e9d4914SAndroid Build Coastguard Worker backslashes++; 5012*2e9d4914SAndroid Build Coastguard Worker else 5013*2e9d4914SAndroid Build Coastguard Worker backslashes = 0; 5014*2e9d4914SAndroid Build Coastguard Worker } 5015*2e9d4914SAndroid Build Coastguard Worker if (quote_around) 5016*2e9d4914SAndroid Build Coastguard Worker length += backslashes + 1; 5017*2e9d4914SAndroid Build Coastguard Worker 5018*2e9d4914SAndroid Build Coastguard Worker quoted_string = XMALLOC (char, length + 1); 5019*2e9d4914SAndroid Build Coastguard Worker 5020*2e9d4914SAndroid Build Coastguard Worker p = quoted_string; 5021*2e9d4914SAndroid Build Coastguard Worker backslashes = 0; 5022*2e9d4914SAndroid Build Coastguard Worker if (quote_around) 5023*2e9d4914SAndroid Build Coastguard Worker *p++ = '"'; 5024*2e9d4914SAndroid Build Coastguard Worker for (s = string; *s != '\0'; s++) 5025*2e9d4914SAndroid Build Coastguard Worker { 5026*2e9d4914SAndroid Build Coastguard Worker char c = *s; 5027*2e9d4914SAndroid Build Coastguard Worker if (c == '"') 5028*2e9d4914SAndroid Build Coastguard Worker { 5029*2e9d4914SAndroid Build Coastguard Worker unsigned int j; 5030*2e9d4914SAndroid Build Coastguard Worker for (j = backslashes + 1; j > 0; j--) 5031*2e9d4914SAndroid Build Coastguard Worker *p++ = '\\'; 5032*2e9d4914SAndroid Build Coastguard Worker } 5033*2e9d4914SAndroid Build Coastguard Worker *p++ = c; 5034*2e9d4914SAndroid Build Coastguard Worker if (c == '\\') 5035*2e9d4914SAndroid Build Coastguard Worker backslashes++; 5036*2e9d4914SAndroid Build Coastguard Worker else 5037*2e9d4914SAndroid Build Coastguard Worker backslashes = 0; 5038*2e9d4914SAndroid Build Coastguard Worker } 5039*2e9d4914SAndroid Build Coastguard Worker if (quote_around) 5040*2e9d4914SAndroid Build Coastguard Worker { 5041*2e9d4914SAndroid Build Coastguard Worker unsigned int j; 5042*2e9d4914SAndroid Build Coastguard Worker for (j = backslashes; j > 0; j--) 5043*2e9d4914SAndroid Build Coastguard Worker *p++ = '\\'; 5044*2e9d4914SAndroid Build Coastguard Worker *p++ = '"'; 5045*2e9d4914SAndroid Build Coastguard Worker } 5046*2e9d4914SAndroid Build Coastguard Worker *p = '\0'; 5047*2e9d4914SAndroid Build Coastguard Worker 5048*2e9d4914SAndroid Build Coastguard Worker new_argv[i] = quoted_string; 5049*2e9d4914SAndroid Build Coastguard Worker } 5050*2e9d4914SAndroid Build Coastguard Worker else 5051*2e9d4914SAndroid Build Coastguard Worker new_argv[i] = (char *) string; 5052*2e9d4914SAndroid Build Coastguard Worker } 5053*2e9d4914SAndroid Build Coastguard Worker new_argv[argc] = NULL; 5054*2e9d4914SAndroid Build Coastguard Worker 5055*2e9d4914SAndroid Build Coastguard Worker return new_argv; 5056*2e9d4914SAndroid Build Coastguard Worker} 5057*2e9d4914SAndroid Build Coastguard WorkerEOF 5058*2e9d4914SAndroid Build Coastguard Worker ;; 5059*2e9d4914SAndroid Build Coastguard Worker esac 5060*2e9d4914SAndroid Build Coastguard Worker 5061*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 5062*2e9d4914SAndroid Build Coastguard Workervoid lt_dump_script (FILE* f) 5063*2e9d4914SAndroid Build Coastguard Worker{ 5064*2e9d4914SAndroid Build Coastguard WorkerEOF 5065*2e9d4914SAndroid Build Coastguard Worker func_emit_wrapper yes | 5066*2e9d4914SAndroid Build Coastguard Worker $SED -n -e ' 5067*2e9d4914SAndroid Build Coastguard Workers/^\(.\{79\}\)\(..*\)/\1\ 5068*2e9d4914SAndroid Build Coastguard Worker\2/ 5069*2e9d4914SAndroid Build Coastguard Workerh 5070*2e9d4914SAndroid Build Coastguard Workers/\([\\"]\)/\\\1/g 5071*2e9d4914SAndroid Build Coastguard Workers/$/\\n/ 5072*2e9d4914SAndroid Build Coastguard Workers/\([^\n]*\).*/ fputs ("\1", f);/p 5073*2e9d4914SAndroid Build Coastguard Workerg 5074*2e9d4914SAndroid Build Coastguard WorkerD' 5075*2e9d4914SAndroid Build Coastguard Worker cat <<"EOF" 5076*2e9d4914SAndroid Build Coastguard Worker} 5077*2e9d4914SAndroid Build Coastguard WorkerEOF 5078*2e9d4914SAndroid Build Coastguard Worker} 5079*2e9d4914SAndroid Build Coastguard Worker# end: func_emit_cwrapperexe_src 5080*2e9d4914SAndroid Build Coastguard Worker 5081*2e9d4914SAndroid Build Coastguard Worker# func_win32_import_lib_p ARG 5082*2e9d4914SAndroid Build Coastguard Worker# True if ARG is an import lib, as indicated by $file_magic_cmd 5083*2e9d4914SAndroid Build Coastguard Workerfunc_win32_import_lib_p () 5084*2e9d4914SAndroid Build Coastguard Worker{ 5085*2e9d4914SAndroid Build Coastguard Worker $opt_debug 5086*2e9d4914SAndroid Build Coastguard Worker case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 5087*2e9d4914SAndroid Build Coastguard Worker *import*) : ;; 5088*2e9d4914SAndroid Build Coastguard Worker *) false ;; 5089*2e9d4914SAndroid Build Coastguard Worker esac 5090*2e9d4914SAndroid Build Coastguard Worker} 5091*2e9d4914SAndroid Build Coastguard Worker 5092*2e9d4914SAndroid Build Coastguard Worker# func_mode_link arg... 5093*2e9d4914SAndroid Build Coastguard Workerfunc_mode_link () 5094*2e9d4914SAndroid Build Coastguard Worker{ 5095*2e9d4914SAndroid Build Coastguard Worker $opt_debug 5096*2e9d4914SAndroid Build Coastguard Worker case $host in 5097*2e9d4914SAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098*2e9d4914SAndroid Build Coastguard Worker # It is impossible to link a dll without this setting, and 5099*2e9d4914SAndroid Build Coastguard Worker # we shouldn't force the makefile maintainer to figure out 5100*2e9d4914SAndroid Build Coastguard Worker # which system we are compiling for in order to pass an extra 5101*2e9d4914SAndroid Build Coastguard Worker # flag for every libtool invocation. 5102*2e9d4914SAndroid Build Coastguard Worker # allow_undefined=no 5103*2e9d4914SAndroid Build Coastguard Worker 5104*2e9d4914SAndroid Build Coastguard Worker # FIXME: Unfortunately, there are problems with the above when trying 5105*2e9d4914SAndroid Build Coastguard Worker # to make a dll which has undefined symbols, in which case not 5106*2e9d4914SAndroid Build Coastguard Worker # even a static library is built. For now, we need to specify 5107*2e9d4914SAndroid Build Coastguard Worker # -no-undefined on the libtool link line when we can be certain 5108*2e9d4914SAndroid Build Coastguard Worker # that all symbols are satisfied, otherwise we get a static library. 5109*2e9d4914SAndroid Build Coastguard Worker allow_undefined=yes 5110*2e9d4914SAndroid Build Coastguard Worker ;; 5111*2e9d4914SAndroid Build Coastguard Worker *) 5112*2e9d4914SAndroid Build Coastguard Worker allow_undefined=yes 5113*2e9d4914SAndroid Build Coastguard Worker ;; 5114*2e9d4914SAndroid Build Coastguard Worker esac 5115*2e9d4914SAndroid Build Coastguard Worker libtool_args=$nonopt 5116*2e9d4914SAndroid Build Coastguard Worker base_compile="$nonopt $@" 5117*2e9d4914SAndroid Build Coastguard Worker compile_command=$nonopt 5118*2e9d4914SAndroid Build Coastguard Worker finalize_command=$nonopt 5119*2e9d4914SAndroid Build Coastguard Worker 5120*2e9d4914SAndroid Build Coastguard Worker compile_rpath= 5121*2e9d4914SAndroid Build Coastguard Worker finalize_rpath= 5122*2e9d4914SAndroid Build Coastguard Worker compile_shlibpath= 5123*2e9d4914SAndroid Build Coastguard Worker finalize_shlibpath= 5124*2e9d4914SAndroid Build Coastguard Worker convenience= 5125*2e9d4914SAndroid Build Coastguard Worker old_convenience= 5126*2e9d4914SAndroid Build Coastguard Worker deplibs= 5127*2e9d4914SAndroid Build Coastguard Worker old_deplibs= 5128*2e9d4914SAndroid Build Coastguard Worker compiler_flags= 5129*2e9d4914SAndroid Build Coastguard Worker linker_flags= 5130*2e9d4914SAndroid Build Coastguard Worker dllsearchpath= 5131*2e9d4914SAndroid Build Coastguard Worker lib_search_path=`pwd` 5132*2e9d4914SAndroid Build Coastguard Worker inst_prefix_dir= 5133*2e9d4914SAndroid Build Coastguard Worker new_inherited_linker_flags= 5134*2e9d4914SAndroid Build Coastguard Worker 5135*2e9d4914SAndroid Build Coastguard Worker avoid_version=no 5136*2e9d4914SAndroid Build Coastguard Worker bindir= 5137*2e9d4914SAndroid Build Coastguard Worker dlfiles= 5138*2e9d4914SAndroid Build Coastguard Worker dlprefiles= 5139*2e9d4914SAndroid Build Coastguard Worker dlself=no 5140*2e9d4914SAndroid Build Coastguard Worker export_dynamic=no 5141*2e9d4914SAndroid Build Coastguard Worker export_symbols= 5142*2e9d4914SAndroid Build Coastguard Worker export_symbols_regex= 5143*2e9d4914SAndroid Build Coastguard Worker generated= 5144*2e9d4914SAndroid Build Coastguard Worker libobjs= 5145*2e9d4914SAndroid Build Coastguard Worker ltlibs= 5146*2e9d4914SAndroid Build Coastguard Worker module=no 5147*2e9d4914SAndroid Build Coastguard Worker no_install=no 5148*2e9d4914SAndroid Build Coastguard Worker objs= 5149*2e9d4914SAndroid Build Coastguard Worker non_pic_objects= 5150*2e9d4914SAndroid Build Coastguard Worker precious_files_regex= 5151*2e9d4914SAndroid Build Coastguard Worker prefer_static_libs=no 5152*2e9d4914SAndroid Build Coastguard Worker preload=no 5153*2e9d4914SAndroid Build Coastguard Worker prev= 5154*2e9d4914SAndroid Build Coastguard Worker prevarg= 5155*2e9d4914SAndroid Build Coastguard Worker release= 5156*2e9d4914SAndroid Build Coastguard Worker rpath= 5157*2e9d4914SAndroid Build Coastguard Worker xrpath= 5158*2e9d4914SAndroid Build Coastguard Worker perm_rpath= 5159*2e9d4914SAndroid Build Coastguard Worker temp_rpath= 5160*2e9d4914SAndroid Build Coastguard Worker thread_safe=no 5161*2e9d4914SAndroid Build Coastguard Worker vinfo= 5162*2e9d4914SAndroid Build Coastguard Worker vinfo_number=no 5163*2e9d4914SAndroid Build Coastguard Worker weak_libs= 5164*2e9d4914SAndroid Build Coastguard Worker single_module="${wl}-single_module" 5165*2e9d4914SAndroid Build Coastguard Worker func_infer_tag $base_compile 5166*2e9d4914SAndroid Build Coastguard Worker 5167*2e9d4914SAndroid Build Coastguard Worker # We need to know -static, to get the right output filenames. 5168*2e9d4914SAndroid Build Coastguard Worker for arg 5169*2e9d4914SAndroid Build Coastguard Worker do 5170*2e9d4914SAndroid Build Coastguard Worker case $arg in 5171*2e9d4914SAndroid Build Coastguard Worker -shared) 5172*2e9d4914SAndroid Build Coastguard Worker test "$build_libtool_libs" != yes && \ 5173*2e9d4914SAndroid Build Coastguard Worker func_fatal_configuration "can not build a shared library" 5174*2e9d4914SAndroid Build Coastguard Worker build_old_libs=no 5175*2e9d4914SAndroid Build Coastguard Worker break 5176*2e9d4914SAndroid Build Coastguard Worker ;; 5177*2e9d4914SAndroid Build Coastguard Worker -all-static | -static | -static-libtool-libs) 5178*2e9d4914SAndroid Build Coastguard Worker case $arg in 5179*2e9d4914SAndroid Build Coastguard Worker -all-static) 5180*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181*2e9d4914SAndroid Build Coastguard Worker func_warning "complete static linking is impossible in this configuration" 5182*2e9d4914SAndroid Build Coastguard Worker fi 5183*2e9d4914SAndroid Build Coastguard Worker if test -n "$link_static_flag"; then 5184*2e9d4914SAndroid Build Coastguard Worker dlopen_self=$dlopen_self_static 5185*2e9d4914SAndroid Build Coastguard Worker fi 5186*2e9d4914SAndroid Build Coastguard Worker prefer_static_libs=yes 5187*2e9d4914SAndroid Build Coastguard Worker ;; 5188*2e9d4914SAndroid Build Coastguard Worker -static) 5189*2e9d4914SAndroid Build Coastguard Worker if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190*2e9d4914SAndroid Build Coastguard Worker dlopen_self=$dlopen_self_static 5191*2e9d4914SAndroid Build Coastguard Worker fi 5192*2e9d4914SAndroid Build Coastguard Worker prefer_static_libs=built 5193*2e9d4914SAndroid Build Coastguard Worker ;; 5194*2e9d4914SAndroid Build Coastguard Worker -static-libtool-libs) 5195*2e9d4914SAndroid Build Coastguard Worker if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196*2e9d4914SAndroid Build Coastguard Worker dlopen_self=$dlopen_self_static 5197*2e9d4914SAndroid Build Coastguard Worker fi 5198*2e9d4914SAndroid Build Coastguard Worker prefer_static_libs=yes 5199*2e9d4914SAndroid Build Coastguard Worker ;; 5200*2e9d4914SAndroid Build Coastguard Worker esac 5201*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=no 5202*2e9d4914SAndroid Build Coastguard Worker build_old_libs=yes 5203*2e9d4914SAndroid Build Coastguard Worker break 5204*2e9d4914SAndroid Build Coastguard Worker ;; 5205*2e9d4914SAndroid Build Coastguard Worker esac 5206*2e9d4914SAndroid Build Coastguard Worker done 5207*2e9d4914SAndroid Build Coastguard Worker 5208*2e9d4914SAndroid Build Coastguard Worker # See if our shared archives depend on static archives. 5209*2e9d4914SAndroid Build Coastguard Worker test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5210*2e9d4914SAndroid Build Coastguard Worker 5211*2e9d4914SAndroid Build Coastguard Worker # Go through the arguments, transforming them on the way. 5212*2e9d4914SAndroid Build Coastguard Worker while test "$#" -gt 0; do 5213*2e9d4914SAndroid Build Coastguard Worker arg="$1" 5214*2e9d4914SAndroid Build Coastguard Worker shift 5215*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$arg" 5216*2e9d4914SAndroid Build Coastguard Worker qarg=$func_quote_for_eval_unquoted_result 5217*2e9d4914SAndroid Build Coastguard Worker func_append libtool_args " $func_quote_for_eval_result" 5218*2e9d4914SAndroid Build Coastguard Worker 5219*2e9d4914SAndroid Build Coastguard Worker # If the previous option needs an argument, assign it. 5220*2e9d4914SAndroid Build Coastguard Worker if test -n "$prev"; then 5221*2e9d4914SAndroid Build Coastguard Worker case $prev in 5222*2e9d4914SAndroid Build Coastguard Worker output) 5223*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " @OUTPUT@" 5224*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " @OUTPUT@" 5225*2e9d4914SAndroid Build Coastguard Worker ;; 5226*2e9d4914SAndroid Build Coastguard Worker esac 5227*2e9d4914SAndroid Build Coastguard Worker 5228*2e9d4914SAndroid Build Coastguard Worker case $prev in 5229*2e9d4914SAndroid Build Coastguard Worker bindir) 5230*2e9d4914SAndroid Build Coastguard Worker bindir="$arg" 5231*2e9d4914SAndroid Build Coastguard Worker prev= 5232*2e9d4914SAndroid Build Coastguard Worker continue 5233*2e9d4914SAndroid Build Coastguard Worker ;; 5234*2e9d4914SAndroid Build Coastguard Worker dlfiles|dlprefiles) 5235*2e9d4914SAndroid Build Coastguard Worker if test "$preload" = no; then 5236*2e9d4914SAndroid Build Coastguard Worker # Add the symbol object into the linking commands. 5237*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " @SYMFILE@" 5238*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " @SYMFILE@" 5239*2e9d4914SAndroid Build Coastguard Worker preload=yes 5240*2e9d4914SAndroid Build Coastguard Worker fi 5241*2e9d4914SAndroid Build Coastguard Worker case $arg in 5242*2e9d4914SAndroid Build Coastguard Worker *.la | *.lo) ;; # We handle these cases below. 5243*2e9d4914SAndroid Build Coastguard Worker force) 5244*2e9d4914SAndroid Build Coastguard Worker if test "$dlself" = no; then 5245*2e9d4914SAndroid Build Coastguard Worker dlself=needless 5246*2e9d4914SAndroid Build Coastguard Worker export_dynamic=yes 5247*2e9d4914SAndroid Build Coastguard Worker fi 5248*2e9d4914SAndroid Build Coastguard Worker prev= 5249*2e9d4914SAndroid Build Coastguard Worker continue 5250*2e9d4914SAndroid Build Coastguard Worker ;; 5251*2e9d4914SAndroid Build Coastguard Worker self) 5252*2e9d4914SAndroid Build Coastguard Worker if test "$prev" = dlprefiles; then 5253*2e9d4914SAndroid Build Coastguard Worker dlself=yes 5254*2e9d4914SAndroid Build Coastguard Worker elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255*2e9d4914SAndroid Build Coastguard Worker dlself=yes 5256*2e9d4914SAndroid Build Coastguard Worker else 5257*2e9d4914SAndroid Build Coastguard Worker dlself=needless 5258*2e9d4914SAndroid Build Coastguard Worker export_dynamic=yes 5259*2e9d4914SAndroid Build Coastguard Worker fi 5260*2e9d4914SAndroid Build Coastguard Worker prev= 5261*2e9d4914SAndroid Build Coastguard Worker continue 5262*2e9d4914SAndroid Build Coastguard Worker ;; 5263*2e9d4914SAndroid Build Coastguard Worker *) 5264*2e9d4914SAndroid Build Coastguard Worker if test "$prev" = dlfiles; then 5265*2e9d4914SAndroid Build Coastguard Worker func_append dlfiles " $arg" 5266*2e9d4914SAndroid Build Coastguard Worker else 5267*2e9d4914SAndroid Build Coastguard Worker func_append dlprefiles " $arg" 5268*2e9d4914SAndroid Build Coastguard Worker fi 5269*2e9d4914SAndroid Build Coastguard Worker prev= 5270*2e9d4914SAndroid Build Coastguard Worker continue 5271*2e9d4914SAndroid Build Coastguard Worker ;; 5272*2e9d4914SAndroid Build Coastguard Worker esac 5273*2e9d4914SAndroid Build Coastguard Worker ;; 5274*2e9d4914SAndroid Build Coastguard Worker expsyms) 5275*2e9d4914SAndroid Build Coastguard Worker export_symbols="$arg" 5276*2e9d4914SAndroid Build Coastguard Worker test -f "$arg" \ 5277*2e9d4914SAndroid Build Coastguard Worker || func_fatal_error "symbol file \`$arg' does not exist" 5278*2e9d4914SAndroid Build Coastguard Worker prev= 5279*2e9d4914SAndroid Build Coastguard Worker continue 5280*2e9d4914SAndroid Build Coastguard Worker ;; 5281*2e9d4914SAndroid Build Coastguard Worker expsyms_regex) 5282*2e9d4914SAndroid Build Coastguard Worker export_symbols_regex="$arg" 5283*2e9d4914SAndroid Build Coastguard Worker prev= 5284*2e9d4914SAndroid Build Coastguard Worker continue 5285*2e9d4914SAndroid Build Coastguard Worker ;; 5286*2e9d4914SAndroid Build Coastguard Worker framework) 5287*2e9d4914SAndroid Build Coastguard Worker case $host in 5288*2e9d4914SAndroid Build Coastguard Worker *-*-darwin*) 5289*2e9d4914SAndroid Build Coastguard Worker case "$deplibs " in 5290*2e9d4914SAndroid Build Coastguard Worker *" $qarg.ltframework "*) ;; 5291*2e9d4914SAndroid Build Coastguard Worker *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292*2e9d4914SAndroid Build Coastguard Worker ;; 5293*2e9d4914SAndroid Build Coastguard Worker esac 5294*2e9d4914SAndroid Build Coastguard Worker ;; 5295*2e9d4914SAndroid Build Coastguard Worker esac 5296*2e9d4914SAndroid Build Coastguard Worker prev= 5297*2e9d4914SAndroid Build Coastguard Worker continue 5298*2e9d4914SAndroid Build Coastguard Worker ;; 5299*2e9d4914SAndroid Build Coastguard Worker inst_prefix) 5300*2e9d4914SAndroid Build Coastguard Worker inst_prefix_dir="$arg" 5301*2e9d4914SAndroid Build Coastguard Worker prev= 5302*2e9d4914SAndroid Build Coastguard Worker continue 5303*2e9d4914SAndroid Build Coastguard Worker ;; 5304*2e9d4914SAndroid Build Coastguard Worker objectlist) 5305*2e9d4914SAndroid Build Coastguard Worker if test -f "$arg"; then 5306*2e9d4914SAndroid Build Coastguard Worker save_arg=$arg 5307*2e9d4914SAndroid Build Coastguard Worker moreargs= 5308*2e9d4914SAndroid Build Coastguard Worker for fil in `cat "$save_arg"` 5309*2e9d4914SAndroid Build Coastguard Worker do 5310*2e9d4914SAndroid Build Coastguard Worker# func_append moreargs " $fil" 5311*2e9d4914SAndroid Build Coastguard Worker arg=$fil 5312*2e9d4914SAndroid Build Coastguard Worker # A libtool-controlled object. 5313*2e9d4914SAndroid Build Coastguard Worker 5314*2e9d4914SAndroid Build Coastguard Worker # Check to see that this really is a libtool object. 5315*2e9d4914SAndroid Build Coastguard Worker if func_lalib_unsafe_p "$arg"; then 5316*2e9d4914SAndroid Build Coastguard Worker pic_object= 5317*2e9d4914SAndroid Build Coastguard Worker non_pic_object= 5318*2e9d4914SAndroid Build Coastguard Worker 5319*2e9d4914SAndroid Build Coastguard Worker # Read the .lo file 5320*2e9d4914SAndroid Build Coastguard Worker func_source "$arg" 5321*2e9d4914SAndroid Build Coastguard Worker 5322*2e9d4914SAndroid Build Coastguard Worker if test -z "$pic_object" || 5323*2e9d4914SAndroid Build Coastguard Worker test -z "$non_pic_object" || 5324*2e9d4914SAndroid Build Coastguard Worker test "$pic_object" = none && 5325*2e9d4914SAndroid Build Coastguard Worker test "$non_pic_object" = none; then 5326*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot find name of object for \`$arg'" 5327*2e9d4914SAndroid Build Coastguard Worker fi 5328*2e9d4914SAndroid Build Coastguard Worker 5329*2e9d4914SAndroid Build Coastguard Worker # Extract subdirectory from the argument. 5330*2e9d4914SAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 5331*2e9d4914SAndroid Build Coastguard Worker xdir="$func_dirname_result" 5332*2e9d4914SAndroid Build Coastguard Worker 5333*2e9d4914SAndroid Build Coastguard Worker if test "$pic_object" != none; then 5334*2e9d4914SAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 5335*2e9d4914SAndroid Build Coastguard Worker pic_object="$xdir$pic_object" 5336*2e9d4914SAndroid Build Coastguard Worker 5337*2e9d4914SAndroid Build Coastguard Worker if test "$prev" = dlfiles; then 5338*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5339*2e9d4914SAndroid Build Coastguard Worker func_append dlfiles " $pic_object" 5340*2e9d4914SAndroid Build Coastguard Worker prev= 5341*2e9d4914SAndroid Build Coastguard Worker continue 5342*2e9d4914SAndroid Build Coastguard Worker else 5343*2e9d4914SAndroid Build Coastguard Worker # If libtool objects are unsupported, then we need to preload. 5344*2e9d4914SAndroid Build Coastguard Worker prev=dlprefiles 5345*2e9d4914SAndroid Build Coastguard Worker fi 5346*2e9d4914SAndroid Build Coastguard Worker fi 5347*2e9d4914SAndroid Build Coastguard Worker 5348*2e9d4914SAndroid Build Coastguard Worker # CHECK ME: I think I busted this. -Ossama 5349*2e9d4914SAndroid Build Coastguard Worker if test "$prev" = dlprefiles; then 5350*2e9d4914SAndroid Build Coastguard Worker # Preload the old-style object. 5351*2e9d4914SAndroid Build Coastguard Worker func_append dlprefiles " $pic_object" 5352*2e9d4914SAndroid Build Coastguard Worker prev= 5353*2e9d4914SAndroid Build Coastguard Worker fi 5354*2e9d4914SAndroid Build Coastguard Worker 5355*2e9d4914SAndroid Build Coastguard Worker # A PIC object. 5356*2e9d4914SAndroid Build Coastguard Worker func_append libobjs " $pic_object" 5357*2e9d4914SAndroid Build Coastguard Worker arg="$pic_object" 5358*2e9d4914SAndroid Build Coastguard Worker fi 5359*2e9d4914SAndroid Build Coastguard Worker 5360*2e9d4914SAndroid Build Coastguard Worker # Non-PIC object. 5361*2e9d4914SAndroid Build Coastguard Worker if test "$non_pic_object" != none; then 5362*2e9d4914SAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 5363*2e9d4914SAndroid Build Coastguard Worker non_pic_object="$xdir$non_pic_object" 5364*2e9d4914SAndroid Build Coastguard Worker 5365*2e9d4914SAndroid Build Coastguard Worker # A standard non-PIC object 5366*2e9d4914SAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 5367*2e9d4914SAndroid Build Coastguard Worker if test -z "$pic_object" || test "$pic_object" = none ; then 5368*2e9d4914SAndroid Build Coastguard Worker arg="$non_pic_object" 5369*2e9d4914SAndroid Build Coastguard Worker fi 5370*2e9d4914SAndroid Build Coastguard Worker else 5371*2e9d4914SAndroid Build Coastguard Worker # If the PIC object exists, use it instead. 5372*2e9d4914SAndroid Build Coastguard Worker # $xdir was prepended to $pic_object above. 5373*2e9d4914SAndroid Build Coastguard Worker non_pic_object="$pic_object" 5374*2e9d4914SAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 5375*2e9d4914SAndroid Build Coastguard Worker fi 5376*2e9d4914SAndroid Build Coastguard Worker else 5377*2e9d4914SAndroid Build Coastguard Worker # Only an error if not doing a dry-run. 5378*2e9d4914SAndroid Build Coastguard Worker if $opt_dry_run; then 5379*2e9d4914SAndroid Build Coastguard Worker # Extract subdirectory from the argument. 5380*2e9d4914SAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 5381*2e9d4914SAndroid Build Coastguard Worker xdir="$func_dirname_result" 5382*2e9d4914SAndroid Build Coastguard Worker 5383*2e9d4914SAndroid Build Coastguard Worker func_lo2o "$arg" 5384*2e9d4914SAndroid Build Coastguard Worker pic_object=$xdir$objdir/$func_lo2o_result 5385*2e9d4914SAndroid Build Coastguard Worker non_pic_object=$xdir$func_lo2o_result 5386*2e9d4914SAndroid Build Coastguard Worker func_append libobjs " $pic_object" 5387*2e9d4914SAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 5388*2e9d4914SAndroid Build Coastguard Worker else 5389*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$arg' is not a valid libtool object" 5390*2e9d4914SAndroid Build Coastguard Worker fi 5391*2e9d4914SAndroid Build Coastguard Worker fi 5392*2e9d4914SAndroid Build Coastguard Worker done 5393*2e9d4914SAndroid Build Coastguard Worker else 5394*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "link input file \`$arg' does not exist" 5395*2e9d4914SAndroid Build Coastguard Worker fi 5396*2e9d4914SAndroid Build Coastguard Worker arg=$save_arg 5397*2e9d4914SAndroid Build Coastguard Worker prev= 5398*2e9d4914SAndroid Build Coastguard Worker continue 5399*2e9d4914SAndroid Build Coastguard Worker ;; 5400*2e9d4914SAndroid Build Coastguard Worker precious_regex) 5401*2e9d4914SAndroid Build Coastguard Worker precious_files_regex="$arg" 5402*2e9d4914SAndroid Build Coastguard Worker prev= 5403*2e9d4914SAndroid Build Coastguard Worker continue 5404*2e9d4914SAndroid Build Coastguard Worker ;; 5405*2e9d4914SAndroid Build Coastguard Worker release) 5406*2e9d4914SAndroid Build Coastguard Worker release="-$arg" 5407*2e9d4914SAndroid Build Coastguard Worker prev= 5408*2e9d4914SAndroid Build Coastguard Worker continue 5409*2e9d4914SAndroid Build Coastguard Worker ;; 5410*2e9d4914SAndroid Build Coastguard Worker rpath | xrpath) 5411*2e9d4914SAndroid Build Coastguard Worker # We need an absolute path. 5412*2e9d4914SAndroid Build Coastguard Worker case $arg in 5413*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 5414*2e9d4914SAndroid Build Coastguard Worker *) 5415*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "only absolute run-paths are allowed" 5416*2e9d4914SAndroid Build Coastguard Worker ;; 5417*2e9d4914SAndroid Build Coastguard Worker esac 5418*2e9d4914SAndroid Build Coastguard Worker if test "$prev" = rpath; then 5419*2e9d4914SAndroid Build Coastguard Worker case "$rpath " in 5420*2e9d4914SAndroid Build Coastguard Worker *" $arg "*) ;; 5421*2e9d4914SAndroid Build Coastguard Worker *) func_append rpath " $arg" ;; 5422*2e9d4914SAndroid Build Coastguard Worker esac 5423*2e9d4914SAndroid Build Coastguard Worker else 5424*2e9d4914SAndroid Build Coastguard Worker case "$xrpath " in 5425*2e9d4914SAndroid Build Coastguard Worker *" $arg "*) ;; 5426*2e9d4914SAndroid Build Coastguard Worker *) func_append xrpath " $arg" ;; 5427*2e9d4914SAndroid Build Coastguard Worker esac 5428*2e9d4914SAndroid Build Coastguard Worker fi 5429*2e9d4914SAndroid Build Coastguard Worker prev= 5430*2e9d4914SAndroid Build Coastguard Worker continue 5431*2e9d4914SAndroid Build Coastguard Worker ;; 5432*2e9d4914SAndroid Build Coastguard Worker shrext) 5433*2e9d4914SAndroid Build Coastguard Worker shrext_cmds="$arg" 5434*2e9d4914SAndroid Build Coastguard Worker prev= 5435*2e9d4914SAndroid Build Coastguard Worker continue 5436*2e9d4914SAndroid Build Coastguard Worker ;; 5437*2e9d4914SAndroid Build Coastguard Worker weak) 5438*2e9d4914SAndroid Build Coastguard Worker func_append weak_libs " $arg" 5439*2e9d4914SAndroid Build Coastguard Worker prev= 5440*2e9d4914SAndroid Build Coastguard Worker continue 5441*2e9d4914SAndroid Build Coastguard Worker ;; 5442*2e9d4914SAndroid Build Coastguard Worker xcclinker) 5443*2e9d4914SAndroid Build Coastguard Worker func_append linker_flags " $qarg" 5444*2e9d4914SAndroid Build Coastguard Worker func_append compiler_flags " $qarg" 5445*2e9d4914SAndroid Build Coastguard Worker prev= 5446*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $qarg" 5447*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $qarg" 5448*2e9d4914SAndroid Build Coastguard Worker continue 5449*2e9d4914SAndroid Build Coastguard Worker ;; 5450*2e9d4914SAndroid Build Coastguard Worker xcompiler) 5451*2e9d4914SAndroid Build Coastguard Worker func_append compiler_flags " $qarg" 5452*2e9d4914SAndroid Build Coastguard Worker prev= 5453*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $qarg" 5454*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $qarg" 5455*2e9d4914SAndroid Build Coastguard Worker continue 5456*2e9d4914SAndroid Build Coastguard Worker ;; 5457*2e9d4914SAndroid Build Coastguard Worker xlinker) 5458*2e9d4914SAndroid Build Coastguard Worker func_append linker_flags " $qarg" 5459*2e9d4914SAndroid Build Coastguard Worker func_append compiler_flags " $wl$qarg" 5460*2e9d4914SAndroid Build Coastguard Worker prev= 5461*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $wl$qarg" 5462*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $wl$qarg" 5463*2e9d4914SAndroid Build Coastguard Worker continue 5464*2e9d4914SAndroid Build Coastguard Worker ;; 5465*2e9d4914SAndroid Build Coastguard Worker *) 5466*2e9d4914SAndroid Build Coastguard Worker eval "$prev=\"\$arg\"" 5467*2e9d4914SAndroid Build Coastguard Worker prev= 5468*2e9d4914SAndroid Build Coastguard Worker continue 5469*2e9d4914SAndroid Build Coastguard Worker ;; 5470*2e9d4914SAndroid Build Coastguard Worker esac 5471*2e9d4914SAndroid Build Coastguard Worker fi # test -n "$prev" 5472*2e9d4914SAndroid Build Coastguard Worker 5473*2e9d4914SAndroid Build Coastguard Worker prevarg="$arg" 5474*2e9d4914SAndroid Build Coastguard Worker 5475*2e9d4914SAndroid Build Coastguard Worker case $arg in 5476*2e9d4914SAndroid Build Coastguard Worker -all-static) 5477*2e9d4914SAndroid Build Coastguard Worker if test -n "$link_static_flag"; then 5478*2e9d4914SAndroid Build Coastguard Worker # See comment for -static flag below, for more details. 5479*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $link_static_flag" 5480*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $link_static_flag" 5481*2e9d4914SAndroid Build Coastguard Worker fi 5482*2e9d4914SAndroid Build Coastguard Worker continue 5483*2e9d4914SAndroid Build Coastguard Worker ;; 5484*2e9d4914SAndroid Build Coastguard Worker 5485*2e9d4914SAndroid Build Coastguard Worker -allow-undefined) 5486*2e9d4914SAndroid Build Coastguard Worker # FIXME: remove this flag sometime in the future. 5487*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488*2e9d4914SAndroid Build Coastguard Worker ;; 5489*2e9d4914SAndroid Build Coastguard Worker 5490*2e9d4914SAndroid Build Coastguard Worker -avoid-version) 5491*2e9d4914SAndroid Build Coastguard Worker avoid_version=yes 5492*2e9d4914SAndroid Build Coastguard Worker continue 5493*2e9d4914SAndroid Build Coastguard Worker ;; 5494*2e9d4914SAndroid Build Coastguard Worker 5495*2e9d4914SAndroid Build Coastguard Worker -bindir) 5496*2e9d4914SAndroid Build Coastguard Worker prev=bindir 5497*2e9d4914SAndroid Build Coastguard Worker continue 5498*2e9d4914SAndroid Build Coastguard Worker ;; 5499*2e9d4914SAndroid Build Coastguard Worker 5500*2e9d4914SAndroid Build Coastguard Worker -dlopen) 5501*2e9d4914SAndroid Build Coastguard Worker prev=dlfiles 5502*2e9d4914SAndroid Build Coastguard Worker continue 5503*2e9d4914SAndroid Build Coastguard Worker ;; 5504*2e9d4914SAndroid Build Coastguard Worker 5505*2e9d4914SAndroid Build Coastguard Worker -dlpreopen) 5506*2e9d4914SAndroid Build Coastguard Worker prev=dlprefiles 5507*2e9d4914SAndroid Build Coastguard Worker continue 5508*2e9d4914SAndroid Build Coastguard Worker ;; 5509*2e9d4914SAndroid Build Coastguard Worker 5510*2e9d4914SAndroid Build Coastguard Worker -export-dynamic) 5511*2e9d4914SAndroid Build Coastguard Worker export_dynamic=yes 5512*2e9d4914SAndroid Build Coastguard Worker continue 5513*2e9d4914SAndroid Build Coastguard Worker ;; 5514*2e9d4914SAndroid Build Coastguard Worker 5515*2e9d4914SAndroid Build Coastguard Worker -export-symbols | -export-symbols-regex) 5516*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "more than one -exported-symbols argument is not allowed" 5518*2e9d4914SAndroid Build Coastguard Worker fi 5519*2e9d4914SAndroid Build Coastguard Worker if test "X$arg" = "X-export-symbols"; then 5520*2e9d4914SAndroid Build Coastguard Worker prev=expsyms 5521*2e9d4914SAndroid Build Coastguard Worker else 5522*2e9d4914SAndroid Build Coastguard Worker prev=expsyms_regex 5523*2e9d4914SAndroid Build Coastguard Worker fi 5524*2e9d4914SAndroid Build Coastguard Worker continue 5525*2e9d4914SAndroid Build Coastguard Worker ;; 5526*2e9d4914SAndroid Build Coastguard Worker 5527*2e9d4914SAndroid Build Coastguard Worker -framework) 5528*2e9d4914SAndroid Build Coastguard Worker prev=framework 5529*2e9d4914SAndroid Build Coastguard Worker continue 5530*2e9d4914SAndroid Build Coastguard Worker ;; 5531*2e9d4914SAndroid Build Coastguard Worker 5532*2e9d4914SAndroid Build Coastguard Worker -inst-prefix-dir) 5533*2e9d4914SAndroid Build Coastguard Worker prev=inst_prefix 5534*2e9d4914SAndroid Build Coastguard Worker continue 5535*2e9d4914SAndroid Build Coastguard Worker ;; 5536*2e9d4914SAndroid Build Coastguard Worker 5537*2e9d4914SAndroid Build Coastguard Worker # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538*2e9d4914SAndroid Build Coastguard Worker # so, if we see these flags be careful not to treat them like -L 5539*2e9d4914SAndroid Build Coastguard Worker -L[A-Z][A-Z]*:*) 5540*2e9d4914SAndroid Build Coastguard Worker case $with_gcc/$host in 5541*2e9d4914SAndroid Build Coastguard Worker no/*-*-irix* | /*-*-irix*) 5542*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $arg" 5543*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $arg" 5544*2e9d4914SAndroid Build Coastguard Worker ;; 5545*2e9d4914SAndroid Build Coastguard Worker esac 5546*2e9d4914SAndroid Build Coastguard Worker continue 5547*2e9d4914SAndroid Build Coastguard Worker ;; 5548*2e9d4914SAndroid Build Coastguard Worker 5549*2e9d4914SAndroid Build Coastguard Worker -L*) 5550*2e9d4914SAndroid Build Coastguard Worker func_stripname "-L" '' "$arg" 5551*2e9d4914SAndroid Build Coastguard Worker if test -z "$func_stripname_result"; then 5552*2e9d4914SAndroid Build Coastguard Worker if test "$#" -gt 0; then 5553*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "require no space between \`-L' and \`$1'" 5554*2e9d4914SAndroid Build Coastguard Worker else 5555*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "need path for \`-L' option" 5556*2e9d4914SAndroid Build Coastguard Worker fi 5557*2e9d4914SAndroid Build Coastguard Worker fi 5558*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 5559*2e9d4914SAndroid Build Coastguard Worker dir=$func_resolve_sysroot_result 5560*2e9d4914SAndroid Build Coastguard Worker # We need an absolute path. 5561*2e9d4914SAndroid Build Coastguard Worker case $dir in 5562*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 5563*2e9d4914SAndroid Build Coastguard Worker *) 5564*2e9d4914SAndroid Build Coastguard Worker absdir=`cd "$dir" && pwd` 5565*2e9d4914SAndroid Build Coastguard Worker test -z "$absdir" && \ 5566*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot determine absolute directory name of \`$dir'" 5567*2e9d4914SAndroid Build Coastguard Worker dir="$absdir" 5568*2e9d4914SAndroid Build Coastguard Worker ;; 5569*2e9d4914SAndroid Build Coastguard Worker esac 5570*2e9d4914SAndroid Build Coastguard Worker case "$deplibs " in 5571*2e9d4914SAndroid Build Coastguard Worker *" -L$dir "* | *" $arg "*) 5572*2e9d4914SAndroid Build Coastguard Worker # Will only happen for absolute or sysroot arguments 5573*2e9d4914SAndroid Build Coastguard Worker ;; 5574*2e9d4914SAndroid Build Coastguard Worker *) 5575*2e9d4914SAndroid Build Coastguard Worker # Preserve sysroot, but never include relative directories 5576*2e9d4914SAndroid Build Coastguard Worker case $dir in 5577*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 5578*2e9d4914SAndroid Build Coastguard Worker *) func_append deplibs " -L$dir" ;; 5579*2e9d4914SAndroid Build Coastguard Worker esac 5580*2e9d4914SAndroid Build Coastguard Worker func_append lib_search_path " $dir" 5581*2e9d4914SAndroid Build Coastguard Worker ;; 5582*2e9d4914SAndroid Build Coastguard Worker esac 5583*2e9d4914SAndroid Build Coastguard Worker case $host in 5584*2e9d4914SAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5585*2e9d4914SAndroid Build Coastguard Worker testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586*2e9d4914SAndroid Build Coastguard Worker case :$dllsearchpath: in 5587*2e9d4914SAndroid Build Coastguard Worker *":$dir:"*) ;; 5588*2e9d4914SAndroid Build Coastguard Worker ::) dllsearchpath=$dir;; 5589*2e9d4914SAndroid Build Coastguard Worker *) func_append dllsearchpath ":$dir";; 5590*2e9d4914SAndroid Build Coastguard Worker esac 5591*2e9d4914SAndroid Build Coastguard Worker case :$dllsearchpath: in 5592*2e9d4914SAndroid Build Coastguard Worker *":$testbindir:"*) ;; 5593*2e9d4914SAndroid Build Coastguard Worker ::) dllsearchpath=$testbindir;; 5594*2e9d4914SAndroid Build Coastguard Worker *) func_append dllsearchpath ":$testbindir";; 5595*2e9d4914SAndroid Build Coastguard Worker esac 5596*2e9d4914SAndroid Build Coastguard Worker ;; 5597*2e9d4914SAndroid Build Coastguard Worker esac 5598*2e9d4914SAndroid Build Coastguard Worker continue 5599*2e9d4914SAndroid Build Coastguard Worker ;; 5600*2e9d4914SAndroid Build Coastguard Worker 5601*2e9d4914SAndroid Build Coastguard Worker -l*) 5602*2e9d4914SAndroid Build Coastguard Worker if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603*2e9d4914SAndroid Build Coastguard Worker case $host in 5604*2e9d4914SAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605*2e9d4914SAndroid Build Coastguard Worker # These systems don't actually have a C or math library (as such) 5606*2e9d4914SAndroid Build Coastguard Worker continue 5607*2e9d4914SAndroid Build Coastguard Worker ;; 5608*2e9d4914SAndroid Build Coastguard Worker *-*-os2*) 5609*2e9d4914SAndroid Build Coastguard Worker # These systems don't actually have a C library (as such) 5610*2e9d4914SAndroid Build Coastguard Worker test "X$arg" = "X-lc" && continue 5611*2e9d4914SAndroid Build Coastguard Worker ;; 5612*2e9d4914SAndroid Build Coastguard Worker *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613*2e9d4914SAndroid Build Coastguard Worker # Do not include libc due to us having libc/libc_r. 5614*2e9d4914SAndroid Build Coastguard Worker test "X$arg" = "X-lc" && continue 5615*2e9d4914SAndroid Build Coastguard Worker ;; 5616*2e9d4914SAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 5617*2e9d4914SAndroid Build Coastguard Worker # Rhapsody C and math libraries are in the System framework 5618*2e9d4914SAndroid Build Coastguard Worker func_append deplibs " System.ltframework" 5619*2e9d4914SAndroid Build Coastguard Worker continue 5620*2e9d4914SAndroid Build Coastguard Worker ;; 5621*2e9d4914SAndroid Build Coastguard Worker *-*-sco3.2v5* | *-*-sco5v6*) 5622*2e9d4914SAndroid Build Coastguard Worker # Causes problems with __ctype 5623*2e9d4914SAndroid Build Coastguard Worker test "X$arg" = "X-lc" && continue 5624*2e9d4914SAndroid Build Coastguard Worker ;; 5625*2e9d4914SAndroid Build Coastguard Worker *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626*2e9d4914SAndroid Build Coastguard Worker # Compiler inserts libc in the correct place for threads to work 5627*2e9d4914SAndroid Build Coastguard Worker test "X$arg" = "X-lc" && continue 5628*2e9d4914SAndroid Build Coastguard Worker ;; 5629*2e9d4914SAndroid Build Coastguard Worker esac 5630*2e9d4914SAndroid Build Coastguard Worker elif test "X$arg" = "X-lc_r"; then 5631*2e9d4914SAndroid Build Coastguard Worker case $host in 5632*2e9d4914SAndroid Build Coastguard Worker *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633*2e9d4914SAndroid Build Coastguard Worker # Do not include libc_r directly, use -pthread flag. 5634*2e9d4914SAndroid Build Coastguard Worker continue 5635*2e9d4914SAndroid Build Coastguard Worker ;; 5636*2e9d4914SAndroid Build Coastguard Worker esac 5637*2e9d4914SAndroid Build Coastguard Worker fi 5638*2e9d4914SAndroid Build Coastguard Worker func_append deplibs " $arg" 5639*2e9d4914SAndroid Build Coastguard Worker continue 5640*2e9d4914SAndroid Build Coastguard Worker ;; 5641*2e9d4914SAndroid Build Coastguard Worker 5642*2e9d4914SAndroid Build Coastguard Worker -module) 5643*2e9d4914SAndroid Build Coastguard Worker module=yes 5644*2e9d4914SAndroid Build Coastguard Worker continue 5645*2e9d4914SAndroid Build Coastguard Worker ;; 5646*2e9d4914SAndroid Build Coastguard Worker 5647*2e9d4914SAndroid Build Coastguard Worker # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648*2e9d4914SAndroid Build Coastguard Worker # classes, name mangling, and exception handling. 5649*2e9d4914SAndroid Build Coastguard Worker # Darwin uses the -arch flag to determine output architecture. 5650*2e9d4914SAndroid Build Coastguard Worker -model|-arch|-isysroot|--sysroot) 5651*2e9d4914SAndroid Build Coastguard Worker func_append compiler_flags " $arg" 5652*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $arg" 5653*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $arg" 5654*2e9d4914SAndroid Build Coastguard Worker prev=xcompiler 5655*2e9d4914SAndroid Build Coastguard Worker continue 5656*2e9d4914SAndroid Build Coastguard Worker ;; 5657*2e9d4914SAndroid Build Coastguard Worker 5658*2e9d4914SAndroid Build Coastguard Worker -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 5659*2e9d4914SAndroid Build Coastguard Worker |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 5660*2e9d4914SAndroid Build Coastguard Worker func_append compiler_flags " $arg" 5661*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $arg" 5662*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $arg" 5663*2e9d4914SAndroid Build Coastguard Worker case "$new_inherited_linker_flags " in 5664*2e9d4914SAndroid Build Coastguard Worker *" $arg "*) ;; 5665*2e9d4914SAndroid Build Coastguard Worker * ) func_append new_inherited_linker_flags " $arg" ;; 5666*2e9d4914SAndroid Build Coastguard Worker esac 5667*2e9d4914SAndroid Build Coastguard Worker continue 5668*2e9d4914SAndroid Build Coastguard Worker ;; 5669*2e9d4914SAndroid Build Coastguard Worker 5670*2e9d4914SAndroid Build Coastguard Worker -multi_module) 5671*2e9d4914SAndroid Build Coastguard Worker single_module="${wl}-multi_module" 5672*2e9d4914SAndroid Build Coastguard Worker continue 5673*2e9d4914SAndroid Build Coastguard Worker ;; 5674*2e9d4914SAndroid Build Coastguard Worker 5675*2e9d4914SAndroid Build Coastguard Worker -no-fast-install) 5676*2e9d4914SAndroid Build Coastguard Worker fast_install=no 5677*2e9d4914SAndroid Build Coastguard Worker continue 5678*2e9d4914SAndroid Build Coastguard Worker ;; 5679*2e9d4914SAndroid Build Coastguard Worker 5680*2e9d4914SAndroid Build Coastguard Worker -no-install) 5681*2e9d4914SAndroid Build Coastguard Worker case $host in 5682*2e9d4914SAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683*2e9d4914SAndroid Build Coastguard Worker # The PATH hackery in wrapper scripts is required on Windows 5684*2e9d4914SAndroid Build Coastguard Worker # and Darwin in order for the loader to find any dlls it needs. 5685*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-no-install' is ignored for $host" 5686*2e9d4914SAndroid Build Coastguard Worker func_warning "assuming \`-no-fast-install' instead" 5687*2e9d4914SAndroid Build Coastguard Worker fast_install=no 5688*2e9d4914SAndroid Build Coastguard Worker ;; 5689*2e9d4914SAndroid Build Coastguard Worker *) no_install=yes ;; 5690*2e9d4914SAndroid Build Coastguard Worker esac 5691*2e9d4914SAndroid Build Coastguard Worker continue 5692*2e9d4914SAndroid Build Coastguard Worker ;; 5693*2e9d4914SAndroid Build Coastguard Worker 5694*2e9d4914SAndroid Build Coastguard Worker -no-undefined) 5695*2e9d4914SAndroid Build Coastguard Worker allow_undefined=no 5696*2e9d4914SAndroid Build Coastguard Worker continue 5697*2e9d4914SAndroid Build Coastguard Worker ;; 5698*2e9d4914SAndroid Build Coastguard Worker 5699*2e9d4914SAndroid Build Coastguard Worker -objectlist) 5700*2e9d4914SAndroid Build Coastguard Worker prev=objectlist 5701*2e9d4914SAndroid Build Coastguard Worker continue 5702*2e9d4914SAndroid Build Coastguard Worker ;; 5703*2e9d4914SAndroid Build Coastguard Worker 5704*2e9d4914SAndroid Build Coastguard Worker -o) prev=output ;; 5705*2e9d4914SAndroid Build Coastguard Worker 5706*2e9d4914SAndroid Build Coastguard Worker -precious-files-regex) 5707*2e9d4914SAndroid Build Coastguard Worker prev=precious_regex 5708*2e9d4914SAndroid Build Coastguard Worker continue 5709*2e9d4914SAndroid Build Coastguard Worker ;; 5710*2e9d4914SAndroid Build Coastguard Worker 5711*2e9d4914SAndroid Build Coastguard Worker -release) 5712*2e9d4914SAndroid Build Coastguard Worker prev=release 5713*2e9d4914SAndroid Build Coastguard Worker continue 5714*2e9d4914SAndroid Build Coastguard Worker ;; 5715*2e9d4914SAndroid Build Coastguard Worker 5716*2e9d4914SAndroid Build Coastguard Worker -rpath) 5717*2e9d4914SAndroid Build Coastguard Worker prev=rpath 5718*2e9d4914SAndroid Build Coastguard Worker continue 5719*2e9d4914SAndroid Build Coastguard Worker ;; 5720*2e9d4914SAndroid Build Coastguard Worker 5721*2e9d4914SAndroid Build Coastguard Worker -R) 5722*2e9d4914SAndroid Build Coastguard Worker prev=xrpath 5723*2e9d4914SAndroid Build Coastguard Worker continue 5724*2e9d4914SAndroid Build Coastguard Worker ;; 5725*2e9d4914SAndroid Build Coastguard Worker 5726*2e9d4914SAndroid Build Coastguard Worker -R*) 5727*2e9d4914SAndroid Build Coastguard Worker func_stripname '-R' '' "$arg" 5728*2e9d4914SAndroid Build Coastguard Worker dir=$func_stripname_result 5729*2e9d4914SAndroid Build Coastguard Worker # We need an absolute path. 5730*2e9d4914SAndroid Build Coastguard Worker case $dir in 5731*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 5732*2e9d4914SAndroid Build Coastguard Worker =*) 5733*2e9d4914SAndroid Build Coastguard Worker func_stripname '=' '' "$dir" 5734*2e9d4914SAndroid Build Coastguard Worker dir=$lt_sysroot$func_stripname_result 5735*2e9d4914SAndroid Build Coastguard Worker ;; 5736*2e9d4914SAndroid Build Coastguard Worker *) 5737*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "only absolute run-paths are allowed" 5738*2e9d4914SAndroid Build Coastguard Worker ;; 5739*2e9d4914SAndroid Build Coastguard Worker esac 5740*2e9d4914SAndroid Build Coastguard Worker case "$xrpath " in 5741*2e9d4914SAndroid Build Coastguard Worker *" $dir "*) ;; 5742*2e9d4914SAndroid Build Coastguard Worker *) func_append xrpath " $dir" ;; 5743*2e9d4914SAndroid Build Coastguard Worker esac 5744*2e9d4914SAndroid Build Coastguard Worker continue 5745*2e9d4914SAndroid Build Coastguard Worker ;; 5746*2e9d4914SAndroid Build Coastguard Worker 5747*2e9d4914SAndroid Build Coastguard Worker -shared) 5748*2e9d4914SAndroid Build Coastguard Worker # The effects of -shared are defined in a previous loop. 5749*2e9d4914SAndroid Build Coastguard Worker continue 5750*2e9d4914SAndroid Build Coastguard Worker ;; 5751*2e9d4914SAndroid Build Coastguard Worker 5752*2e9d4914SAndroid Build Coastguard Worker -shrext) 5753*2e9d4914SAndroid Build Coastguard Worker prev=shrext 5754*2e9d4914SAndroid Build Coastguard Worker continue 5755*2e9d4914SAndroid Build Coastguard Worker ;; 5756*2e9d4914SAndroid Build Coastguard Worker 5757*2e9d4914SAndroid Build Coastguard Worker -static | -static-libtool-libs) 5758*2e9d4914SAndroid Build Coastguard Worker # The effects of -static are defined in a previous loop. 5759*2e9d4914SAndroid Build Coastguard Worker # We used to do the same as -all-static on platforms that 5760*2e9d4914SAndroid Build Coastguard Worker # didn't have a PIC flag, but the assumption that the effects 5761*2e9d4914SAndroid Build Coastguard Worker # would be equivalent was wrong. It would break on at least 5762*2e9d4914SAndroid Build Coastguard Worker # Digital Unix and AIX. 5763*2e9d4914SAndroid Build Coastguard Worker continue 5764*2e9d4914SAndroid Build Coastguard Worker ;; 5765*2e9d4914SAndroid Build Coastguard Worker 5766*2e9d4914SAndroid Build Coastguard Worker -thread-safe) 5767*2e9d4914SAndroid Build Coastguard Worker thread_safe=yes 5768*2e9d4914SAndroid Build Coastguard Worker continue 5769*2e9d4914SAndroid Build Coastguard Worker ;; 5770*2e9d4914SAndroid Build Coastguard Worker 5771*2e9d4914SAndroid Build Coastguard Worker -version-info) 5772*2e9d4914SAndroid Build Coastguard Worker prev=vinfo 5773*2e9d4914SAndroid Build Coastguard Worker continue 5774*2e9d4914SAndroid Build Coastguard Worker ;; 5775*2e9d4914SAndroid Build Coastguard Worker 5776*2e9d4914SAndroid Build Coastguard Worker -version-number) 5777*2e9d4914SAndroid Build Coastguard Worker prev=vinfo 5778*2e9d4914SAndroid Build Coastguard Worker vinfo_number=yes 5779*2e9d4914SAndroid Build Coastguard Worker continue 5780*2e9d4914SAndroid Build Coastguard Worker ;; 5781*2e9d4914SAndroid Build Coastguard Worker 5782*2e9d4914SAndroid Build Coastguard Worker -weak) 5783*2e9d4914SAndroid Build Coastguard Worker prev=weak 5784*2e9d4914SAndroid Build Coastguard Worker continue 5785*2e9d4914SAndroid Build Coastguard Worker ;; 5786*2e9d4914SAndroid Build Coastguard Worker 5787*2e9d4914SAndroid Build Coastguard Worker -Wc,*) 5788*2e9d4914SAndroid Build Coastguard Worker func_stripname '-Wc,' '' "$arg" 5789*2e9d4914SAndroid Build Coastguard Worker args=$func_stripname_result 5790*2e9d4914SAndroid Build Coastguard Worker arg= 5791*2e9d4914SAndroid Build Coastguard Worker save_ifs="$IFS"; IFS=',' 5792*2e9d4914SAndroid Build Coastguard Worker for flag in $args; do 5793*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 5794*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$flag" 5795*2e9d4914SAndroid Build Coastguard Worker func_append arg " $func_quote_for_eval_result" 5796*2e9d4914SAndroid Build Coastguard Worker func_append compiler_flags " $func_quote_for_eval_result" 5797*2e9d4914SAndroid Build Coastguard Worker done 5798*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 5799*2e9d4914SAndroid Build Coastguard Worker func_stripname ' ' '' "$arg" 5800*2e9d4914SAndroid Build Coastguard Worker arg=$func_stripname_result 5801*2e9d4914SAndroid Build Coastguard Worker ;; 5802*2e9d4914SAndroid Build Coastguard Worker 5803*2e9d4914SAndroid Build Coastguard Worker -Wl,*) 5804*2e9d4914SAndroid Build Coastguard Worker func_stripname '-Wl,' '' "$arg" 5805*2e9d4914SAndroid Build Coastguard Worker args=$func_stripname_result 5806*2e9d4914SAndroid Build Coastguard Worker arg= 5807*2e9d4914SAndroid Build Coastguard Worker save_ifs="$IFS"; IFS=',' 5808*2e9d4914SAndroid Build Coastguard Worker for flag in $args; do 5809*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 5810*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$flag" 5811*2e9d4914SAndroid Build Coastguard Worker func_append arg " $wl$func_quote_for_eval_result" 5812*2e9d4914SAndroid Build Coastguard Worker func_append compiler_flags " $wl$func_quote_for_eval_result" 5813*2e9d4914SAndroid Build Coastguard Worker func_append linker_flags " $func_quote_for_eval_result" 5814*2e9d4914SAndroid Build Coastguard Worker done 5815*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 5816*2e9d4914SAndroid Build Coastguard Worker func_stripname ' ' '' "$arg" 5817*2e9d4914SAndroid Build Coastguard Worker arg=$func_stripname_result 5818*2e9d4914SAndroid Build Coastguard Worker ;; 5819*2e9d4914SAndroid Build Coastguard Worker 5820*2e9d4914SAndroid Build Coastguard Worker -Xcompiler) 5821*2e9d4914SAndroid Build Coastguard Worker prev=xcompiler 5822*2e9d4914SAndroid Build Coastguard Worker continue 5823*2e9d4914SAndroid Build Coastguard Worker ;; 5824*2e9d4914SAndroid Build Coastguard Worker 5825*2e9d4914SAndroid Build Coastguard Worker -Xlinker) 5826*2e9d4914SAndroid Build Coastguard Worker prev=xlinker 5827*2e9d4914SAndroid Build Coastguard Worker continue 5828*2e9d4914SAndroid Build Coastguard Worker ;; 5829*2e9d4914SAndroid Build Coastguard Worker 5830*2e9d4914SAndroid Build Coastguard Worker -XCClinker) 5831*2e9d4914SAndroid Build Coastguard Worker prev=xcclinker 5832*2e9d4914SAndroid Build Coastguard Worker continue 5833*2e9d4914SAndroid Build Coastguard Worker ;; 5834*2e9d4914SAndroid Build Coastguard Worker 5835*2e9d4914SAndroid Build Coastguard Worker # -msg_* for osf cc 5836*2e9d4914SAndroid Build Coastguard Worker -msg_*) 5837*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$arg" 5838*2e9d4914SAndroid Build Coastguard Worker arg="$func_quote_for_eval_result" 5839*2e9d4914SAndroid Build Coastguard Worker ;; 5840*2e9d4914SAndroid Build Coastguard Worker 5841*2e9d4914SAndroid Build Coastguard Worker # Flags to be passed through unchanged, with rationale: 5842*2e9d4914SAndroid Build Coastguard Worker # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5843*2e9d4914SAndroid Build Coastguard Worker # -r[0-9][0-9]* specify processor for the SGI compiler 5844*2e9d4914SAndroid Build Coastguard Worker # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5845*2e9d4914SAndroid Build Coastguard Worker # +DA*, +DD* enable 64-bit mode for the HP compiler 5846*2e9d4914SAndroid Build Coastguard Worker # -q* compiler args for the IBM compiler 5847*2e9d4914SAndroid Build Coastguard Worker # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5848*2e9d4914SAndroid Build Coastguard Worker # -F/path path to uninstalled frameworks, gcc on darwin 5849*2e9d4914SAndroid Build Coastguard Worker # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5850*2e9d4914SAndroid Build Coastguard Worker # @file GCC response files 5851*2e9d4914SAndroid Build Coastguard Worker # -tp=* Portland pgcc target processor selection 5852*2e9d4914SAndroid Build Coastguard Worker # --sysroot=* for sysroot support 5853*2e9d4914SAndroid Build Coastguard Worker # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854*2e9d4914SAndroid Build Coastguard Worker -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5855*2e9d4914SAndroid Build Coastguard Worker -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 5856*2e9d4914SAndroid Build Coastguard Worker -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$arg" 5858*2e9d4914SAndroid Build Coastguard Worker arg="$func_quote_for_eval_result" 5859*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $arg" 5860*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $arg" 5861*2e9d4914SAndroid Build Coastguard Worker func_append compiler_flags " $arg" 5862*2e9d4914SAndroid Build Coastguard Worker continue 5863*2e9d4914SAndroid Build Coastguard Worker ;; 5864*2e9d4914SAndroid Build Coastguard Worker 5865*2e9d4914SAndroid Build Coastguard Worker # Some other compiler flag. 5866*2e9d4914SAndroid Build Coastguard Worker -* | +*) 5867*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$arg" 5868*2e9d4914SAndroid Build Coastguard Worker arg="$func_quote_for_eval_result" 5869*2e9d4914SAndroid Build Coastguard Worker ;; 5870*2e9d4914SAndroid Build Coastguard Worker 5871*2e9d4914SAndroid Build Coastguard Worker *.$objext) 5872*2e9d4914SAndroid Build Coastguard Worker # A standard object. 5873*2e9d4914SAndroid Build Coastguard Worker func_append objs " $arg" 5874*2e9d4914SAndroid Build Coastguard Worker ;; 5875*2e9d4914SAndroid Build Coastguard Worker 5876*2e9d4914SAndroid Build Coastguard Worker *.lo) 5877*2e9d4914SAndroid Build Coastguard Worker # A libtool-controlled object. 5878*2e9d4914SAndroid Build Coastguard Worker 5879*2e9d4914SAndroid Build Coastguard Worker # Check to see that this really is a libtool object. 5880*2e9d4914SAndroid Build Coastguard Worker if func_lalib_unsafe_p "$arg"; then 5881*2e9d4914SAndroid Build Coastguard Worker pic_object= 5882*2e9d4914SAndroid Build Coastguard Worker non_pic_object= 5883*2e9d4914SAndroid Build Coastguard Worker 5884*2e9d4914SAndroid Build Coastguard Worker # Read the .lo file 5885*2e9d4914SAndroid Build Coastguard Worker func_source "$arg" 5886*2e9d4914SAndroid Build Coastguard Worker 5887*2e9d4914SAndroid Build Coastguard Worker if test -z "$pic_object" || 5888*2e9d4914SAndroid Build Coastguard Worker test -z "$non_pic_object" || 5889*2e9d4914SAndroid Build Coastguard Worker test "$pic_object" = none && 5890*2e9d4914SAndroid Build Coastguard Worker test "$non_pic_object" = none; then 5891*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot find name of object for \`$arg'" 5892*2e9d4914SAndroid Build Coastguard Worker fi 5893*2e9d4914SAndroid Build Coastguard Worker 5894*2e9d4914SAndroid Build Coastguard Worker # Extract subdirectory from the argument. 5895*2e9d4914SAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 5896*2e9d4914SAndroid Build Coastguard Worker xdir="$func_dirname_result" 5897*2e9d4914SAndroid Build Coastguard Worker 5898*2e9d4914SAndroid Build Coastguard Worker if test "$pic_object" != none; then 5899*2e9d4914SAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 5900*2e9d4914SAndroid Build Coastguard Worker pic_object="$xdir$pic_object" 5901*2e9d4914SAndroid Build Coastguard Worker 5902*2e9d4914SAndroid Build Coastguard Worker if test "$prev" = dlfiles; then 5903*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5904*2e9d4914SAndroid Build Coastguard Worker func_append dlfiles " $pic_object" 5905*2e9d4914SAndroid Build Coastguard Worker prev= 5906*2e9d4914SAndroid Build Coastguard Worker continue 5907*2e9d4914SAndroid Build Coastguard Worker else 5908*2e9d4914SAndroid Build Coastguard Worker # If libtool objects are unsupported, then we need to preload. 5909*2e9d4914SAndroid Build Coastguard Worker prev=dlprefiles 5910*2e9d4914SAndroid Build Coastguard Worker fi 5911*2e9d4914SAndroid Build Coastguard Worker fi 5912*2e9d4914SAndroid Build Coastguard Worker 5913*2e9d4914SAndroid Build Coastguard Worker # CHECK ME: I think I busted this. -Ossama 5914*2e9d4914SAndroid Build Coastguard Worker if test "$prev" = dlprefiles; then 5915*2e9d4914SAndroid Build Coastguard Worker # Preload the old-style object. 5916*2e9d4914SAndroid Build Coastguard Worker func_append dlprefiles " $pic_object" 5917*2e9d4914SAndroid Build Coastguard Worker prev= 5918*2e9d4914SAndroid Build Coastguard Worker fi 5919*2e9d4914SAndroid Build Coastguard Worker 5920*2e9d4914SAndroid Build Coastguard Worker # A PIC object. 5921*2e9d4914SAndroid Build Coastguard Worker func_append libobjs " $pic_object" 5922*2e9d4914SAndroid Build Coastguard Worker arg="$pic_object" 5923*2e9d4914SAndroid Build Coastguard Worker fi 5924*2e9d4914SAndroid Build Coastguard Worker 5925*2e9d4914SAndroid Build Coastguard Worker # Non-PIC object. 5926*2e9d4914SAndroid Build Coastguard Worker if test "$non_pic_object" != none; then 5927*2e9d4914SAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 5928*2e9d4914SAndroid Build Coastguard Worker non_pic_object="$xdir$non_pic_object" 5929*2e9d4914SAndroid Build Coastguard Worker 5930*2e9d4914SAndroid Build Coastguard Worker # A standard non-PIC object 5931*2e9d4914SAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 5932*2e9d4914SAndroid Build Coastguard Worker if test -z "$pic_object" || test "$pic_object" = none ; then 5933*2e9d4914SAndroid Build Coastguard Worker arg="$non_pic_object" 5934*2e9d4914SAndroid Build Coastguard Worker fi 5935*2e9d4914SAndroid Build Coastguard Worker else 5936*2e9d4914SAndroid Build Coastguard Worker # If the PIC object exists, use it instead. 5937*2e9d4914SAndroid Build Coastguard Worker # $xdir was prepended to $pic_object above. 5938*2e9d4914SAndroid Build Coastguard Worker non_pic_object="$pic_object" 5939*2e9d4914SAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 5940*2e9d4914SAndroid Build Coastguard Worker fi 5941*2e9d4914SAndroid Build Coastguard Worker else 5942*2e9d4914SAndroid Build Coastguard Worker # Only an error if not doing a dry-run. 5943*2e9d4914SAndroid Build Coastguard Worker if $opt_dry_run; then 5944*2e9d4914SAndroid Build Coastguard Worker # Extract subdirectory from the argument. 5945*2e9d4914SAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 5946*2e9d4914SAndroid Build Coastguard Worker xdir="$func_dirname_result" 5947*2e9d4914SAndroid Build Coastguard Worker 5948*2e9d4914SAndroid Build Coastguard Worker func_lo2o "$arg" 5949*2e9d4914SAndroid Build Coastguard Worker pic_object=$xdir$objdir/$func_lo2o_result 5950*2e9d4914SAndroid Build Coastguard Worker non_pic_object=$xdir$func_lo2o_result 5951*2e9d4914SAndroid Build Coastguard Worker func_append libobjs " $pic_object" 5952*2e9d4914SAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 5953*2e9d4914SAndroid Build Coastguard Worker else 5954*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$arg' is not a valid libtool object" 5955*2e9d4914SAndroid Build Coastguard Worker fi 5956*2e9d4914SAndroid Build Coastguard Worker fi 5957*2e9d4914SAndroid Build Coastguard Worker ;; 5958*2e9d4914SAndroid Build Coastguard Worker 5959*2e9d4914SAndroid Build Coastguard Worker *.$libext) 5960*2e9d4914SAndroid Build Coastguard Worker # An archive. 5961*2e9d4914SAndroid Build Coastguard Worker func_append deplibs " $arg" 5962*2e9d4914SAndroid Build Coastguard Worker func_append old_deplibs " $arg" 5963*2e9d4914SAndroid Build Coastguard Worker continue 5964*2e9d4914SAndroid Build Coastguard Worker ;; 5965*2e9d4914SAndroid Build Coastguard Worker 5966*2e9d4914SAndroid Build Coastguard Worker *.la) 5967*2e9d4914SAndroid Build Coastguard Worker # A libtool-controlled library. 5968*2e9d4914SAndroid Build Coastguard Worker 5969*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$arg" 5970*2e9d4914SAndroid Build Coastguard Worker if test "$prev" = dlfiles; then 5971*2e9d4914SAndroid Build Coastguard Worker # This library was specified with -dlopen. 5972*2e9d4914SAndroid Build Coastguard Worker func_append dlfiles " $func_resolve_sysroot_result" 5973*2e9d4914SAndroid Build Coastguard Worker prev= 5974*2e9d4914SAndroid Build Coastguard Worker elif test "$prev" = dlprefiles; then 5975*2e9d4914SAndroid Build Coastguard Worker # The library was specified with -dlpreopen. 5976*2e9d4914SAndroid Build Coastguard Worker func_append dlprefiles " $func_resolve_sysroot_result" 5977*2e9d4914SAndroid Build Coastguard Worker prev= 5978*2e9d4914SAndroid Build Coastguard Worker else 5979*2e9d4914SAndroid Build Coastguard Worker func_append deplibs " $func_resolve_sysroot_result" 5980*2e9d4914SAndroid Build Coastguard Worker fi 5981*2e9d4914SAndroid Build Coastguard Worker continue 5982*2e9d4914SAndroid Build Coastguard Worker ;; 5983*2e9d4914SAndroid Build Coastguard Worker 5984*2e9d4914SAndroid Build Coastguard Worker # Some other compiler argument. 5985*2e9d4914SAndroid Build Coastguard Worker *) 5986*2e9d4914SAndroid Build Coastguard Worker # Unknown arguments in both finalize_command and compile_command need 5987*2e9d4914SAndroid Build Coastguard Worker # to be aesthetically quoted because they are evaled later. 5988*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$arg" 5989*2e9d4914SAndroid Build Coastguard Worker arg="$func_quote_for_eval_result" 5990*2e9d4914SAndroid Build Coastguard Worker ;; 5991*2e9d4914SAndroid Build Coastguard Worker esac # arg 5992*2e9d4914SAndroid Build Coastguard Worker 5993*2e9d4914SAndroid Build Coastguard Worker # Now actually substitute the argument into the commands. 5994*2e9d4914SAndroid Build Coastguard Worker if test -n "$arg"; then 5995*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $arg" 5996*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $arg" 5997*2e9d4914SAndroid Build Coastguard Worker fi 5998*2e9d4914SAndroid Build Coastguard Worker done # argument parsing loop 5999*2e9d4914SAndroid Build Coastguard Worker 6000*2e9d4914SAndroid Build Coastguard Worker test -n "$prev" && \ 6001*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "the \`$prevarg' option requires an argument" 6002*2e9d4914SAndroid Build Coastguard Worker 6003*2e9d4914SAndroid Build Coastguard Worker if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004*2e9d4914SAndroid Build Coastguard Worker eval arg=\"$export_dynamic_flag_spec\" 6005*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $arg" 6006*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $arg" 6007*2e9d4914SAndroid Build Coastguard Worker fi 6008*2e9d4914SAndroid Build Coastguard Worker 6009*2e9d4914SAndroid Build Coastguard Worker oldlibs= 6010*2e9d4914SAndroid Build Coastguard Worker # calculate the name of the file, without its directory 6011*2e9d4914SAndroid Build Coastguard Worker func_basename "$output" 6012*2e9d4914SAndroid Build Coastguard Worker outputname="$func_basename_result" 6013*2e9d4914SAndroid Build Coastguard Worker libobjs_save="$libobjs" 6014*2e9d4914SAndroid Build Coastguard Worker 6015*2e9d4914SAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 6016*2e9d4914SAndroid Build Coastguard Worker # get the directories listed in $shlibpath_var 6017*2e9d4914SAndroid Build Coastguard Worker eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018*2e9d4914SAndroid Build Coastguard Worker else 6019*2e9d4914SAndroid Build Coastguard Worker shlib_search_path= 6020*2e9d4914SAndroid Build Coastguard Worker fi 6021*2e9d4914SAndroid Build Coastguard Worker eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022*2e9d4914SAndroid Build Coastguard Worker eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023*2e9d4914SAndroid Build Coastguard Worker 6024*2e9d4914SAndroid Build Coastguard Worker func_dirname "$output" "/" "" 6025*2e9d4914SAndroid Build Coastguard Worker output_objdir="$func_dirname_result$objdir" 6026*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$output_objdir/" 6027*2e9d4914SAndroid Build Coastguard Worker tool_output_objdir=$func_to_tool_file_result 6028*2e9d4914SAndroid Build Coastguard Worker # Create the object directory. 6029*2e9d4914SAndroid Build Coastguard Worker func_mkdir_p "$output_objdir" 6030*2e9d4914SAndroid Build Coastguard Worker 6031*2e9d4914SAndroid Build Coastguard Worker # Determine the type of output 6032*2e9d4914SAndroid Build Coastguard Worker case $output in 6033*2e9d4914SAndroid Build Coastguard Worker "") 6034*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "you must specify an output file" 6035*2e9d4914SAndroid Build Coastguard Worker ;; 6036*2e9d4914SAndroid Build Coastguard Worker *.$libext) linkmode=oldlib ;; 6037*2e9d4914SAndroid Build Coastguard Worker *.lo | *.$objext) linkmode=obj ;; 6038*2e9d4914SAndroid Build Coastguard Worker *.la) linkmode=lib ;; 6039*2e9d4914SAndroid Build Coastguard Worker *) linkmode=prog ;; # Anything else should be a program. 6040*2e9d4914SAndroid Build Coastguard Worker esac 6041*2e9d4914SAndroid Build Coastguard Worker 6042*2e9d4914SAndroid Build Coastguard Worker specialdeplibs= 6043*2e9d4914SAndroid Build Coastguard Worker 6044*2e9d4914SAndroid Build Coastguard Worker libs= 6045*2e9d4914SAndroid Build Coastguard Worker # Find all interdependent deplibs by searching for libraries 6046*2e9d4914SAndroid Build Coastguard Worker # that are linked more than once (e.g. -la -lb -la) 6047*2e9d4914SAndroid Build Coastguard Worker for deplib in $deplibs; do 6048*2e9d4914SAndroid Build Coastguard Worker if $opt_preserve_dup_deps ; then 6049*2e9d4914SAndroid Build Coastguard Worker case "$libs " in 6050*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051*2e9d4914SAndroid Build Coastguard Worker esac 6052*2e9d4914SAndroid Build Coastguard Worker fi 6053*2e9d4914SAndroid Build Coastguard Worker func_append libs " $deplib" 6054*2e9d4914SAndroid Build Coastguard Worker done 6055*2e9d4914SAndroid Build Coastguard Worker 6056*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = lib; then 6057*2e9d4914SAndroid Build Coastguard Worker libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058*2e9d4914SAndroid Build Coastguard Worker 6059*2e9d4914SAndroid Build Coastguard Worker # Compute libraries that are listed more than once in $predeps 6060*2e9d4914SAndroid Build Coastguard Worker # $postdeps and mark them as special (i.e., whose duplicates are 6061*2e9d4914SAndroid Build Coastguard Worker # not to be eliminated). 6062*2e9d4914SAndroid Build Coastguard Worker pre_post_deps= 6063*2e9d4914SAndroid Build Coastguard Worker if $opt_duplicate_compiler_generated_deps; then 6064*2e9d4914SAndroid Build Coastguard Worker for pre_post_dep in $predeps $postdeps; do 6065*2e9d4914SAndroid Build Coastguard Worker case "$pre_post_deps " in 6066*2e9d4914SAndroid Build Coastguard Worker *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067*2e9d4914SAndroid Build Coastguard Worker esac 6068*2e9d4914SAndroid Build Coastguard Worker func_append pre_post_deps " $pre_post_dep" 6069*2e9d4914SAndroid Build Coastguard Worker done 6070*2e9d4914SAndroid Build Coastguard Worker fi 6071*2e9d4914SAndroid Build Coastguard Worker pre_post_deps= 6072*2e9d4914SAndroid Build Coastguard Worker fi 6073*2e9d4914SAndroid Build Coastguard Worker 6074*2e9d4914SAndroid Build Coastguard Worker deplibs= 6075*2e9d4914SAndroid Build Coastguard Worker newdependency_libs= 6076*2e9d4914SAndroid Build Coastguard Worker newlib_search_path= 6077*2e9d4914SAndroid Build Coastguard Worker need_relink=no # whether we're linking any uninstalled libtool libraries 6078*2e9d4914SAndroid Build Coastguard Worker notinst_deplibs= # not-installed libtool libraries 6079*2e9d4914SAndroid Build Coastguard Worker notinst_path= # paths that contain not-installed libtool libraries 6080*2e9d4914SAndroid Build Coastguard Worker 6081*2e9d4914SAndroid Build Coastguard Worker case $linkmode in 6082*2e9d4914SAndroid Build Coastguard Worker lib) 6083*2e9d4914SAndroid Build Coastguard Worker passes="conv dlpreopen link" 6084*2e9d4914SAndroid Build Coastguard Worker for file in $dlfiles $dlprefiles; do 6085*2e9d4914SAndroid Build Coastguard Worker case $file in 6086*2e9d4914SAndroid Build Coastguard Worker *.la) ;; 6087*2e9d4914SAndroid Build Coastguard Worker *) 6088*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089*2e9d4914SAndroid Build Coastguard Worker ;; 6090*2e9d4914SAndroid Build Coastguard Worker esac 6091*2e9d4914SAndroid Build Coastguard Worker done 6092*2e9d4914SAndroid Build Coastguard Worker ;; 6093*2e9d4914SAndroid Build Coastguard Worker prog) 6094*2e9d4914SAndroid Build Coastguard Worker compile_deplibs= 6095*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs= 6096*2e9d4914SAndroid Build Coastguard Worker alldeplibs=no 6097*2e9d4914SAndroid Build Coastguard Worker newdlfiles= 6098*2e9d4914SAndroid Build Coastguard Worker newdlprefiles= 6099*2e9d4914SAndroid Build Coastguard Worker passes="conv scan dlopen dlpreopen link" 6100*2e9d4914SAndroid Build Coastguard Worker ;; 6101*2e9d4914SAndroid Build Coastguard Worker *) passes="conv" 6102*2e9d4914SAndroid Build Coastguard Worker ;; 6103*2e9d4914SAndroid Build Coastguard Worker esac 6104*2e9d4914SAndroid Build Coastguard Worker 6105*2e9d4914SAndroid Build Coastguard Worker for pass in $passes; do 6106*2e9d4914SAndroid Build Coastguard Worker # The preopen pass in lib mode reverses $deplibs; put it back here 6107*2e9d4914SAndroid Build Coastguard Worker # so that -L comes before libs that need it for instance... 6108*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode,$pass" = "lib,link"; then 6109*2e9d4914SAndroid Build Coastguard Worker ## FIXME: Find the place where the list is rebuilt in the wrong 6110*2e9d4914SAndroid Build Coastguard Worker ## order, and fix it there properly 6111*2e9d4914SAndroid Build Coastguard Worker tmp_deplibs= 6112*2e9d4914SAndroid Build Coastguard Worker for deplib in $deplibs; do 6113*2e9d4914SAndroid Build Coastguard Worker tmp_deplibs="$deplib $tmp_deplibs" 6114*2e9d4914SAndroid Build Coastguard Worker done 6115*2e9d4914SAndroid Build Coastguard Worker deplibs="$tmp_deplibs" 6116*2e9d4914SAndroid Build Coastguard Worker fi 6117*2e9d4914SAndroid Build Coastguard Worker 6118*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode,$pass" = "lib,link" || 6119*2e9d4914SAndroid Build Coastguard Worker test "$linkmode,$pass" = "prog,scan"; then 6120*2e9d4914SAndroid Build Coastguard Worker libs="$deplibs" 6121*2e9d4914SAndroid Build Coastguard Worker deplibs= 6122*2e9d4914SAndroid Build Coastguard Worker fi 6123*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = prog; then 6124*2e9d4914SAndroid Build Coastguard Worker case $pass in 6125*2e9d4914SAndroid Build Coastguard Worker dlopen) libs="$dlfiles" ;; 6126*2e9d4914SAndroid Build Coastguard Worker dlpreopen) libs="$dlprefiles" ;; 6127*2e9d4914SAndroid Build Coastguard Worker link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 6128*2e9d4914SAndroid Build Coastguard Worker esac 6129*2e9d4914SAndroid Build Coastguard Worker fi 6130*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode,$pass" = "lib,dlpreopen"; then 6131*2e9d4914SAndroid Build Coastguard Worker # Collect and forward deplibs of preopened libtool libs 6132*2e9d4914SAndroid Build Coastguard Worker for lib in $dlprefiles; do 6133*2e9d4914SAndroid Build Coastguard Worker # Ignore non-libtool-libs 6134*2e9d4914SAndroid Build Coastguard Worker dependency_libs= 6135*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$lib" 6136*2e9d4914SAndroid Build Coastguard Worker case $lib in 6137*2e9d4914SAndroid Build Coastguard Worker *.la) func_source "$func_resolve_sysroot_result" ;; 6138*2e9d4914SAndroid Build Coastguard Worker esac 6139*2e9d4914SAndroid Build Coastguard Worker 6140*2e9d4914SAndroid Build Coastguard Worker # Collect preopened libtool deplibs, except any this library 6141*2e9d4914SAndroid Build Coastguard Worker # has declared as weak libs 6142*2e9d4914SAndroid Build Coastguard Worker for deplib in $dependency_libs; do 6143*2e9d4914SAndroid Build Coastguard Worker func_basename "$deplib" 6144*2e9d4914SAndroid Build Coastguard Worker deplib_base=$func_basename_result 6145*2e9d4914SAndroid Build Coastguard Worker case " $weak_libs " in 6146*2e9d4914SAndroid Build Coastguard Worker *" $deplib_base "*) ;; 6147*2e9d4914SAndroid Build Coastguard Worker *) func_append deplibs " $deplib" ;; 6148*2e9d4914SAndroid Build Coastguard Worker esac 6149*2e9d4914SAndroid Build Coastguard Worker done 6150*2e9d4914SAndroid Build Coastguard Worker done 6151*2e9d4914SAndroid Build Coastguard Worker libs="$dlprefiles" 6152*2e9d4914SAndroid Build Coastguard Worker fi 6153*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = dlopen; then 6154*2e9d4914SAndroid Build Coastguard Worker # Collect dlpreopened libraries 6155*2e9d4914SAndroid Build Coastguard Worker save_deplibs="$deplibs" 6156*2e9d4914SAndroid Build Coastguard Worker deplibs= 6157*2e9d4914SAndroid Build Coastguard Worker fi 6158*2e9d4914SAndroid Build Coastguard Worker 6159*2e9d4914SAndroid Build Coastguard Worker for deplib in $libs; do 6160*2e9d4914SAndroid Build Coastguard Worker lib= 6161*2e9d4914SAndroid Build Coastguard Worker found=no 6162*2e9d4914SAndroid Build Coastguard Worker case $deplib in 6163*2e9d4914SAndroid Build Coastguard Worker -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 6164*2e9d4914SAndroid Build Coastguard Worker |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 6165*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode,$pass" = "prog,link"; then 6166*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 6167*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 6168*2e9d4914SAndroid Build Coastguard Worker else 6169*2e9d4914SAndroid Build Coastguard Worker func_append compiler_flags " $deplib" 6170*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = lib ; then 6171*2e9d4914SAndroid Build Coastguard Worker case "$new_inherited_linker_flags " in 6172*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) ;; 6173*2e9d4914SAndroid Build Coastguard Worker * ) func_append new_inherited_linker_flags " $deplib" ;; 6174*2e9d4914SAndroid Build Coastguard Worker esac 6175*2e9d4914SAndroid Build Coastguard Worker fi 6176*2e9d4914SAndroid Build Coastguard Worker fi 6177*2e9d4914SAndroid Build Coastguard Worker continue 6178*2e9d4914SAndroid Build Coastguard Worker ;; 6179*2e9d4914SAndroid Build Coastguard Worker -l*) 6180*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" != lib && test "$linkmode" != prog; then 6181*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-l' is ignored for archives/objects" 6182*2e9d4914SAndroid Build Coastguard Worker continue 6183*2e9d4914SAndroid Build Coastguard Worker fi 6184*2e9d4914SAndroid Build Coastguard Worker func_stripname '-l' '' "$deplib" 6185*2e9d4914SAndroid Build Coastguard Worker name=$func_stripname_result 6186*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = lib; then 6187*2e9d4914SAndroid Build Coastguard Worker searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6188*2e9d4914SAndroid Build Coastguard Worker else 6189*2e9d4914SAndroid Build Coastguard Worker searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6190*2e9d4914SAndroid Build Coastguard Worker fi 6191*2e9d4914SAndroid Build Coastguard Worker for searchdir in $searchdirs; do 6192*2e9d4914SAndroid Build Coastguard Worker for search_ext in .la $std_shrext .so .a; do 6193*2e9d4914SAndroid Build Coastguard Worker # Search the libtool library 6194*2e9d4914SAndroid Build Coastguard Worker lib="$searchdir/lib${name}${search_ext}" 6195*2e9d4914SAndroid Build Coastguard Worker if test -f "$lib"; then 6196*2e9d4914SAndroid Build Coastguard Worker if test "$search_ext" = ".la"; then 6197*2e9d4914SAndroid Build Coastguard Worker found=yes 6198*2e9d4914SAndroid Build Coastguard Worker else 6199*2e9d4914SAndroid Build Coastguard Worker found=no 6200*2e9d4914SAndroid Build Coastguard Worker fi 6201*2e9d4914SAndroid Build Coastguard Worker break 2 6202*2e9d4914SAndroid Build Coastguard Worker fi 6203*2e9d4914SAndroid Build Coastguard Worker done 6204*2e9d4914SAndroid Build Coastguard Worker done 6205*2e9d4914SAndroid Build Coastguard Worker if test "$found" != yes; then 6206*2e9d4914SAndroid Build Coastguard Worker # deplib doesn't seem to be a libtool library 6207*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode,$pass" = "prog,link"; then 6208*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 6209*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 6210*2e9d4914SAndroid Build Coastguard Worker else 6211*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6212*2e9d4914SAndroid Build Coastguard Worker test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6213*2e9d4914SAndroid Build Coastguard Worker fi 6214*2e9d4914SAndroid Build Coastguard Worker continue 6215*2e9d4914SAndroid Build Coastguard Worker else # deplib is a libtool library 6216*2e9d4914SAndroid Build Coastguard Worker # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6217*2e9d4914SAndroid Build Coastguard Worker # We need to do some special things here, and not later. 6218*2e9d4914SAndroid Build Coastguard Worker if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6219*2e9d4914SAndroid Build Coastguard Worker case " $predeps $postdeps " in 6220*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) 6221*2e9d4914SAndroid Build Coastguard Worker if func_lalib_p "$lib"; then 6222*2e9d4914SAndroid Build Coastguard Worker library_names= 6223*2e9d4914SAndroid Build Coastguard Worker old_library= 6224*2e9d4914SAndroid Build Coastguard Worker func_source "$lib" 6225*2e9d4914SAndroid Build Coastguard Worker for l in $old_library $library_names; do 6226*2e9d4914SAndroid Build Coastguard Worker ll="$l" 6227*2e9d4914SAndroid Build Coastguard Worker done 6228*2e9d4914SAndroid Build Coastguard Worker if test "X$ll" = "X$old_library" ; then # only static version available 6229*2e9d4914SAndroid Build Coastguard Worker found=no 6230*2e9d4914SAndroid Build Coastguard Worker func_dirname "$lib" "" "." 6231*2e9d4914SAndroid Build Coastguard Worker ladir="$func_dirname_result" 6232*2e9d4914SAndroid Build Coastguard Worker lib=$ladir/$old_library 6233*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode,$pass" = "prog,link"; then 6234*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 6235*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 6236*2e9d4914SAndroid Build Coastguard Worker else 6237*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6238*2e9d4914SAndroid Build Coastguard Worker test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6239*2e9d4914SAndroid Build Coastguard Worker fi 6240*2e9d4914SAndroid Build Coastguard Worker continue 6241*2e9d4914SAndroid Build Coastguard Worker fi 6242*2e9d4914SAndroid Build Coastguard Worker fi 6243*2e9d4914SAndroid Build Coastguard Worker ;; 6244*2e9d4914SAndroid Build Coastguard Worker *) ;; 6245*2e9d4914SAndroid Build Coastguard Worker esac 6246*2e9d4914SAndroid Build Coastguard Worker fi 6247*2e9d4914SAndroid Build Coastguard Worker fi 6248*2e9d4914SAndroid Build Coastguard Worker ;; # -l 6249*2e9d4914SAndroid Build Coastguard Worker *.ltframework) 6250*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode,$pass" = "prog,link"; then 6251*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 6252*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 6253*2e9d4914SAndroid Build Coastguard Worker else 6254*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6255*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = lib ; then 6256*2e9d4914SAndroid Build Coastguard Worker case "$new_inherited_linker_flags " in 6257*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) ;; 6258*2e9d4914SAndroid Build Coastguard Worker * ) func_append new_inherited_linker_flags " $deplib" ;; 6259*2e9d4914SAndroid Build Coastguard Worker esac 6260*2e9d4914SAndroid Build Coastguard Worker fi 6261*2e9d4914SAndroid Build Coastguard Worker fi 6262*2e9d4914SAndroid Build Coastguard Worker continue 6263*2e9d4914SAndroid Build Coastguard Worker ;; 6264*2e9d4914SAndroid Build Coastguard Worker -L*) 6265*2e9d4914SAndroid Build Coastguard Worker case $linkmode in 6266*2e9d4914SAndroid Build Coastguard Worker lib) 6267*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6268*2e9d4914SAndroid Build Coastguard Worker test "$pass" = conv && continue 6269*2e9d4914SAndroid Build Coastguard Worker newdependency_libs="$deplib $newdependency_libs" 6270*2e9d4914SAndroid Build Coastguard Worker func_stripname '-L' '' "$deplib" 6271*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 6272*2e9d4914SAndroid Build Coastguard Worker func_append newlib_search_path " $func_resolve_sysroot_result" 6273*2e9d4914SAndroid Build Coastguard Worker ;; 6274*2e9d4914SAndroid Build Coastguard Worker prog) 6275*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = conv; then 6276*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6277*2e9d4914SAndroid Build Coastguard Worker continue 6278*2e9d4914SAndroid Build Coastguard Worker fi 6279*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = scan; then 6280*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6281*2e9d4914SAndroid Build Coastguard Worker else 6282*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 6283*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 6284*2e9d4914SAndroid Build Coastguard Worker fi 6285*2e9d4914SAndroid Build Coastguard Worker func_stripname '-L' '' "$deplib" 6286*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 6287*2e9d4914SAndroid Build Coastguard Worker func_append newlib_search_path " $func_resolve_sysroot_result" 6288*2e9d4914SAndroid Build Coastguard Worker ;; 6289*2e9d4914SAndroid Build Coastguard Worker *) 6290*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-L' is ignored for archives/objects" 6291*2e9d4914SAndroid Build Coastguard Worker ;; 6292*2e9d4914SAndroid Build Coastguard Worker esac # linkmode 6293*2e9d4914SAndroid Build Coastguard Worker continue 6294*2e9d4914SAndroid Build Coastguard Worker ;; # -L 6295*2e9d4914SAndroid Build Coastguard Worker -R*) 6296*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = link; then 6297*2e9d4914SAndroid Build Coastguard Worker func_stripname '-R' '' "$deplib" 6298*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 6299*2e9d4914SAndroid Build Coastguard Worker dir=$func_resolve_sysroot_result 6300*2e9d4914SAndroid Build Coastguard Worker # Make sure the xrpath contains only unique directories. 6301*2e9d4914SAndroid Build Coastguard Worker case "$xrpath " in 6302*2e9d4914SAndroid Build Coastguard Worker *" $dir "*) ;; 6303*2e9d4914SAndroid Build Coastguard Worker *) func_append xrpath " $dir" ;; 6304*2e9d4914SAndroid Build Coastguard Worker esac 6305*2e9d4914SAndroid Build Coastguard Worker fi 6306*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6307*2e9d4914SAndroid Build Coastguard Worker continue 6308*2e9d4914SAndroid Build Coastguard Worker ;; 6309*2e9d4914SAndroid Build Coastguard Worker *.la) 6310*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$deplib" 6311*2e9d4914SAndroid Build Coastguard Worker lib=$func_resolve_sysroot_result 6312*2e9d4914SAndroid Build Coastguard Worker ;; 6313*2e9d4914SAndroid Build Coastguard Worker *.$libext) 6314*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = conv; then 6315*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6316*2e9d4914SAndroid Build Coastguard Worker continue 6317*2e9d4914SAndroid Build Coastguard Worker fi 6318*2e9d4914SAndroid Build Coastguard Worker case $linkmode in 6319*2e9d4914SAndroid Build Coastguard Worker lib) 6320*2e9d4914SAndroid Build Coastguard Worker # Linking convenience modules into shared libraries is allowed, 6321*2e9d4914SAndroid Build Coastguard Worker # but linking other static libraries is non-portable. 6322*2e9d4914SAndroid Build Coastguard Worker case " $dlpreconveniencelibs " in 6323*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) ;; 6324*2e9d4914SAndroid Build Coastguard Worker *) 6325*2e9d4914SAndroid Build Coastguard Worker valid_a_lib=no 6326*2e9d4914SAndroid Build Coastguard Worker case $deplibs_check_method in 6327*2e9d4914SAndroid Build Coastguard Worker match_pattern*) 6328*2e9d4914SAndroid Build Coastguard Worker set dummy $deplibs_check_method; shift 6329*2e9d4914SAndroid Build Coastguard Worker match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6330*2e9d4914SAndroid Build Coastguard Worker if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6331*2e9d4914SAndroid Build Coastguard Worker | $EGREP "$match_pattern_regex" > /dev/null; then 6332*2e9d4914SAndroid Build Coastguard Worker valid_a_lib=yes 6333*2e9d4914SAndroid Build Coastguard Worker fi 6334*2e9d4914SAndroid Build Coastguard Worker ;; 6335*2e9d4914SAndroid Build Coastguard Worker pass_all) 6336*2e9d4914SAndroid Build Coastguard Worker valid_a_lib=yes 6337*2e9d4914SAndroid Build Coastguard Worker ;; 6338*2e9d4914SAndroid Build Coastguard Worker esac 6339*2e9d4914SAndroid Build Coastguard Worker if test "$valid_a_lib" != yes; then 6340*2e9d4914SAndroid Build Coastguard Worker echo 6341*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: Trying to link with static lib archive $deplib." 6342*2e9d4914SAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 6343*2e9d4914SAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 6344*2e9d4914SAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 6345*2e9d4914SAndroid Build Coastguard Worker echo "*** because the file extensions .$libext of this argument makes me believe" 6346*2e9d4914SAndroid Build Coastguard Worker echo "*** that it is just a static archive that I should not use here." 6347*2e9d4914SAndroid Build Coastguard Worker else 6348*2e9d4914SAndroid Build Coastguard Worker echo 6349*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the shared library $output against the" 6350*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** static library $deplib is not portable!" 6351*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6352*2e9d4914SAndroid Build Coastguard Worker fi 6353*2e9d4914SAndroid Build Coastguard Worker ;; 6354*2e9d4914SAndroid Build Coastguard Worker esac 6355*2e9d4914SAndroid Build Coastguard Worker continue 6356*2e9d4914SAndroid Build Coastguard Worker ;; 6357*2e9d4914SAndroid Build Coastguard Worker prog) 6358*2e9d4914SAndroid Build Coastguard Worker if test "$pass" != link; then 6359*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6360*2e9d4914SAndroid Build Coastguard Worker else 6361*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 6362*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 6363*2e9d4914SAndroid Build Coastguard Worker fi 6364*2e9d4914SAndroid Build Coastguard Worker continue 6365*2e9d4914SAndroid Build Coastguard Worker ;; 6366*2e9d4914SAndroid Build Coastguard Worker esac # linkmode 6367*2e9d4914SAndroid Build Coastguard Worker ;; # *.$libext 6368*2e9d4914SAndroid Build Coastguard Worker *.lo | *.$objext) 6369*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = conv; then 6370*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6371*2e9d4914SAndroid Build Coastguard Worker elif test "$linkmode" = prog; then 6372*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6373*2e9d4914SAndroid Build Coastguard Worker # If there is no dlopen support or we're linking statically, 6374*2e9d4914SAndroid Build Coastguard Worker # we need to preload. 6375*2e9d4914SAndroid Build Coastguard Worker func_append newdlprefiles " $deplib" 6376*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 6377*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 6378*2e9d4914SAndroid Build Coastguard Worker else 6379*2e9d4914SAndroid Build Coastguard Worker func_append newdlfiles " $deplib" 6380*2e9d4914SAndroid Build Coastguard Worker fi 6381*2e9d4914SAndroid Build Coastguard Worker fi 6382*2e9d4914SAndroid Build Coastguard Worker continue 6383*2e9d4914SAndroid Build Coastguard Worker ;; 6384*2e9d4914SAndroid Build Coastguard Worker %DEPLIBS%) 6385*2e9d4914SAndroid Build Coastguard Worker alldeplibs=yes 6386*2e9d4914SAndroid Build Coastguard Worker continue 6387*2e9d4914SAndroid Build Coastguard Worker ;; 6388*2e9d4914SAndroid Build Coastguard Worker esac # case $deplib 6389*2e9d4914SAndroid Build Coastguard Worker 6390*2e9d4914SAndroid Build Coastguard Worker if test "$found" = yes || test -f "$lib"; then : 6391*2e9d4914SAndroid Build Coastguard Worker else 6392*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6393*2e9d4914SAndroid Build Coastguard Worker fi 6394*2e9d4914SAndroid Build Coastguard Worker 6395*2e9d4914SAndroid Build Coastguard Worker # Check to see that this really is a libtool archive. 6396*2e9d4914SAndroid Build Coastguard Worker func_lalib_unsafe_p "$lib" \ 6397*2e9d4914SAndroid Build Coastguard Worker || func_fatal_error "\`$lib' is not a valid libtool archive" 6398*2e9d4914SAndroid Build Coastguard Worker 6399*2e9d4914SAndroid Build Coastguard Worker func_dirname "$lib" "" "." 6400*2e9d4914SAndroid Build Coastguard Worker ladir="$func_dirname_result" 6401*2e9d4914SAndroid Build Coastguard Worker 6402*2e9d4914SAndroid Build Coastguard Worker dlname= 6403*2e9d4914SAndroid Build Coastguard Worker dlopen= 6404*2e9d4914SAndroid Build Coastguard Worker dlpreopen= 6405*2e9d4914SAndroid Build Coastguard Worker libdir= 6406*2e9d4914SAndroid Build Coastguard Worker library_names= 6407*2e9d4914SAndroid Build Coastguard Worker old_library= 6408*2e9d4914SAndroid Build Coastguard Worker inherited_linker_flags= 6409*2e9d4914SAndroid Build Coastguard Worker # If the library was installed with an old release of libtool, 6410*2e9d4914SAndroid Build Coastguard Worker # it will not redefine variables installed, or shouldnotlink 6411*2e9d4914SAndroid Build Coastguard Worker installed=yes 6412*2e9d4914SAndroid Build Coastguard Worker shouldnotlink=no 6413*2e9d4914SAndroid Build Coastguard Worker avoidtemprpath= 6414*2e9d4914SAndroid Build Coastguard Worker 6415*2e9d4914SAndroid Build Coastguard Worker 6416*2e9d4914SAndroid Build Coastguard Worker # Read the .la file 6417*2e9d4914SAndroid Build Coastguard Worker func_source "$lib" 6418*2e9d4914SAndroid Build Coastguard Worker 6419*2e9d4914SAndroid Build Coastguard Worker # Convert "-framework foo" to "foo.ltframework" 6420*2e9d4914SAndroid Build Coastguard Worker if test -n "$inherited_linker_flags"; then 6421*2e9d4914SAndroid Build Coastguard Worker tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6422*2e9d4914SAndroid Build Coastguard Worker for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6423*2e9d4914SAndroid Build Coastguard Worker case " $new_inherited_linker_flags " in 6424*2e9d4914SAndroid Build Coastguard Worker *" $tmp_inherited_linker_flag "*) ;; 6425*2e9d4914SAndroid Build Coastguard Worker *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6426*2e9d4914SAndroid Build Coastguard Worker esac 6427*2e9d4914SAndroid Build Coastguard Worker done 6428*2e9d4914SAndroid Build Coastguard Worker fi 6429*2e9d4914SAndroid Build Coastguard Worker dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6430*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode,$pass" = "lib,link" || 6431*2e9d4914SAndroid Build Coastguard Worker test "$linkmode,$pass" = "prog,scan" || 6432*2e9d4914SAndroid Build Coastguard Worker { test "$linkmode" != prog && test "$linkmode" != lib; }; then 6433*2e9d4914SAndroid Build Coastguard Worker test -n "$dlopen" && func_append dlfiles " $dlopen" 6434*2e9d4914SAndroid Build Coastguard Worker test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6435*2e9d4914SAndroid Build Coastguard Worker fi 6436*2e9d4914SAndroid Build Coastguard Worker 6437*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = conv; then 6438*2e9d4914SAndroid Build Coastguard Worker # Only check for convenience libraries 6439*2e9d4914SAndroid Build Coastguard Worker deplibs="$lib $deplibs" 6440*2e9d4914SAndroid Build Coastguard Worker if test -z "$libdir"; then 6441*2e9d4914SAndroid Build Coastguard Worker if test -z "$old_library"; then 6442*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot find name of link library for \`$lib'" 6443*2e9d4914SAndroid Build Coastguard Worker fi 6444*2e9d4914SAndroid Build Coastguard Worker # It is a libtool convenience library, so add in its objects. 6445*2e9d4914SAndroid Build Coastguard Worker func_append convenience " $ladir/$objdir/$old_library" 6446*2e9d4914SAndroid Build Coastguard Worker func_append old_convenience " $ladir/$objdir/$old_library" 6447*2e9d4914SAndroid Build Coastguard Worker elif test "$linkmode" != prog && test "$linkmode" != lib; then 6448*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$lib' is not a convenience library" 6449*2e9d4914SAndroid Build Coastguard Worker fi 6450*2e9d4914SAndroid Build Coastguard Worker tmp_libs= 6451*2e9d4914SAndroid Build Coastguard Worker for deplib in $dependency_libs; do 6452*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6453*2e9d4914SAndroid Build Coastguard Worker if $opt_preserve_dup_deps ; then 6454*2e9d4914SAndroid Build Coastguard Worker case "$tmp_libs " in 6455*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6456*2e9d4914SAndroid Build Coastguard Worker esac 6457*2e9d4914SAndroid Build Coastguard Worker fi 6458*2e9d4914SAndroid Build Coastguard Worker func_append tmp_libs " $deplib" 6459*2e9d4914SAndroid Build Coastguard Worker done 6460*2e9d4914SAndroid Build Coastguard Worker continue 6461*2e9d4914SAndroid Build Coastguard Worker fi # $pass = conv 6462*2e9d4914SAndroid Build Coastguard Worker 6463*2e9d4914SAndroid Build Coastguard Worker 6464*2e9d4914SAndroid Build Coastguard Worker # Get the name of the library we link against. 6465*2e9d4914SAndroid Build Coastguard Worker linklib= 6466*2e9d4914SAndroid Build Coastguard Worker if test -n "$old_library" && 6467*2e9d4914SAndroid Build Coastguard Worker { test "$prefer_static_libs" = yes || 6468*2e9d4914SAndroid Build Coastguard Worker test "$prefer_static_libs,$installed" = "built,no"; }; then 6469*2e9d4914SAndroid Build Coastguard Worker linklib=$old_library 6470*2e9d4914SAndroid Build Coastguard Worker else 6471*2e9d4914SAndroid Build Coastguard Worker for l in $old_library $library_names; do 6472*2e9d4914SAndroid Build Coastguard Worker linklib="$l" 6473*2e9d4914SAndroid Build Coastguard Worker done 6474*2e9d4914SAndroid Build Coastguard Worker fi 6475*2e9d4914SAndroid Build Coastguard Worker if test -z "$linklib"; then 6476*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot find name of link library for \`$lib'" 6477*2e9d4914SAndroid Build Coastguard Worker fi 6478*2e9d4914SAndroid Build Coastguard Worker 6479*2e9d4914SAndroid Build Coastguard Worker # This library was specified with -dlopen. 6480*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = dlopen; then 6481*2e9d4914SAndroid Build Coastguard Worker if test -z "$libdir"; then 6482*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6483*2e9d4914SAndroid Build Coastguard Worker fi 6484*2e9d4914SAndroid Build Coastguard Worker if test -z "$dlname" || 6485*2e9d4914SAndroid Build Coastguard Worker test "$dlopen_support" != yes || 6486*2e9d4914SAndroid Build Coastguard Worker test "$build_libtool_libs" = no; then 6487*2e9d4914SAndroid Build Coastguard Worker # If there is no dlname, no dlopen support or we're linking 6488*2e9d4914SAndroid Build Coastguard Worker # statically, we need to preload. We also need to preload any 6489*2e9d4914SAndroid Build Coastguard Worker # dependent libraries so libltdl's deplib preloader doesn't 6490*2e9d4914SAndroid Build Coastguard Worker # bomb out in the load deplibs phase. 6491*2e9d4914SAndroid Build Coastguard Worker func_append dlprefiles " $lib $dependency_libs" 6492*2e9d4914SAndroid Build Coastguard Worker else 6493*2e9d4914SAndroid Build Coastguard Worker func_append newdlfiles " $lib" 6494*2e9d4914SAndroid Build Coastguard Worker fi 6495*2e9d4914SAndroid Build Coastguard Worker continue 6496*2e9d4914SAndroid Build Coastguard Worker fi # $pass = dlopen 6497*2e9d4914SAndroid Build Coastguard Worker 6498*2e9d4914SAndroid Build Coastguard Worker # We need an absolute path. 6499*2e9d4914SAndroid Build Coastguard Worker case $ladir in 6500*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6501*2e9d4914SAndroid Build Coastguard Worker *) 6502*2e9d4914SAndroid Build Coastguard Worker abs_ladir=`cd "$ladir" && pwd` 6503*2e9d4914SAndroid Build Coastguard Worker if test -z "$abs_ladir"; then 6504*2e9d4914SAndroid Build Coastguard Worker func_warning "cannot determine absolute directory name of \`$ladir'" 6505*2e9d4914SAndroid Build Coastguard Worker func_warning "passing it literally to the linker, although it might fail" 6506*2e9d4914SAndroid Build Coastguard Worker abs_ladir="$ladir" 6507*2e9d4914SAndroid Build Coastguard Worker fi 6508*2e9d4914SAndroid Build Coastguard Worker ;; 6509*2e9d4914SAndroid Build Coastguard Worker esac 6510*2e9d4914SAndroid Build Coastguard Worker func_basename "$lib" 6511*2e9d4914SAndroid Build Coastguard Worker laname="$func_basename_result" 6512*2e9d4914SAndroid Build Coastguard Worker 6513*2e9d4914SAndroid Build Coastguard Worker # Find the relevant object directory and library name. 6514*2e9d4914SAndroid Build Coastguard Worker if test "X$installed" = Xyes; then 6515*2e9d4914SAndroid Build Coastguard Worker if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6516*2e9d4914SAndroid Build Coastguard Worker func_warning "library \`$lib' was moved." 6517*2e9d4914SAndroid Build Coastguard Worker dir="$ladir" 6518*2e9d4914SAndroid Build Coastguard Worker absdir="$abs_ladir" 6519*2e9d4914SAndroid Build Coastguard Worker libdir="$abs_ladir" 6520*2e9d4914SAndroid Build Coastguard Worker else 6521*2e9d4914SAndroid Build Coastguard Worker dir="$lt_sysroot$libdir" 6522*2e9d4914SAndroid Build Coastguard Worker absdir="$lt_sysroot$libdir" 6523*2e9d4914SAndroid Build Coastguard Worker fi 6524*2e9d4914SAndroid Build Coastguard Worker test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6525*2e9d4914SAndroid Build Coastguard Worker else 6526*2e9d4914SAndroid Build Coastguard Worker if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6527*2e9d4914SAndroid Build Coastguard Worker dir="$ladir" 6528*2e9d4914SAndroid Build Coastguard Worker absdir="$abs_ladir" 6529*2e9d4914SAndroid Build Coastguard Worker # Remove this search path later 6530*2e9d4914SAndroid Build Coastguard Worker func_append notinst_path " $abs_ladir" 6531*2e9d4914SAndroid Build Coastguard Worker else 6532*2e9d4914SAndroid Build Coastguard Worker dir="$ladir/$objdir" 6533*2e9d4914SAndroid Build Coastguard Worker absdir="$abs_ladir/$objdir" 6534*2e9d4914SAndroid Build Coastguard Worker # Remove this search path later 6535*2e9d4914SAndroid Build Coastguard Worker func_append notinst_path " $abs_ladir" 6536*2e9d4914SAndroid Build Coastguard Worker fi 6537*2e9d4914SAndroid Build Coastguard Worker fi # $installed = yes 6538*2e9d4914SAndroid Build Coastguard Worker func_stripname 'lib' '.la' "$laname" 6539*2e9d4914SAndroid Build Coastguard Worker name=$func_stripname_result 6540*2e9d4914SAndroid Build Coastguard Worker 6541*2e9d4914SAndroid Build Coastguard Worker # This library was specified with -dlpreopen. 6542*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = dlpreopen; then 6543*2e9d4914SAndroid Build Coastguard Worker if test -z "$libdir" && test "$linkmode" = prog; then 6544*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6545*2e9d4914SAndroid Build Coastguard Worker fi 6546*2e9d4914SAndroid Build Coastguard Worker case "$host" in 6547*2e9d4914SAndroid Build Coastguard Worker # special handling for platforms with PE-DLLs. 6548*2e9d4914SAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 6549*2e9d4914SAndroid Build Coastguard Worker # Linker will automatically link against shared library if both 6550*2e9d4914SAndroid Build Coastguard Worker # static and shared are present. Therefore, ensure we extract 6551*2e9d4914SAndroid Build Coastguard Worker # symbols from the import library if a shared library is present 6552*2e9d4914SAndroid Build Coastguard Worker # (otherwise, the dlopen module name will be incorrect). We do 6553*2e9d4914SAndroid Build Coastguard Worker # this by putting the import library name into $newdlprefiles. 6554*2e9d4914SAndroid Build Coastguard Worker # We recover the dlopen module name by 'saving' the la file 6555*2e9d4914SAndroid Build Coastguard Worker # name in a special purpose variable, and (later) extracting the 6556*2e9d4914SAndroid Build Coastguard Worker # dlname from the la file. 6557*2e9d4914SAndroid Build Coastguard Worker if test -n "$dlname"; then 6558*2e9d4914SAndroid Build Coastguard Worker func_tr_sh "$dir/$linklib" 6559*2e9d4914SAndroid Build Coastguard Worker eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 6560*2e9d4914SAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$linklib" 6561*2e9d4914SAndroid Build Coastguard Worker else 6562*2e9d4914SAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$old_library" 6563*2e9d4914SAndroid Build Coastguard Worker # Keep a list of preopened convenience libraries to check 6564*2e9d4914SAndroid Build Coastguard Worker # that they are being used correctly in the link pass. 6565*2e9d4914SAndroid Build Coastguard Worker test -z "$libdir" && \ 6566*2e9d4914SAndroid Build Coastguard Worker func_append dlpreconveniencelibs " $dir/$old_library" 6567*2e9d4914SAndroid Build Coastguard Worker fi 6568*2e9d4914SAndroid Build Coastguard Worker ;; 6569*2e9d4914SAndroid Build Coastguard Worker * ) 6570*2e9d4914SAndroid Build Coastguard Worker # Prefer using a static library (so that no silly _DYNAMIC symbols 6571*2e9d4914SAndroid Build Coastguard Worker # are required to link). 6572*2e9d4914SAndroid Build Coastguard Worker if test -n "$old_library"; then 6573*2e9d4914SAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$old_library" 6574*2e9d4914SAndroid Build Coastguard Worker # Keep a list of preopened convenience libraries to check 6575*2e9d4914SAndroid Build Coastguard Worker # that they are being used correctly in the link pass. 6576*2e9d4914SAndroid Build Coastguard Worker test -z "$libdir" && \ 6577*2e9d4914SAndroid Build Coastguard Worker func_append dlpreconveniencelibs " $dir/$old_library" 6578*2e9d4914SAndroid Build Coastguard Worker # Otherwise, use the dlname, so that lt_dlopen finds it. 6579*2e9d4914SAndroid Build Coastguard Worker elif test -n "$dlname"; then 6580*2e9d4914SAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$dlname" 6581*2e9d4914SAndroid Build Coastguard Worker else 6582*2e9d4914SAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$linklib" 6583*2e9d4914SAndroid Build Coastguard Worker fi 6584*2e9d4914SAndroid Build Coastguard Worker ;; 6585*2e9d4914SAndroid Build Coastguard Worker esac 6586*2e9d4914SAndroid Build Coastguard Worker fi # $pass = dlpreopen 6587*2e9d4914SAndroid Build Coastguard Worker 6588*2e9d4914SAndroid Build Coastguard Worker if test -z "$libdir"; then 6589*2e9d4914SAndroid Build Coastguard Worker # Link the convenience library 6590*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = lib; then 6591*2e9d4914SAndroid Build Coastguard Worker deplibs="$dir/$old_library $deplibs" 6592*2e9d4914SAndroid Build Coastguard Worker elif test "$linkmode,$pass" = "prog,link"; then 6593*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$dir/$old_library $compile_deplibs" 6594*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="$dir/$old_library $finalize_deplibs" 6595*2e9d4914SAndroid Build Coastguard Worker else 6596*2e9d4914SAndroid Build Coastguard Worker deplibs="$lib $deplibs" # used for prog,scan pass 6597*2e9d4914SAndroid Build Coastguard Worker fi 6598*2e9d4914SAndroid Build Coastguard Worker continue 6599*2e9d4914SAndroid Build Coastguard Worker fi 6600*2e9d4914SAndroid Build Coastguard Worker 6601*2e9d4914SAndroid Build Coastguard Worker 6602*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = prog && test "$pass" != link; then 6603*2e9d4914SAndroid Build Coastguard Worker func_append newlib_search_path " $ladir" 6604*2e9d4914SAndroid Build Coastguard Worker deplibs="$lib $deplibs" 6605*2e9d4914SAndroid Build Coastguard Worker 6606*2e9d4914SAndroid Build Coastguard Worker linkalldeplibs=no 6607*2e9d4914SAndroid Build Coastguard Worker if test "$link_all_deplibs" != no || test -z "$library_names" || 6608*2e9d4914SAndroid Build Coastguard Worker test "$build_libtool_libs" = no; then 6609*2e9d4914SAndroid Build Coastguard Worker linkalldeplibs=yes 6610*2e9d4914SAndroid Build Coastguard Worker fi 6611*2e9d4914SAndroid Build Coastguard Worker 6612*2e9d4914SAndroid Build Coastguard Worker tmp_libs= 6613*2e9d4914SAndroid Build Coastguard Worker for deplib in $dependency_libs; do 6614*2e9d4914SAndroid Build Coastguard Worker case $deplib in 6615*2e9d4914SAndroid Build Coastguard Worker -L*) func_stripname '-L' '' "$deplib" 6616*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 6617*2e9d4914SAndroid Build Coastguard Worker func_append newlib_search_path " $func_resolve_sysroot_result" 6618*2e9d4914SAndroid Build Coastguard Worker ;; 6619*2e9d4914SAndroid Build Coastguard Worker esac 6620*2e9d4914SAndroid Build Coastguard Worker # Need to link against all dependency_libs? 6621*2e9d4914SAndroid Build Coastguard Worker if test "$linkalldeplibs" = yes; then 6622*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 6623*2e9d4914SAndroid Build Coastguard Worker else 6624*2e9d4914SAndroid Build Coastguard Worker # Need to hardcode shared library paths 6625*2e9d4914SAndroid Build Coastguard Worker # or/and link against static libraries 6626*2e9d4914SAndroid Build Coastguard Worker newdependency_libs="$deplib $newdependency_libs" 6627*2e9d4914SAndroid Build Coastguard Worker fi 6628*2e9d4914SAndroid Build Coastguard Worker if $opt_preserve_dup_deps ; then 6629*2e9d4914SAndroid Build Coastguard Worker case "$tmp_libs " in 6630*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6631*2e9d4914SAndroid Build Coastguard Worker esac 6632*2e9d4914SAndroid Build Coastguard Worker fi 6633*2e9d4914SAndroid Build Coastguard Worker func_append tmp_libs " $deplib" 6634*2e9d4914SAndroid Build Coastguard Worker done # for deplib 6635*2e9d4914SAndroid Build Coastguard Worker continue 6636*2e9d4914SAndroid Build Coastguard Worker fi # $linkmode = prog... 6637*2e9d4914SAndroid Build Coastguard Worker 6638*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode,$pass" = "prog,link"; then 6639*2e9d4914SAndroid Build Coastguard Worker if test -n "$library_names" && 6640*2e9d4914SAndroid Build Coastguard Worker { { test "$prefer_static_libs" = no || 6641*2e9d4914SAndroid Build Coastguard Worker test "$prefer_static_libs,$installed" = "built,yes"; } || 6642*2e9d4914SAndroid Build Coastguard Worker test -z "$old_library"; }; then 6643*2e9d4914SAndroid Build Coastguard Worker # We need to hardcode the library path 6644*2e9d4914SAndroid Build Coastguard Worker if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6645*2e9d4914SAndroid Build Coastguard Worker # Make sure the rpath contains only unique directories. 6646*2e9d4914SAndroid Build Coastguard Worker case "$temp_rpath:" in 6647*2e9d4914SAndroid Build Coastguard Worker *"$absdir:"*) ;; 6648*2e9d4914SAndroid Build Coastguard Worker *) func_append temp_rpath "$absdir:" ;; 6649*2e9d4914SAndroid Build Coastguard Worker esac 6650*2e9d4914SAndroid Build Coastguard Worker fi 6651*2e9d4914SAndroid Build Coastguard Worker 6652*2e9d4914SAndroid Build Coastguard Worker # Hardcode the library path. 6653*2e9d4914SAndroid Build Coastguard Worker # Skip directories that are in the system default run-time 6654*2e9d4914SAndroid Build Coastguard Worker # search path. 6655*2e9d4914SAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 6656*2e9d4914SAndroid Build Coastguard Worker *" $absdir "*) ;; 6657*2e9d4914SAndroid Build Coastguard Worker *) 6658*2e9d4914SAndroid Build Coastguard Worker case "$compile_rpath " in 6659*2e9d4914SAndroid Build Coastguard Worker *" $absdir "*) ;; 6660*2e9d4914SAndroid Build Coastguard Worker *) func_append compile_rpath " $absdir" ;; 6661*2e9d4914SAndroid Build Coastguard Worker esac 6662*2e9d4914SAndroid Build Coastguard Worker ;; 6663*2e9d4914SAndroid Build Coastguard Worker esac 6664*2e9d4914SAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 6665*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 6666*2e9d4914SAndroid Build Coastguard Worker *) 6667*2e9d4914SAndroid Build Coastguard Worker case "$finalize_rpath " in 6668*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 6669*2e9d4914SAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 6670*2e9d4914SAndroid Build Coastguard Worker esac 6671*2e9d4914SAndroid Build Coastguard Worker ;; 6672*2e9d4914SAndroid Build Coastguard Worker esac 6673*2e9d4914SAndroid Build Coastguard Worker fi # $linkmode,$pass = prog,link... 6674*2e9d4914SAndroid Build Coastguard Worker 6675*2e9d4914SAndroid Build Coastguard Worker if test "$alldeplibs" = yes && 6676*2e9d4914SAndroid Build Coastguard Worker { test "$deplibs_check_method" = pass_all || 6677*2e9d4914SAndroid Build Coastguard Worker { test "$build_libtool_libs" = yes && 6678*2e9d4914SAndroid Build Coastguard Worker test -n "$library_names"; }; }; then 6679*2e9d4914SAndroid Build Coastguard Worker # We only need to search for static libraries 6680*2e9d4914SAndroid Build Coastguard Worker continue 6681*2e9d4914SAndroid Build Coastguard Worker fi 6682*2e9d4914SAndroid Build Coastguard Worker fi 6683*2e9d4914SAndroid Build Coastguard Worker 6684*2e9d4914SAndroid Build Coastguard Worker link_static=no # Whether the deplib will be linked statically 6685*2e9d4914SAndroid Build Coastguard Worker use_static_libs=$prefer_static_libs 6686*2e9d4914SAndroid Build Coastguard Worker if test "$use_static_libs" = built && test "$installed" = yes; then 6687*2e9d4914SAndroid Build Coastguard Worker use_static_libs=no 6688*2e9d4914SAndroid Build Coastguard Worker fi 6689*2e9d4914SAndroid Build Coastguard Worker if test -n "$library_names" && 6690*2e9d4914SAndroid Build Coastguard Worker { test "$use_static_libs" = no || test -z "$old_library"; }; then 6691*2e9d4914SAndroid Build Coastguard Worker case $host in 6692*2e9d4914SAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc*) 6693*2e9d4914SAndroid Build Coastguard Worker # No point in relinking DLLs because paths are not encoded 6694*2e9d4914SAndroid Build Coastguard Worker func_append notinst_deplibs " $lib" 6695*2e9d4914SAndroid Build Coastguard Worker need_relink=no 6696*2e9d4914SAndroid Build Coastguard Worker ;; 6697*2e9d4914SAndroid Build Coastguard Worker *) 6698*2e9d4914SAndroid Build Coastguard Worker if test "$installed" = no; then 6699*2e9d4914SAndroid Build Coastguard Worker func_append notinst_deplibs " $lib" 6700*2e9d4914SAndroid Build Coastguard Worker need_relink=yes 6701*2e9d4914SAndroid Build Coastguard Worker fi 6702*2e9d4914SAndroid Build Coastguard Worker ;; 6703*2e9d4914SAndroid Build Coastguard Worker esac 6704*2e9d4914SAndroid Build Coastguard Worker # This is a shared library 6705*2e9d4914SAndroid Build Coastguard Worker 6706*2e9d4914SAndroid Build Coastguard Worker # Warn about portability, can't link against -module's on some 6707*2e9d4914SAndroid Build Coastguard Worker # systems (darwin). Don't bleat about dlopened modules though! 6708*2e9d4914SAndroid Build Coastguard Worker dlopenmodule="" 6709*2e9d4914SAndroid Build Coastguard Worker for dlpremoduletest in $dlprefiles; do 6710*2e9d4914SAndroid Build Coastguard Worker if test "X$dlpremoduletest" = "X$lib"; then 6711*2e9d4914SAndroid Build Coastguard Worker dlopenmodule="$dlpremoduletest" 6712*2e9d4914SAndroid Build Coastguard Worker break 6713*2e9d4914SAndroid Build Coastguard Worker fi 6714*2e9d4914SAndroid Build Coastguard Worker done 6715*2e9d4914SAndroid Build Coastguard Worker if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 6716*2e9d4914SAndroid Build Coastguard Worker echo 6717*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = prog; then 6718*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the executable $output against the loadable module" 6719*2e9d4914SAndroid Build Coastguard Worker else 6720*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6721*2e9d4914SAndroid Build Coastguard Worker fi 6722*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** $linklib is not portable!" 6723*2e9d4914SAndroid Build Coastguard Worker fi 6724*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = lib && 6725*2e9d4914SAndroid Build Coastguard Worker test "$hardcode_into_libs" = yes; then 6726*2e9d4914SAndroid Build Coastguard Worker # Hardcode the library path. 6727*2e9d4914SAndroid Build Coastguard Worker # Skip directories that are in the system default run-time 6728*2e9d4914SAndroid Build Coastguard Worker # search path. 6729*2e9d4914SAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 6730*2e9d4914SAndroid Build Coastguard Worker *" $absdir "*) ;; 6731*2e9d4914SAndroid Build Coastguard Worker *) 6732*2e9d4914SAndroid Build Coastguard Worker case "$compile_rpath " in 6733*2e9d4914SAndroid Build Coastguard Worker *" $absdir "*) ;; 6734*2e9d4914SAndroid Build Coastguard Worker *) func_append compile_rpath " $absdir" ;; 6735*2e9d4914SAndroid Build Coastguard Worker esac 6736*2e9d4914SAndroid Build Coastguard Worker ;; 6737*2e9d4914SAndroid Build Coastguard Worker esac 6738*2e9d4914SAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 6739*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 6740*2e9d4914SAndroid Build Coastguard Worker *) 6741*2e9d4914SAndroid Build Coastguard Worker case "$finalize_rpath " in 6742*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 6743*2e9d4914SAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 6744*2e9d4914SAndroid Build Coastguard Worker esac 6745*2e9d4914SAndroid Build Coastguard Worker ;; 6746*2e9d4914SAndroid Build Coastguard Worker esac 6747*2e9d4914SAndroid Build Coastguard Worker fi 6748*2e9d4914SAndroid Build Coastguard Worker 6749*2e9d4914SAndroid Build Coastguard Worker if test -n "$old_archive_from_expsyms_cmds"; then 6750*2e9d4914SAndroid Build Coastguard Worker # figure out the soname 6751*2e9d4914SAndroid Build Coastguard Worker set dummy $library_names 6752*2e9d4914SAndroid Build Coastguard Worker shift 6753*2e9d4914SAndroid Build Coastguard Worker realname="$1" 6754*2e9d4914SAndroid Build Coastguard Worker shift 6755*2e9d4914SAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 6756*2e9d4914SAndroid Build Coastguard Worker # use dlname if we got it. it's perfectly good, no? 6757*2e9d4914SAndroid Build Coastguard Worker if test -n "$dlname"; then 6758*2e9d4914SAndroid Build Coastguard Worker soname="$dlname" 6759*2e9d4914SAndroid Build Coastguard Worker elif test -n "$soname_spec"; then 6760*2e9d4914SAndroid Build Coastguard Worker # bleh windows 6761*2e9d4914SAndroid Build Coastguard Worker case $host in 6762*2e9d4914SAndroid Build Coastguard Worker *cygwin* | mingw* | *cegcc*) 6763*2e9d4914SAndroid Build Coastguard Worker func_arith $current - $age 6764*2e9d4914SAndroid Build Coastguard Worker major=$func_arith_result 6765*2e9d4914SAndroid Build Coastguard Worker versuffix="-$major" 6766*2e9d4914SAndroid Build Coastguard Worker ;; 6767*2e9d4914SAndroid Build Coastguard Worker esac 6768*2e9d4914SAndroid Build Coastguard Worker eval soname=\"$soname_spec\" 6769*2e9d4914SAndroid Build Coastguard Worker else 6770*2e9d4914SAndroid Build Coastguard Worker soname="$realname" 6771*2e9d4914SAndroid Build Coastguard Worker fi 6772*2e9d4914SAndroid Build Coastguard Worker 6773*2e9d4914SAndroid Build Coastguard Worker # Make a new name for the extract_expsyms_cmds to use 6774*2e9d4914SAndroid Build Coastguard Worker soroot="$soname" 6775*2e9d4914SAndroid Build Coastguard Worker func_basename "$soroot" 6776*2e9d4914SAndroid Build Coastguard Worker soname="$func_basename_result" 6777*2e9d4914SAndroid Build Coastguard Worker func_stripname 'lib' '.dll' "$soname" 6778*2e9d4914SAndroid Build Coastguard Worker newlib=libimp-$func_stripname_result.a 6779*2e9d4914SAndroid Build Coastguard Worker 6780*2e9d4914SAndroid Build Coastguard Worker # If the library has no export list, then create one now 6781*2e9d4914SAndroid Build Coastguard Worker if test -f "$output_objdir/$soname-def"; then : 6782*2e9d4914SAndroid Build Coastguard Worker else 6783*2e9d4914SAndroid Build Coastguard Worker func_verbose "extracting exported symbol list from \`$soname'" 6784*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6785*2e9d4914SAndroid Build Coastguard Worker fi 6786*2e9d4914SAndroid Build Coastguard Worker 6787*2e9d4914SAndroid Build Coastguard Worker # Create $newlib 6788*2e9d4914SAndroid Build Coastguard Worker if test -f "$output_objdir/$newlib"; then :; else 6789*2e9d4914SAndroid Build Coastguard Worker func_verbose "generating import library for \`$soname'" 6790*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6791*2e9d4914SAndroid Build Coastguard Worker fi 6792*2e9d4914SAndroid Build Coastguard Worker # make sure the library variables are pointing to the new library 6793*2e9d4914SAndroid Build Coastguard Worker dir=$output_objdir 6794*2e9d4914SAndroid Build Coastguard Worker linklib=$newlib 6795*2e9d4914SAndroid Build Coastguard Worker fi # test -n "$old_archive_from_expsyms_cmds" 6796*2e9d4914SAndroid Build Coastguard Worker 6797*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = prog || test "$opt_mode" != relink; then 6798*2e9d4914SAndroid Build Coastguard Worker add_shlibpath= 6799*2e9d4914SAndroid Build Coastguard Worker add_dir= 6800*2e9d4914SAndroid Build Coastguard Worker add= 6801*2e9d4914SAndroid Build Coastguard Worker lib_linked=yes 6802*2e9d4914SAndroid Build Coastguard Worker case $hardcode_action in 6803*2e9d4914SAndroid Build Coastguard Worker immediate | unsupported) 6804*2e9d4914SAndroid Build Coastguard Worker if test "$hardcode_direct" = no; then 6805*2e9d4914SAndroid Build Coastguard Worker add="$dir/$linklib" 6806*2e9d4914SAndroid Build Coastguard Worker case $host in 6807*2e9d4914SAndroid Build Coastguard Worker *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6808*2e9d4914SAndroid Build Coastguard Worker *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6809*2e9d4914SAndroid Build Coastguard Worker *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6810*2e9d4914SAndroid Build Coastguard Worker *-*-unixware7*) add_dir="-L$dir" ;; 6811*2e9d4914SAndroid Build Coastguard Worker *-*-darwin* ) 6812*2e9d4914SAndroid Build Coastguard Worker # if the lib is a (non-dlopened) module then we can not 6813*2e9d4914SAndroid Build Coastguard Worker # link against it, someone is ignoring the earlier warnings 6814*2e9d4914SAndroid Build Coastguard Worker if /usr/bin/file -L $add 2> /dev/null | 6815*2e9d4914SAndroid Build Coastguard Worker $GREP ": [^:]* bundle" >/dev/null ; then 6816*2e9d4914SAndroid Build Coastguard Worker if test "X$dlopenmodule" != "X$lib"; then 6817*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6818*2e9d4914SAndroid Build Coastguard Worker if test -z "$old_library" ; then 6819*2e9d4914SAndroid Build Coastguard Worker echo 6820*2e9d4914SAndroid Build Coastguard Worker echo "*** And there doesn't seem to be a static archive available" 6821*2e9d4914SAndroid Build Coastguard Worker echo "*** The link will probably fail, sorry" 6822*2e9d4914SAndroid Build Coastguard Worker else 6823*2e9d4914SAndroid Build Coastguard Worker add="$dir/$old_library" 6824*2e9d4914SAndroid Build Coastguard Worker fi 6825*2e9d4914SAndroid Build Coastguard Worker elif test -n "$old_library"; then 6826*2e9d4914SAndroid Build Coastguard Worker add="$dir/$old_library" 6827*2e9d4914SAndroid Build Coastguard Worker fi 6828*2e9d4914SAndroid Build Coastguard Worker fi 6829*2e9d4914SAndroid Build Coastguard Worker esac 6830*2e9d4914SAndroid Build Coastguard Worker elif test "$hardcode_minus_L" = no; then 6831*2e9d4914SAndroid Build Coastguard Worker case $host in 6832*2e9d4914SAndroid Build Coastguard Worker *-*-sunos*) add_shlibpath="$dir" ;; 6833*2e9d4914SAndroid Build Coastguard Worker esac 6834*2e9d4914SAndroid Build Coastguard Worker add_dir="-L$dir" 6835*2e9d4914SAndroid Build Coastguard Worker add="-l$name" 6836*2e9d4914SAndroid Build Coastguard Worker elif test "$hardcode_shlibpath_var" = no; then 6837*2e9d4914SAndroid Build Coastguard Worker add_shlibpath="$dir" 6838*2e9d4914SAndroid Build Coastguard Worker add="-l$name" 6839*2e9d4914SAndroid Build Coastguard Worker else 6840*2e9d4914SAndroid Build Coastguard Worker lib_linked=no 6841*2e9d4914SAndroid Build Coastguard Worker fi 6842*2e9d4914SAndroid Build Coastguard Worker ;; 6843*2e9d4914SAndroid Build Coastguard Worker relink) 6844*2e9d4914SAndroid Build Coastguard Worker if test "$hardcode_direct" = yes && 6845*2e9d4914SAndroid Build Coastguard Worker test "$hardcode_direct_absolute" = no; then 6846*2e9d4914SAndroid Build Coastguard Worker add="$dir/$linklib" 6847*2e9d4914SAndroid Build Coastguard Worker elif test "$hardcode_minus_L" = yes; then 6848*2e9d4914SAndroid Build Coastguard Worker add_dir="-L$absdir" 6849*2e9d4914SAndroid Build Coastguard Worker # Try looking first in the location we're being installed to. 6850*2e9d4914SAndroid Build Coastguard Worker if test -n "$inst_prefix_dir"; then 6851*2e9d4914SAndroid Build Coastguard Worker case $libdir in 6852*2e9d4914SAndroid Build Coastguard Worker [\\/]*) 6853*2e9d4914SAndroid Build Coastguard Worker func_append add_dir " -L$inst_prefix_dir$libdir" 6854*2e9d4914SAndroid Build Coastguard Worker ;; 6855*2e9d4914SAndroid Build Coastguard Worker esac 6856*2e9d4914SAndroid Build Coastguard Worker fi 6857*2e9d4914SAndroid Build Coastguard Worker add="-l$name" 6858*2e9d4914SAndroid Build Coastguard Worker elif test "$hardcode_shlibpath_var" = yes; then 6859*2e9d4914SAndroid Build Coastguard Worker add_shlibpath="$dir" 6860*2e9d4914SAndroid Build Coastguard Worker add="-l$name" 6861*2e9d4914SAndroid Build Coastguard Worker else 6862*2e9d4914SAndroid Build Coastguard Worker lib_linked=no 6863*2e9d4914SAndroid Build Coastguard Worker fi 6864*2e9d4914SAndroid Build Coastguard Worker ;; 6865*2e9d4914SAndroid Build Coastguard Worker *) lib_linked=no ;; 6866*2e9d4914SAndroid Build Coastguard Worker esac 6867*2e9d4914SAndroid Build Coastguard Worker 6868*2e9d4914SAndroid Build Coastguard Worker if test "$lib_linked" != yes; then 6869*2e9d4914SAndroid Build Coastguard Worker func_fatal_configuration "unsupported hardcode properties" 6870*2e9d4914SAndroid Build Coastguard Worker fi 6871*2e9d4914SAndroid Build Coastguard Worker 6872*2e9d4914SAndroid Build Coastguard Worker if test -n "$add_shlibpath"; then 6873*2e9d4914SAndroid Build Coastguard Worker case :$compile_shlibpath: in 6874*2e9d4914SAndroid Build Coastguard Worker *":$add_shlibpath:"*) ;; 6875*2e9d4914SAndroid Build Coastguard Worker *) func_append compile_shlibpath "$add_shlibpath:" ;; 6876*2e9d4914SAndroid Build Coastguard Worker esac 6877*2e9d4914SAndroid Build Coastguard Worker fi 6878*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = prog; then 6879*2e9d4914SAndroid Build Coastguard Worker test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6880*2e9d4914SAndroid Build Coastguard Worker test -n "$add" && compile_deplibs="$add $compile_deplibs" 6881*2e9d4914SAndroid Build Coastguard Worker else 6882*2e9d4914SAndroid Build Coastguard Worker test -n "$add_dir" && deplibs="$add_dir $deplibs" 6883*2e9d4914SAndroid Build Coastguard Worker test -n "$add" && deplibs="$add $deplibs" 6884*2e9d4914SAndroid Build Coastguard Worker if test "$hardcode_direct" != yes && 6885*2e9d4914SAndroid Build Coastguard Worker test "$hardcode_minus_L" != yes && 6886*2e9d4914SAndroid Build Coastguard Worker test "$hardcode_shlibpath_var" = yes; then 6887*2e9d4914SAndroid Build Coastguard Worker case :$finalize_shlibpath: in 6888*2e9d4914SAndroid Build Coastguard Worker *":$libdir:"*) ;; 6889*2e9d4914SAndroid Build Coastguard Worker *) func_append finalize_shlibpath "$libdir:" ;; 6890*2e9d4914SAndroid Build Coastguard Worker esac 6891*2e9d4914SAndroid Build Coastguard Worker fi 6892*2e9d4914SAndroid Build Coastguard Worker fi 6893*2e9d4914SAndroid Build Coastguard Worker fi 6894*2e9d4914SAndroid Build Coastguard Worker 6895*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = prog || test "$opt_mode" = relink; then 6896*2e9d4914SAndroid Build Coastguard Worker add_shlibpath= 6897*2e9d4914SAndroid Build Coastguard Worker add_dir= 6898*2e9d4914SAndroid Build Coastguard Worker add= 6899*2e9d4914SAndroid Build Coastguard Worker # Finalize command for both is simple: just hardcode it. 6900*2e9d4914SAndroid Build Coastguard Worker if test "$hardcode_direct" = yes && 6901*2e9d4914SAndroid Build Coastguard Worker test "$hardcode_direct_absolute" = no; then 6902*2e9d4914SAndroid Build Coastguard Worker add="$libdir/$linklib" 6903*2e9d4914SAndroid Build Coastguard Worker elif test "$hardcode_minus_L" = yes; then 6904*2e9d4914SAndroid Build Coastguard Worker add_dir="-L$libdir" 6905*2e9d4914SAndroid Build Coastguard Worker add="-l$name" 6906*2e9d4914SAndroid Build Coastguard Worker elif test "$hardcode_shlibpath_var" = yes; then 6907*2e9d4914SAndroid Build Coastguard Worker case :$finalize_shlibpath: in 6908*2e9d4914SAndroid Build Coastguard Worker *":$libdir:"*) ;; 6909*2e9d4914SAndroid Build Coastguard Worker *) func_append finalize_shlibpath "$libdir:" ;; 6910*2e9d4914SAndroid Build Coastguard Worker esac 6911*2e9d4914SAndroid Build Coastguard Worker add="-l$name" 6912*2e9d4914SAndroid Build Coastguard Worker elif test "$hardcode_automatic" = yes; then 6913*2e9d4914SAndroid Build Coastguard Worker if test -n "$inst_prefix_dir" && 6914*2e9d4914SAndroid Build Coastguard Worker test -f "$inst_prefix_dir$libdir/$linklib" ; then 6915*2e9d4914SAndroid Build Coastguard Worker add="$inst_prefix_dir$libdir/$linklib" 6916*2e9d4914SAndroid Build Coastguard Worker else 6917*2e9d4914SAndroid Build Coastguard Worker add="$libdir/$linklib" 6918*2e9d4914SAndroid Build Coastguard Worker fi 6919*2e9d4914SAndroid Build Coastguard Worker else 6920*2e9d4914SAndroid Build Coastguard Worker # We cannot seem to hardcode it, guess we'll fake it. 6921*2e9d4914SAndroid Build Coastguard Worker add_dir="-L$libdir" 6922*2e9d4914SAndroid Build Coastguard Worker # Try looking first in the location we're being installed to. 6923*2e9d4914SAndroid Build Coastguard Worker if test -n "$inst_prefix_dir"; then 6924*2e9d4914SAndroid Build Coastguard Worker case $libdir in 6925*2e9d4914SAndroid Build Coastguard Worker [\\/]*) 6926*2e9d4914SAndroid Build Coastguard Worker func_append add_dir " -L$inst_prefix_dir$libdir" 6927*2e9d4914SAndroid Build Coastguard Worker ;; 6928*2e9d4914SAndroid Build Coastguard Worker esac 6929*2e9d4914SAndroid Build Coastguard Worker fi 6930*2e9d4914SAndroid Build Coastguard Worker add="-l$name" 6931*2e9d4914SAndroid Build Coastguard Worker fi 6932*2e9d4914SAndroid Build Coastguard Worker 6933*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = prog; then 6934*2e9d4914SAndroid Build Coastguard Worker test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6935*2e9d4914SAndroid Build Coastguard Worker test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6936*2e9d4914SAndroid Build Coastguard Worker else 6937*2e9d4914SAndroid Build Coastguard Worker test -n "$add_dir" && deplibs="$add_dir $deplibs" 6938*2e9d4914SAndroid Build Coastguard Worker test -n "$add" && deplibs="$add $deplibs" 6939*2e9d4914SAndroid Build Coastguard Worker fi 6940*2e9d4914SAndroid Build Coastguard Worker fi 6941*2e9d4914SAndroid Build Coastguard Worker elif test "$linkmode" = prog; then 6942*2e9d4914SAndroid Build Coastguard Worker # Here we assume that one of hardcode_direct or hardcode_minus_L 6943*2e9d4914SAndroid Build Coastguard Worker # is not unsupported. This is valid on all known static and 6944*2e9d4914SAndroid Build Coastguard Worker # shared platforms. 6945*2e9d4914SAndroid Build Coastguard Worker if test "$hardcode_direct" != unsupported; then 6946*2e9d4914SAndroid Build Coastguard Worker test -n "$old_library" && linklib="$old_library" 6947*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$dir/$linklib $compile_deplibs" 6948*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="$dir/$linklib $finalize_deplibs" 6949*2e9d4914SAndroid Build Coastguard Worker else 6950*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="-l$name -L$dir $compile_deplibs" 6951*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6952*2e9d4914SAndroid Build Coastguard Worker fi 6953*2e9d4914SAndroid Build Coastguard Worker elif test "$build_libtool_libs" = yes; then 6954*2e9d4914SAndroid Build Coastguard Worker # Not a shared library 6955*2e9d4914SAndroid Build Coastguard Worker if test "$deplibs_check_method" != pass_all; then 6956*2e9d4914SAndroid Build Coastguard Worker # We're trying link a shared library against a static one 6957*2e9d4914SAndroid Build Coastguard Worker # but the system doesn't support it. 6958*2e9d4914SAndroid Build Coastguard Worker 6959*2e9d4914SAndroid Build Coastguard Worker # Just print a warning and add the library to dependency_libs so 6960*2e9d4914SAndroid Build Coastguard Worker # that the program can be linked against the static library. 6961*2e9d4914SAndroid Build Coastguard Worker echo 6962*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: This system can not link to static lib archive $lib." 6963*2e9d4914SAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 6964*2e9d4914SAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 6965*2e9d4914SAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have." 6966*2e9d4914SAndroid Build Coastguard Worker if test "$module" = yes; then 6967*2e9d4914SAndroid Build Coastguard Worker echo "*** But as you try to build a module library, libtool will still create " 6968*2e9d4914SAndroid Build Coastguard Worker echo "*** a static module, that should work as long as the dlopening application" 6969*2e9d4914SAndroid Build Coastguard Worker echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6970*2e9d4914SAndroid Build Coastguard Worker if test -z "$global_symbol_pipe"; then 6971*2e9d4914SAndroid Build Coastguard Worker echo 6972*2e9d4914SAndroid Build Coastguard Worker echo "*** However, this would only work if libtool was able to extract symbol" 6973*2e9d4914SAndroid Build Coastguard Worker echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6974*2e9d4914SAndroid Build Coastguard Worker echo "*** not find such a program. So, this module is probably useless." 6975*2e9d4914SAndroid Build Coastguard Worker echo "*** \`nm' from GNU binutils and a full rebuild may help." 6976*2e9d4914SAndroid Build Coastguard Worker fi 6977*2e9d4914SAndroid Build Coastguard Worker if test "$build_old_libs" = no; then 6978*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=module 6979*2e9d4914SAndroid Build Coastguard Worker build_old_libs=yes 6980*2e9d4914SAndroid Build Coastguard Worker else 6981*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=no 6982*2e9d4914SAndroid Build Coastguard Worker fi 6983*2e9d4914SAndroid Build Coastguard Worker fi 6984*2e9d4914SAndroid Build Coastguard Worker else 6985*2e9d4914SAndroid Build Coastguard Worker deplibs="$dir/$old_library $deplibs" 6986*2e9d4914SAndroid Build Coastguard Worker link_static=yes 6987*2e9d4914SAndroid Build Coastguard Worker fi 6988*2e9d4914SAndroid Build Coastguard Worker fi # link shared/static library? 6989*2e9d4914SAndroid Build Coastguard Worker 6990*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = lib; then 6991*2e9d4914SAndroid Build Coastguard Worker if test -n "$dependency_libs" && 6992*2e9d4914SAndroid Build Coastguard Worker { test "$hardcode_into_libs" != yes || 6993*2e9d4914SAndroid Build Coastguard Worker test "$build_old_libs" = yes || 6994*2e9d4914SAndroid Build Coastguard Worker test "$link_static" = yes; }; then 6995*2e9d4914SAndroid Build Coastguard Worker # Extract -R from dependency_libs 6996*2e9d4914SAndroid Build Coastguard Worker temp_deplibs= 6997*2e9d4914SAndroid Build Coastguard Worker for libdir in $dependency_libs; do 6998*2e9d4914SAndroid Build Coastguard Worker case $libdir in 6999*2e9d4914SAndroid Build Coastguard Worker -R*) func_stripname '-R' '' "$libdir" 7000*2e9d4914SAndroid Build Coastguard Worker temp_xrpath=$func_stripname_result 7001*2e9d4914SAndroid Build Coastguard Worker case " $xrpath " in 7002*2e9d4914SAndroid Build Coastguard Worker *" $temp_xrpath "*) ;; 7003*2e9d4914SAndroid Build Coastguard Worker *) func_append xrpath " $temp_xrpath";; 7004*2e9d4914SAndroid Build Coastguard Worker esac;; 7005*2e9d4914SAndroid Build Coastguard Worker *) func_append temp_deplibs " $libdir";; 7006*2e9d4914SAndroid Build Coastguard Worker esac 7007*2e9d4914SAndroid Build Coastguard Worker done 7008*2e9d4914SAndroid Build Coastguard Worker dependency_libs="$temp_deplibs" 7009*2e9d4914SAndroid Build Coastguard Worker fi 7010*2e9d4914SAndroid Build Coastguard Worker 7011*2e9d4914SAndroid Build Coastguard Worker func_append newlib_search_path " $absdir" 7012*2e9d4914SAndroid Build Coastguard Worker # Link against this library 7013*2e9d4914SAndroid Build Coastguard Worker test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7014*2e9d4914SAndroid Build Coastguard Worker # ... and its dependency_libs 7015*2e9d4914SAndroid Build Coastguard Worker tmp_libs= 7016*2e9d4914SAndroid Build Coastguard Worker for deplib in $dependency_libs; do 7017*2e9d4914SAndroid Build Coastguard Worker newdependency_libs="$deplib $newdependency_libs" 7018*2e9d4914SAndroid Build Coastguard Worker case $deplib in 7019*2e9d4914SAndroid Build Coastguard Worker -L*) func_stripname '-L' '' "$deplib" 7020*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result";; 7021*2e9d4914SAndroid Build Coastguard Worker *) func_resolve_sysroot "$deplib" ;; 7022*2e9d4914SAndroid Build Coastguard Worker esac 7023*2e9d4914SAndroid Build Coastguard Worker if $opt_preserve_dup_deps ; then 7024*2e9d4914SAndroid Build Coastguard Worker case "$tmp_libs " in 7025*2e9d4914SAndroid Build Coastguard Worker *" $func_resolve_sysroot_result "*) 7026*2e9d4914SAndroid Build Coastguard Worker func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7027*2e9d4914SAndroid Build Coastguard Worker esac 7028*2e9d4914SAndroid Build Coastguard Worker fi 7029*2e9d4914SAndroid Build Coastguard Worker func_append tmp_libs " $func_resolve_sysroot_result" 7030*2e9d4914SAndroid Build Coastguard Worker done 7031*2e9d4914SAndroid Build Coastguard Worker 7032*2e9d4914SAndroid Build Coastguard Worker if test "$link_all_deplibs" != no; then 7033*2e9d4914SAndroid Build Coastguard Worker # Add the search paths of all dependency libraries 7034*2e9d4914SAndroid Build Coastguard Worker for deplib in $dependency_libs; do 7035*2e9d4914SAndroid Build Coastguard Worker path= 7036*2e9d4914SAndroid Build Coastguard Worker case $deplib in 7037*2e9d4914SAndroid Build Coastguard Worker -L*) path="$deplib" ;; 7038*2e9d4914SAndroid Build Coastguard Worker *.la) 7039*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$deplib" 7040*2e9d4914SAndroid Build Coastguard Worker deplib=$func_resolve_sysroot_result 7041*2e9d4914SAndroid Build Coastguard Worker func_dirname "$deplib" "" "." 7042*2e9d4914SAndroid Build Coastguard Worker dir=$func_dirname_result 7043*2e9d4914SAndroid Build Coastguard Worker # We need an absolute path. 7044*2e9d4914SAndroid Build Coastguard Worker case $dir in 7045*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7046*2e9d4914SAndroid Build Coastguard Worker *) 7047*2e9d4914SAndroid Build Coastguard Worker absdir=`cd "$dir" && pwd` 7048*2e9d4914SAndroid Build Coastguard Worker if test -z "$absdir"; then 7049*2e9d4914SAndroid Build Coastguard Worker func_warning "cannot determine absolute directory name of \`$dir'" 7050*2e9d4914SAndroid Build Coastguard Worker absdir="$dir" 7051*2e9d4914SAndroid Build Coastguard Worker fi 7052*2e9d4914SAndroid Build Coastguard Worker ;; 7053*2e9d4914SAndroid Build Coastguard Worker esac 7054*2e9d4914SAndroid Build Coastguard Worker if $GREP "^installed=no" $deplib > /dev/null; then 7055*2e9d4914SAndroid Build Coastguard Worker case $host in 7056*2e9d4914SAndroid Build Coastguard Worker *-*-darwin*) 7057*2e9d4914SAndroid Build Coastguard Worker depdepl= 7058*2e9d4914SAndroid Build Coastguard Worker eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7059*2e9d4914SAndroid Build Coastguard Worker if test -n "$deplibrary_names" ; then 7060*2e9d4914SAndroid Build Coastguard Worker for tmp in $deplibrary_names ; do 7061*2e9d4914SAndroid Build Coastguard Worker depdepl=$tmp 7062*2e9d4914SAndroid Build Coastguard Worker done 7063*2e9d4914SAndroid Build Coastguard Worker if test -f "$absdir/$objdir/$depdepl" ; then 7064*2e9d4914SAndroid Build Coastguard Worker depdepl="$absdir/$objdir/$depdepl" 7065*2e9d4914SAndroid Build Coastguard Worker darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066*2e9d4914SAndroid Build Coastguard Worker if test -z "$darwin_install_name"; then 7067*2e9d4914SAndroid Build Coastguard Worker darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7068*2e9d4914SAndroid Build Coastguard Worker fi 7069*2e9d4914SAndroid Build Coastguard Worker func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 7070*2e9d4914SAndroid Build Coastguard Worker func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7071*2e9d4914SAndroid Build Coastguard Worker path= 7072*2e9d4914SAndroid Build Coastguard Worker fi 7073*2e9d4914SAndroid Build Coastguard Worker fi 7074*2e9d4914SAndroid Build Coastguard Worker ;; 7075*2e9d4914SAndroid Build Coastguard Worker *) 7076*2e9d4914SAndroid Build Coastguard Worker path="-L$absdir/$objdir" 7077*2e9d4914SAndroid Build Coastguard Worker ;; 7078*2e9d4914SAndroid Build Coastguard Worker esac 7079*2e9d4914SAndroid Build Coastguard Worker else 7080*2e9d4914SAndroid Build Coastguard Worker eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7081*2e9d4914SAndroid Build Coastguard Worker test -z "$libdir" && \ 7082*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$deplib' is not a valid libtool archive" 7083*2e9d4914SAndroid Build Coastguard Worker test "$absdir" != "$libdir" && \ 7084*2e9d4914SAndroid Build Coastguard Worker func_warning "\`$deplib' seems to be moved" 7085*2e9d4914SAndroid Build Coastguard Worker 7086*2e9d4914SAndroid Build Coastguard Worker path="-L$absdir" 7087*2e9d4914SAndroid Build Coastguard Worker fi 7088*2e9d4914SAndroid Build Coastguard Worker ;; 7089*2e9d4914SAndroid Build Coastguard Worker esac 7090*2e9d4914SAndroid Build Coastguard Worker case " $deplibs " in 7091*2e9d4914SAndroid Build Coastguard Worker *" $path "*) ;; 7092*2e9d4914SAndroid Build Coastguard Worker *) deplibs="$path $deplibs" ;; 7093*2e9d4914SAndroid Build Coastguard Worker esac 7094*2e9d4914SAndroid Build Coastguard Worker done 7095*2e9d4914SAndroid Build Coastguard Worker fi # link_all_deplibs != no 7096*2e9d4914SAndroid Build Coastguard Worker fi # linkmode = lib 7097*2e9d4914SAndroid Build Coastguard Worker done # for deplib in $libs 7098*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = link; then 7099*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = "prog"; then 7100*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7101*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7102*2e9d4914SAndroid Build Coastguard Worker else 7103*2e9d4914SAndroid Build Coastguard Worker compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7104*2e9d4914SAndroid Build Coastguard Worker fi 7105*2e9d4914SAndroid Build Coastguard Worker fi 7106*2e9d4914SAndroid Build Coastguard Worker dependency_libs="$newdependency_libs" 7107*2e9d4914SAndroid Build Coastguard Worker if test "$pass" = dlpreopen; then 7108*2e9d4914SAndroid Build Coastguard Worker # Link the dlpreopened libraries before other libraries 7109*2e9d4914SAndroid Build Coastguard Worker for deplib in $save_deplibs; do 7110*2e9d4914SAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7111*2e9d4914SAndroid Build Coastguard Worker done 7112*2e9d4914SAndroid Build Coastguard Worker fi 7113*2e9d4914SAndroid Build Coastguard Worker if test "$pass" != dlopen; then 7114*2e9d4914SAndroid Build Coastguard Worker if test "$pass" != conv; then 7115*2e9d4914SAndroid Build Coastguard Worker # Make sure lib_search_path contains only unique directories. 7116*2e9d4914SAndroid Build Coastguard Worker lib_search_path= 7117*2e9d4914SAndroid Build Coastguard Worker for dir in $newlib_search_path; do 7118*2e9d4914SAndroid Build Coastguard Worker case "$lib_search_path " in 7119*2e9d4914SAndroid Build Coastguard Worker *" $dir "*) ;; 7120*2e9d4914SAndroid Build Coastguard Worker *) func_append lib_search_path " $dir" ;; 7121*2e9d4914SAndroid Build Coastguard Worker esac 7122*2e9d4914SAndroid Build Coastguard Worker done 7123*2e9d4914SAndroid Build Coastguard Worker newlib_search_path= 7124*2e9d4914SAndroid Build Coastguard Worker fi 7125*2e9d4914SAndroid Build Coastguard Worker 7126*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode,$pass" != "prog,link"; then 7127*2e9d4914SAndroid Build Coastguard Worker vars="deplibs" 7128*2e9d4914SAndroid Build Coastguard Worker else 7129*2e9d4914SAndroid Build Coastguard Worker vars="compile_deplibs finalize_deplibs" 7130*2e9d4914SAndroid Build Coastguard Worker fi 7131*2e9d4914SAndroid Build Coastguard Worker for var in $vars dependency_libs; do 7132*2e9d4914SAndroid Build Coastguard Worker # Add libraries to $var in reverse order 7133*2e9d4914SAndroid Build Coastguard Worker eval tmp_libs=\"\$$var\" 7134*2e9d4914SAndroid Build Coastguard Worker new_libs= 7135*2e9d4914SAndroid Build Coastguard Worker for deplib in $tmp_libs; do 7136*2e9d4914SAndroid Build Coastguard Worker # FIXME: Pedantically, this is the right thing to do, so 7137*2e9d4914SAndroid Build Coastguard Worker # that some nasty dependency loop isn't accidentally 7138*2e9d4914SAndroid Build Coastguard Worker # broken: 7139*2e9d4914SAndroid Build Coastguard Worker #new_libs="$deplib $new_libs" 7140*2e9d4914SAndroid Build Coastguard Worker # Pragmatically, this seems to cause very few problems in 7141*2e9d4914SAndroid Build Coastguard Worker # practice: 7142*2e9d4914SAndroid Build Coastguard Worker case $deplib in 7143*2e9d4914SAndroid Build Coastguard Worker -L*) new_libs="$deplib $new_libs" ;; 7144*2e9d4914SAndroid Build Coastguard Worker -R*) ;; 7145*2e9d4914SAndroid Build Coastguard Worker *) 7146*2e9d4914SAndroid Build Coastguard Worker # And here is the reason: when a library appears more 7147*2e9d4914SAndroid Build Coastguard Worker # than once as an explicit dependence of a library, or 7148*2e9d4914SAndroid Build Coastguard Worker # is implicitly linked in more than once by the 7149*2e9d4914SAndroid Build Coastguard Worker # compiler, it is considered special, and multiple 7150*2e9d4914SAndroid Build Coastguard Worker # occurrences thereof are not removed. Compare this 7151*2e9d4914SAndroid Build Coastguard Worker # with having the same library being listed as a 7152*2e9d4914SAndroid Build Coastguard Worker # dependency of multiple other libraries: in this case, 7153*2e9d4914SAndroid Build Coastguard Worker # we know (pedantically, we assume) the library does not 7154*2e9d4914SAndroid Build Coastguard Worker # need to be listed more than once, so we keep only the 7155*2e9d4914SAndroid Build Coastguard Worker # last copy. This is not always right, but it is rare 7156*2e9d4914SAndroid Build Coastguard Worker # enough that we require users that really mean to play 7157*2e9d4914SAndroid Build Coastguard Worker # such unportable linking tricks to link the library 7158*2e9d4914SAndroid Build Coastguard Worker # using -Wl,-lname, so that libtool does not consider it 7159*2e9d4914SAndroid Build Coastguard Worker # for duplicate removal. 7160*2e9d4914SAndroid Build Coastguard Worker case " $specialdeplibs " in 7161*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) new_libs="$deplib $new_libs" ;; 7162*2e9d4914SAndroid Build Coastguard Worker *) 7163*2e9d4914SAndroid Build Coastguard Worker case " $new_libs " in 7164*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) ;; 7165*2e9d4914SAndroid Build Coastguard Worker *) new_libs="$deplib $new_libs" ;; 7166*2e9d4914SAndroid Build Coastguard Worker esac 7167*2e9d4914SAndroid Build Coastguard Worker ;; 7168*2e9d4914SAndroid Build Coastguard Worker esac 7169*2e9d4914SAndroid Build Coastguard Worker ;; 7170*2e9d4914SAndroid Build Coastguard Worker esac 7171*2e9d4914SAndroid Build Coastguard Worker done 7172*2e9d4914SAndroid Build Coastguard Worker tmp_libs= 7173*2e9d4914SAndroid Build Coastguard Worker for deplib in $new_libs; do 7174*2e9d4914SAndroid Build Coastguard Worker case $deplib in 7175*2e9d4914SAndroid Build Coastguard Worker -L*) 7176*2e9d4914SAndroid Build Coastguard Worker case " $tmp_libs " in 7177*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) ;; 7178*2e9d4914SAndroid Build Coastguard Worker *) func_append tmp_libs " $deplib" ;; 7179*2e9d4914SAndroid Build Coastguard Worker esac 7180*2e9d4914SAndroid Build Coastguard Worker ;; 7181*2e9d4914SAndroid Build Coastguard Worker *) func_append tmp_libs " $deplib" ;; 7182*2e9d4914SAndroid Build Coastguard Worker esac 7183*2e9d4914SAndroid Build Coastguard Worker done 7184*2e9d4914SAndroid Build Coastguard Worker eval $var=\"$tmp_libs\" 7185*2e9d4914SAndroid Build Coastguard Worker done # for var 7186*2e9d4914SAndroid Build Coastguard Worker fi 7187*2e9d4914SAndroid Build Coastguard Worker # Last step: remove runtime libs from dependency_libs 7188*2e9d4914SAndroid Build Coastguard Worker # (they stay in deplibs) 7189*2e9d4914SAndroid Build Coastguard Worker tmp_libs= 7190*2e9d4914SAndroid Build Coastguard Worker for i in $dependency_libs ; do 7191*2e9d4914SAndroid Build Coastguard Worker case " $predeps $postdeps $compiler_lib_search_path " in 7192*2e9d4914SAndroid Build Coastguard Worker *" $i "*) 7193*2e9d4914SAndroid Build Coastguard Worker i="" 7194*2e9d4914SAndroid Build Coastguard Worker ;; 7195*2e9d4914SAndroid Build Coastguard Worker esac 7196*2e9d4914SAndroid Build Coastguard Worker if test -n "$i" ; then 7197*2e9d4914SAndroid Build Coastguard Worker func_append tmp_libs " $i" 7198*2e9d4914SAndroid Build Coastguard Worker fi 7199*2e9d4914SAndroid Build Coastguard Worker done 7200*2e9d4914SAndroid Build Coastguard Worker dependency_libs=$tmp_libs 7201*2e9d4914SAndroid Build Coastguard Worker done # for pass 7202*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = prog; then 7203*2e9d4914SAndroid Build Coastguard Worker dlfiles="$newdlfiles" 7204*2e9d4914SAndroid Build Coastguard Worker fi 7205*2e9d4914SAndroid Build Coastguard Worker if test "$linkmode" = prog || test "$linkmode" = lib; then 7206*2e9d4914SAndroid Build Coastguard Worker dlprefiles="$newdlprefiles" 7207*2e9d4914SAndroid Build Coastguard Worker fi 7208*2e9d4914SAndroid Build Coastguard Worker 7209*2e9d4914SAndroid Build Coastguard Worker case $linkmode in 7210*2e9d4914SAndroid Build Coastguard Worker oldlib) 7211*2e9d4914SAndroid Build Coastguard Worker if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7212*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-dlopen' is ignored for archives" 7213*2e9d4914SAndroid Build Coastguard Worker fi 7214*2e9d4914SAndroid Build Coastguard Worker 7215*2e9d4914SAndroid Build Coastguard Worker case " $deplibs" in 7216*2e9d4914SAndroid Build Coastguard Worker *\ -l* | *\ -L*) 7217*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-l' and \`-L' are ignored for archives" ;; 7218*2e9d4914SAndroid Build Coastguard Worker esac 7219*2e9d4914SAndroid Build Coastguard Worker 7220*2e9d4914SAndroid Build Coastguard Worker test -n "$rpath" && \ 7221*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-rpath' is ignored for archives" 7222*2e9d4914SAndroid Build Coastguard Worker 7223*2e9d4914SAndroid Build Coastguard Worker test -n "$xrpath" && \ 7224*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-R' is ignored for archives" 7225*2e9d4914SAndroid Build Coastguard Worker 7226*2e9d4914SAndroid Build Coastguard Worker test -n "$vinfo" && \ 7227*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-version-info/-version-number' is ignored for archives" 7228*2e9d4914SAndroid Build Coastguard Worker 7229*2e9d4914SAndroid Build Coastguard Worker test -n "$release" && \ 7230*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-release' is ignored for archives" 7231*2e9d4914SAndroid Build Coastguard Worker 7232*2e9d4914SAndroid Build Coastguard Worker test -n "$export_symbols$export_symbols_regex" && \ 7233*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-export-symbols' is ignored for archives" 7234*2e9d4914SAndroid Build Coastguard Worker 7235*2e9d4914SAndroid Build Coastguard Worker # Now set the variables for building old libraries. 7236*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=no 7237*2e9d4914SAndroid Build Coastguard Worker oldlibs="$output" 7238*2e9d4914SAndroid Build Coastguard Worker func_append objs "$old_deplibs" 7239*2e9d4914SAndroid Build Coastguard Worker ;; 7240*2e9d4914SAndroid Build Coastguard Worker 7241*2e9d4914SAndroid Build Coastguard Worker lib) 7242*2e9d4914SAndroid Build Coastguard Worker # Make sure we only generate libraries of the form `libNAME.la'. 7243*2e9d4914SAndroid Build Coastguard Worker case $outputname in 7244*2e9d4914SAndroid Build Coastguard Worker lib*) 7245*2e9d4914SAndroid Build Coastguard Worker func_stripname 'lib' '.la' "$outputname" 7246*2e9d4914SAndroid Build Coastguard Worker name=$func_stripname_result 7247*2e9d4914SAndroid Build Coastguard Worker eval shared_ext=\"$shrext_cmds\" 7248*2e9d4914SAndroid Build Coastguard Worker eval libname=\"$libname_spec\" 7249*2e9d4914SAndroid Build Coastguard Worker ;; 7250*2e9d4914SAndroid Build Coastguard Worker *) 7251*2e9d4914SAndroid Build Coastguard Worker test "$module" = no && \ 7252*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "libtool library \`$output' must begin with \`lib'" 7253*2e9d4914SAndroid Build Coastguard Worker 7254*2e9d4914SAndroid Build Coastguard Worker if test "$need_lib_prefix" != no; then 7255*2e9d4914SAndroid Build Coastguard Worker # Add the "lib" prefix for modules if required 7256*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '.la' "$outputname" 7257*2e9d4914SAndroid Build Coastguard Worker name=$func_stripname_result 7258*2e9d4914SAndroid Build Coastguard Worker eval shared_ext=\"$shrext_cmds\" 7259*2e9d4914SAndroid Build Coastguard Worker eval libname=\"$libname_spec\" 7260*2e9d4914SAndroid Build Coastguard Worker else 7261*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '.la' "$outputname" 7262*2e9d4914SAndroid Build Coastguard Worker libname=$func_stripname_result 7263*2e9d4914SAndroid Build Coastguard Worker fi 7264*2e9d4914SAndroid Build Coastguard Worker ;; 7265*2e9d4914SAndroid Build Coastguard Worker esac 7266*2e9d4914SAndroid Build Coastguard Worker 7267*2e9d4914SAndroid Build Coastguard Worker if test -n "$objs"; then 7268*2e9d4914SAndroid Build Coastguard Worker if test "$deplibs_check_method" != pass_all; then 7269*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7270*2e9d4914SAndroid Build Coastguard Worker else 7271*2e9d4914SAndroid Build Coastguard Worker echo 7272*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7273*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** objects $objs is not portable!" 7274*2e9d4914SAndroid Build Coastguard Worker func_append libobjs " $objs" 7275*2e9d4914SAndroid Build Coastguard Worker fi 7276*2e9d4914SAndroid Build Coastguard Worker fi 7277*2e9d4914SAndroid Build Coastguard Worker 7278*2e9d4914SAndroid Build Coastguard Worker test "$dlself" != no && \ 7279*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-dlopen self' is ignored for libtool libraries" 7280*2e9d4914SAndroid Build Coastguard Worker 7281*2e9d4914SAndroid Build Coastguard Worker set dummy $rpath 7282*2e9d4914SAndroid Build Coastguard Worker shift 7283*2e9d4914SAndroid Build Coastguard Worker test "$#" -gt 1 && \ 7284*2e9d4914SAndroid Build Coastguard Worker func_warning "ignoring multiple \`-rpath's for a libtool library" 7285*2e9d4914SAndroid Build Coastguard Worker 7286*2e9d4914SAndroid Build Coastguard Worker install_libdir="$1" 7287*2e9d4914SAndroid Build Coastguard Worker 7288*2e9d4914SAndroid Build Coastguard Worker oldlibs= 7289*2e9d4914SAndroid Build Coastguard Worker if test -z "$rpath"; then 7290*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = yes; then 7291*2e9d4914SAndroid Build Coastguard Worker # Building a libtool convenience library. 7292*2e9d4914SAndroid Build Coastguard Worker # Some compilers have problems with a `.al' extension so 7293*2e9d4914SAndroid Build Coastguard Worker # convenience libraries should have the same extension an 7294*2e9d4914SAndroid Build Coastguard Worker # archive normally would. 7295*2e9d4914SAndroid Build Coastguard Worker oldlibs="$output_objdir/$libname.$libext $oldlibs" 7296*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=convenience 7297*2e9d4914SAndroid Build Coastguard Worker build_old_libs=yes 7298*2e9d4914SAndroid Build Coastguard Worker fi 7299*2e9d4914SAndroid Build Coastguard Worker 7300*2e9d4914SAndroid Build Coastguard Worker test -n "$vinfo" && \ 7301*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7302*2e9d4914SAndroid Build Coastguard Worker 7303*2e9d4914SAndroid Build Coastguard Worker test -n "$release" && \ 7304*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-release' is ignored for convenience libraries" 7305*2e9d4914SAndroid Build Coastguard Worker else 7306*2e9d4914SAndroid Build Coastguard Worker 7307*2e9d4914SAndroid Build Coastguard Worker # Parse the version information argument. 7308*2e9d4914SAndroid Build Coastguard Worker save_ifs="$IFS"; IFS=':' 7309*2e9d4914SAndroid Build Coastguard Worker set dummy $vinfo 0 0 0 7310*2e9d4914SAndroid Build Coastguard Worker shift 7311*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 7312*2e9d4914SAndroid Build Coastguard Worker 7313*2e9d4914SAndroid Build Coastguard Worker test -n "$7" && \ 7314*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "too many parameters to \`-version-info'" 7315*2e9d4914SAndroid Build Coastguard Worker 7316*2e9d4914SAndroid Build Coastguard Worker # convert absolute version numbers to libtool ages 7317*2e9d4914SAndroid Build Coastguard Worker # this retains compatibility with .la files and attempts 7318*2e9d4914SAndroid Build Coastguard Worker # to make the code below a bit more comprehensible 7319*2e9d4914SAndroid Build Coastguard Worker 7320*2e9d4914SAndroid Build Coastguard Worker case $vinfo_number in 7321*2e9d4914SAndroid Build Coastguard Worker yes) 7322*2e9d4914SAndroid Build Coastguard Worker number_major="$1" 7323*2e9d4914SAndroid Build Coastguard Worker number_minor="$2" 7324*2e9d4914SAndroid Build Coastguard Worker number_revision="$3" 7325*2e9d4914SAndroid Build Coastguard Worker # 7326*2e9d4914SAndroid Build Coastguard Worker # There are really only two kinds -- those that 7327*2e9d4914SAndroid Build Coastguard Worker # use the current revision as the major version 7328*2e9d4914SAndroid Build Coastguard Worker # and those that subtract age and use age as 7329*2e9d4914SAndroid Build Coastguard Worker # a minor version. But, then there is irix 7330*2e9d4914SAndroid Build Coastguard Worker # which has an extra 1 added just for fun 7331*2e9d4914SAndroid Build Coastguard Worker # 7332*2e9d4914SAndroid Build Coastguard Worker case $version_type in 7333*2e9d4914SAndroid Build Coastguard Worker # correct linux to gnu/linux during the next big refactor 7334*2e9d4914SAndroid Build Coastguard Worker darwin|linux|osf|windows|none) 7335*2e9d4914SAndroid Build Coastguard Worker func_arith $number_major + $number_minor 7336*2e9d4914SAndroid Build Coastguard Worker current=$func_arith_result 7337*2e9d4914SAndroid Build Coastguard Worker age="$number_minor" 7338*2e9d4914SAndroid Build Coastguard Worker revision="$number_revision" 7339*2e9d4914SAndroid Build Coastguard Worker ;; 7340*2e9d4914SAndroid Build Coastguard Worker freebsd-aout|freebsd-elf|qnx|sunos) 7341*2e9d4914SAndroid Build Coastguard Worker current="$number_major" 7342*2e9d4914SAndroid Build Coastguard Worker revision="$number_minor" 7343*2e9d4914SAndroid Build Coastguard Worker age="0" 7344*2e9d4914SAndroid Build Coastguard Worker ;; 7345*2e9d4914SAndroid Build Coastguard Worker irix|nonstopux) 7346*2e9d4914SAndroid Build Coastguard Worker func_arith $number_major + $number_minor 7347*2e9d4914SAndroid Build Coastguard Worker current=$func_arith_result 7348*2e9d4914SAndroid Build Coastguard Worker age="$number_minor" 7349*2e9d4914SAndroid Build Coastguard Worker revision="$number_minor" 7350*2e9d4914SAndroid Build Coastguard Worker lt_irix_increment=no 7351*2e9d4914SAndroid Build Coastguard Worker ;; 7352*2e9d4914SAndroid Build Coastguard Worker esac 7353*2e9d4914SAndroid Build Coastguard Worker ;; 7354*2e9d4914SAndroid Build Coastguard Worker no) 7355*2e9d4914SAndroid Build Coastguard Worker current="$1" 7356*2e9d4914SAndroid Build Coastguard Worker revision="$2" 7357*2e9d4914SAndroid Build Coastguard Worker age="$3" 7358*2e9d4914SAndroid Build Coastguard Worker ;; 7359*2e9d4914SAndroid Build Coastguard Worker esac 7360*2e9d4914SAndroid Build Coastguard Worker 7361*2e9d4914SAndroid Build Coastguard Worker # Check that each of the things are valid numbers. 7362*2e9d4914SAndroid Build Coastguard Worker case $current in 7363*2e9d4914SAndroid Build Coastguard Worker 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]) ;; 7364*2e9d4914SAndroid Build Coastguard Worker *) 7365*2e9d4914SAndroid Build Coastguard Worker func_error "CURRENT \`$current' must be a nonnegative integer" 7366*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$vinfo' is not valid version information" 7367*2e9d4914SAndroid Build Coastguard Worker ;; 7368*2e9d4914SAndroid Build Coastguard Worker esac 7369*2e9d4914SAndroid Build Coastguard Worker 7370*2e9d4914SAndroid Build Coastguard Worker case $revision in 7371*2e9d4914SAndroid Build Coastguard Worker 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]) ;; 7372*2e9d4914SAndroid Build Coastguard Worker *) 7373*2e9d4914SAndroid Build Coastguard Worker func_error "REVISION \`$revision' must be a nonnegative integer" 7374*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$vinfo' is not valid version information" 7375*2e9d4914SAndroid Build Coastguard Worker ;; 7376*2e9d4914SAndroid Build Coastguard Worker esac 7377*2e9d4914SAndroid Build Coastguard Worker 7378*2e9d4914SAndroid Build Coastguard Worker case $age in 7379*2e9d4914SAndroid Build Coastguard Worker 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]) ;; 7380*2e9d4914SAndroid Build Coastguard Worker *) 7381*2e9d4914SAndroid Build Coastguard Worker func_error "AGE \`$age' must be a nonnegative integer" 7382*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$vinfo' is not valid version information" 7383*2e9d4914SAndroid Build Coastguard Worker ;; 7384*2e9d4914SAndroid Build Coastguard Worker esac 7385*2e9d4914SAndroid Build Coastguard Worker 7386*2e9d4914SAndroid Build Coastguard Worker if test "$age" -gt "$current"; then 7387*2e9d4914SAndroid Build Coastguard Worker func_error "AGE \`$age' is greater than the current interface number \`$current'" 7388*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$vinfo' is not valid version information" 7389*2e9d4914SAndroid Build Coastguard Worker fi 7390*2e9d4914SAndroid Build Coastguard Worker 7391*2e9d4914SAndroid Build Coastguard Worker # Calculate the version variables. 7392*2e9d4914SAndroid Build Coastguard Worker major= 7393*2e9d4914SAndroid Build Coastguard Worker versuffix= 7394*2e9d4914SAndroid Build Coastguard Worker verstring= 7395*2e9d4914SAndroid Build Coastguard Worker case $version_type in 7396*2e9d4914SAndroid Build Coastguard Worker none) ;; 7397*2e9d4914SAndroid Build Coastguard Worker 7398*2e9d4914SAndroid Build Coastguard Worker darwin) 7399*2e9d4914SAndroid Build Coastguard Worker # Like Linux, but with the current version available in 7400*2e9d4914SAndroid Build Coastguard Worker # verstring for coding it into the library header 7401*2e9d4914SAndroid Build Coastguard Worker func_arith $current - $age 7402*2e9d4914SAndroid Build Coastguard Worker major=.$func_arith_result 7403*2e9d4914SAndroid Build Coastguard Worker versuffix="$major.$age.$revision" 7404*2e9d4914SAndroid Build Coastguard Worker # Darwin ld doesn't like 0 for these options... 7405*2e9d4914SAndroid Build Coastguard Worker func_arith $current + 1 7406*2e9d4914SAndroid Build Coastguard Worker minor_current=$func_arith_result 7407*2e9d4914SAndroid Build Coastguard Worker xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7408*2e9d4914SAndroid Build Coastguard Worker verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7409*2e9d4914SAndroid Build Coastguard Worker ;; 7410*2e9d4914SAndroid Build Coastguard Worker 7411*2e9d4914SAndroid Build Coastguard Worker freebsd-aout) 7412*2e9d4914SAndroid Build Coastguard Worker major=".$current" 7413*2e9d4914SAndroid Build Coastguard Worker versuffix=".$current.$revision"; 7414*2e9d4914SAndroid Build Coastguard Worker ;; 7415*2e9d4914SAndroid Build Coastguard Worker 7416*2e9d4914SAndroid Build Coastguard Worker freebsd-elf) 7417*2e9d4914SAndroid Build Coastguard Worker major=".$current" 7418*2e9d4914SAndroid Build Coastguard Worker versuffix=".$current" 7419*2e9d4914SAndroid Build Coastguard Worker ;; 7420*2e9d4914SAndroid Build Coastguard Worker 7421*2e9d4914SAndroid Build Coastguard Worker irix | nonstopux) 7422*2e9d4914SAndroid Build Coastguard Worker if test "X$lt_irix_increment" = "Xno"; then 7423*2e9d4914SAndroid Build Coastguard Worker func_arith $current - $age 7424*2e9d4914SAndroid Build Coastguard Worker else 7425*2e9d4914SAndroid Build Coastguard Worker func_arith $current - $age + 1 7426*2e9d4914SAndroid Build Coastguard Worker fi 7427*2e9d4914SAndroid Build Coastguard Worker major=$func_arith_result 7428*2e9d4914SAndroid Build Coastguard Worker 7429*2e9d4914SAndroid Build Coastguard Worker case $version_type in 7430*2e9d4914SAndroid Build Coastguard Worker nonstopux) verstring_prefix=nonstopux ;; 7431*2e9d4914SAndroid Build Coastguard Worker *) verstring_prefix=sgi ;; 7432*2e9d4914SAndroid Build Coastguard Worker esac 7433*2e9d4914SAndroid Build Coastguard Worker verstring="$verstring_prefix$major.$revision" 7434*2e9d4914SAndroid Build Coastguard Worker 7435*2e9d4914SAndroid Build Coastguard Worker # Add in all the interfaces that we are compatible with. 7436*2e9d4914SAndroid Build Coastguard Worker loop=$revision 7437*2e9d4914SAndroid Build Coastguard Worker while test "$loop" -ne 0; do 7438*2e9d4914SAndroid Build Coastguard Worker func_arith $revision - $loop 7439*2e9d4914SAndroid Build Coastguard Worker iface=$func_arith_result 7440*2e9d4914SAndroid Build Coastguard Worker func_arith $loop - 1 7441*2e9d4914SAndroid Build Coastguard Worker loop=$func_arith_result 7442*2e9d4914SAndroid Build Coastguard Worker verstring="$verstring_prefix$major.$iface:$verstring" 7443*2e9d4914SAndroid Build Coastguard Worker done 7444*2e9d4914SAndroid Build Coastguard Worker 7445*2e9d4914SAndroid Build Coastguard Worker # Before this point, $major must not contain `.'. 7446*2e9d4914SAndroid Build Coastguard Worker major=.$major 7447*2e9d4914SAndroid Build Coastguard Worker versuffix="$major.$revision" 7448*2e9d4914SAndroid Build Coastguard Worker ;; 7449*2e9d4914SAndroid Build Coastguard Worker 7450*2e9d4914SAndroid Build Coastguard Worker linux) # correct to gnu/linux during the next big refactor 7451*2e9d4914SAndroid Build Coastguard Worker func_arith $current - $age 7452*2e9d4914SAndroid Build Coastguard Worker major=.$func_arith_result 7453*2e9d4914SAndroid Build Coastguard Worker versuffix="$major.$age.$revision" 7454*2e9d4914SAndroid Build Coastguard Worker ;; 7455*2e9d4914SAndroid Build Coastguard Worker 7456*2e9d4914SAndroid Build Coastguard Worker osf) 7457*2e9d4914SAndroid Build Coastguard Worker func_arith $current - $age 7458*2e9d4914SAndroid Build Coastguard Worker major=.$func_arith_result 7459*2e9d4914SAndroid Build Coastguard Worker versuffix=".$current.$age.$revision" 7460*2e9d4914SAndroid Build Coastguard Worker verstring="$current.$age.$revision" 7461*2e9d4914SAndroid Build Coastguard Worker 7462*2e9d4914SAndroid Build Coastguard Worker # Add in all the interfaces that we are compatible with. 7463*2e9d4914SAndroid Build Coastguard Worker loop=$age 7464*2e9d4914SAndroid Build Coastguard Worker while test "$loop" -ne 0; do 7465*2e9d4914SAndroid Build Coastguard Worker func_arith $current - $loop 7466*2e9d4914SAndroid Build Coastguard Worker iface=$func_arith_result 7467*2e9d4914SAndroid Build Coastguard Worker func_arith $loop - 1 7468*2e9d4914SAndroid Build Coastguard Worker loop=$func_arith_result 7469*2e9d4914SAndroid Build Coastguard Worker verstring="$verstring:${iface}.0" 7470*2e9d4914SAndroid Build Coastguard Worker done 7471*2e9d4914SAndroid Build Coastguard Worker 7472*2e9d4914SAndroid Build Coastguard Worker # Make executables depend on our current version. 7473*2e9d4914SAndroid Build Coastguard Worker func_append verstring ":${current}.0" 7474*2e9d4914SAndroid Build Coastguard Worker ;; 7475*2e9d4914SAndroid Build Coastguard Worker 7476*2e9d4914SAndroid Build Coastguard Worker qnx) 7477*2e9d4914SAndroid Build Coastguard Worker major=".$current" 7478*2e9d4914SAndroid Build Coastguard Worker versuffix=".$current" 7479*2e9d4914SAndroid Build Coastguard Worker ;; 7480*2e9d4914SAndroid Build Coastguard Worker 7481*2e9d4914SAndroid Build Coastguard Worker sunos) 7482*2e9d4914SAndroid Build Coastguard Worker major=".$current" 7483*2e9d4914SAndroid Build Coastguard Worker versuffix=".$current.$revision" 7484*2e9d4914SAndroid Build Coastguard Worker ;; 7485*2e9d4914SAndroid Build Coastguard Worker 7486*2e9d4914SAndroid Build Coastguard Worker windows) 7487*2e9d4914SAndroid Build Coastguard Worker # Use '-' rather than '.', since we only want one 7488*2e9d4914SAndroid Build Coastguard Worker # extension on DOS 8.3 filesystems. 7489*2e9d4914SAndroid Build Coastguard Worker func_arith $current - $age 7490*2e9d4914SAndroid Build Coastguard Worker major=$func_arith_result 7491*2e9d4914SAndroid Build Coastguard Worker versuffix="-$major" 7492*2e9d4914SAndroid Build Coastguard Worker ;; 7493*2e9d4914SAndroid Build Coastguard Worker 7494*2e9d4914SAndroid Build Coastguard Worker *) 7495*2e9d4914SAndroid Build Coastguard Worker func_fatal_configuration "unknown library version type \`$version_type'" 7496*2e9d4914SAndroid Build Coastguard Worker ;; 7497*2e9d4914SAndroid Build Coastguard Worker esac 7498*2e9d4914SAndroid Build Coastguard Worker 7499*2e9d4914SAndroid Build Coastguard Worker # Clear the version info if we defaulted, and they specified a release. 7500*2e9d4914SAndroid Build Coastguard Worker if test -z "$vinfo" && test -n "$release"; then 7501*2e9d4914SAndroid Build Coastguard Worker major= 7502*2e9d4914SAndroid Build Coastguard Worker case $version_type in 7503*2e9d4914SAndroid Build Coastguard Worker darwin) 7504*2e9d4914SAndroid Build Coastguard Worker # we can't check for "0.0" in archive_cmds due to quoting 7505*2e9d4914SAndroid Build Coastguard Worker # problems, so we reset it completely 7506*2e9d4914SAndroid Build Coastguard Worker verstring= 7507*2e9d4914SAndroid Build Coastguard Worker ;; 7508*2e9d4914SAndroid Build Coastguard Worker *) 7509*2e9d4914SAndroid Build Coastguard Worker verstring="0.0" 7510*2e9d4914SAndroid Build Coastguard Worker ;; 7511*2e9d4914SAndroid Build Coastguard Worker esac 7512*2e9d4914SAndroid Build Coastguard Worker if test "$need_version" = no; then 7513*2e9d4914SAndroid Build Coastguard Worker versuffix= 7514*2e9d4914SAndroid Build Coastguard Worker else 7515*2e9d4914SAndroid Build Coastguard Worker versuffix=".0.0" 7516*2e9d4914SAndroid Build Coastguard Worker fi 7517*2e9d4914SAndroid Build Coastguard Worker fi 7518*2e9d4914SAndroid Build Coastguard Worker 7519*2e9d4914SAndroid Build Coastguard Worker # Remove version info from name if versioning should be avoided 7520*2e9d4914SAndroid Build Coastguard Worker if test "$avoid_version" = yes && test "$need_version" = no; then 7521*2e9d4914SAndroid Build Coastguard Worker major= 7522*2e9d4914SAndroid Build Coastguard Worker versuffix= 7523*2e9d4914SAndroid Build Coastguard Worker verstring="" 7524*2e9d4914SAndroid Build Coastguard Worker fi 7525*2e9d4914SAndroid Build Coastguard Worker 7526*2e9d4914SAndroid Build Coastguard Worker # Check to see if the archive will have undefined symbols. 7527*2e9d4914SAndroid Build Coastguard Worker if test "$allow_undefined" = yes; then 7528*2e9d4914SAndroid Build Coastguard Worker if test "$allow_undefined_flag" = unsupported; then 7529*2e9d4914SAndroid Build Coastguard Worker func_warning "undefined symbols not allowed in $host shared libraries" 7530*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=no 7531*2e9d4914SAndroid Build Coastguard Worker build_old_libs=yes 7532*2e9d4914SAndroid Build Coastguard Worker fi 7533*2e9d4914SAndroid Build Coastguard Worker else 7534*2e9d4914SAndroid Build Coastguard Worker # Don't allow undefined symbols. 7535*2e9d4914SAndroid Build Coastguard Worker allow_undefined_flag="$no_undefined_flag" 7536*2e9d4914SAndroid Build Coastguard Worker fi 7537*2e9d4914SAndroid Build Coastguard Worker 7538*2e9d4914SAndroid Build Coastguard Worker fi 7539*2e9d4914SAndroid Build Coastguard Worker 7540*2e9d4914SAndroid Build Coastguard Worker func_generate_dlsyms "$libname" "$libname" "yes" 7541*2e9d4914SAndroid Build Coastguard Worker func_append libobjs " $symfileobj" 7542*2e9d4914SAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 7543*2e9d4914SAndroid Build Coastguard Worker 7544*2e9d4914SAndroid Build Coastguard Worker if test "$opt_mode" != relink; then 7545*2e9d4914SAndroid Build Coastguard Worker # Remove our outputs, but don't remove object files since they 7546*2e9d4914SAndroid Build Coastguard Worker # may have been created when compiling PIC objects. 7547*2e9d4914SAndroid Build Coastguard Worker removelist= 7548*2e9d4914SAndroid Build Coastguard Worker tempremovelist=`$ECHO "$output_objdir/*"` 7549*2e9d4914SAndroid Build Coastguard Worker for p in $tempremovelist; do 7550*2e9d4914SAndroid Build Coastguard Worker case $p in 7551*2e9d4914SAndroid Build Coastguard Worker *.$objext | *.gcno) 7552*2e9d4914SAndroid Build Coastguard Worker ;; 7553*2e9d4914SAndroid Build Coastguard Worker $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7554*2e9d4914SAndroid Build Coastguard Worker if test "X$precious_files_regex" != "X"; then 7555*2e9d4914SAndroid Build Coastguard Worker if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7556*2e9d4914SAndroid Build Coastguard Worker then 7557*2e9d4914SAndroid Build Coastguard Worker continue 7558*2e9d4914SAndroid Build Coastguard Worker fi 7559*2e9d4914SAndroid Build Coastguard Worker fi 7560*2e9d4914SAndroid Build Coastguard Worker func_append removelist " $p" 7561*2e9d4914SAndroid Build Coastguard Worker ;; 7562*2e9d4914SAndroid Build Coastguard Worker *) ;; 7563*2e9d4914SAndroid Build Coastguard Worker esac 7564*2e9d4914SAndroid Build Coastguard Worker done 7565*2e9d4914SAndroid Build Coastguard Worker test -n "$removelist" && \ 7566*2e9d4914SAndroid Build Coastguard Worker func_show_eval "${RM}r \$removelist" 7567*2e9d4914SAndroid Build Coastguard Worker fi 7568*2e9d4914SAndroid Build Coastguard Worker 7569*2e9d4914SAndroid Build Coastguard Worker # Now set the variables for building old libraries. 7570*2e9d4914SAndroid Build Coastguard Worker if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 7571*2e9d4914SAndroid Build Coastguard Worker func_append oldlibs " $output_objdir/$libname.$libext" 7572*2e9d4914SAndroid Build Coastguard Worker 7573*2e9d4914SAndroid Build Coastguard Worker # Transform .lo files to .o files. 7574*2e9d4914SAndroid Build Coastguard Worker oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7575*2e9d4914SAndroid Build Coastguard Worker fi 7576*2e9d4914SAndroid Build Coastguard Worker 7577*2e9d4914SAndroid Build Coastguard Worker # Eliminate all temporary directories. 7578*2e9d4914SAndroid Build Coastguard Worker #for path in $notinst_path; do 7579*2e9d4914SAndroid Build Coastguard Worker # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 7580*2e9d4914SAndroid Build Coastguard Worker # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 7581*2e9d4914SAndroid Build Coastguard Worker # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7582*2e9d4914SAndroid Build Coastguard Worker #done 7583*2e9d4914SAndroid Build Coastguard Worker 7584*2e9d4914SAndroid Build Coastguard Worker if test -n "$xrpath"; then 7585*2e9d4914SAndroid Build Coastguard Worker # If the user specified any rpath flags, then add them. 7586*2e9d4914SAndroid Build Coastguard Worker temp_xrpath= 7587*2e9d4914SAndroid Build Coastguard Worker for libdir in $xrpath; do 7588*2e9d4914SAndroid Build Coastguard Worker func_replace_sysroot "$libdir" 7589*2e9d4914SAndroid Build Coastguard Worker func_append temp_xrpath " -R$func_replace_sysroot_result" 7590*2e9d4914SAndroid Build Coastguard Worker case "$finalize_rpath " in 7591*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 7592*2e9d4914SAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 7593*2e9d4914SAndroid Build Coastguard Worker esac 7594*2e9d4914SAndroid Build Coastguard Worker done 7595*2e9d4914SAndroid Build Coastguard Worker if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7596*2e9d4914SAndroid Build Coastguard Worker dependency_libs="$temp_xrpath $dependency_libs" 7597*2e9d4914SAndroid Build Coastguard Worker fi 7598*2e9d4914SAndroid Build Coastguard Worker fi 7599*2e9d4914SAndroid Build Coastguard Worker 7600*2e9d4914SAndroid Build Coastguard Worker # Make sure dlfiles contains only unique files that won't be dlpreopened 7601*2e9d4914SAndroid Build Coastguard Worker old_dlfiles="$dlfiles" 7602*2e9d4914SAndroid Build Coastguard Worker dlfiles= 7603*2e9d4914SAndroid Build Coastguard Worker for lib in $old_dlfiles; do 7604*2e9d4914SAndroid Build Coastguard Worker case " $dlprefiles $dlfiles " in 7605*2e9d4914SAndroid Build Coastguard Worker *" $lib "*) ;; 7606*2e9d4914SAndroid Build Coastguard Worker *) func_append dlfiles " $lib" ;; 7607*2e9d4914SAndroid Build Coastguard Worker esac 7608*2e9d4914SAndroid Build Coastguard Worker done 7609*2e9d4914SAndroid Build Coastguard Worker 7610*2e9d4914SAndroid Build Coastguard Worker # Make sure dlprefiles contains only unique files 7611*2e9d4914SAndroid Build Coastguard Worker old_dlprefiles="$dlprefiles" 7612*2e9d4914SAndroid Build Coastguard Worker dlprefiles= 7613*2e9d4914SAndroid Build Coastguard Worker for lib in $old_dlprefiles; do 7614*2e9d4914SAndroid Build Coastguard Worker case "$dlprefiles " in 7615*2e9d4914SAndroid Build Coastguard Worker *" $lib "*) ;; 7616*2e9d4914SAndroid Build Coastguard Worker *) func_append dlprefiles " $lib" ;; 7617*2e9d4914SAndroid Build Coastguard Worker esac 7618*2e9d4914SAndroid Build Coastguard Worker done 7619*2e9d4914SAndroid Build Coastguard Worker 7620*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = yes; then 7621*2e9d4914SAndroid Build Coastguard Worker if test -n "$rpath"; then 7622*2e9d4914SAndroid Build Coastguard Worker case $host in 7623*2e9d4914SAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7624*2e9d4914SAndroid Build Coastguard Worker # these systems don't actually have a c library (as such)! 7625*2e9d4914SAndroid Build Coastguard Worker ;; 7626*2e9d4914SAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 7627*2e9d4914SAndroid Build Coastguard Worker # Rhapsody C library is in the System framework 7628*2e9d4914SAndroid Build Coastguard Worker func_append deplibs " System.ltframework" 7629*2e9d4914SAndroid Build Coastguard Worker ;; 7630*2e9d4914SAndroid Build Coastguard Worker *-*-netbsd*) 7631*2e9d4914SAndroid Build Coastguard Worker # Don't link with libc until the a.out ld.so is fixed. 7632*2e9d4914SAndroid Build Coastguard Worker ;; 7633*2e9d4914SAndroid Build Coastguard Worker *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7634*2e9d4914SAndroid Build Coastguard Worker # Do not include libc due to us having libc/libc_r. 7635*2e9d4914SAndroid Build Coastguard Worker ;; 7636*2e9d4914SAndroid Build Coastguard Worker *-*-sco3.2v5* | *-*-sco5v6*) 7637*2e9d4914SAndroid Build Coastguard Worker # Causes problems with __ctype 7638*2e9d4914SAndroid Build Coastguard Worker ;; 7639*2e9d4914SAndroid Build Coastguard Worker *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7640*2e9d4914SAndroid Build Coastguard Worker # Compiler inserts libc in the correct place for threads to work 7641*2e9d4914SAndroid Build Coastguard Worker ;; 7642*2e9d4914SAndroid Build Coastguard Worker *) 7643*2e9d4914SAndroid Build Coastguard Worker # Add libc to deplibs on all other systems if necessary. 7644*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_need_lc" = "yes"; then 7645*2e9d4914SAndroid Build Coastguard Worker func_append deplibs " -lc" 7646*2e9d4914SAndroid Build Coastguard Worker fi 7647*2e9d4914SAndroid Build Coastguard Worker ;; 7648*2e9d4914SAndroid Build Coastguard Worker esac 7649*2e9d4914SAndroid Build Coastguard Worker fi 7650*2e9d4914SAndroid Build Coastguard Worker 7651*2e9d4914SAndroid Build Coastguard Worker # Transform deplibs into only deplibs that can be linked in shared. 7652*2e9d4914SAndroid Build Coastguard Worker name_save=$name 7653*2e9d4914SAndroid Build Coastguard Worker libname_save=$libname 7654*2e9d4914SAndroid Build Coastguard Worker release_save=$release 7655*2e9d4914SAndroid Build Coastguard Worker versuffix_save=$versuffix 7656*2e9d4914SAndroid Build Coastguard Worker major_save=$major 7657*2e9d4914SAndroid Build Coastguard Worker # I'm not sure if I'm treating the release correctly. I think 7658*2e9d4914SAndroid Build Coastguard Worker # release should show up in the -l (ie -lgmp5) so we don't want to 7659*2e9d4914SAndroid Build Coastguard Worker # add it in twice. Is that correct? 7660*2e9d4914SAndroid Build Coastguard Worker release="" 7661*2e9d4914SAndroid Build Coastguard Worker versuffix="" 7662*2e9d4914SAndroid Build Coastguard Worker major="" 7663*2e9d4914SAndroid Build Coastguard Worker newdeplibs= 7664*2e9d4914SAndroid Build Coastguard Worker droppeddeps=no 7665*2e9d4914SAndroid Build Coastguard Worker case $deplibs_check_method in 7666*2e9d4914SAndroid Build Coastguard Worker pass_all) 7667*2e9d4914SAndroid Build Coastguard Worker # Don't check for shared/static. Everything works. 7668*2e9d4914SAndroid Build Coastguard Worker # This might be a little naive. We might want to check 7669*2e9d4914SAndroid Build Coastguard Worker # whether the library exists or not. But this is on 7670*2e9d4914SAndroid Build Coastguard Worker # osf3 & osf4 and I'm not really sure... Just 7671*2e9d4914SAndroid Build Coastguard Worker # implementing what was already the behavior. 7672*2e9d4914SAndroid Build Coastguard Worker newdeplibs=$deplibs 7673*2e9d4914SAndroid Build Coastguard Worker ;; 7674*2e9d4914SAndroid Build Coastguard Worker test_compile) 7675*2e9d4914SAndroid Build Coastguard Worker # This code stresses the "libraries are programs" paradigm to its 7676*2e9d4914SAndroid Build Coastguard Worker # limits. Maybe even breaks it. We compile a program, linking it 7677*2e9d4914SAndroid Build Coastguard Worker # against the deplibs as a proxy for the library. Then we can check 7678*2e9d4914SAndroid Build Coastguard Worker # whether they linked in statically or dynamically with ldd. 7679*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM conftest.c 7680*2e9d4914SAndroid Build Coastguard Worker cat > conftest.c <<EOF 7681*2e9d4914SAndroid Build Coastguard Worker int main() { return 0; } 7682*2e9d4914SAndroid Build Coastguard WorkerEOF 7683*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM conftest 7684*2e9d4914SAndroid Build Coastguard Worker if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7685*2e9d4914SAndroid Build Coastguard Worker ldd_output=`ldd conftest` 7686*2e9d4914SAndroid Build Coastguard Worker for i in $deplibs; do 7687*2e9d4914SAndroid Build Coastguard Worker case $i in 7688*2e9d4914SAndroid Build Coastguard Worker -l*) 7689*2e9d4914SAndroid Build Coastguard Worker func_stripname -l '' "$i" 7690*2e9d4914SAndroid Build Coastguard Worker name=$func_stripname_result 7691*2e9d4914SAndroid Build Coastguard Worker if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7692*2e9d4914SAndroid Build Coastguard Worker case " $predeps $postdeps " in 7693*2e9d4914SAndroid Build Coastguard Worker *" $i "*) 7694*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $i" 7695*2e9d4914SAndroid Build Coastguard Worker i="" 7696*2e9d4914SAndroid Build Coastguard Worker ;; 7697*2e9d4914SAndroid Build Coastguard Worker esac 7698*2e9d4914SAndroid Build Coastguard Worker fi 7699*2e9d4914SAndroid Build Coastguard Worker if test -n "$i" ; then 7700*2e9d4914SAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 7701*2e9d4914SAndroid Build Coastguard Worker deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7702*2e9d4914SAndroid Build Coastguard Worker set dummy $deplib_matches; shift 7703*2e9d4914SAndroid Build Coastguard Worker deplib_match=$1 7704*2e9d4914SAndroid Build Coastguard Worker if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7705*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $i" 7706*2e9d4914SAndroid Build Coastguard Worker else 7707*2e9d4914SAndroid Build Coastguard Worker droppeddeps=yes 7708*2e9d4914SAndroid Build Coastguard Worker echo 7709*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7710*2e9d4914SAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 7711*2e9d4914SAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 7712*2e9d4914SAndroid Build Coastguard Worker echo "*** shared version of the library, which I believe you do not have" 7713*2e9d4914SAndroid Build Coastguard Worker echo "*** because a test_compile did reveal that the linker did not use it for" 7714*2e9d4914SAndroid Build Coastguard Worker echo "*** its dynamic dependency list that programs get resolved with at runtime." 7715*2e9d4914SAndroid Build Coastguard Worker fi 7716*2e9d4914SAndroid Build Coastguard Worker fi 7717*2e9d4914SAndroid Build Coastguard Worker ;; 7718*2e9d4914SAndroid Build Coastguard Worker *) 7719*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $i" 7720*2e9d4914SAndroid Build Coastguard Worker ;; 7721*2e9d4914SAndroid Build Coastguard Worker esac 7722*2e9d4914SAndroid Build Coastguard Worker done 7723*2e9d4914SAndroid Build Coastguard Worker else 7724*2e9d4914SAndroid Build Coastguard Worker # Error occurred in the first compile. Let's try to salvage 7725*2e9d4914SAndroid Build Coastguard Worker # the situation: Compile a separate program for each library. 7726*2e9d4914SAndroid Build Coastguard Worker for i in $deplibs; do 7727*2e9d4914SAndroid Build Coastguard Worker case $i in 7728*2e9d4914SAndroid Build Coastguard Worker -l*) 7729*2e9d4914SAndroid Build Coastguard Worker func_stripname -l '' "$i" 7730*2e9d4914SAndroid Build Coastguard Worker name=$func_stripname_result 7731*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM conftest 7732*2e9d4914SAndroid Build Coastguard Worker if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7733*2e9d4914SAndroid Build Coastguard Worker ldd_output=`ldd conftest` 7734*2e9d4914SAndroid Build Coastguard Worker if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7735*2e9d4914SAndroid Build Coastguard Worker case " $predeps $postdeps " in 7736*2e9d4914SAndroid Build Coastguard Worker *" $i "*) 7737*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $i" 7738*2e9d4914SAndroid Build Coastguard Worker i="" 7739*2e9d4914SAndroid Build Coastguard Worker ;; 7740*2e9d4914SAndroid Build Coastguard Worker esac 7741*2e9d4914SAndroid Build Coastguard Worker fi 7742*2e9d4914SAndroid Build Coastguard Worker if test -n "$i" ; then 7743*2e9d4914SAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 7744*2e9d4914SAndroid Build Coastguard Worker deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7745*2e9d4914SAndroid Build Coastguard Worker set dummy $deplib_matches; shift 7746*2e9d4914SAndroid Build Coastguard Worker deplib_match=$1 7747*2e9d4914SAndroid Build Coastguard Worker if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7748*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $i" 7749*2e9d4914SAndroid Build Coastguard Worker else 7750*2e9d4914SAndroid Build Coastguard Worker droppeddeps=yes 7751*2e9d4914SAndroid Build Coastguard Worker echo 7752*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7753*2e9d4914SAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 7754*2e9d4914SAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 7755*2e9d4914SAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 7756*2e9d4914SAndroid Build Coastguard Worker echo "*** because a test_compile did reveal that the linker did not use this one" 7757*2e9d4914SAndroid Build Coastguard Worker echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7758*2e9d4914SAndroid Build Coastguard Worker fi 7759*2e9d4914SAndroid Build Coastguard Worker fi 7760*2e9d4914SAndroid Build Coastguard Worker else 7761*2e9d4914SAndroid Build Coastguard Worker droppeddeps=yes 7762*2e9d4914SAndroid Build Coastguard Worker echo 7763*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 7764*2e9d4914SAndroid Build Coastguard Worker echo "*** make it link in! You will probably need to install it or some" 7765*2e9d4914SAndroid Build Coastguard Worker echo "*** library that it depends on before this library will be fully" 7766*2e9d4914SAndroid Build Coastguard Worker echo "*** functional. Installing it before continuing would be even better." 7767*2e9d4914SAndroid Build Coastguard Worker fi 7768*2e9d4914SAndroid Build Coastguard Worker ;; 7769*2e9d4914SAndroid Build Coastguard Worker *) 7770*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $i" 7771*2e9d4914SAndroid Build Coastguard Worker ;; 7772*2e9d4914SAndroid Build Coastguard Worker esac 7773*2e9d4914SAndroid Build Coastguard Worker done 7774*2e9d4914SAndroid Build Coastguard Worker fi 7775*2e9d4914SAndroid Build Coastguard Worker ;; 7776*2e9d4914SAndroid Build Coastguard Worker file_magic*) 7777*2e9d4914SAndroid Build Coastguard Worker set dummy $deplibs_check_method; shift 7778*2e9d4914SAndroid Build Coastguard Worker file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7779*2e9d4914SAndroid Build Coastguard Worker for a_deplib in $deplibs; do 7780*2e9d4914SAndroid Build Coastguard Worker case $a_deplib in 7781*2e9d4914SAndroid Build Coastguard Worker -l*) 7782*2e9d4914SAndroid Build Coastguard Worker func_stripname -l '' "$a_deplib" 7783*2e9d4914SAndroid Build Coastguard Worker name=$func_stripname_result 7784*2e9d4914SAndroid Build Coastguard Worker if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7785*2e9d4914SAndroid Build Coastguard Worker case " $predeps $postdeps " in 7786*2e9d4914SAndroid Build Coastguard Worker *" $a_deplib "*) 7787*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 7788*2e9d4914SAndroid Build Coastguard Worker a_deplib="" 7789*2e9d4914SAndroid Build Coastguard Worker ;; 7790*2e9d4914SAndroid Build Coastguard Worker esac 7791*2e9d4914SAndroid Build Coastguard Worker fi 7792*2e9d4914SAndroid Build Coastguard Worker if test -n "$a_deplib" ; then 7793*2e9d4914SAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 7794*2e9d4914SAndroid Build Coastguard Worker if test -n "$file_magic_glob"; then 7795*2e9d4914SAndroid Build Coastguard Worker libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 7796*2e9d4914SAndroid Build Coastguard Worker else 7797*2e9d4914SAndroid Build Coastguard Worker libnameglob=$libname 7798*2e9d4914SAndroid Build Coastguard Worker fi 7799*2e9d4914SAndroid Build Coastguard Worker test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7800*2e9d4914SAndroid Build Coastguard Worker for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7801*2e9d4914SAndroid Build Coastguard Worker if test "$want_nocaseglob" = yes; then 7802*2e9d4914SAndroid Build Coastguard Worker shopt -s nocaseglob 7803*2e9d4914SAndroid Build Coastguard Worker potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7804*2e9d4914SAndroid Build Coastguard Worker $nocaseglob 7805*2e9d4914SAndroid Build Coastguard Worker else 7806*2e9d4914SAndroid Build Coastguard Worker potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7807*2e9d4914SAndroid Build Coastguard Worker fi 7808*2e9d4914SAndroid Build Coastguard Worker for potent_lib in $potential_libs; do 7809*2e9d4914SAndroid Build Coastguard Worker # Follow soft links. 7810*2e9d4914SAndroid Build Coastguard Worker if ls -lLd "$potent_lib" 2>/dev/null | 7811*2e9d4914SAndroid Build Coastguard Worker $GREP " -> " >/dev/null; then 7812*2e9d4914SAndroid Build Coastguard Worker continue 7813*2e9d4914SAndroid Build Coastguard Worker fi 7814*2e9d4914SAndroid Build Coastguard Worker # The statement above tries to avoid entering an 7815*2e9d4914SAndroid Build Coastguard Worker # endless loop below, in case of cyclic links. 7816*2e9d4914SAndroid Build Coastguard Worker # We might still enter an endless loop, since a link 7817*2e9d4914SAndroid Build Coastguard Worker # loop can be closed while we follow links, 7818*2e9d4914SAndroid Build Coastguard Worker # but so what? 7819*2e9d4914SAndroid Build Coastguard Worker potlib="$potent_lib" 7820*2e9d4914SAndroid Build Coastguard Worker while test -h "$potlib" 2>/dev/null; do 7821*2e9d4914SAndroid Build Coastguard Worker potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7822*2e9d4914SAndroid Build Coastguard Worker case $potliblink in 7823*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 7824*2e9d4914SAndroid Build Coastguard Worker *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7825*2e9d4914SAndroid Build Coastguard Worker esac 7826*2e9d4914SAndroid Build Coastguard Worker done 7827*2e9d4914SAndroid Build Coastguard Worker if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7828*2e9d4914SAndroid Build Coastguard Worker $SED -e 10q | 7829*2e9d4914SAndroid Build Coastguard Worker $EGREP "$file_magic_regex" > /dev/null; then 7830*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 7831*2e9d4914SAndroid Build Coastguard Worker a_deplib="" 7832*2e9d4914SAndroid Build Coastguard Worker break 2 7833*2e9d4914SAndroid Build Coastguard Worker fi 7834*2e9d4914SAndroid Build Coastguard Worker done 7835*2e9d4914SAndroid Build Coastguard Worker done 7836*2e9d4914SAndroid Build Coastguard Worker fi 7837*2e9d4914SAndroid Build Coastguard Worker if test -n "$a_deplib" ; then 7838*2e9d4914SAndroid Build Coastguard Worker droppeddeps=yes 7839*2e9d4914SAndroid Build Coastguard Worker echo 7840*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7841*2e9d4914SAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 7842*2e9d4914SAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 7843*2e9d4914SAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 7844*2e9d4914SAndroid Build Coastguard Worker echo "*** because I did check the linker path looking for a file starting" 7845*2e9d4914SAndroid Build Coastguard Worker if test -z "$potlib" ; then 7846*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7847*2e9d4914SAndroid Build Coastguard Worker else 7848*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** with $libname and none of the candidates passed a file format test" 7849*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** using a file magic. Last file checked: $potlib" 7850*2e9d4914SAndroid Build Coastguard Worker fi 7851*2e9d4914SAndroid Build Coastguard Worker fi 7852*2e9d4914SAndroid Build Coastguard Worker ;; 7853*2e9d4914SAndroid Build Coastguard Worker *) 7854*2e9d4914SAndroid Build Coastguard Worker # Add a -L argument. 7855*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 7856*2e9d4914SAndroid Build Coastguard Worker ;; 7857*2e9d4914SAndroid Build Coastguard Worker esac 7858*2e9d4914SAndroid Build Coastguard Worker done # Gone through all deplibs. 7859*2e9d4914SAndroid Build Coastguard Worker ;; 7860*2e9d4914SAndroid Build Coastguard Worker match_pattern*) 7861*2e9d4914SAndroid Build Coastguard Worker set dummy $deplibs_check_method; shift 7862*2e9d4914SAndroid Build Coastguard Worker match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7863*2e9d4914SAndroid Build Coastguard Worker for a_deplib in $deplibs; do 7864*2e9d4914SAndroid Build Coastguard Worker case $a_deplib in 7865*2e9d4914SAndroid Build Coastguard Worker -l*) 7866*2e9d4914SAndroid Build Coastguard Worker func_stripname -l '' "$a_deplib" 7867*2e9d4914SAndroid Build Coastguard Worker name=$func_stripname_result 7868*2e9d4914SAndroid Build Coastguard Worker if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7869*2e9d4914SAndroid Build Coastguard Worker case " $predeps $postdeps " in 7870*2e9d4914SAndroid Build Coastguard Worker *" $a_deplib "*) 7871*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 7872*2e9d4914SAndroid Build Coastguard Worker a_deplib="" 7873*2e9d4914SAndroid Build Coastguard Worker ;; 7874*2e9d4914SAndroid Build Coastguard Worker esac 7875*2e9d4914SAndroid Build Coastguard Worker fi 7876*2e9d4914SAndroid Build Coastguard Worker if test -n "$a_deplib" ; then 7877*2e9d4914SAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 7878*2e9d4914SAndroid Build Coastguard Worker for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7879*2e9d4914SAndroid Build Coastguard Worker potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7880*2e9d4914SAndroid Build Coastguard Worker for potent_lib in $potential_libs; do 7881*2e9d4914SAndroid Build Coastguard Worker potlib="$potent_lib" # see symlink-check above in file_magic test 7882*2e9d4914SAndroid Build Coastguard Worker if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7883*2e9d4914SAndroid Build Coastguard Worker $EGREP "$match_pattern_regex" > /dev/null; then 7884*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 7885*2e9d4914SAndroid Build Coastguard Worker a_deplib="" 7886*2e9d4914SAndroid Build Coastguard Worker break 2 7887*2e9d4914SAndroid Build Coastguard Worker fi 7888*2e9d4914SAndroid Build Coastguard Worker done 7889*2e9d4914SAndroid Build Coastguard Worker done 7890*2e9d4914SAndroid Build Coastguard Worker fi 7891*2e9d4914SAndroid Build Coastguard Worker if test -n "$a_deplib" ; then 7892*2e9d4914SAndroid Build Coastguard Worker droppeddeps=yes 7893*2e9d4914SAndroid Build Coastguard Worker echo 7894*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7895*2e9d4914SAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 7896*2e9d4914SAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 7897*2e9d4914SAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 7898*2e9d4914SAndroid Build Coastguard Worker echo "*** because I did check the linker path looking for a file starting" 7899*2e9d4914SAndroid Build Coastguard Worker if test -z "$potlib" ; then 7900*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7901*2e9d4914SAndroid Build Coastguard Worker else 7902*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** with $libname and none of the candidates passed a file format test" 7903*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** using a regex pattern. Last file checked: $potlib" 7904*2e9d4914SAndroid Build Coastguard Worker fi 7905*2e9d4914SAndroid Build Coastguard Worker fi 7906*2e9d4914SAndroid Build Coastguard Worker ;; 7907*2e9d4914SAndroid Build Coastguard Worker *) 7908*2e9d4914SAndroid Build Coastguard Worker # Add a -L argument. 7909*2e9d4914SAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 7910*2e9d4914SAndroid Build Coastguard Worker ;; 7911*2e9d4914SAndroid Build Coastguard Worker esac 7912*2e9d4914SAndroid Build Coastguard Worker done # Gone through all deplibs. 7913*2e9d4914SAndroid Build Coastguard Worker ;; 7914*2e9d4914SAndroid Build Coastguard Worker none | unknown | *) 7915*2e9d4914SAndroid Build Coastguard Worker newdeplibs="" 7916*2e9d4914SAndroid Build Coastguard Worker tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7917*2e9d4914SAndroid Build Coastguard Worker if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7918*2e9d4914SAndroid Build Coastguard Worker for i in $predeps $postdeps ; do 7919*2e9d4914SAndroid Build Coastguard Worker # can't use Xsed below, because $i might contain '/' 7920*2e9d4914SAndroid Build Coastguard Worker tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7921*2e9d4914SAndroid Build Coastguard Worker done 7922*2e9d4914SAndroid Build Coastguard Worker fi 7923*2e9d4914SAndroid Build Coastguard Worker case $tmp_deplibs in 7924*2e9d4914SAndroid Build Coastguard Worker *[!\ \ ]*) 7925*2e9d4914SAndroid Build Coastguard Worker echo 7926*2e9d4914SAndroid Build Coastguard Worker if test "X$deplibs_check_method" = "Xnone"; then 7927*2e9d4914SAndroid Build Coastguard Worker echo "*** Warning: inter-library dependencies are not supported in this platform." 7928*2e9d4914SAndroid Build Coastguard Worker else 7929*2e9d4914SAndroid Build Coastguard Worker echo "*** Warning: inter-library dependencies are not known to be supported." 7930*2e9d4914SAndroid Build Coastguard Worker fi 7931*2e9d4914SAndroid Build Coastguard Worker echo "*** All declared inter-library dependencies are being dropped." 7932*2e9d4914SAndroid Build Coastguard Worker droppeddeps=yes 7933*2e9d4914SAndroid Build Coastguard Worker ;; 7934*2e9d4914SAndroid Build Coastguard Worker esac 7935*2e9d4914SAndroid Build Coastguard Worker ;; 7936*2e9d4914SAndroid Build Coastguard Worker esac 7937*2e9d4914SAndroid Build Coastguard Worker versuffix=$versuffix_save 7938*2e9d4914SAndroid Build Coastguard Worker major=$major_save 7939*2e9d4914SAndroid Build Coastguard Worker release=$release_save 7940*2e9d4914SAndroid Build Coastguard Worker libname=$libname_save 7941*2e9d4914SAndroid Build Coastguard Worker name=$name_save 7942*2e9d4914SAndroid Build Coastguard Worker 7943*2e9d4914SAndroid Build Coastguard Worker case $host in 7944*2e9d4914SAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 7945*2e9d4914SAndroid Build Coastguard Worker # On Rhapsody replace the C library with the System framework 7946*2e9d4914SAndroid Build Coastguard Worker newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7947*2e9d4914SAndroid Build Coastguard Worker ;; 7948*2e9d4914SAndroid Build Coastguard Worker esac 7949*2e9d4914SAndroid Build Coastguard Worker 7950*2e9d4914SAndroid Build Coastguard Worker if test "$droppeddeps" = yes; then 7951*2e9d4914SAndroid Build Coastguard Worker if test "$module" = yes; then 7952*2e9d4914SAndroid Build Coastguard Worker echo 7953*2e9d4914SAndroid Build Coastguard Worker echo "*** Warning: libtool could not satisfy all declared inter-library" 7954*2e9d4914SAndroid Build Coastguard Worker $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7955*2e9d4914SAndroid Build Coastguard Worker echo "*** a static module, that should work as long as the dlopening" 7956*2e9d4914SAndroid Build Coastguard Worker echo "*** application is linked with the -dlopen flag." 7957*2e9d4914SAndroid Build Coastguard Worker if test -z "$global_symbol_pipe"; then 7958*2e9d4914SAndroid Build Coastguard Worker echo 7959*2e9d4914SAndroid Build Coastguard Worker echo "*** However, this would only work if libtool was able to extract symbol" 7960*2e9d4914SAndroid Build Coastguard Worker echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7961*2e9d4914SAndroid Build Coastguard Worker echo "*** not find such a program. So, this module is probably useless." 7962*2e9d4914SAndroid Build Coastguard Worker echo "*** \`nm' from GNU binutils and a full rebuild may help." 7963*2e9d4914SAndroid Build Coastguard Worker fi 7964*2e9d4914SAndroid Build Coastguard Worker if test "$build_old_libs" = no; then 7965*2e9d4914SAndroid Build Coastguard Worker oldlibs="$output_objdir/$libname.$libext" 7966*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=module 7967*2e9d4914SAndroid Build Coastguard Worker build_old_libs=yes 7968*2e9d4914SAndroid Build Coastguard Worker else 7969*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=no 7970*2e9d4914SAndroid Build Coastguard Worker fi 7971*2e9d4914SAndroid Build Coastguard Worker else 7972*2e9d4914SAndroid Build Coastguard Worker echo "*** The inter-library dependencies that have been dropped here will be" 7973*2e9d4914SAndroid Build Coastguard Worker echo "*** automatically added whenever a program is linked with this library" 7974*2e9d4914SAndroid Build Coastguard Worker echo "*** or is declared to -dlopen it." 7975*2e9d4914SAndroid Build Coastguard Worker 7976*2e9d4914SAndroid Build Coastguard Worker if test "$allow_undefined" = no; then 7977*2e9d4914SAndroid Build Coastguard Worker echo 7978*2e9d4914SAndroid Build Coastguard Worker echo "*** Since this library must not contain undefined symbols," 7979*2e9d4914SAndroid Build Coastguard Worker echo "*** because either the platform does not support them or" 7980*2e9d4914SAndroid Build Coastguard Worker echo "*** it was explicitly requested with -no-undefined," 7981*2e9d4914SAndroid Build Coastguard Worker echo "*** libtool will only create a static version of it." 7982*2e9d4914SAndroid Build Coastguard Worker if test "$build_old_libs" = no; then 7983*2e9d4914SAndroid Build Coastguard Worker oldlibs="$output_objdir/$libname.$libext" 7984*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=module 7985*2e9d4914SAndroid Build Coastguard Worker build_old_libs=yes 7986*2e9d4914SAndroid Build Coastguard Worker else 7987*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=no 7988*2e9d4914SAndroid Build Coastguard Worker fi 7989*2e9d4914SAndroid Build Coastguard Worker fi 7990*2e9d4914SAndroid Build Coastguard Worker fi 7991*2e9d4914SAndroid Build Coastguard Worker fi 7992*2e9d4914SAndroid Build Coastguard Worker # Done checking deplibs! 7993*2e9d4914SAndroid Build Coastguard Worker deplibs=$newdeplibs 7994*2e9d4914SAndroid Build Coastguard Worker fi 7995*2e9d4914SAndroid Build Coastguard Worker # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7996*2e9d4914SAndroid Build Coastguard Worker case $host in 7997*2e9d4914SAndroid Build Coastguard Worker *-*-darwin*) 7998*2e9d4914SAndroid Build Coastguard Worker newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7999*2e9d4914SAndroid Build Coastguard Worker new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8000*2e9d4914SAndroid Build Coastguard Worker deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8001*2e9d4914SAndroid Build Coastguard Worker ;; 8002*2e9d4914SAndroid Build Coastguard Worker esac 8003*2e9d4914SAndroid Build Coastguard Worker 8004*2e9d4914SAndroid Build Coastguard Worker # move library search paths that coincide with paths to not yet 8005*2e9d4914SAndroid Build Coastguard Worker # installed libraries to the beginning of the library search list 8006*2e9d4914SAndroid Build Coastguard Worker new_libs= 8007*2e9d4914SAndroid Build Coastguard Worker for path in $notinst_path; do 8008*2e9d4914SAndroid Build Coastguard Worker case " $new_libs " in 8009*2e9d4914SAndroid Build Coastguard Worker *" -L$path/$objdir "*) ;; 8010*2e9d4914SAndroid Build Coastguard Worker *) 8011*2e9d4914SAndroid Build Coastguard Worker case " $deplibs " in 8012*2e9d4914SAndroid Build Coastguard Worker *" -L$path/$objdir "*) 8013*2e9d4914SAndroid Build Coastguard Worker func_append new_libs " -L$path/$objdir" ;; 8014*2e9d4914SAndroid Build Coastguard Worker esac 8015*2e9d4914SAndroid Build Coastguard Worker ;; 8016*2e9d4914SAndroid Build Coastguard Worker esac 8017*2e9d4914SAndroid Build Coastguard Worker done 8018*2e9d4914SAndroid Build Coastguard Worker for deplib in $deplibs; do 8019*2e9d4914SAndroid Build Coastguard Worker case $deplib in 8020*2e9d4914SAndroid Build Coastguard Worker -L*) 8021*2e9d4914SAndroid Build Coastguard Worker case " $new_libs " in 8022*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) ;; 8023*2e9d4914SAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 8024*2e9d4914SAndroid Build Coastguard Worker esac 8025*2e9d4914SAndroid Build Coastguard Worker ;; 8026*2e9d4914SAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 8027*2e9d4914SAndroid Build Coastguard Worker esac 8028*2e9d4914SAndroid Build Coastguard Worker done 8029*2e9d4914SAndroid Build Coastguard Worker deplibs="$new_libs" 8030*2e9d4914SAndroid Build Coastguard Worker 8031*2e9d4914SAndroid Build Coastguard Worker # All the library-specific variables (install_libdir is set above). 8032*2e9d4914SAndroid Build Coastguard Worker library_names= 8033*2e9d4914SAndroid Build Coastguard Worker old_library= 8034*2e9d4914SAndroid Build Coastguard Worker dlname= 8035*2e9d4914SAndroid Build Coastguard Worker 8036*2e9d4914SAndroid Build Coastguard Worker # Test again, we may have decided not to build it any more 8037*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = yes; then 8038*2e9d4914SAndroid Build Coastguard Worker # Remove ${wl} instances when linking with ld. 8039*2e9d4914SAndroid Build Coastguard Worker # FIXME: should test the right _cmds variable. 8040*2e9d4914SAndroid Build Coastguard Worker case $archive_cmds in 8041*2e9d4914SAndroid Build Coastguard Worker *\$LD\ *) wl= ;; 8042*2e9d4914SAndroid Build Coastguard Worker esac 8043*2e9d4914SAndroid Build Coastguard Worker if test "$hardcode_into_libs" = yes; then 8044*2e9d4914SAndroid Build Coastguard Worker # Hardcode the library paths 8045*2e9d4914SAndroid Build Coastguard Worker hardcode_libdirs= 8046*2e9d4914SAndroid Build Coastguard Worker dep_rpath= 8047*2e9d4914SAndroid Build Coastguard Worker rpath="$finalize_rpath" 8048*2e9d4914SAndroid Build Coastguard Worker test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8049*2e9d4914SAndroid Build Coastguard Worker for libdir in $rpath; do 8050*2e9d4914SAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 8051*2e9d4914SAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator"; then 8052*2e9d4914SAndroid Build Coastguard Worker func_replace_sysroot "$libdir" 8053*2e9d4914SAndroid Build Coastguard Worker libdir=$func_replace_sysroot_result 8054*2e9d4914SAndroid Build Coastguard Worker if test -z "$hardcode_libdirs"; then 8055*2e9d4914SAndroid Build Coastguard Worker hardcode_libdirs="$libdir" 8056*2e9d4914SAndroid Build Coastguard Worker else 8057*2e9d4914SAndroid Build Coastguard Worker # Just accumulate the unique libdirs. 8058*2e9d4914SAndroid Build Coastguard Worker case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8059*2e9d4914SAndroid Build Coastguard Worker *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8060*2e9d4914SAndroid Build Coastguard Worker ;; 8061*2e9d4914SAndroid Build Coastguard Worker *) 8062*2e9d4914SAndroid Build Coastguard Worker func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8063*2e9d4914SAndroid Build Coastguard Worker ;; 8064*2e9d4914SAndroid Build Coastguard Worker esac 8065*2e9d4914SAndroid Build Coastguard Worker fi 8066*2e9d4914SAndroid Build Coastguard Worker else 8067*2e9d4914SAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 8068*2e9d4914SAndroid Build Coastguard Worker func_append dep_rpath " $flag" 8069*2e9d4914SAndroid Build Coastguard Worker fi 8070*2e9d4914SAndroid Build Coastguard Worker elif test -n "$runpath_var"; then 8071*2e9d4914SAndroid Build Coastguard Worker case "$perm_rpath " in 8072*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 8073*2e9d4914SAndroid Build Coastguard Worker *) func_append perm_rpath " $libdir" ;; 8074*2e9d4914SAndroid Build Coastguard Worker esac 8075*2e9d4914SAndroid Build Coastguard Worker fi 8076*2e9d4914SAndroid Build Coastguard Worker done 8077*2e9d4914SAndroid Build Coastguard Worker # Substitute the hardcoded libdirs into the rpath. 8078*2e9d4914SAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator" && 8079*2e9d4914SAndroid Build Coastguard Worker test -n "$hardcode_libdirs"; then 8080*2e9d4914SAndroid Build Coastguard Worker libdir="$hardcode_libdirs" 8081*2e9d4914SAndroid Build Coastguard Worker eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8082*2e9d4914SAndroid Build Coastguard Worker fi 8083*2e9d4914SAndroid Build Coastguard Worker if test -n "$runpath_var" && test -n "$perm_rpath"; then 8084*2e9d4914SAndroid Build Coastguard Worker # We should set the runpath_var. 8085*2e9d4914SAndroid Build Coastguard Worker rpath= 8086*2e9d4914SAndroid Build Coastguard Worker for dir in $perm_rpath; do 8087*2e9d4914SAndroid Build Coastguard Worker func_append rpath "$dir:" 8088*2e9d4914SAndroid Build Coastguard Worker done 8089*2e9d4914SAndroid Build Coastguard Worker eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8090*2e9d4914SAndroid Build Coastguard Worker fi 8091*2e9d4914SAndroid Build Coastguard Worker test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8092*2e9d4914SAndroid Build Coastguard Worker fi 8093*2e9d4914SAndroid Build Coastguard Worker 8094*2e9d4914SAndroid Build Coastguard Worker shlibpath="$finalize_shlibpath" 8095*2e9d4914SAndroid Build Coastguard Worker test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8096*2e9d4914SAndroid Build Coastguard Worker if test -n "$shlibpath"; then 8097*2e9d4914SAndroid Build Coastguard Worker eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8098*2e9d4914SAndroid Build Coastguard Worker fi 8099*2e9d4914SAndroid Build Coastguard Worker 8100*2e9d4914SAndroid Build Coastguard Worker # Get the real and link names of the library. 8101*2e9d4914SAndroid Build Coastguard Worker eval shared_ext=\"$shrext_cmds\" 8102*2e9d4914SAndroid Build Coastguard Worker eval library_names=\"$library_names_spec\" 8103*2e9d4914SAndroid Build Coastguard Worker set dummy $library_names 8104*2e9d4914SAndroid Build Coastguard Worker shift 8105*2e9d4914SAndroid Build Coastguard Worker realname="$1" 8106*2e9d4914SAndroid Build Coastguard Worker shift 8107*2e9d4914SAndroid Build Coastguard Worker 8108*2e9d4914SAndroid Build Coastguard Worker if test -n "$soname_spec"; then 8109*2e9d4914SAndroid Build Coastguard Worker eval soname=\"$soname_spec\" 8110*2e9d4914SAndroid Build Coastguard Worker else 8111*2e9d4914SAndroid Build Coastguard Worker soname="$realname" 8112*2e9d4914SAndroid Build Coastguard Worker fi 8113*2e9d4914SAndroid Build Coastguard Worker if test -z "$dlname"; then 8114*2e9d4914SAndroid Build Coastguard Worker dlname=$soname 8115*2e9d4914SAndroid Build Coastguard Worker fi 8116*2e9d4914SAndroid Build Coastguard Worker 8117*2e9d4914SAndroid Build Coastguard Worker lib="$output_objdir/$realname" 8118*2e9d4914SAndroid Build Coastguard Worker linknames= 8119*2e9d4914SAndroid Build Coastguard Worker for link 8120*2e9d4914SAndroid Build Coastguard Worker do 8121*2e9d4914SAndroid Build Coastguard Worker func_append linknames " $link" 8122*2e9d4914SAndroid Build Coastguard Worker done 8123*2e9d4914SAndroid Build Coastguard Worker 8124*2e9d4914SAndroid Build Coastguard Worker # Use standard objects if they are pic 8125*2e9d4914SAndroid Build Coastguard Worker test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8126*2e9d4914SAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 8127*2e9d4914SAndroid Build Coastguard Worker 8128*2e9d4914SAndroid Build Coastguard Worker delfiles= 8129*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$include_expsyms"; then 8130*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8131*2e9d4914SAndroid Build Coastguard Worker export_symbols="$output_objdir/$libname.uexp" 8132*2e9d4914SAndroid Build Coastguard Worker func_append delfiles " $export_symbols" 8133*2e9d4914SAndroid Build Coastguard Worker fi 8134*2e9d4914SAndroid Build Coastguard Worker 8135*2e9d4914SAndroid Build Coastguard Worker orig_export_symbols= 8136*2e9d4914SAndroid Build Coastguard Worker case $host_os in 8137*2e9d4914SAndroid Build Coastguard Worker cygwin* | mingw* | cegcc*) 8138*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8139*2e9d4914SAndroid Build Coastguard Worker # exporting using user supplied symfile 8140*2e9d4914SAndroid Build Coastguard Worker if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8141*2e9d4914SAndroid Build Coastguard Worker # and it's NOT already a .def file. Must figure out 8142*2e9d4914SAndroid Build Coastguard Worker # which of the given symbols are data symbols and tag 8143*2e9d4914SAndroid Build Coastguard Worker # them as such. So, trigger use of export_symbols_cmds. 8144*2e9d4914SAndroid Build Coastguard Worker # export_symbols gets reassigned inside the "prepare 8145*2e9d4914SAndroid Build Coastguard Worker # the list of exported symbols" if statement, so the 8146*2e9d4914SAndroid Build Coastguard Worker # include_expsyms logic still works. 8147*2e9d4914SAndroid Build Coastguard Worker orig_export_symbols="$export_symbols" 8148*2e9d4914SAndroid Build Coastguard Worker export_symbols= 8149*2e9d4914SAndroid Build Coastguard Worker always_export_symbols=yes 8150*2e9d4914SAndroid Build Coastguard Worker fi 8151*2e9d4914SAndroid Build Coastguard Worker fi 8152*2e9d4914SAndroid Build Coastguard Worker ;; 8153*2e9d4914SAndroid Build Coastguard Worker esac 8154*2e9d4914SAndroid Build Coastguard Worker 8155*2e9d4914SAndroid Build Coastguard Worker # Prepare the list of exported symbols 8156*2e9d4914SAndroid Build Coastguard Worker if test -z "$export_symbols"; then 8157*2e9d4914SAndroid Build Coastguard Worker if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8158*2e9d4914SAndroid Build Coastguard Worker func_verbose "generating symbol list for \`$libname.la'" 8159*2e9d4914SAndroid Build Coastguard Worker export_symbols="$output_objdir/$libname.exp" 8160*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM $export_symbols 8161*2e9d4914SAndroid Build Coastguard Worker cmds=$export_symbols_cmds 8162*2e9d4914SAndroid Build Coastguard Worker save_ifs="$IFS"; IFS='~' 8163*2e9d4914SAndroid Build Coastguard Worker for cmd1 in $cmds; do 8164*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 8165*2e9d4914SAndroid Build Coastguard Worker # Take the normal branch if the nm_file_list_spec branch 8166*2e9d4914SAndroid Build Coastguard Worker # doesn't work or if tool conversion is not needed. 8167*2e9d4914SAndroid Build Coastguard Worker case $nm_file_list_spec~$to_tool_file_cmd in 8168*2e9d4914SAndroid Build Coastguard Worker *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 8169*2e9d4914SAndroid Build Coastguard Worker try_normal_branch=yes 8170*2e9d4914SAndroid Build Coastguard Worker eval cmd=\"$cmd1\" 8171*2e9d4914SAndroid Build Coastguard Worker func_len " $cmd" 8172*2e9d4914SAndroid Build Coastguard Worker len=$func_len_result 8173*2e9d4914SAndroid Build Coastguard Worker ;; 8174*2e9d4914SAndroid Build Coastguard Worker *) 8175*2e9d4914SAndroid Build Coastguard Worker try_normal_branch=no 8176*2e9d4914SAndroid Build Coastguard Worker ;; 8177*2e9d4914SAndroid Build Coastguard Worker esac 8178*2e9d4914SAndroid Build Coastguard Worker if test "$try_normal_branch" = yes \ 8179*2e9d4914SAndroid Build Coastguard Worker && { test "$len" -lt "$max_cmd_len" \ 8180*2e9d4914SAndroid Build Coastguard Worker || test "$max_cmd_len" -le -1; } 8181*2e9d4914SAndroid Build Coastguard Worker then 8182*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$cmd" 'exit $?' 8183*2e9d4914SAndroid Build Coastguard Worker skipped_export=false 8184*2e9d4914SAndroid Build Coastguard Worker elif test -n "$nm_file_list_spec"; then 8185*2e9d4914SAndroid Build Coastguard Worker func_basename "$output" 8186*2e9d4914SAndroid Build Coastguard Worker output_la=$func_basename_result 8187*2e9d4914SAndroid Build Coastguard Worker save_libobjs=$libobjs 8188*2e9d4914SAndroid Build Coastguard Worker save_output=$output 8189*2e9d4914SAndroid Build Coastguard Worker output=${output_objdir}/${output_la}.nm 8190*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$output" 8191*2e9d4914SAndroid Build Coastguard Worker libobjs=$nm_file_list_spec$func_to_tool_file_result 8192*2e9d4914SAndroid Build Coastguard Worker func_append delfiles " $output" 8193*2e9d4914SAndroid Build Coastguard Worker func_verbose "creating $NM input file list: $output" 8194*2e9d4914SAndroid Build Coastguard Worker for obj in $save_libobjs; do 8195*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$obj" 8196*2e9d4914SAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" 8197*2e9d4914SAndroid Build Coastguard Worker done > "$output" 8198*2e9d4914SAndroid Build Coastguard Worker eval cmd=\"$cmd1\" 8199*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$cmd" 'exit $?' 8200*2e9d4914SAndroid Build Coastguard Worker output=$save_output 8201*2e9d4914SAndroid Build Coastguard Worker libobjs=$save_libobjs 8202*2e9d4914SAndroid Build Coastguard Worker skipped_export=false 8203*2e9d4914SAndroid Build Coastguard Worker else 8204*2e9d4914SAndroid Build Coastguard Worker # The command line is too long to execute in one step. 8205*2e9d4914SAndroid Build Coastguard Worker func_verbose "using reloadable object file for export list..." 8206*2e9d4914SAndroid Build Coastguard Worker skipped_export=: 8207*2e9d4914SAndroid Build Coastguard Worker # Break out early, otherwise skipped_export may be 8208*2e9d4914SAndroid Build Coastguard Worker # set to false by a later but shorter cmd. 8209*2e9d4914SAndroid Build Coastguard Worker break 8210*2e9d4914SAndroid Build Coastguard Worker fi 8211*2e9d4914SAndroid Build Coastguard Worker done 8212*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 8213*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8214*2e9d4914SAndroid Build Coastguard Worker func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8215*2e9d4914SAndroid Build Coastguard Worker func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8216*2e9d4914SAndroid Build Coastguard Worker fi 8217*2e9d4914SAndroid Build Coastguard Worker fi 8218*2e9d4914SAndroid Build Coastguard Worker fi 8219*2e9d4914SAndroid Build Coastguard Worker 8220*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$include_expsyms"; then 8221*2e9d4914SAndroid Build Coastguard Worker tmp_export_symbols="$export_symbols" 8222*2e9d4914SAndroid Build Coastguard Worker test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8223*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8224*2e9d4914SAndroid Build Coastguard Worker fi 8225*2e9d4914SAndroid Build Coastguard Worker 8226*2e9d4914SAndroid Build Coastguard Worker if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8227*2e9d4914SAndroid Build Coastguard Worker # The given exports_symbols file has to be filtered, so filter it. 8228*2e9d4914SAndroid Build Coastguard Worker func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8229*2e9d4914SAndroid Build Coastguard Worker # FIXME: $output_objdir/$libname.filter potentially contains lots of 8230*2e9d4914SAndroid Build Coastguard Worker # 's' commands which not all seds can handle. GNU sed should be fine 8231*2e9d4914SAndroid Build Coastguard Worker # though. Also, the filter scales superlinearly with the number of 8232*2e9d4914SAndroid Build Coastguard Worker # global variables. join(1) would be nice here, but unfortunately 8233*2e9d4914SAndroid Build Coastguard Worker # isn't a blessed tool. 8234*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8235*2e9d4914SAndroid Build Coastguard Worker func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8236*2e9d4914SAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.def 8237*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8238*2e9d4914SAndroid Build Coastguard Worker fi 8239*2e9d4914SAndroid Build Coastguard Worker 8240*2e9d4914SAndroid Build Coastguard Worker tmp_deplibs= 8241*2e9d4914SAndroid Build Coastguard Worker for test_deplib in $deplibs; do 8242*2e9d4914SAndroid Build Coastguard Worker case " $convenience " in 8243*2e9d4914SAndroid Build Coastguard Worker *" $test_deplib "*) ;; 8244*2e9d4914SAndroid Build Coastguard Worker *) 8245*2e9d4914SAndroid Build Coastguard Worker func_append tmp_deplibs " $test_deplib" 8246*2e9d4914SAndroid Build Coastguard Worker ;; 8247*2e9d4914SAndroid Build Coastguard Worker esac 8248*2e9d4914SAndroid Build Coastguard Worker done 8249*2e9d4914SAndroid Build Coastguard Worker deplibs="$tmp_deplibs" 8250*2e9d4914SAndroid Build Coastguard Worker 8251*2e9d4914SAndroid Build Coastguard Worker if test -n "$convenience"; then 8252*2e9d4914SAndroid Build Coastguard Worker if test -n "$whole_archive_flag_spec" && 8253*2e9d4914SAndroid Build Coastguard Worker test "$compiler_needs_object" = yes && 8254*2e9d4914SAndroid Build Coastguard Worker test -z "$libobjs"; then 8255*2e9d4914SAndroid Build Coastguard Worker # extract the archives, so we have objects to list. 8256*2e9d4914SAndroid Build Coastguard Worker # TODO: could optimize this to just extract one archive. 8257*2e9d4914SAndroid Build Coastguard Worker whole_archive_flag_spec= 8258*2e9d4914SAndroid Build Coastguard Worker fi 8259*2e9d4914SAndroid Build Coastguard Worker if test -n "$whole_archive_flag_spec"; then 8260*2e9d4914SAndroid Build Coastguard Worker save_libobjs=$libobjs 8261*2e9d4914SAndroid Build Coastguard Worker eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8262*2e9d4914SAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 8263*2e9d4914SAndroid Build Coastguard Worker else 8264*2e9d4914SAndroid Build Coastguard Worker gentop="$output_objdir/${outputname}x" 8265*2e9d4914SAndroid Build Coastguard Worker func_append generated " $gentop" 8266*2e9d4914SAndroid Build Coastguard Worker 8267*2e9d4914SAndroid Build Coastguard Worker func_extract_archives $gentop $convenience 8268*2e9d4914SAndroid Build Coastguard Worker func_append libobjs " $func_extract_archives_result" 8269*2e9d4914SAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 8270*2e9d4914SAndroid Build Coastguard Worker fi 8271*2e9d4914SAndroid Build Coastguard Worker fi 8272*2e9d4914SAndroid Build Coastguard Worker 8273*2e9d4914SAndroid Build Coastguard Worker if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8274*2e9d4914SAndroid Build Coastguard Worker eval flag=\"$thread_safe_flag_spec\" 8275*2e9d4914SAndroid Build Coastguard Worker func_append linker_flags " $flag" 8276*2e9d4914SAndroid Build Coastguard Worker fi 8277*2e9d4914SAndroid Build Coastguard Worker 8278*2e9d4914SAndroid Build Coastguard Worker # Make a backup of the uninstalled library when relinking 8279*2e9d4914SAndroid Build Coastguard Worker if test "$opt_mode" = relink; then 8280*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8281*2e9d4914SAndroid Build Coastguard Worker fi 8282*2e9d4914SAndroid Build Coastguard Worker 8283*2e9d4914SAndroid Build Coastguard Worker # Do each of the archive commands. 8284*2e9d4914SAndroid Build Coastguard Worker if test "$module" = yes && test -n "$module_cmds" ; then 8285*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8286*2e9d4914SAndroid Build Coastguard Worker eval test_cmds=\"$module_expsym_cmds\" 8287*2e9d4914SAndroid Build Coastguard Worker cmds=$module_expsym_cmds 8288*2e9d4914SAndroid Build Coastguard Worker else 8289*2e9d4914SAndroid Build Coastguard Worker eval test_cmds=\"$module_cmds\" 8290*2e9d4914SAndroid Build Coastguard Worker cmds=$module_cmds 8291*2e9d4914SAndroid Build Coastguard Worker fi 8292*2e9d4914SAndroid Build Coastguard Worker else 8293*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8294*2e9d4914SAndroid Build Coastguard Worker eval test_cmds=\"$archive_expsym_cmds\" 8295*2e9d4914SAndroid Build Coastguard Worker cmds=$archive_expsym_cmds 8296*2e9d4914SAndroid Build Coastguard Worker else 8297*2e9d4914SAndroid Build Coastguard Worker eval test_cmds=\"$archive_cmds\" 8298*2e9d4914SAndroid Build Coastguard Worker cmds=$archive_cmds 8299*2e9d4914SAndroid Build Coastguard Worker fi 8300*2e9d4914SAndroid Build Coastguard Worker fi 8301*2e9d4914SAndroid Build Coastguard Worker 8302*2e9d4914SAndroid Build Coastguard Worker if test "X$skipped_export" != "X:" && 8303*2e9d4914SAndroid Build Coastguard Worker func_len " $test_cmds" && 8304*2e9d4914SAndroid Build Coastguard Worker len=$func_len_result && 8305*2e9d4914SAndroid Build Coastguard Worker test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8306*2e9d4914SAndroid Build Coastguard Worker : 8307*2e9d4914SAndroid Build Coastguard Worker else 8308*2e9d4914SAndroid Build Coastguard Worker # The command line is too long to link in one step, link piecewise 8309*2e9d4914SAndroid Build Coastguard Worker # or, if using GNU ld and skipped_export is not :, use a linker 8310*2e9d4914SAndroid Build Coastguard Worker # script. 8311*2e9d4914SAndroid Build Coastguard Worker 8312*2e9d4914SAndroid Build Coastguard Worker # Save the value of $output and $libobjs because we want to 8313*2e9d4914SAndroid Build Coastguard Worker # use them later. If we have whole_archive_flag_spec, we 8314*2e9d4914SAndroid Build Coastguard Worker # want to use save_libobjs as it was before 8315*2e9d4914SAndroid Build Coastguard Worker # whole_archive_flag_spec was expanded, because we can't 8316*2e9d4914SAndroid Build Coastguard Worker # assume the linker understands whole_archive_flag_spec. 8317*2e9d4914SAndroid Build Coastguard Worker # This may have to be revisited, in case too many 8318*2e9d4914SAndroid Build Coastguard Worker # convenience libraries get linked in and end up exceeding 8319*2e9d4914SAndroid Build Coastguard Worker # the spec. 8320*2e9d4914SAndroid Build Coastguard Worker if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8321*2e9d4914SAndroid Build Coastguard Worker save_libobjs=$libobjs 8322*2e9d4914SAndroid Build Coastguard Worker fi 8323*2e9d4914SAndroid Build Coastguard Worker save_output=$output 8324*2e9d4914SAndroid Build Coastguard Worker func_basename "$output" 8325*2e9d4914SAndroid Build Coastguard Worker output_la=$func_basename_result 8326*2e9d4914SAndroid Build Coastguard Worker 8327*2e9d4914SAndroid Build Coastguard Worker # Clear the reloadable object creation command queue and 8328*2e9d4914SAndroid Build Coastguard Worker # initialize k to one. 8329*2e9d4914SAndroid Build Coastguard Worker test_cmds= 8330*2e9d4914SAndroid Build Coastguard Worker concat_cmds= 8331*2e9d4914SAndroid Build Coastguard Worker objlist= 8332*2e9d4914SAndroid Build Coastguard Worker last_robj= 8333*2e9d4914SAndroid Build Coastguard Worker k=1 8334*2e9d4914SAndroid Build Coastguard Worker 8335*2e9d4914SAndroid Build Coastguard Worker if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8336*2e9d4914SAndroid Build Coastguard Worker output=${output_objdir}/${output_la}.lnkscript 8337*2e9d4914SAndroid Build Coastguard Worker func_verbose "creating GNU ld script: $output" 8338*2e9d4914SAndroid Build Coastguard Worker echo 'INPUT (' > $output 8339*2e9d4914SAndroid Build Coastguard Worker for obj in $save_libobjs 8340*2e9d4914SAndroid Build Coastguard Worker do 8341*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$obj" 8342*2e9d4914SAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" >> $output 8343*2e9d4914SAndroid Build Coastguard Worker done 8344*2e9d4914SAndroid Build Coastguard Worker echo ')' >> $output 8345*2e9d4914SAndroid Build Coastguard Worker func_append delfiles " $output" 8346*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$output" 8347*2e9d4914SAndroid Build Coastguard Worker output=$func_to_tool_file_result 8348*2e9d4914SAndroid Build Coastguard Worker elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8349*2e9d4914SAndroid Build Coastguard Worker output=${output_objdir}/${output_la}.lnk 8350*2e9d4914SAndroid Build Coastguard Worker func_verbose "creating linker input file list: $output" 8351*2e9d4914SAndroid Build Coastguard Worker : > $output 8352*2e9d4914SAndroid Build Coastguard Worker set x $save_libobjs 8353*2e9d4914SAndroid Build Coastguard Worker shift 8354*2e9d4914SAndroid Build Coastguard Worker firstobj= 8355*2e9d4914SAndroid Build Coastguard Worker if test "$compiler_needs_object" = yes; then 8356*2e9d4914SAndroid Build Coastguard Worker firstobj="$1 " 8357*2e9d4914SAndroid Build Coastguard Worker shift 8358*2e9d4914SAndroid Build Coastguard Worker fi 8359*2e9d4914SAndroid Build Coastguard Worker for obj 8360*2e9d4914SAndroid Build Coastguard Worker do 8361*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$obj" 8362*2e9d4914SAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" >> $output 8363*2e9d4914SAndroid Build Coastguard Worker done 8364*2e9d4914SAndroid Build Coastguard Worker func_append delfiles " $output" 8365*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$output" 8366*2e9d4914SAndroid Build Coastguard Worker output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8367*2e9d4914SAndroid Build Coastguard Worker else 8368*2e9d4914SAndroid Build Coastguard Worker if test -n "$save_libobjs"; then 8369*2e9d4914SAndroid Build Coastguard Worker func_verbose "creating reloadable object files..." 8370*2e9d4914SAndroid Build Coastguard Worker output=$output_objdir/$output_la-${k}.$objext 8371*2e9d4914SAndroid Build Coastguard Worker eval test_cmds=\"$reload_cmds\" 8372*2e9d4914SAndroid Build Coastguard Worker func_len " $test_cmds" 8373*2e9d4914SAndroid Build Coastguard Worker len0=$func_len_result 8374*2e9d4914SAndroid Build Coastguard Worker len=$len0 8375*2e9d4914SAndroid Build Coastguard Worker 8376*2e9d4914SAndroid Build Coastguard Worker # Loop over the list of objects to be linked. 8377*2e9d4914SAndroid Build Coastguard Worker for obj in $save_libobjs 8378*2e9d4914SAndroid Build Coastguard Worker do 8379*2e9d4914SAndroid Build Coastguard Worker func_len " $obj" 8380*2e9d4914SAndroid Build Coastguard Worker func_arith $len + $func_len_result 8381*2e9d4914SAndroid Build Coastguard Worker len=$func_arith_result 8382*2e9d4914SAndroid Build Coastguard Worker if test "X$objlist" = X || 8383*2e9d4914SAndroid Build Coastguard Worker test "$len" -lt "$max_cmd_len"; then 8384*2e9d4914SAndroid Build Coastguard Worker func_append objlist " $obj" 8385*2e9d4914SAndroid Build Coastguard Worker else 8386*2e9d4914SAndroid Build Coastguard Worker # The command $test_cmds is almost too long, add a 8387*2e9d4914SAndroid Build Coastguard Worker # command to the queue. 8388*2e9d4914SAndroid Build Coastguard Worker if test "$k" -eq 1 ; then 8389*2e9d4914SAndroid Build Coastguard Worker # The first file doesn't have a previous command to add. 8390*2e9d4914SAndroid Build Coastguard Worker reload_objs=$objlist 8391*2e9d4914SAndroid Build Coastguard Worker eval concat_cmds=\"$reload_cmds\" 8392*2e9d4914SAndroid Build Coastguard Worker else 8393*2e9d4914SAndroid Build Coastguard Worker # All subsequent reloadable object files will link in 8394*2e9d4914SAndroid Build Coastguard Worker # the last one created. 8395*2e9d4914SAndroid Build Coastguard Worker reload_objs="$objlist $last_robj" 8396*2e9d4914SAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8397*2e9d4914SAndroid Build Coastguard Worker fi 8398*2e9d4914SAndroid Build Coastguard Worker last_robj=$output_objdir/$output_la-${k}.$objext 8399*2e9d4914SAndroid Build Coastguard Worker func_arith $k + 1 8400*2e9d4914SAndroid Build Coastguard Worker k=$func_arith_result 8401*2e9d4914SAndroid Build Coastguard Worker output=$output_objdir/$output_la-${k}.$objext 8402*2e9d4914SAndroid Build Coastguard Worker objlist=" $obj" 8403*2e9d4914SAndroid Build Coastguard Worker func_len " $last_robj" 8404*2e9d4914SAndroid Build Coastguard Worker func_arith $len0 + $func_len_result 8405*2e9d4914SAndroid Build Coastguard Worker len=$func_arith_result 8406*2e9d4914SAndroid Build Coastguard Worker fi 8407*2e9d4914SAndroid Build Coastguard Worker done 8408*2e9d4914SAndroid Build Coastguard Worker # Handle the remaining objects by creating one last 8409*2e9d4914SAndroid Build Coastguard Worker # reloadable object file. All subsequent reloadable object 8410*2e9d4914SAndroid Build Coastguard Worker # files will link in the last one created. 8411*2e9d4914SAndroid Build Coastguard Worker test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8412*2e9d4914SAndroid Build Coastguard Worker reload_objs="$objlist $last_robj" 8413*2e9d4914SAndroid Build Coastguard Worker eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8414*2e9d4914SAndroid Build Coastguard Worker if test -n "$last_robj"; then 8415*2e9d4914SAndroid Build Coastguard Worker eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8416*2e9d4914SAndroid Build Coastguard Worker fi 8417*2e9d4914SAndroid Build Coastguard Worker func_append delfiles " $output" 8418*2e9d4914SAndroid Build Coastguard Worker 8419*2e9d4914SAndroid Build Coastguard Worker else 8420*2e9d4914SAndroid Build Coastguard Worker output= 8421*2e9d4914SAndroid Build Coastguard Worker fi 8422*2e9d4914SAndroid Build Coastguard Worker 8423*2e9d4914SAndroid Build Coastguard Worker if ${skipped_export-false}; then 8424*2e9d4914SAndroid Build Coastguard Worker func_verbose "generating symbol list for \`$libname.la'" 8425*2e9d4914SAndroid Build Coastguard Worker export_symbols="$output_objdir/$libname.exp" 8426*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM $export_symbols 8427*2e9d4914SAndroid Build Coastguard Worker libobjs=$output 8428*2e9d4914SAndroid Build Coastguard Worker # Append the command to create the export file. 8429*2e9d4914SAndroid Build Coastguard Worker test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8430*2e9d4914SAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8431*2e9d4914SAndroid Build Coastguard Worker if test -n "$last_robj"; then 8432*2e9d4914SAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8433*2e9d4914SAndroid Build Coastguard Worker fi 8434*2e9d4914SAndroid Build Coastguard Worker fi 8435*2e9d4914SAndroid Build Coastguard Worker 8436*2e9d4914SAndroid Build Coastguard Worker test -n "$save_libobjs" && 8437*2e9d4914SAndroid Build Coastguard Worker func_verbose "creating a temporary reloadable object file: $output" 8438*2e9d4914SAndroid Build Coastguard Worker 8439*2e9d4914SAndroid Build Coastguard Worker # Loop through the commands generated above and execute them. 8440*2e9d4914SAndroid Build Coastguard Worker save_ifs="$IFS"; IFS='~' 8441*2e9d4914SAndroid Build Coastguard Worker for cmd in $concat_cmds; do 8442*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 8443*2e9d4914SAndroid Build Coastguard Worker $opt_silent || { 8444*2e9d4914SAndroid Build Coastguard Worker func_quote_for_expand "$cmd" 8445*2e9d4914SAndroid Build Coastguard Worker eval "func_echo $func_quote_for_expand_result" 8446*2e9d4914SAndroid Build Coastguard Worker } 8447*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || eval "$cmd" || { 8448*2e9d4914SAndroid Build Coastguard Worker lt_exit=$? 8449*2e9d4914SAndroid Build Coastguard Worker 8450*2e9d4914SAndroid Build Coastguard Worker # Restore the uninstalled library and exit 8451*2e9d4914SAndroid Build Coastguard Worker if test "$opt_mode" = relink; then 8452*2e9d4914SAndroid Build Coastguard Worker ( cd "$output_objdir" && \ 8453*2e9d4914SAndroid Build Coastguard Worker $RM "${realname}T" && \ 8454*2e9d4914SAndroid Build Coastguard Worker $MV "${realname}U" "$realname" ) 8455*2e9d4914SAndroid Build Coastguard Worker fi 8456*2e9d4914SAndroid Build Coastguard Worker 8457*2e9d4914SAndroid Build Coastguard Worker exit $lt_exit 8458*2e9d4914SAndroid Build Coastguard Worker } 8459*2e9d4914SAndroid Build Coastguard Worker done 8460*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 8461*2e9d4914SAndroid Build Coastguard Worker 8462*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8463*2e9d4914SAndroid Build Coastguard Worker func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8464*2e9d4914SAndroid Build Coastguard Worker func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8465*2e9d4914SAndroid Build Coastguard Worker fi 8466*2e9d4914SAndroid Build Coastguard Worker fi 8467*2e9d4914SAndroid Build Coastguard Worker 8468*2e9d4914SAndroid Build Coastguard Worker if ${skipped_export-false}; then 8469*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$include_expsyms"; then 8470*2e9d4914SAndroid Build Coastguard Worker tmp_export_symbols="$export_symbols" 8471*2e9d4914SAndroid Build Coastguard Worker test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8472*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8473*2e9d4914SAndroid Build Coastguard Worker fi 8474*2e9d4914SAndroid Build Coastguard Worker 8475*2e9d4914SAndroid Build Coastguard Worker if test -n "$orig_export_symbols"; then 8476*2e9d4914SAndroid Build Coastguard Worker # The given exports_symbols file has to be filtered, so filter it. 8477*2e9d4914SAndroid Build Coastguard Worker func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8478*2e9d4914SAndroid Build Coastguard Worker # FIXME: $output_objdir/$libname.filter potentially contains lots of 8479*2e9d4914SAndroid Build Coastguard Worker # 's' commands which not all seds can handle. GNU sed should be fine 8480*2e9d4914SAndroid Build Coastguard Worker # though. Also, the filter scales superlinearly with the number of 8481*2e9d4914SAndroid Build Coastguard Worker # global variables. join(1) would be nice here, but unfortunately 8482*2e9d4914SAndroid Build Coastguard Worker # isn't a blessed tool. 8483*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8484*2e9d4914SAndroid Build Coastguard Worker func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8485*2e9d4914SAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.def 8486*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8487*2e9d4914SAndroid Build Coastguard Worker fi 8488*2e9d4914SAndroid Build Coastguard Worker fi 8489*2e9d4914SAndroid Build Coastguard Worker 8490*2e9d4914SAndroid Build Coastguard Worker libobjs=$output 8491*2e9d4914SAndroid Build Coastguard Worker # Restore the value of output. 8492*2e9d4914SAndroid Build Coastguard Worker output=$save_output 8493*2e9d4914SAndroid Build Coastguard Worker 8494*2e9d4914SAndroid Build Coastguard Worker if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8495*2e9d4914SAndroid Build Coastguard Worker eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8496*2e9d4914SAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 8497*2e9d4914SAndroid Build Coastguard Worker fi 8498*2e9d4914SAndroid Build Coastguard Worker # Expand the library linking commands again to reset the 8499*2e9d4914SAndroid Build Coastguard Worker # value of $libobjs for piecewise linking. 8500*2e9d4914SAndroid Build Coastguard Worker 8501*2e9d4914SAndroid Build Coastguard Worker # Do each of the archive commands. 8502*2e9d4914SAndroid Build Coastguard Worker if test "$module" = yes && test -n "$module_cmds" ; then 8503*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8504*2e9d4914SAndroid Build Coastguard Worker cmds=$module_expsym_cmds 8505*2e9d4914SAndroid Build Coastguard Worker else 8506*2e9d4914SAndroid Build Coastguard Worker cmds=$module_cmds 8507*2e9d4914SAndroid Build Coastguard Worker fi 8508*2e9d4914SAndroid Build Coastguard Worker else 8509*2e9d4914SAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8510*2e9d4914SAndroid Build Coastguard Worker cmds=$archive_expsym_cmds 8511*2e9d4914SAndroid Build Coastguard Worker else 8512*2e9d4914SAndroid Build Coastguard Worker cmds=$archive_cmds 8513*2e9d4914SAndroid Build Coastguard Worker fi 8514*2e9d4914SAndroid Build Coastguard Worker fi 8515*2e9d4914SAndroid Build Coastguard Worker fi 8516*2e9d4914SAndroid Build Coastguard Worker 8517*2e9d4914SAndroid Build Coastguard Worker if test -n "$delfiles"; then 8518*2e9d4914SAndroid Build Coastguard Worker # Append the command to remove temporary files to $cmds. 8519*2e9d4914SAndroid Build Coastguard Worker eval cmds=\"\$cmds~\$RM $delfiles\" 8520*2e9d4914SAndroid Build Coastguard Worker fi 8521*2e9d4914SAndroid Build Coastguard Worker 8522*2e9d4914SAndroid Build Coastguard Worker # Add any objects from preloaded convenience libraries 8523*2e9d4914SAndroid Build Coastguard Worker if test -n "$dlprefiles"; then 8524*2e9d4914SAndroid Build Coastguard Worker gentop="$output_objdir/${outputname}x" 8525*2e9d4914SAndroid Build Coastguard Worker func_append generated " $gentop" 8526*2e9d4914SAndroid Build Coastguard Worker 8527*2e9d4914SAndroid Build Coastguard Worker func_extract_archives $gentop $dlprefiles 8528*2e9d4914SAndroid Build Coastguard Worker func_append libobjs " $func_extract_archives_result" 8529*2e9d4914SAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 8530*2e9d4914SAndroid Build Coastguard Worker fi 8531*2e9d4914SAndroid Build Coastguard Worker 8532*2e9d4914SAndroid Build Coastguard Worker save_ifs="$IFS"; IFS='~' 8533*2e9d4914SAndroid Build Coastguard Worker for cmd in $cmds; do 8534*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 8535*2e9d4914SAndroid Build Coastguard Worker eval cmd=\"$cmd\" 8536*2e9d4914SAndroid Build Coastguard Worker $opt_silent || { 8537*2e9d4914SAndroid Build Coastguard Worker func_quote_for_expand "$cmd" 8538*2e9d4914SAndroid Build Coastguard Worker eval "func_echo $func_quote_for_expand_result" 8539*2e9d4914SAndroid Build Coastguard Worker } 8540*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || eval "$cmd" || { 8541*2e9d4914SAndroid Build Coastguard Worker lt_exit=$? 8542*2e9d4914SAndroid Build Coastguard Worker 8543*2e9d4914SAndroid Build Coastguard Worker # Restore the uninstalled library and exit 8544*2e9d4914SAndroid Build Coastguard Worker if test "$opt_mode" = relink; then 8545*2e9d4914SAndroid Build Coastguard Worker ( cd "$output_objdir" && \ 8546*2e9d4914SAndroid Build Coastguard Worker $RM "${realname}T" && \ 8547*2e9d4914SAndroid Build Coastguard Worker $MV "${realname}U" "$realname" ) 8548*2e9d4914SAndroid Build Coastguard Worker fi 8549*2e9d4914SAndroid Build Coastguard Worker 8550*2e9d4914SAndroid Build Coastguard Worker exit $lt_exit 8551*2e9d4914SAndroid Build Coastguard Worker } 8552*2e9d4914SAndroid Build Coastguard Worker done 8553*2e9d4914SAndroid Build Coastguard Worker IFS="$save_ifs" 8554*2e9d4914SAndroid Build Coastguard Worker 8555*2e9d4914SAndroid Build Coastguard Worker # Restore the uninstalled library and exit 8556*2e9d4914SAndroid Build Coastguard Worker if test "$opt_mode" = relink; then 8557*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8558*2e9d4914SAndroid Build Coastguard Worker 8559*2e9d4914SAndroid Build Coastguard Worker if test -n "$convenience"; then 8560*2e9d4914SAndroid Build Coastguard Worker if test -z "$whole_archive_flag_spec"; then 8561*2e9d4914SAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 8562*2e9d4914SAndroid Build Coastguard Worker fi 8563*2e9d4914SAndroid Build Coastguard Worker fi 8564*2e9d4914SAndroid Build Coastguard Worker 8565*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 8566*2e9d4914SAndroid Build Coastguard Worker fi 8567*2e9d4914SAndroid Build Coastguard Worker 8568*2e9d4914SAndroid Build Coastguard Worker # Create links to the real library. 8569*2e9d4914SAndroid Build Coastguard Worker for linkname in $linknames; do 8570*2e9d4914SAndroid Build Coastguard Worker if test "$realname" != "$linkname"; then 8571*2e9d4914SAndroid Build Coastguard Worker func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8572*2e9d4914SAndroid Build Coastguard Worker fi 8573*2e9d4914SAndroid Build Coastguard Worker done 8574*2e9d4914SAndroid Build Coastguard Worker 8575*2e9d4914SAndroid Build Coastguard Worker # If -module or -export-dynamic was specified, set the dlname. 8576*2e9d4914SAndroid Build Coastguard Worker if test "$module" = yes || test "$export_dynamic" = yes; then 8577*2e9d4914SAndroid Build Coastguard Worker # On all known operating systems, these are identical. 8578*2e9d4914SAndroid Build Coastguard Worker dlname="$soname" 8579*2e9d4914SAndroid Build Coastguard Worker fi 8580*2e9d4914SAndroid Build Coastguard Worker fi 8581*2e9d4914SAndroid Build Coastguard Worker ;; 8582*2e9d4914SAndroid Build Coastguard Worker 8583*2e9d4914SAndroid Build Coastguard Worker obj) 8584*2e9d4914SAndroid Build Coastguard Worker if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8585*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-dlopen' is ignored for objects" 8586*2e9d4914SAndroid Build Coastguard Worker fi 8587*2e9d4914SAndroid Build Coastguard Worker 8588*2e9d4914SAndroid Build Coastguard Worker case " $deplibs" in 8589*2e9d4914SAndroid Build Coastguard Worker *\ -l* | *\ -L*) 8590*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-l' and \`-L' are ignored for objects" ;; 8591*2e9d4914SAndroid Build Coastguard Worker esac 8592*2e9d4914SAndroid Build Coastguard Worker 8593*2e9d4914SAndroid Build Coastguard Worker test -n "$rpath" && \ 8594*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-rpath' is ignored for objects" 8595*2e9d4914SAndroid Build Coastguard Worker 8596*2e9d4914SAndroid Build Coastguard Worker test -n "$xrpath" && \ 8597*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-R' is ignored for objects" 8598*2e9d4914SAndroid Build Coastguard Worker 8599*2e9d4914SAndroid Build Coastguard Worker test -n "$vinfo" && \ 8600*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-version-info' is ignored for objects" 8601*2e9d4914SAndroid Build Coastguard Worker 8602*2e9d4914SAndroid Build Coastguard Worker test -n "$release" && \ 8603*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-release' is ignored for objects" 8604*2e9d4914SAndroid Build Coastguard Worker 8605*2e9d4914SAndroid Build Coastguard Worker case $output in 8606*2e9d4914SAndroid Build Coastguard Worker *.lo) 8607*2e9d4914SAndroid Build Coastguard Worker test -n "$objs$old_deplibs" && \ 8608*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8609*2e9d4914SAndroid Build Coastguard Worker 8610*2e9d4914SAndroid Build Coastguard Worker libobj=$output 8611*2e9d4914SAndroid Build Coastguard Worker func_lo2o "$libobj" 8612*2e9d4914SAndroid Build Coastguard Worker obj=$func_lo2o_result 8613*2e9d4914SAndroid Build Coastguard Worker ;; 8614*2e9d4914SAndroid Build Coastguard Worker *) 8615*2e9d4914SAndroid Build Coastguard Worker libobj= 8616*2e9d4914SAndroid Build Coastguard Worker obj="$output" 8617*2e9d4914SAndroid Build Coastguard Worker ;; 8618*2e9d4914SAndroid Build Coastguard Worker esac 8619*2e9d4914SAndroid Build Coastguard Worker 8620*2e9d4914SAndroid Build Coastguard Worker # Delete the old objects. 8621*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM $obj $libobj 8622*2e9d4914SAndroid Build Coastguard Worker 8623*2e9d4914SAndroid Build Coastguard Worker # Objects from convenience libraries. This assumes 8624*2e9d4914SAndroid Build Coastguard Worker # single-version convenience libraries. Whenever we create 8625*2e9d4914SAndroid Build Coastguard Worker # different ones for PIC/non-PIC, this we'll have to duplicate 8626*2e9d4914SAndroid Build Coastguard Worker # the extraction. 8627*2e9d4914SAndroid Build Coastguard Worker reload_conv_objs= 8628*2e9d4914SAndroid Build Coastguard Worker gentop= 8629*2e9d4914SAndroid Build Coastguard Worker # reload_cmds runs $LD directly, so let us get rid of 8630*2e9d4914SAndroid Build Coastguard Worker # -Wl from whole_archive_flag_spec and hope we can get by with 8631*2e9d4914SAndroid Build Coastguard Worker # turning comma into space.. 8632*2e9d4914SAndroid Build Coastguard Worker wl= 8633*2e9d4914SAndroid Build Coastguard Worker 8634*2e9d4914SAndroid Build Coastguard Worker if test -n "$convenience"; then 8635*2e9d4914SAndroid Build Coastguard Worker if test -n "$whole_archive_flag_spec"; then 8636*2e9d4914SAndroid Build Coastguard Worker eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 8637*2e9d4914SAndroid Build Coastguard Worker reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638*2e9d4914SAndroid Build Coastguard Worker else 8639*2e9d4914SAndroid Build Coastguard Worker gentop="$output_objdir/${obj}x" 8640*2e9d4914SAndroid Build Coastguard Worker func_append generated " $gentop" 8641*2e9d4914SAndroid Build Coastguard Worker 8642*2e9d4914SAndroid Build Coastguard Worker func_extract_archives $gentop $convenience 8643*2e9d4914SAndroid Build Coastguard Worker reload_conv_objs="$reload_objs $func_extract_archives_result" 8644*2e9d4914SAndroid Build Coastguard Worker fi 8645*2e9d4914SAndroid Build Coastguard Worker fi 8646*2e9d4914SAndroid Build Coastguard Worker 8647*2e9d4914SAndroid Build Coastguard Worker # If we're not building shared, we need to use non_pic_objs 8648*2e9d4914SAndroid Build Coastguard Worker test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 8649*2e9d4914SAndroid Build Coastguard Worker 8650*2e9d4914SAndroid Build Coastguard Worker # Create the old-style object. 8651*2e9d4914SAndroid Build Coastguard Worker reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8652*2e9d4914SAndroid Build Coastguard Worker 8653*2e9d4914SAndroid Build Coastguard Worker output="$obj" 8654*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$reload_cmds" 'exit $?' 8655*2e9d4914SAndroid Build Coastguard Worker 8656*2e9d4914SAndroid Build Coastguard Worker # Exit if we aren't doing a library object file. 8657*2e9d4914SAndroid Build Coastguard Worker if test -z "$libobj"; then 8658*2e9d4914SAndroid Build Coastguard Worker if test -n "$gentop"; then 8659*2e9d4914SAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 8660*2e9d4914SAndroid Build Coastguard Worker fi 8661*2e9d4914SAndroid Build Coastguard Worker 8662*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 8663*2e9d4914SAndroid Build Coastguard Worker fi 8664*2e9d4914SAndroid Build Coastguard Worker 8665*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" != yes; then 8666*2e9d4914SAndroid Build Coastguard Worker if test -n "$gentop"; then 8667*2e9d4914SAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 8668*2e9d4914SAndroid Build Coastguard Worker fi 8669*2e9d4914SAndroid Build Coastguard Worker 8670*2e9d4914SAndroid Build Coastguard Worker # Create an invalid libtool object if no PIC, so that we don't 8671*2e9d4914SAndroid Build Coastguard Worker # accidentally link it into a program. 8672*2e9d4914SAndroid Build Coastguard Worker # $show "echo timestamp > $libobj" 8673*2e9d4914SAndroid Build Coastguard Worker # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8674*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 8675*2e9d4914SAndroid Build Coastguard Worker fi 8676*2e9d4914SAndroid Build Coastguard Worker 8677*2e9d4914SAndroid Build Coastguard Worker if test -n "$pic_flag" || test "$pic_mode" != default; then 8678*2e9d4914SAndroid Build Coastguard Worker # Only do commands if we really have different PIC objects. 8679*2e9d4914SAndroid Build Coastguard Worker reload_objs="$libobjs $reload_conv_objs" 8680*2e9d4914SAndroid Build Coastguard Worker output="$libobj" 8681*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$reload_cmds" 'exit $?' 8682*2e9d4914SAndroid Build Coastguard Worker fi 8683*2e9d4914SAndroid Build Coastguard Worker 8684*2e9d4914SAndroid Build Coastguard Worker if test -n "$gentop"; then 8685*2e9d4914SAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 8686*2e9d4914SAndroid Build Coastguard Worker fi 8687*2e9d4914SAndroid Build Coastguard Worker 8688*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 8689*2e9d4914SAndroid Build Coastguard Worker ;; 8690*2e9d4914SAndroid Build Coastguard Worker 8691*2e9d4914SAndroid Build Coastguard Worker prog) 8692*2e9d4914SAndroid Build Coastguard Worker case $host in 8693*2e9d4914SAndroid Build Coastguard Worker *cygwin*) func_stripname '' '.exe' "$output" 8694*2e9d4914SAndroid Build Coastguard Worker output=$func_stripname_result.exe;; 8695*2e9d4914SAndroid Build Coastguard Worker esac 8696*2e9d4914SAndroid Build Coastguard Worker test -n "$vinfo" && \ 8697*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-version-info' is ignored for programs" 8698*2e9d4914SAndroid Build Coastguard Worker 8699*2e9d4914SAndroid Build Coastguard Worker test -n "$release" && \ 8700*2e9d4914SAndroid Build Coastguard Worker func_warning "\`-release' is ignored for programs" 8701*2e9d4914SAndroid Build Coastguard Worker 8702*2e9d4914SAndroid Build Coastguard Worker test "$preload" = yes \ 8703*2e9d4914SAndroid Build Coastguard Worker && test "$dlopen_support" = unknown \ 8704*2e9d4914SAndroid Build Coastguard Worker && test "$dlopen_self" = unknown \ 8705*2e9d4914SAndroid Build Coastguard Worker && test "$dlopen_self_static" = unknown && \ 8706*2e9d4914SAndroid Build Coastguard Worker func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8707*2e9d4914SAndroid Build Coastguard Worker 8708*2e9d4914SAndroid Build Coastguard Worker case $host in 8709*2e9d4914SAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 8710*2e9d4914SAndroid Build Coastguard Worker # On Rhapsody replace the C library is the System framework 8711*2e9d4914SAndroid Build Coastguard Worker compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 8712*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8713*2e9d4914SAndroid Build Coastguard Worker ;; 8714*2e9d4914SAndroid Build Coastguard Worker esac 8715*2e9d4914SAndroid Build Coastguard Worker 8716*2e9d4914SAndroid Build Coastguard Worker case $host in 8717*2e9d4914SAndroid Build Coastguard Worker *-*-darwin*) 8718*2e9d4914SAndroid Build Coastguard Worker # Don't allow lazy linking, it breaks C++ global constructors 8719*2e9d4914SAndroid Build Coastguard Worker # But is supposedly fixed on 10.4 or later (yay!). 8720*2e9d4914SAndroid Build Coastguard Worker if test "$tagname" = CXX ; then 8721*2e9d4914SAndroid Build Coastguard Worker case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8722*2e9d4914SAndroid Build Coastguard Worker 10.[0123]) 8723*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " ${wl}-bind_at_load" 8724*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " ${wl}-bind_at_load" 8725*2e9d4914SAndroid Build Coastguard Worker ;; 8726*2e9d4914SAndroid Build Coastguard Worker esac 8727*2e9d4914SAndroid Build Coastguard Worker fi 8728*2e9d4914SAndroid Build Coastguard Worker # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8729*2e9d4914SAndroid Build Coastguard Worker compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8730*2e9d4914SAndroid Build Coastguard Worker finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8731*2e9d4914SAndroid Build Coastguard Worker ;; 8732*2e9d4914SAndroid Build Coastguard Worker esac 8733*2e9d4914SAndroid Build Coastguard Worker 8734*2e9d4914SAndroid Build Coastguard Worker 8735*2e9d4914SAndroid Build Coastguard Worker # move library search paths that coincide with paths to not yet 8736*2e9d4914SAndroid Build Coastguard Worker # installed libraries to the beginning of the library search list 8737*2e9d4914SAndroid Build Coastguard Worker new_libs= 8738*2e9d4914SAndroid Build Coastguard Worker for path in $notinst_path; do 8739*2e9d4914SAndroid Build Coastguard Worker case " $new_libs " in 8740*2e9d4914SAndroid Build Coastguard Worker *" -L$path/$objdir "*) ;; 8741*2e9d4914SAndroid Build Coastguard Worker *) 8742*2e9d4914SAndroid Build Coastguard Worker case " $compile_deplibs " in 8743*2e9d4914SAndroid Build Coastguard Worker *" -L$path/$objdir "*) 8744*2e9d4914SAndroid Build Coastguard Worker func_append new_libs " -L$path/$objdir" ;; 8745*2e9d4914SAndroid Build Coastguard Worker esac 8746*2e9d4914SAndroid Build Coastguard Worker ;; 8747*2e9d4914SAndroid Build Coastguard Worker esac 8748*2e9d4914SAndroid Build Coastguard Worker done 8749*2e9d4914SAndroid Build Coastguard Worker for deplib in $compile_deplibs; do 8750*2e9d4914SAndroid Build Coastguard Worker case $deplib in 8751*2e9d4914SAndroid Build Coastguard Worker -L*) 8752*2e9d4914SAndroid Build Coastguard Worker case " $new_libs " in 8753*2e9d4914SAndroid Build Coastguard Worker *" $deplib "*) ;; 8754*2e9d4914SAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 8755*2e9d4914SAndroid Build Coastguard Worker esac 8756*2e9d4914SAndroid Build Coastguard Worker ;; 8757*2e9d4914SAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 8758*2e9d4914SAndroid Build Coastguard Worker esac 8759*2e9d4914SAndroid Build Coastguard Worker done 8760*2e9d4914SAndroid Build Coastguard Worker compile_deplibs="$new_libs" 8761*2e9d4914SAndroid Build Coastguard Worker 8762*2e9d4914SAndroid Build Coastguard Worker 8763*2e9d4914SAndroid Build Coastguard Worker func_append compile_command " $compile_deplibs" 8764*2e9d4914SAndroid Build Coastguard Worker func_append finalize_command " $finalize_deplibs" 8765*2e9d4914SAndroid Build Coastguard Worker 8766*2e9d4914SAndroid Build Coastguard Worker if test -n "$rpath$xrpath"; then 8767*2e9d4914SAndroid Build Coastguard Worker # If the user specified any rpath flags, then add them. 8768*2e9d4914SAndroid Build Coastguard Worker for libdir in $rpath $xrpath; do 8769*2e9d4914SAndroid Build Coastguard Worker # This is the magic to use -rpath. 8770*2e9d4914SAndroid Build Coastguard Worker case "$finalize_rpath " in 8771*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 8772*2e9d4914SAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 8773*2e9d4914SAndroid Build Coastguard Worker esac 8774*2e9d4914SAndroid Build Coastguard Worker done 8775*2e9d4914SAndroid Build Coastguard Worker fi 8776*2e9d4914SAndroid Build Coastguard Worker 8777*2e9d4914SAndroid Build Coastguard Worker # Now hardcode the library paths 8778*2e9d4914SAndroid Build Coastguard Worker rpath= 8779*2e9d4914SAndroid Build Coastguard Worker hardcode_libdirs= 8780*2e9d4914SAndroid Build Coastguard Worker for libdir in $compile_rpath $finalize_rpath; do 8781*2e9d4914SAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 8782*2e9d4914SAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator"; then 8783*2e9d4914SAndroid Build Coastguard Worker if test -z "$hardcode_libdirs"; then 8784*2e9d4914SAndroid Build Coastguard Worker hardcode_libdirs="$libdir" 8785*2e9d4914SAndroid Build Coastguard Worker else 8786*2e9d4914SAndroid Build Coastguard Worker # Just accumulate the unique libdirs. 8787*2e9d4914SAndroid Build Coastguard Worker case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8788*2e9d4914SAndroid Build Coastguard Worker *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8789*2e9d4914SAndroid Build Coastguard Worker ;; 8790*2e9d4914SAndroid Build Coastguard Worker *) 8791*2e9d4914SAndroid Build Coastguard Worker func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8792*2e9d4914SAndroid Build Coastguard Worker ;; 8793*2e9d4914SAndroid Build Coastguard Worker esac 8794*2e9d4914SAndroid Build Coastguard Worker fi 8795*2e9d4914SAndroid Build Coastguard Worker else 8796*2e9d4914SAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 8797*2e9d4914SAndroid Build Coastguard Worker func_append rpath " $flag" 8798*2e9d4914SAndroid Build Coastguard Worker fi 8799*2e9d4914SAndroid Build Coastguard Worker elif test -n "$runpath_var"; then 8800*2e9d4914SAndroid Build Coastguard Worker case "$perm_rpath " in 8801*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 8802*2e9d4914SAndroid Build Coastguard Worker *) func_append perm_rpath " $libdir" ;; 8803*2e9d4914SAndroid Build Coastguard Worker esac 8804*2e9d4914SAndroid Build Coastguard Worker fi 8805*2e9d4914SAndroid Build Coastguard Worker case $host in 8806*2e9d4914SAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8807*2e9d4914SAndroid Build Coastguard Worker testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8808*2e9d4914SAndroid Build Coastguard Worker case :$dllsearchpath: in 8809*2e9d4914SAndroid Build Coastguard Worker *":$libdir:"*) ;; 8810*2e9d4914SAndroid Build Coastguard Worker ::) dllsearchpath=$libdir;; 8811*2e9d4914SAndroid Build Coastguard Worker *) func_append dllsearchpath ":$libdir";; 8812*2e9d4914SAndroid Build Coastguard Worker esac 8813*2e9d4914SAndroid Build Coastguard Worker case :$dllsearchpath: in 8814*2e9d4914SAndroid Build Coastguard Worker *":$testbindir:"*) ;; 8815*2e9d4914SAndroid Build Coastguard Worker ::) dllsearchpath=$testbindir;; 8816*2e9d4914SAndroid Build Coastguard Worker *) func_append dllsearchpath ":$testbindir";; 8817*2e9d4914SAndroid Build Coastguard Worker esac 8818*2e9d4914SAndroid Build Coastguard Worker ;; 8819*2e9d4914SAndroid Build Coastguard Worker esac 8820*2e9d4914SAndroid Build Coastguard Worker done 8821*2e9d4914SAndroid Build Coastguard Worker # Substitute the hardcoded libdirs into the rpath. 8822*2e9d4914SAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator" && 8823*2e9d4914SAndroid Build Coastguard Worker test -n "$hardcode_libdirs"; then 8824*2e9d4914SAndroid Build Coastguard Worker libdir="$hardcode_libdirs" 8825*2e9d4914SAndroid Build Coastguard Worker eval rpath=\" $hardcode_libdir_flag_spec\" 8826*2e9d4914SAndroid Build Coastguard Worker fi 8827*2e9d4914SAndroid Build Coastguard Worker compile_rpath="$rpath" 8828*2e9d4914SAndroid Build Coastguard Worker 8829*2e9d4914SAndroid Build Coastguard Worker rpath= 8830*2e9d4914SAndroid Build Coastguard Worker hardcode_libdirs= 8831*2e9d4914SAndroid Build Coastguard Worker for libdir in $finalize_rpath; do 8832*2e9d4914SAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 8833*2e9d4914SAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator"; then 8834*2e9d4914SAndroid Build Coastguard Worker if test -z "$hardcode_libdirs"; then 8835*2e9d4914SAndroid Build Coastguard Worker hardcode_libdirs="$libdir" 8836*2e9d4914SAndroid Build Coastguard Worker else 8837*2e9d4914SAndroid Build Coastguard Worker # Just accumulate the unique libdirs. 8838*2e9d4914SAndroid Build Coastguard Worker case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8839*2e9d4914SAndroid Build Coastguard Worker *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8840*2e9d4914SAndroid Build Coastguard Worker ;; 8841*2e9d4914SAndroid Build Coastguard Worker *) 8842*2e9d4914SAndroid Build Coastguard Worker func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8843*2e9d4914SAndroid Build Coastguard Worker ;; 8844*2e9d4914SAndroid Build Coastguard Worker esac 8845*2e9d4914SAndroid Build Coastguard Worker fi 8846*2e9d4914SAndroid Build Coastguard Worker else 8847*2e9d4914SAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 8848*2e9d4914SAndroid Build Coastguard Worker func_append rpath " $flag" 8849*2e9d4914SAndroid Build Coastguard Worker fi 8850*2e9d4914SAndroid Build Coastguard Worker elif test -n "$runpath_var"; then 8851*2e9d4914SAndroid Build Coastguard Worker case "$finalize_perm_rpath " in 8852*2e9d4914SAndroid Build Coastguard Worker *" $libdir "*) ;; 8853*2e9d4914SAndroid Build Coastguard Worker *) func_append finalize_perm_rpath " $libdir" ;; 8854*2e9d4914SAndroid Build Coastguard Worker esac 8855*2e9d4914SAndroid Build Coastguard Worker fi 8856*2e9d4914SAndroid Build Coastguard Worker done 8857*2e9d4914SAndroid Build Coastguard Worker # Substitute the hardcoded libdirs into the rpath. 8858*2e9d4914SAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator" && 8859*2e9d4914SAndroid Build Coastguard Worker test -n "$hardcode_libdirs"; then 8860*2e9d4914SAndroid Build Coastguard Worker libdir="$hardcode_libdirs" 8861*2e9d4914SAndroid Build Coastguard Worker eval rpath=\" $hardcode_libdir_flag_spec\" 8862*2e9d4914SAndroid Build Coastguard Worker fi 8863*2e9d4914SAndroid Build Coastguard Worker finalize_rpath="$rpath" 8864*2e9d4914SAndroid Build Coastguard Worker 8865*2e9d4914SAndroid Build Coastguard Worker if test -n "$libobjs" && test "$build_old_libs" = yes; then 8866*2e9d4914SAndroid Build Coastguard Worker # Transform all the library objects into standard objects. 8867*2e9d4914SAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8868*2e9d4914SAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8869*2e9d4914SAndroid Build Coastguard Worker fi 8870*2e9d4914SAndroid Build Coastguard Worker 8871*2e9d4914SAndroid Build Coastguard Worker func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8872*2e9d4914SAndroid Build Coastguard Worker 8873*2e9d4914SAndroid Build Coastguard Worker # template prelinking step 8874*2e9d4914SAndroid Build Coastguard Worker if test -n "$prelink_cmds"; then 8875*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$prelink_cmds" 'exit $?' 8876*2e9d4914SAndroid Build Coastguard Worker fi 8877*2e9d4914SAndroid Build Coastguard Worker 8878*2e9d4914SAndroid Build Coastguard Worker wrappers_required=yes 8879*2e9d4914SAndroid Build Coastguard Worker case $host in 8880*2e9d4914SAndroid Build Coastguard Worker *cegcc* | *mingw32ce*) 8881*2e9d4914SAndroid Build Coastguard Worker # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 8882*2e9d4914SAndroid Build Coastguard Worker wrappers_required=no 8883*2e9d4914SAndroid Build Coastguard Worker ;; 8884*2e9d4914SAndroid Build Coastguard Worker *cygwin* | *mingw* ) 8885*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" != yes; then 8886*2e9d4914SAndroid Build Coastguard Worker wrappers_required=no 8887*2e9d4914SAndroid Build Coastguard Worker fi 8888*2e9d4914SAndroid Build Coastguard Worker ;; 8889*2e9d4914SAndroid Build Coastguard Worker *) 8890*2e9d4914SAndroid Build Coastguard Worker if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8891*2e9d4914SAndroid Build Coastguard Worker wrappers_required=no 8892*2e9d4914SAndroid Build Coastguard Worker fi 8893*2e9d4914SAndroid Build Coastguard Worker ;; 8894*2e9d4914SAndroid Build Coastguard Worker esac 8895*2e9d4914SAndroid Build Coastguard Worker if test "$wrappers_required" = no; then 8896*2e9d4914SAndroid Build Coastguard Worker # Replace the output file specification. 8897*2e9d4914SAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8898*2e9d4914SAndroid Build Coastguard Worker link_command="$compile_command$compile_rpath" 8899*2e9d4914SAndroid Build Coastguard Worker 8900*2e9d4914SAndroid Build Coastguard Worker # We have no uninstalled library dependencies, so finalize right now. 8901*2e9d4914SAndroid Build Coastguard Worker exit_status=0 8902*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$link_command" 'exit_status=$?' 8903*2e9d4914SAndroid Build Coastguard Worker 8904*2e9d4914SAndroid Build Coastguard Worker if test -n "$postlink_cmds"; then 8905*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$output" 8906*2e9d4914SAndroid Build Coastguard Worker postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8907*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$postlink_cmds" 'exit $?' 8908*2e9d4914SAndroid Build Coastguard Worker fi 8909*2e9d4914SAndroid Build Coastguard Worker 8910*2e9d4914SAndroid Build Coastguard Worker # Delete the generated files. 8911*2e9d4914SAndroid Build Coastguard Worker if test -f "$output_objdir/${outputname}S.${objext}"; then 8912*2e9d4914SAndroid Build Coastguard Worker func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8913*2e9d4914SAndroid Build Coastguard Worker fi 8914*2e9d4914SAndroid Build Coastguard Worker 8915*2e9d4914SAndroid Build Coastguard Worker exit $exit_status 8916*2e9d4914SAndroid Build Coastguard Worker fi 8917*2e9d4914SAndroid Build Coastguard Worker 8918*2e9d4914SAndroid Build Coastguard Worker if test -n "$compile_shlibpath$finalize_shlibpath"; then 8919*2e9d4914SAndroid Build Coastguard Worker compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8920*2e9d4914SAndroid Build Coastguard Worker fi 8921*2e9d4914SAndroid Build Coastguard Worker if test -n "$finalize_shlibpath"; then 8922*2e9d4914SAndroid Build Coastguard Worker finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8923*2e9d4914SAndroid Build Coastguard Worker fi 8924*2e9d4914SAndroid Build Coastguard Worker 8925*2e9d4914SAndroid Build Coastguard Worker compile_var= 8926*2e9d4914SAndroid Build Coastguard Worker finalize_var= 8927*2e9d4914SAndroid Build Coastguard Worker if test -n "$runpath_var"; then 8928*2e9d4914SAndroid Build Coastguard Worker if test -n "$perm_rpath"; then 8929*2e9d4914SAndroid Build Coastguard Worker # We should set the runpath_var. 8930*2e9d4914SAndroid Build Coastguard Worker rpath= 8931*2e9d4914SAndroid Build Coastguard Worker for dir in $perm_rpath; do 8932*2e9d4914SAndroid Build Coastguard Worker func_append rpath "$dir:" 8933*2e9d4914SAndroid Build Coastguard Worker done 8934*2e9d4914SAndroid Build Coastguard Worker compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8935*2e9d4914SAndroid Build Coastguard Worker fi 8936*2e9d4914SAndroid Build Coastguard Worker if test -n "$finalize_perm_rpath"; then 8937*2e9d4914SAndroid Build Coastguard Worker # We should set the runpath_var. 8938*2e9d4914SAndroid Build Coastguard Worker rpath= 8939*2e9d4914SAndroid Build Coastguard Worker for dir in $finalize_perm_rpath; do 8940*2e9d4914SAndroid Build Coastguard Worker func_append rpath "$dir:" 8941*2e9d4914SAndroid Build Coastguard Worker done 8942*2e9d4914SAndroid Build Coastguard Worker finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8943*2e9d4914SAndroid Build Coastguard Worker fi 8944*2e9d4914SAndroid Build Coastguard Worker fi 8945*2e9d4914SAndroid Build Coastguard Worker 8946*2e9d4914SAndroid Build Coastguard Worker if test "$no_install" = yes; then 8947*2e9d4914SAndroid Build Coastguard Worker # We don't need to create a wrapper script. 8948*2e9d4914SAndroid Build Coastguard Worker link_command="$compile_var$compile_command$compile_rpath" 8949*2e9d4914SAndroid Build Coastguard Worker # Replace the output file specification. 8950*2e9d4914SAndroid Build Coastguard Worker link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8951*2e9d4914SAndroid Build Coastguard Worker # Delete the old output file. 8952*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM $output 8953*2e9d4914SAndroid Build Coastguard Worker # Link the executable and exit 8954*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$link_command" 'exit $?' 8955*2e9d4914SAndroid Build Coastguard Worker 8956*2e9d4914SAndroid Build Coastguard Worker if test -n "$postlink_cmds"; then 8957*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$output" 8958*2e9d4914SAndroid Build Coastguard Worker postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8959*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$postlink_cmds" 'exit $?' 8960*2e9d4914SAndroid Build Coastguard Worker fi 8961*2e9d4914SAndroid Build Coastguard Worker 8962*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 8963*2e9d4914SAndroid Build Coastguard Worker fi 8964*2e9d4914SAndroid Build Coastguard Worker 8965*2e9d4914SAndroid Build Coastguard Worker if test "$hardcode_action" = relink; then 8966*2e9d4914SAndroid Build Coastguard Worker # Fast installation is not supported 8967*2e9d4914SAndroid Build Coastguard Worker link_command="$compile_var$compile_command$compile_rpath" 8968*2e9d4914SAndroid Build Coastguard Worker relink_command="$finalize_var$finalize_command$finalize_rpath" 8969*2e9d4914SAndroid Build Coastguard Worker 8970*2e9d4914SAndroid Build Coastguard Worker func_warning "this platform does not like uninstalled shared libraries" 8971*2e9d4914SAndroid Build Coastguard Worker func_warning "\`$output' will be relinked during installation" 8972*2e9d4914SAndroid Build Coastguard Worker else 8973*2e9d4914SAndroid Build Coastguard Worker if test "$fast_install" != no; then 8974*2e9d4914SAndroid Build Coastguard Worker link_command="$finalize_var$compile_command$finalize_rpath" 8975*2e9d4914SAndroid Build Coastguard Worker if test "$fast_install" = yes; then 8976*2e9d4914SAndroid Build Coastguard Worker relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8977*2e9d4914SAndroid Build Coastguard Worker else 8978*2e9d4914SAndroid Build Coastguard Worker # fast_install is set to needless 8979*2e9d4914SAndroid Build Coastguard Worker relink_command= 8980*2e9d4914SAndroid Build Coastguard Worker fi 8981*2e9d4914SAndroid Build Coastguard Worker else 8982*2e9d4914SAndroid Build Coastguard Worker link_command="$compile_var$compile_command$compile_rpath" 8983*2e9d4914SAndroid Build Coastguard Worker relink_command="$finalize_var$finalize_command$finalize_rpath" 8984*2e9d4914SAndroid Build Coastguard Worker fi 8985*2e9d4914SAndroid Build Coastguard Worker fi 8986*2e9d4914SAndroid Build Coastguard Worker 8987*2e9d4914SAndroid Build Coastguard Worker # Replace the output file specification. 8988*2e9d4914SAndroid Build Coastguard Worker link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8989*2e9d4914SAndroid Build Coastguard Worker 8990*2e9d4914SAndroid Build Coastguard Worker # Delete the old output files. 8991*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8992*2e9d4914SAndroid Build Coastguard Worker 8993*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$link_command" 'exit $?' 8994*2e9d4914SAndroid Build Coastguard Worker 8995*2e9d4914SAndroid Build Coastguard Worker if test -n "$postlink_cmds"; then 8996*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$output_objdir/$outputname" 8997*2e9d4914SAndroid Build Coastguard Worker 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'` 8998*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$postlink_cmds" 'exit $?' 8999*2e9d4914SAndroid Build Coastguard Worker fi 9000*2e9d4914SAndroid Build Coastguard Worker 9001*2e9d4914SAndroid Build Coastguard Worker # Now create the wrapper script. 9002*2e9d4914SAndroid Build Coastguard Worker func_verbose "creating $output" 9003*2e9d4914SAndroid Build Coastguard Worker 9004*2e9d4914SAndroid Build Coastguard Worker # Quote the relink command for shipping. 9005*2e9d4914SAndroid Build Coastguard Worker if test -n "$relink_command"; then 9006*2e9d4914SAndroid Build Coastguard Worker # Preserve any variables that may affect compiler behavior 9007*2e9d4914SAndroid Build Coastguard Worker for var in $variables_saved_for_relink; do 9008*2e9d4914SAndroid Build Coastguard Worker if eval test -z \"\${$var+set}\"; then 9009*2e9d4914SAndroid Build Coastguard Worker relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9010*2e9d4914SAndroid Build Coastguard Worker elif eval var_value=\$$var; test -z "$var_value"; then 9011*2e9d4914SAndroid Build Coastguard Worker relink_command="$var=; export $var; $relink_command" 9012*2e9d4914SAndroid Build Coastguard Worker else 9013*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$var_value" 9014*2e9d4914SAndroid Build Coastguard Worker relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9015*2e9d4914SAndroid Build Coastguard Worker fi 9016*2e9d4914SAndroid Build Coastguard Worker done 9017*2e9d4914SAndroid Build Coastguard Worker relink_command="(cd `pwd`; $relink_command)" 9018*2e9d4914SAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9019*2e9d4914SAndroid Build Coastguard Worker fi 9020*2e9d4914SAndroid Build Coastguard Worker 9021*2e9d4914SAndroid Build Coastguard Worker # Only actually do things if not in dry run mode. 9022*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 9023*2e9d4914SAndroid Build Coastguard Worker # win32 will think the script is a binary if it has 9024*2e9d4914SAndroid Build Coastguard Worker # a .exe suffix, so we strip it off here. 9025*2e9d4914SAndroid Build Coastguard Worker case $output in 9026*2e9d4914SAndroid Build Coastguard Worker *.exe) func_stripname '' '.exe' "$output" 9027*2e9d4914SAndroid Build Coastguard Worker output=$func_stripname_result ;; 9028*2e9d4914SAndroid Build Coastguard Worker esac 9029*2e9d4914SAndroid Build Coastguard Worker # test for cygwin because mv fails w/o .exe extensions 9030*2e9d4914SAndroid Build Coastguard Worker case $host in 9031*2e9d4914SAndroid Build Coastguard Worker *cygwin*) 9032*2e9d4914SAndroid Build Coastguard Worker exeext=.exe 9033*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '.exe' "$outputname" 9034*2e9d4914SAndroid Build Coastguard Worker outputname=$func_stripname_result ;; 9035*2e9d4914SAndroid Build Coastguard Worker *) exeext= ;; 9036*2e9d4914SAndroid Build Coastguard Worker esac 9037*2e9d4914SAndroid Build Coastguard Worker case $host in 9038*2e9d4914SAndroid Build Coastguard Worker *cygwin* | *mingw* ) 9039*2e9d4914SAndroid Build Coastguard Worker func_dirname_and_basename "$output" "" "." 9040*2e9d4914SAndroid Build Coastguard Worker output_name=$func_basename_result 9041*2e9d4914SAndroid Build Coastguard Worker output_path=$func_dirname_result 9042*2e9d4914SAndroid Build Coastguard Worker cwrappersource="$output_path/$objdir/lt-$output_name.c" 9043*2e9d4914SAndroid Build Coastguard Worker cwrapper="$output_path/$output_name.exe" 9044*2e9d4914SAndroid Build Coastguard Worker $RM $cwrappersource $cwrapper 9045*2e9d4914SAndroid Build Coastguard Worker trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9046*2e9d4914SAndroid Build Coastguard Worker 9047*2e9d4914SAndroid Build Coastguard Worker func_emit_cwrapperexe_src > $cwrappersource 9048*2e9d4914SAndroid Build Coastguard Worker 9049*2e9d4914SAndroid Build Coastguard Worker # The wrapper executable is built using the $host compiler, 9050*2e9d4914SAndroid Build Coastguard Worker # because it contains $host paths and files. If cross- 9051*2e9d4914SAndroid Build Coastguard Worker # compiling, it, like the target executable, must be 9052*2e9d4914SAndroid Build Coastguard Worker # executed on the $host or under an emulation environment. 9053*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 9054*2e9d4914SAndroid Build Coastguard Worker $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9055*2e9d4914SAndroid Build Coastguard Worker $STRIP $cwrapper 9056*2e9d4914SAndroid Build Coastguard Worker } 9057*2e9d4914SAndroid Build Coastguard Worker 9058*2e9d4914SAndroid Build Coastguard Worker # Now, create the wrapper script for func_source use: 9059*2e9d4914SAndroid Build Coastguard Worker func_ltwrapper_scriptname $cwrapper 9060*2e9d4914SAndroid Build Coastguard Worker $RM $func_ltwrapper_scriptname_result 9061*2e9d4914SAndroid Build Coastguard Worker trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9062*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 9063*2e9d4914SAndroid Build Coastguard Worker # note: this script will not be executed, so do not chmod. 9064*2e9d4914SAndroid Build Coastguard Worker if test "x$build" = "x$host" ; then 9065*2e9d4914SAndroid Build Coastguard Worker $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9066*2e9d4914SAndroid Build Coastguard Worker else 9067*2e9d4914SAndroid Build Coastguard Worker func_emit_wrapper no > $func_ltwrapper_scriptname_result 9068*2e9d4914SAndroid Build Coastguard Worker fi 9069*2e9d4914SAndroid Build Coastguard Worker } 9070*2e9d4914SAndroid Build Coastguard Worker ;; 9071*2e9d4914SAndroid Build Coastguard Worker * ) 9072*2e9d4914SAndroid Build Coastguard Worker $RM $output 9073*2e9d4914SAndroid Build Coastguard Worker trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9074*2e9d4914SAndroid Build Coastguard Worker 9075*2e9d4914SAndroid Build Coastguard Worker func_emit_wrapper no > $output 9076*2e9d4914SAndroid Build Coastguard Worker chmod +x $output 9077*2e9d4914SAndroid Build Coastguard Worker ;; 9078*2e9d4914SAndroid Build Coastguard Worker esac 9079*2e9d4914SAndroid Build Coastguard Worker } 9080*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 9081*2e9d4914SAndroid Build Coastguard Worker ;; 9082*2e9d4914SAndroid Build Coastguard Worker esac 9083*2e9d4914SAndroid Build Coastguard Worker 9084*2e9d4914SAndroid Build Coastguard Worker # See if we need to build an old-fashioned archive. 9085*2e9d4914SAndroid Build Coastguard Worker for oldlib in $oldlibs; do 9086*2e9d4914SAndroid Build Coastguard Worker 9087*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = convenience; then 9088*2e9d4914SAndroid Build Coastguard Worker oldobjs="$libobjs_save $symfileobj" 9089*2e9d4914SAndroid Build Coastguard Worker addlibs="$convenience" 9090*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=no 9091*2e9d4914SAndroid Build Coastguard Worker else 9092*2e9d4914SAndroid Build Coastguard Worker if test "$build_libtool_libs" = module; then 9093*2e9d4914SAndroid Build Coastguard Worker oldobjs="$libobjs_save" 9094*2e9d4914SAndroid Build Coastguard Worker build_libtool_libs=no 9095*2e9d4914SAndroid Build Coastguard Worker else 9096*2e9d4914SAndroid Build Coastguard Worker oldobjs="$old_deplibs $non_pic_objects" 9097*2e9d4914SAndroid Build Coastguard Worker if test "$preload" = yes && test -f "$symfileobj"; then 9098*2e9d4914SAndroid Build Coastguard Worker func_append oldobjs " $symfileobj" 9099*2e9d4914SAndroid Build Coastguard Worker fi 9100*2e9d4914SAndroid Build Coastguard Worker fi 9101*2e9d4914SAndroid Build Coastguard Worker addlibs="$old_convenience" 9102*2e9d4914SAndroid Build Coastguard Worker fi 9103*2e9d4914SAndroid Build Coastguard Worker 9104*2e9d4914SAndroid Build Coastguard Worker if test -n "$addlibs"; then 9105*2e9d4914SAndroid Build Coastguard Worker gentop="$output_objdir/${outputname}x" 9106*2e9d4914SAndroid Build Coastguard Worker func_append generated " $gentop" 9107*2e9d4914SAndroid Build Coastguard Worker 9108*2e9d4914SAndroid Build Coastguard Worker func_extract_archives $gentop $addlibs 9109*2e9d4914SAndroid Build Coastguard Worker func_append oldobjs " $func_extract_archives_result" 9110*2e9d4914SAndroid Build Coastguard Worker fi 9111*2e9d4914SAndroid Build Coastguard Worker 9112*2e9d4914SAndroid Build Coastguard Worker # Do each command in the archive commands. 9113*2e9d4914SAndroid Build Coastguard Worker if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9114*2e9d4914SAndroid Build Coastguard Worker cmds=$old_archive_from_new_cmds 9115*2e9d4914SAndroid Build Coastguard Worker else 9116*2e9d4914SAndroid Build Coastguard Worker 9117*2e9d4914SAndroid Build Coastguard Worker # Add any objects from preloaded convenience libraries 9118*2e9d4914SAndroid Build Coastguard Worker if test -n "$dlprefiles"; then 9119*2e9d4914SAndroid Build Coastguard Worker gentop="$output_objdir/${outputname}x" 9120*2e9d4914SAndroid Build Coastguard Worker func_append generated " $gentop" 9121*2e9d4914SAndroid Build Coastguard Worker 9122*2e9d4914SAndroid Build Coastguard Worker func_extract_archives $gentop $dlprefiles 9123*2e9d4914SAndroid Build Coastguard Worker func_append oldobjs " $func_extract_archives_result" 9124*2e9d4914SAndroid Build Coastguard Worker fi 9125*2e9d4914SAndroid Build Coastguard Worker 9126*2e9d4914SAndroid Build Coastguard Worker # POSIX demands no paths to be encoded in archives. We have 9127*2e9d4914SAndroid Build Coastguard Worker # to avoid creating archives with duplicate basenames if we 9128*2e9d4914SAndroid Build Coastguard Worker # might have to extract them afterwards, e.g., when creating a 9129*2e9d4914SAndroid Build Coastguard Worker # static archive out of a convenience library, or when linking 9130*2e9d4914SAndroid Build Coastguard Worker # the entirety of a libtool archive into another (currently 9131*2e9d4914SAndroid Build Coastguard Worker # not supported by libtool). 9132*2e9d4914SAndroid Build Coastguard Worker if (for obj in $oldobjs 9133*2e9d4914SAndroid Build Coastguard Worker do 9134*2e9d4914SAndroid Build Coastguard Worker func_basename "$obj" 9135*2e9d4914SAndroid Build Coastguard Worker $ECHO "$func_basename_result" 9136*2e9d4914SAndroid Build Coastguard Worker done | sort | sort -uc >/dev/null 2>&1); then 9137*2e9d4914SAndroid Build Coastguard Worker : 9138*2e9d4914SAndroid Build Coastguard Worker else 9139*2e9d4914SAndroid Build Coastguard Worker echo "copying selected object files to avoid basename conflicts..." 9140*2e9d4914SAndroid Build Coastguard Worker gentop="$output_objdir/${outputname}x" 9141*2e9d4914SAndroid Build Coastguard Worker func_append generated " $gentop" 9142*2e9d4914SAndroid Build Coastguard Worker func_mkdir_p "$gentop" 9143*2e9d4914SAndroid Build Coastguard Worker save_oldobjs=$oldobjs 9144*2e9d4914SAndroid Build Coastguard Worker oldobjs= 9145*2e9d4914SAndroid Build Coastguard Worker counter=1 9146*2e9d4914SAndroid Build Coastguard Worker for obj in $save_oldobjs 9147*2e9d4914SAndroid Build Coastguard Worker do 9148*2e9d4914SAndroid Build Coastguard Worker func_basename "$obj" 9149*2e9d4914SAndroid Build Coastguard Worker objbase="$func_basename_result" 9150*2e9d4914SAndroid Build Coastguard Worker case " $oldobjs " in 9151*2e9d4914SAndroid Build Coastguard Worker " ") oldobjs=$obj ;; 9152*2e9d4914SAndroid Build Coastguard Worker *[\ /]"$objbase "*) 9153*2e9d4914SAndroid Build Coastguard Worker while :; do 9154*2e9d4914SAndroid Build Coastguard Worker # Make sure we don't pick an alternate name that also 9155*2e9d4914SAndroid Build Coastguard Worker # overlaps. 9156*2e9d4914SAndroid Build Coastguard Worker newobj=lt$counter-$objbase 9157*2e9d4914SAndroid Build Coastguard Worker func_arith $counter + 1 9158*2e9d4914SAndroid Build Coastguard Worker counter=$func_arith_result 9159*2e9d4914SAndroid Build Coastguard Worker case " $oldobjs " in 9160*2e9d4914SAndroid Build Coastguard Worker *[\ /]"$newobj "*) ;; 9161*2e9d4914SAndroid Build Coastguard Worker *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9162*2e9d4914SAndroid Build Coastguard Worker esac 9163*2e9d4914SAndroid Build Coastguard Worker done 9164*2e9d4914SAndroid Build Coastguard Worker func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 9165*2e9d4914SAndroid Build Coastguard Worker func_append oldobjs " $gentop/$newobj" 9166*2e9d4914SAndroid Build Coastguard Worker ;; 9167*2e9d4914SAndroid Build Coastguard Worker *) func_append oldobjs " $obj" ;; 9168*2e9d4914SAndroid Build Coastguard Worker esac 9169*2e9d4914SAndroid Build Coastguard Worker done 9170*2e9d4914SAndroid Build Coastguard Worker fi 9171*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 9172*2e9d4914SAndroid Build Coastguard Worker tool_oldlib=$func_to_tool_file_result 9173*2e9d4914SAndroid Build Coastguard Worker eval cmds=\"$old_archive_cmds\" 9174*2e9d4914SAndroid Build Coastguard Worker 9175*2e9d4914SAndroid Build Coastguard Worker func_len " $cmds" 9176*2e9d4914SAndroid Build Coastguard Worker len=$func_len_result 9177*2e9d4914SAndroid Build Coastguard Worker if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9178*2e9d4914SAndroid Build Coastguard Worker cmds=$old_archive_cmds 9179*2e9d4914SAndroid Build Coastguard Worker elif test -n "$archiver_list_spec"; then 9180*2e9d4914SAndroid Build Coastguard Worker func_verbose "using command file archive linking..." 9181*2e9d4914SAndroid Build Coastguard Worker for obj in $oldobjs 9182*2e9d4914SAndroid Build Coastguard Worker do 9183*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$obj" 9184*2e9d4914SAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" 9185*2e9d4914SAndroid Build Coastguard Worker done > $output_objdir/$libname.libcmd 9186*2e9d4914SAndroid Build Coastguard Worker func_to_tool_file "$output_objdir/$libname.libcmd" 9187*2e9d4914SAndroid Build Coastguard Worker oldobjs=" $archiver_list_spec$func_to_tool_file_result" 9188*2e9d4914SAndroid Build Coastguard Worker cmds=$old_archive_cmds 9189*2e9d4914SAndroid Build Coastguard Worker else 9190*2e9d4914SAndroid Build Coastguard Worker # the command line is too long to link in one step, link in parts 9191*2e9d4914SAndroid Build Coastguard Worker func_verbose "using piecewise archive linking..." 9192*2e9d4914SAndroid Build Coastguard Worker save_RANLIB=$RANLIB 9193*2e9d4914SAndroid Build Coastguard Worker RANLIB=: 9194*2e9d4914SAndroid Build Coastguard Worker objlist= 9195*2e9d4914SAndroid Build Coastguard Worker concat_cmds= 9196*2e9d4914SAndroid Build Coastguard Worker save_oldobjs=$oldobjs 9197*2e9d4914SAndroid Build Coastguard Worker oldobjs= 9198*2e9d4914SAndroid Build Coastguard Worker # Is there a better way of finding the last object in the list? 9199*2e9d4914SAndroid Build Coastguard Worker for obj in $save_oldobjs 9200*2e9d4914SAndroid Build Coastguard Worker do 9201*2e9d4914SAndroid Build Coastguard Worker last_oldobj=$obj 9202*2e9d4914SAndroid Build Coastguard Worker done 9203*2e9d4914SAndroid Build Coastguard Worker eval test_cmds=\"$old_archive_cmds\" 9204*2e9d4914SAndroid Build Coastguard Worker func_len " $test_cmds" 9205*2e9d4914SAndroid Build Coastguard Worker len0=$func_len_result 9206*2e9d4914SAndroid Build Coastguard Worker len=$len0 9207*2e9d4914SAndroid Build Coastguard Worker for obj in $save_oldobjs 9208*2e9d4914SAndroid Build Coastguard Worker do 9209*2e9d4914SAndroid Build Coastguard Worker func_len " $obj" 9210*2e9d4914SAndroid Build Coastguard Worker func_arith $len + $func_len_result 9211*2e9d4914SAndroid Build Coastguard Worker len=$func_arith_result 9212*2e9d4914SAndroid Build Coastguard Worker func_append objlist " $obj" 9213*2e9d4914SAndroid Build Coastguard Worker if test "$len" -lt "$max_cmd_len"; then 9214*2e9d4914SAndroid Build Coastguard Worker : 9215*2e9d4914SAndroid Build Coastguard Worker else 9216*2e9d4914SAndroid Build Coastguard Worker # the above command should be used before it gets too long 9217*2e9d4914SAndroid Build Coastguard Worker oldobjs=$objlist 9218*2e9d4914SAndroid Build Coastguard Worker if test "$obj" = "$last_oldobj" ; then 9219*2e9d4914SAndroid Build Coastguard Worker RANLIB=$save_RANLIB 9220*2e9d4914SAndroid Build Coastguard Worker fi 9221*2e9d4914SAndroid Build Coastguard Worker test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9222*2e9d4914SAndroid Build Coastguard Worker eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9223*2e9d4914SAndroid Build Coastguard Worker objlist= 9224*2e9d4914SAndroid Build Coastguard Worker len=$len0 9225*2e9d4914SAndroid Build Coastguard Worker fi 9226*2e9d4914SAndroid Build Coastguard Worker done 9227*2e9d4914SAndroid Build Coastguard Worker RANLIB=$save_RANLIB 9228*2e9d4914SAndroid Build Coastguard Worker oldobjs=$objlist 9229*2e9d4914SAndroid Build Coastguard Worker if test "X$oldobjs" = "X" ; then 9230*2e9d4914SAndroid Build Coastguard Worker eval cmds=\"\$concat_cmds\" 9231*2e9d4914SAndroid Build Coastguard Worker else 9232*2e9d4914SAndroid Build Coastguard Worker eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9233*2e9d4914SAndroid Build Coastguard Worker fi 9234*2e9d4914SAndroid Build Coastguard Worker fi 9235*2e9d4914SAndroid Build Coastguard Worker fi 9236*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$cmds" 'exit $?' 9237*2e9d4914SAndroid Build Coastguard Worker done 9238*2e9d4914SAndroid Build Coastguard Worker 9239*2e9d4914SAndroid Build Coastguard Worker test -n "$generated" && \ 9240*2e9d4914SAndroid Build Coastguard Worker func_show_eval "${RM}r$generated" 9241*2e9d4914SAndroid Build Coastguard Worker 9242*2e9d4914SAndroid Build Coastguard Worker # Now create the libtool archive. 9243*2e9d4914SAndroid Build Coastguard Worker case $output in 9244*2e9d4914SAndroid Build Coastguard Worker *.la) 9245*2e9d4914SAndroid Build Coastguard Worker old_library= 9246*2e9d4914SAndroid Build Coastguard Worker test "$build_old_libs" = yes && old_library="$libname.$libext" 9247*2e9d4914SAndroid Build Coastguard Worker func_verbose "creating $output" 9248*2e9d4914SAndroid Build Coastguard Worker 9249*2e9d4914SAndroid Build Coastguard Worker # Preserve any variables that may affect compiler behavior 9250*2e9d4914SAndroid Build Coastguard Worker for var in $variables_saved_for_relink; do 9251*2e9d4914SAndroid Build Coastguard Worker if eval test -z \"\${$var+set}\"; then 9252*2e9d4914SAndroid Build Coastguard Worker relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9253*2e9d4914SAndroid Build Coastguard Worker elif eval var_value=\$$var; test -z "$var_value"; then 9254*2e9d4914SAndroid Build Coastguard Worker relink_command="$var=; export $var; $relink_command" 9255*2e9d4914SAndroid Build Coastguard Worker else 9256*2e9d4914SAndroid Build Coastguard Worker func_quote_for_eval "$var_value" 9257*2e9d4914SAndroid Build Coastguard Worker relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9258*2e9d4914SAndroid Build Coastguard Worker fi 9259*2e9d4914SAndroid Build Coastguard Worker done 9260*2e9d4914SAndroid Build Coastguard Worker # Quote the link command for shipping. 9261*2e9d4914SAndroid Build Coastguard Worker relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 9262*2e9d4914SAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9263*2e9d4914SAndroid Build Coastguard Worker if test "$hardcode_automatic" = yes ; then 9264*2e9d4914SAndroid Build Coastguard Worker relink_command= 9265*2e9d4914SAndroid Build Coastguard Worker fi 9266*2e9d4914SAndroid Build Coastguard Worker 9267*2e9d4914SAndroid Build Coastguard Worker # Only create the output if not a dry run. 9268*2e9d4914SAndroid Build Coastguard Worker $opt_dry_run || { 9269*2e9d4914SAndroid Build Coastguard Worker for installed in no yes; do 9270*2e9d4914SAndroid Build Coastguard Worker if test "$installed" = yes; then 9271*2e9d4914SAndroid Build Coastguard Worker if test -z "$install_libdir"; then 9272*2e9d4914SAndroid Build Coastguard Worker break 9273*2e9d4914SAndroid Build Coastguard Worker fi 9274*2e9d4914SAndroid Build Coastguard Worker output="$output_objdir/$outputname"i 9275*2e9d4914SAndroid Build Coastguard Worker # Replace all uninstalled libtool libraries with the installed ones 9276*2e9d4914SAndroid Build Coastguard Worker newdependency_libs= 9277*2e9d4914SAndroid Build Coastguard Worker for deplib in $dependency_libs; do 9278*2e9d4914SAndroid Build Coastguard Worker case $deplib in 9279*2e9d4914SAndroid Build Coastguard Worker *.la) 9280*2e9d4914SAndroid Build Coastguard Worker func_basename "$deplib" 9281*2e9d4914SAndroid Build Coastguard Worker name="$func_basename_result" 9282*2e9d4914SAndroid Build Coastguard Worker func_resolve_sysroot "$deplib" 9283*2e9d4914SAndroid Build Coastguard Worker eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9284*2e9d4914SAndroid Build Coastguard Worker test -z "$libdir" && \ 9285*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$deplib' is not a valid libtool archive" 9286*2e9d4914SAndroid Build Coastguard Worker func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 9287*2e9d4914SAndroid Build Coastguard Worker ;; 9288*2e9d4914SAndroid Build Coastguard Worker -L*) 9289*2e9d4914SAndroid Build Coastguard Worker func_stripname -L '' "$deplib" 9290*2e9d4914SAndroid Build Coastguard Worker func_replace_sysroot "$func_stripname_result" 9291*2e9d4914SAndroid Build Coastguard Worker func_append newdependency_libs " -L$func_replace_sysroot_result" 9292*2e9d4914SAndroid Build Coastguard Worker ;; 9293*2e9d4914SAndroid Build Coastguard Worker -R*) 9294*2e9d4914SAndroid Build Coastguard Worker func_stripname -R '' "$deplib" 9295*2e9d4914SAndroid Build Coastguard Worker func_replace_sysroot "$func_stripname_result" 9296*2e9d4914SAndroid Build Coastguard Worker func_append newdependency_libs " -R$func_replace_sysroot_result" 9297*2e9d4914SAndroid Build Coastguard Worker ;; 9298*2e9d4914SAndroid Build Coastguard Worker *) func_append newdependency_libs " $deplib" ;; 9299*2e9d4914SAndroid Build Coastguard Worker esac 9300*2e9d4914SAndroid Build Coastguard Worker done 9301*2e9d4914SAndroid Build Coastguard Worker dependency_libs="$newdependency_libs" 9302*2e9d4914SAndroid Build Coastguard Worker newdlfiles= 9303*2e9d4914SAndroid Build Coastguard Worker 9304*2e9d4914SAndroid Build Coastguard Worker for lib in $dlfiles; do 9305*2e9d4914SAndroid Build Coastguard Worker case $lib in 9306*2e9d4914SAndroid Build Coastguard Worker *.la) 9307*2e9d4914SAndroid Build Coastguard Worker func_basename "$lib" 9308*2e9d4914SAndroid Build Coastguard Worker name="$func_basename_result" 9309*2e9d4914SAndroid Build Coastguard Worker eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310*2e9d4914SAndroid Build Coastguard Worker test -z "$libdir" && \ 9311*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$lib' is not a valid libtool archive" 9312*2e9d4914SAndroid Build Coastguard Worker func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9313*2e9d4914SAndroid Build Coastguard Worker ;; 9314*2e9d4914SAndroid Build Coastguard Worker *) func_append newdlfiles " $lib" ;; 9315*2e9d4914SAndroid Build Coastguard Worker esac 9316*2e9d4914SAndroid Build Coastguard Worker done 9317*2e9d4914SAndroid Build Coastguard Worker dlfiles="$newdlfiles" 9318*2e9d4914SAndroid Build Coastguard Worker newdlprefiles= 9319*2e9d4914SAndroid Build Coastguard Worker for lib in $dlprefiles; do 9320*2e9d4914SAndroid Build Coastguard Worker case $lib in 9321*2e9d4914SAndroid Build Coastguard Worker *.la) 9322*2e9d4914SAndroid Build Coastguard Worker # Only pass preopened files to the pseudo-archive (for 9323*2e9d4914SAndroid Build Coastguard Worker # eventual linking with the app. that links it) if we 9324*2e9d4914SAndroid Build Coastguard Worker # didn't already link the preopened objects directly into 9325*2e9d4914SAndroid Build Coastguard Worker # the library: 9326*2e9d4914SAndroid Build Coastguard Worker func_basename "$lib" 9327*2e9d4914SAndroid Build Coastguard Worker name="$func_basename_result" 9328*2e9d4914SAndroid Build Coastguard Worker eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9329*2e9d4914SAndroid Build Coastguard Worker test -z "$libdir" && \ 9330*2e9d4914SAndroid Build Coastguard Worker func_fatal_error "\`$lib' is not a valid libtool archive" 9331*2e9d4914SAndroid Build Coastguard Worker func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9332*2e9d4914SAndroid Build Coastguard Worker ;; 9333*2e9d4914SAndroid Build Coastguard Worker esac 9334*2e9d4914SAndroid Build Coastguard Worker done 9335*2e9d4914SAndroid Build Coastguard Worker dlprefiles="$newdlprefiles" 9336*2e9d4914SAndroid Build Coastguard Worker else 9337*2e9d4914SAndroid Build Coastguard Worker newdlfiles= 9338*2e9d4914SAndroid Build Coastguard Worker for lib in $dlfiles; do 9339*2e9d4914SAndroid Build Coastguard Worker case $lib in 9340*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9341*2e9d4914SAndroid Build Coastguard Worker *) abs=`pwd`"/$lib" ;; 9342*2e9d4914SAndroid Build Coastguard Worker esac 9343*2e9d4914SAndroid Build Coastguard Worker func_append newdlfiles " $abs" 9344*2e9d4914SAndroid Build Coastguard Worker done 9345*2e9d4914SAndroid Build Coastguard Worker dlfiles="$newdlfiles" 9346*2e9d4914SAndroid Build Coastguard Worker newdlprefiles= 9347*2e9d4914SAndroid Build Coastguard Worker for lib in $dlprefiles; do 9348*2e9d4914SAndroid Build Coastguard Worker case $lib in 9349*2e9d4914SAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9350*2e9d4914SAndroid Build Coastguard Worker *) abs=`pwd`"/$lib" ;; 9351*2e9d4914SAndroid Build Coastguard Worker esac 9352*2e9d4914SAndroid Build Coastguard Worker func_append newdlprefiles " $abs" 9353*2e9d4914SAndroid Build Coastguard Worker done 9354*2e9d4914SAndroid Build Coastguard Worker dlprefiles="$newdlprefiles" 9355*2e9d4914SAndroid Build Coastguard Worker fi 9356*2e9d4914SAndroid Build Coastguard Worker $RM $output 9357*2e9d4914SAndroid Build Coastguard Worker # place dlname in correct position for cygwin 9358*2e9d4914SAndroid Build Coastguard Worker # In fact, it would be nice if we could use this code for all target 9359*2e9d4914SAndroid Build Coastguard Worker # systems that can't hard-code library paths into their executables 9360*2e9d4914SAndroid Build Coastguard Worker # and that have no shared library path variable independent of PATH, 9361*2e9d4914SAndroid Build Coastguard Worker # but it turns out we can't easily determine that from inspecting 9362*2e9d4914SAndroid Build Coastguard Worker # libtool variables, so we have to hard-code the OSs to which it 9363*2e9d4914SAndroid Build Coastguard Worker # applies here; at the moment, that means platforms that use the PE 9364*2e9d4914SAndroid Build Coastguard Worker # object format with DLL files. See the long comment at the top of 9365*2e9d4914SAndroid Build Coastguard Worker # tests/bindir.at for full details. 9366*2e9d4914SAndroid Build Coastguard Worker tdlname=$dlname 9367*2e9d4914SAndroid Build Coastguard Worker case $host,$output,$installed,$module,$dlname in 9368*2e9d4914SAndroid Build Coastguard Worker *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 9369*2e9d4914SAndroid Build Coastguard Worker # If a -bindir argument was supplied, place the dll there. 9370*2e9d4914SAndroid Build Coastguard Worker if test "x$bindir" != x ; 9371*2e9d4914SAndroid Build Coastguard Worker then 9372*2e9d4914SAndroid Build Coastguard Worker func_relative_path "$install_libdir" "$bindir" 9373*2e9d4914SAndroid Build Coastguard Worker tdlname=$func_relative_path_result$dlname 9374*2e9d4914SAndroid Build Coastguard Worker else 9375*2e9d4914SAndroid Build Coastguard Worker # Otherwise fall back on heuristic. 9376*2e9d4914SAndroid Build Coastguard Worker tdlname=../bin/$dlname 9377*2e9d4914SAndroid Build Coastguard Worker fi 9378*2e9d4914SAndroid Build Coastguard Worker ;; 9379*2e9d4914SAndroid Build Coastguard Worker esac 9380*2e9d4914SAndroid Build Coastguard Worker $ECHO > $output "\ 9381*2e9d4914SAndroid Build Coastguard Worker# $outputname - a libtool library file 9382*2e9d4914SAndroid Build Coastguard Worker# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9383*2e9d4914SAndroid Build Coastguard Worker# 9384*2e9d4914SAndroid Build Coastguard Worker# Please DO NOT delete this file! 9385*2e9d4914SAndroid Build Coastguard Worker# It is necessary for linking the library. 9386*2e9d4914SAndroid Build Coastguard Worker 9387*2e9d4914SAndroid Build Coastguard Worker# The name that we can dlopen(3). 9388*2e9d4914SAndroid Build Coastguard Workerdlname='$tdlname' 9389*2e9d4914SAndroid Build Coastguard Worker 9390*2e9d4914SAndroid Build Coastguard Worker# Names of this library. 9391*2e9d4914SAndroid Build Coastguard Workerlibrary_names='$library_names' 9392*2e9d4914SAndroid Build Coastguard Worker 9393*2e9d4914SAndroid Build Coastguard Worker# The name of the static archive. 9394*2e9d4914SAndroid Build Coastguard Workerold_library='$old_library' 9395*2e9d4914SAndroid Build Coastguard Worker 9396*2e9d4914SAndroid Build Coastguard Worker# Linker flags that can not go in dependency_libs. 9397*2e9d4914SAndroid Build Coastguard Workerinherited_linker_flags='$new_inherited_linker_flags' 9398*2e9d4914SAndroid Build Coastguard Worker 9399*2e9d4914SAndroid Build Coastguard Worker# Libraries that this one depends upon. 9400*2e9d4914SAndroid Build Coastguard Workerdependency_libs='$dependency_libs' 9401*2e9d4914SAndroid Build Coastguard Worker 9402*2e9d4914SAndroid Build Coastguard Worker# Names of additional weak libraries provided by this library 9403*2e9d4914SAndroid Build Coastguard Workerweak_library_names='$weak_libs' 9404*2e9d4914SAndroid Build Coastguard Worker 9405*2e9d4914SAndroid Build Coastguard Worker# Version information for $libname. 9406*2e9d4914SAndroid Build Coastguard Workercurrent=$current 9407*2e9d4914SAndroid Build Coastguard Workerage=$age 9408*2e9d4914SAndroid Build Coastguard Workerrevision=$revision 9409*2e9d4914SAndroid Build Coastguard Worker 9410*2e9d4914SAndroid Build Coastguard Worker# Is this an already installed library? 9411*2e9d4914SAndroid Build Coastguard Workerinstalled=$installed 9412*2e9d4914SAndroid Build Coastguard Worker 9413*2e9d4914SAndroid Build Coastguard Worker# Should we warn about portability when linking against -modules? 9414*2e9d4914SAndroid Build Coastguard Workershouldnotlink=$module 9415*2e9d4914SAndroid Build Coastguard Worker 9416*2e9d4914SAndroid Build Coastguard Worker# Files to dlopen/dlpreopen 9417*2e9d4914SAndroid Build Coastguard Workerdlopen='$dlfiles' 9418*2e9d4914SAndroid Build Coastguard Workerdlpreopen='$dlprefiles' 9419*2e9d4914SAndroid Build Coastguard Worker 9420*2e9d4914SAndroid Build Coastguard Worker# Directory that this library needs to be installed in: 9421*2e9d4914SAndroid Build Coastguard Workerlibdir='$install_libdir'" 9422*2e9d4914SAndroid Build Coastguard Worker if test "$installed" = no && test "$need_relink" = yes; then 9423*2e9d4914SAndroid Build Coastguard Worker $ECHO >> $output "\ 9424*2e9d4914SAndroid Build Coastguard Workerrelink_command=\"$relink_command\"" 9425*2e9d4914SAndroid Build Coastguard Worker fi 9426*2e9d4914SAndroid Build Coastguard Worker done 9427*2e9d4914SAndroid Build Coastguard Worker } 9428*2e9d4914SAndroid Build Coastguard Worker 9429*2e9d4914SAndroid Build Coastguard Worker # Do a symbolic link so that the libtool archive can be found in 9430*2e9d4914SAndroid Build Coastguard Worker # LD_LIBRARY_PATH before the program is installed. 9431*2e9d4914SAndroid Build Coastguard Worker func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9432*2e9d4914SAndroid Build Coastguard Worker ;; 9433*2e9d4914SAndroid Build Coastguard Worker esac 9434*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_SUCCESS 9435*2e9d4914SAndroid Build Coastguard Worker} 9436*2e9d4914SAndroid Build Coastguard Worker 9437*2e9d4914SAndroid Build Coastguard Worker{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9438*2e9d4914SAndroid Build Coastguard Worker func_mode_link ${1+"$@"} 9439*2e9d4914SAndroid Build Coastguard Worker 9440*2e9d4914SAndroid Build Coastguard Worker 9441*2e9d4914SAndroid Build Coastguard Worker# func_mode_uninstall arg... 9442*2e9d4914SAndroid Build Coastguard Workerfunc_mode_uninstall () 9443*2e9d4914SAndroid Build Coastguard Worker{ 9444*2e9d4914SAndroid Build Coastguard Worker $opt_debug 9445*2e9d4914SAndroid Build Coastguard Worker RM="$nonopt" 9446*2e9d4914SAndroid Build Coastguard Worker files= 9447*2e9d4914SAndroid Build Coastguard Worker rmforce= 9448*2e9d4914SAndroid Build Coastguard Worker exit_status=0 9449*2e9d4914SAndroid Build Coastguard Worker 9450*2e9d4914SAndroid Build Coastguard Worker # This variable tells wrapper scripts just to set variables rather 9451*2e9d4914SAndroid Build Coastguard Worker # than running their programs. 9452*2e9d4914SAndroid Build Coastguard Worker libtool_install_magic="$magic" 9453*2e9d4914SAndroid Build Coastguard Worker 9454*2e9d4914SAndroid Build Coastguard Worker for arg 9455*2e9d4914SAndroid Build Coastguard Worker do 9456*2e9d4914SAndroid Build Coastguard Worker case $arg in 9457*2e9d4914SAndroid Build Coastguard Worker -f) func_append RM " $arg"; rmforce=yes ;; 9458*2e9d4914SAndroid Build Coastguard Worker -*) func_append RM " $arg" ;; 9459*2e9d4914SAndroid Build Coastguard Worker *) func_append files " $arg" ;; 9460*2e9d4914SAndroid Build Coastguard Worker esac 9461*2e9d4914SAndroid Build Coastguard Worker done 9462*2e9d4914SAndroid Build Coastguard Worker 9463*2e9d4914SAndroid Build Coastguard Worker test -z "$RM" && \ 9464*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "you must specify an RM program" 9465*2e9d4914SAndroid Build Coastguard Worker 9466*2e9d4914SAndroid Build Coastguard Worker rmdirs= 9467*2e9d4914SAndroid Build Coastguard Worker 9468*2e9d4914SAndroid Build Coastguard Worker for file in $files; do 9469*2e9d4914SAndroid Build Coastguard Worker func_dirname "$file" "" "." 9470*2e9d4914SAndroid Build Coastguard Worker dir="$func_dirname_result" 9471*2e9d4914SAndroid Build Coastguard Worker if test "X$dir" = X.; then 9472*2e9d4914SAndroid Build Coastguard Worker odir="$objdir" 9473*2e9d4914SAndroid Build Coastguard Worker else 9474*2e9d4914SAndroid Build Coastguard Worker odir="$dir/$objdir" 9475*2e9d4914SAndroid Build Coastguard Worker fi 9476*2e9d4914SAndroid Build Coastguard Worker func_basename "$file" 9477*2e9d4914SAndroid Build Coastguard Worker name="$func_basename_result" 9478*2e9d4914SAndroid Build Coastguard Worker test "$opt_mode" = uninstall && odir="$dir" 9479*2e9d4914SAndroid Build Coastguard Worker 9480*2e9d4914SAndroid Build Coastguard Worker # Remember odir for removal later, being careful to avoid duplicates 9481*2e9d4914SAndroid Build Coastguard Worker if test "$opt_mode" = clean; then 9482*2e9d4914SAndroid Build Coastguard Worker case " $rmdirs " in 9483*2e9d4914SAndroid Build Coastguard Worker *" $odir "*) ;; 9484*2e9d4914SAndroid Build Coastguard Worker *) func_append rmdirs " $odir" ;; 9485*2e9d4914SAndroid Build Coastguard Worker esac 9486*2e9d4914SAndroid Build Coastguard Worker fi 9487*2e9d4914SAndroid Build Coastguard Worker 9488*2e9d4914SAndroid Build Coastguard Worker # Don't error if the file doesn't exist and rm -f was used. 9489*2e9d4914SAndroid Build Coastguard Worker if { test -L "$file"; } >/dev/null 2>&1 || 9490*2e9d4914SAndroid Build Coastguard Worker { test -h "$file"; } >/dev/null 2>&1 || 9491*2e9d4914SAndroid Build Coastguard Worker test -f "$file"; then 9492*2e9d4914SAndroid Build Coastguard Worker : 9493*2e9d4914SAndroid Build Coastguard Worker elif test -d "$file"; then 9494*2e9d4914SAndroid Build Coastguard Worker exit_status=1 9495*2e9d4914SAndroid Build Coastguard Worker continue 9496*2e9d4914SAndroid Build Coastguard Worker elif test "$rmforce" = yes; then 9497*2e9d4914SAndroid Build Coastguard Worker continue 9498*2e9d4914SAndroid Build Coastguard Worker fi 9499*2e9d4914SAndroid Build Coastguard Worker 9500*2e9d4914SAndroid Build Coastguard Worker rmfiles="$file" 9501*2e9d4914SAndroid Build Coastguard Worker 9502*2e9d4914SAndroid Build Coastguard Worker case $name in 9503*2e9d4914SAndroid Build Coastguard Worker *.la) 9504*2e9d4914SAndroid Build Coastguard Worker # Possibly a libtool archive, so verify it. 9505*2e9d4914SAndroid Build Coastguard Worker if func_lalib_p "$file"; then 9506*2e9d4914SAndroid Build Coastguard Worker func_source $dir/$name 9507*2e9d4914SAndroid Build Coastguard Worker 9508*2e9d4914SAndroid Build Coastguard Worker # Delete the libtool libraries and symlinks. 9509*2e9d4914SAndroid Build Coastguard Worker for n in $library_names; do 9510*2e9d4914SAndroid Build Coastguard Worker func_append rmfiles " $odir/$n" 9511*2e9d4914SAndroid Build Coastguard Worker done 9512*2e9d4914SAndroid Build Coastguard Worker test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9513*2e9d4914SAndroid Build Coastguard Worker 9514*2e9d4914SAndroid Build Coastguard Worker case "$opt_mode" in 9515*2e9d4914SAndroid Build Coastguard Worker clean) 9516*2e9d4914SAndroid Build Coastguard Worker case " $library_names " in 9517*2e9d4914SAndroid Build Coastguard Worker *" $dlname "*) ;; 9518*2e9d4914SAndroid Build Coastguard Worker *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9519*2e9d4914SAndroid Build Coastguard Worker esac 9520*2e9d4914SAndroid Build Coastguard Worker test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9521*2e9d4914SAndroid Build Coastguard Worker ;; 9522*2e9d4914SAndroid Build Coastguard Worker uninstall) 9523*2e9d4914SAndroid Build Coastguard Worker if test -n "$library_names"; then 9524*2e9d4914SAndroid Build Coastguard Worker # Do each command in the postuninstall commands. 9525*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9526*2e9d4914SAndroid Build Coastguard Worker fi 9527*2e9d4914SAndroid Build Coastguard Worker 9528*2e9d4914SAndroid Build Coastguard Worker if test -n "$old_library"; then 9529*2e9d4914SAndroid Build Coastguard Worker # Do each command in the old_postuninstall commands. 9530*2e9d4914SAndroid Build Coastguard Worker func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9531*2e9d4914SAndroid Build Coastguard Worker fi 9532*2e9d4914SAndroid Build Coastguard Worker # FIXME: should reinstall the best remaining shared library. 9533*2e9d4914SAndroid Build Coastguard Worker ;; 9534*2e9d4914SAndroid Build Coastguard Worker esac 9535*2e9d4914SAndroid Build Coastguard Worker fi 9536*2e9d4914SAndroid Build Coastguard Worker ;; 9537*2e9d4914SAndroid Build Coastguard Worker 9538*2e9d4914SAndroid Build Coastguard Worker *.lo) 9539*2e9d4914SAndroid Build Coastguard Worker # Possibly a libtool object, so verify it. 9540*2e9d4914SAndroid Build Coastguard Worker if func_lalib_p "$file"; then 9541*2e9d4914SAndroid Build Coastguard Worker 9542*2e9d4914SAndroid Build Coastguard Worker # Read the .lo file 9543*2e9d4914SAndroid Build Coastguard Worker func_source $dir/$name 9544*2e9d4914SAndroid Build Coastguard Worker 9545*2e9d4914SAndroid Build Coastguard Worker # Add PIC object to the list of files to remove. 9546*2e9d4914SAndroid Build Coastguard Worker if test -n "$pic_object" && 9547*2e9d4914SAndroid Build Coastguard Worker test "$pic_object" != none; then 9548*2e9d4914SAndroid Build Coastguard Worker func_append rmfiles " $dir/$pic_object" 9549*2e9d4914SAndroid Build Coastguard Worker fi 9550*2e9d4914SAndroid Build Coastguard Worker 9551*2e9d4914SAndroid Build Coastguard Worker # Add non-PIC object to the list of files to remove. 9552*2e9d4914SAndroid Build Coastguard Worker if test -n "$non_pic_object" && 9553*2e9d4914SAndroid Build Coastguard Worker test "$non_pic_object" != none; then 9554*2e9d4914SAndroid Build Coastguard Worker func_append rmfiles " $dir/$non_pic_object" 9555*2e9d4914SAndroid Build Coastguard Worker fi 9556*2e9d4914SAndroid Build Coastguard Worker fi 9557*2e9d4914SAndroid Build Coastguard Worker ;; 9558*2e9d4914SAndroid Build Coastguard Worker 9559*2e9d4914SAndroid Build Coastguard Worker *) 9560*2e9d4914SAndroid Build Coastguard Worker if test "$opt_mode" = clean ; then 9561*2e9d4914SAndroid Build Coastguard Worker noexename=$name 9562*2e9d4914SAndroid Build Coastguard Worker case $file in 9563*2e9d4914SAndroid Build Coastguard Worker *.exe) 9564*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '.exe' "$file" 9565*2e9d4914SAndroid Build Coastguard Worker file=$func_stripname_result 9566*2e9d4914SAndroid Build Coastguard Worker func_stripname '' '.exe' "$name" 9567*2e9d4914SAndroid Build Coastguard Worker noexename=$func_stripname_result 9568*2e9d4914SAndroid Build Coastguard Worker # $file with .exe has already been added to rmfiles, 9569*2e9d4914SAndroid Build Coastguard Worker # add $file without .exe 9570*2e9d4914SAndroid Build Coastguard Worker func_append rmfiles " $file" 9571*2e9d4914SAndroid Build Coastguard Worker ;; 9572*2e9d4914SAndroid Build Coastguard Worker esac 9573*2e9d4914SAndroid Build Coastguard Worker # Do a test to see if this is a libtool program. 9574*2e9d4914SAndroid Build Coastguard Worker if func_ltwrapper_p "$file"; then 9575*2e9d4914SAndroid Build Coastguard Worker if func_ltwrapper_executable_p "$file"; then 9576*2e9d4914SAndroid Build Coastguard Worker func_ltwrapper_scriptname "$file" 9577*2e9d4914SAndroid Build Coastguard Worker relink_command= 9578*2e9d4914SAndroid Build Coastguard Worker func_source $func_ltwrapper_scriptname_result 9579*2e9d4914SAndroid Build Coastguard Worker func_append rmfiles " $func_ltwrapper_scriptname_result" 9580*2e9d4914SAndroid Build Coastguard Worker else 9581*2e9d4914SAndroid Build Coastguard Worker relink_command= 9582*2e9d4914SAndroid Build Coastguard Worker func_source $dir/$noexename 9583*2e9d4914SAndroid Build Coastguard Worker fi 9584*2e9d4914SAndroid Build Coastguard Worker 9585*2e9d4914SAndroid Build Coastguard Worker # note $name still contains .exe if it was in $file originally 9586*2e9d4914SAndroid Build Coastguard Worker # as does the version of $file that was added into $rmfiles 9587*2e9d4914SAndroid Build Coastguard Worker func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9588*2e9d4914SAndroid Build Coastguard Worker if test "$fast_install" = yes && test -n "$relink_command"; then 9589*2e9d4914SAndroid Build Coastguard Worker func_append rmfiles " $odir/lt-$name" 9590*2e9d4914SAndroid Build Coastguard Worker fi 9591*2e9d4914SAndroid Build Coastguard Worker if test "X$noexename" != "X$name" ; then 9592*2e9d4914SAndroid Build Coastguard Worker func_append rmfiles " $odir/lt-${noexename}.c" 9593*2e9d4914SAndroid Build Coastguard Worker fi 9594*2e9d4914SAndroid Build Coastguard Worker fi 9595*2e9d4914SAndroid Build Coastguard Worker fi 9596*2e9d4914SAndroid Build Coastguard Worker ;; 9597*2e9d4914SAndroid Build Coastguard Worker esac 9598*2e9d4914SAndroid Build Coastguard Worker func_show_eval "$RM $rmfiles" 'exit_status=1' 9599*2e9d4914SAndroid Build Coastguard Worker done 9600*2e9d4914SAndroid Build Coastguard Worker 9601*2e9d4914SAndroid Build Coastguard Worker # Try to remove the ${objdir}s in the directories where we deleted files 9602*2e9d4914SAndroid Build Coastguard Worker for dir in $rmdirs; do 9603*2e9d4914SAndroid Build Coastguard Worker if test -d "$dir"; then 9604*2e9d4914SAndroid Build Coastguard Worker func_show_eval "rmdir $dir >/dev/null 2>&1" 9605*2e9d4914SAndroid Build Coastguard Worker fi 9606*2e9d4914SAndroid Build Coastguard Worker done 9607*2e9d4914SAndroid Build Coastguard Worker 9608*2e9d4914SAndroid Build Coastguard Worker exit $exit_status 9609*2e9d4914SAndroid Build Coastguard Worker} 9610*2e9d4914SAndroid Build Coastguard Worker 9611*2e9d4914SAndroid Build Coastguard Worker{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9612*2e9d4914SAndroid Build Coastguard Worker func_mode_uninstall ${1+"$@"} 9613*2e9d4914SAndroid Build Coastguard Worker 9614*2e9d4914SAndroid Build Coastguard Workertest -z "$opt_mode" && { 9615*2e9d4914SAndroid Build Coastguard Worker help="$generic_help" 9616*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "you must specify a MODE" 9617*2e9d4914SAndroid Build Coastguard Worker} 9618*2e9d4914SAndroid Build Coastguard Worker 9619*2e9d4914SAndroid Build Coastguard Workertest -z "$exec_cmd" && \ 9620*2e9d4914SAndroid Build Coastguard Worker func_fatal_help "invalid operation mode \`$opt_mode'" 9621*2e9d4914SAndroid Build Coastguard Worker 9622*2e9d4914SAndroid Build Coastguard Workerif test -n "$exec_cmd"; then 9623*2e9d4914SAndroid Build Coastguard Worker eval exec "$exec_cmd" 9624*2e9d4914SAndroid Build Coastguard Worker exit $EXIT_FAILURE 9625*2e9d4914SAndroid Build Coastguard Workerfi 9626*2e9d4914SAndroid Build Coastguard Worker 9627*2e9d4914SAndroid Build Coastguard Workerexit $exit_status 9628*2e9d4914SAndroid Build Coastguard Worker 9629*2e9d4914SAndroid Build Coastguard Worker 9630*2e9d4914SAndroid Build Coastguard Worker# The TAGs below are defined such that we never get into a situation 9631*2e9d4914SAndroid Build Coastguard Worker# in which we disable both kinds of libraries. Given conflicting 9632*2e9d4914SAndroid Build Coastguard Worker# choices, we go for a static library, that is the most portable, 9633*2e9d4914SAndroid Build Coastguard Worker# since we can't tell whether shared libraries were disabled because 9634*2e9d4914SAndroid Build Coastguard Worker# the user asked for that or because the platform doesn't support 9635*2e9d4914SAndroid Build Coastguard Worker# them. This is particularly important on AIX, because we don't 9636*2e9d4914SAndroid Build Coastguard Worker# support having both static and shared libraries enabled at the same 9637*2e9d4914SAndroid Build Coastguard Worker# time on that platform, so we default to a shared-only configuration. 9638*2e9d4914SAndroid Build Coastguard Worker# If a disable-shared tag is given, we'll fallback to a static-only 9639*2e9d4914SAndroid Build Coastguard Worker# configuration. But we'll never go from static-only to shared-only. 9640*2e9d4914SAndroid Build Coastguard Worker 9641*2e9d4914SAndroid Build Coastguard Worker# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9642*2e9d4914SAndroid Build Coastguard Workerbuild_libtool_libs=no 9643*2e9d4914SAndroid Build Coastguard Workerbuild_old_libs=yes 9644*2e9d4914SAndroid Build Coastguard Worker# ### END LIBTOOL TAG CONFIG: disable-shared 9645*2e9d4914SAndroid Build Coastguard Worker 9646*2e9d4914SAndroid Build Coastguard Worker# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9647*2e9d4914SAndroid Build Coastguard Workerbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9648*2e9d4914SAndroid Build Coastguard Worker# ### END LIBTOOL TAG CONFIG: disable-static 9649*2e9d4914SAndroid Build Coastguard Worker 9650*2e9d4914SAndroid Build Coastguard Worker# Local Variables: 9651*2e9d4914SAndroid Build Coastguard Worker# mode:shell-script 9652*2e9d4914SAndroid Build Coastguard Worker# sh-indentation:2 9653*2e9d4914SAndroid Build Coastguard Worker# End: 9654*2e9d4914SAndroid Build Coastguard Worker# vi:sw=2 9655*2e9d4914SAndroid Build Coastguard Worker 9656