1*a67afe4dSAndroid Build Coastguard Worker#! /usr/bin/env sh 2*a67afe4dSAndroid Build Coastguard Worker## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 3*a67afe4dSAndroid Build Coastguard Worker## by inline-source v2019-02-19.15 4*a67afe4dSAndroid Build Coastguard Worker 5*a67afe4dSAndroid Build Coastguard Worker# libtool (GNU libtool) 2.4.7 6*a67afe4dSAndroid Build Coastguard Worker# Provide generalized library-building support services. 7*a67afe4dSAndroid Build Coastguard Worker# Written by Gordon Matzigkeit <[email protected]>, 1996 8*a67afe4dSAndroid Build Coastguard Worker 9*a67afe4dSAndroid Build Coastguard Worker# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc. 10*a67afe4dSAndroid Build Coastguard Worker# This is free software; see the source for copying conditions. There is NO 11*a67afe4dSAndroid Build Coastguard Worker# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12*a67afe4dSAndroid Build Coastguard Worker 13*a67afe4dSAndroid Build Coastguard Worker# GNU Libtool is free software; you can redistribute it and/or modify 14*a67afe4dSAndroid Build Coastguard Worker# it under the terms of the GNU General Public License as published by 15*a67afe4dSAndroid Build Coastguard Worker# the Free Software Foundation; either version 2 of the License, or 16*a67afe4dSAndroid Build Coastguard Worker# (at your option) any later version. 17*a67afe4dSAndroid Build Coastguard Worker# 18*a67afe4dSAndroid Build Coastguard Worker# As a special exception to the GNU General Public License, 19*a67afe4dSAndroid Build Coastguard Worker# if you distribute this file as part of a program or library that 20*a67afe4dSAndroid Build Coastguard Worker# is built using GNU Libtool, you may include this file under the 21*a67afe4dSAndroid Build Coastguard Worker# same distribution terms that you use for the rest of that program. 22*a67afe4dSAndroid Build Coastguard Worker# 23*a67afe4dSAndroid Build Coastguard Worker# GNU Libtool is distributed in the hope that it will be useful, but 24*a67afe4dSAndroid Build Coastguard Worker# WITHOUT ANY WARRANTY; without even the implied warranty of 25*a67afe4dSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26*a67afe4dSAndroid Build Coastguard Worker# General Public License for more details. 27*a67afe4dSAndroid Build Coastguard Worker# 28*a67afe4dSAndroid Build Coastguard Worker# You should have received a copy of the GNU General Public License 29*a67afe4dSAndroid Build Coastguard Worker# along with this program. If not, see <http://www.gnu.org/licenses/>. 30*a67afe4dSAndroid Build Coastguard Worker 31*a67afe4dSAndroid Build Coastguard Worker 32*a67afe4dSAndroid Build Coastguard WorkerPROGRAM=libtool 33*a67afe4dSAndroid Build Coastguard WorkerPACKAGE=libtool 34*a67afe4dSAndroid Build Coastguard WorkerVERSION=2.4.7 35*a67afe4dSAndroid Build Coastguard Workerpackage_revision=2.4.7 36*a67afe4dSAndroid Build Coastguard Worker 37*a67afe4dSAndroid Build Coastguard Worker 38*a67afe4dSAndroid Build Coastguard Worker## ------ ## 39*a67afe4dSAndroid Build Coastguard Worker## Usage. ## 40*a67afe4dSAndroid Build Coastguard Worker## ------ ## 41*a67afe4dSAndroid Build Coastguard Worker 42*a67afe4dSAndroid Build Coastguard Worker# Run './libtool --help' for help with using this script from the 43*a67afe4dSAndroid Build Coastguard Worker# command line. 44*a67afe4dSAndroid Build Coastguard Worker 45*a67afe4dSAndroid Build Coastguard Worker 46*a67afe4dSAndroid Build Coastguard Worker## ------------------------------- ## 47*a67afe4dSAndroid Build Coastguard Worker## User overridable command paths. ## 48*a67afe4dSAndroid Build Coastguard Worker## ------------------------------- ## 49*a67afe4dSAndroid Build Coastguard Worker 50*a67afe4dSAndroid Build Coastguard Worker# After configure completes, it has a better idea of some of the 51*a67afe4dSAndroid Build Coastguard Worker# shell tools we need than the defaults used by the functions shared 52*a67afe4dSAndroid Build Coastguard Worker# with bootstrap, so set those here where they can still be over- 53*a67afe4dSAndroid Build Coastguard Worker# ridden by the user, but otherwise take precedence. 54*a67afe4dSAndroid Build Coastguard Worker 55*a67afe4dSAndroid Build Coastguard Worker: ${AUTOCONF="autoconf"} 56*a67afe4dSAndroid Build Coastguard Worker: ${AUTOMAKE="automake"} 57*a67afe4dSAndroid Build Coastguard Worker 58*a67afe4dSAndroid Build Coastguard Worker 59*a67afe4dSAndroid Build Coastguard Worker## -------------------------- ## 60*a67afe4dSAndroid Build Coastguard Worker## Source external libraries. ## 61*a67afe4dSAndroid Build Coastguard Worker## -------------------------- ## 62*a67afe4dSAndroid Build Coastguard Worker 63*a67afe4dSAndroid Build Coastguard Worker# Much of our low-level functionality needs to be sourced from external 64*a67afe4dSAndroid Build Coastguard Worker# libraries, which are installed to $pkgauxdir. 65*a67afe4dSAndroid Build Coastguard Worker 66*a67afe4dSAndroid Build Coastguard Worker# Set a version string for this script. 67*a67afe4dSAndroid Build Coastguard Workerscriptversion=2019-02-19.15; # UTC 68*a67afe4dSAndroid Build Coastguard Worker 69*a67afe4dSAndroid Build Coastguard Worker# General shell script boiler plate, and helper functions. 70*a67afe4dSAndroid Build Coastguard Worker# Written by Gary V. Vaughan, 2004 71*a67afe4dSAndroid Build Coastguard Worker 72*a67afe4dSAndroid Build Coastguard Worker# This is free software. There is NO warranty; not even for 73*a67afe4dSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 74*a67afe4dSAndroid Build Coastguard Worker# 75*a67afe4dSAndroid Build Coastguard Worker# Copyright (C) 2004-2019, 2021 Bootstrap Authors 76*a67afe4dSAndroid Build Coastguard Worker# 77*a67afe4dSAndroid Build Coastguard Worker# This file is dual licensed under the terms of the MIT license 78*a67afe4dSAndroid Build Coastguard Worker# <https://opensource.org/license/MIT>, and GPL version 2 or later 79*a67afe4dSAndroid Build Coastguard Worker# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 80*a67afe4dSAndroid Build Coastguard Worker# these licenses when using or redistributing this software or any of 81*a67afe4dSAndroid Build Coastguard Worker# the files within it. See the URLs above, or the file `LICENSE` 82*a67afe4dSAndroid Build Coastguard Worker# included in the Bootstrap distribution for the full license texts. 83*a67afe4dSAndroid Build Coastguard Worker 84*a67afe4dSAndroid Build Coastguard Worker# Please report bugs or propose patches to: 85*a67afe4dSAndroid Build Coastguard Worker# <https://github.com/gnulib-modules/bootstrap/issues> 86*a67afe4dSAndroid Build Coastguard Worker 87*a67afe4dSAndroid Build Coastguard Worker 88*a67afe4dSAndroid Build Coastguard Worker## ------ ## 89*a67afe4dSAndroid Build Coastguard Worker## Usage. ## 90*a67afe4dSAndroid Build Coastguard Worker## ------ ## 91*a67afe4dSAndroid Build Coastguard Worker 92*a67afe4dSAndroid Build Coastguard Worker# Evaluate this file near the top of your script to gain access to 93*a67afe4dSAndroid Build Coastguard Worker# the functions and variables defined here: 94*a67afe4dSAndroid Build Coastguard Worker# 95*a67afe4dSAndroid Build Coastguard Worker# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 96*a67afe4dSAndroid Build Coastguard Worker# 97*a67afe4dSAndroid Build Coastguard Worker# If you need to override any of the default environment variable 98*a67afe4dSAndroid Build Coastguard Worker# settings, do that before evaluating this file. 99*a67afe4dSAndroid Build Coastguard Worker 100*a67afe4dSAndroid Build Coastguard Worker 101*a67afe4dSAndroid Build Coastguard Worker## -------------------- ## 102*a67afe4dSAndroid Build Coastguard Worker## Shell normalisation. ## 103*a67afe4dSAndroid Build Coastguard Worker## -------------------- ## 104*a67afe4dSAndroid Build Coastguard Worker 105*a67afe4dSAndroid Build Coastguard Worker# Some shells need a little help to be as Bourne compatible as possible. 106*a67afe4dSAndroid Build Coastguard Worker# Before doing anything else, make sure all that help has been provided! 107*a67afe4dSAndroid Build Coastguard Worker 108*a67afe4dSAndroid Build Coastguard WorkerDUALCASE=1; export DUALCASE # for MKS sh 109*a67afe4dSAndroid Build Coastguard Workerif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 110*a67afe4dSAndroid Build Coastguard Worker emulate sh 111*a67afe4dSAndroid Build Coastguard Worker NULLCMD=: 112*a67afe4dSAndroid Build Coastguard Worker # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 113*a67afe4dSAndroid Build Coastguard Worker # is contrary to our usage. Disable this feature. 114*a67afe4dSAndroid Build Coastguard Worker alias -g '${1+"$@"}'='"$@"' 115*a67afe4dSAndroid Build Coastguard Worker setopt NO_GLOB_SUBST 116*a67afe4dSAndroid Build Coastguard Workerelse 117*a67afe4dSAndroid Build Coastguard Worker case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 118*a67afe4dSAndroid Build Coastguard Workerfi 119*a67afe4dSAndroid Build Coastguard Worker 120*a67afe4dSAndroid Build Coastguard Worker# NLS nuisances: We save the old values in case they are required later. 121*a67afe4dSAndroid Build Coastguard Worker_G_user_locale= 122*a67afe4dSAndroid Build Coastguard Worker_G_safe_locale= 123*a67afe4dSAndroid Build Coastguard Workerfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 124*a67afe4dSAndroid Build Coastguard Workerdo 125*a67afe4dSAndroid Build Coastguard Worker eval "if test set = \"\${$_G_var+set}\"; then 126*a67afe4dSAndroid Build Coastguard Worker save_$_G_var=\$$_G_var 127*a67afe4dSAndroid Build Coastguard Worker $_G_var=C 128*a67afe4dSAndroid Build Coastguard Worker export $_G_var 129*a67afe4dSAndroid Build Coastguard Worker _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 130*a67afe4dSAndroid Build Coastguard Worker _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 131*a67afe4dSAndroid Build Coastguard Worker fi" 132*a67afe4dSAndroid Build Coastguard Workerdone 133*a67afe4dSAndroid Build Coastguard Worker# These NLS vars are set unconditionally (bootstrap issue #24). Unset those 134*a67afe4dSAndroid Build Coastguard Worker# in case the environment reset is needed later and the $save_* variant is not 135*a67afe4dSAndroid Build Coastguard Worker# defined (see the code above). 136*a67afe4dSAndroid Build Coastguard WorkerLC_ALL=C 137*a67afe4dSAndroid Build Coastguard WorkerLANGUAGE=C 138*a67afe4dSAndroid Build Coastguard Workerexport LANGUAGE LC_ALL 139*a67afe4dSAndroid Build Coastguard Worker 140*a67afe4dSAndroid Build Coastguard Worker# Make sure IFS has a sensible default 141*a67afe4dSAndroid Build Coastguard Workersp=' ' 142*a67afe4dSAndroid Build Coastguard Workernl=' 143*a67afe4dSAndroid Build Coastguard Worker' 144*a67afe4dSAndroid Build Coastguard WorkerIFS="$sp $nl" 145*a67afe4dSAndroid Build Coastguard Worker 146*a67afe4dSAndroid Build Coastguard Worker# There are apparently some retarded systems that use ';' as a PATH separator! 147*a67afe4dSAndroid Build Coastguard Workerif test "${PATH_SEPARATOR+set}" != set; then 148*a67afe4dSAndroid Build Coastguard Worker PATH_SEPARATOR=: 149*a67afe4dSAndroid Build Coastguard Worker (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 150*a67afe4dSAndroid Build Coastguard Worker (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 151*a67afe4dSAndroid Build Coastguard Worker PATH_SEPARATOR=';' 152*a67afe4dSAndroid Build Coastguard Worker } 153*a67afe4dSAndroid Build Coastguard Workerfi 154*a67afe4dSAndroid Build Coastguard Worker 155*a67afe4dSAndroid Build Coastguard Worker 156*a67afe4dSAndroid Build Coastguard Worker# func_unset VAR 157*a67afe4dSAndroid Build Coastguard Worker# -------------- 158*a67afe4dSAndroid Build Coastguard Worker# Portably unset VAR. 159*a67afe4dSAndroid Build Coastguard Worker# In some shells, an 'unset VAR' statement leaves a non-zero return 160*a67afe4dSAndroid Build Coastguard Worker# status if VAR is already unset, which might be problematic if the 161*a67afe4dSAndroid Build Coastguard Worker# statement is used at the end of a function (thus poisoning its return 162*a67afe4dSAndroid Build Coastguard Worker# value) or when 'set -e' is active (causing even a spurious abort of 163*a67afe4dSAndroid Build Coastguard Worker# the script in this case). 164*a67afe4dSAndroid Build Coastguard Workerfunc_unset () 165*a67afe4dSAndroid Build Coastguard Worker{ 166*a67afe4dSAndroid Build Coastguard Worker { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } 167*a67afe4dSAndroid Build Coastguard Worker} 168*a67afe4dSAndroid Build Coastguard Worker 169*a67afe4dSAndroid Build Coastguard Worker 170*a67afe4dSAndroid Build Coastguard Worker# Make sure CDPATH doesn't cause `cd` commands to output the target dir. 171*a67afe4dSAndroid Build Coastguard Workerfunc_unset CDPATH 172*a67afe4dSAndroid Build Coastguard Worker 173*a67afe4dSAndroid Build Coastguard Worker# Make sure ${,E,F}GREP behave sanely. 174*a67afe4dSAndroid Build Coastguard Workerfunc_unset GREP_OPTIONS 175*a67afe4dSAndroid Build Coastguard Worker 176*a67afe4dSAndroid Build Coastguard Worker 177*a67afe4dSAndroid Build Coastguard Worker## ------------------------- ## 178*a67afe4dSAndroid Build Coastguard Worker## Locate command utilities. ## 179*a67afe4dSAndroid Build Coastguard Worker## ------------------------- ## 180*a67afe4dSAndroid Build Coastguard Worker 181*a67afe4dSAndroid Build Coastguard Worker 182*a67afe4dSAndroid Build Coastguard Worker# func_executable_p FILE 183*a67afe4dSAndroid Build Coastguard Worker# ---------------------- 184*a67afe4dSAndroid Build Coastguard Worker# Check that FILE is an executable regular file. 185*a67afe4dSAndroid Build Coastguard Workerfunc_executable_p () 186*a67afe4dSAndroid Build Coastguard Worker{ 187*a67afe4dSAndroid Build Coastguard Worker test -f "$1" && test -x "$1" 188*a67afe4dSAndroid Build Coastguard Worker} 189*a67afe4dSAndroid Build Coastguard Worker 190*a67afe4dSAndroid Build Coastguard Worker 191*a67afe4dSAndroid Build Coastguard Worker# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 192*a67afe4dSAndroid Build Coastguard Worker# -------------------------------------------- 193*a67afe4dSAndroid Build Coastguard Worker# Search for either a program that responds to --version with output 194*a67afe4dSAndroid Build Coastguard Worker# containing "GNU", or else returned by CHECK_FUNC otherwise, by 195*a67afe4dSAndroid Build Coastguard Worker# trying all the directories in PATH with each of the elements of 196*a67afe4dSAndroid Build Coastguard Worker# PROGS_LIST. 197*a67afe4dSAndroid Build Coastguard Worker# 198*a67afe4dSAndroid Build Coastguard Worker# CHECK_FUNC should accept the path to a candidate program, and 199*a67afe4dSAndroid Build Coastguard Worker# set $func_check_prog_result if it truncates its output less than 200*a67afe4dSAndroid Build Coastguard Worker# $_G_path_prog_max characters. 201*a67afe4dSAndroid Build Coastguard Workerfunc_path_progs () 202*a67afe4dSAndroid Build Coastguard Worker{ 203*a67afe4dSAndroid Build Coastguard Worker _G_progs_list=$1 204*a67afe4dSAndroid Build Coastguard Worker _G_check_func=$2 205*a67afe4dSAndroid Build Coastguard Worker _G_PATH=${3-"$PATH"} 206*a67afe4dSAndroid Build Coastguard Worker 207*a67afe4dSAndroid Build Coastguard Worker _G_path_prog_max=0 208*a67afe4dSAndroid Build Coastguard Worker _G_path_prog_found=false 209*a67afe4dSAndroid Build Coastguard Worker _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 210*a67afe4dSAndroid Build Coastguard Worker for _G_dir in $_G_PATH; do 211*a67afe4dSAndroid Build Coastguard Worker IFS=$_G_save_IFS 212*a67afe4dSAndroid Build Coastguard Worker test -z "$_G_dir" && _G_dir=. 213*a67afe4dSAndroid Build Coastguard Worker for _G_prog_name in $_G_progs_list; do 214*a67afe4dSAndroid Build Coastguard Worker for _exeext in '' .EXE; do 215*a67afe4dSAndroid Build Coastguard Worker _G_path_prog=$_G_dir/$_G_prog_name$_exeext 216*a67afe4dSAndroid Build Coastguard Worker func_executable_p "$_G_path_prog" || continue 217*a67afe4dSAndroid Build Coastguard Worker case `"$_G_path_prog" --version 2>&1` in 218*a67afe4dSAndroid Build Coastguard Worker *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 219*a67afe4dSAndroid Build Coastguard Worker *) $_G_check_func $_G_path_prog 220*a67afe4dSAndroid Build Coastguard Worker func_path_progs_result=$func_check_prog_result 221*a67afe4dSAndroid Build Coastguard Worker ;; 222*a67afe4dSAndroid Build Coastguard Worker esac 223*a67afe4dSAndroid Build Coastguard Worker $_G_path_prog_found && break 3 224*a67afe4dSAndroid Build Coastguard Worker done 225*a67afe4dSAndroid Build Coastguard Worker done 226*a67afe4dSAndroid Build Coastguard Worker done 227*a67afe4dSAndroid Build Coastguard Worker IFS=$_G_save_IFS 228*a67afe4dSAndroid Build Coastguard Worker test -z "$func_path_progs_result" && { 229*a67afe4dSAndroid Build Coastguard Worker echo "no acceptable sed could be found in \$PATH" >&2 230*a67afe4dSAndroid Build Coastguard Worker exit 1 231*a67afe4dSAndroid Build Coastguard Worker } 232*a67afe4dSAndroid Build Coastguard Worker} 233*a67afe4dSAndroid Build Coastguard Worker 234*a67afe4dSAndroid Build Coastguard Worker 235*a67afe4dSAndroid Build Coastguard Worker# We want to be able to use the functions in this file before configure 236*a67afe4dSAndroid Build Coastguard Worker# has figured out where the best binaries are kept, which means we have 237*a67afe4dSAndroid Build Coastguard Worker# to search for them ourselves - except when the results are already set 238*a67afe4dSAndroid Build Coastguard Worker# where we skip the searches. 239*a67afe4dSAndroid Build Coastguard Worker 240*a67afe4dSAndroid Build Coastguard Worker# Unless the user overrides by setting SED, search the path for either GNU 241*a67afe4dSAndroid Build Coastguard Worker# sed, or the sed that truncates its output the least. 242*a67afe4dSAndroid Build Coastguard Workertest -z "$SED" && { 243*a67afe4dSAndroid Build Coastguard Worker _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 244*a67afe4dSAndroid Build Coastguard Worker for _G_i in 1 2 3 4 5 6 7; do 245*a67afe4dSAndroid Build Coastguard Worker _G_sed_script=$_G_sed_script$nl$_G_sed_script 246*a67afe4dSAndroid Build Coastguard Worker done 247*a67afe4dSAndroid Build Coastguard Worker echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 248*a67afe4dSAndroid Build Coastguard Worker _G_sed_script= 249*a67afe4dSAndroid Build Coastguard Worker 250*a67afe4dSAndroid Build Coastguard Worker func_check_prog_sed () 251*a67afe4dSAndroid Build Coastguard Worker { 252*a67afe4dSAndroid Build Coastguard Worker _G_path_prog=$1 253*a67afe4dSAndroid Build Coastguard Worker 254*a67afe4dSAndroid Build Coastguard Worker _G_count=0 255*a67afe4dSAndroid Build Coastguard Worker printf 0123456789 >conftest.in 256*a67afe4dSAndroid Build Coastguard Worker while : 257*a67afe4dSAndroid Build Coastguard Worker do 258*a67afe4dSAndroid Build Coastguard Worker cat conftest.in conftest.in >conftest.tmp 259*a67afe4dSAndroid Build Coastguard Worker mv conftest.tmp conftest.in 260*a67afe4dSAndroid Build Coastguard Worker cp conftest.in conftest.nl 261*a67afe4dSAndroid Build Coastguard Worker echo '' >> conftest.nl 262*a67afe4dSAndroid Build Coastguard Worker "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 263*a67afe4dSAndroid Build Coastguard Worker diff conftest.out conftest.nl >/dev/null 2>&1 || break 264*a67afe4dSAndroid Build Coastguard Worker _G_count=`expr $_G_count + 1` 265*a67afe4dSAndroid Build Coastguard Worker if test "$_G_count" -gt "$_G_path_prog_max"; then 266*a67afe4dSAndroid Build Coastguard Worker # Best one so far, save it but keep looking for a better one 267*a67afe4dSAndroid Build Coastguard Worker func_check_prog_result=$_G_path_prog 268*a67afe4dSAndroid Build Coastguard Worker _G_path_prog_max=$_G_count 269*a67afe4dSAndroid Build Coastguard Worker fi 270*a67afe4dSAndroid Build Coastguard Worker # 10*(2^10) chars as input seems more than enough 271*a67afe4dSAndroid Build Coastguard Worker test 10 -lt "$_G_count" && break 272*a67afe4dSAndroid Build Coastguard Worker done 273*a67afe4dSAndroid Build Coastguard Worker rm -f conftest.in conftest.tmp conftest.nl conftest.out 274*a67afe4dSAndroid Build Coastguard Worker } 275*a67afe4dSAndroid Build Coastguard Worker 276*a67afe4dSAndroid Build Coastguard Worker func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" 277*a67afe4dSAndroid Build Coastguard Worker rm -f conftest.sed 278*a67afe4dSAndroid Build Coastguard Worker SED=$func_path_progs_result 279*a67afe4dSAndroid Build Coastguard Worker} 280*a67afe4dSAndroid Build Coastguard Worker 281*a67afe4dSAndroid Build Coastguard Worker 282*a67afe4dSAndroid Build Coastguard Worker# Unless the user overrides by setting GREP, search the path for either GNU 283*a67afe4dSAndroid Build Coastguard Worker# grep, or the grep that truncates its output the least. 284*a67afe4dSAndroid Build Coastguard Workertest -z "$GREP" && { 285*a67afe4dSAndroid Build Coastguard Worker func_check_prog_grep () 286*a67afe4dSAndroid Build Coastguard Worker { 287*a67afe4dSAndroid Build Coastguard Worker _G_path_prog=$1 288*a67afe4dSAndroid Build Coastguard Worker 289*a67afe4dSAndroid Build Coastguard Worker _G_count=0 290*a67afe4dSAndroid Build Coastguard Worker _G_path_prog_max=0 291*a67afe4dSAndroid Build Coastguard Worker printf 0123456789 >conftest.in 292*a67afe4dSAndroid Build Coastguard Worker while : 293*a67afe4dSAndroid Build Coastguard Worker do 294*a67afe4dSAndroid Build Coastguard Worker cat conftest.in conftest.in >conftest.tmp 295*a67afe4dSAndroid Build Coastguard Worker mv conftest.tmp conftest.in 296*a67afe4dSAndroid Build Coastguard Worker cp conftest.in conftest.nl 297*a67afe4dSAndroid Build Coastguard Worker echo 'GREP' >> conftest.nl 298*a67afe4dSAndroid Build Coastguard Worker "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 299*a67afe4dSAndroid Build Coastguard Worker diff conftest.out conftest.nl >/dev/null 2>&1 || break 300*a67afe4dSAndroid Build Coastguard Worker _G_count=`expr $_G_count + 1` 301*a67afe4dSAndroid Build Coastguard Worker if test "$_G_count" -gt "$_G_path_prog_max"; then 302*a67afe4dSAndroid Build Coastguard Worker # Best one so far, save it but keep looking for a better one 303*a67afe4dSAndroid Build Coastguard Worker func_check_prog_result=$_G_path_prog 304*a67afe4dSAndroid Build Coastguard Worker _G_path_prog_max=$_G_count 305*a67afe4dSAndroid Build Coastguard Worker fi 306*a67afe4dSAndroid Build Coastguard Worker # 10*(2^10) chars as input seems more than enough 307*a67afe4dSAndroid Build Coastguard Worker test 10 -lt "$_G_count" && break 308*a67afe4dSAndroid Build Coastguard Worker done 309*a67afe4dSAndroid Build Coastguard Worker rm -f conftest.in conftest.tmp conftest.nl conftest.out 310*a67afe4dSAndroid Build Coastguard Worker } 311*a67afe4dSAndroid Build Coastguard Worker 312*a67afe4dSAndroid Build Coastguard Worker func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" 313*a67afe4dSAndroid Build Coastguard Worker GREP=$func_path_progs_result 314*a67afe4dSAndroid Build Coastguard Worker} 315*a67afe4dSAndroid Build Coastguard Worker 316*a67afe4dSAndroid Build Coastguard Worker 317*a67afe4dSAndroid Build Coastguard Worker## ------------------------------- ## 318*a67afe4dSAndroid Build Coastguard Worker## User overridable command paths. ## 319*a67afe4dSAndroid Build Coastguard Worker## ------------------------------- ## 320*a67afe4dSAndroid Build Coastguard Worker 321*a67afe4dSAndroid Build Coastguard Worker# All uppercase variable names are used for environment variables. These 322*a67afe4dSAndroid Build Coastguard Worker# variables can be overridden by the user before calling a script that 323*a67afe4dSAndroid Build Coastguard Worker# uses them if a suitable command of that name is not already available 324*a67afe4dSAndroid Build Coastguard Worker# in the command search PATH. 325*a67afe4dSAndroid Build Coastguard Worker 326*a67afe4dSAndroid Build Coastguard Worker: ${CP="cp -f"} 327*a67afe4dSAndroid Build Coastguard Worker: ${ECHO="printf %s\n"} 328*a67afe4dSAndroid Build Coastguard Worker: ${EGREP="$GREP -E"} 329*a67afe4dSAndroid Build Coastguard Worker: ${FGREP="$GREP -F"} 330*a67afe4dSAndroid Build Coastguard Worker: ${LN_S="ln -s"} 331*a67afe4dSAndroid Build Coastguard Worker: ${MAKE="make"} 332*a67afe4dSAndroid Build Coastguard Worker: ${MKDIR="mkdir"} 333*a67afe4dSAndroid Build Coastguard Worker: ${MV="mv -f"} 334*a67afe4dSAndroid Build Coastguard Worker: ${RM="rm -f"} 335*a67afe4dSAndroid Build Coastguard Worker: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 336*a67afe4dSAndroid Build Coastguard Worker 337*a67afe4dSAndroid Build Coastguard Worker 338*a67afe4dSAndroid Build Coastguard Worker## -------------------- ## 339*a67afe4dSAndroid Build Coastguard Worker## Useful sed snippets. ## 340*a67afe4dSAndroid Build Coastguard Worker## -------------------- ## 341*a67afe4dSAndroid Build Coastguard Worker 342*a67afe4dSAndroid Build Coastguard Workersed_dirname='s|/[^/]*$||' 343*a67afe4dSAndroid Build Coastguard Workersed_basename='s|^.*/||' 344*a67afe4dSAndroid Build Coastguard Worker 345*a67afe4dSAndroid Build Coastguard Worker# Sed substitution that helps us do robust quoting. It backslashifies 346*a67afe4dSAndroid Build Coastguard Worker# metacharacters that are still active within double-quoted strings. 347*a67afe4dSAndroid Build Coastguard Workersed_quote_subst='s|\([`"$\\]\)|\\\1|g' 348*a67afe4dSAndroid Build Coastguard Worker 349*a67afe4dSAndroid Build Coastguard Worker# Same as above, but do not quote variable references. 350*a67afe4dSAndroid Build Coastguard Workersed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 351*a67afe4dSAndroid Build Coastguard Worker 352*a67afe4dSAndroid Build Coastguard Worker# Sed substitution that turns a string into a regex matching for the 353*a67afe4dSAndroid Build Coastguard Worker# string literally. 354*a67afe4dSAndroid Build Coastguard Workersed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 355*a67afe4dSAndroid Build Coastguard Worker 356*a67afe4dSAndroid Build Coastguard Worker# Sed substitution that converts a w32 file name or path 357*a67afe4dSAndroid Build Coastguard Worker# that contains forward slashes, into one that contains 358*a67afe4dSAndroid Build Coastguard Worker# (escaped) backslashes. A very naive implementation. 359*a67afe4dSAndroid Build Coastguard Workersed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 360*a67afe4dSAndroid Build Coastguard Worker 361*a67afe4dSAndroid Build Coastguard Worker# Re-'\' parameter expansions in output of sed_double_quote_subst that 362*a67afe4dSAndroid Build Coastguard Worker# were '\'-ed in input to the same. If an odd number of '\' preceded a 363*a67afe4dSAndroid Build Coastguard Worker# '$' in input to sed_double_quote_subst, that '$' was protected from 364*a67afe4dSAndroid Build Coastguard Worker# expansion. Since each input '\' is now two '\'s, look for any number 365*a67afe4dSAndroid Build Coastguard Worker# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 366*a67afe4dSAndroid Build Coastguard Worker_G_bs='\\' 367*a67afe4dSAndroid Build Coastguard Worker_G_bs2='\\\\' 368*a67afe4dSAndroid Build Coastguard Worker_G_bs4='\\\\\\\\' 369*a67afe4dSAndroid Build Coastguard Worker_G_dollar='\$' 370*a67afe4dSAndroid Build Coastguard Workersed_double_backslash="\ 371*a67afe4dSAndroid Build Coastguard Worker s/$_G_bs4/&\\ 372*a67afe4dSAndroid Build Coastguard Worker/g 373*a67afe4dSAndroid Build Coastguard Worker s/^$_G_bs2$_G_dollar/$_G_bs&/ 374*a67afe4dSAndroid Build Coastguard Worker s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 375*a67afe4dSAndroid Build Coastguard Worker s/\n//g" 376*a67afe4dSAndroid Build Coastguard Worker 377*a67afe4dSAndroid Build Coastguard Worker# require_check_ifs_backslash 378*a67afe4dSAndroid Build Coastguard Worker# --------------------------- 379*a67afe4dSAndroid Build Coastguard Worker# Check if we can use backslash as IFS='\' separator, and set 380*a67afe4dSAndroid Build Coastguard Worker# $check_ifs_backshlash_broken to ':' or 'false'. 381*a67afe4dSAndroid Build Coastguard Workerrequire_check_ifs_backslash=func_require_check_ifs_backslash 382*a67afe4dSAndroid Build Coastguard Workerfunc_require_check_ifs_backslash () 383*a67afe4dSAndroid Build Coastguard Worker{ 384*a67afe4dSAndroid Build Coastguard Worker _G_save_IFS=$IFS 385*a67afe4dSAndroid Build Coastguard Worker IFS='\' 386*a67afe4dSAndroid Build Coastguard Worker _G_check_ifs_backshlash='a\\b' 387*a67afe4dSAndroid Build Coastguard Worker for _G_i in $_G_check_ifs_backshlash 388*a67afe4dSAndroid Build Coastguard Worker do 389*a67afe4dSAndroid Build Coastguard Worker case $_G_i in 390*a67afe4dSAndroid Build Coastguard Worker a) 391*a67afe4dSAndroid Build Coastguard Worker check_ifs_backshlash_broken=false 392*a67afe4dSAndroid Build Coastguard Worker ;; 393*a67afe4dSAndroid Build Coastguard Worker '') 394*a67afe4dSAndroid Build Coastguard Worker break 395*a67afe4dSAndroid Build Coastguard Worker ;; 396*a67afe4dSAndroid Build Coastguard Worker *) 397*a67afe4dSAndroid Build Coastguard Worker check_ifs_backshlash_broken=: 398*a67afe4dSAndroid Build Coastguard Worker break 399*a67afe4dSAndroid Build Coastguard Worker ;; 400*a67afe4dSAndroid Build Coastguard Worker esac 401*a67afe4dSAndroid Build Coastguard Worker done 402*a67afe4dSAndroid Build Coastguard Worker IFS=$_G_save_IFS 403*a67afe4dSAndroid Build Coastguard Worker require_check_ifs_backslash=: 404*a67afe4dSAndroid Build Coastguard Worker} 405*a67afe4dSAndroid Build Coastguard Worker 406*a67afe4dSAndroid Build Coastguard Worker 407*a67afe4dSAndroid Build Coastguard Worker## ----------------- ## 408*a67afe4dSAndroid Build Coastguard Worker## Global variables. ## 409*a67afe4dSAndroid Build Coastguard Worker## ----------------- ## 410*a67afe4dSAndroid Build Coastguard Worker 411*a67afe4dSAndroid Build Coastguard Worker# Except for the global variables explicitly listed below, the following 412*a67afe4dSAndroid Build Coastguard Worker# functions in the '^func_' namespace, and the '^require_' namespace 413*a67afe4dSAndroid Build Coastguard Worker# variables initialised in the 'Resource management' section, sourcing 414*a67afe4dSAndroid Build Coastguard Worker# this file will not pollute your global namespace with anything 415*a67afe4dSAndroid Build Coastguard Worker# else. There's no portable way to scope variables in Bourne shell 416*a67afe4dSAndroid Build Coastguard Worker# though, so actually running these functions will sometimes place 417*a67afe4dSAndroid Build Coastguard Worker# results into a variable named after the function, and often use 418*a67afe4dSAndroid Build Coastguard Worker# temporary variables in the '^_G_' namespace. If you are careful to 419*a67afe4dSAndroid Build Coastguard Worker# avoid using those namespaces casually in your sourcing script, things 420*a67afe4dSAndroid Build Coastguard Worker# should continue to work as you expect. And, of course, you can freely 421*a67afe4dSAndroid Build Coastguard Worker# overwrite any of the functions or variables defined here before 422*a67afe4dSAndroid Build Coastguard Worker# calling anything to customize them. 423*a67afe4dSAndroid Build Coastguard Worker 424*a67afe4dSAndroid Build Coastguard WorkerEXIT_SUCCESS=0 425*a67afe4dSAndroid Build Coastguard WorkerEXIT_FAILURE=1 426*a67afe4dSAndroid Build Coastguard WorkerEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 427*a67afe4dSAndroid Build Coastguard WorkerEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 428*a67afe4dSAndroid Build Coastguard Worker 429*a67afe4dSAndroid Build Coastguard Worker# Allow overriding, eg assuming that you follow the convention of 430*a67afe4dSAndroid Build Coastguard Worker# putting '$debug_cmd' at the start of all your functions, you can get 431*a67afe4dSAndroid Build Coastguard Worker# bash to show function call trace with: 432*a67afe4dSAndroid Build Coastguard Worker# 433*a67afe4dSAndroid Build Coastguard Worker# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 434*a67afe4dSAndroid Build Coastguard Workerdebug_cmd=${debug_cmd-":"} 435*a67afe4dSAndroid Build Coastguard Workerexit_cmd=: 436*a67afe4dSAndroid Build Coastguard Worker 437*a67afe4dSAndroid Build Coastguard Worker# By convention, finish your script with: 438*a67afe4dSAndroid Build Coastguard Worker# 439*a67afe4dSAndroid Build Coastguard Worker# exit $exit_status 440*a67afe4dSAndroid Build Coastguard Worker# 441*a67afe4dSAndroid Build Coastguard Worker# so that you can set exit_status to non-zero if you want to indicate 442*a67afe4dSAndroid Build Coastguard Worker# something went wrong during execution without actually bailing out at 443*a67afe4dSAndroid Build Coastguard Worker# the point of failure. 444*a67afe4dSAndroid Build Coastguard Workerexit_status=$EXIT_SUCCESS 445*a67afe4dSAndroid Build Coastguard Worker 446*a67afe4dSAndroid Build Coastguard Worker# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 447*a67afe4dSAndroid Build Coastguard Worker# is ksh but when the shell is invoked as "sh" and the current value of 448*a67afe4dSAndroid Build Coastguard Worker# the _XPG environment variable is not equal to 1 (one), the special 449*a67afe4dSAndroid Build Coastguard Worker# positional parameter $0, within a function call, is the name of the 450*a67afe4dSAndroid Build Coastguard Worker# function. 451*a67afe4dSAndroid Build Coastguard Workerprogpath=$0 452*a67afe4dSAndroid Build Coastguard Worker 453*a67afe4dSAndroid Build Coastguard Worker# The name of this program. 454*a67afe4dSAndroid Build Coastguard Workerprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 455*a67afe4dSAndroid Build Coastguard Worker 456*a67afe4dSAndroid Build Coastguard Worker# Make sure we have an absolute progpath for reexecution: 457*a67afe4dSAndroid Build Coastguard Workercase $progpath in 458*a67afe4dSAndroid Build Coastguard Worker [\\/]*|[A-Za-z]:\\*) ;; 459*a67afe4dSAndroid Build Coastguard Worker *[\\/]*) 460*a67afe4dSAndroid Build Coastguard Worker progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 461*a67afe4dSAndroid Build Coastguard Worker progdir=`cd "$progdir" && pwd` 462*a67afe4dSAndroid Build Coastguard Worker progpath=$progdir/$progname 463*a67afe4dSAndroid Build Coastguard Worker ;; 464*a67afe4dSAndroid Build Coastguard Worker *) 465*a67afe4dSAndroid Build Coastguard Worker _G_IFS=$IFS 466*a67afe4dSAndroid Build Coastguard Worker IFS=${PATH_SEPARATOR-:} 467*a67afe4dSAndroid Build Coastguard Worker for progdir in $PATH; do 468*a67afe4dSAndroid Build Coastguard Worker IFS=$_G_IFS 469*a67afe4dSAndroid Build Coastguard Worker test -x "$progdir/$progname" && break 470*a67afe4dSAndroid Build Coastguard Worker done 471*a67afe4dSAndroid Build Coastguard Worker IFS=$_G_IFS 472*a67afe4dSAndroid Build Coastguard Worker test -n "$progdir" || progdir=`pwd` 473*a67afe4dSAndroid Build Coastguard Worker progpath=$progdir/$progname 474*a67afe4dSAndroid Build Coastguard Worker ;; 475*a67afe4dSAndroid Build Coastguard Workeresac 476*a67afe4dSAndroid Build Coastguard Worker 477*a67afe4dSAndroid Build Coastguard Worker 478*a67afe4dSAndroid Build Coastguard Worker## ----------------- ## 479*a67afe4dSAndroid Build Coastguard Worker## Standard options. ## 480*a67afe4dSAndroid Build Coastguard Worker## ----------------- ## 481*a67afe4dSAndroid Build Coastguard Worker 482*a67afe4dSAndroid Build Coastguard Worker# The following options affect the operation of the functions defined 483*a67afe4dSAndroid Build Coastguard Worker# below, and should be set appropriately depending on run-time para- 484*a67afe4dSAndroid Build Coastguard Worker# meters passed on the command line. 485*a67afe4dSAndroid Build Coastguard Worker 486*a67afe4dSAndroid Build Coastguard Workeropt_dry_run=false 487*a67afe4dSAndroid Build Coastguard Workeropt_quiet=false 488*a67afe4dSAndroid Build Coastguard Workeropt_verbose=false 489*a67afe4dSAndroid Build Coastguard Worker 490*a67afe4dSAndroid Build Coastguard Worker# Categories 'all' and 'none' are always available. Append any others 491*a67afe4dSAndroid Build Coastguard Worker# you will pass as the first argument to func_warning from your own 492*a67afe4dSAndroid Build Coastguard Worker# code. 493*a67afe4dSAndroid Build Coastguard Workerwarning_categories= 494*a67afe4dSAndroid Build Coastguard Worker 495*a67afe4dSAndroid Build Coastguard Worker# By default, display warnings according to 'opt_warning_types'. Set 496*a67afe4dSAndroid Build Coastguard Worker# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 497*a67afe4dSAndroid Build Coastguard Worker# treat the next displayed warning as a fatal error. 498*a67afe4dSAndroid Build Coastguard Workerwarning_func=func_warn_and_continue 499*a67afe4dSAndroid Build Coastguard Worker 500*a67afe4dSAndroid Build Coastguard Worker# Set to 'all' to display all warnings, 'none' to suppress all 501*a67afe4dSAndroid Build Coastguard Worker# warnings, or a space delimited list of some subset of 502*a67afe4dSAndroid Build Coastguard Worker# 'warning_categories' to display only the listed warnings. 503*a67afe4dSAndroid Build Coastguard Workeropt_warning_types=all 504*a67afe4dSAndroid Build Coastguard Worker 505*a67afe4dSAndroid Build Coastguard Worker 506*a67afe4dSAndroid Build Coastguard Worker## -------------------- ## 507*a67afe4dSAndroid Build Coastguard Worker## Resource management. ## 508*a67afe4dSAndroid Build Coastguard Worker## -------------------- ## 509*a67afe4dSAndroid Build Coastguard Worker 510*a67afe4dSAndroid Build Coastguard Worker# This section contains definitions for functions that each ensure a 511*a67afe4dSAndroid Build Coastguard Worker# particular resource (a file, or a non-empty configuration variable for 512*a67afe4dSAndroid Build Coastguard Worker# example) is available, and if appropriate to extract default values 513*a67afe4dSAndroid Build Coastguard Worker# from pertinent package files. Call them using their associated 514*a67afe4dSAndroid Build Coastguard Worker# 'require_*' variable to ensure that they are executed, at most, once. 515*a67afe4dSAndroid Build Coastguard Worker# 516*a67afe4dSAndroid Build Coastguard Worker# It's entirely deliberate that calling these functions can set 517*a67afe4dSAndroid Build Coastguard Worker# variables that don't obey the namespace limitations obeyed by the rest 518*a67afe4dSAndroid Build Coastguard Worker# of this file, in order that that they be as useful as possible to 519*a67afe4dSAndroid Build Coastguard Worker# callers. 520*a67afe4dSAndroid Build Coastguard Worker 521*a67afe4dSAndroid Build Coastguard Worker 522*a67afe4dSAndroid Build Coastguard Worker# require_term_colors 523*a67afe4dSAndroid Build Coastguard Worker# ------------------- 524*a67afe4dSAndroid Build Coastguard Worker# Allow display of bold text on terminals that support it. 525*a67afe4dSAndroid Build Coastguard Workerrequire_term_colors=func_require_term_colors 526*a67afe4dSAndroid Build Coastguard Workerfunc_require_term_colors () 527*a67afe4dSAndroid Build Coastguard Worker{ 528*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 529*a67afe4dSAndroid Build Coastguard Worker 530*a67afe4dSAndroid Build Coastguard Worker test -t 1 && { 531*a67afe4dSAndroid Build Coastguard Worker # COLORTERM and USE_ANSI_COLORS environment variables take 532*a67afe4dSAndroid Build Coastguard Worker # precedence, because most terminfo databases neglect to describe 533*a67afe4dSAndroid Build Coastguard Worker # whether color sequences are supported. 534*a67afe4dSAndroid Build Coastguard Worker test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 535*a67afe4dSAndroid Build Coastguard Worker 536*a67afe4dSAndroid Build Coastguard Worker if test 1 = "$USE_ANSI_COLORS"; then 537*a67afe4dSAndroid Build Coastguard Worker # Standard ANSI escape sequences 538*a67afe4dSAndroid Build Coastguard Worker tc_reset='[0m' 539*a67afe4dSAndroid Build Coastguard Worker tc_bold='[1m'; tc_standout='[7m' 540*a67afe4dSAndroid Build Coastguard Worker tc_red='[31m'; tc_green='[32m' 541*a67afe4dSAndroid Build Coastguard Worker tc_blue='[34m'; tc_cyan='[36m' 542*a67afe4dSAndroid Build Coastguard Worker else 543*a67afe4dSAndroid Build Coastguard Worker # Otherwise trust the terminfo database after all. 544*a67afe4dSAndroid Build Coastguard Worker test -n "`tput sgr0 2>/dev/null`" && { 545*a67afe4dSAndroid Build Coastguard Worker tc_reset=`tput sgr0` 546*a67afe4dSAndroid Build Coastguard Worker test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 547*a67afe4dSAndroid Build Coastguard Worker tc_standout=$tc_bold 548*a67afe4dSAndroid Build Coastguard Worker test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 549*a67afe4dSAndroid Build Coastguard Worker test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 550*a67afe4dSAndroid Build Coastguard Worker test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 551*a67afe4dSAndroid Build Coastguard Worker test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 552*a67afe4dSAndroid Build Coastguard Worker test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 553*a67afe4dSAndroid Build Coastguard Worker } 554*a67afe4dSAndroid Build Coastguard Worker fi 555*a67afe4dSAndroid Build Coastguard Worker } 556*a67afe4dSAndroid Build Coastguard Worker 557*a67afe4dSAndroid Build Coastguard Worker require_term_colors=: 558*a67afe4dSAndroid Build Coastguard Worker} 559*a67afe4dSAndroid Build Coastguard Worker 560*a67afe4dSAndroid Build Coastguard Worker 561*a67afe4dSAndroid Build Coastguard Worker## ----------------- ## 562*a67afe4dSAndroid Build Coastguard Worker## Function library. ## 563*a67afe4dSAndroid Build Coastguard Worker## ----------------- ## 564*a67afe4dSAndroid Build Coastguard Worker 565*a67afe4dSAndroid Build Coastguard Worker# This section contains a variety of useful functions to call in your 566*a67afe4dSAndroid Build Coastguard Worker# scripts. Take note of the portable wrappers for features provided by 567*a67afe4dSAndroid Build Coastguard Worker# some modern shells, which will fall back to slower equivalents on 568*a67afe4dSAndroid Build Coastguard Worker# less featureful shells. 569*a67afe4dSAndroid Build Coastguard Worker 570*a67afe4dSAndroid Build Coastguard Worker 571*a67afe4dSAndroid Build Coastguard Worker# func_append VAR VALUE 572*a67afe4dSAndroid Build Coastguard Worker# --------------------- 573*a67afe4dSAndroid Build Coastguard Worker# Append VALUE onto the existing contents of VAR. 574*a67afe4dSAndroid Build Coastguard Worker 575*a67afe4dSAndroid Build Coastguard Worker # We should try to minimise forks, especially on Windows where they are 576*a67afe4dSAndroid Build Coastguard Worker # unreasonably slow, so skip the feature probes when bash or zsh are 577*a67afe4dSAndroid Build Coastguard Worker # being used: 578*a67afe4dSAndroid Build Coastguard Worker if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 579*a67afe4dSAndroid Build Coastguard Worker : ${_G_HAVE_ARITH_OP="yes"} 580*a67afe4dSAndroid Build Coastguard Worker : ${_G_HAVE_XSI_OPS="yes"} 581*a67afe4dSAndroid Build Coastguard Worker # The += operator was introduced in bash 3.1 582*a67afe4dSAndroid Build Coastguard Worker case $BASH_VERSION in 583*a67afe4dSAndroid Build Coastguard Worker [12].* | 3.0 | 3.0*) ;; 584*a67afe4dSAndroid Build Coastguard Worker *) 585*a67afe4dSAndroid Build Coastguard Worker : ${_G_HAVE_PLUSEQ_OP="yes"} 586*a67afe4dSAndroid Build Coastguard Worker ;; 587*a67afe4dSAndroid Build Coastguard Worker esac 588*a67afe4dSAndroid Build Coastguard Worker fi 589*a67afe4dSAndroid Build Coastguard Worker 590*a67afe4dSAndroid Build Coastguard Worker # _G_HAVE_PLUSEQ_OP 591*a67afe4dSAndroid Build Coastguard Worker # Can be empty, in which case the shell is probed, "yes" if += is 592*a67afe4dSAndroid Build Coastguard Worker # useable or anything else if it does not work. 593*a67afe4dSAndroid Build Coastguard Worker test -z "$_G_HAVE_PLUSEQ_OP" \ 594*a67afe4dSAndroid Build Coastguard Worker && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 595*a67afe4dSAndroid Build Coastguard Worker && _G_HAVE_PLUSEQ_OP=yes 596*a67afe4dSAndroid Build Coastguard Worker 597*a67afe4dSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_PLUSEQ_OP" 598*a67afe4dSAndroid Build Coastguard Workerthen 599*a67afe4dSAndroid Build Coastguard Worker # This is an XSI compatible shell, allowing a faster implementation... 600*a67afe4dSAndroid Build Coastguard Worker eval 'func_append () 601*a67afe4dSAndroid Build Coastguard Worker { 602*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 603*a67afe4dSAndroid Build Coastguard Worker 604*a67afe4dSAndroid Build Coastguard Worker eval "$1+=\$2" 605*a67afe4dSAndroid Build Coastguard Worker }' 606*a67afe4dSAndroid Build Coastguard Workerelse 607*a67afe4dSAndroid Build Coastguard Worker # ...otherwise fall back to using expr, which is often a shell builtin. 608*a67afe4dSAndroid Build Coastguard Worker func_append () 609*a67afe4dSAndroid Build Coastguard Worker { 610*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 611*a67afe4dSAndroid Build Coastguard Worker 612*a67afe4dSAndroid Build Coastguard Worker eval "$1=\$$1\$2" 613*a67afe4dSAndroid Build Coastguard Worker } 614*a67afe4dSAndroid Build Coastguard Workerfi 615*a67afe4dSAndroid Build Coastguard Worker 616*a67afe4dSAndroid Build Coastguard Worker 617*a67afe4dSAndroid Build Coastguard Worker# func_append_quoted VAR VALUE 618*a67afe4dSAndroid Build Coastguard Worker# ---------------------------- 619*a67afe4dSAndroid Build Coastguard Worker# Quote VALUE and append to the end of shell variable VAR, separated 620*a67afe4dSAndroid Build Coastguard Worker# by a space. 621*a67afe4dSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_PLUSEQ_OP"; then 622*a67afe4dSAndroid Build Coastguard Worker eval 'func_append_quoted () 623*a67afe4dSAndroid Build Coastguard Worker { 624*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 625*a67afe4dSAndroid Build Coastguard Worker 626*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$2" 627*a67afe4dSAndroid Build Coastguard Worker eval "$1+=\\ \$func_quote_arg_result" 628*a67afe4dSAndroid Build Coastguard Worker }' 629*a67afe4dSAndroid Build Coastguard Workerelse 630*a67afe4dSAndroid Build Coastguard Worker func_append_quoted () 631*a67afe4dSAndroid Build Coastguard Worker { 632*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 633*a67afe4dSAndroid Build Coastguard Worker 634*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$2" 635*a67afe4dSAndroid Build Coastguard Worker eval "$1=\$$1\\ \$func_quote_arg_result" 636*a67afe4dSAndroid Build Coastguard Worker } 637*a67afe4dSAndroid Build Coastguard Workerfi 638*a67afe4dSAndroid Build Coastguard Worker 639*a67afe4dSAndroid Build Coastguard Worker 640*a67afe4dSAndroid Build Coastguard Worker# func_append_uniq VAR VALUE 641*a67afe4dSAndroid Build Coastguard Worker# -------------------------- 642*a67afe4dSAndroid Build Coastguard Worker# Append unique VALUE onto the existing contents of VAR, assuming 643*a67afe4dSAndroid Build Coastguard Worker# entries are delimited by the first character of VALUE. For example: 644*a67afe4dSAndroid Build Coastguard Worker# 645*a67afe4dSAndroid Build Coastguard Worker# func_append_uniq options " --another-option option-argument" 646*a67afe4dSAndroid Build Coastguard Worker# 647*a67afe4dSAndroid Build Coastguard Worker# will only append to $options if " --another-option option-argument " 648*a67afe4dSAndroid Build Coastguard Worker# is not already present somewhere in $options already (note spaces at 649*a67afe4dSAndroid Build Coastguard Worker# each end implied by leading space in second argument). 650*a67afe4dSAndroid Build Coastguard Workerfunc_append_uniq () 651*a67afe4dSAndroid Build Coastguard Worker{ 652*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 653*a67afe4dSAndroid Build Coastguard Worker 654*a67afe4dSAndroid Build Coastguard Worker eval _G_current_value='`$ECHO $'$1'`' 655*a67afe4dSAndroid Build Coastguard Worker _G_delim=`expr "$2" : '\(.\)'` 656*a67afe4dSAndroid Build Coastguard Worker 657*a67afe4dSAndroid Build Coastguard Worker case $_G_delim$_G_current_value$_G_delim in 658*a67afe4dSAndroid Build Coastguard Worker *"$2$_G_delim"*) ;; 659*a67afe4dSAndroid Build Coastguard Worker *) func_append "$@" ;; 660*a67afe4dSAndroid Build Coastguard Worker esac 661*a67afe4dSAndroid Build Coastguard Worker} 662*a67afe4dSAndroid Build Coastguard Worker 663*a67afe4dSAndroid Build Coastguard Worker 664*a67afe4dSAndroid Build Coastguard Worker# func_arith TERM... 665*a67afe4dSAndroid Build Coastguard Worker# ------------------ 666*a67afe4dSAndroid Build Coastguard Worker# Set func_arith_result to the result of evaluating TERMs. 667*a67afe4dSAndroid Build Coastguard Worker test -z "$_G_HAVE_ARITH_OP" \ 668*a67afe4dSAndroid Build Coastguard Worker && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 669*a67afe4dSAndroid Build Coastguard Worker && _G_HAVE_ARITH_OP=yes 670*a67afe4dSAndroid Build Coastguard Worker 671*a67afe4dSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_ARITH_OP"; then 672*a67afe4dSAndroid Build Coastguard Worker eval 'func_arith () 673*a67afe4dSAndroid Build Coastguard Worker { 674*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 675*a67afe4dSAndroid Build Coastguard Worker 676*a67afe4dSAndroid Build Coastguard Worker func_arith_result=$(( $* )) 677*a67afe4dSAndroid Build Coastguard Worker }' 678*a67afe4dSAndroid Build Coastguard Workerelse 679*a67afe4dSAndroid Build Coastguard Worker func_arith () 680*a67afe4dSAndroid Build Coastguard Worker { 681*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 682*a67afe4dSAndroid Build Coastguard Worker 683*a67afe4dSAndroid Build Coastguard Worker func_arith_result=`expr "$@"` 684*a67afe4dSAndroid Build Coastguard Worker } 685*a67afe4dSAndroid Build Coastguard Workerfi 686*a67afe4dSAndroid Build Coastguard Worker 687*a67afe4dSAndroid Build Coastguard Worker 688*a67afe4dSAndroid Build Coastguard Worker# func_basename FILE 689*a67afe4dSAndroid Build Coastguard Worker# ------------------ 690*a67afe4dSAndroid Build Coastguard Worker# Set func_basename_result to FILE with everything up to and including 691*a67afe4dSAndroid Build Coastguard Worker# the last / stripped. 692*a67afe4dSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS"; then 693*a67afe4dSAndroid Build Coastguard Worker # If this shell supports suffix pattern removal, then use it to avoid 694*a67afe4dSAndroid Build Coastguard Worker # forking. Hide the definitions single quotes in case the shell chokes 695*a67afe4dSAndroid Build Coastguard Worker # on unsupported syntax... 696*a67afe4dSAndroid Build Coastguard Worker _b='func_basename_result=${1##*/}' 697*a67afe4dSAndroid Build Coastguard Worker _d='case $1 in 698*a67afe4dSAndroid Build Coastguard Worker */*) func_dirname_result=${1%/*}$2 ;; 699*a67afe4dSAndroid Build Coastguard Worker * ) func_dirname_result=$3 ;; 700*a67afe4dSAndroid Build Coastguard Worker esac' 701*a67afe4dSAndroid Build Coastguard Worker 702*a67afe4dSAndroid Build Coastguard Workerelse 703*a67afe4dSAndroid Build Coastguard Worker # ...otherwise fall back to using sed. 704*a67afe4dSAndroid Build Coastguard Worker _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 705*a67afe4dSAndroid Build Coastguard Worker _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 706*a67afe4dSAndroid Build Coastguard Worker if test "X$func_dirname_result" = "X$1"; then 707*a67afe4dSAndroid Build Coastguard Worker func_dirname_result=$3 708*a67afe4dSAndroid Build Coastguard Worker else 709*a67afe4dSAndroid Build Coastguard Worker func_append func_dirname_result "$2" 710*a67afe4dSAndroid Build Coastguard Worker fi' 711*a67afe4dSAndroid Build Coastguard Workerfi 712*a67afe4dSAndroid Build Coastguard Worker 713*a67afe4dSAndroid Build Coastguard Workereval 'func_basename () 714*a67afe4dSAndroid Build Coastguard Worker{ 715*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 716*a67afe4dSAndroid Build Coastguard Worker 717*a67afe4dSAndroid Build Coastguard Worker '"$_b"' 718*a67afe4dSAndroid Build Coastguard Worker}' 719*a67afe4dSAndroid Build Coastguard Worker 720*a67afe4dSAndroid Build Coastguard Worker 721*a67afe4dSAndroid Build Coastguard Worker# func_dirname FILE APPEND NONDIR_REPLACEMENT 722*a67afe4dSAndroid Build Coastguard Worker# ------------------------------------------- 723*a67afe4dSAndroid Build Coastguard Worker# Compute the dirname of FILE. If nonempty, add APPEND to the result, 724*a67afe4dSAndroid Build Coastguard Worker# otherwise set result to NONDIR_REPLACEMENT. 725*a67afe4dSAndroid Build Coastguard Workereval 'func_dirname () 726*a67afe4dSAndroid Build Coastguard Worker{ 727*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 728*a67afe4dSAndroid Build Coastguard Worker 729*a67afe4dSAndroid Build Coastguard Worker '"$_d"' 730*a67afe4dSAndroid Build Coastguard Worker}' 731*a67afe4dSAndroid Build Coastguard Worker 732*a67afe4dSAndroid Build Coastguard Worker 733*a67afe4dSAndroid Build Coastguard Worker# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 734*a67afe4dSAndroid Build Coastguard Worker# -------------------------------------------------------- 735*a67afe4dSAndroid Build Coastguard Worker# Perform func_basename and func_dirname in a single function 736*a67afe4dSAndroid Build Coastguard Worker# call: 737*a67afe4dSAndroid Build Coastguard Worker# dirname: Compute the dirname of FILE. If nonempty, 738*a67afe4dSAndroid Build Coastguard Worker# add APPEND to the result, otherwise set result 739*a67afe4dSAndroid Build Coastguard Worker# to NONDIR_REPLACEMENT. 740*a67afe4dSAndroid Build Coastguard Worker# value returned in "$func_dirname_result" 741*a67afe4dSAndroid Build Coastguard Worker# basename: Compute filename of FILE. 742*a67afe4dSAndroid Build Coastguard Worker# value retuned in "$func_basename_result" 743*a67afe4dSAndroid Build Coastguard Worker# For efficiency, we do not delegate to the functions above but instead 744*a67afe4dSAndroid Build Coastguard Worker# duplicate the functionality here. 745*a67afe4dSAndroid Build Coastguard Workereval 'func_dirname_and_basename () 746*a67afe4dSAndroid Build Coastguard Worker{ 747*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 748*a67afe4dSAndroid Build Coastguard Worker 749*a67afe4dSAndroid Build Coastguard Worker '"$_b"' 750*a67afe4dSAndroid Build Coastguard Worker '"$_d"' 751*a67afe4dSAndroid Build Coastguard Worker}' 752*a67afe4dSAndroid Build Coastguard Worker 753*a67afe4dSAndroid Build Coastguard Worker 754*a67afe4dSAndroid Build Coastguard Worker# func_echo ARG... 755*a67afe4dSAndroid Build Coastguard Worker# ---------------- 756*a67afe4dSAndroid Build Coastguard Worker# Echo program name prefixed message. 757*a67afe4dSAndroid Build Coastguard Workerfunc_echo () 758*a67afe4dSAndroid Build Coastguard Worker{ 759*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 760*a67afe4dSAndroid Build Coastguard Worker 761*a67afe4dSAndroid Build Coastguard Worker _G_message=$* 762*a67afe4dSAndroid Build Coastguard Worker 763*a67afe4dSAndroid Build Coastguard Worker func_echo_IFS=$IFS 764*a67afe4dSAndroid Build Coastguard Worker IFS=$nl 765*a67afe4dSAndroid Build Coastguard Worker for _G_line in $_G_message; do 766*a67afe4dSAndroid Build Coastguard Worker IFS=$func_echo_IFS 767*a67afe4dSAndroid Build Coastguard Worker $ECHO "$progname: $_G_line" 768*a67afe4dSAndroid Build Coastguard Worker done 769*a67afe4dSAndroid Build Coastguard Worker IFS=$func_echo_IFS 770*a67afe4dSAndroid Build Coastguard Worker} 771*a67afe4dSAndroid Build Coastguard Worker 772*a67afe4dSAndroid Build Coastguard Worker 773*a67afe4dSAndroid Build Coastguard Worker# func_echo_all ARG... 774*a67afe4dSAndroid Build Coastguard Worker# -------------------- 775*a67afe4dSAndroid Build Coastguard Worker# Invoke $ECHO with all args, space-separated. 776*a67afe4dSAndroid Build Coastguard Workerfunc_echo_all () 777*a67afe4dSAndroid Build Coastguard Worker{ 778*a67afe4dSAndroid Build Coastguard Worker $ECHO "$*" 779*a67afe4dSAndroid Build Coastguard Worker} 780*a67afe4dSAndroid Build Coastguard Worker 781*a67afe4dSAndroid Build Coastguard Worker 782*a67afe4dSAndroid Build Coastguard Worker# func_echo_infix_1 INFIX ARG... 783*a67afe4dSAndroid Build Coastguard Worker# ------------------------------ 784*a67afe4dSAndroid Build Coastguard Worker# Echo program name, followed by INFIX on the first line, with any 785*a67afe4dSAndroid Build Coastguard Worker# additional lines not showing INFIX. 786*a67afe4dSAndroid Build Coastguard Workerfunc_echo_infix_1 () 787*a67afe4dSAndroid Build Coastguard Worker{ 788*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 789*a67afe4dSAndroid Build Coastguard Worker 790*a67afe4dSAndroid Build Coastguard Worker $require_term_colors 791*a67afe4dSAndroid Build Coastguard Worker 792*a67afe4dSAndroid Build Coastguard Worker _G_infix=$1; shift 793*a67afe4dSAndroid Build Coastguard Worker _G_indent=$_G_infix 794*a67afe4dSAndroid Build Coastguard Worker _G_prefix="$progname: $_G_infix: " 795*a67afe4dSAndroid Build Coastguard Worker _G_message=$* 796*a67afe4dSAndroid Build Coastguard Worker 797*a67afe4dSAndroid Build Coastguard Worker # Strip color escape sequences before counting printable length 798*a67afe4dSAndroid Build Coastguard Worker for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 799*a67afe4dSAndroid Build Coastguard Worker do 800*a67afe4dSAndroid Build Coastguard Worker test -n "$_G_tc" && { 801*a67afe4dSAndroid Build Coastguard Worker _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 802*a67afe4dSAndroid Build Coastguard Worker _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 803*a67afe4dSAndroid Build Coastguard Worker } 804*a67afe4dSAndroid Build Coastguard Worker done 805*a67afe4dSAndroid Build Coastguard Worker _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 806*a67afe4dSAndroid Build Coastguard Worker 807*a67afe4dSAndroid Build Coastguard Worker func_echo_infix_1_IFS=$IFS 808*a67afe4dSAndroid Build Coastguard Worker IFS=$nl 809*a67afe4dSAndroid Build Coastguard Worker for _G_line in $_G_message; do 810*a67afe4dSAndroid Build Coastguard Worker IFS=$func_echo_infix_1_IFS 811*a67afe4dSAndroid Build Coastguard Worker $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 812*a67afe4dSAndroid Build Coastguard Worker _G_prefix=$_G_indent 813*a67afe4dSAndroid Build Coastguard Worker done 814*a67afe4dSAndroid Build Coastguard Worker IFS=$func_echo_infix_1_IFS 815*a67afe4dSAndroid Build Coastguard Worker} 816*a67afe4dSAndroid Build Coastguard Worker 817*a67afe4dSAndroid Build Coastguard Worker 818*a67afe4dSAndroid Build Coastguard Worker# func_error ARG... 819*a67afe4dSAndroid Build Coastguard Worker# ----------------- 820*a67afe4dSAndroid Build Coastguard Worker# Echo program name prefixed message to standard error. 821*a67afe4dSAndroid Build Coastguard Workerfunc_error () 822*a67afe4dSAndroid Build Coastguard Worker{ 823*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 824*a67afe4dSAndroid Build Coastguard Worker 825*a67afe4dSAndroid Build Coastguard Worker $require_term_colors 826*a67afe4dSAndroid Build Coastguard Worker 827*a67afe4dSAndroid Build Coastguard Worker func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 828*a67afe4dSAndroid Build Coastguard Worker} 829*a67afe4dSAndroid Build Coastguard Worker 830*a67afe4dSAndroid Build Coastguard Worker 831*a67afe4dSAndroid Build Coastguard Worker# func_fatal_error ARG... 832*a67afe4dSAndroid Build Coastguard Worker# ----------------------- 833*a67afe4dSAndroid Build Coastguard Worker# Echo program name prefixed message to standard error, and exit. 834*a67afe4dSAndroid Build Coastguard Workerfunc_fatal_error () 835*a67afe4dSAndroid Build Coastguard Worker{ 836*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 837*a67afe4dSAndroid Build Coastguard Worker 838*a67afe4dSAndroid Build Coastguard Worker func_error "$*" 839*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_FAILURE 840*a67afe4dSAndroid Build Coastguard Worker} 841*a67afe4dSAndroid Build Coastguard Worker 842*a67afe4dSAndroid Build Coastguard Worker 843*a67afe4dSAndroid Build Coastguard Worker# func_grep EXPRESSION FILENAME 844*a67afe4dSAndroid Build Coastguard Worker# ----------------------------- 845*a67afe4dSAndroid Build Coastguard Worker# Check whether EXPRESSION matches any line of FILENAME, without output. 846*a67afe4dSAndroid Build Coastguard Workerfunc_grep () 847*a67afe4dSAndroid Build Coastguard Worker{ 848*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 849*a67afe4dSAndroid Build Coastguard Worker 850*a67afe4dSAndroid Build Coastguard Worker $GREP "$1" "$2" >/dev/null 2>&1 851*a67afe4dSAndroid Build Coastguard Worker} 852*a67afe4dSAndroid Build Coastguard Worker 853*a67afe4dSAndroid Build Coastguard Worker 854*a67afe4dSAndroid Build Coastguard Worker# func_len STRING 855*a67afe4dSAndroid Build Coastguard Worker# --------------- 856*a67afe4dSAndroid Build Coastguard Worker# Set func_len_result to the length of STRING. STRING may not 857*a67afe4dSAndroid Build Coastguard Worker# start with a hyphen. 858*a67afe4dSAndroid Build Coastguard Worker test -z "$_G_HAVE_XSI_OPS" \ 859*a67afe4dSAndroid Build Coastguard Worker && (eval 'x=a/b/c; 860*a67afe4dSAndroid Build Coastguard Worker test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 861*a67afe4dSAndroid Build Coastguard Worker && _G_HAVE_XSI_OPS=yes 862*a67afe4dSAndroid Build Coastguard Worker 863*a67afe4dSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS"; then 864*a67afe4dSAndroid Build Coastguard Worker eval 'func_len () 865*a67afe4dSAndroid Build Coastguard Worker { 866*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 867*a67afe4dSAndroid Build Coastguard Worker 868*a67afe4dSAndroid Build Coastguard Worker func_len_result=${#1} 869*a67afe4dSAndroid Build Coastguard Worker }' 870*a67afe4dSAndroid Build Coastguard Workerelse 871*a67afe4dSAndroid Build Coastguard Worker func_len () 872*a67afe4dSAndroid Build Coastguard Worker { 873*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 874*a67afe4dSAndroid Build Coastguard Worker 875*a67afe4dSAndroid Build Coastguard Worker func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 876*a67afe4dSAndroid Build Coastguard Worker } 877*a67afe4dSAndroid Build Coastguard Workerfi 878*a67afe4dSAndroid Build Coastguard Worker 879*a67afe4dSAndroid Build Coastguard Worker 880*a67afe4dSAndroid Build Coastguard Worker# func_mkdir_p DIRECTORY-PATH 881*a67afe4dSAndroid Build Coastguard Worker# --------------------------- 882*a67afe4dSAndroid Build Coastguard Worker# Make sure the entire path to DIRECTORY-PATH is available. 883*a67afe4dSAndroid Build Coastguard Workerfunc_mkdir_p () 884*a67afe4dSAndroid Build Coastguard Worker{ 885*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 886*a67afe4dSAndroid Build Coastguard Worker 887*a67afe4dSAndroid Build Coastguard Worker _G_directory_path=$1 888*a67afe4dSAndroid Build Coastguard Worker _G_dir_list= 889*a67afe4dSAndroid Build Coastguard Worker 890*a67afe4dSAndroid Build Coastguard Worker if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 891*a67afe4dSAndroid Build Coastguard Worker 892*a67afe4dSAndroid Build Coastguard Worker # Protect directory names starting with '-' 893*a67afe4dSAndroid Build Coastguard Worker case $_G_directory_path in 894*a67afe4dSAndroid Build Coastguard Worker -*) _G_directory_path=./$_G_directory_path ;; 895*a67afe4dSAndroid Build Coastguard Worker esac 896*a67afe4dSAndroid Build Coastguard Worker 897*a67afe4dSAndroid Build Coastguard Worker # While some portion of DIR does not yet exist... 898*a67afe4dSAndroid Build Coastguard Worker while test ! -d "$_G_directory_path"; do 899*a67afe4dSAndroid Build Coastguard Worker # ...make a list in topmost first order. Use a colon delimited 900*a67afe4dSAndroid Build Coastguard Worker # list incase some portion of path contains whitespace. 901*a67afe4dSAndroid Build Coastguard Worker _G_dir_list=$_G_directory_path:$_G_dir_list 902*a67afe4dSAndroid Build Coastguard Worker 903*a67afe4dSAndroid Build Coastguard Worker # If the last portion added has no slash in it, the list is done 904*a67afe4dSAndroid Build Coastguard Worker case $_G_directory_path in */*) ;; *) break ;; esac 905*a67afe4dSAndroid Build Coastguard Worker 906*a67afe4dSAndroid Build Coastguard Worker # ...otherwise throw away the child directory and loop 907*a67afe4dSAndroid Build Coastguard Worker _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 908*a67afe4dSAndroid Build Coastguard Worker done 909*a67afe4dSAndroid Build Coastguard Worker _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 910*a67afe4dSAndroid Build Coastguard Worker 911*a67afe4dSAndroid Build Coastguard Worker func_mkdir_p_IFS=$IFS; IFS=: 912*a67afe4dSAndroid Build Coastguard Worker for _G_dir in $_G_dir_list; do 913*a67afe4dSAndroid Build Coastguard Worker IFS=$func_mkdir_p_IFS 914*a67afe4dSAndroid Build Coastguard Worker # mkdir can fail with a 'File exist' error if two processes 915*a67afe4dSAndroid Build Coastguard Worker # try to create one of the directories concurrently. Don't 916*a67afe4dSAndroid Build Coastguard Worker # stop in that case! 917*a67afe4dSAndroid Build Coastguard Worker $MKDIR "$_G_dir" 2>/dev/null || : 918*a67afe4dSAndroid Build Coastguard Worker done 919*a67afe4dSAndroid Build Coastguard Worker IFS=$func_mkdir_p_IFS 920*a67afe4dSAndroid Build Coastguard Worker 921*a67afe4dSAndroid Build Coastguard Worker # Bail out if we (or some other process) failed to create a directory. 922*a67afe4dSAndroid Build Coastguard Worker test -d "$_G_directory_path" || \ 923*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "Failed to create '$1'" 924*a67afe4dSAndroid Build Coastguard Worker fi 925*a67afe4dSAndroid Build Coastguard Worker} 926*a67afe4dSAndroid Build Coastguard Worker 927*a67afe4dSAndroid Build Coastguard Worker 928*a67afe4dSAndroid Build Coastguard Worker# func_mktempdir [BASENAME] 929*a67afe4dSAndroid Build Coastguard Worker# ------------------------- 930*a67afe4dSAndroid Build Coastguard Worker# Make a temporary directory that won't clash with other running 931*a67afe4dSAndroid Build Coastguard Worker# libtool processes, and avoids race conditions if possible. If 932*a67afe4dSAndroid Build Coastguard Worker# given, BASENAME is the basename for that directory. 933*a67afe4dSAndroid Build Coastguard Workerfunc_mktempdir () 934*a67afe4dSAndroid Build Coastguard Worker{ 935*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 936*a67afe4dSAndroid Build Coastguard Worker 937*a67afe4dSAndroid Build Coastguard Worker _G_template=${TMPDIR-/tmp}/${1-$progname} 938*a67afe4dSAndroid Build Coastguard Worker 939*a67afe4dSAndroid Build Coastguard Worker if test : = "$opt_dry_run"; then 940*a67afe4dSAndroid Build Coastguard Worker # Return a directory name, but don't create it in dry-run mode 941*a67afe4dSAndroid Build Coastguard Worker _G_tmpdir=$_G_template-$$ 942*a67afe4dSAndroid Build Coastguard Worker else 943*a67afe4dSAndroid Build Coastguard Worker 944*a67afe4dSAndroid Build Coastguard Worker # If mktemp works, use that first and foremost 945*a67afe4dSAndroid Build Coastguard Worker _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 946*a67afe4dSAndroid Build Coastguard Worker 947*a67afe4dSAndroid Build Coastguard Worker if test ! -d "$_G_tmpdir"; then 948*a67afe4dSAndroid Build Coastguard Worker # Failing that, at least try and use $RANDOM to avoid a race 949*a67afe4dSAndroid Build Coastguard Worker _G_tmpdir=$_G_template-${RANDOM-0}$$ 950*a67afe4dSAndroid Build Coastguard Worker 951*a67afe4dSAndroid Build Coastguard Worker func_mktempdir_umask=`umask` 952*a67afe4dSAndroid Build Coastguard Worker umask 0077 953*a67afe4dSAndroid Build Coastguard Worker $MKDIR "$_G_tmpdir" 954*a67afe4dSAndroid Build Coastguard Worker umask $func_mktempdir_umask 955*a67afe4dSAndroid Build Coastguard Worker fi 956*a67afe4dSAndroid Build Coastguard Worker 957*a67afe4dSAndroid Build Coastguard Worker # If we're not in dry-run mode, bomb out on failure 958*a67afe4dSAndroid Build Coastguard Worker test -d "$_G_tmpdir" || \ 959*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 960*a67afe4dSAndroid Build Coastguard Worker fi 961*a67afe4dSAndroid Build Coastguard Worker 962*a67afe4dSAndroid Build Coastguard Worker $ECHO "$_G_tmpdir" 963*a67afe4dSAndroid Build Coastguard Worker} 964*a67afe4dSAndroid Build Coastguard Worker 965*a67afe4dSAndroid Build Coastguard Worker 966*a67afe4dSAndroid Build Coastguard Worker# func_normal_abspath PATH 967*a67afe4dSAndroid Build Coastguard Worker# ------------------------ 968*a67afe4dSAndroid Build Coastguard Worker# Remove doubled-up and trailing slashes, "." path components, 969*a67afe4dSAndroid Build Coastguard Worker# and cancel out any ".." path components in PATH after making 970*a67afe4dSAndroid Build Coastguard Worker# it an absolute path. 971*a67afe4dSAndroid Build Coastguard Workerfunc_normal_abspath () 972*a67afe4dSAndroid Build Coastguard Worker{ 973*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 974*a67afe4dSAndroid Build Coastguard Worker 975*a67afe4dSAndroid Build Coastguard Worker # These SED scripts presuppose an absolute path with a trailing slash. 976*a67afe4dSAndroid Build Coastguard Worker _G_pathcar='s|^/\([^/]*\).*$|\1|' 977*a67afe4dSAndroid Build Coastguard Worker _G_pathcdr='s|^/[^/]*||' 978*a67afe4dSAndroid Build Coastguard Worker _G_removedotparts=':dotsl 979*a67afe4dSAndroid Build Coastguard Worker s|/\./|/|g 980*a67afe4dSAndroid Build Coastguard Worker t dotsl 981*a67afe4dSAndroid Build Coastguard Worker s|/\.$|/|' 982*a67afe4dSAndroid Build Coastguard Worker _G_collapseslashes='s|/\{1,\}|/|g' 983*a67afe4dSAndroid Build Coastguard Worker _G_finalslash='s|/*$|/|' 984*a67afe4dSAndroid Build Coastguard Worker 985*a67afe4dSAndroid Build Coastguard Worker # Start from root dir and reassemble the path. 986*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_result= 987*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_tpath=$1 988*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_altnamespace= 989*a67afe4dSAndroid Build Coastguard Worker case $func_normal_abspath_tpath in 990*a67afe4dSAndroid Build Coastguard Worker "") 991*a67afe4dSAndroid Build Coastguard Worker # Empty path, that just means $cwd. 992*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '/' "`pwd`" 993*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_result=$func_stripname_result 994*a67afe4dSAndroid Build Coastguard Worker return 995*a67afe4dSAndroid Build Coastguard Worker ;; 996*a67afe4dSAndroid Build Coastguard Worker # The next three entries are used to spot a run of precisely 997*a67afe4dSAndroid Build Coastguard Worker # two leading slashes without using negated character classes; 998*a67afe4dSAndroid Build Coastguard Worker # we take advantage of case's first-match behaviour. 999*a67afe4dSAndroid Build Coastguard Worker ///*) 1000*a67afe4dSAndroid Build Coastguard Worker # Unusual form of absolute path, do nothing. 1001*a67afe4dSAndroid Build Coastguard Worker ;; 1002*a67afe4dSAndroid Build Coastguard Worker //*) 1003*a67afe4dSAndroid Build Coastguard Worker # Not necessarily an ordinary path; POSIX reserves leading '//' 1004*a67afe4dSAndroid Build Coastguard Worker # and for example Cygwin uses it to access remote file shares 1005*a67afe4dSAndroid Build Coastguard Worker # over CIFS/SMB, so we conserve a leading double slash if found. 1006*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_altnamespace=/ 1007*a67afe4dSAndroid Build Coastguard Worker ;; 1008*a67afe4dSAndroid Build Coastguard Worker /*) 1009*a67afe4dSAndroid Build Coastguard Worker # Absolute path, do nothing. 1010*a67afe4dSAndroid Build Coastguard Worker ;; 1011*a67afe4dSAndroid Build Coastguard Worker *) 1012*a67afe4dSAndroid Build Coastguard Worker # Relative path, prepend $cwd. 1013*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 1014*a67afe4dSAndroid Build Coastguard Worker ;; 1015*a67afe4dSAndroid Build Coastguard Worker esac 1016*a67afe4dSAndroid Build Coastguard Worker 1017*a67afe4dSAndroid Build Coastguard Worker # Cancel out all the simple stuff to save iterations. We also want 1018*a67afe4dSAndroid Build Coastguard Worker # the path to end with a slash for ease of parsing, so make sure 1019*a67afe4dSAndroid Build Coastguard Worker # there is one (and only one) here. 1020*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1021*a67afe4dSAndroid Build Coastguard Worker -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 1022*a67afe4dSAndroid Build Coastguard Worker while :; do 1023*a67afe4dSAndroid Build Coastguard Worker # Processed it all yet? 1024*a67afe4dSAndroid Build Coastguard Worker if test / = "$func_normal_abspath_tpath"; then 1025*a67afe4dSAndroid Build Coastguard Worker # If we ascended to the root using ".." the result may be empty now. 1026*a67afe4dSAndroid Build Coastguard Worker if test -z "$func_normal_abspath_result"; then 1027*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_result=/ 1028*a67afe4dSAndroid Build Coastguard Worker fi 1029*a67afe4dSAndroid Build Coastguard Worker break 1030*a67afe4dSAndroid Build Coastguard Worker fi 1031*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1032*a67afe4dSAndroid Build Coastguard Worker -e "$_G_pathcar"` 1033*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1034*a67afe4dSAndroid Build Coastguard Worker -e "$_G_pathcdr"` 1035*a67afe4dSAndroid Build Coastguard Worker # Figure out what to do with it 1036*a67afe4dSAndroid Build Coastguard Worker case $func_normal_abspath_tcomponent in 1037*a67afe4dSAndroid Build Coastguard Worker "") 1038*a67afe4dSAndroid Build Coastguard Worker # Trailing empty path component, ignore it. 1039*a67afe4dSAndroid Build Coastguard Worker ;; 1040*a67afe4dSAndroid Build Coastguard Worker ..) 1041*a67afe4dSAndroid Build Coastguard Worker # Parent dir; strip last assembled component from result. 1042*a67afe4dSAndroid Build Coastguard Worker func_dirname "$func_normal_abspath_result" 1043*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_result=$func_dirname_result 1044*a67afe4dSAndroid Build Coastguard Worker ;; 1045*a67afe4dSAndroid Build Coastguard Worker *) 1046*a67afe4dSAndroid Build Coastguard Worker # Actual path component, append it. 1047*a67afe4dSAndroid Build Coastguard Worker func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 1048*a67afe4dSAndroid Build Coastguard Worker ;; 1049*a67afe4dSAndroid Build Coastguard Worker esac 1050*a67afe4dSAndroid Build Coastguard Worker done 1051*a67afe4dSAndroid Build Coastguard Worker # Restore leading double-slash if one was found on entry. 1052*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 1053*a67afe4dSAndroid Build Coastguard Worker} 1054*a67afe4dSAndroid Build Coastguard Worker 1055*a67afe4dSAndroid Build Coastguard Worker 1056*a67afe4dSAndroid Build Coastguard Worker# func_notquiet ARG... 1057*a67afe4dSAndroid Build Coastguard Worker# -------------------- 1058*a67afe4dSAndroid Build Coastguard Worker# Echo program name prefixed message only when not in quiet mode. 1059*a67afe4dSAndroid Build Coastguard Workerfunc_notquiet () 1060*a67afe4dSAndroid Build Coastguard Worker{ 1061*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1062*a67afe4dSAndroid Build Coastguard Worker 1063*a67afe4dSAndroid Build Coastguard Worker $opt_quiet || func_echo ${1+"$@"} 1064*a67afe4dSAndroid Build Coastguard Worker 1065*a67afe4dSAndroid Build Coastguard Worker # A bug in bash halts the script if the last line of a function 1066*a67afe4dSAndroid Build Coastguard Worker # fails when set -e is in force, so we need another command to 1067*a67afe4dSAndroid Build Coastguard Worker # work around that: 1068*a67afe4dSAndroid Build Coastguard Worker : 1069*a67afe4dSAndroid Build Coastguard Worker} 1070*a67afe4dSAndroid Build Coastguard Worker 1071*a67afe4dSAndroid Build Coastguard Worker 1072*a67afe4dSAndroid Build Coastguard Worker# func_relative_path SRCDIR DSTDIR 1073*a67afe4dSAndroid Build Coastguard Worker# -------------------------------- 1074*a67afe4dSAndroid Build Coastguard Worker# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 1075*a67afe4dSAndroid Build Coastguard Workerfunc_relative_path () 1076*a67afe4dSAndroid Build Coastguard Worker{ 1077*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1078*a67afe4dSAndroid Build Coastguard Worker 1079*a67afe4dSAndroid Build Coastguard Worker func_relative_path_result= 1080*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath "$1" 1081*a67afe4dSAndroid Build Coastguard Worker func_relative_path_tlibdir=$func_normal_abspath_result 1082*a67afe4dSAndroid Build Coastguard Worker func_normal_abspath "$2" 1083*a67afe4dSAndroid Build Coastguard Worker func_relative_path_tbindir=$func_normal_abspath_result 1084*a67afe4dSAndroid Build Coastguard Worker 1085*a67afe4dSAndroid Build Coastguard Worker # Ascend the tree starting from libdir 1086*a67afe4dSAndroid Build Coastguard Worker while :; do 1087*a67afe4dSAndroid Build Coastguard Worker # check if we have found a prefix of bindir 1088*a67afe4dSAndroid Build Coastguard Worker case $func_relative_path_tbindir in 1089*a67afe4dSAndroid Build Coastguard Worker $func_relative_path_tlibdir) 1090*a67afe4dSAndroid Build Coastguard Worker # found an exact match 1091*a67afe4dSAndroid Build Coastguard Worker func_relative_path_tcancelled= 1092*a67afe4dSAndroid Build Coastguard Worker break 1093*a67afe4dSAndroid Build Coastguard Worker ;; 1094*a67afe4dSAndroid Build Coastguard Worker $func_relative_path_tlibdir*) 1095*a67afe4dSAndroid Build Coastguard Worker # found a matching prefix 1096*a67afe4dSAndroid Build Coastguard Worker func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 1097*a67afe4dSAndroid Build Coastguard Worker func_relative_path_tcancelled=$func_stripname_result 1098*a67afe4dSAndroid Build Coastguard Worker if test -z "$func_relative_path_result"; then 1099*a67afe4dSAndroid Build Coastguard Worker func_relative_path_result=. 1100*a67afe4dSAndroid Build Coastguard Worker fi 1101*a67afe4dSAndroid Build Coastguard Worker break 1102*a67afe4dSAndroid Build Coastguard Worker ;; 1103*a67afe4dSAndroid Build Coastguard Worker *) 1104*a67afe4dSAndroid Build Coastguard Worker func_dirname $func_relative_path_tlibdir 1105*a67afe4dSAndroid Build Coastguard Worker func_relative_path_tlibdir=$func_dirname_result 1106*a67afe4dSAndroid Build Coastguard Worker if test -z "$func_relative_path_tlibdir"; then 1107*a67afe4dSAndroid Build Coastguard Worker # Have to descend all the way to the root! 1108*a67afe4dSAndroid Build Coastguard Worker func_relative_path_result=../$func_relative_path_result 1109*a67afe4dSAndroid Build Coastguard Worker func_relative_path_tcancelled=$func_relative_path_tbindir 1110*a67afe4dSAndroid Build Coastguard Worker break 1111*a67afe4dSAndroid Build Coastguard Worker fi 1112*a67afe4dSAndroid Build Coastguard Worker func_relative_path_result=../$func_relative_path_result 1113*a67afe4dSAndroid Build Coastguard Worker ;; 1114*a67afe4dSAndroid Build Coastguard Worker esac 1115*a67afe4dSAndroid Build Coastguard Worker done 1116*a67afe4dSAndroid Build Coastguard Worker 1117*a67afe4dSAndroid Build Coastguard Worker # Now calculate path; take care to avoid doubling-up slashes. 1118*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '/' "$func_relative_path_result" 1119*a67afe4dSAndroid Build Coastguard Worker func_relative_path_result=$func_stripname_result 1120*a67afe4dSAndroid Build Coastguard Worker func_stripname '/' '/' "$func_relative_path_tcancelled" 1121*a67afe4dSAndroid Build Coastguard Worker if test -n "$func_stripname_result"; then 1122*a67afe4dSAndroid Build Coastguard Worker func_append func_relative_path_result "/$func_stripname_result" 1123*a67afe4dSAndroid Build Coastguard Worker fi 1124*a67afe4dSAndroid Build Coastguard Worker 1125*a67afe4dSAndroid Build Coastguard Worker # Normalisation. If bindir is libdir, return '.' else relative path. 1126*a67afe4dSAndroid Build Coastguard Worker if test -n "$func_relative_path_result"; then 1127*a67afe4dSAndroid Build Coastguard Worker func_stripname './' '' "$func_relative_path_result" 1128*a67afe4dSAndroid Build Coastguard Worker func_relative_path_result=$func_stripname_result 1129*a67afe4dSAndroid Build Coastguard Worker fi 1130*a67afe4dSAndroid Build Coastguard Worker 1131*a67afe4dSAndroid Build Coastguard Worker test -n "$func_relative_path_result" || func_relative_path_result=. 1132*a67afe4dSAndroid Build Coastguard Worker 1133*a67afe4dSAndroid Build Coastguard Worker : 1134*a67afe4dSAndroid Build Coastguard Worker} 1135*a67afe4dSAndroid Build Coastguard Worker 1136*a67afe4dSAndroid Build Coastguard Worker 1137*a67afe4dSAndroid Build Coastguard Worker# func_quote_portable EVAL ARG 1138*a67afe4dSAndroid Build Coastguard Worker# ---------------------------- 1139*a67afe4dSAndroid Build Coastguard Worker# Internal function to portably implement func_quote_arg. Note that we still 1140*a67afe4dSAndroid Build Coastguard Worker# keep attention to performance here so we as much as possible try to avoid 1141*a67afe4dSAndroid Build Coastguard Worker# calling sed binary (so far O(N) complexity as long as func_append is O(1)). 1142*a67afe4dSAndroid Build Coastguard Workerfunc_quote_portable () 1143*a67afe4dSAndroid Build Coastguard Worker{ 1144*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1145*a67afe4dSAndroid Build Coastguard Worker 1146*a67afe4dSAndroid Build Coastguard Worker $require_check_ifs_backslash 1147*a67afe4dSAndroid Build Coastguard Worker 1148*a67afe4dSAndroid Build Coastguard Worker func_quote_portable_result=$2 1149*a67afe4dSAndroid Build Coastguard Worker 1150*a67afe4dSAndroid Build Coastguard Worker # one-time-loop (easy break) 1151*a67afe4dSAndroid Build Coastguard Worker while true 1152*a67afe4dSAndroid Build Coastguard Worker do 1153*a67afe4dSAndroid Build Coastguard Worker if $1; then 1154*a67afe4dSAndroid Build Coastguard Worker func_quote_portable_result=`$ECHO "$2" | $SED \ 1155*a67afe4dSAndroid Build Coastguard Worker -e "$sed_double_quote_subst" -e "$sed_double_backslash"` 1156*a67afe4dSAndroid Build Coastguard Worker break 1157*a67afe4dSAndroid Build Coastguard Worker fi 1158*a67afe4dSAndroid Build Coastguard Worker 1159*a67afe4dSAndroid Build Coastguard Worker # Quote for eval. 1160*a67afe4dSAndroid Build Coastguard Worker case $func_quote_portable_result in 1161*a67afe4dSAndroid Build Coastguard Worker *[\\\`\"\$]*) 1162*a67afe4dSAndroid Build Coastguard Worker # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string 1163*a67afe4dSAndroid Build Coastguard Worker # contains the shell wildcard characters. 1164*a67afe4dSAndroid Build Coastguard Worker case $check_ifs_backshlash_broken$func_quote_portable_result in 1165*a67afe4dSAndroid Build Coastguard Worker :*|*[\[\*\?]*) 1166*a67afe4dSAndroid Build Coastguard Worker func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ 1167*a67afe4dSAndroid Build Coastguard Worker | $SED "$sed_quote_subst"` 1168*a67afe4dSAndroid Build Coastguard Worker break 1169*a67afe4dSAndroid Build Coastguard Worker ;; 1170*a67afe4dSAndroid Build Coastguard Worker esac 1171*a67afe4dSAndroid Build Coastguard Worker 1172*a67afe4dSAndroid Build Coastguard Worker func_quote_portable_old_IFS=$IFS 1173*a67afe4dSAndroid Build Coastguard Worker for _G_char in '\' '`' '"' '$' 1174*a67afe4dSAndroid Build Coastguard Worker do 1175*a67afe4dSAndroid Build Coastguard Worker # STATE($1) PREV($2) SEPARATOR($3) 1176*a67afe4dSAndroid Build Coastguard Worker set start "" "" 1177*a67afe4dSAndroid Build Coastguard Worker func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy 1178*a67afe4dSAndroid Build Coastguard Worker IFS=$_G_char 1179*a67afe4dSAndroid Build Coastguard Worker for _G_part in $func_quote_portable_result 1180*a67afe4dSAndroid Build Coastguard Worker do 1181*a67afe4dSAndroid Build Coastguard Worker case $1 in 1182*a67afe4dSAndroid Build Coastguard Worker quote) 1183*a67afe4dSAndroid Build Coastguard Worker func_append func_quote_portable_result "$3$2" 1184*a67afe4dSAndroid Build Coastguard Worker set quote "$_G_part" "\\$_G_char" 1185*a67afe4dSAndroid Build Coastguard Worker ;; 1186*a67afe4dSAndroid Build Coastguard Worker start) 1187*a67afe4dSAndroid Build Coastguard Worker set first "" "" 1188*a67afe4dSAndroid Build Coastguard Worker func_quote_portable_result= 1189*a67afe4dSAndroid Build Coastguard Worker ;; 1190*a67afe4dSAndroid Build Coastguard Worker first) 1191*a67afe4dSAndroid Build Coastguard Worker set quote "$_G_part" "" 1192*a67afe4dSAndroid Build Coastguard Worker ;; 1193*a67afe4dSAndroid Build Coastguard Worker esac 1194*a67afe4dSAndroid Build Coastguard Worker done 1195*a67afe4dSAndroid Build Coastguard Worker done 1196*a67afe4dSAndroid Build Coastguard Worker IFS=$func_quote_portable_old_IFS 1197*a67afe4dSAndroid Build Coastguard Worker ;; 1198*a67afe4dSAndroid Build Coastguard Worker *) ;; 1199*a67afe4dSAndroid Build Coastguard Worker esac 1200*a67afe4dSAndroid Build Coastguard Worker break 1201*a67afe4dSAndroid Build Coastguard Worker done 1202*a67afe4dSAndroid Build Coastguard Worker 1203*a67afe4dSAndroid Build Coastguard Worker func_quote_portable_unquoted_result=$func_quote_portable_result 1204*a67afe4dSAndroid Build Coastguard Worker case $func_quote_portable_result in 1205*a67afe4dSAndroid Build Coastguard Worker # double-quote args containing shell metacharacters to delay 1206*a67afe4dSAndroid Build Coastguard Worker # word splitting, command substitution and variable expansion 1207*a67afe4dSAndroid Build Coastguard Worker # for a subsequent eval. 1208*a67afe4dSAndroid Build Coastguard Worker # many bourne shells cannot handle close brackets correctly 1209*a67afe4dSAndroid Build Coastguard Worker # in scan sets, so we specify it separately. 1210*a67afe4dSAndroid Build Coastguard Worker *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1211*a67afe4dSAndroid Build Coastguard Worker func_quote_portable_result=\"$func_quote_portable_result\" 1212*a67afe4dSAndroid Build Coastguard Worker ;; 1213*a67afe4dSAndroid Build Coastguard Worker esac 1214*a67afe4dSAndroid Build Coastguard Worker} 1215*a67afe4dSAndroid Build Coastguard Worker 1216*a67afe4dSAndroid Build Coastguard Worker 1217*a67afe4dSAndroid Build Coastguard Worker# func_quotefast_eval ARG 1218*a67afe4dSAndroid Build Coastguard Worker# ----------------------- 1219*a67afe4dSAndroid Build Coastguard Worker# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', 1220*a67afe4dSAndroid Build Coastguard Worker# but optimized for speed. Result is stored in $func_quotefast_eval. 1221*a67afe4dSAndroid Build Coastguard Workerif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then 1222*a67afe4dSAndroid Build Coastguard Worker printf -v _GL_test_printf_tilde %q '~' 1223*a67afe4dSAndroid Build Coastguard Worker if test '\~' = "$_GL_test_printf_tilde"; then 1224*a67afe4dSAndroid Build Coastguard Worker func_quotefast_eval () 1225*a67afe4dSAndroid Build Coastguard Worker { 1226*a67afe4dSAndroid Build Coastguard Worker printf -v func_quotefast_eval_result %q "$1" 1227*a67afe4dSAndroid Build Coastguard Worker } 1228*a67afe4dSAndroid Build Coastguard Worker else 1229*a67afe4dSAndroid Build Coastguard Worker # Broken older Bash implementations. Make those faster too if possible. 1230*a67afe4dSAndroid Build Coastguard Worker func_quotefast_eval () 1231*a67afe4dSAndroid Build Coastguard Worker { 1232*a67afe4dSAndroid Build Coastguard Worker case $1 in 1233*a67afe4dSAndroid Build Coastguard Worker '~'*) 1234*a67afe4dSAndroid Build Coastguard Worker func_quote_portable false "$1" 1235*a67afe4dSAndroid Build Coastguard Worker func_quotefast_eval_result=$func_quote_portable_result 1236*a67afe4dSAndroid Build Coastguard Worker ;; 1237*a67afe4dSAndroid Build Coastguard Worker *) 1238*a67afe4dSAndroid Build Coastguard Worker printf -v func_quotefast_eval_result %q "$1" 1239*a67afe4dSAndroid Build Coastguard Worker ;; 1240*a67afe4dSAndroid Build Coastguard Worker esac 1241*a67afe4dSAndroid Build Coastguard Worker } 1242*a67afe4dSAndroid Build Coastguard Worker fi 1243*a67afe4dSAndroid Build Coastguard Workerelse 1244*a67afe4dSAndroid Build Coastguard Worker func_quotefast_eval () 1245*a67afe4dSAndroid Build Coastguard Worker { 1246*a67afe4dSAndroid Build Coastguard Worker func_quote_portable false "$1" 1247*a67afe4dSAndroid Build Coastguard Worker func_quotefast_eval_result=$func_quote_portable_result 1248*a67afe4dSAndroid Build Coastguard Worker } 1249*a67afe4dSAndroid Build Coastguard Workerfi 1250*a67afe4dSAndroid Build Coastguard Worker 1251*a67afe4dSAndroid Build Coastguard Worker 1252*a67afe4dSAndroid Build Coastguard Worker# func_quote_arg MODEs ARG 1253*a67afe4dSAndroid Build Coastguard Worker# ------------------------ 1254*a67afe4dSAndroid Build Coastguard Worker# Quote one ARG to be evaled later. MODEs argument may contain zero or more 1255*a67afe4dSAndroid Build Coastguard Worker# specifiers listed below separated by ',' character. This function returns two 1256*a67afe4dSAndroid Build Coastguard Worker# values: 1257*a67afe4dSAndroid Build Coastguard Worker# i) func_quote_arg_result 1258*a67afe4dSAndroid Build Coastguard Worker# double-quoted (when needed), suitable for a subsequent eval 1259*a67afe4dSAndroid Build Coastguard Worker# ii) func_quote_arg_unquoted_result 1260*a67afe4dSAndroid Build Coastguard Worker# has all characters that are still active within double 1261*a67afe4dSAndroid Build Coastguard Worker# quotes backslashified. Available only if 'unquoted' is specified. 1262*a67afe4dSAndroid Build Coastguard Worker# 1263*a67afe4dSAndroid Build Coastguard Worker# Available modes: 1264*a67afe4dSAndroid Build Coastguard Worker# ---------------- 1265*a67afe4dSAndroid Build Coastguard Worker# 'eval' (default) 1266*a67afe4dSAndroid Build Coastguard Worker# - escape shell special characters 1267*a67afe4dSAndroid Build Coastguard Worker# 'expand' 1268*a67afe4dSAndroid Build Coastguard Worker# - the same as 'eval'; but do not quote variable references 1269*a67afe4dSAndroid Build Coastguard Worker# 'pretty' 1270*a67afe4dSAndroid Build Coastguard Worker# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might 1271*a67afe4dSAndroid Build Coastguard Worker# be used later in func_quote to get output like: 'echo "a b"' instead 1272*a67afe4dSAndroid Build Coastguard Worker# of 'echo a\ b'. This is slower than default on some shells. 1273*a67afe4dSAndroid Build Coastguard Worker# 'unquoted' 1274*a67afe4dSAndroid Build Coastguard Worker# - produce also $func_quote_arg_unquoted_result which does not contain 1275*a67afe4dSAndroid Build Coastguard Worker# wrapping double-quotes. 1276*a67afe4dSAndroid Build Coastguard Worker# 1277*a67afe4dSAndroid Build Coastguard Worker# Examples for 'func_quote_arg pretty,unquoted string': 1278*a67afe4dSAndroid Build Coastguard Worker# 1279*a67afe4dSAndroid Build Coastguard Worker# string | *_result | *_unquoted_result 1280*a67afe4dSAndroid Build Coastguard Worker# ------------+-----------------------+------------------- 1281*a67afe4dSAndroid Build Coastguard Worker# " | \" | \" 1282*a67afe4dSAndroid Build Coastguard Worker# a b | "a b" | a b 1283*a67afe4dSAndroid Build Coastguard Worker# "a b" | "\"a b\"" | \"a b\" 1284*a67afe4dSAndroid Build Coastguard Worker# * | "*" | * 1285*a67afe4dSAndroid Build Coastguard Worker# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" 1286*a67afe4dSAndroid Build Coastguard Worker# 1287*a67afe4dSAndroid Build Coastguard Worker# Examples for 'func_quote_arg pretty,unquoted,expand string': 1288*a67afe4dSAndroid Build Coastguard Worker# 1289*a67afe4dSAndroid Build Coastguard Worker# string | *_result | *_unquoted_result 1290*a67afe4dSAndroid Build Coastguard Worker# --------------+---------------------+-------------------- 1291*a67afe4dSAndroid Build Coastguard Worker# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" 1292*a67afe4dSAndroid Build Coastguard Workerfunc_quote_arg () 1293*a67afe4dSAndroid Build Coastguard Worker{ 1294*a67afe4dSAndroid Build Coastguard Worker _G_quote_expand=false 1295*a67afe4dSAndroid Build Coastguard Worker case ,$1, in 1296*a67afe4dSAndroid Build Coastguard Worker *,expand,*) 1297*a67afe4dSAndroid Build Coastguard Worker _G_quote_expand=: 1298*a67afe4dSAndroid Build Coastguard Worker ;; 1299*a67afe4dSAndroid Build Coastguard Worker esac 1300*a67afe4dSAndroid Build Coastguard Worker 1301*a67afe4dSAndroid Build Coastguard Worker case ,$1, in 1302*a67afe4dSAndroid Build Coastguard Worker *,pretty,*|*,expand,*|*,unquoted,*) 1303*a67afe4dSAndroid Build Coastguard Worker func_quote_portable $_G_quote_expand "$2" 1304*a67afe4dSAndroid Build Coastguard Worker func_quote_arg_result=$func_quote_portable_result 1305*a67afe4dSAndroid Build Coastguard Worker func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result 1306*a67afe4dSAndroid Build Coastguard Worker ;; 1307*a67afe4dSAndroid Build Coastguard Worker *) 1308*a67afe4dSAndroid Build Coastguard Worker # Faster quote-for-eval for some shells. 1309*a67afe4dSAndroid Build Coastguard Worker func_quotefast_eval "$2" 1310*a67afe4dSAndroid Build Coastguard Worker func_quote_arg_result=$func_quotefast_eval_result 1311*a67afe4dSAndroid Build Coastguard Worker ;; 1312*a67afe4dSAndroid Build Coastguard Worker esac 1313*a67afe4dSAndroid Build Coastguard Worker} 1314*a67afe4dSAndroid Build Coastguard Worker 1315*a67afe4dSAndroid Build Coastguard Worker 1316*a67afe4dSAndroid Build Coastguard Worker# func_quote MODEs ARGs... 1317*a67afe4dSAndroid Build Coastguard Worker# ------------------------ 1318*a67afe4dSAndroid Build Coastguard Worker# Quote all ARGs to be evaled later and join them into single command. See 1319*a67afe4dSAndroid Build Coastguard Worker# func_quote_arg's description for more info. 1320*a67afe4dSAndroid Build Coastguard Workerfunc_quote () 1321*a67afe4dSAndroid Build Coastguard Worker{ 1322*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1323*a67afe4dSAndroid Build Coastguard Worker _G_func_quote_mode=$1 ; shift 1324*a67afe4dSAndroid Build Coastguard Worker func_quote_result= 1325*a67afe4dSAndroid Build Coastguard Worker while test 0 -lt $#; do 1326*a67afe4dSAndroid Build Coastguard Worker func_quote_arg "$_G_func_quote_mode" "$1" 1327*a67afe4dSAndroid Build Coastguard Worker if test -n "$func_quote_result"; then 1328*a67afe4dSAndroid Build Coastguard Worker func_append func_quote_result " $func_quote_arg_result" 1329*a67afe4dSAndroid Build Coastguard Worker else 1330*a67afe4dSAndroid Build Coastguard Worker func_append func_quote_result "$func_quote_arg_result" 1331*a67afe4dSAndroid Build Coastguard Worker fi 1332*a67afe4dSAndroid Build Coastguard Worker shift 1333*a67afe4dSAndroid Build Coastguard Worker done 1334*a67afe4dSAndroid Build Coastguard Worker} 1335*a67afe4dSAndroid Build Coastguard Worker 1336*a67afe4dSAndroid Build Coastguard Worker 1337*a67afe4dSAndroid Build Coastguard Worker# func_stripname PREFIX SUFFIX NAME 1338*a67afe4dSAndroid Build Coastguard Worker# --------------------------------- 1339*a67afe4dSAndroid Build Coastguard Worker# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 1340*a67afe4dSAndroid Build Coastguard Worker# PREFIX and SUFFIX must not contain globbing or regex special 1341*a67afe4dSAndroid Build Coastguard Worker# characters, hashes, percent signs, but SUFFIX may contain a leading 1342*a67afe4dSAndroid Build Coastguard Worker# dot (in which case that matches only a dot). 1343*a67afe4dSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS"; then 1344*a67afe4dSAndroid Build Coastguard Worker eval 'func_stripname () 1345*a67afe4dSAndroid Build Coastguard Worker { 1346*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1347*a67afe4dSAndroid Build Coastguard Worker 1348*a67afe4dSAndroid Build Coastguard Worker # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 1349*a67afe4dSAndroid Build Coastguard Worker # positional parameters, so assign one to ordinary variable first. 1350*a67afe4dSAndroid Build Coastguard Worker func_stripname_result=$3 1351*a67afe4dSAndroid Build Coastguard Worker func_stripname_result=${func_stripname_result#"$1"} 1352*a67afe4dSAndroid Build Coastguard Worker func_stripname_result=${func_stripname_result%"$2"} 1353*a67afe4dSAndroid Build Coastguard Worker }' 1354*a67afe4dSAndroid Build Coastguard Workerelse 1355*a67afe4dSAndroid Build Coastguard Worker func_stripname () 1356*a67afe4dSAndroid Build Coastguard Worker { 1357*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1358*a67afe4dSAndroid Build Coastguard Worker 1359*a67afe4dSAndroid Build Coastguard Worker case $2 in 1360*a67afe4dSAndroid Build Coastguard Worker .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 1361*a67afe4dSAndroid Build Coastguard Worker *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 1362*a67afe4dSAndroid Build Coastguard Worker esac 1363*a67afe4dSAndroid Build Coastguard Worker } 1364*a67afe4dSAndroid Build Coastguard Workerfi 1365*a67afe4dSAndroid Build Coastguard Worker 1366*a67afe4dSAndroid Build Coastguard Worker 1367*a67afe4dSAndroid Build Coastguard Worker# func_show_eval CMD [FAIL_EXP] 1368*a67afe4dSAndroid Build Coastguard Worker# ----------------------------- 1369*a67afe4dSAndroid Build Coastguard Worker# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1370*a67afe4dSAndroid Build Coastguard Worker# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1371*a67afe4dSAndroid Build Coastguard Worker# is given, then evaluate it. 1372*a67afe4dSAndroid Build Coastguard Workerfunc_show_eval () 1373*a67afe4dSAndroid Build Coastguard Worker{ 1374*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1375*a67afe4dSAndroid Build Coastguard Worker 1376*a67afe4dSAndroid Build Coastguard Worker _G_cmd=$1 1377*a67afe4dSAndroid Build Coastguard Worker _G_fail_exp=${2-':'} 1378*a67afe4dSAndroid Build Coastguard Worker 1379*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty,expand "$_G_cmd" 1380*a67afe4dSAndroid Build Coastguard Worker eval "func_notquiet $func_quote_arg_result" 1381*a67afe4dSAndroid Build Coastguard Worker 1382*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 1383*a67afe4dSAndroid Build Coastguard Worker eval "$_G_cmd" 1384*a67afe4dSAndroid Build Coastguard Worker _G_status=$? 1385*a67afe4dSAndroid Build Coastguard Worker if test 0 -ne "$_G_status"; then 1386*a67afe4dSAndroid Build Coastguard Worker eval "(exit $_G_status); $_G_fail_exp" 1387*a67afe4dSAndroid Build Coastguard Worker fi 1388*a67afe4dSAndroid Build Coastguard Worker } 1389*a67afe4dSAndroid Build Coastguard Worker} 1390*a67afe4dSAndroid Build Coastguard Worker 1391*a67afe4dSAndroid Build Coastguard Worker 1392*a67afe4dSAndroid Build Coastguard Worker# func_show_eval_locale CMD [FAIL_EXP] 1393*a67afe4dSAndroid Build Coastguard Worker# ------------------------------------ 1394*a67afe4dSAndroid Build Coastguard Worker# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1395*a67afe4dSAndroid Build Coastguard Worker# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1396*a67afe4dSAndroid Build Coastguard Worker# is given, then evaluate it. Use the saved locale for evaluation. 1397*a67afe4dSAndroid Build Coastguard Workerfunc_show_eval_locale () 1398*a67afe4dSAndroid Build Coastguard Worker{ 1399*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1400*a67afe4dSAndroid Build Coastguard Worker 1401*a67afe4dSAndroid Build Coastguard Worker _G_cmd=$1 1402*a67afe4dSAndroid Build Coastguard Worker _G_fail_exp=${2-':'} 1403*a67afe4dSAndroid Build Coastguard Worker 1404*a67afe4dSAndroid Build Coastguard Worker $opt_quiet || { 1405*a67afe4dSAndroid Build Coastguard Worker func_quote_arg expand,pretty "$_G_cmd" 1406*a67afe4dSAndroid Build Coastguard Worker eval "func_echo $func_quote_arg_result" 1407*a67afe4dSAndroid Build Coastguard Worker } 1408*a67afe4dSAndroid Build Coastguard Worker 1409*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 1410*a67afe4dSAndroid Build Coastguard Worker eval "$_G_user_locale 1411*a67afe4dSAndroid Build Coastguard Worker $_G_cmd" 1412*a67afe4dSAndroid Build Coastguard Worker _G_status=$? 1413*a67afe4dSAndroid Build Coastguard Worker eval "$_G_safe_locale" 1414*a67afe4dSAndroid Build Coastguard Worker if test 0 -ne "$_G_status"; then 1415*a67afe4dSAndroid Build Coastguard Worker eval "(exit $_G_status); $_G_fail_exp" 1416*a67afe4dSAndroid Build Coastguard Worker fi 1417*a67afe4dSAndroid Build Coastguard Worker } 1418*a67afe4dSAndroid Build Coastguard Worker} 1419*a67afe4dSAndroid Build Coastguard Worker 1420*a67afe4dSAndroid Build Coastguard Worker 1421*a67afe4dSAndroid Build Coastguard Worker# func_tr_sh 1422*a67afe4dSAndroid Build Coastguard Worker# ---------- 1423*a67afe4dSAndroid Build Coastguard Worker# Turn $1 into a string suitable for a shell variable name. 1424*a67afe4dSAndroid Build Coastguard Worker# Result is stored in $func_tr_sh_result. All characters 1425*a67afe4dSAndroid Build Coastguard Worker# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 1426*a67afe4dSAndroid Build Coastguard Worker# if $1 begins with a digit, a '_' is prepended as well. 1427*a67afe4dSAndroid Build Coastguard Workerfunc_tr_sh () 1428*a67afe4dSAndroid Build Coastguard Worker{ 1429*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1430*a67afe4dSAndroid Build Coastguard Worker 1431*a67afe4dSAndroid Build Coastguard Worker case $1 in 1432*a67afe4dSAndroid Build Coastguard Worker [0-9]* | *[!a-zA-Z0-9_]*) 1433*a67afe4dSAndroid Build Coastguard Worker func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 1434*a67afe4dSAndroid Build Coastguard Worker ;; 1435*a67afe4dSAndroid Build Coastguard Worker * ) 1436*a67afe4dSAndroid Build Coastguard Worker func_tr_sh_result=$1 1437*a67afe4dSAndroid Build Coastguard Worker ;; 1438*a67afe4dSAndroid Build Coastguard Worker esac 1439*a67afe4dSAndroid Build Coastguard Worker} 1440*a67afe4dSAndroid Build Coastguard Worker 1441*a67afe4dSAndroid Build Coastguard Worker 1442*a67afe4dSAndroid Build Coastguard Worker# func_verbose ARG... 1443*a67afe4dSAndroid Build Coastguard Worker# ------------------- 1444*a67afe4dSAndroid Build Coastguard Worker# Echo program name prefixed message in verbose mode only. 1445*a67afe4dSAndroid Build Coastguard Workerfunc_verbose () 1446*a67afe4dSAndroid Build Coastguard Worker{ 1447*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1448*a67afe4dSAndroid Build Coastguard Worker 1449*a67afe4dSAndroid Build Coastguard Worker $opt_verbose && func_echo "$*" 1450*a67afe4dSAndroid Build Coastguard Worker 1451*a67afe4dSAndroid Build Coastguard Worker : 1452*a67afe4dSAndroid Build Coastguard Worker} 1453*a67afe4dSAndroid Build Coastguard Worker 1454*a67afe4dSAndroid Build Coastguard Worker 1455*a67afe4dSAndroid Build Coastguard Worker# func_warn_and_continue ARG... 1456*a67afe4dSAndroid Build Coastguard Worker# ----------------------------- 1457*a67afe4dSAndroid Build Coastguard Worker# Echo program name prefixed warning message to standard error. 1458*a67afe4dSAndroid Build Coastguard Workerfunc_warn_and_continue () 1459*a67afe4dSAndroid Build Coastguard Worker{ 1460*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1461*a67afe4dSAndroid Build Coastguard Worker 1462*a67afe4dSAndroid Build Coastguard Worker $require_term_colors 1463*a67afe4dSAndroid Build Coastguard Worker 1464*a67afe4dSAndroid Build Coastguard Worker func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 1465*a67afe4dSAndroid Build Coastguard Worker} 1466*a67afe4dSAndroid Build Coastguard Worker 1467*a67afe4dSAndroid Build Coastguard Worker 1468*a67afe4dSAndroid Build Coastguard Worker# func_warning CATEGORY ARG... 1469*a67afe4dSAndroid Build Coastguard Worker# ---------------------------- 1470*a67afe4dSAndroid Build Coastguard Worker# Echo program name prefixed warning message to standard error. Warning 1471*a67afe4dSAndroid Build Coastguard Worker# messages can be filtered according to CATEGORY, where this function 1472*a67afe4dSAndroid Build Coastguard Worker# elides messages where CATEGORY is not listed in the global variable 1473*a67afe4dSAndroid Build Coastguard Worker# 'opt_warning_types'. 1474*a67afe4dSAndroid Build Coastguard Workerfunc_warning () 1475*a67afe4dSAndroid Build Coastguard Worker{ 1476*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1477*a67afe4dSAndroid Build Coastguard Worker 1478*a67afe4dSAndroid Build Coastguard Worker # CATEGORY must be in the warning_categories list! 1479*a67afe4dSAndroid Build Coastguard Worker case " $warning_categories " in 1480*a67afe4dSAndroid Build Coastguard Worker *" $1 "*) ;; 1481*a67afe4dSAndroid Build Coastguard Worker *) func_internal_error "invalid warning category '$1'" ;; 1482*a67afe4dSAndroid Build Coastguard Worker esac 1483*a67afe4dSAndroid Build Coastguard Worker 1484*a67afe4dSAndroid Build Coastguard Worker _G_category=$1 1485*a67afe4dSAndroid Build Coastguard Worker shift 1486*a67afe4dSAndroid Build Coastguard Worker 1487*a67afe4dSAndroid Build Coastguard Worker case " $opt_warning_types " in 1488*a67afe4dSAndroid Build Coastguard Worker *" $_G_category "*) $warning_func ${1+"$@"} ;; 1489*a67afe4dSAndroid Build Coastguard Worker esac 1490*a67afe4dSAndroid Build Coastguard Worker} 1491*a67afe4dSAndroid Build Coastguard Worker 1492*a67afe4dSAndroid Build Coastguard Worker 1493*a67afe4dSAndroid Build Coastguard Worker# func_sort_ver VER1 VER2 1494*a67afe4dSAndroid Build Coastguard Worker# ----------------------- 1495*a67afe4dSAndroid Build Coastguard Worker# 'sort -V' is not generally available. 1496*a67afe4dSAndroid Build Coastguard Worker# Note this deviates from the version comparison in automake 1497*a67afe4dSAndroid Build Coastguard Worker# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 1498*a67afe4dSAndroid Build Coastguard Worker# but this should suffice as we won't be specifying old 1499*a67afe4dSAndroid Build Coastguard Worker# version formats or redundant trailing .0 in bootstrap.conf. 1500*a67afe4dSAndroid Build Coastguard Worker# If we did want full compatibility then we should probably 1501*a67afe4dSAndroid Build Coastguard Worker# use m4_version_compare from autoconf. 1502*a67afe4dSAndroid Build Coastguard Workerfunc_sort_ver () 1503*a67afe4dSAndroid Build Coastguard Worker{ 1504*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1505*a67afe4dSAndroid Build Coastguard Worker 1506*a67afe4dSAndroid Build Coastguard Worker printf '%s\n%s\n' "$1" "$2" \ 1507*a67afe4dSAndroid Build Coastguard Worker | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n 1508*a67afe4dSAndroid Build Coastguard Worker} 1509*a67afe4dSAndroid Build Coastguard Worker 1510*a67afe4dSAndroid Build Coastguard Worker# func_lt_ver PREV CURR 1511*a67afe4dSAndroid Build Coastguard Worker# --------------------- 1512*a67afe4dSAndroid Build Coastguard Worker# Return true if PREV and CURR are in the correct order according to 1513*a67afe4dSAndroid Build Coastguard Worker# func_sort_ver, otherwise false. Use it like this: 1514*a67afe4dSAndroid Build Coastguard Worker# 1515*a67afe4dSAndroid Build Coastguard Worker# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 1516*a67afe4dSAndroid Build Coastguard Workerfunc_lt_ver () 1517*a67afe4dSAndroid Build Coastguard Worker{ 1518*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1519*a67afe4dSAndroid Build Coastguard Worker 1520*a67afe4dSAndroid Build Coastguard Worker test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 1521*a67afe4dSAndroid Build Coastguard Worker} 1522*a67afe4dSAndroid Build Coastguard Worker 1523*a67afe4dSAndroid Build Coastguard Worker 1524*a67afe4dSAndroid Build Coastguard Worker# Local variables: 1525*a67afe4dSAndroid Build Coastguard Worker# mode: shell-script 1526*a67afe4dSAndroid Build Coastguard Worker# sh-indentation: 2 1527*a67afe4dSAndroid Build Coastguard Worker# eval: (add-hook 'before-save-hook 'time-stamp) 1528*a67afe4dSAndroid Build Coastguard Worker# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1529*a67afe4dSAndroid Build Coastguard Worker# time-stamp-time-zone: "UTC" 1530*a67afe4dSAndroid Build Coastguard Worker# End: 1531*a67afe4dSAndroid Build Coastguard Worker#! /bin/sh 1532*a67afe4dSAndroid Build Coastguard Worker 1533*a67afe4dSAndroid Build Coastguard Worker# A portable, pluggable option parser for Bourne shell. 1534*a67afe4dSAndroid Build Coastguard Worker# Written by Gary V. Vaughan, 2010 1535*a67afe4dSAndroid Build Coastguard Worker 1536*a67afe4dSAndroid Build Coastguard Worker# This is free software. There is NO warranty; not even for 1537*a67afe4dSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1538*a67afe4dSAndroid Build Coastguard Worker# 1539*a67afe4dSAndroid Build Coastguard Worker# Copyright (C) 2010-2019, 2021 Bootstrap Authors 1540*a67afe4dSAndroid Build Coastguard Worker# 1541*a67afe4dSAndroid Build Coastguard Worker# This file is dual licensed under the terms of the MIT license 1542*a67afe4dSAndroid Build Coastguard Worker# <https://opensource.org/license/MIT>, and GPL version 2 or later 1543*a67afe4dSAndroid Build Coastguard Worker# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 1544*a67afe4dSAndroid Build Coastguard Worker# these licenses when using or redistributing this software or any of 1545*a67afe4dSAndroid Build Coastguard Worker# the files within it. See the URLs above, or the file `LICENSE` 1546*a67afe4dSAndroid Build Coastguard Worker# included in the Bootstrap distribution for the full license texts. 1547*a67afe4dSAndroid Build Coastguard Worker 1548*a67afe4dSAndroid Build Coastguard Worker# Please report bugs or propose patches to: 1549*a67afe4dSAndroid Build Coastguard Worker# <https://github.com/gnulib-modules/bootstrap/issues> 1550*a67afe4dSAndroid Build Coastguard Worker 1551*a67afe4dSAndroid Build Coastguard Worker# Set a version string for this script. 1552*a67afe4dSAndroid Build Coastguard Workerscriptversion=2019-02-19.15; # UTC 1553*a67afe4dSAndroid Build Coastguard Worker 1554*a67afe4dSAndroid Build Coastguard Worker 1555*a67afe4dSAndroid Build Coastguard Worker## ------ ## 1556*a67afe4dSAndroid Build Coastguard Worker## Usage. ## 1557*a67afe4dSAndroid Build Coastguard Worker## ------ ## 1558*a67afe4dSAndroid Build Coastguard Worker 1559*a67afe4dSAndroid Build Coastguard Worker# This file is a library for parsing options in your shell scripts along 1560*a67afe4dSAndroid Build Coastguard Worker# with assorted other useful supporting features that you can make use 1561*a67afe4dSAndroid Build Coastguard Worker# of too. 1562*a67afe4dSAndroid Build Coastguard Worker# 1563*a67afe4dSAndroid Build Coastguard Worker# For the simplest scripts you might need only: 1564*a67afe4dSAndroid Build Coastguard Worker# 1565*a67afe4dSAndroid Build Coastguard Worker# #!/bin/sh 1566*a67afe4dSAndroid Build Coastguard Worker# . relative/path/to/funclib.sh 1567*a67afe4dSAndroid Build Coastguard Worker# . relative/path/to/options-parser 1568*a67afe4dSAndroid Build Coastguard Worker# scriptversion=1.0 1569*a67afe4dSAndroid Build Coastguard Worker# func_options ${1+"$@"} 1570*a67afe4dSAndroid Build Coastguard Worker# eval set dummy "$func_options_result"; shift 1571*a67afe4dSAndroid Build Coastguard Worker# ...rest of your script... 1572*a67afe4dSAndroid Build Coastguard Worker# 1573*a67afe4dSAndroid Build Coastguard Worker# In order for the '--version' option to work, you will need to have a 1574*a67afe4dSAndroid Build Coastguard Worker# suitably formatted comment like the one at the top of this file 1575*a67afe4dSAndroid Build Coastguard Worker# starting with '# Written by ' and ending with '# Copyright'. 1576*a67afe4dSAndroid Build Coastguard Worker# 1577*a67afe4dSAndroid Build Coastguard Worker# For '-h' and '--help' to work, you will also need a one line 1578*a67afe4dSAndroid Build Coastguard Worker# description of your script's purpose in a comment directly above the 1579*a67afe4dSAndroid Build Coastguard Worker# '# Written by ' line, like the one at the top of this file. 1580*a67afe4dSAndroid Build Coastguard Worker# 1581*a67afe4dSAndroid Build Coastguard Worker# The default options also support '--debug', which will turn on shell 1582*a67afe4dSAndroid Build Coastguard Worker# execution tracing (see the comment above debug_cmd below for another 1583*a67afe4dSAndroid Build Coastguard Worker# use), and '--verbose' and the func_verbose function to allow your script 1584*a67afe4dSAndroid Build Coastguard Worker# to display verbose messages only when your user has specified 1585*a67afe4dSAndroid Build Coastguard Worker# '--verbose'. 1586*a67afe4dSAndroid Build Coastguard Worker# 1587*a67afe4dSAndroid Build Coastguard Worker# After sourcing this file, you can plug in processing for additional 1588*a67afe4dSAndroid Build Coastguard Worker# options by amending the variables from the 'Configuration' section 1589*a67afe4dSAndroid Build Coastguard Worker# below, and following the instructions in the 'Option parsing' 1590*a67afe4dSAndroid Build Coastguard Worker# section further down. 1591*a67afe4dSAndroid Build Coastguard Worker 1592*a67afe4dSAndroid Build Coastguard Worker## -------------- ## 1593*a67afe4dSAndroid Build Coastguard Worker## Configuration. ## 1594*a67afe4dSAndroid Build Coastguard Worker## -------------- ## 1595*a67afe4dSAndroid Build Coastguard Worker 1596*a67afe4dSAndroid Build Coastguard Worker# You should override these variables in your script after sourcing this 1597*a67afe4dSAndroid Build Coastguard Worker# file so that they reflect the customisations you have added to the 1598*a67afe4dSAndroid Build Coastguard Worker# option parser. 1599*a67afe4dSAndroid Build Coastguard Worker 1600*a67afe4dSAndroid Build Coastguard Worker# The usage line for option parsing errors and the start of '-h' and 1601*a67afe4dSAndroid Build Coastguard Worker# '--help' output messages. You can embed shell variables for delayed 1602*a67afe4dSAndroid Build Coastguard Worker# expansion at the time the message is displayed, but you will need to 1603*a67afe4dSAndroid Build Coastguard Worker# quote other shell meta-characters carefully to prevent them being 1604*a67afe4dSAndroid Build Coastguard Worker# expanded when the contents are evaled. 1605*a67afe4dSAndroid Build Coastguard Workerusage='$progpath [OPTION]...' 1606*a67afe4dSAndroid Build Coastguard Worker 1607*a67afe4dSAndroid Build Coastguard Worker# Short help message in response to '-h' and '--help'. Add to this or 1608*a67afe4dSAndroid Build Coastguard Worker# override it after sourcing this library to reflect the full set of 1609*a67afe4dSAndroid Build Coastguard Worker# options your script accepts. 1610*a67afe4dSAndroid Build Coastguard Workerusage_message="\ 1611*a67afe4dSAndroid Build Coastguard Worker --debug enable verbose shell tracing 1612*a67afe4dSAndroid Build Coastguard Worker -W, --warnings=CATEGORY 1613*a67afe4dSAndroid Build Coastguard Worker report the warnings falling in CATEGORY [all] 1614*a67afe4dSAndroid Build Coastguard Worker -v, --verbose verbosely report processing 1615*a67afe4dSAndroid Build Coastguard Worker --version print version information and exit 1616*a67afe4dSAndroid Build Coastguard Worker -h, --help print short or long help message and exit 1617*a67afe4dSAndroid Build Coastguard Worker" 1618*a67afe4dSAndroid Build Coastguard Worker 1619*a67afe4dSAndroid Build Coastguard Worker# Additional text appended to 'usage_message' in response to '--help'. 1620*a67afe4dSAndroid Build Coastguard Workerlong_help_message=" 1621*a67afe4dSAndroid Build Coastguard WorkerWarning categories include: 1622*a67afe4dSAndroid Build Coastguard Worker 'all' show all warnings 1623*a67afe4dSAndroid Build Coastguard Worker 'none' turn off all the warnings 1624*a67afe4dSAndroid Build Coastguard Worker 'error' warnings are treated as fatal errors" 1625*a67afe4dSAndroid Build Coastguard Worker 1626*a67afe4dSAndroid Build Coastguard Worker# Help message printed before fatal option parsing errors. 1627*a67afe4dSAndroid Build Coastguard Workerfatal_help="Try '\$progname --help' for more information." 1628*a67afe4dSAndroid Build Coastguard Worker 1629*a67afe4dSAndroid Build Coastguard Worker 1630*a67afe4dSAndroid Build Coastguard Worker 1631*a67afe4dSAndroid Build Coastguard Worker## ------------------------- ## 1632*a67afe4dSAndroid Build Coastguard Worker## Hook function management. ## 1633*a67afe4dSAndroid Build Coastguard Worker## ------------------------- ## 1634*a67afe4dSAndroid Build Coastguard Worker 1635*a67afe4dSAndroid Build Coastguard Worker# This section contains functions for adding, removing, and running hooks 1636*a67afe4dSAndroid Build Coastguard Worker# in the main code. A hook is just a list of function names that can be 1637*a67afe4dSAndroid Build Coastguard Worker# run in order later on. 1638*a67afe4dSAndroid Build Coastguard Worker 1639*a67afe4dSAndroid Build Coastguard Worker# func_hookable FUNC_NAME 1640*a67afe4dSAndroid Build Coastguard Worker# ----------------------- 1641*a67afe4dSAndroid Build Coastguard Worker# Declare that FUNC_NAME will run hooks added with 1642*a67afe4dSAndroid Build Coastguard Worker# 'func_add_hook FUNC_NAME ...'. 1643*a67afe4dSAndroid Build Coastguard Workerfunc_hookable () 1644*a67afe4dSAndroid Build Coastguard Worker{ 1645*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1646*a67afe4dSAndroid Build Coastguard Worker 1647*a67afe4dSAndroid Build Coastguard Worker func_append hookable_fns " $1" 1648*a67afe4dSAndroid Build Coastguard Worker} 1649*a67afe4dSAndroid Build Coastguard Worker 1650*a67afe4dSAndroid Build Coastguard Worker 1651*a67afe4dSAndroid Build Coastguard Worker# func_add_hook FUNC_NAME HOOK_FUNC 1652*a67afe4dSAndroid Build Coastguard Worker# --------------------------------- 1653*a67afe4dSAndroid Build Coastguard Worker# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 1654*a67afe4dSAndroid Build Coastguard Worker# first have been declared "hookable" by a call to 'func_hookable'. 1655*a67afe4dSAndroid Build Coastguard Workerfunc_add_hook () 1656*a67afe4dSAndroid Build Coastguard Worker{ 1657*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1658*a67afe4dSAndroid Build Coastguard Worker 1659*a67afe4dSAndroid Build Coastguard Worker case " $hookable_fns " in 1660*a67afe4dSAndroid Build Coastguard Worker *" $1 "*) ;; 1661*a67afe4dSAndroid Build Coastguard Worker *) func_fatal_error "'$1' does not accept hook functions." ;; 1662*a67afe4dSAndroid Build Coastguard Worker esac 1663*a67afe4dSAndroid Build Coastguard Worker 1664*a67afe4dSAndroid Build Coastguard Worker eval func_append ${1}_hooks '" $2"' 1665*a67afe4dSAndroid Build Coastguard Worker} 1666*a67afe4dSAndroid Build Coastguard Worker 1667*a67afe4dSAndroid Build Coastguard Worker 1668*a67afe4dSAndroid Build Coastguard Worker# func_remove_hook FUNC_NAME HOOK_FUNC 1669*a67afe4dSAndroid Build Coastguard Worker# ------------------------------------ 1670*a67afe4dSAndroid Build Coastguard Worker# Remove HOOK_FUNC from the list of hook functions to be called by 1671*a67afe4dSAndroid Build Coastguard Worker# FUNC_NAME. 1672*a67afe4dSAndroid Build Coastguard Workerfunc_remove_hook () 1673*a67afe4dSAndroid Build Coastguard Worker{ 1674*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1675*a67afe4dSAndroid Build Coastguard Worker 1676*a67afe4dSAndroid Build Coastguard Worker eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 1677*a67afe4dSAndroid Build Coastguard Worker} 1678*a67afe4dSAndroid Build Coastguard Worker 1679*a67afe4dSAndroid Build Coastguard Worker 1680*a67afe4dSAndroid Build Coastguard Worker# func_propagate_result FUNC_NAME_A FUNC_NAME_B 1681*a67afe4dSAndroid Build Coastguard Worker# --------------------------------------------- 1682*a67afe4dSAndroid Build Coastguard Worker# If the *_result variable of FUNC_NAME_A _is set_, assign its value to 1683*a67afe4dSAndroid Build Coastguard Worker# *_result variable of FUNC_NAME_B. 1684*a67afe4dSAndroid Build Coastguard Workerfunc_propagate_result () 1685*a67afe4dSAndroid Build Coastguard Worker{ 1686*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1687*a67afe4dSAndroid Build Coastguard Worker 1688*a67afe4dSAndroid Build Coastguard Worker func_propagate_result_result=: 1689*a67afe4dSAndroid Build Coastguard Worker if eval "test \"\${${1}_result+set}\" = set" 1690*a67afe4dSAndroid Build Coastguard Worker then 1691*a67afe4dSAndroid Build Coastguard Worker eval "${2}_result=\$${1}_result" 1692*a67afe4dSAndroid Build Coastguard Worker else 1693*a67afe4dSAndroid Build Coastguard Worker func_propagate_result_result=false 1694*a67afe4dSAndroid Build Coastguard Worker fi 1695*a67afe4dSAndroid Build Coastguard Worker} 1696*a67afe4dSAndroid Build Coastguard Worker 1697*a67afe4dSAndroid Build Coastguard Worker 1698*a67afe4dSAndroid Build Coastguard Worker# func_run_hooks FUNC_NAME [ARG]... 1699*a67afe4dSAndroid Build Coastguard Worker# --------------------------------- 1700*a67afe4dSAndroid Build Coastguard Worker# Run all hook functions registered to FUNC_NAME. 1701*a67afe4dSAndroid Build Coastguard Worker# It's assumed that the list of hook functions contains nothing more 1702*a67afe4dSAndroid Build Coastguard Worker# than a whitespace-delimited list of legal shell function names, and 1703*a67afe4dSAndroid Build Coastguard Worker# no effort is wasted trying to catch shell meta-characters or preserve 1704*a67afe4dSAndroid Build Coastguard Worker# whitespace. 1705*a67afe4dSAndroid Build Coastguard Workerfunc_run_hooks () 1706*a67afe4dSAndroid Build Coastguard Worker{ 1707*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1708*a67afe4dSAndroid Build Coastguard Worker 1709*a67afe4dSAndroid Build Coastguard Worker case " $hookable_fns " in 1710*a67afe4dSAndroid Build Coastguard Worker *" $1 "*) ;; 1711*a67afe4dSAndroid Build Coastguard Worker *) func_fatal_error "'$1' does not support hook functions." ;; 1712*a67afe4dSAndroid Build Coastguard Worker esac 1713*a67afe4dSAndroid Build Coastguard Worker 1714*a67afe4dSAndroid Build Coastguard Worker eval _G_hook_fns=\$$1_hooks; shift 1715*a67afe4dSAndroid Build Coastguard Worker 1716*a67afe4dSAndroid Build Coastguard Worker for _G_hook in $_G_hook_fns; do 1717*a67afe4dSAndroid Build Coastguard Worker func_unset "${_G_hook}_result" 1718*a67afe4dSAndroid Build Coastguard Worker eval $_G_hook '${1+"$@"}' 1719*a67afe4dSAndroid Build Coastguard Worker func_propagate_result $_G_hook func_run_hooks 1720*a67afe4dSAndroid Build Coastguard Worker if $func_propagate_result_result; then 1721*a67afe4dSAndroid Build Coastguard Worker eval set dummy "$func_run_hooks_result"; shift 1722*a67afe4dSAndroid Build Coastguard Worker fi 1723*a67afe4dSAndroid Build Coastguard Worker done 1724*a67afe4dSAndroid Build Coastguard Worker} 1725*a67afe4dSAndroid Build Coastguard Worker 1726*a67afe4dSAndroid Build Coastguard Worker 1727*a67afe4dSAndroid Build Coastguard Worker 1728*a67afe4dSAndroid Build Coastguard Worker## --------------- ## 1729*a67afe4dSAndroid Build Coastguard Worker## Option parsing. ## 1730*a67afe4dSAndroid Build Coastguard Worker## --------------- ## 1731*a67afe4dSAndroid Build Coastguard Worker 1732*a67afe4dSAndroid Build Coastguard Worker# In order to add your own option parsing hooks, you must accept the 1733*a67afe4dSAndroid Build Coastguard Worker# full positional parameter list from your hook function. You may remove 1734*a67afe4dSAndroid Build Coastguard Worker# or edit any options that you action, and then pass back the remaining 1735*a67afe4dSAndroid Build Coastguard Worker# unprocessed options in '<hooked_function_name>_result', escaped 1736*a67afe4dSAndroid Build Coastguard Worker# suitably for 'eval'. 1737*a67afe4dSAndroid Build Coastguard Worker# 1738*a67afe4dSAndroid Build Coastguard Worker# The '<hooked_function_name>_result' variable is automatically unset 1739*a67afe4dSAndroid Build Coastguard Worker# before your hook gets called; for best performance, only set the 1740*a67afe4dSAndroid Build Coastguard Worker# *_result variable when necessary (i.e. don't call the 'func_quote' 1741*a67afe4dSAndroid Build Coastguard Worker# function unnecessarily because it can be an expensive operation on some 1742*a67afe4dSAndroid Build Coastguard Worker# machines). 1743*a67afe4dSAndroid Build Coastguard Worker# 1744*a67afe4dSAndroid Build Coastguard Worker# Like this: 1745*a67afe4dSAndroid Build Coastguard Worker# 1746*a67afe4dSAndroid Build Coastguard Worker# my_options_prep () 1747*a67afe4dSAndroid Build Coastguard Worker# { 1748*a67afe4dSAndroid Build Coastguard Worker# $debug_cmd 1749*a67afe4dSAndroid Build Coastguard Worker# 1750*a67afe4dSAndroid Build Coastguard Worker# # Extend the existing usage message. 1751*a67afe4dSAndroid Build Coastguard Worker# usage_message=$usage_message' 1752*a67afe4dSAndroid Build Coastguard Worker# -s, --silent don'\''t print informational messages 1753*a67afe4dSAndroid Build Coastguard Worker# ' 1754*a67afe4dSAndroid Build Coastguard Worker# # No change in '$@' (ignored completely by this hook). Leave 1755*a67afe4dSAndroid Build Coastguard Worker# # my_options_prep_result variable intact. 1756*a67afe4dSAndroid Build Coastguard Worker# } 1757*a67afe4dSAndroid Build Coastguard Worker# func_add_hook func_options_prep my_options_prep 1758*a67afe4dSAndroid Build Coastguard Worker# 1759*a67afe4dSAndroid Build Coastguard Worker# 1760*a67afe4dSAndroid Build Coastguard Worker# my_silent_option () 1761*a67afe4dSAndroid Build Coastguard Worker# { 1762*a67afe4dSAndroid Build Coastguard Worker# $debug_cmd 1763*a67afe4dSAndroid Build Coastguard Worker# 1764*a67afe4dSAndroid Build Coastguard Worker# args_changed=false 1765*a67afe4dSAndroid Build Coastguard Worker# 1766*a67afe4dSAndroid Build Coastguard Worker# # Note that, for efficiency, we parse as many options as we can 1767*a67afe4dSAndroid Build Coastguard Worker# # recognise in a loop before passing the remainder back to the 1768*a67afe4dSAndroid Build Coastguard Worker# # caller on the first unrecognised argument we encounter. 1769*a67afe4dSAndroid Build Coastguard Worker# while test $# -gt 0; do 1770*a67afe4dSAndroid Build Coastguard Worker# opt=$1; shift 1771*a67afe4dSAndroid Build Coastguard Worker# case $opt in 1772*a67afe4dSAndroid Build Coastguard Worker# --silent|-s) opt_silent=: 1773*a67afe4dSAndroid Build Coastguard Worker# args_changed=: 1774*a67afe4dSAndroid Build Coastguard Worker# ;; 1775*a67afe4dSAndroid Build Coastguard Worker# # Separate non-argument short options: 1776*a67afe4dSAndroid Build Coastguard Worker# -s*) func_split_short_opt "$_G_opt" 1777*a67afe4dSAndroid Build Coastguard Worker# set dummy "$func_split_short_opt_name" \ 1778*a67afe4dSAndroid Build Coastguard Worker# "-$func_split_short_opt_arg" ${1+"$@"} 1779*a67afe4dSAndroid Build Coastguard Worker# shift 1780*a67afe4dSAndroid Build Coastguard Worker# args_changed=: 1781*a67afe4dSAndroid Build Coastguard Worker# ;; 1782*a67afe4dSAndroid Build Coastguard Worker# *) # Make sure the first unrecognised option "$_G_opt" 1783*a67afe4dSAndroid Build Coastguard Worker# # is added back to "$@" in case we need it later, 1784*a67afe4dSAndroid Build Coastguard Worker# # if $args_changed was set to 'true'. 1785*a67afe4dSAndroid Build Coastguard Worker# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 1786*a67afe4dSAndroid Build Coastguard Worker# esac 1787*a67afe4dSAndroid Build Coastguard Worker# done 1788*a67afe4dSAndroid Build Coastguard Worker# 1789*a67afe4dSAndroid Build Coastguard Worker# # Only call 'func_quote' here if we processed at least one argument. 1790*a67afe4dSAndroid Build Coastguard Worker# if $args_changed; then 1791*a67afe4dSAndroid Build Coastguard Worker# func_quote eval ${1+"$@"} 1792*a67afe4dSAndroid Build Coastguard Worker# my_silent_option_result=$func_quote_result 1793*a67afe4dSAndroid Build Coastguard Worker# fi 1794*a67afe4dSAndroid Build Coastguard Worker# } 1795*a67afe4dSAndroid Build Coastguard Worker# func_add_hook func_parse_options my_silent_option 1796*a67afe4dSAndroid Build Coastguard Worker# 1797*a67afe4dSAndroid Build Coastguard Worker# 1798*a67afe4dSAndroid Build Coastguard Worker# my_option_validation () 1799*a67afe4dSAndroid Build Coastguard Worker# { 1800*a67afe4dSAndroid Build Coastguard Worker# $debug_cmd 1801*a67afe4dSAndroid Build Coastguard Worker# 1802*a67afe4dSAndroid Build Coastguard Worker# $opt_silent && $opt_verbose && func_fatal_help "\ 1803*a67afe4dSAndroid Build Coastguard Worker# '--silent' and '--verbose' options are mutually exclusive." 1804*a67afe4dSAndroid Build Coastguard Worker# } 1805*a67afe4dSAndroid Build Coastguard Worker# func_add_hook func_validate_options my_option_validation 1806*a67afe4dSAndroid Build Coastguard Worker# 1807*a67afe4dSAndroid Build Coastguard Worker# You'll also need to manually amend $usage_message to reflect the extra 1808*a67afe4dSAndroid Build Coastguard Worker# options you parse. It's preferable to append if you can, so that 1809*a67afe4dSAndroid Build Coastguard Worker# multiple option parsing hooks can be added safely. 1810*a67afe4dSAndroid Build Coastguard Worker 1811*a67afe4dSAndroid Build Coastguard Worker 1812*a67afe4dSAndroid Build Coastguard Worker# func_options_finish [ARG]... 1813*a67afe4dSAndroid Build Coastguard Worker# ---------------------------- 1814*a67afe4dSAndroid Build Coastguard Worker# Finishing the option parse loop (call 'func_options' hooks ATM). 1815*a67afe4dSAndroid Build Coastguard Workerfunc_options_finish () 1816*a67afe4dSAndroid Build Coastguard Worker{ 1817*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1818*a67afe4dSAndroid Build Coastguard Worker 1819*a67afe4dSAndroid Build Coastguard Worker func_run_hooks func_options ${1+"$@"} 1820*a67afe4dSAndroid Build Coastguard Worker func_propagate_result func_run_hooks func_options_finish 1821*a67afe4dSAndroid Build Coastguard Worker} 1822*a67afe4dSAndroid Build Coastguard Worker 1823*a67afe4dSAndroid Build Coastguard Worker 1824*a67afe4dSAndroid Build Coastguard Worker# func_options [ARG]... 1825*a67afe4dSAndroid Build Coastguard Worker# --------------------- 1826*a67afe4dSAndroid Build Coastguard Worker# All the functions called inside func_options are hookable. See the 1827*a67afe4dSAndroid Build Coastguard Worker# individual implementations for details. 1828*a67afe4dSAndroid Build Coastguard Workerfunc_hookable func_options 1829*a67afe4dSAndroid Build Coastguard Workerfunc_options () 1830*a67afe4dSAndroid Build Coastguard Worker{ 1831*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1832*a67afe4dSAndroid Build Coastguard Worker 1833*a67afe4dSAndroid Build Coastguard Worker _G_options_quoted=false 1834*a67afe4dSAndroid Build Coastguard Worker 1835*a67afe4dSAndroid Build Coastguard Worker for my_func in options_prep parse_options validate_options options_finish 1836*a67afe4dSAndroid Build Coastguard Worker do 1837*a67afe4dSAndroid Build Coastguard Worker func_unset func_${my_func}_result 1838*a67afe4dSAndroid Build Coastguard Worker func_unset func_run_hooks_result 1839*a67afe4dSAndroid Build Coastguard Worker eval func_$my_func '${1+"$@"}' 1840*a67afe4dSAndroid Build Coastguard Worker func_propagate_result func_$my_func func_options 1841*a67afe4dSAndroid Build Coastguard Worker if $func_propagate_result_result; then 1842*a67afe4dSAndroid Build Coastguard Worker eval set dummy "$func_options_result"; shift 1843*a67afe4dSAndroid Build Coastguard Worker _G_options_quoted=: 1844*a67afe4dSAndroid Build Coastguard Worker fi 1845*a67afe4dSAndroid Build Coastguard Worker done 1846*a67afe4dSAndroid Build Coastguard Worker 1847*a67afe4dSAndroid Build Coastguard Worker $_G_options_quoted || { 1848*a67afe4dSAndroid Build Coastguard Worker # As we (func_options) are top-level options-parser function and 1849*a67afe4dSAndroid Build Coastguard Worker # nobody quoted "$@" for us yet, we need to do it explicitly for 1850*a67afe4dSAndroid Build Coastguard Worker # caller. 1851*a67afe4dSAndroid Build Coastguard Worker func_quote eval ${1+"$@"} 1852*a67afe4dSAndroid Build Coastguard Worker func_options_result=$func_quote_result 1853*a67afe4dSAndroid Build Coastguard Worker } 1854*a67afe4dSAndroid Build Coastguard Worker} 1855*a67afe4dSAndroid Build Coastguard Worker 1856*a67afe4dSAndroid Build Coastguard Worker 1857*a67afe4dSAndroid Build Coastguard Worker# func_options_prep [ARG]... 1858*a67afe4dSAndroid Build Coastguard Worker# -------------------------- 1859*a67afe4dSAndroid Build Coastguard Worker# All initialisations required before starting the option parse loop. 1860*a67afe4dSAndroid Build Coastguard Worker# Note that when calling hook functions, we pass through the list of 1861*a67afe4dSAndroid Build Coastguard Worker# positional parameters. If a hook function modifies that list, and 1862*a67afe4dSAndroid Build Coastguard Worker# needs to propagate that back to rest of this script, then the complete 1863*a67afe4dSAndroid Build Coastguard Worker# modified list must be put in 'func_run_hooks_result' before returning. 1864*a67afe4dSAndroid Build Coastguard Workerfunc_hookable func_options_prep 1865*a67afe4dSAndroid Build Coastguard Workerfunc_options_prep () 1866*a67afe4dSAndroid Build Coastguard Worker{ 1867*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1868*a67afe4dSAndroid Build Coastguard Worker 1869*a67afe4dSAndroid Build Coastguard Worker # Option defaults: 1870*a67afe4dSAndroid Build Coastguard Worker opt_verbose=false 1871*a67afe4dSAndroid Build Coastguard Worker opt_warning_types= 1872*a67afe4dSAndroid Build Coastguard Worker 1873*a67afe4dSAndroid Build Coastguard Worker func_run_hooks func_options_prep ${1+"$@"} 1874*a67afe4dSAndroid Build Coastguard Worker func_propagate_result func_run_hooks func_options_prep 1875*a67afe4dSAndroid Build Coastguard Worker} 1876*a67afe4dSAndroid Build Coastguard Worker 1877*a67afe4dSAndroid Build Coastguard Worker 1878*a67afe4dSAndroid Build Coastguard Worker# func_parse_options [ARG]... 1879*a67afe4dSAndroid Build Coastguard Worker# --------------------------- 1880*a67afe4dSAndroid Build Coastguard Worker# The main option parsing loop. 1881*a67afe4dSAndroid Build Coastguard Workerfunc_hookable func_parse_options 1882*a67afe4dSAndroid Build Coastguard Workerfunc_parse_options () 1883*a67afe4dSAndroid Build Coastguard Worker{ 1884*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1885*a67afe4dSAndroid Build Coastguard Worker 1886*a67afe4dSAndroid Build Coastguard Worker _G_parse_options_requote=false 1887*a67afe4dSAndroid Build Coastguard Worker # this just eases exit handling 1888*a67afe4dSAndroid Build Coastguard Worker while test $# -gt 0; do 1889*a67afe4dSAndroid Build Coastguard Worker # Defer to hook functions for initial option parsing, so they 1890*a67afe4dSAndroid Build Coastguard Worker # get priority in the event of reusing an option name. 1891*a67afe4dSAndroid Build Coastguard Worker func_run_hooks func_parse_options ${1+"$@"} 1892*a67afe4dSAndroid Build Coastguard Worker func_propagate_result func_run_hooks func_parse_options 1893*a67afe4dSAndroid Build Coastguard Worker if $func_propagate_result_result; then 1894*a67afe4dSAndroid Build Coastguard Worker eval set dummy "$func_parse_options_result"; shift 1895*a67afe4dSAndroid Build Coastguard Worker # Even though we may have changed "$@", we passed the "$@" array 1896*a67afe4dSAndroid Build Coastguard Worker # down into the hook and it quoted it for us (because we are in 1897*a67afe4dSAndroid Build Coastguard Worker # this if-branch). No need to quote it again. 1898*a67afe4dSAndroid Build Coastguard Worker _G_parse_options_requote=false 1899*a67afe4dSAndroid Build Coastguard Worker fi 1900*a67afe4dSAndroid Build Coastguard Worker 1901*a67afe4dSAndroid Build Coastguard Worker # Break out of the loop if we already parsed every option. 1902*a67afe4dSAndroid Build Coastguard Worker test $# -gt 0 || break 1903*a67afe4dSAndroid Build Coastguard Worker 1904*a67afe4dSAndroid Build Coastguard Worker # We expect that one of the options parsed in this function matches 1905*a67afe4dSAndroid Build Coastguard Worker # and thus we remove _G_opt from "$@" and need to re-quote. 1906*a67afe4dSAndroid Build Coastguard Worker _G_match_parse_options=: 1907*a67afe4dSAndroid Build Coastguard Worker _G_opt=$1 1908*a67afe4dSAndroid Build Coastguard Worker shift 1909*a67afe4dSAndroid Build Coastguard Worker case $_G_opt in 1910*a67afe4dSAndroid Build Coastguard Worker --debug|-x) debug_cmd='set -x' 1911*a67afe4dSAndroid Build Coastguard Worker func_echo "enabling shell trace mode" >&2 1912*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 1913*a67afe4dSAndroid Build Coastguard Worker ;; 1914*a67afe4dSAndroid Build Coastguard Worker 1915*a67afe4dSAndroid Build Coastguard Worker --no-warnings|--no-warning|--no-warn) 1916*a67afe4dSAndroid Build Coastguard Worker set dummy --warnings none ${1+"$@"} 1917*a67afe4dSAndroid Build Coastguard Worker shift 1918*a67afe4dSAndroid Build Coastguard Worker ;; 1919*a67afe4dSAndroid Build Coastguard Worker 1920*a67afe4dSAndroid Build Coastguard Worker --warnings|--warning|-W) 1921*a67afe4dSAndroid Build Coastguard Worker if test $# = 0 && func_missing_arg $_G_opt; then 1922*a67afe4dSAndroid Build Coastguard Worker _G_parse_options_requote=: 1923*a67afe4dSAndroid Build Coastguard Worker break 1924*a67afe4dSAndroid Build Coastguard Worker fi 1925*a67afe4dSAndroid Build Coastguard Worker case " $warning_categories $1" in 1926*a67afe4dSAndroid Build Coastguard Worker *" $1 "*) 1927*a67afe4dSAndroid Build Coastguard Worker # trailing space prevents matching last $1 above 1928*a67afe4dSAndroid Build Coastguard Worker func_append_uniq opt_warning_types " $1" 1929*a67afe4dSAndroid Build Coastguard Worker ;; 1930*a67afe4dSAndroid Build Coastguard Worker *all) 1931*a67afe4dSAndroid Build Coastguard Worker opt_warning_types=$warning_categories 1932*a67afe4dSAndroid Build Coastguard Worker ;; 1933*a67afe4dSAndroid Build Coastguard Worker *none) 1934*a67afe4dSAndroid Build Coastguard Worker opt_warning_types=none 1935*a67afe4dSAndroid Build Coastguard Worker warning_func=: 1936*a67afe4dSAndroid Build Coastguard Worker ;; 1937*a67afe4dSAndroid Build Coastguard Worker *error) 1938*a67afe4dSAndroid Build Coastguard Worker opt_warning_types=$warning_categories 1939*a67afe4dSAndroid Build Coastguard Worker warning_func=func_fatal_error 1940*a67afe4dSAndroid Build Coastguard Worker ;; 1941*a67afe4dSAndroid Build Coastguard Worker *) 1942*a67afe4dSAndroid Build Coastguard Worker func_fatal_error \ 1943*a67afe4dSAndroid Build Coastguard Worker "unsupported warning category: '$1'" 1944*a67afe4dSAndroid Build Coastguard Worker ;; 1945*a67afe4dSAndroid Build Coastguard Worker esac 1946*a67afe4dSAndroid Build Coastguard Worker shift 1947*a67afe4dSAndroid Build Coastguard Worker ;; 1948*a67afe4dSAndroid Build Coastguard Worker 1949*a67afe4dSAndroid Build Coastguard Worker --verbose|-v) opt_verbose=: ;; 1950*a67afe4dSAndroid Build Coastguard Worker --version) func_version ;; 1951*a67afe4dSAndroid Build Coastguard Worker -\?|-h) func_usage ;; 1952*a67afe4dSAndroid Build Coastguard Worker --help) func_help ;; 1953*a67afe4dSAndroid Build Coastguard Worker 1954*a67afe4dSAndroid Build Coastguard Worker # Separate optargs to long options (plugins may need this): 1955*a67afe4dSAndroid Build Coastguard Worker --*=*) func_split_equals "$_G_opt" 1956*a67afe4dSAndroid Build Coastguard Worker set dummy "$func_split_equals_lhs" \ 1957*a67afe4dSAndroid Build Coastguard Worker "$func_split_equals_rhs" ${1+"$@"} 1958*a67afe4dSAndroid Build Coastguard Worker shift 1959*a67afe4dSAndroid Build Coastguard Worker ;; 1960*a67afe4dSAndroid Build Coastguard Worker 1961*a67afe4dSAndroid Build Coastguard Worker # Separate optargs to short options: 1962*a67afe4dSAndroid Build Coastguard Worker -W*) 1963*a67afe4dSAndroid Build Coastguard Worker func_split_short_opt "$_G_opt" 1964*a67afe4dSAndroid Build Coastguard Worker set dummy "$func_split_short_opt_name" \ 1965*a67afe4dSAndroid Build Coastguard Worker "$func_split_short_opt_arg" ${1+"$@"} 1966*a67afe4dSAndroid Build Coastguard Worker shift 1967*a67afe4dSAndroid Build Coastguard Worker ;; 1968*a67afe4dSAndroid Build Coastguard Worker 1969*a67afe4dSAndroid Build Coastguard Worker # Separate non-argument short options: 1970*a67afe4dSAndroid Build Coastguard Worker -\?*|-h*|-v*|-x*) 1971*a67afe4dSAndroid Build Coastguard Worker func_split_short_opt "$_G_opt" 1972*a67afe4dSAndroid Build Coastguard Worker set dummy "$func_split_short_opt_name" \ 1973*a67afe4dSAndroid Build Coastguard Worker "-$func_split_short_opt_arg" ${1+"$@"} 1974*a67afe4dSAndroid Build Coastguard Worker shift 1975*a67afe4dSAndroid Build Coastguard Worker ;; 1976*a67afe4dSAndroid Build Coastguard Worker 1977*a67afe4dSAndroid Build Coastguard Worker --) _G_parse_options_requote=: ; break ;; 1978*a67afe4dSAndroid Build Coastguard Worker -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 1979*a67afe4dSAndroid Build Coastguard Worker *) set dummy "$_G_opt" ${1+"$@"}; shift 1980*a67afe4dSAndroid Build Coastguard Worker _G_match_parse_options=false 1981*a67afe4dSAndroid Build Coastguard Worker break 1982*a67afe4dSAndroid Build Coastguard Worker ;; 1983*a67afe4dSAndroid Build Coastguard Worker esac 1984*a67afe4dSAndroid Build Coastguard Worker 1985*a67afe4dSAndroid Build Coastguard Worker if $_G_match_parse_options; then 1986*a67afe4dSAndroid Build Coastguard Worker _G_parse_options_requote=: 1987*a67afe4dSAndroid Build Coastguard Worker fi 1988*a67afe4dSAndroid Build Coastguard Worker done 1989*a67afe4dSAndroid Build Coastguard Worker 1990*a67afe4dSAndroid Build Coastguard Worker if $_G_parse_options_requote; then 1991*a67afe4dSAndroid Build Coastguard Worker # save modified positional parameters for caller 1992*a67afe4dSAndroid Build Coastguard Worker func_quote eval ${1+"$@"} 1993*a67afe4dSAndroid Build Coastguard Worker func_parse_options_result=$func_quote_result 1994*a67afe4dSAndroid Build Coastguard Worker fi 1995*a67afe4dSAndroid Build Coastguard Worker} 1996*a67afe4dSAndroid Build Coastguard Worker 1997*a67afe4dSAndroid Build Coastguard Worker 1998*a67afe4dSAndroid Build Coastguard Worker# func_validate_options [ARG]... 1999*a67afe4dSAndroid Build Coastguard Worker# ------------------------------ 2000*a67afe4dSAndroid Build Coastguard Worker# Perform any sanity checks on option settings and/or unconsumed 2001*a67afe4dSAndroid Build Coastguard Worker# arguments. 2002*a67afe4dSAndroid Build Coastguard Workerfunc_hookable func_validate_options 2003*a67afe4dSAndroid Build Coastguard Workerfunc_validate_options () 2004*a67afe4dSAndroid Build Coastguard Worker{ 2005*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2006*a67afe4dSAndroid Build Coastguard Worker 2007*a67afe4dSAndroid Build Coastguard Worker # Display all warnings if -W was not given. 2008*a67afe4dSAndroid Build Coastguard Worker test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 2009*a67afe4dSAndroid Build Coastguard Worker 2010*a67afe4dSAndroid Build Coastguard Worker func_run_hooks func_validate_options ${1+"$@"} 2011*a67afe4dSAndroid Build Coastguard Worker func_propagate_result func_run_hooks func_validate_options 2012*a67afe4dSAndroid Build Coastguard Worker 2013*a67afe4dSAndroid Build Coastguard Worker # Bail if the options were screwed! 2014*a67afe4dSAndroid Build Coastguard Worker $exit_cmd $EXIT_FAILURE 2015*a67afe4dSAndroid Build Coastguard Worker} 2016*a67afe4dSAndroid Build Coastguard Worker 2017*a67afe4dSAndroid Build Coastguard Worker 2018*a67afe4dSAndroid Build Coastguard Worker 2019*a67afe4dSAndroid Build Coastguard Worker## ----------------- ## 2020*a67afe4dSAndroid Build Coastguard Worker## Helper functions. ## 2021*a67afe4dSAndroid Build Coastguard Worker## ----------------- ## 2022*a67afe4dSAndroid Build Coastguard Worker 2023*a67afe4dSAndroid Build Coastguard Worker# This section contains the helper functions used by the rest of the 2024*a67afe4dSAndroid Build Coastguard Worker# hookable option parser framework in ascii-betical order. 2025*a67afe4dSAndroid Build Coastguard Worker 2026*a67afe4dSAndroid Build Coastguard Worker 2027*a67afe4dSAndroid Build Coastguard Worker# func_fatal_help ARG... 2028*a67afe4dSAndroid Build Coastguard Worker# ---------------------- 2029*a67afe4dSAndroid Build Coastguard Worker# Echo program name prefixed message to standard error, followed by 2030*a67afe4dSAndroid Build Coastguard Worker# a help hint, and exit. 2031*a67afe4dSAndroid Build Coastguard Workerfunc_fatal_help () 2032*a67afe4dSAndroid Build Coastguard Worker{ 2033*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2034*a67afe4dSAndroid Build Coastguard Worker 2035*a67afe4dSAndroid Build Coastguard Worker eval \$ECHO \""Usage: $usage"\" 2036*a67afe4dSAndroid Build Coastguard Worker eval \$ECHO \""$fatal_help"\" 2037*a67afe4dSAndroid Build Coastguard Worker func_error ${1+"$@"} 2038*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_FAILURE 2039*a67afe4dSAndroid Build Coastguard Worker} 2040*a67afe4dSAndroid Build Coastguard Worker 2041*a67afe4dSAndroid Build Coastguard Worker 2042*a67afe4dSAndroid Build Coastguard Worker# func_help 2043*a67afe4dSAndroid Build Coastguard Worker# --------- 2044*a67afe4dSAndroid Build Coastguard Worker# Echo long help message to standard output and exit. 2045*a67afe4dSAndroid Build Coastguard Workerfunc_help () 2046*a67afe4dSAndroid Build Coastguard Worker{ 2047*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2048*a67afe4dSAndroid Build Coastguard Worker 2049*a67afe4dSAndroid Build Coastguard Worker func_usage_message 2050*a67afe4dSAndroid Build Coastguard Worker $ECHO "$long_help_message" 2051*a67afe4dSAndroid Build Coastguard Worker exit 0 2052*a67afe4dSAndroid Build Coastguard Worker} 2053*a67afe4dSAndroid Build Coastguard Worker 2054*a67afe4dSAndroid Build Coastguard Worker 2055*a67afe4dSAndroid Build Coastguard Worker# func_missing_arg ARGNAME 2056*a67afe4dSAndroid Build Coastguard Worker# ------------------------ 2057*a67afe4dSAndroid Build Coastguard Worker# Echo program name prefixed message to standard error and set global 2058*a67afe4dSAndroid Build Coastguard Worker# exit_cmd. 2059*a67afe4dSAndroid Build Coastguard Workerfunc_missing_arg () 2060*a67afe4dSAndroid Build Coastguard Worker{ 2061*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2062*a67afe4dSAndroid Build Coastguard Worker 2063*a67afe4dSAndroid Build Coastguard Worker func_error "Missing argument for '$1'." 2064*a67afe4dSAndroid Build Coastguard Worker exit_cmd=exit 2065*a67afe4dSAndroid Build Coastguard Worker} 2066*a67afe4dSAndroid Build Coastguard Worker 2067*a67afe4dSAndroid Build Coastguard Worker 2068*a67afe4dSAndroid Build Coastguard Worker# func_split_equals STRING 2069*a67afe4dSAndroid Build Coastguard Worker# ------------------------ 2070*a67afe4dSAndroid Build Coastguard Worker# Set func_split_equals_lhs and func_split_equals_rhs shell variables 2071*a67afe4dSAndroid Build Coastguard Worker# after splitting STRING at the '=' sign. 2072*a67afe4dSAndroid Build Coastguard Workertest -z "$_G_HAVE_XSI_OPS" \ 2073*a67afe4dSAndroid Build Coastguard Worker && (eval 'x=a/b/c; 2074*a67afe4dSAndroid Build Coastguard Worker test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 2075*a67afe4dSAndroid Build Coastguard Worker && _G_HAVE_XSI_OPS=yes 2076*a67afe4dSAndroid Build Coastguard Worker 2077*a67afe4dSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS" 2078*a67afe4dSAndroid Build Coastguard Workerthen 2079*a67afe4dSAndroid Build Coastguard Worker # This is an XSI compatible shell, allowing a faster implementation... 2080*a67afe4dSAndroid Build Coastguard Worker eval 'func_split_equals () 2081*a67afe4dSAndroid Build Coastguard Worker { 2082*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2083*a67afe4dSAndroid Build Coastguard Worker 2084*a67afe4dSAndroid Build Coastguard Worker func_split_equals_lhs=${1%%=*} 2085*a67afe4dSAndroid Build Coastguard Worker func_split_equals_rhs=${1#*=} 2086*a67afe4dSAndroid Build Coastguard Worker if test "x$func_split_equals_lhs" = "x$1"; then 2087*a67afe4dSAndroid Build Coastguard Worker func_split_equals_rhs= 2088*a67afe4dSAndroid Build Coastguard Worker fi 2089*a67afe4dSAndroid Build Coastguard Worker }' 2090*a67afe4dSAndroid Build Coastguard Workerelse 2091*a67afe4dSAndroid Build Coastguard Worker # ...otherwise fall back to using expr, which is often a shell builtin. 2092*a67afe4dSAndroid Build Coastguard Worker func_split_equals () 2093*a67afe4dSAndroid Build Coastguard Worker { 2094*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2095*a67afe4dSAndroid Build Coastguard Worker 2096*a67afe4dSAndroid Build Coastguard Worker func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 2097*a67afe4dSAndroid Build Coastguard Worker func_split_equals_rhs= 2098*a67afe4dSAndroid Build Coastguard Worker test "x$func_split_equals_lhs=" = "x$1" \ 2099*a67afe4dSAndroid Build Coastguard Worker || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 2100*a67afe4dSAndroid Build Coastguard Worker } 2101*a67afe4dSAndroid Build Coastguard Workerfi #func_split_equals 2102*a67afe4dSAndroid Build Coastguard Worker 2103*a67afe4dSAndroid Build Coastguard Worker 2104*a67afe4dSAndroid Build Coastguard Worker# func_split_short_opt SHORTOPT 2105*a67afe4dSAndroid Build Coastguard Worker# ----------------------------- 2106*a67afe4dSAndroid Build Coastguard Worker# Set func_split_short_opt_name and func_split_short_opt_arg shell 2107*a67afe4dSAndroid Build Coastguard Worker# variables after splitting SHORTOPT after the 2nd character. 2108*a67afe4dSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS" 2109*a67afe4dSAndroid Build Coastguard Workerthen 2110*a67afe4dSAndroid Build Coastguard Worker # This is an XSI compatible shell, allowing a faster implementation... 2111*a67afe4dSAndroid Build Coastguard Worker eval 'func_split_short_opt () 2112*a67afe4dSAndroid Build Coastguard Worker { 2113*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2114*a67afe4dSAndroid Build Coastguard Worker 2115*a67afe4dSAndroid Build Coastguard Worker func_split_short_opt_arg=${1#??} 2116*a67afe4dSAndroid Build Coastguard Worker func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 2117*a67afe4dSAndroid Build Coastguard Worker }' 2118*a67afe4dSAndroid Build Coastguard Workerelse 2119*a67afe4dSAndroid Build Coastguard Worker # ...otherwise fall back to using expr, which is often a shell builtin. 2120*a67afe4dSAndroid Build Coastguard Worker func_split_short_opt () 2121*a67afe4dSAndroid Build Coastguard Worker { 2122*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2123*a67afe4dSAndroid Build Coastguard Worker 2124*a67afe4dSAndroid Build Coastguard Worker func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` 2125*a67afe4dSAndroid Build Coastguard Worker func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 2126*a67afe4dSAndroid Build Coastguard Worker } 2127*a67afe4dSAndroid Build Coastguard Workerfi #func_split_short_opt 2128*a67afe4dSAndroid Build Coastguard Worker 2129*a67afe4dSAndroid Build Coastguard Worker 2130*a67afe4dSAndroid Build Coastguard Worker# func_usage 2131*a67afe4dSAndroid Build Coastguard Worker# ---------- 2132*a67afe4dSAndroid Build Coastguard Worker# Echo short help message to standard output and exit. 2133*a67afe4dSAndroid Build Coastguard Workerfunc_usage () 2134*a67afe4dSAndroid Build Coastguard Worker{ 2135*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2136*a67afe4dSAndroid Build Coastguard Worker 2137*a67afe4dSAndroid Build Coastguard Worker func_usage_message 2138*a67afe4dSAndroid Build Coastguard Worker $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 2139*a67afe4dSAndroid Build Coastguard Worker exit 0 2140*a67afe4dSAndroid Build Coastguard Worker} 2141*a67afe4dSAndroid Build Coastguard Worker 2142*a67afe4dSAndroid Build Coastguard Worker 2143*a67afe4dSAndroid Build Coastguard Worker# func_usage_message 2144*a67afe4dSAndroid Build Coastguard Worker# ------------------ 2145*a67afe4dSAndroid Build Coastguard Worker# Echo short help message to standard output. 2146*a67afe4dSAndroid Build Coastguard Workerfunc_usage_message () 2147*a67afe4dSAndroid Build Coastguard Worker{ 2148*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2149*a67afe4dSAndroid Build Coastguard Worker 2150*a67afe4dSAndroid Build Coastguard Worker eval \$ECHO \""Usage: $usage"\" 2151*a67afe4dSAndroid Build Coastguard Worker echo 2152*a67afe4dSAndroid Build Coastguard Worker $SED -n 's|^# || 2153*a67afe4dSAndroid Build Coastguard Worker /^Written by/{ 2154*a67afe4dSAndroid Build Coastguard Worker x;p;x 2155*a67afe4dSAndroid Build Coastguard Worker } 2156*a67afe4dSAndroid Build Coastguard Worker h 2157*a67afe4dSAndroid Build Coastguard Worker /^Written by/q' < "$progpath" 2158*a67afe4dSAndroid Build Coastguard Worker echo 2159*a67afe4dSAndroid Build Coastguard Worker eval \$ECHO \""$usage_message"\" 2160*a67afe4dSAndroid Build Coastguard Worker} 2161*a67afe4dSAndroid Build Coastguard Worker 2162*a67afe4dSAndroid Build Coastguard Worker 2163*a67afe4dSAndroid Build Coastguard Worker# func_version 2164*a67afe4dSAndroid Build Coastguard Worker# ------------ 2165*a67afe4dSAndroid Build Coastguard Worker# Echo version message to standard output and exit. 2166*a67afe4dSAndroid Build Coastguard Worker# The version message is extracted from the calling file's header 2167*a67afe4dSAndroid Build Coastguard Worker# comments, with leading '# ' stripped: 2168*a67afe4dSAndroid Build Coastguard Worker# 1. First display the progname and version 2169*a67afe4dSAndroid Build Coastguard Worker# 2. Followed by the header comment line matching /^# Written by / 2170*a67afe4dSAndroid Build Coastguard Worker# 3. Then a blank line followed by the first following line matching 2171*a67afe4dSAndroid Build Coastguard Worker# /^# Copyright / 2172*a67afe4dSAndroid Build Coastguard Worker# 4. Immediately followed by any lines between the previous matches, 2173*a67afe4dSAndroid Build Coastguard Worker# except lines preceding the intervening completely blank line. 2174*a67afe4dSAndroid Build Coastguard Worker# For example, see the header comments of this file. 2175*a67afe4dSAndroid Build Coastguard Workerfunc_version () 2176*a67afe4dSAndroid Build Coastguard Worker{ 2177*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2178*a67afe4dSAndroid Build Coastguard Worker 2179*a67afe4dSAndroid Build Coastguard Worker printf '%s\n' "$progname $scriptversion" 2180*a67afe4dSAndroid Build Coastguard Worker $SED -n ' 2181*a67afe4dSAndroid Build Coastguard Worker /^# Written by /!b 2182*a67afe4dSAndroid Build Coastguard Worker s|^# ||; p; n 2183*a67afe4dSAndroid Build Coastguard Worker 2184*a67afe4dSAndroid Build Coastguard Worker :fwd2blnk 2185*a67afe4dSAndroid Build Coastguard Worker /./ { 2186*a67afe4dSAndroid Build Coastguard Worker n 2187*a67afe4dSAndroid Build Coastguard Worker b fwd2blnk 2188*a67afe4dSAndroid Build Coastguard Worker } 2189*a67afe4dSAndroid Build Coastguard Worker p; n 2190*a67afe4dSAndroid Build Coastguard Worker 2191*a67afe4dSAndroid Build Coastguard Worker :holdwrnt 2192*a67afe4dSAndroid Build Coastguard Worker s|^# || 2193*a67afe4dSAndroid Build Coastguard Worker s|^# *$|| 2194*a67afe4dSAndroid Build Coastguard Worker /^Copyright /!{ 2195*a67afe4dSAndroid Build Coastguard Worker /./H 2196*a67afe4dSAndroid Build Coastguard Worker n 2197*a67afe4dSAndroid Build Coastguard Worker b holdwrnt 2198*a67afe4dSAndroid Build Coastguard Worker } 2199*a67afe4dSAndroid Build Coastguard Worker 2200*a67afe4dSAndroid Build Coastguard Worker s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 2201*a67afe4dSAndroid Build Coastguard Worker G 2202*a67afe4dSAndroid Build Coastguard Worker s|\(\n\)\n*|\1|g 2203*a67afe4dSAndroid Build Coastguard Worker p; q' < "$progpath" 2204*a67afe4dSAndroid Build Coastguard Worker 2205*a67afe4dSAndroid Build Coastguard Worker exit $? 2206*a67afe4dSAndroid Build Coastguard Worker} 2207*a67afe4dSAndroid Build Coastguard Worker 2208*a67afe4dSAndroid Build Coastguard Worker 2209*a67afe4dSAndroid Build Coastguard Worker# Local variables: 2210*a67afe4dSAndroid Build Coastguard Worker# mode: shell-script 2211*a67afe4dSAndroid Build Coastguard Worker# sh-indentation: 2 2212*a67afe4dSAndroid Build Coastguard Worker# eval: (add-hook 'before-save-hook 'time-stamp) 2213*a67afe4dSAndroid Build Coastguard Worker# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" 2214*a67afe4dSAndroid Build Coastguard Worker# time-stamp-time-zone: "UTC" 2215*a67afe4dSAndroid Build Coastguard Worker# End: 2216*a67afe4dSAndroid Build Coastguard Worker 2217*a67afe4dSAndroid Build Coastguard Worker# Set a version string. 2218*a67afe4dSAndroid Build Coastguard Workerscriptversion='(GNU libtool) 2.4.7' 2219*a67afe4dSAndroid Build Coastguard Worker 2220*a67afe4dSAndroid Build Coastguard Worker 2221*a67afe4dSAndroid Build Coastguard Worker# func_echo ARG... 2222*a67afe4dSAndroid Build Coastguard Worker# ---------------- 2223*a67afe4dSAndroid Build Coastguard Worker# Libtool also displays the current mode in messages, so override 2224*a67afe4dSAndroid Build Coastguard Worker# funclib.sh func_echo with this custom definition. 2225*a67afe4dSAndroid Build Coastguard Workerfunc_echo () 2226*a67afe4dSAndroid Build Coastguard Worker{ 2227*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2228*a67afe4dSAndroid Build Coastguard Worker 2229*a67afe4dSAndroid Build Coastguard Worker _G_message=$* 2230*a67afe4dSAndroid Build Coastguard Worker 2231*a67afe4dSAndroid Build Coastguard Worker func_echo_IFS=$IFS 2232*a67afe4dSAndroid Build Coastguard Worker IFS=$nl 2233*a67afe4dSAndroid Build Coastguard Worker for _G_line in $_G_message; do 2234*a67afe4dSAndroid Build Coastguard Worker IFS=$func_echo_IFS 2235*a67afe4dSAndroid Build Coastguard Worker $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 2236*a67afe4dSAndroid Build Coastguard Worker done 2237*a67afe4dSAndroid Build Coastguard Worker IFS=$func_echo_IFS 2238*a67afe4dSAndroid Build Coastguard Worker} 2239*a67afe4dSAndroid Build Coastguard Worker 2240*a67afe4dSAndroid Build Coastguard Worker 2241*a67afe4dSAndroid Build Coastguard Worker# func_warning ARG... 2242*a67afe4dSAndroid Build Coastguard Worker# ------------------- 2243*a67afe4dSAndroid Build Coastguard Worker# Libtool warnings are not categorized, so override funclib.sh 2244*a67afe4dSAndroid Build Coastguard Worker# func_warning with this simpler definition. 2245*a67afe4dSAndroid Build Coastguard Workerfunc_warning () 2246*a67afe4dSAndroid Build Coastguard Worker{ 2247*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2248*a67afe4dSAndroid Build Coastguard Worker 2249*a67afe4dSAndroid Build Coastguard Worker $warning_func ${1+"$@"} 2250*a67afe4dSAndroid Build Coastguard Worker} 2251*a67afe4dSAndroid Build Coastguard Worker 2252*a67afe4dSAndroid Build Coastguard Worker 2253*a67afe4dSAndroid Build Coastguard Worker## ---------------- ## 2254*a67afe4dSAndroid Build Coastguard Worker## Options parsing. ## 2255*a67afe4dSAndroid Build Coastguard Worker## ---------------- ## 2256*a67afe4dSAndroid Build Coastguard Worker 2257*a67afe4dSAndroid Build Coastguard Worker# Hook in the functions to make sure our own options are parsed during 2258*a67afe4dSAndroid Build Coastguard Worker# the option parsing loop. 2259*a67afe4dSAndroid Build Coastguard Worker 2260*a67afe4dSAndroid Build Coastguard Workerusage='$progpath [OPTION]... [MODE-ARG]...' 2261*a67afe4dSAndroid Build Coastguard Worker 2262*a67afe4dSAndroid Build Coastguard Worker# Short help message in response to '-h'. 2263*a67afe4dSAndroid Build Coastguard Workerusage_message="Options: 2264*a67afe4dSAndroid Build Coastguard Worker --config show all configuration variables 2265*a67afe4dSAndroid Build Coastguard Worker --debug enable verbose shell tracing 2266*a67afe4dSAndroid Build Coastguard Worker -n, --dry-run display commands without modifying any files 2267*a67afe4dSAndroid Build Coastguard Worker --features display basic configuration information and exit 2268*a67afe4dSAndroid Build Coastguard Worker --mode=MODE use operation mode MODE 2269*a67afe4dSAndroid Build Coastguard Worker --no-warnings equivalent to '-Wnone' 2270*a67afe4dSAndroid Build Coastguard Worker --preserve-dup-deps don't remove duplicate dependency libraries 2271*a67afe4dSAndroid Build Coastguard Worker --quiet, --silent don't print informational messages 2272*a67afe4dSAndroid Build Coastguard Worker --tag=TAG use configuration variables from tag TAG 2273*a67afe4dSAndroid Build Coastguard Worker -v, --verbose print more informational messages than default 2274*a67afe4dSAndroid Build Coastguard Worker --version print version information 2275*a67afe4dSAndroid Build Coastguard Worker -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 2276*a67afe4dSAndroid Build Coastguard Worker -h, --help, --help-all print short, long, or detailed help message 2277*a67afe4dSAndroid Build Coastguard Worker" 2278*a67afe4dSAndroid Build Coastguard Worker 2279*a67afe4dSAndroid Build Coastguard Worker# Additional text appended to 'usage_message' in response to '--help'. 2280*a67afe4dSAndroid Build Coastguard Workerfunc_help () 2281*a67afe4dSAndroid Build Coastguard Worker{ 2282*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2283*a67afe4dSAndroid Build Coastguard Worker 2284*a67afe4dSAndroid Build Coastguard Worker func_usage_message 2285*a67afe4dSAndroid Build Coastguard Worker $ECHO "$long_help_message 2286*a67afe4dSAndroid Build Coastguard Worker 2287*a67afe4dSAndroid Build Coastguard WorkerMODE must be one of the following: 2288*a67afe4dSAndroid Build Coastguard Worker 2289*a67afe4dSAndroid Build Coastguard Worker clean remove files from the build directory 2290*a67afe4dSAndroid Build Coastguard Worker compile compile a source file into a libtool object 2291*a67afe4dSAndroid Build Coastguard Worker execute automatically set library path, then run a program 2292*a67afe4dSAndroid Build Coastguard Worker finish complete the installation of libtool libraries 2293*a67afe4dSAndroid Build Coastguard Worker install install libraries or executables 2294*a67afe4dSAndroid Build Coastguard Worker link create a library or an executable 2295*a67afe4dSAndroid Build Coastguard Worker uninstall remove libraries from an installed directory 2296*a67afe4dSAndroid Build Coastguard Worker 2297*a67afe4dSAndroid Build Coastguard WorkerMODE-ARGS vary depending on the MODE. When passed as first option, 2298*a67afe4dSAndroid Build Coastguard Worker'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 2299*a67afe4dSAndroid Build Coastguard WorkerTry '$progname --help --mode=MODE' for a more detailed description of MODE. 2300*a67afe4dSAndroid Build Coastguard Worker 2301*a67afe4dSAndroid Build Coastguard WorkerWhen reporting a bug, please describe a test case to reproduce it and 2302*a67afe4dSAndroid Build Coastguard Workerinclude the following information: 2303*a67afe4dSAndroid Build Coastguard Worker 2304*a67afe4dSAndroid Build Coastguard Worker host-triplet: $host 2305*a67afe4dSAndroid Build Coastguard Worker shell: $SHELL 2306*a67afe4dSAndroid Build Coastguard Worker compiler: $LTCC 2307*a67afe4dSAndroid Build Coastguard Worker compiler flags: $LTCFLAGS 2308*a67afe4dSAndroid Build Coastguard Worker linker: $LD (gnu? $with_gnu_ld) 2309*a67afe4dSAndroid Build Coastguard Worker version: $progname (GNU libtool) 2.4.7 2310*a67afe4dSAndroid Build Coastguard Worker automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 2311*a67afe4dSAndroid Build Coastguard Worker autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 2312*a67afe4dSAndroid Build Coastguard Worker 2313*a67afe4dSAndroid Build Coastguard WorkerReport bugs to <[email protected]>. 2314*a67afe4dSAndroid Build Coastguard WorkerGNU libtool home page: <http://www.gnu.org/software/libtool/>. 2315*a67afe4dSAndroid Build Coastguard WorkerGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 2316*a67afe4dSAndroid Build Coastguard Worker exit 0 2317*a67afe4dSAndroid Build Coastguard Worker} 2318*a67afe4dSAndroid Build Coastguard Worker 2319*a67afe4dSAndroid Build Coastguard Worker 2320*a67afe4dSAndroid Build Coastguard Worker# func_lo2o OBJECT-NAME 2321*a67afe4dSAndroid Build Coastguard Worker# --------------------- 2322*a67afe4dSAndroid Build Coastguard Worker# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 2323*a67afe4dSAndroid Build Coastguard Worker# object suffix. 2324*a67afe4dSAndroid Build Coastguard Worker 2325*a67afe4dSAndroid Build Coastguard Workerlo2o=s/\\.lo\$/.$objext/ 2326*a67afe4dSAndroid Build Coastguard Workero2lo=s/\\.$objext\$/.lo/ 2327*a67afe4dSAndroid Build Coastguard Worker 2328*a67afe4dSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS"; then 2329*a67afe4dSAndroid Build Coastguard Worker eval 'func_lo2o () 2330*a67afe4dSAndroid Build Coastguard Worker { 2331*a67afe4dSAndroid Build Coastguard Worker case $1 in 2332*a67afe4dSAndroid Build Coastguard Worker *.lo) func_lo2o_result=${1%.lo}.$objext ;; 2333*a67afe4dSAndroid Build Coastguard Worker * ) func_lo2o_result=$1 ;; 2334*a67afe4dSAndroid Build Coastguard Worker esac 2335*a67afe4dSAndroid Build Coastguard Worker }' 2336*a67afe4dSAndroid Build Coastguard Worker 2337*a67afe4dSAndroid Build Coastguard Worker # func_xform LIBOBJ-OR-SOURCE 2338*a67afe4dSAndroid Build Coastguard Worker # --------------------------- 2339*a67afe4dSAndroid Build Coastguard Worker # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 2340*a67afe4dSAndroid Build Coastguard Worker # suffix to a '.lo' libtool-object suffix. 2341*a67afe4dSAndroid Build Coastguard Worker eval 'func_xform () 2342*a67afe4dSAndroid Build Coastguard Worker { 2343*a67afe4dSAndroid Build Coastguard Worker func_xform_result=${1%.*}.lo 2344*a67afe4dSAndroid Build Coastguard Worker }' 2345*a67afe4dSAndroid Build Coastguard Workerelse 2346*a67afe4dSAndroid Build Coastguard Worker # ...otherwise fall back to using sed. 2347*a67afe4dSAndroid Build Coastguard Worker func_lo2o () 2348*a67afe4dSAndroid Build Coastguard Worker { 2349*a67afe4dSAndroid Build Coastguard Worker func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 2350*a67afe4dSAndroid Build Coastguard Worker } 2351*a67afe4dSAndroid Build Coastguard Worker 2352*a67afe4dSAndroid Build Coastguard Worker func_xform () 2353*a67afe4dSAndroid Build Coastguard Worker { 2354*a67afe4dSAndroid Build Coastguard Worker func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 2355*a67afe4dSAndroid Build Coastguard Worker } 2356*a67afe4dSAndroid Build Coastguard Workerfi 2357*a67afe4dSAndroid Build Coastguard Worker 2358*a67afe4dSAndroid Build Coastguard Worker 2359*a67afe4dSAndroid Build Coastguard Worker# func_fatal_configuration ARG... 2360*a67afe4dSAndroid Build Coastguard Worker# ------------------------------- 2361*a67afe4dSAndroid Build Coastguard Worker# Echo program name prefixed message to standard error, followed by 2362*a67afe4dSAndroid Build Coastguard Worker# a configuration failure hint, and exit. 2363*a67afe4dSAndroid Build Coastguard Workerfunc_fatal_configuration () 2364*a67afe4dSAndroid Build Coastguard Worker{ 2365*a67afe4dSAndroid Build Coastguard Worker func_fatal_error ${1+"$@"} \ 2366*a67afe4dSAndroid Build Coastguard Worker "See the $PACKAGE documentation for more information." \ 2367*a67afe4dSAndroid Build Coastguard Worker "Fatal configuration error." 2368*a67afe4dSAndroid Build Coastguard Worker} 2369*a67afe4dSAndroid Build Coastguard Worker 2370*a67afe4dSAndroid Build Coastguard Worker 2371*a67afe4dSAndroid Build Coastguard Worker# func_config 2372*a67afe4dSAndroid Build Coastguard Worker# ----------- 2373*a67afe4dSAndroid Build Coastguard Worker# Display the configuration for all the tags in this script. 2374*a67afe4dSAndroid Build Coastguard Workerfunc_config () 2375*a67afe4dSAndroid Build Coastguard Worker{ 2376*a67afe4dSAndroid Build Coastguard Worker re_begincf='^# ### BEGIN LIBTOOL' 2377*a67afe4dSAndroid Build Coastguard Worker re_endcf='^# ### END LIBTOOL' 2378*a67afe4dSAndroid Build Coastguard Worker 2379*a67afe4dSAndroid Build Coastguard Worker # Default configuration. 2380*a67afe4dSAndroid Build Coastguard Worker $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 2381*a67afe4dSAndroid Build Coastguard Worker 2382*a67afe4dSAndroid Build Coastguard Worker # Now print the configurations for the tags. 2383*a67afe4dSAndroid Build Coastguard Worker for tagname in $taglist; do 2384*a67afe4dSAndroid Build Coastguard Worker $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2385*a67afe4dSAndroid Build Coastguard Worker done 2386*a67afe4dSAndroid Build Coastguard Worker 2387*a67afe4dSAndroid Build Coastguard Worker exit $? 2388*a67afe4dSAndroid Build Coastguard Worker} 2389*a67afe4dSAndroid Build Coastguard Worker 2390*a67afe4dSAndroid Build Coastguard Worker 2391*a67afe4dSAndroid Build Coastguard Worker# func_features 2392*a67afe4dSAndroid Build Coastguard Worker# ------------- 2393*a67afe4dSAndroid Build Coastguard Worker# Display the features supported by this script. 2394*a67afe4dSAndroid Build Coastguard Workerfunc_features () 2395*a67afe4dSAndroid Build Coastguard Worker{ 2396*a67afe4dSAndroid Build Coastguard Worker echo "host: $host" 2397*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 2398*a67afe4dSAndroid Build Coastguard Worker echo "enable shared libraries" 2399*a67afe4dSAndroid Build Coastguard Worker else 2400*a67afe4dSAndroid Build Coastguard Worker echo "disable shared libraries" 2401*a67afe4dSAndroid Build Coastguard Worker fi 2402*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 2403*a67afe4dSAndroid Build Coastguard Worker echo "enable static libraries" 2404*a67afe4dSAndroid Build Coastguard Worker else 2405*a67afe4dSAndroid Build Coastguard Worker echo "disable static libraries" 2406*a67afe4dSAndroid Build Coastguard Worker fi 2407*a67afe4dSAndroid Build Coastguard Worker 2408*a67afe4dSAndroid Build Coastguard Worker exit $? 2409*a67afe4dSAndroid Build Coastguard Worker} 2410*a67afe4dSAndroid Build Coastguard Worker 2411*a67afe4dSAndroid Build Coastguard Worker 2412*a67afe4dSAndroid Build Coastguard Worker# func_enable_tag TAGNAME 2413*a67afe4dSAndroid Build Coastguard Worker# ----------------------- 2414*a67afe4dSAndroid Build Coastguard Worker# Verify that TAGNAME is valid, and either flag an error and exit, or 2415*a67afe4dSAndroid Build Coastguard Worker# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2416*a67afe4dSAndroid Build Coastguard Worker# variable here. 2417*a67afe4dSAndroid Build Coastguard Workerfunc_enable_tag () 2418*a67afe4dSAndroid Build Coastguard Worker{ 2419*a67afe4dSAndroid Build Coastguard Worker # Global variable: 2420*a67afe4dSAndroid Build Coastguard Worker tagname=$1 2421*a67afe4dSAndroid Build Coastguard Worker 2422*a67afe4dSAndroid Build Coastguard Worker re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 2423*a67afe4dSAndroid Build Coastguard Worker re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 2424*a67afe4dSAndroid Build Coastguard Worker sed_extractcf=/$re_begincf/,/$re_endcf/p 2425*a67afe4dSAndroid Build Coastguard Worker 2426*a67afe4dSAndroid Build Coastguard Worker # Validate tagname. 2427*a67afe4dSAndroid Build Coastguard Worker case $tagname in 2428*a67afe4dSAndroid Build Coastguard Worker *[!-_A-Za-z0-9,/]*) 2429*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "invalid tag name: $tagname" 2430*a67afe4dSAndroid Build Coastguard Worker ;; 2431*a67afe4dSAndroid Build Coastguard Worker esac 2432*a67afe4dSAndroid Build Coastguard Worker 2433*a67afe4dSAndroid Build Coastguard Worker # Don't test for the "default" C tag, as we know it's 2434*a67afe4dSAndroid Build Coastguard Worker # there but not specially marked. 2435*a67afe4dSAndroid Build Coastguard Worker case $tagname in 2436*a67afe4dSAndroid Build Coastguard Worker CC) ;; 2437*a67afe4dSAndroid Build Coastguard Worker *) 2438*a67afe4dSAndroid Build Coastguard Worker if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 2439*a67afe4dSAndroid Build Coastguard Worker taglist="$taglist $tagname" 2440*a67afe4dSAndroid Build Coastguard Worker 2441*a67afe4dSAndroid Build Coastguard Worker # Evaluate the configuration. Be careful to quote the path 2442*a67afe4dSAndroid Build Coastguard Worker # and the sed script, to avoid splitting on whitespace, but 2443*a67afe4dSAndroid Build Coastguard Worker # also don't use non-portable quotes within backquotes within 2444*a67afe4dSAndroid Build Coastguard Worker # quotes we have to do it in 2 steps: 2445*a67afe4dSAndroid Build Coastguard Worker extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 2446*a67afe4dSAndroid Build Coastguard Worker eval "$extractedcf" 2447*a67afe4dSAndroid Build Coastguard Worker else 2448*a67afe4dSAndroid Build Coastguard Worker func_error "ignoring unknown tag $tagname" 2449*a67afe4dSAndroid Build Coastguard Worker fi 2450*a67afe4dSAndroid Build Coastguard Worker ;; 2451*a67afe4dSAndroid Build Coastguard Worker esac 2452*a67afe4dSAndroid Build Coastguard Worker} 2453*a67afe4dSAndroid Build Coastguard Worker 2454*a67afe4dSAndroid Build Coastguard Worker 2455*a67afe4dSAndroid Build Coastguard Worker# func_check_version_match 2456*a67afe4dSAndroid Build Coastguard Worker# ------------------------ 2457*a67afe4dSAndroid Build Coastguard Worker# Ensure that we are using m4 macros, and libtool script from the same 2458*a67afe4dSAndroid Build Coastguard Worker# release of libtool. 2459*a67afe4dSAndroid Build Coastguard Workerfunc_check_version_match () 2460*a67afe4dSAndroid Build Coastguard Worker{ 2461*a67afe4dSAndroid Build Coastguard Worker if test "$package_revision" != "$macro_revision"; then 2462*a67afe4dSAndroid Build Coastguard Worker if test "$VERSION" != "$macro_version"; then 2463*a67afe4dSAndroid Build Coastguard Worker if test -z "$macro_version"; then 2464*a67afe4dSAndroid Build Coastguard Worker cat >&2 <<_LT_EOF 2465*a67afe4dSAndroid Build Coastguard Worker$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2466*a67afe4dSAndroid Build Coastguard Worker$progname: definition of this LT_INIT comes from an older release. 2467*a67afe4dSAndroid Build Coastguard Worker$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2468*a67afe4dSAndroid Build Coastguard Worker$progname: and run autoconf again. 2469*a67afe4dSAndroid Build Coastguard Worker_LT_EOF 2470*a67afe4dSAndroid Build Coastguard Worker else 2471*a67afe4dSAndroid Build Coastguard Worker cat >&2 <<_LT_EOF 2472*a67afe4dSAndroid Build Coastguard Worker$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2473*a67afe4dSAndroid Build Coastguard Worker$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2474*a67afe4dSAndroid Build Coastguard Worker$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2475*a67afe4dSAndroid Build Coastguard Worker$progname: and run autoconf again. 2476*a67afe4dSAndroid Build Coastguard Worker_LT_EOF 2477*a67afe4dSAndroid Build Coastguard Worker fi 2478*a67afe4dSAndroid Build Coastguard Worker else 2479*a67afe4dSAndroid Build Coastguard Worker cat >&2 <<_LT_EOF 2480*a67afe4dSAndroid Build Coastguard Worker$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2481*a67afe4dSAndroid Build Coastguard Worker$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2482*a67afe4dSAndroid Build Coastguard Worker$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2483*a67afe4dSAndroid Build Coastguard Worker$progname: of $PACKAGE $VERSION and run autoconf again. 2484*a67afe4dSAndroid Build Coastguard Worker_LT_EOF 2485*a67afe4dSAndroid Build Coastguard Worker fi 2486*a67afe4dSAndroid Build Coastguard Worker 2487*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_MISMATCH 2488*a67afe4dSAndroid Build Coastguard Worker fi 2489*a67afe4dSAndroid Build Coastguard Worker} 2490*a67afe4dSAndroid Build Coastguard Worker 2491*a67afe4dSAndroid Build Coastguard Worker 2492*a67afe4dSAndroid Build Coastguard Worker# libtool_options_prep [ARG]... 2493*a67afe4dSAndroid Build Coastguard Worker# ----------------------------- 2494*a67afe4dSAndroid Build Coastguard Worker# Preparation for options parsed by libtool. 2495*a67afe4dSAndroid Build Coastguard Workerlibtool_options_prep () 2496*a67afe4dSAndroid Build Coastguard Worker{ 2497*a67afe4dSAndroid Build Coastguard Worker $debug_mode 2498*a67afe4dSAndroid Build Coastguard Worker 2499*a67afe4dSAndroid Build Coastguard Worker # Option defaults: 2500*a67afe4dSAndroid Build Coastguard Worker opt_config=false 2501*a67afe4dSAndroid Build Coastguard Worker opt_dlopen= 2502*a67afe4dSAndroid Build Coastguard Worker opt_dry_run=false 2503*a67afe4dSAndroid Build Coastguard Worker opt_help=false 2504*a67afe4dSAndroid Build Coastguard Worker opt_mode= 2505*a67afe4dSAndroid Build Coastguard Worker opt_preserve_dup_deps=false 2506*a67afe4dSAndroid Build Coastguard Worker opt_quiet=false 2507*a67afe4dSAndroid Build Coastguard Worker 2508*a67afe4dSAndroid Build Coastguard Worker nonopt= 2509*a67afe4dSAndroid Build Coastguard Worker preserve_args= 2510*a67afe4dSAndroid Build Coastguard Worker 2511*a67afe4dSAndroid Build Coastguard Worker _G_rc_lt_options_prep=: 2512*a67afe4dSAndroid Build Coastguard Worker 2513*a67afe4dSAndroid Build Coastguard Worker # Shorthand for --mode=foo, only valid as the first argument 2514*a67afe4dSAndroid Build Coastguard Worker case $1 in 2515*a67afe4dSAndroid Build Coastguard Worker clean|clea|cle|cl) 2516*a67afe4dSAndroid Build Coastguard Worker shift; set dummy --mode clean ${1+"$@"}; shift 2517*a67afe4dSAndroid Build Coastguard Worker ;; 2518*a67afe4dSAndroid Build Coastguard Worker compile|compil|compi|comp|com|co|c) 2519*a67afe4dSAndroid Build Coastguard Worker shift; set dummy --mode compile ${1+"$@"}; shift 2520*a67afe4dSAndroid Build Coastguard Worker ;; 2521*a67afe4dSAndroid Build Coastguard Worker execute|execut|execu|exec|exe|ex|e) 2522*a67afe4dSAndroid Build Coastguard Worker shift; set dummy --mode execute ${1+"$@"}; shift 2523*a67afe4dSAndroid Build Coastguard Worker ;; 2524*a67afe4dSAndroid Build Coastguard Worker finish|finis|fini|fin|fi|f) 2525*a67afe4dSAndroid Build Coastguard Worker shift; set dummy --mode finish ${1+"$@"}; shift 2526*a67afe4dSAndroid Build Coastguard Worker ;; 2527*a67afe4dSAndroid Build Coastguard Worker install|instal|insta|inst|ins|in|i) 2528*a67afe4dSAndroid Build Coastguard Worker shift; set dummy --mode install ${1+"$@"}; shift 2529*a67afe4dSAndroid Build Coastguard Worker ;; 2530*a67afe4dSAndroid Build Coastguard Worker link|lin|li|l) 2531*a67afe4dSAndroid Build Coastguard Worker shift; set dummy --mode link ${1+"$@"}; shift 2532*a67afe4dSAndroid Build Coastguard Worker ;; 2533*a67afe4dSAndroid Build Coastguard Worker uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 2534*a67afe4dSAndroid Build Coastguard Worker shift; set dummy --mode uninstall ${1+"$@"}; shift 2535*a67afe4dSAndroid Build Coastguard Worker ;; 2536*a67afe4dSAndroid Build Coastguard Worker *) 2537*a67afe4dSAndroid Build Coastguard Worker _G_rc_lt_options_prep=false 2538*a67afe4dSAndroid Build Coastguard Worker ;; 2539*a67afe4dSAndroid Build Coastguard Worker esac 2540*a67afe4dSAndroid Build Coastguard Worker 2541*a67afe4dSAndroid Build Coastguard Worker if $_G_rc_lt_options_prep; then 2542*a67afe4dSAndroid Build Coastguard Worker # Pass back the list of options. 2543*a67afe4dSAndroid Build Coastguard Worker func_quote eval ${1+"$@"} 2544*a67afe4dSAndroid Build Coastguard Worker libtool_options_prep_result=$func_quote_result 2545*a67afe4dSAndroid Build Coastguard Worker fi 2546*a67afe4dSAndroid Build Coastguard Worker} 2547*a67afe4dSAndroid Build Coastguard Workerfunc_add_hook func_options_prep libtool_options_prep 2548*a67afe4dSAndroid Build Coastguard Worker 2549*a67afe4dSAndroid Build Coastguard Worker 2550*a67afe4dSAndroid Build Coastguard Worker# libtool_parse_options [ARG]... 2551*a67afe4dSAndroid Build Coastguard Worker# --------------------------------- 2552*a67afe4dSAndroid Build Coastguard Worker# Provide handling for libtool specific options. 2553*a67afe4dSAndroid Build Coastguard Workerlibtool_parse_options () 2554*a67afe4dSAndroid Build Coastguard Worker{ 2555*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2556*a67afe4dSAndroid Build Coastguard Worker 2557*a67afe4dSAndroid Build Coastguard Worker _G_rc_lt_parse_options=false 2558*a67afe4dSAndroid Build Coastguard Worker 2559*a67afe4dSAndroid Build Coastguard Worker # Perform our own loop to consume as many options as possible in 2560*a67afe4dSAndroid Build Coastguard Worker # each iteration. 2561*a67afe4dSAndroid Build Coastguard Worker while test $# -gt 0; do 2562*a67afe4dSAndroid Build Coastguard Worker _G_match_lt_parse_options=: 2563*a67afe4dSAndroid Build Coastguard Worker _G_opt=$1 2564*a67afe4dSAndroid Build Coastguard Worker shift 2565*a67afe4dSAndroid Build Coastguard Worker case $_G_opt in 2566*a67afe4dSAndroid Build Coastguard Worker --dry-run|--dryrun|-n) 2567*a67afe4dSAndroid Build Coastguard Worker opt_dry_run=: 2568*a67afe4dSAndroid Build Coastguard Worker ;; 2569*a67afe4dSAndroid Build Coastguard Worker 2570*a67afe4dSAndroid Build Coastguard Worker --config) func_config ;; 2571*a67afe4dSAndroid Build Coastguard Worker 2572*a67afe4dSAndroid Build Coastguard Worker --dlopen|-dlopen) 2573*a67afe4dSAndroid Build Coastguard Worker opt_dlopen="${opt_dlopen+$opt_dlopen 2574*a67afe4dSAndroid Build Coastguard Worker}$1" 2575*a67afe4dSAndroid Build Coastguard Worker shift 2576*a67afe4dSAndroid Build Coastguard Worker ;; 2577*a67afe4dSAndroid Build Coastguard Worker 2578*a67afe4dSAndroid Build Coastguard Worker --preserve-dup-deps) 2579*a67afe4dSAndroid Build Coastguard Worker opt_preserve_dup_deps=: ;; 2580*a67afe4dSAndroid Build Coastguard Worker 2581*a67afe4dSAndroid Build Coastguard Worker --features) func_features ;; 2582*a67afe4dSAndroid Build Coastguard Worker 2583*a67afe4dSAndroid Build Coastguard Worker --finish) set dummy --mode finish ${1+"$@"}; shift ;; 2584*a67afe4dSAndroid Build Coastguard Worker 2585*a67afe4dSAndroid Build Coastguard Worker --help) opt_help=: ;; 2586*a67afe4dSAndroid Build Coastguard Worker 2587*a67afe4dSAndroid Build Coastguard Worker --help-all) opt_help=': help-all' ;; 2588*a67afe4dSAndroid Build Coastguard Worker 2589*a67afe4dSAndroid Build Coastguard Worker --mode) test $# = 0 && func_missing_arg $_G_opt && break 2590*a67afe4dSAndroid Build Coastguard Worker opt_mode=$1 2591*a67afe4dSAndroid Build Coastguard Worker case $1 in 2592*a67afe4dSAndroid Build Coastguard Worker # Valid mode arguments: 2593*a67afe4dSAndroid Build Coastguard Worker clean|compile|execute|finish|install|link|relink|uninstall) ;; 2594*a67afe4dSAndroid Build Coastguard Worker 2595*a67afe4dSAndroid Build Coastguard Worker # Catch anything else as an error 2596*a67afe4dSAndroid Build Coastguard Worker *) func_error "invalid argument for $_G_opt" 2597*a67afe4dSAndroid Build Coastguard Worker exit_cmd=exit 2598*a67afe4dSAndroid Build Coastguard Worker break 2599*a67afe4dSAndroid Build Coastguard Worker ;; 2600*a67afe4dSAndroid Build Coastguard Worker esac 2601*a67afe4dSAndroid Build Coastguard Worker shift 2602*a67afe4dSAndroid Build Coastguard Worker ;; 2603*a67afe4dSAndroid Build Coastguard Worker 2604*a67afe4dSAndroid Build Coastguard Worker --no-silent|--no-quiet) 2605*a67afe4dSAndroid Build Coastguard Worker opt_quiet=false 2606*a67afe4dSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt" 2607*a67afe4dSAndroid Build Coastguard Worker ;; 2608*a67afe4dSAndroid Build Coastguard Worker 2609*a67afe4dSAndroid Build Coastguard Worker --no-warnings|--no-warning|--no-warn) 2610*a67afe4dSAndroid Build Coastguard Worker opt_warning=false 2611*a67afe4dSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt" 2612*a67afe4dSAndroid Build Coastguard Worker ;; 2613*a67afe4dSAndroid Build Coastguard Worker 2614*a67afe4dSAndroid Build Coastguard Worker --no-verbose) 2615*a67afe4dSAndroid Build Coastguard Worker opt_verbose=false 2616*a67afe4dSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt" 2617*a67afe4dSAndroid Build Coastguard Worker ;; 2618*a67afe4dSAndroid Build Coastguard Worker 2619*a67afe4dSAndroid Build Coastguard Worker --silent|--quiet) 2620*a67afe4dSAndroid Build Coastguard Worker opt_quiet=: 2621*a67afe4dSAndroid Build Coastguard Worker opt_verbose=false 2622*a67afe4dSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt" 2623*a67afe4dSAndroid Build Coastguard Worker ;; 2624*a67afe4dSAndroid Build Coastguard Worker 2625*a67afe4dSAndroid Build Coastguard Worker --tag) test $# = 0 && func_missing_arg $_G_opt && break 2626*a67afe4dSAndroid Build Coastguard Worker opt_tag=$1 2627*a67afe4dSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt $1" 2628*a67afe4dSAndroid Build Coastguard Worker func_enable_tag "$1" 2629*a67afe4dSAndroid Build Coastguard Worker shift 2630*a67afe4dSAndroid Build Coastguard Worker ;; 2631*a67afe4dSAndroid Build Coastguard Worker 2632*a67afe4dSAndroid Build Coastguard Worker --verbose|-v) opt_quiet=false 2633*a67afe4dSAndroid Build Coastguard Worker opt_verbose=: 2634*a67afe4dSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt" 2635*a67afe4dSAndroid Build Coastguard Worker ;; 2636*a67afe4dSAndroid Build Coastguard Worker 2637*a67afe4dSAndroid Build Coastguard Worker # An option not handled by this hook function: 2638*a67afe4dSAndroid Build Coastguard Worker *) set dummy "$_G_opt" ${1+"$@"} ; shift 2639*a67afe4dSAndroid Build Coastguard Worker _G_match_lt_parse_options=false 2640*a67afe4dSAndroid Build Coastguard Worker break 2641*a67afe4dSAndroid Build Coastguard Worker ;; 2642*a67afe4dSAndroid Build Coastguard Worker esac 2643*a67afe4dSAndroid Build Coastguard Worker $_G_match_lt_parse_options && _G_rc_lt_parse_options=: 2644*a67afe4dSAndroid Build Coastguard Worker done 2645*a67afe4dSAndroid Build Coastguard Worker 2646*a67afe4dSAndroid Build Coastguard Worker if $_G_rc_lt_parse_options; then 2647*a67afe4dSAndroid Build Coastguard Worker # save modified positional parameters for caller 2648*a67afe4dSAndroid Build Coastguard Worker func_quote eval ${1+"$@"} 2649*a67afe4dSAndroid Build Coastguard Worker libtool_parse_options_result=$func_quote_result 2650*a67afe4dSAndroid Build Coastguard Worker fi 2651*a67afe4dSAndroid Build Coastguard Worker} 2652*a67afe4dSAndroid Build Coastguard Workerfunc_add_hook func_parse_options libtool_parse_options 2653*a67afe4dSAndroid Build Coastguard Worker 2654*a67afe4dSAndroid Build Coastguard Worker 2655*a67afe4dSAndroid Build Coastguard Worker 2656*a67afe4dSAndroid Build Coastguard Worker# libtool_validate_options [ARG]... 2657*a67afe4dSAndroid Build Coastguard Worker# --------------------------------- 2658*a67afe4dSAndroid Build Coastguard Worker# Perform any sanity checks on option settings and/or unconsumed 2659*a67afe4dSAndroid Build Coastguard Worker# arguments. 2660*a67afe4dSAndroid Build Coastguard Workerlibtool_validate_options () 2661*a67afe4dSAndroid Build Coastguard Worker{ 2662*a67afe4dSAndroid Build Coastguard Worker # save first non-option argument 2663*a67afe4dSAndroid Build Coastguard Worker if test 0 -lt $#; then 2664*a67afe4dSAndroid Build Coastguard Worker nonopt=$1 2665*a67afe4dSAndroid Build Coastguard Worker shift 2666*a67afe4dSAndroid Build Coastguard Worker fi 2667*a67afe4dSAndroid Build Coastguard Worker 2668*a67afe4dSAndroid Build Coastguard Worker # preserve --debug 2669*a67afe4dSAndroid Build Coastguard Worker test : = "$debug_cmd" || func_append preserve_args " --debug" 2670*a67afe4dSAndroid Build Coastguard Worker 2671*a67afe4dSAndroid Build Coastguard Worker case $host in 2672*a67afe4dSAndroid Build Coastguard Worker # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 2673*a67afe4dSAndroid Build Coastguard Worker # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 2674*a67afe4dSAndroid Build Coastguard Worker *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 2675*a67afe4dSAndroid Build Coastguard Worker # don't eliminate duplications in $postdeps and $predeps 2676*a67afe4dSAndroid Build Coastguard Worker opt_duplicate_compiler_generated_deps=: 2677*a67afe4dSAndroid Build Coastguard Worker ;; 2678*a67afe4dSAndroid Build Coastguard Worker *) 2679*a67afe4dSAndroid Build Coastguard Worker opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 2680*a67afe4dSAndroid Build Coastguard Worker ;; 2681*a67afe4dSAndroid Build Coastguard Worker esac 2682*a67afe4dSAndroid Build Coastguard Worker 2683*a67afe4dSAndroid Build Coastguard Worker $opt_help || { 2684*a67afe4dSAndroid Build Coastguard Worker # Sanity checks first: 2685*a67afe4dSAndroid Build Coastguard Worker func_check_version_match 2686*a67afe4dSAndroid Build Coastguard Worker 2687*a67afe4dSAndroid Build Coastguard Worker test yes != "$build_libtool_libs" \ 2688*a67afe4dSAndroid Build Coastguard Worker && test yes != "$build_old_libs" \ 2689*a67afe4dSAndroid Build Coastguard Worker && func_fatal_configuration "not configured to build any kind of library" 2690*a67afe4dSAndroid Build Coastguard Worker 2691*a67afe4dSAndroid Build Coastguard Worker # Darwin sucks 2692*a67afe4dSAndroid Build Coastguard Worker eval std_shrext=\"$shrext_cmds\" 2693*a67afe4dSAndroid Build Coastguard Worker 2694*a67afe4dSAndroid Build Coastguard Worker # Only execute mode is allowed to have -dlopen flags. 2695*a67afe4dSAndroid Build Coastguard Worker if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 2696*a67afe4dSAndroid Build Coastguard Worker func_error "unrecognized option '-dlopen'" 2697*a67afe4dSAndroid Build Coastguard Worker $ECHO "$help" 1>&2 2698*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_FAILURE 2699*a67afe4dSAndroid Build Coastguard Worker fi 2700*a67afe4dSAndroid Build Coastguard Worker 2701*a67afe4dSAndroid Build Coastguard Worker # Change the help message to a mode-specific one. 2702*a67afe4dSAndroid Build Coastguard Worker generic_help=$help 2703*a67afe4dSAndroid Build Coastguard Worker help="Try '$progname --help --mode=$opt_mode' for more information." 2704*a67afe4dSAndroid Build Coastguard Worker } 2705*a67afe4dSAndroid Build Coastguard Worker 2706*a67afe4dSAndroid Build Coastguard Worker # Pass back the unparsed argument list 2707*a67afe4dSAndroid Build Coastguard Worker func_quote eval ${1+"$@"} 2708*a67afe4dSAndroid Build Coastguard Worker libtool_validate_options_result=$func_quote_result 2709*a67afe4dSAndroid Build Coastguard Worker} 2710*a67afe4dSAndroid Build Coastguard Workerfunc_add_hook func_validate_options libtool_validate_options 2711*a67afe4dSAndroid Build Coastguard Worker 2712*a67afe4dSAndroid Build Coastguard Worker 2713*a67afe4dSAndroid Build Coastguard Worker# Process options as early as possible so that --help and --version 2714*a67afe4dSAndroid Build Coastguard Worker# can return quickly. 2715*a67afe4dSAndroid Build Coastguard Workerfunc_options ${1+"$@"} 2716*a67afe4dSAndroid Build Coastguard Workereval set dummy "$func_options_result"; shift 2717*a67afe4dSAndroid Build Coastguard Worker 2718*a67afe4dSAndroid Build Coastguard Worker 2719*a67afe4dSAndroid Build Coastguard Worker 2720*a67afe4dSAndroid Build Coastguard Worker## ----------- ## 2721*a67afe4dSAndroid Build Coastguard Worker## Main. ## 2722*a67afe4dSAndroid Build Coastguard Worker## ----------- ## 2723*a67afe4dSAndroid Build Coastguard Worker 2724*a67afe4dSAndroid Build Coastguard Workermagic='%%%MAGIC variable%%%' 2725*a67afe4dSAndroid Build Coastguard Workermagic_exe='%%%MAGIC EXE variable%%%' 2726*a67afe4dSAndroid Build Coastguard Worker 2727*a67afe4dSAndroid Build Coastguard Worker# Global variables. 2728*a67afe4dSAndroid Build Coastguard Workerextracted_archives= 2729*a67afe4dSAndroid Build Coastguard Workerextracted_serial=0 2730*a67afe4dSAndroid Build Coastguard Worker 2731*a67afe4dSAndroid Build Coastguard Worker# If this variable is set in any of the actions, the command in it 2732*a67afe4dSAndroid Build Coastguard Worker# will be execed at the end. This prevents here-documents from being 2733*a67afe4dSAndroid Build Coastguard Worker# left over by shells. 2734*a67afe4dSAndroid Build Coastguard Workerexec_cmd= 2735*a67afe4dSAndroid Build Coastguard Worker 2736*a67afe4dSAndroid Build Coastguard Worker 2737*a67afe4dSAndroid Build Coastguard Worker# A function that is used when there is no print builtin or printf. 2738*a67afe4dSAndroid Build Coastguard Workerfunc_fallback_echo () 2739*a67afe4dSAndroid Build Coastguard Worker{ 2740*a67afe4dSAndroid Build Coastguard Worker eval 'cat <<_LTECHO_EOF 2741*a67afe4dSAndroid Build Coastguard Worker$1 2742*a67afe4dSAndroid Build Coastguard Worker_LTECHO_EOF' 2743*a67afe4dSAndroid Build Coastguard Worker} 2744*a67afe4dSAndroid Build Coastguard Worker 2745*a67afe4dSAndroid Build Coastguard Worker# func_generated_by_libtool 2746*a67afe4dSAndroid Build Coastguard Worker# True iff stdin has been generated by Libtool. This function is only 2747*a67afe4dSAndroid Build Coastguard Worker# a basic sanity check; it will hardly flush out determined imposters. 2748*a67afe4dSAndroid Build Coastguard Workerfunc_generated_by_libtool_p () 2749*a67afe4dSAndroid Build Coastguard Worker{ 2750*a67afe4dSAndroid Build Coastguard Worker $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 2751*a67afe4dSAndroid Build Coastguard Worker} 2752*a67afe4dSAndroid Build Coastguard Worker 2753*a67afe4dSAndroid Build Coastguard Worker# func_lalib_p file 2754*a67afe4dSAndroid Build Coastguard Worker# True iff FILE is a libtool '.la' library or '.lo' object file. 2755*a67afe4dSAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 2756*a67afe4dSAndroid Build Coastguard Worker# determined imposters. 2757*a67afe4dSAndroid Build Coastguard Workerfunc_lalib_p () 2758*a67afe4dSAndroid Build Coastguard Worker{ 2759*a67afe4dSAndroid Build Coastguard Worker test -f "$1" && 2760*a67afe4dSAndroid Build Coastguard Worker $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2761*a67afe4dSAndroid Build Coastguard Worker} 2762*a67afe4dSAndroid Build Coastguard Worker 2763*a67afe4dSAndroid Build Coastguard Worker# func_lalib_unsafe_p file 2764*a67afe4dSAndroid Build Coastguard Worker# True iff FILE is a libtool '.la' library or '.lo' object file. 2765*a67afe4dSAndroid Build Coastguard Worker# This function implements the same check as func_lalib_p without 2766*a67afe4dSAndroid Build Coastguard Worker# resorting to external programs. To this end, it redirects stdin and 2767*a67afe4dSAndroid Build Coastguard Worker# closes it afterwards, without saving the original file descriptor. 2768*a67afe4dSAndroid Build Coastguard Worker# As a safety measure, use it only where a negative result would be 2769*a67afe4dSAndroid Build Coastguard Worker# fatal anyway. Works if 'file' does not exist. 2770*a67afe4dSAndroid Build Coastguard Workerfunc_lalib_unsafe_p () 2771*a67afe4dSAndroid Build Coastguard Worker{ 2772*a67afe4dSAndroid Build Coastguard Worker lalib_p=no 2773*a67afe4dSAndroid Build Coastguard Worker if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2774*a67afe4dSAndroid Build Coastguard Worker for lalib_p_l in 1 2 3 4 2775*a67afe4dSAndroid Build Coastguard Worker do 2776*a67afe4dSAndroid Build Coastguard Worker read lalib_p_line 2777*a67afe4dSAndroid Build Coastguard Worker case $lalib_p_line in 2778*a67afe4dSAndroid Build Coastguard Worker \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2779*a67afe4dSAndroid Build Coastguard Worker esac 2780*a67afe4dSAndroid Build Coastguard Worker done 2781*a67afe4dSAndroid Build Coastguard Worker exec 0<&5 5<&- 2782*a67afe4dSAndroid Build Coastguard Worker fi 2783*a67afe4dSAndroid Build Coastguard Worker test yes = "$lalib_p" 2784*a67afe4dSAndroid Build Coastguard Worker} 2785*a67afe4dSAndroid Build Coastguard Worker 2786*a67afe4dSAndroid Build Coastguard Worker# func_ltwrapper_script_p file 2787*a67afe4dSAndroid Build Coastguard Worker# True iff FILE is a libtool wrapper script 2788*a67afe4dSAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 2789*a67afe4dSAndroid Build Coastguard Worker# determined imposters. 2790*a67afe4dSAndroid Build Coastguard Workerfunc_ltwrapper_script_p () 2791*a67afe4dSAndroid Build Coastguard Worker{ 2792*a67afe4dSAndroid Build Coastguard Worker test -f "$1" && 2793*a67afe4dSAndroid Build Coastguard Worker $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2794*a67afe4dSAndroid Build Coastguard Worker} 2795*a67afe4dSAndroid Build Coastguard Worker 2796*a67afe4dSAndroid Build Coastguard Worker# func_ltwrapper_executable_p file 2797*a67afe4dSAndroid Build Coastguard Worker# True iff FILE is a libtool wrapper executable 2798*a67afe4dSAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 2799*a67afe4dSAndroid Build Coastguard Worker# determined imposters. 2800*a67afe4dSAndroid Build Coastguard Workerfunc_ltwrapper_executable_p () 2801*a67afe4dSAndroid Build Coastguard Worker{ 2802*a67afe4dSAndroid Build Coastguard Worker func_ltwrapper_exec_suffix= 2803*a67afe4dSAndroid Build Coastguard Worker case $1 in 2804*a67afe4dSAndroid Build Coastguard Worker *.exe) ;; 2805*a67afe4dSAndroid Build Coastguard Worker *) func_ltwrapper_exec_suffix=.exe ;; 2806*a67afe4dSAndroid Build Coastguard Worker esac 2807*a67afe4dSAndroid Build Coastguard Worker $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2808*a67afe4dSAndroid Build Coastguard Worker} 2809*a67afe4dSAndroid Build Coastguard Worker 2810*a67afe4dSAndroid Build Coastguard Worker# func_ltwrapper_scriptname file 2811*a67afe4dSAndroid Build Coastguard Worker# Assumes file is an ltwrapper_executable 2812*a67afe4dSAndroid Build Coastguard Worker# uses $file to determine the appropriate filename for a 2813*a67afe4dSAndroid Build Coastguard Worker# temporary ltwrapper_script. 2814*a67afe4dSAndroid Build Coastguard Workerfunc_ltwrapper_scriptname () 2815*a67afe4dSAndroid Build Coastguard Worker{ 2816*a67afe4dSAndroid Build Coastguard Worker func_dirname_and_basename "$1" "" "." 2817*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '.exe' "$func_basename_result" 2818*a67afe4dSAndroid Build Coastguard Worker func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2819*a67afe4dSAndroid Build Coastguard Worker} 2820*a67afe4dSAndroid Build Coastguard Worker 2821*a67afe4dSAndroid Build Coastguard Worker# func_ltwrapper_p file 2822*a67afe4dSAndroid Build Coastguard Worker# True iff FILE is a libtool wrapper script or wrapper executable 2823*a67afe4dSAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 2824*a67afe4dSAndroid Build Coastguard Worker# determined imposters. 2825*a67afe4dSAndroid Build Coastguard Workerfunc_ltwrapper_p () 2826*a67afe4dSAndroid Build Coastguard Worker{ 2827*a67afe4dSAndroid Build Coastguard Worker func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2828*a67afe4dSAndroid Build Coastguard Worker} 2829*a67afe4dSAndroid Build Coastguard Worker 2830*a67afe4dSAndroid Build Coastguard Worker 2831*a67afe4dSAndroid Build Coastguard Worker# func_execute_cmds commands fail_cmd 2832*a67afe4dSAndroid Build Coastguard Worker# Execute tilde-delimited COMMANDS. 2833*a67afe4dSAndroid Build Coastguard Worker# If FAIL_CMD is given, eval that upon failure. 2834*a67afe4dSAndroid Build Coastguard Worker# FAIL_CMD may read-access the current command in variable CMD! 2835*a67afe4dSAndroid Build Coastguard Workerfunc_execute_cmds () 2836*a67afe4dSAndroid Build Coastguard Worker{ 2837*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2838*a67afe4dSAndroid Build Coastguard Worker 2839*a67afe4dSAndroid Build Coastguard Worker save_ifs=$IFS; IFS='~' 2840*a67afe4dSAndroid Build Coastguard Worker for cmd in $1; do 2841*a67afe4dSAndroid Build Coastguard Worker IFS=$sp$nl 2842*a67afe4dSAndroid Build Coastguard Worker eval cmd=\"$cmd\" 2843*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 2844*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$cmd" "${2-:}" 2845*a67afe4dSAndroid Build Coastguard Worker done 2846*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 2847*a67afe4dSAndroid Build Coastguard Worker} 2848*a67afe4dSAndroid Build Coastguard Worker 2849*a67afe4dSAndroid Build Coastguard Worker 2850*a67afe4dSAndroid Build Coastguard Worker# func_source file 2851*a67afe4dSAndroid Build Coastguard Worker# Source FILE, adding directory component if necessary. 2852*a67afe4dSAndroid Build Coastguard Worker# Note that it is not necessary on cygwin/mingw to append a dot to 2853*a67afe4dSAndroid Build Coastguard Worker# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2854*a67afe4dSAndroid Build Coastguard Worker# behavior happens only for exec(3), not for open(2)! Also, sourcing 2855*a67afe4dSAndroid Build Coastguard Worker# 'FILE.' does not work on cygwin managed mounts. 2856*a67afe4dSAndroid Build Coastguard Workerfunc_source () 2857*a67afe4dSAndroid Build Coastguard Worker{ 2858*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2859*a67afe4dSAndroid Build Coastguard Worker 2860*a67afe4dSAndroid Build Coastguard Worker case $1 in 2861*a67afe4dSAndroid Build Coastguard Worker */* | *\\*) . "$1" ;; 2862*a67afe4dSAndroid Build Coastguard Worker *) . "./$1" ;; 2863*a67afe4dSAndroid Build Coastguard Worker esac 2864*a67afe4dSAndroid Build Coastguard Worker} 2865*a67afe4dSAndroid Build Coastguard Worker 2866*a67afe4dSAndroid Build Coastguard Worker 2867*a67afe4dSAndroid Build Coastguard Worker# func_resolve_sysroot PATH 2868*a67afe4dSAndroid Build Coastguard Worker# Replace a leading = in PATH with a sysroot. Store the result into 2869*a67afe4dSAndroid Build Coastguard Worker# func_resolve_sysroot_result 2870*a67afe4dSAndroid Build Coastguard Workerfunc_resolve_sysroot () 2871*a67afe4dSAndroid Build Coastguard Worker{ 2872*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot_result=$1 2873*a67afe4dSAndroid Build Coastguard Worker case $func_resolve_sysroot_result in 2874*a67afe4dSAndroid Build Coastguard Worker =*) 2875*a67afe4dSAndroid Build Coastguard Worker func_stripname '=' '' "$func_resolve_sysroot_result" 2876*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2877*a67afe4dSAndroid Build Coastguard Worker ;; 2878*a67afe4dSAndroid Build Coastguard Worker esac 2879*a67afe4dSAndroid Build Coastguard Worker} 2880*a67afe4dSAndroid Build Coastguard Worker 2881*a67afe4dSAndroid Build Coastguard Worker# func_replace_sysroot PATH 2882*a67afe4dSAndroid Build Coastguard Worker# If PATH begins with the sysroot, replace it with = and 2883*a67afe4dSAndroid Build Coastguard Worker# store the result into func_replace_sysroot_result. 2884*a67afe4dSAndroid Build Coastguard Workerfunc_replace_sysroot () 2885*a67afe4dSAndroid Build Coastguard Worker{ 2886*a67afe4dSAndroid Build Coastguard Worker case $lt_sysroot:$1 in 2887*a67afe4dSAndroid Build Coastguard Worker ?*:"$lt_sysroot"*) 2888*a67afe4dSAndroid Build Coastguard Worker func_stripname "$lt_sysroot" '' "$1" 2889*a67afe4dSAndroid Build Coastguard Worker func_replace_sysroot_result='='$func_stripname_result 2890*a67afe4dSAndroid Build Coastguard Worker ;; 2891*a67afe4dSAndroid Build Coastguard Worker *) 2892*a67afe4dSAndroid Build Coastguard Worker # Including no sysroot. 2893*a67afe4dSAndroid Build Coastguard Worker func_replace_sysroot_result=$1 2894*a67afe4dSAndroid Build Coastguard Worker ;; 2895*a67afe4dSAndroid Build Coastguard Worker esac 2896*a67afe4dSAndroid Build Coastguard Worker} 2897*a67afe4dSAndroid Build Coastguard Worker 2898*a67afe4dSAndroid Build Coastguard Worker# func_infer_tag arg 2899*a67afe4dSAndroid Build Coastguard Worker# Infer tagged configuration to use if any are available and 2900*a67afe4dSAndroid Build Coastguard Worker# if one wasn't chosen via the "--tag" command line option. 2901*a67afe4dSAndroid Build Coastguard Worker# Only attempt this if the compiler in the base compile 2902*a67afe4dSAndroid Build Coastguard Worker# command doesn't match the default compiler. 2903*a67afe4dSAndroid Build Coastguard Worker# arg is usually of the form 'gcc ...' 2904*a67afe4dSAndroid Build Coastguard Workerfunc_infer_tag () 2905*a67afe4dSAndroid Build Coastguard Worker{ 2906*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 2907*a67afe4dSAndroid Build Coastguard Worker 2908*a67afe4dSAndroid Build Coastguard Worker if test -n "$available_tags" && test -z "$tagname"; then 2909*a67afe4dSAndroid Build Coastguard Worker CC_quoted= 2910*a67afe4dSAndroid Build Coastguard Worker for arg in $CC; do 2911*a67afe4dSAndroid Build Coastguard Worker func_append_quoted CC_quoted "$arg" 2912*a67afe4dSAndroid Build Coastguard Worker done 2913*a67afe4dSAndroid Build Coastguard Worker CC_expanded=`func_echo_all $CC` 2914*a67afe4dSAndroid Build Coastguard Worker CC_quoted_expanded=`func_echo_all $CC_quoted` 2915*a67afe4dSAndroid Build Coastguard Worker case $@ in 2916*a67afe4dSAndroid Build Coastguard Worker # Blanks in the command may have been stripped by the calling shell, 2917*a67afe4dSAndroid Build Coastguard Worker # but not from the CC environment variable when configure was run. 2918*a67afe4dSAndroid Build Coastguard Worker " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2919*a67afe4dSAndroid Build Coastguard Worker " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2920*a67afe4dSAndroid Build Coastguard Worker # Blanks at the start of $base_compile will cause this to fail 2921*a67afe4dSAndroid Build Coastguard Worker # if we don't check for them as well. 2922*a67afe4dSAndroid Build Coastguard Worker *) 2923*a67afe4dSAndroid Build Coastguard Worker for z in $available_tags; do 2924*a67afe4dSAndroid Build Coastguard Worker if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2925*a67afe4dSAndroid Build Coastguard Worker # Evaluate the configuration. 2926*a67afe4dSAndroid Build Coastguard Worker eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2927*a67afe4dSAndroid Build Coastguard Worker CC_quoted= 2928*a67afe4dSAndroid Build Coastguard Worker for arg in $CC; do 2929*a67afe4dSAndroid Build Coastguard Worker # Double-quote args containing other shell metacharacters. 2930*a67afe4dSAndroid Build Coastguard Worker func_append_quoted CC_quoted "$arg" 2931*a67afe4dSAndroid Build Coastguard Worker done 2932*a67afe4dSAndroid Build Coastguard Worker CC_expanded=`func_echo_all $CC` 2933*a67afe4dSAndroid Build Coastguard Worker CC_quoted_expanded=`func_echo_all $CC_quoted` 2934*a67afe4dSAndroid Build Coastguard Worker case "$@ " in 2935*a67afe4dSAndroid Build Coastguard Worker " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2936*a67afe4dSAndroid Build Coastguard Worker " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2937*a67afe4dSAndroid Build Coastguard Worker # The compiler in the base compile command matches 2938*a67afe4dSAndroid Build Coastguard Worker # the one in the tagged configuration. 2939*a67afe4dSAndroid Build Coastguard Worker # Assume this is the tagged configuration we want. 2940*a67afe4dSAndroid Build Coastguard Worker tagname=$z 2941*a67afe4dSAndroid Build Coastguard Worker break 2942*a67afe4dSAndroid Build Coastguard Worker ;; 2943*a67afe4dSAndroid Build Coastguard Worker esac 2944*a67afe4dSAndroid Build Coastguard Worker fi 2945*a67afe4dSAndroid Build Coastguard Worker done 2946*a67afe4dSAndroid Build Coastguard Worker # If $tagname still isn't set, then no tagged configuration 2947*a67afe4dSAndroid Build Coastguard Worker # was found and let the user know that the "--tag" command 2948*a67afe4dSAndroid Build Coastguard Worker # line option must be used. 2949*a67afe4dSAndroid Build Coastguard Worker if test -z "$tagname"; then 2950*a67afe4dSAndroid Build Coastguard Worker func_echo "unable to infer tagged configuration" 2951*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "specify a tag with '--tag'" 2952*a67afe4dSAndroid Build Coastguard Worker# else 2953*a67afe4dSAndroid Build Coastguard Worker# func_verbose "using $tagname tagged configuration" 2954*a67afe4dSAndroid Build Coastguard Worker fi 2955*a67afe4dSAndroid Build Coastguard Worker ;; 2956*a67afe4dSAndroid Build Coastguard Worker esac 2957*a67afe4dSAndroid Build Coastguard Worker fi 2958*a67afe4dSAndroid Build Coastguard Worker} 2959*a67afe4dSAndroid Build Coastguard Worker 2960*a67afe4dSAndroid Build Coastguard Worker 2961*a67afe4dSAndroid Build Coastguard Worker 2962*a67afe4dSAndroid Build Coastguard Worker# func_write_libtool_object output_name pic_name nonpic_name 2963*a67afe4dSAndroid Build Coastguard Worker# Create a libtool object file (analogous to a ".la" file), 2964*a67afe4dSAndroid Build Coastguard Worker# but don't create it if we're doing a dry run. 2965*a67afe4dSAndroid Build Coastguard Workerfunc_write_libtool_object () 2966*a67afe4dSAndroid Build Coastguard Worker{ 2967*a67afe4dSAndroid Build Coastguard Worker write_libobj=$1 2968*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 2969*a67afe4dSAndroid Build Coastguard Worker write_lobj=\'$2\' 2970*a67afe4dSAndroid Build Coastguard Worker else 2971*a67afe4dSAndroid Build Coastguard Worker write_lobj=none 2972*a67afe4dSAndroid Build Coastguard Worker fi 2973*a67afe4dSAndroid Build Coastguard Worker 2974*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 2975*a67afe4dSAndroid Build Coastguard Worker write_oldobj=\'$3\' 2976*a67afe4dSAndroid Build Coastguard Worker else 2977*a67afe4dSAndroid Build Coastguard Worker write_oldobj=none 2978*a67afe4dSAndroid Build Coastguard Worker fi 2979*a67afe4dSAndroid Build Coastguard Worker 2980*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 2981*a67afe4dSAndroid Build Coastguard Worker cat >${write_libobj}T <<EOF 2982*a67afe4dSAndroid Build Coastguard Worker# $write_libobj - a libtool object file 2983*a67afe4dSAndroid Build Coastguard Worker# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2984*a67afe4dSAndroid Build Coastguard Worker# 2985*a67afe4dSAndroid Build Coastguard Worker# Please DO NOT delete this file! 2986*a67afe4dSAndroid Build Coastguard Worker# It is necessary for linking the library. 2987*a67afe4dSAndroid Build Coastguard Worker 2988*a67afe4dSAndroid Build Coastguard Worker# Name of the PIC object. 2989*a67afe4dSAndroid Build Coastguard Workerpic_object=$write_lobj 2990*a67afe4dSAndroid Build Coastguard Worker 2991*a67afe4dSAndroid Build Coastguard Worker# Name of the non-PIC object 2992*a67afe4dSAndroid Build Coastguard Workernon_pic_object=$write_oldobj 2993*a67afe4dSAndroid Build Coastguard Worker 2994*a67afe4dSAndroid Build Coastguard WorkerEOF 2995*a67afe4dSAndroid Build Coastguard Worker $MV "${write_libobj}T" "$write_libobj" 2996*a67afe4dSAndroid Build Coastguard Worker } 2997*a67afe4dSAndroid Build Coastguard Worker} 2998*a67afe4dSAndroid Build Coastguard Worker 2999*a67afe4dSAndroid Build Coastguard Worker 3000*a67afe4dSAndroid Build Coastguard Worker################################################## 3001*a67afe4dSAndroid Build Coastguard Worker# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 3002*a67afe4dSAndroid Build Coastguard Worker################################################## 3003*a67afe4dSAndroid Build Coastguard Worker 3004*a67afe4dSAndroid Build Coastguard Worker# func_convert_core_file_wine_to_w32 ARG 3005*a67afe4dSAndroid Build Coastguard Worker# Helper function used by file name conversion functions when $build is *nix, 3006*a67afe4dSAndroid Build Coastguard Worker# and $host is mingw, cygwin, or some other w32 environment. Relies on a 3007*a67afe4dSAndroid Build Coastguard Worker# correctly configured wine environment available, with the winepath program 3008*a67afe4dSAndroid Build Coastguard Worker# in $build's $PATH. 3009*a67afe4dSAndroid Build Coastguard Worker# 3010*a67afe4dSAndroid Build Coastguard Worker# ARG is the $build file name to be converted to w32 format. 3011*a67afe4dSAndroid Build Coastguard Worker# Result is available in $func_convert_core_file_wine_to_w32_result, and will 3012*a67afe4dSAndroid Build Coastguard Worker# be empty on error (or when ARG is empty) 3013*a67afe4dSAndroid Build Coastguard Workerfunc_convert_core_file_wine_to_w32 () 3014*a67afe4dSAndroid Build Coastguard Worker{ 3015*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3016*a67afe4dSAndroid Build Coastguard Worker 3017*a67afe4dSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_result=$1 3018*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3019*a67afe4dSAndroid Build Coastguard Worker # Unfortunately, winepath does not exit with a non-zero error code, so we 3020*a67afe4dSAndroid Build Coastguard Worker # are forced to check the contents of stdout. On the other hand, if the 3021*a67afe4dSAndroid Build Coastguard Worker # command is not found, the shell will set an exit code of 127 and print 3022*a67afe4dSAndroid Build Coastguard Worker # *an error message* to stdout. So we must check for both error code of 3023*a67afe4dSAndroid Build Coastguard Worker # zero AND non-empty stdout, which explains the odd construction: 3024*a67afe4dSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 3025*a67afe4dSAndroid Build Coastguard Worker if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 3026*a67afe4dSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 3027*a67afe4dSAndroid Build Coastguard Worker $SED -e "$sed_naive_backslashify"` 3028*a67afe4dSAndroid Build Coastguard Worker else 3029*a67afe4dSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_result= 3030*a67afe4dSAndroid Build Coastguard Worker fi 3031*a67afe4dSAndroid Build Coastguard Worker fi 3032*a67afe4dSAndroid Build Coastguard Worker} 3033*a67afe4dSAndroid Build Coastguard Worker# end: func_convert_core_file_wine_to_w32 3034*a67afe4dSAndroid Build Coastguard Worker 3035*a67afe4dSAndroid Build Coastguard Worker 3036*a67afe4dSAndroid Build Coastguard Worker# func_convert_core_path_wine_to_w32 ARG 3037*a67afe4dSAndroid Build Coastguard Worker# Helper function used by path conversion functions when $build is *nix, and 3038*a67afe4dSAndroid Build Coastguard Worker# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 3039*a67afe4dSAndroid Build Coastguard Worker# configured wine environment available, with the winepath program in $build's 3040*a67afe4dSAndroid Build Coastguard Worker# $PATH. Assumes ARG has no leading or trailing path separator characters. 3041*a67afe4dSAndroid Build Coastguard Worker# 3042*a67afe4dSAndroid Build Coastguard Worker# ARG is path to be converted from $build format to win32. 3043*a67afe4dSAndroid Build Coastguard Worker# Result is available in $func_convert_core_path_wine_to_w32_result. 3044*a67afe4dSAndroid Build Coastguard Worker# Unconvertible file (directory) names in ARG are skipped; if no directory names 3045*a67afe4dSAndroid Build Coastguard Worker# are convertible, then the result may be empty. 3046*a67afe4dSAndroid Build Coastguard Workerfunc_convert_core_path_wine_to_w32 () 3047*a67afe4dSAndroid Build Coastguard Worker{ 3048*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3049*a67afe4dSAndroid Build Coastguard Worker 3050*a67afe4dSAndroid Build Coastguard Worker # unfortunately, winepath doesn't convert paths, only file names 3051*a67afe4dSAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32_result= 3052*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3053*a67afe4dSAndroid Build Coastguard Worker oldIFS=$IFS 3054*a67afe4dSAndroid Build Coastguard Worker IFS=: 3055*a67afe4dSAndroid Build Coastguard Worker for func_convert_core_path_wine_to_w32_f in $1; do 3056*a67afe4dSAndroid Build Coastguard Worker IFS=$oldIFS 3057*a67afe4dSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 3058*a67afe4dSAndroid Build Coastguard Worker if test -n "$func_convert_core_file_wine_to_w32_result"; then 3059*a67afe4dSAndroid Build Coastguard Worker if test -z "$func_convert_core_path_wine_to_w32_result"; then 3060*a67afe4dSAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 3061*a67afe4dSAndroid Build Coastguard Worker else 3062*a67afe4dSAndroid Build Coastguard Worker func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 3063*a67afe4dSAndroid Build Coastguard Worker fi 3064*a67afe4dSAndroid Build Coastguard Worker fi 3065*a67afe4dSAndroid Build Coastguard Worker done 3066*a67afe4dSAndroid Build Coastguard Worker IFS=$oldIFS 3067*a67afe4dSAndroid Build Coastguard Worker fi 3068*a67afe4dSAndroid Build Coastguard Worker} 3069*a67afe4dSAndroid Build Coastguard Worker# end: func_convert_core_path_wine_to_w32 3070*a67afe4dSAndroid Build Coastguard Worker 3071*a67afe4dSAndroid Build Coastguard Worker 3072*a67afe4dSAndroid Build Coastguard Worker# func_cygpath ARGS... 3073*a67afe4dSAndroid Build Coastguard Worker# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 3074*a67afe4dSAndroid Build Coastguard Worker# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 3075*a67afe4dSAndroid Build Coastguard Worker# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 3076*a67afe4dSAndroid Build Coastguard Worker# (2), returns the Cygwin file name or path in func_cygpath_result (input 3077*a67afe4dSAndroid Build Coastguard Worker# file name or path is assumed to be in w32 format, as previously converted 3078*a67afe4dSAndroid Build Coastguard Worker# from $build's *nix or MSYS format). In case (3), returns the w32 file name 3079*a67afe4dSAndroid Build Coastguard Worker# or path in func_cygpath_result (input file name or path is assumed to be in 3080*a67afe4dSAndroid Build Coastguard Worker# Cygwin format). Returns an empty string on error. 3081*a67afe4dSAndroid Build Coastguard Worker# 3082*a67afe4dSAndroid Build Coastguard Worker# ARGS are passed to cygpath, with the last one being the file name or path to 3083*a67afe4dSAndroid Build Coastguard Worker# be converted. 3084*a67afe4dSAndroid Build Coastguard Worker# 3085*a67afe4dSAndroid Build Coastguard Worker# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 3086*a67afe4dSAndroid Build Coastguard Worker# environment variable; do not put it in $PATH. 3087*a67afe4dSAndroid Build Coastguard Workerfunc_cygpath () 3088*a67afe4dSAndroid Build Coastguard Worker{ 3089*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3090*a67afe4dSAndroid Build Coastguard Worker 3091*a67afe4dSAndroid Build Coastguard Worker if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 3092*a67afe4dSAndroid Build Coastguard Worker func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 3093*a67afe4dSAndroid Build Coastguard Worker if test "$?" -ne 0; then 3094*a67afe4dSAndroid Build Coastguard Worker # on failure, ensure result is empty 3095*a67afe4dSAndroid Build Coastguard Worker func_cygpath_result= 3096*a67afe4dSAndroid Build Coastguard Worker fi 3097*a67afe4dSAndroid Build Coastguard Worker else 3098*a67afe4dSAndroid Build Coastguard Worker func_cygpath_result= 3099*a67afe4dSAndroid Build Coastguard Worker func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 3100*a67afe4dSAndroid Build Coastguard Worker fi 3101*a67afe4dSAndroid Build Coastguard Worker} 3102*a67afe4dSAndroid Build Coastguard Worker#end: func_cygpath 3103*a67afe4dSAndroid Build Coastguard Worker 3104*a67afe4dSAndroid Build Coastguard Worker 3105*a67afe4dSAndroid Build Coastguard Worker# func_convert_core_msys_to_w32 ARG 3106*a67afe4dSAndroid Build Coastguard Worker# Convert file name or path ARG from MSYS format to w32 format. Return 3107*a67afe4dSAndroid Build Coastguard Worker# result in func_convert_core_msys_to_w32_result. 3108*a67afe4dSAndroid Build Coastguard Workerfunc_convert_core_msys_to_w32 () 3109*a67afe4dSAndroid Build Coastguard Worker{ 3110*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3111*a67afe4dSAndroid Build Coastguard Worker 3112*a67afe4dSAndroid Build Coastguard Worker # awkward: cmd appends spaces to result 3113*a67afe4dSAndroid Build Coastguard Worker func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 3114*a67afe4dSAndroid Build Coastguard Worker $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 3115*a67afe4dSAndroid Build Coastguard Worker} 3116*a67afe4dSAndroid Build Coastguard Worker#end: func_convert_core_msys_to_w32 3117*a67afe4dSAndroid Build Coastguard Worker 3118*a67afe4dSAndroid Build Coastguard Worker 3119*a67afe4dSAndroid Build Coastguard Worker# func_convert_file_check ARG1 ARG2 3120*a67afe4dSAndroid Build Coastguard Worker# Verify that ARG1 (a file name in $build format) was converted to $host 3121*a67afe4dSAndroid Build Coastguard Worker# format in ARG2. Otherwise, emit an error message, but continue (resetting 3122*a67afe4dSAndroid Build Coastguard Worker# func_to_host_file_result to ARG1). 3123*a67afe4dSAndroid Build Coastguard Workerfunc_convert_file_check () 3124*a67afe4dSAndroid Build Coastguard Worker{ 3125*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3126*a67afe4dSAndroid Build Coastguard Worker 3127*a67afe4dSAndroid Build Coastguard Worker if test -z "$2" && test -n "$1"; then 3128*a67afe4dSAndroid Build Coastguard Worker func_error "Could not determine host file name corresponding to" 3129*a67afe4dSAndroid Build Coastguard Worker func_error " '$1'" 3130*a67afe4dSAndroid Build Coastguard Worker func_error "Continuing, but uninstalled executables may not work." 3131*a67afe4dSAndroid Build Coastguard Worker # Fallback: 3132*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$1 3133*a67afe4dSAndroid Build Coastguard Worker fi 3134*a67afe4dSAndroid Build Coastguard Worker} 3135*a67afe4dSAndroid Build Coastguard Worker# end func_convert_file_check 3136*a67afe4dSAndroid Build Coastguard Worker 3137*a67afe4dSAndroid Build Coastguard Worker 3138*a67afe4dSAndroid Build Coastguard Worker# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 3139*a67afe4dSAndroid Build Coastguard Worker# Verify that FROM_PATH (a path in $build format) was converted to $host 3140*a67afe4dSAndroid Build Coastguard Worker# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 3141*a67afe4dSAndroid Build Coastguard Worker# func_to_host_file_result to a simplistic fallback value (see below). 3142*a67afe4dSAndroid Build Coastguard Workerfunc_convert_path_check () 3143*a67afe4dSAndroid Build Coastguard Worker{ 3144*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3145*a67afe4dSAndroid Build Coastguard Worker 3146*a67afe4dSAndroid Build Coastguard Worker if test -z "$4" && test -n "$3"; then 3147*a67afe4dSAndroid Build Coastguard Worker func_error "Could not determine the host path corresponding to" 3148*a67afe4dSAndroid Build Coastguard Worker func_error " '$3'" 3149*a67afe4dSAndroid Build Coastguard Worker func_error "Continuing, but uninstalled executables may not work." 3150*a67afe4dSAndroid Build Coastguard Worker # Fallback. This is a deliberately simplistic "conversion" and 3151*a67afe4dSAndroid Build Coastguard Worker # should not be "improved". See libtool.info. 3152*a67afe4dSAndroid Build Coastguard Worker if test "x$1" != "x$2"; then 3153*a67afe4dSAndroid Build Coastguard Worker lt_replace_pathsep_chars="s|$1|$2|g" 3154*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=`echo "$3" | 3155*a67afe4dSAndroid Build Coastguard Worker $SED -e "$lt_replace_pathsep_chars"` 3156*a67afe4dSAndroid Build Coastguard Worker else 3157*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$3 3158*a67afe4dSAndroid Build Coastguard Worker fi 3159*a67afe4dSAndroid Build Coastguard Worker fi 3160*a67afe4dSAndroid Build Coastguard Worker} 3161*a67afe4dSAndroid Build Coastguard Worker# end func_convert_path_check 3162*a67afe4dSAndroid Build Coastguard Worker 3163*a67afe4dSAndroid Build Coastguard Worker 3164*a67afe4dSAndroid Build Coastguard Worker# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 3165*a67afe4dSAndroid Build Coastguard Worker# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 3166*a67afe4dSAndroid Build Coastguard Worker# and appending REPL if ORIG matches BACKPAT. 3167*a67afe4dSAndroid Build Coastguard Workerfunc_convert_path_front_back_pathsep () 3168*a67afe4dSAndroid Build Coastguard Worker{ 3169*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3170*a67afe4dSAndroid Build Coastguard Worker 3171*a67afe4dSAndroid Build Coastguard Worker case $4 in 3172*a67afe4dSAndroid Build Coastguard Worker $1 ) func_to_host_path_result=$3$func_to_host_path_result 3173*a67afe4dSAndroid Build Coastguard Worker ;; 3174*a67afe4dSAndroid Build Coastguard Worker esac 3175*a67afe4dSAndroid Build Coastguard Worker case $4 in 3176*a67afe4dSAndroid Build Coastguard Worker $2 ) func_append func_to_host_path_result "$3" 3177*a67afe4dSAndroid Build Coastguard Worker ;; 3178*a67afe4dSAndroid Build Coastguard Worker esac 3179*a67afe4dSAndroid Build Coastguard Worker} 3180*a67afe4dSAndroid Build Coastguard Worker# end func_convert_path_front_back_pathsep 3181*a67afe4dSAndroid Build Coastguard Worker 3182*a67afe4dSAndroid Build Coastguard Worker 3183*a67afe4dSAndroid Build Coastguard Worker################################################## 3184*a67afe4dSAndroid Build Coastguard Worker# $build to $host FILE NAME CONVERSION FUNCTIONS # 3185*a67afe4dSAndroid Build Coastguard Worker################################################## 3186*a67afe4dSAndroid Build Coastguard Worker# invoked via '$to_host_file_cmd ARG' 3187*a67afe4dSAndroid Build Coastguard Worker# 3188*a67afe4dSAndroid Build Coastguard Worker# In each case, ARG is the path to be converted from $build to $host format. 3189*a67afe4dSAndroid Build Coastguard Worker# Result will be available in $func_to_host_file_result. 3190*a67afe4dSAndroid Build Coastguard Worker 3191*a67afe4dSAndroid Build Coastguard Worker 3192*a67afe4dSAndroid Build Coastguard Worker# func_to_host_file ARG 3193*a67afe4dSAndroid Build Coastguard Worker# Converts the file name ARG from $build format to $host format. Return result 3194*a67afe4dSAndroid Build Coastguard Worker# in func_to_host_file_result. 3195*a67afe4dSAndroid Build Coastguard Workerfunc_to_host_file () 3196*a67afe4dSAndroid Build Coastguard Worker{ 3197*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3198*a67afe4dSAndroid Build Coastguard Worker 3199*a67afe4dSAndroid Build Coastguard Worker $to_host_file_cmd "$1" 3200*a67afe4dSAndroid Build Coastguard Worker} 3201*a67afe4dSAndroid Build Coastguard Worker# end func_to_host_file 3202*a67afe4dSAndroid Build Coastguard Worker 3203*a67afe4dSAndroid Build Coastguard Worker 3204*a67afe4dSAndroid Build Coastguard Worker# func_to_tool_file ARG LAZY 3205*a67afe4dSAndroid Build Coastguard Worker# converts the file name ARG from $build format to toolchain format. Return 3206*a67afe4dSAndroid Build Coastguard Worker# result in func_to_tool_file_result. If the conversion in use is listed 3207*a67afe4dSAndroid Build Coastguard Worker# in (the comma separated) LAZY, no conversion takes place. 3208*a67afe4dSAndroid Build Coastguard Workerfunc_to_tool_file () 3209*a67afe4dSAndroid Build Coastguard Worker{ 3210*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3211*a67afe4dSAndroid Build Coastguard Worker 3212*a67afe4dSAndroid Build Coastguard Worker case ,$2, in 3213*a67afe4dSAndroid Build Coastguard Worker *,"$to_tool_file_cmd",*) 3214*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file_result=$1 3215*a67afe4dSAndroid Build Coastguard Worker ;; 3216*a67afe4dSAndroid Build Coastguard Worker *) 3217*a67afe4dSAndroid Build Coastguard Worker $to_tool_file_cmd "$1" 3218*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file_result=$func_to_host_file_result 3219*a67afe4dSAndroid Build Coastguard Worker ;; 3220*a67afe4dSAndroid Build Coastguard Worker esac 3221*a67afe4dSAndroid Build Coastguard Worker} 3222*a67afe4dSAndroid Build Coastguard Worker# end func_to_tool_file 3223*a67afe4dSAndroid Build Coastguard Worker 3224*a67afe4dSAndroid Build Coastguard Worker 3225*a67afe4dSAndroid Build Coastguard Worker# func_convert_file_noop ARG 3226*a67afe4dSAndroid Build Coastguard Worker# Copy ARG to func_to_host_file_result. 3227*a67afe4dSAndroid Build Coastguard Workerfunc_convert_file_noop () 3228*a67afe4dSAndroid Build Coastguard Worker{ 3229*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$1 3230*a67afe4dSAndroid Build Coastguard Worker} 3231*a67afe4dSAndroid Build Coastguard Worker# end func_convert_file_noop 3232*a67afe4dSAndroid Build Coastguard Worker 3233*a67afe4dSAndroid Build Coastguard Worker 3234*a67afe4dSAndroid Build Coastguard Worker# func_convert_file_msys_to_w32 ARG 3235*a67afe4dSAndroid Build Coastguard Worker# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 3236*a67afe4dSAndroid Build Coastguard Worker# conversion to w32 is not available inside the cwrapper. Returns result in 3237*a67afe4dSAndroid Build Coastguard Worker# func_to_host_file_result. 3238*a67afe4dSAndroid Build Coastguard Workerfunc_convert_file_msys_to_w32 () 3239*a67afe4dSAndroid Build Coastguard Worker{ 3240*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3241*a67afe4dSAndroid Build Coastguard Worker 3242*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$1 3243*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3244*a67afe4dSAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$1" 3245*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$func_convert_core_msys_to_w32_result 3246*a67afe4dSAndroid Build Coastguard Worker fi 3247*a67afe4dSAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 3248*a67afe4dSAndroid Build Coastguard Worker} 3249*a67afe4dSAndroid Build Coastguard Worker# end func_convert_file_msys_to_w32 3250*a67afe4dSAndroid Build Coastguard Worker 3251*a67afe4dSAndroid Build Coastguard Worker 3252*a67afe4dSAndroid Build Coastguard Worker# func_convert_file_cygwin_to_w32 ARG 3253*a67afe4dSAndroid Build Coastguard Worker# Convert file name ARG from Cygwin to w32 format. Returns result in 3254*a67afe4dSAndroid Build Coastguard Worker# func_to_host_file_result. 3255*a67afe4dSAndroid Build Coastguard Workerfunc_convert_file_cygwin_to_w32 () 3256*a67afe4dSAndroid Build Coastguard Worker{ 3257*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3258*a67afe4dSAndroid Build Coastguard Worker 3259*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$1 3260*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3261*a67afe4dSAndroid Build Coastguard Worker # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3262*a67afe4dSAndroid Build Coastguard Worker # LT_CYGPATH in this case. 3263*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=`cygpath -m "$1"` 3264*a67afe4dSAndroid Build Coastguard Worker fi 3265*a67afe4dSAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 3266*a67afe4dSAndroid Build Coastguard Worker} 3267*a67afe4dSAndroid Build Coastguard Worker# end func_convert_file_cygwin_to_w32 3268*a67afe4dSAndroid Build Coastguard Worker 3269*a67afe4dSAndroid Build Coastguard Worker 3270*a67afe4dSAndroid Build Coastguard Worker# func_convert_file_nix_to_w32 ARG 3271*a67afe4dSAndroid Build Coastguard Worker# Convert file name ARG from *nix to w32 format. Requires a wine environment 3272*a67afe4dSAndroid Build Coastguard Worker# and a working winepath. Returns result in func_to_host_file_result. 3273*a67afe4dSAndroid Build Coastguard Workerfunc_convert_file_nix_to_w32 () 3274*a67afe4dSAndroid Build Coastguard Worker{ 3275*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3276*a67afe4dSAndroid Build Coastguard Worker 3277*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$1 3278*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3279*a67afe4dSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32 "$1" 3280*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3281*a67afe4dSAndroid Build Coastguard Worker fi 3282*a67afe4dSAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 3283*a67afe4dSAndroid Build Coastguard Worker} 3284*a67afe4dSAndroid Build Coastguard Worker# end func_convert_file_nix_to_w32 3285*a67afe4dSAndroid Build Coastguard Worker 3286*a67afe4dSAndroid Build Coastguard Worker 3287*a67afe4dSAndroid Build Coastguard Worker# func_convert_file_msys_to_cygwin ARG 3288*a67afe4dSAndroid Build Coastguard Worker# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3289*a67afe4dSAndroid Build Coastguard Worker# Returns result in func_to_host_file_result. 3290*a67afe4dSAndroid Build Coastguard Workerfunc_convert_file_msys_to_cygwin () 3291*a67afe4dSAndroid Build Coastguard Worker{ 3292*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3293*a67afe4dSAndroid Build Coastguard Worker 3294*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$1 3295*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3296*a67afe4dSAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$1" 3297*a67afe4dSAndroid Build Coastguard Worker func_cygpath -u "$func_convert_core_msys_to_w32_result" 3298*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$func_cygpath_result 3299*a67afe4dSAndroid Build Coastguard Worker fi 3300*a67afe4dSAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 3301*a67afe4dSAndroid Build Coastguard Worker} 3302*a67afe4dSAndroid Build Coastguard Worker# end func_convert_file_msys_to_cygwin 3303*a67afe4dSAndroid Build Coastguard Worker 3304*a67afe4dSAndroid Build Coastguard Worker 3305*a67afe4dSAndroid Build Coastguard Worker# func_convert_file_nix_to_cygwin ARG 3306*a67afe4dSAndroid Build Coastguard Worker# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3307*a67afe4dSAndroid Build Coastguard Worker# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3308*a67afe4dSAndroid Build Coastguard Worker# in func_to_host_file_result. 3309*a67afe4dSAndroid Build Coastguard Workerfunc_convert_file_nix_to_cygwin () 3310*a67afe4dSAndroid Build Coastguard Worker{ 3311*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3312*a67afe4dSAndroid Build Coastguard Worker 3313*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$1 3314*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3315*a67afe4dSAndroid Build Coastguard Worker # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3316*a67afe4dSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32 "$1" 3317*a67afe4dSAndroid Build Coastguard Worker func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 3318*a67afe4dSAndroid Build Coastguard Worker func_to_host_file_result=$func_cygpath_result 3319*a67afe4dSAndroid Build Coastguard Worker fi 3320*a67afe4dSAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 3321*a67afe4dSAndroid Build Coastguard Worker} 3322*a67afe4dSAndroid Build Coastguard Worker# end func_convert_file_nix_to_cygwin 3323*a67afe4dSAndroid Build Coastguard Worker 3324*a67afe4dSAndroid Build Coastguard Worker 3325*a67afe4dSAndroid Build Coastguard Worker############################################# 3326*a67afe4dSAndroid Build Coastguard Worker# $build to $host PATH CONVERSION FUNCTIONS # 3327*a67afe4dSAndroid Build Coastguard Worker############################################# 3328*a67afe4dSAndroid Build Coastguard Worker# invoked via '$to_host_path_cmd ARG' 3329*a67afe4dSAndroid Build Coastguard Worker# 3330*a67afe4dSAndroid Build Coastguard Worker# In each case, ARG is the path to be converted from $build to $host format. 3331*a67afe4dSAndroid Build Coastguard Worker# The result will be available in $func_to_host_path_result. 3332*a67afe4dSAndroid Build Coastguard Worker# 3333*a67afe4dSAndroid Build Coastguard Worker# Path separators are also converted from $build format to $host format. If 3334*a67afe4dSAndroid Build Coastguard Worker# ARG begins or ends with a path separator character, it is preserved (but 3335*a67afe4dSAndroid Build Coastguard Worker# converted to $host format) on output. 3336*a67afe4dSAndroid Build Coastguard Worker# 3337*a67afe4dSAndroid Build Coastguard Worker# All path conversion functions are named using the following convention: 3338*a67afe4dSAndroid Build Coastguard Worker# file name conversion function : func_convert_file_X_to_Y () 3339*a67afe4dSAndroid Build Coastguard Worker# path conversion function : func_convert_path_X_to_Y () 3340*a67afe4dSAndroid Build Coastguard Worker# where, for any given $build/$host combination the 'X_to_Y' value is the 3341*a67afe4dSAndroid Build Coastguard Worker# same. If conversion functions are added for new $build/$host combinations, 3342*a67afe4dSAndroid Build Coastguard Worker# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3343*a67afe4dSAndroid Build Coastguard Worker# will break. 3344*a67afe4dSAndroid Build Coastguard Worker 3345*a67afe4dSAndroid Build Coastguard Worker 3346*a67afe4dSAndroid Build Coastguard Worker# func_init_to_host_path_cmd 3347*a67afe4dSAndroid Build Coastguard Worker# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3348*a67afe4dSAndroid Build Coastguard Worker# appropriate value, based on the value of $to_host_file_cmd. 3349*a67afe4dSAndroid Build Coastguard Workerto_host_path_cmd= 3350*a67afe4dSAndroid Build Coastguard Workerfunc_init_to_host_path_cmd () 3351*a67afe4dSAndroid Build Coastguard Worker{ 3352*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3353*a67afe4dSAndroid Build Coastguard Worker 3354*a67afe4dSAndroid Build Coastguard Worker if test -z "$to_host_path_cmd"; then 3355*a67afe4dSAndroid Build Coastguard Worker func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 3356*a67afe4dSAndroid Build Coastguard Worker to_host_path_cmd=func_convert_path_$func_stripname_result 3357*a67afe4dSAndroid Build Coastguard Worker fi 3358*a67afe4dSAndroid Build Coastguard Worker} 3359*a67afe4dSAndroid Build Coastguard Worker 3360*a67afe4dSAndroid Build Coastguard Worker 3361*a67afe4dSAndroid Build Coastguard Worker# func_to_host_path ARG 3362*a67afe4dSAndroid Build Coastguard Worker# Converts the path ARG from $build format to $host format. Return result 3363*a67afe4dSAndroid Build Coastguard Worker# in func_to_host_path_result. 3364*a67afe4dSAndroid Build Coastguard Workerfunc_to_host_path () 3365*a67afe4dSAndroid Build Coastguard Worker{ 3366*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3367*a67afe4dSAndroid Build Coastguard Worker 3368*a67afe4dSAndroid Build Coastguard Worker func_init_to_host_path_cmd 3369*a67afe4dSAndroid Build Coastguard Worker $to_host_path_cmd "$1" 3370*a67afe4dSAndroid Build Coastguard Worker} 3371*a67afe4dSAndroid Build Coastguard Worker# end func_to_host_path 3372*a67afe4dSAndroid Build Coastguard Worker 3373*a67afe4dSAndroid Build Coastguard Worker 3374*a67afe4dSAndroid Build Coastguard Worker# func_convert_path_noop ARG 3375*a67afe4dSAndroid Build Coastguard Worker# Copy ARG to func_to_host_path_result. 3376*a67afe4dSAndroid Build Coastguard Workerfunc_convert_path_noop () 3377*a67afe4dSAndroid Build Coastguard Worker{ 3378*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$1 3379*a67afe4dSAndroid Build Coastguard Worker} 3380*a67afe4dSAndroid Build Coastguard Worker# end func_convert_path_noop 3381*a67afe4dSAndroid Build Coastguard Worker 3382*a67afe4dSAndroid Build Coastguard Worker 3383*a67afe4dSAndroid Build Coastguard Worker# func_convert_path_msys_to_w32 ARG 3384*a67afe4dSAndroid Build Coastguard Worker# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3385*a67afe4dSAndroid Build Coastguard Worker# conversion to w32 is not available inside the cwrapper. Returns result in 3386*a67afe4dSAndroid Build Coastguard Worker# func_to_host_path_result. 3387*a67afe4dSAndroid Build Coastguard Workerfunc_convert_path_msys_to_w32 () 3388*a67afe4dSAndroid Build Coastguard Worker{ 3389*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3390*a67afe4dSAndroid Build Coastguard Worker 3391*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$1 3392*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3393*a67afe4dSAndroid Build Coastguard Worker # Remove leading and trailing path separator characters from ARG. MSYS 3394*a67afe4dSAndroid Build Coastguard Worker # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3395*a67afe4dSAndroid Build Coastguard Worker # and winepath ignores them completely. 3396*a67afe4dSAndroid Build Coastguard Worker func_stripname : : "$1" 3397*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 3398*a67afe4dSAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3399*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$func_convert_core_msys_to_w32_result 3400*a67afe4dSAndroid Build Coastguard Worker func_convert_path_check : ";" \ 3401*a67afe4dSAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 3402*a67afe4dSAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3403*a67afe4dSAndroid Build Coastguard Worker fi 3404*a67afe4dSAndroid Build Coastguard Worker} 3405*a67afe4dSAndroid Build Coastguard Worker# end func_convert_path_msys_to_w32 3406*a67afe4dSAndroid Build Coastguard Worker 3407*a67afe4dSAndroid Build Coastguard Worker 3408*a67afe4dSAndroid Build Coastguard Worker# func_convert_path_cygwin_to_w32 ARG 3409*a67afe4dSAndroid Build Coastguard Worker# Convert path ARG from Cygwin to w32 format. Returns result in 3410*a67afe4dSAndroid Build Coastguard Worker# func_to_host_file_result. 3411*a67afe4dSAndroid Build Coastguard Workerfunc_convert_path_cygwin_to_w32 () 3412*a67afe4dSAndroid Build Coastguard Worker{ 3413*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3414*a67afe4dSAndroid Build Coastguard Worker 3415*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$1 3416*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3417*a67afe4dSAndroid Build Coastguard Worker # See func_convert_path_msys_to_w32: 3418*a67afe4dSAndroid Build Coastguard Worker func_stripname : : "$1" 3419*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 3420*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3421*a67afe4dSAndroid Build Coastguard Worker func_convert_path_check : ";" \ 3422*a67afe4dSAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 3423*a67afe4dSAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3424*a67afe4dSAndroid Build Coastguard Worker fi 3425*a67afe4dSAndroid Build Coastguard Worker} 3426*a67afe4dSAndroid Build Coastguard Worker# end func_convert_path_cygwin_to_w32 3427*a67afe4dSAndroid Build Coastguard Worker 3428*a67afe4dSAndroid Build Coastguard Worker 3429*a67afe4dSAndroid Build Coastguard Worker# func_convert_path_nix_to_w32 ARG 3430*a67afe4dSAndroid Build Coastguard Worker# Convert path ARG from *nix to w32 format. Requires a wine environment and 3431*a67afe4dSAndroid Build Coastguard Worker# a working winepath. Returns result in func_to_host_file_result. 3432*a67afe4dSAndroid Build Coastguard Workerfunc_convert_path_nix_to_w32 () 3433*a67afe4dSAndroid Build Coastguard Worker{ 3434*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3435*a67afe4dSAndroid Build Coastguard Worker 3436*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$1 3437*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3438*a67afe4dSAndroid Build Coastguard Worker # See func_convert_path_msys_to_w32: 3439*a67afe4dSAndroid Build Coastguard Worker func_stripname : : "$1" 3440*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 3441*a67afe4dSAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3442*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3443*a67afe4dSAndroid Build Coastguard Worker func_convert_path_check : ";" \ 3444*a67afe4dSAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 3445*a67afe4dSAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3446*a67afe4dSAndroid Build Coastguard Worker fi 3447*a67afe4dSAndroid Build Coastguard Worker} 3448*a67afe4dSAndroid Build Coastguard Worker# end func_convert_path_nix_to_w32 3449*a67afe4dSAndroid Build Coastguard Worker 3450*a67afe4dSAndroid Build Coastguard Worker 3451*a67afe4dSAndroid Build Coastguard Worker# func_convert_path_msys_to_cygwin ARG 3452*a67afe4dSAndroid Build Coastguard Worker# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3453*a67afe4dSAndroid Build Coastguard Worker# Returns result in func_to_host_file_result. 3454*a67afe4dSAndroid Build Coastguard Workerfunc_convert_path_msys_to_cygwin () 3455*a67afe4dSAndroid Build Coastguard Worker{ 3456*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3457*a67afe4dSAndroid Build Coastguard Worker 3458*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$1 3459*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3460*a67afe4dSAndroid Build Coastguard Worker # See func_convert_path_msys_to_w32: 3461*a67afe4dSAndroid Build Coastguard Worker func_stripname : : "$1" 3462*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 3463*a67afe4dSAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3464*a67afe4dSAndroid Build Coastguard Worker func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 3465*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$func_cygpath_result 3466*a67afe4dSAndroid Build Coastguard Worker func_convert_path_check : : \ 3467*a67afe4dSAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 3468*a67afe4dSAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3469*a67afe4dSAndroid Build Coastguard Worker fi 3470*a67afe4dSAndroid Build Coastguard Worker} 3471*a67afe4dSAndroid Build Coastguard Worker# end func_convert_path_msys_to_cygwin 3472*a67afe4dSAndroid Build Coastguard Worker 3473*a67afe4dSAndroid Build Coastguard Worker 3474*a67afe4dSAndroid Build Coastguard Worker# func_convert_path_nix_to_cygwin ARG 3475*a67afe4dSAndroid Build Coastguard Worker# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3476*a67afe4dSAndroid Build Coastguard Worker# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3477*a67afe4dSAndroid Build Coastguard Worker# func_to_host_file_result. 3478*a67afe4dSAndroid Build Coastguard Workerfunc_convert_path_nix_to_cygwin () 3479*a67afe4dSAndroid Build Coastguard Worker{ 3480*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3481*a67afe4dSAndroid Build Coastguard Worker 3482*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$1 3483*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 3484*a67afe4dSAndroid Build Coastguard Worker # Remove leading and trailing path separator characters from 3485*a67afe4dSAndroid Build Coastguard Worker # ARG. msys behavior is inconsistent here, cygpath turns them 3486*a67afe4dSAndroid Build Coastguard Worker # into '.;' and ';.', and winepath ignores them completely. 3487*a67afe4dSAndroid Build Coastguard Worker func_stripname : : "$1" 3488*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 3489*a67afe4dSAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3490*a67afe4dSAndroid Build Coastguard Worker func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 3491*a67afe4dSAndroid Build Coastguard Worker func_to_host_path_result=$func_cygpath_result 3492*a67afe4dSAndroid Build Coastguard Worker func_convert_path_check : : \ 3493*a67afe4dSAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 3494*a67afe4dSAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3495*a67afe4dSAndroid Build Coastguard Worker fi 3496*a67afe4dSAndroid Build Coastguard Worker} 3497*a67afe4dSAndroid Build Coastguard Worker# end func_convert_path_nix_to_cygwin 3498*a67afe4dSAndroid Build Coastguard Worker 3499*a67afe4dSAndroid Build Coastguard Worker 3500*a67afe4dSAndroid Build Coastguard Worker# func_dll_def_p FILE 3501*a67afe4dSAndroid Build Coastguard Worker# True iff FILE is a Windows DLL '.def' file. 3502*a67afe4dSAndroid Build Coastguard Worker# Keep in sync with _LT_DLL_DEF_P in libtool.m4 3503*a67afe4dSAndroid Build Coastguard Workerfunc_dll_def_p () 3504*a67afe4dSAndroid Build Coastguard Worker{ 3505*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3506*a67afe4dSAndroid Build Coastguard Worker 3507*a67afe4dSAndroid Build Coastguard Worker func_dll_def_p_tmp=`$SED -n \ 3508*a67afe4dSAndroid Build Coastguard Worker -e 's/^[ ]*//' \ 3509*a67afe4dSAndroid Build Coastguard Worker -e '/^\(;.*\)*$/d' \ 3510*a67afe4dSAndroid Build Coastguard Worker -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 3511*a67afe4dSAndroid Build Coastguard Worker -e q \ 3512*a67afe4dSAndroid Build Coastguard Worker "$1"` 3513*a67afe4dSAndroid Build Coastguard Worker test DEF = "$func_dll_def_p_tmp" 3514*a67afe4dSAndroid Build Coastguard Worker} 3515*a67afe4dSAndroid Build Coastguard Worker 3516*a67afe4dSAndroid Build Coastguard Worker 3517*a67afe4dSAndroid Build Coastguard Worker# func_mode_compile arg... 3518*a67afe4dSAndroid Build Coastguard Workerfunc_mode_compile () 3519*a67afe4dSAndroid Build Coastguard Worker{ 3520*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 3521*a67afe4dSAndroid Build Coastguard Worker 3522*a67afe4dSAndroid Build Coastguard Worker # Get the compilation command and the source file. 3523*a67afe4dSAndroid Build Coastguard Worker base_compile= 3524*a67afe4dSAndroid Build Coastguard Worker srcfile=$nonopt # always keep a non-empty value in "srcfile" 3525*a67afe4dSAndroid Build Coastguard Worker suppress_opt=yes 3526*a67afe4dSAndroid Build Coastguard Worker suppress_output= 3527*a67afe4dSAndroid Build Coastguard Worker arg_mode=normal 3528*a67afe4dSAndroid Build Coastguard Worker libobj= 3529*a67afe4dSAndroid Build Coastguard Worker later= 3530*a67afe4dSAndroid Build Coastguard Worker pie_flag= 3531*a67afe4dSAndroid Build Coastguard Worker 3532*a67afe4dSAndroid Build Coastguard Worker for arg 3533*a67afe4dSAndroid Build Coastguard Worker do 3534*a67afe4dSAndroid Build Coastguard Worker case $arg_mode in 3535*a67afe4dSAndroid Build Coastguard Worker arg ) 3536*a67afe4dSAndroid Build Coastguard Worker # do not "continue". Instead, add this to base_compile 3537*a67afe4dSAndroid Build Coastguard Worker lastarg=$arg 3538*a67afe4dSAndroid Build Coastguard Worker arg_mode=normal 3539*a67afe4dSAndroid Build Coastguard Worker ;; 3540*a67afe4dSAndroid Build Coastguard Worker 3541*a67afe4dSAndroid Build Coastguard Worker target ) 3542*a67afe4dSAndroid Build Coastguard Worker libobj=$arg 3543*a67afe4dSAndroid Build Coastguard Worker arg_mode=normal 3544*a67afe4dSAndroid Build Coastguard Worker continue 3545*a67afe4dSAndroid Build Coastguard Worker ;; 3546*a67afe4dSAndroid Build Coastguard Worker 3547*a67afe4dSAndroid Build Coastguard Worker normal ) 3548*a67afe4dSAndroid Build Coastguard Worker # Accept any command-line options. 3549*a67afe4dSAndroid Build Coastguard Worker case $arg in 3550*a67afe4dSAndroid Build Coastguard Worker -o) 3551*a67afe4dSAndroid Build Coastguard Worker test -n "$libobj" && \ 3552*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "you cannot specify '-o' more than once" 3553*a67afe4dSAndroid Build Coastguard Worker arg_mode=target 3554*a67afe4dSAndroid Build Coastguard Worker continue 3555*a67afe4dSAndroid Build Coastguard Worker ;; 3556*a67afe4dSAndroid Build Coastguard Worker 3557*a67afe4dSAndroid Build Coastguard Worker -pie | -fpie | -fPIE) 3558*a67afe4dSAndroid Build Coastguard Worker func_append pie_flag " $arg" 3559*a67afe4dSAndroid Build Coastguard Worker continue 3560*a67afe4dSAndroid Build Coastguard Worker ;; 3561*a67afe4dSAndroid Build Coastguard Worker 3562*a67afe4dSAndroid Build Coastguard Worker -shared | -static | -prefer-pic | -prefer-non-pic) 3563*a67afe4dSAndroid Build Coastguard Worker func_append later " $arg" 3564*a67afe4dSAndroid Build Coastguard Worker continue 3565*a67afe4dSAndroid Build Coastguard Worker ;; 3566*a67afe4dSAndroid Build Coastguard Worker 3567*a67afe4dSAndroid Build Coastguard Worker -no-suppress) 3568*a67afe4dSAndroid Build Coastguard Worker suppress_opt=no 3569*a67afe4dSAndroid Build Coastguard Worker continue 3570*a67afe4dSAndroid Build Coastguard Worker ;; 3571*a67afe4dSAndroid Build Coastguard Worker 3572*a67afe4dSAndroid Build Coastguard Worker -Xcompiler) 3573*a67afe4dSAndroid Build Coastguard Worker arg_mode=arg # the next one goes into the "base_compile" arg list 3574*a67afe4dSAndroid Build Coastguard Worker continue # The current "srcfile" will either be retained or 3575*a67afe4dSAndroid Build Coastguard Worker ;; # replaced later. I would guess that would be a bug. 3576*a67afe4dSAndroid Build Coastguard Worker 3577*a67afe4dSAndroid Build Coastguard Worker -Wc,*) 3578*a67afe4dSAndroid Build Coastguard Worker func_stripname '-Wc,' '' "$arg" 3579*a67afe4dSAndroid Build Coastguard Worker args=$func_stripname_result 3580*a67afe4dSAndroid Build Coastguard Worker lastarg= 3581*a67afe4dSAndroid Build Coastguard Worker save_ifs=$IFS; IFS=, 3582*a67afe4dSAndroid Build Coastguard Worker for arg in $args; do 3583*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 3584*a67afe4dSAndroid Build Coastguard Worker func_append_quoted lastarg "$arg" 3585*a67afe4dSAndroid Build Coastguard Worker done 3586*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 3587*a67afe4dSAndroid Build Coastguard Worker func_stripname ' ' '' "$lastarg" 3588*a67afe4dSAndroid Build Coastguard Worker lastarg=$func_stripname_result 3589*a67afe4dSAndroid Build Coastguard Worker 3590*a67afe4dSAndroid Build Coastguard Worker # Add the arguments to base_compile. 3591*a67afe4dSAndroid Build Coastguard Worker func_append base_compile " $lastarg" 3592*a67afe4dSAndroid Build Coastguard Worker continue 3593*a67afe4dSAndroid Build Coastguard Worker ;; 3594*a67afe4dSAndroid Build Coastguard Worker 3595*a67afe4dSAndroid Build Coastguard Worker *) 3596*a67afe4dSAndroid Build Coastguard Worker # Accept the current argument as the source file. 3597*a67afe4dSAndroid Build Coastguard Worker # The previous "srcfile" becomes the current argument. 3598*a67afe4dSAndroid Build Coastguard Worker # 3599*a67afe4dSAndroid Build Coastguard Worker lastarg=$srcfile 3600*a67afe4dSAndroid Build Coastguard Worker srcfile=$arg 3601*a67afe4dSAndroid Build Coastguard Worker ;; 3602*a67afe4dSAndroid Build Coastguard Worker esac # case $arg 3603*a67afe4dSAndroid Build Coastguard Worker ;; 3604*a67afe4dSAndroid Build Coastguard Worker esac # case $arg_mode 3605*a67afe4dSAndroid Build Coastguard Worker 3606*a67afe4dSAndroid Build Coastguard Worker # Aesthetically quote the previous argument. 3607*a67afe4dSAndroid Build Coastguard Worker func_append_quoted base_compile "$lastarg" 3608*a67afe4dSAndroid Build Coastguard Worker done # for arg 3609*a67afe4dSAndroid Build Coastguard Worker 3610*a67afe4dSAndroid Build Coastguard Worker case $arg_mode in 3611*a67afe4dSAndroid Build Coastguard Worker arg) 3612*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "you must specify an argument for -Xcompile" 3613*a67afe4dSAndroid Build Coastguard Worker ;; 3614*a67afe4dSAndroid Build Coastguard Worker target) 3615*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "you must specify a target with '-o'" 3616*a67afe4dSAndroid Build Coastguard Worker ;; 3617*a67afe4dSAndroid Build Coastguard Worker *) 3618*a67afe4dSAndroid Build Coastguard Worker # Get the name of the library object. 3619*a67afe4dSAndroid Build Coastguard Worker test -z "$libobj" && { 3620*a67afe4dSAndroid Build Coastguard Worker func_basename "$srcfile" 3621*a67afe4dSAndroid Build Coastguard Worker libobj=$func_basename_result 3622*a67afe4dSAndroid Build Coastguard Worker } 3623*a67afe4dSAndroid Build Coastguard Worker ;; 3624*a67afe4dSAndroid Build Coastguard Worker esac 3625*a67afe4dSAndroid Build Coastguard Worker 3626*a67afe4dSAndroid Build Coastguard Worker # Recognize several different file suffixes. 3627*a67afe4dSAndroid Build Coastguard Worker # If the user specifies -o file.o, it is replaced with file.lo 3628*a67afe4dSAndroid Build Coastguard Worker case $libobj in 3629*a67afe4dSAndroid Build Coastguard Worker *.[cCFSifmso] | \ 3630*a67afe4dSAndroid Build Coastguard Worker *.ada | *.adb | *.ads | *.asm | \ 3631*a67afe4dSAndroid Build Coastguard Worker *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3632*a67afe4dSAndroid Build Coastguard Worker *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3633*a67afe4dSAndroid Build Coastguard Worker func_xform "$libobj" 3634*a67afe4dSAndroid Build Coastguard Worker libobj=$func_xform_result 3635*a67afe4dSAndroid Build Coastguard Worker ;; 3636*a67afe4dSAndroid Build Coastguard Worker esac 3637*a67afe4dSAndroid Build Coastguard Worker 3638*a67afe4dSAndroid Build Coastguard Worker case $libobj in 3639*a67afe4dSAndroid Build Coastguard Worker *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3640*a67afe4dSAndroid Build Coastguard Worker *) 3641*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "cannot determine name of library object from '$libobj'" 3642*a67afe4dSAndroid Build Coastguard Worker ;; 3643*a67afe4dSAndroid Build Coastguard Worker esac 3644*a67afe4dSAndroid Build Coastguard Worker 3645*a67afe4dSAndroid Build Coastguard Worker func_infer_tag $base_compile 3646*a67afe4dSAndroid Build Coastguard Worker 3647*a67afe4dSAndroid Build Coastguard Worker for arg in $later; do 3648*a67afe4dSAndroid Build Coastguard Worker case $arg in 3649*a67afe4dSAndroid Build Coastguard Worker -shared) 3650*a67afe4dSAndroid Build Coastguard Worker test yes = "$build_libtool_libs" \ 3651*a67afe4dSAndroid Build Coastguard Worker || func_fatal_configuration "cannot build a shared library" 3652*a67afe4dSAndroid Build Coastguard Worker build_old_libs=no 3653*a67afe4dSAndroid Build Coastguard Worker continue 3654*a67afe4dSAndroid Build Coastguard Worker ;; 3655*a67afe4dSAndroid Build Coastguard Worker 3656*a67afe4dSAndroid Build Coastguard Worker -static) 3657*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=no 3658*a67afe4dSAndroid Build Coastguard Worker build_old_libs=yes 3659*a67afe4dSAndroid Build Coastguard Worker continue 3660*a67afe4dSAndroid Build Coastguard Worker ;; 3661*a67afe4dSAndroid Build Coastguard Worker 3662*a67afe4dSAndroid Build Coastguard Worker -prefer-pic) 3663*a67afe4dSAndroid Build Coastguard Worker pic_mode=yes 3664*a67afe4dSAndroid Build Coastguard Worker continue 3665*a67afe4dSAndroid Build Coastguard Worker ;; 3666*a67afe4dSAndroid Build Coastguard Worker 3667*a67afe4dSAndroid Build Coastguard Worker -prefer-non-pic) 3668*a67afe4dSAndroid Build Coastguard Worker pic_mode=no 3669*a67afe4dSAndroid Build Coastguard Worker continue 3670*a67afe4dSAndroid Build Coastguard Worker ;; 3671*a67afe4dSAndroid Build Coastguard Worker esac 3672*a67afe4dSAndroid Build Coastguard Worker done 3673*a67afe4dSAndroid Build Coastguard Worker 3674*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$libobj" 3675*a67afe4dSAndroid Build Coastguard Worker test "X$libobj" != "X$func_quote_arg_result" \ 3676*a67afe4dSAndroid Build Coastguard Worker && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 3677*a67afe4dSAndroid Build Coastguard Worker && func_warning "libobj name '$libobj' may not contain shell special characters." 3678*a67afe4dSAndroid Build Coastguard Worker func_dirname_and_basename "$obj" "/" "" 3679*a67afe4dSAndroid Build Coastguard Worker objname=$func_basename_result 3680*a67afe4dSAndroid Build Coastguard Worker xdir=$func_dirname_result 3681*a67afe4dSAndroid Build Coastguard Worker lobj=$xdir$objdir/$objname 3682*a67afe4dSAndroid Build Coastguard Worker 3683*a67afe4dSAndroid Build Coastguard Worker test -z "$base_compile" && \ 3684*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "you must specify a compilation command" 3685*a67afe4dSAndroid Build Coastguard Worker 3686*a67afe4dSAndroid Build Coastguard Worker # Delete any leftover library objects. 3687*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 3688*a67afe4dSAndroid Build Coastguard Worker removelist="$obj $lobj $libobj ${libobj}T" 3689*a67afe4dSAndroid Build Coastguard Worker else 3690*a67afe4dSAndroid Build Coastguard Worker removelist="$lobj $libobj ${libobj}T" 3691*a67afe4dSAndroid Build Coastguard Worker fi 3692*a67afe4dSAndroid Build Coastguard Worker 3693*a67afe4dSAndroid Build Coastguard Worker # On Cygwin there's no "real" PIC flag so we must build both object types 3694*a67afe4dSAndroid Build Coastguard Worker case $host_os in 3695*a67afe4dSAndroid Build Coastguard Worker cygwin* | mingw* | pw32* | os2* | cegcc*) 3696*a67afe4dSAndroid Build Coastguard Worker pic_mode=default 3697*a67afe4dSAndroid Build Coastguard Worker ;; 3698*a67afe4dSAndroid Build Coastguard Worker esac 3699*a67afe4dSAndroid Build Coastguard Worker if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3700*a67afe4dSAndroid Build Coastguard Worker # non-PIC code in shared libraries is not supported 3701*a67afe4dSAndroid Build Coastguard Worker pic_mode=default 3702*a67afe4dSAndroid Build Coastguard Worker fi 3703*a67afe4dSAndroid Build Coastguard Worker 3704*a67afe4dSAndroid Build Coastguard Worker # Calculate the filename of the output object if compiler does 3705*a67afe4dSAndroid Build Coastguard Worker # not support -o with -c 3706*a67afe4dSAndroid Build Coastguard Worker if test no = "$compiler_c_o"; then 3707*a67afe4dSAndroid Build Coastguard Worker output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 3708*a67afe4dSAndroid Build Coastguard Worker lockfile=$output_obj.lock 3709*a67afe4dSAndroid Build Coastguard Worker else 3710*a67afe4dSAndroid Build Coastguard Worker output_obj= 3711*a67afe4dSAndroid Build Coastguard Worker need_locks=no 3712*a67afe4dSAndroid Build Coastguard Worker lockfile= 3713*a67afe4dSAndroid Build Coastguard Worker fi 3714*a67afe4dSAndroid Build Coastguard Worker 3715*a67afe4dSAndroid Build Coastguard Worker # Lock this critical section if it is needed 3716*a67afe4dSAndroid Build Coastguard Worker # We use this script file to make the link, it avoids creating a new file 3717*a67afe4dSAndroid Build Coastguard Worker if test yes = "$need_locks"; then 3718*a67afe4dSAndroid Build Coastguard Worker until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3719*a67afe4dSAndroid Build Coastguard Worker func_echo "Waiting for $lockfile to be removed" 3720*a67afe4dSAndroid Build Coastguard Worker sleep 2 3721*a67afe4dSAndroid Build Coastguard Worker done 3722*a67afe4dSAndroid Build Coastguard Worker elif test warn = "$need_locks"; then 3723*a67afe4dSAndroid Build Coastguard Worker if test -f "$lockfile"; then 3724*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 3725*a67afe4dSAndroid Build Coastguard Worker*** ERROR, $lockfile exists and contains: 3726*a67afe4dSAndroid Build Coastguard Worker`cat $lockfile 2>/dev/null` 3727*a67afe4dSAndroid Build Coastguard Worker 3728*a67afe4dSAndroid Build Coastguard WorkerThis indicates that another process is trying to use the same 3729*a67afe4dSAndroid Build Coastguard Workertemporary object file, and libtool could not work around it because 3730*a67afe4dSAndroid Build Coastguard Workeryour compiler does not support '-c' and '-o' together. If you 3731*a67afe4dSAndroid Build Coastguard Workerrepeat this compilation, it may succeed, by chance, but you had better 3732*a67afe4dSAndroid Build Coastguard Workeravoid parallel builds (make -j) in this platform, or get a better 3733*a67afe4dSAndroid Build Coastguard Workercompiler." 3734*a67afe4dSAndroid Build Coastguard Worker 3735*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 3736*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_FAILURE 3737*a67afe4dSAndroid Build Coastguard Worker fi 3738*a67afe4dSAndroid Build Coastguard Worker func_append removelist " $output_obj" 3739*a67afe4dSAndroid Build Coastguard Worker $ECHO "$srcfile" > "$lockfile" 3740*a67afe4dSAndroid Build Coastguard Worker fi 3741*a67afe4dSAndroid Build Coastguard Worker 3742*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 3743*a67afe4dSAndroid Build Coastguard Worker func_append removelist " $lockfile" 3744*a67afe4dSAndroid Build Coastguard Worker trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3745*a67afe4dSAndroid Build Coastguard Worker 3746*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3747*a67afe4dSAndroid Build Coastguard Worker srcfile=$func_to_tool_file_result 3748*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$srcfile" 3749*a67afe4dSAndroid Build Coastguard Worker qsrcfile=$func_quote_arg_result 3750*a67afe4dSAndroid Build Coastguard Worker 3751*a67afe4dSAndroid Build Coastguard Worker # Only build a PIC object if we are building libtool libraries. 3752*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 3753*a67afe4dSAndroid Build Coastguard Worker # Without this assignment, base_compile gets emptied. 3754*a67afe4dSAndroid Build Coastguard Worker fbsd_hideous_sh_bug=$base_compile 3755*a67afe4dSAndroid Build Coastguard Worker 3756*a67afe4dSAndroid Build Coastguard Worker if test no != "$pic_mode"; then 3757*a67afe4dSAndroid Build Coastguard Worker command="$base_compile $qsrcfile $pic_flag" 3758*a67afe4dSAndroid Build Coastguard Worker else 3759*a67afe4dSAndroid Build Coastguard Worker # Don't build PIC code 3760*a67afe4dSAndroid Build Coastguard Worker command="$base_compile $qsrcfile" 3761*a67afe4dSAndroid Build Coastguard Worker fi 3762*a67afe4dSAndroid Build Coastguard Worker 3763*a67afe4dSAndroid Build Coastguard Worker func_mkdir_p "$xdir$objdir" 3764*a67afe4dSAndroid Build Coastguard Worker 3765*a67afe4dSAndroid Build Coastguard Worker if test -z "$output_obj"; then 3766*a67afe4dSAndroid Build Coastguard Worker # Place PIC objects in $objdir 3767*a67afe4dSAndroid Build Coastguard Worker func_append command " -o $lobj" 3768*a67afe4dSAndroid Build Coastguard Worker fi 3769*a67afe4dSAndroid Build Coastguard Worker 3770*a67afe4dSAndroid Build Coastguard Worker func_show_eval_locale "$command" \ 3771*a67afe4dSAndroid Build Coastguard Worker 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3772*a67afe4dSAndroid Build Coastguard Worker 3773*a67afe4dSAndroid Build Coastguard Worker if test warn = "$need_locks" && 3774*a67afe4dSAndroid Build Coastguard Worker test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3775*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 3776*a67afe4dSAndroid Build Coastguard Worker*** ERROR, $lockfile contains: 3777*a67afe4dSAndroid Build Coastguard Worker`cat $lockfile 2>/dev/null` 3778*a67afe4dSAndroid Build Coastguard Worker 3779*a67afe4dSAndroid Build Coastguard Workerbut it should contain: 3780*a67afe4dSAndroid Build Coastguard Worker$srcfile 3781*a67afe4dSAndroid Build Coastguard Worker 3782*a67afe4dSAndroid Build Coastguard WorkerThis indicates that another process is trying to use the same 3783*a67afe4dSAndroid Build Coastguard Workertemporary object file, and libtool could not work around it because 3784*a67afe4dSAndroid Build Coastguard Workeryour compiler does not support '-c' and '-o' together. If you 3785*a67afe4dSAndroid Build Coastguard Workerrepeat this compilation, it may succeed, by chance, but you had better 3786*a67afe4dSAndroid Build Coastguard Workeravoid parallel builds (make -j) in this platform, or get a better 3787*a67afe4dSAndroid Build Coastguard Workercompiler." 3788*a67afe4dSAndroid Build Coastguard Worker 3789*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 3790*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_FAILURE 3791*a67afe4dSAndroid Build Coastguard Worker fi 3792*a67afe4dSAndroid Build Coastguard Worker 3793*a67afe4dSAndroid Build Coastguard Worker # Just move the object if needed, then go on to compile the next one 3794*a67afe4dSAndroid Build Coastguard Worker if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3795*a67afe4dSAndroid Build Coastguard Worker func_show_eval '$MV "$output_obj" "$lobj"' \ 3796*a67afe4dSAndroid Build Coastguard Worker 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3797*a67afe4dSAndroid Build Coastguard Worker fi 3798*a67afe4dSAndroid Build Coastguard Worker 3799*a67afe4dSAndroid Build Coastguard Worker # Allow error messages only from the first compilation. 3800*a67afe4dSAndroid Build Coastguard Worker if test yes = "$suppress_opt"; then 3801*a67afe4dSAndroid Build Coastguard Worker suppress_output=' >/dev/null 2>&1' 3802*a67afe4dSAndroid Build Coastguard Worker fi 3803*a67afe4dSAndroid Build Coastguard Worker fi 3804*a67afe4dSAndroid Build Coastguard Worker 3805*a67afe4dSAndroid Build Coastguard Worker # Only build a position-dependent object if we build old libraries. 3806*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 3807*a67afe4dSAndroid Build Coastguard Worker if test yes != "$pic_mode"; then 3808*a67afe4dSAndroid Build Coastguard Worker # Don't build PIC code 3809*a67afe4dSAndroid Build Coastguard Worker command="$base_compile $qsrcfile$pie_flag" 3810*a67afe4dSAndroid Build Coastguard Worker else 3811*a67afe4dSAndroid Build Coastguard Worker command="$base_compile $qsrcfile $pic_flag" 3812*a67afe4dSAndroid Build Coastguard Worker fi 3813*a67afe4dSAndroid Build Coastguard Worker if test yes = "$compiler_c_o"; then 3814*a67afe4dSAndroid Build Coastguard Worker func_append command " -o $obj" 3815*a67afe4dSAndroid Build Coastguard Worker fi 3816*a67afe4dSAndroid Build Coastguard Worker 3817*a67afe4dSAndroid Build Coastguard Worker # Suppress compiler output if we already did a PIC compilation. 3818*a67afe4dSAndroid Build Coastguard Worker func_append command "$suppress_output" 3819*a67afe4dSAndroid Build Coastguard Worker func_show_eval_locale "$command" \ 3820*a67afe4dSAndroid Build Coastguard Worker '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3821*a67afe4dSAndroid Build Coastguard Worker 3822*a67afe4dSAndroid Build Coastguard Worker if test warn = "$need_locks" && 3823*a67afe4dSAndroid Build Coastguard Worker test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3824*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 3825*a67afe4dSAndroid Build Coastguard Worker*** ERROR, $lockfile contains: 3826*a67afe4dSAndroid Build Coastguard Worker`cat $lockfile 2>/dev/null` 3827*a67afe4dSAndroid Build Coastguard Worker 3828*a67afe4dSAndroid Build Coastguard Workerbut it should contain: 3829*a67afe4dSAndroid Build Coastguard Worker$srcfile 3830*a67afe4dSAndroid Build Coastguard Worker 3831*a67afe4dSAndroid Build Coastguard WorkerThis indicates that another process is trying to use the same 3832*a67afe4dSAndroid Build Coastguard Workertemporary object file, and libtool could not work around it because 3833*a67afe4dSAndroid Build Coastguard Workeryour compiler does not support '-c' and '-o' together. If you 3834*a67afe4dSAndroid Build Coastguard Workerrepeat this compilation, it may succeed, by chance, but you had better 3835*a67afe4dSAndroid Build Coastguard Workeravoid parallel builds (make -j) in this platform, or get a better 3836*a67afe4dSAndroid Build Coastguard Workercompiler." 3837*a67afe4dSAndroid Build Coastguard Worker 3838*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 3839*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_FAILURE 3840*a67afe4dSAndroid Build Coastguard Worker fi 3841*a67afe4dSAndroid Build Coastguard Worker 3842*a67afe4dSAndroid Build Coastguard Worker # Just move the object if needed 3843*a67afe4dSAndroid Build Coastguard Worker if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3844*a67afe4dSAndroid Build Coastguard Worker func_show_eval '$MV "$output_obj" "$obj"' \ 3845*a67afe4dSAndroid Build Coastguard Worker 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3846*a67afe4dSAndroid Build Coastguard Worker fi 3847*a67afe4dSAndroid Build Coastguard Worker fi 3848*a67afe4dSAndroid Build Coastguard Worker 3849*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 3850*a67afe4dSAndroid Build Coastguard Worker func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3851*a67afe4dSAndroid Build Coastguard Worker 3852*a67afe4dSAndroid Build Coastguard Worker # Unlock the critical section if it was locked 3853*a67afe4dSAndroid Build Coastguard Worker if test no != "$need_locks"; then 3854*a67afe4dSAndroid Build Coastguard Worker removelist=$lockfile 3855*a67afe4dSAndroid Build Coastguard Worker $RM "$lockfile" 3856*a67afe4dSAndroid Build Coastguard Worker fi 3857*a67afe4dSAndroid Build Coastguard Worker } 3858*a67afe4dSAndroid Build Coastguard Worker 3859*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 3860*a67afe4dSAndroid Build Coastguard Worker} 3861*a67afe4dSAndroid Build Coastguard Worker 3862*a67afe4dSAndroid Build Coastguard Worker$opt_help || { 3863*a67afe4dSAndroid Build Coastguard Worker test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3864*a67afe4dSAndroid Build Coastguard Worker} 3865*a67afe4dSAndroid Build Coastguard Worker 3866*a67afe4dSAndroid Build Coastguard Workerfunc_mode_help () 3867*a67afe4dSAndroid Build Coastguard Worker{ 3868*a67afe4dSAndroid Build Coastguard Worker # We need to display help for each of the modes. 3869*a67afe4dSAndroid Build Coastguard Worker case $opt_mode in 3870*a67afe4dSAndroid Build Coastguard Worker "") 3871*a67afe4dSAndroid Build Coastguard Worker # Generic help is extracted from the usage comments 3872*a67afe4dSAndroid Build Coastguard Worker # at the start of this file. 3873*a67afe4dSAndroid Build Coastguard Worker func_help 3874*a67afe4dSAndroid Build Coastguard Worker ;; 3875*a67afe4dSAndroid Build Coastguard Worker 3876*a67afe4dSAndroid Build Coastguard Worker clean) 3877*a67afe4dSAndroid Build Coastguard Worker $ECHO \ 3878*a67afe4dSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 3879*a67afe4dSAndroid Build Coastguard Worker 3880*a67afe4dSAndroid Build Coastguard WorkerRemove files from the build directory. 3881*a67afe4dSAndroid Build Coastguard Worker 3882*a67afe4dSAndroid Build Coastguard WorkerRM is the name of the program to use to delete files associated with each FILE 3883*a67afe4dSAndroid Build Coastguard Worker(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3884*a67afe4dSAndroid Build Coastguard Workerto RM. 3885*a67afe4dSAndroid Build Coastguard Worker 3886*a67afe4dSAndroid Build Coastguard WorkerIf FILE is a libtool library, object or program, all the files associated 3887*a67afe4dSAndroid Build Coastguard Workerwith it are deleted. Otherwise, only FILE itself is deleted using RM." 3888*a67afe4dSAndroid Build Coastguard Worker ;; 3889*a67afe4dSAndroid Build Coastguard Worker 3890*a67afe4dSAndroid Build Coastguard Worker compile) 3891*a67afe4dSAndroid Build Coastguard Worker $ECHO \ 3892*a67afe4dSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 3893*a67afe4dSAndroid Build Coastguard Worker 3894*a67afe4dSAndroid Build Coastguard WorkerCompile a source file into a libtool library object. 3895*a67afe4dSAndroid Build Coastguard Worker 3896*a67afe4dSAndroid Build Coastguard WorkerThis mode accepts the following additional options: 3897*a67afe4dSAndroid Build Coastguard Worker 3898*a67afe4dSAndroid Build Coastguard Worker -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3899*a67afe4dSAndroid Build Coastguard Worker -no-suppress do not suppress compiler output for multiple passes 3900*a67afe4dSAndroid Build Coastguard Worker -prefer-pic try to build PIC objects only 3901*a67afe4dSAndroid Build Coastguard Worker -prefer-non-pic try to build non-PIC objects only 3902*a67afe4dSAndroid Build Coastguard Worker -shared do not build a '.o' file suitable for static linking 3903*a67afe4dSAndroid Build Coastguard Worker -static only build a '.o' file suitable for static linking 3904*a67afe4dSAndroid Build Coastguard Worker -Wc,FLAG 3905*a67afe4dSAndroid Build Coastguard Worker -Xcompiler FLAG pass FLAG directly to the compiler 3906*a67afe4dSAndroid Build Coastguard Worker 3907*a67afe4dSAndroid Build Coastguard WorkerCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3908*a67afe4dSAndroid Build Coastguard Workerfrom the given SOURCEFILE. 3909*a67afe4dSAndroid Build Coastguard Worker 3910*a67afe4dSAndroid Build Coastguard WorkerThe output file name is determined by removing the directory component from 3911*a67afe4dSAndroid Build Coastguard WorkerSOURCEFILE, then substituting the C source code suffix '.c' with the 3912*a67afe4dSAndroid Build Coastguard Workerlibrary object suffix, '.lo'." 3913*a67afe4dSAndroid Build Coastguard Worker ;; 3914*a67afe4dSAndroid Build Coastguard Worker 3915*a67afe4dSAndroid Build Coastguard Worker execute) 3916*a67afe4dSAndroid Build Coastguard Worker $ECHO \ 3917*a67afe4dSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 3918*a67afe4dSAndroid Build Coastguard Worker 3919*a67afe4dSAndroid Build Coastguard WorkerAutomatically set library path, then run a program. 3920*a67afe4dSAndroid Build Coastguard Worker 3921*a67afe4dSAndroid Build Coastguard WorkerThis mode accepts the following additional options: 3922*a67afe4dSAndroid Build Coastguard Worker 3923*a67afe4dSAndroid Build Coastguard Worker -dlopen FILE add the directory containing FILE to the library path 3924*a67afe4dSAndroid Build Coastguard Worker 3925*a67afe4dSAndroid Build Coastguard WorkerThis mode sets the library path environment variable according to '-dlopen' 3926*a67afe4dSAndroid Build Coastguard Workerflags. 3927*a67afe4dSAndroid Build Coastguard Worker 3928*a67afe4dSAndroid Build Coastguard WorkerIf any of the ARGS are libtool executable wrappers, then they are translated 3929*a67afe4dSAndroid Build Coastguard Workerinto their corresponding uninstalled binary, and any of their required library 3930*a67afe4dSAndroid Build Coastguard Workerdirectories are added to the library path. 3931*a67afe4dSAndroid Build Coastguard Worker 3932*a67afe4dSAndroid Build Coastguard WorkerThen, COMMAND is executed, with ARGS as arguments." 3933*a67afe4dSAndroid Build Coastguard Worker ;; 3934*a67afe4dSAndroid Build Coastguard Worker 3935*a67afe4dSAndroid Build Coastguard Worker finish) 3936*a67afe4dSAndroid Build Coastguard Worker $ECHO \ 3937*a67afe4dSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 3938*a67afe4dSAndroid Build Coastguard Worker 3939*a67afe4dSAndroid Build Coastguard WorkerComplete the installation of libtool libraries. 3940*a67afe4dSAndroid Build Coastguard Worker 3941*a67afe4dSAndroid Build Coastguard WorkerEach LIBDIR is a directory that contains libtool libraries. 3942*a67afe4dSAndroid Build Coastguard Worker 3943*a67afe4dSAndroid Build Coastguard WorkerThe commands that this mode executes may require superuser privileges. Use 3944*a67afe4dSAndroid Build Coastguard Workerthe '--dry-run' option if you just want to see what would be executed." 3945*a67afe4dSAndroid Build Coastguard Worker ;; 3946*a67afe4dSAndroid Build Coastguard Worker 3947*a67afe4dSAndroid Build Coastguard Worker install) 3948*a67afe4dSAndroid Build Coastguard Worker $ECHO \ 3949*a67afe4dSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 3950*a67afe4dSAndroid Build Coastguard Worker 3951*a67afe4dSAndroid Build Coastguard WorkerInstall executables or libraries. 3952*a67afe4dSAndroid Build Coastguard Worker 3953*a67afe4dSAndroid Build Coastguard WorkerINSTALL-COMMAND is the installation command. The first component should be 3954*a67afe4dSAndroid Build Coastguard Workereither the 'install' or 'cp' program. 3955*a67afe4dSAndroid Build Coastguard Worker 3956*a67afe4dSAndroid Build Coastguard WorkerThe following components of INSTALL-COMMAND are treated specially: 3957*a67afe4dSAndroid Build Coastguard Worker 3958*a67afe4dSAndroid Build Coastguard Worker -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 3959*a67afe4dSAndroid Build Coastguard Worker 3960*a67afe4dSAndroid Build Coastguard WorkerThe rest of the components are interpreted as arguments to that command (only 3961*a67afe4dSAndroid Build Coastguard WorkerBSD-compatible install options are recognized)." 3962*a67afe4dSAndroid Build Coastguard Worker ;; 3963*a67afe4dSAndroid Build Coastguard Worker 3964*a67afe4dSAndroid Build Coastguard Worker link) 3965*a67afe4dSAndroid Build Coastguard Worker $ECHO \ 3966*a67afe4dSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 3967*a67afe4dSAndroid Build Coastguard Worker 3968*a67afe4dSAndroid Build Coastguard WorkerLink object files or libraries together to form another library, or to 3969*a67afe4dSAndroid Build Coastguard Workercreate an executable program. 3970*a67afe4dSAndroid Build Coastguard Worker 3971*a67afe4dSAndroid Build Coastguard WorkerLINK-COMMAND is a command using the C compiler that you would use to create 3972*a67afe4dSAndroid Build Coastguard Workera program from several object files. 3973*a67afe4dSAndroid Build Coastguard Worker 3974*a67afe4dSAndroid Build Coastguard WorkerThe following components of LINK-COMMAND are treated specially: 3975*a67afe4dSAndroid Build Coastguard Worker 3976*a67afe4dSAndroid Build Coastguard Worker -all-static do not do any dynamic linking at all 3977*a67afe4dSAndroid Build Coastguard Worker -avoid-version do not add a version suffix if possible 3978*a67afe4dSAndroid Build Coastguard Worker -bindir BINDIR specify path to binaries directory (for systems where 3979*a67afe4dSAndroid Build Coastguard Worker libraries must be found in the PATH setting at runtime) 3980*a67afe4dSAndroid Build Coastguard Worker -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3981*a67afe4dSAndroid Build Coastguard Worker -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3982*a67afe4dSAndroid Build Coastguard Worker -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3983*a67afe4dSAndroid Build Coastguard Worker -export-symbols SYMFILE 3984*a67afe4dSAndroid Build Coastguard Worker try to export only the symbols listed in SYMFILE 3985*a67afe4dSAndroid Build Coastguard Worker -export-symbols-regex REGEX 3986*a67afe4dSAndroid Build Coastguard Worker try to export only the symbols matching REGEX 3987*a67afe4dSAndroid Build Coastguard Worker -LLIBDIR search LIBDIR for required installed libraries 3988*a67afe4dSAndroid Build Coastguard Worker -lNAME OUTPUT-FILE requires the installed library libNAME 3989*a67afe4dSAndroid Build Coastguard Worker -module build a library that can dlopened 3990*a67afe4dSAndroid Build Coastguard Worker -no-fast-install disable the fast-install mode 3991*a67afe4dSAndroid Build Coastguard Worker -no-install link a not-installable executable 3992*a67afe4dSAndroid Build Coastguard Worker -no-undefined declare that a library does not refer to external symbols 3993*a67afe4dSAndroid Build Coastguard Worker -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 3994*a67afe4dSAndroid Build Coastguard Worker -objectlist FILE use a list of object files found in FILE to specify objects 3995*a67afe4dSAndroid Build Coastguard Worker -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3996*a67afe4dSAndroid Build Coastguard Worker -precious-files-regex REGEX 3997*a67afe4dSAndroid Build Coastguard Worker don't remove output files matching REGEX 3998*a67afe4dSAndroid Build Coastguard Worker -release RELEASE specify package release information 3999*a67afe4dSAndroid Build Coastguard Worker -rpath LIBDIR the created library will eventually be installed in LIBDIR 4000*a67afe4dSAndroid Build Coastguard Worker -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 4001*a67afe4dSAndroid Build Coastguard Worker -shared only do dynamic linking of libtool libraries 4002*a67afe4dSAndroid Build Coastguard Worker -shrext SUFFIX override the standard shared library file extension 4003*a67afe4dSAndroid Build Coastguard Worker -static do not do any dynamic linking of uninstalled libtool libraries 4004*a67afe4dSAndroid Build Coastguard Worker -static-libtool-libs 4005*a67afe4dSAndroid Build Coastguard Worker do not do any dynamic linking of libtool libraries 4006*a67afe4dSAndroid Build Coastguard Worker -version-info CURRENT[:REVISION[:AGE]] 4007*a67afe4dSAndroid Build Coastguard Worker specify library version info [each variable defaults to 0] 4008*a67afe4dSAndroid Build Coastguard Worker -weak LIBNAME declare that the target provides the LIBNAME interface 4009*a67afe4dSAndroid Build Coastguard Worker -Wc,FLAG 4010*a67afe4dSAndroid Build Coastguard Worker -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 4011*a67afe4dSAndroid Build Coastguard Worker -Wa,FLAG 4012*a67afe4dSAndroid Build Coastguard Worker -Xassembler FLAG pass linker-specific FLAG directly to the assembler 4013*a67afe4dSAndroid Build Coastguard Worker -Wl,FLAG 4014*a67afe4dSAndroid Build Coastguard Worker -Xlinker FLAG pass linker-specific FLAG directly to the linker 4015*a67afe4dSAndroid Build Coastguard Worker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 4016*a67afe4dSAndroid Build Coastguard Worker 4017*a67afe4dSAndroid Build Coastguard WorkerAll other options (arguments beginning with '-') are ignored. 4018*a67afe4dSAndroid Build Coastguard Worker 4019*a67afe4dSAndroid Build Coastguard WorkerEvery other argument is treated as a filename. Files ending in '.la' are 4020*a67afe4dSAndroid Build Coastguard Workertreated as uninstalled libtool libraries, other files are standard or library 4021*a67afe4dSAndroid Build Coastguard Workerobject files. 4022*a67afe4dSAndroid Build Coastguard Worker 4023*a67afe4dSAndroid Build Coastguard WorkerIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 4024*a67afe4dSAndroid Build Coastguard Workeronly library objects ('.lo' files) may be specified, and '-rpath' is 4025*a67afe4dSAndroid Build Coastguard Workerrequired, except when creating a convenience library. 4026*a67afe4dSAndroid Build Coastguard Worker 4027*a67afe4dSAndroid Build Coastguard WorkerIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 4028*a67afe4dSAndroid Build Coastguard Workerusing 'ar' and 'ranlib', or on Windows using 'lib'. 4029*a67afe4dSAndroid Build Coastguard Worker 4030*a67afe4dSAndroid Build Coastguard WorkerIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 4031*a67afe4dSAndroid Build Coastguard Workeris created, otherwise an executable program is created." 4032*a67afe4dSAndroid Build Coastguard Worker ;; 4033*a67afe4dSAndroid Build Coastguard Worker 4034*a67afe4dSAndroid Build Coastguard Worker uninstall) 4035*a67afe4dSAndroid Build Coastguard Worker $ECHO \ 4036*a67afe4dSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 4037*a67afe4dSAndroid Build Coastguard Worker 4038*a67afe4dSAndroid Build Coastguard WorkerRemove libraries from an installation directory. 4039*a67afe4dSAndroid Build Coastguard Worker 4040*a67afe4dSAndroid Build Coastguard WorkerRM is the name of the program to use to delete files associated with each FILE 4041*a67afe4dSAndroid Build Coastguard Worker(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 4042*a67afe4dSAndroid Build Coastguard Workerto RM. 4043*a67afe4dSAndroid Build Coastguard Worker 4044*a67afe4dSAndroid Build Coastguard WorkerIf FILE is a libtool library, all the files associated with it are deleted. 4045*a67afe4dSAndroid Build Coastguard WorkerOtherwise, only FILE itself is deleted using RM." 4046*a67afe4dSAndroid Build Coastguard Worker ;; 4047*a67afe4dSAndroid Build Coastguard Worker 4048*a67afe4dSAndroid Build Coastguard Worker *) 4049*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "invalid operation mode '$opt_mode'" 4050*a67afe4dSAndroid Build Coastguard Worker ;; 4051*a67afe4dSAndroid Build Coastguard Worker esac 4052*a67afe4dSAndroid Build Coastguard Worker 4053*a67afe4dSAndroid Build Coastguard Worker echo 4054*a67afe4dSAndroid Build Coastguard Worker $ECHO "Try '$progname --help' for more information about other modes." 4055*a67afe4dSAndroid Build Coastguard Worker} 4056*a67afe4dSAndroid Build Coastguard Worker 4057*a67afe4dSAndroid Build Coastguard Worker# Now that we've collected a possible --mode arg, show help if necessary 4058*a67afe4dSAndroid Build Coastguard Workerif $opt_help; then 4059*a67afe4dSAndroid Build Coastguard Worker if test : = "$opt_help"; then 4060*a67afe4dSAndroid Build Coastguard Worker func_mode_help 4061*a67afe4dSAndroid Build Coastguard Worker else 4062*a67afe4dSAndroid Build Coastguard Worker { 4063*a67afe4dSAndroid Build Coastguard Worker func_help noexit 4064*a67afe4dSAndroid Build Coastguard Worker for opt_mode in compile link execute install finish uninstall clean; do 4065*a67afe4dSAndroid Build Coastguard Worker func_mode_help 4066*a67afe4dSAndroid Build Coastguard Worker done 4067*a67afe4dSAndroid Build Coastguard Worker } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 4068*a67afe4dSAndroid Build Coastguard Worker { 4069*a67afe4dSAndroid Build Coastguard Worker func_help noexit 4070*a67afe4dSAndroid Build Coastguard Worker for opt_mode in compile link execute install finish uninstall clean; do 4071*a67afe4dSAndroid Build Coastguard Worker echo 4072*a67afe4dSAndroid Build Coastguard Worker func_mode_help 4073*a67afe4dSAndroid Build Coastguard Worker done 4074*a67afe4dSAndroid Build Coastguard Worker } | 4075*a67afe4dSAndroid Build Coastguard Worker $SED '1d 4076*a67afe4dSAndroid Build Coastguard Worker /^When reporting/,/^Report/{ 4077*a67afe4dSAndroid Build Coastguard Worker H 4078*a67afe4dSAndroid Build Coastguard Worker d 4079*a67afe4dSAndroid Build Coastguard Worker } 4080*a67afe4dSAndroid Build Coastguard Worker $x 4081*a67afe4dSAndroid Build Coastguard Worker /information about other modes/d 4082*a67afe4dSAndroid Build Coastguard Worker /more detailed .*MODE/d 4083*a67afe4dSAndroid Build Coastguard Worker s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 4084*a67afe4dSAndroid Build Coastguard Worker fi 4085*a67afe4dSAndroid Build Coastguard Worker exit $? 4086*a67afe4dSAndroid Build Coastguard Workerfi 4087*a67afe4dSAndroid Build Coastguard Worker 4088*a67afe4dSAndroid Build Coastguard Worker 4089*a67afe4dSAndroid Build Coastguard Worker# func_mode_execute arg... 4090*a67afe4dSAndroid Build Coastguard Workerfunc_mode_execute () 4091*a67afe4dSAndroid Build Coastguard Worker{ 4092*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 4093*a67afe4dSAndroid Build Coastguard Worker 4094*a67afe4dSAndroid Build Coastguard Worker # The first argument is the command name. 4095*a67afe4dSAndroid Build Coastguard Worker cmd=$nonopt 4096*a67afe4dSAndroid Build Coastguard Worker test -z "$cmd" && \ 4097*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "you must specify a COMMAND" 4098*a67afe4dSAndroid Build Coastguard Worker 4099*a67afe4dSAndroid Build Coastguard Worker # Handle -dlopen flags immediately. 4100*a67afe4dSAndroid Build Coastguard Worker for file in $opt_dlopen; do 4101*a67afe4dSAndroid Build Coastguard Worker test -f "$file" \ 4102*a67afe4dSAndroid Build Coastguard Worker || func_fatal_help "'$file' is not a file" 4103*a67afe4dSAndroid Build Coastguard Worker 4104*a67afe4dSAndroid Build Coastguard Worker dir= 4105*a67afe4dSAndroid Build Coastguard Worker case $file in 4106*a67afe4dSAndroid Build Coastguard Worker *.la) 4107*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$file" 4108*a67afe4dSAndroid Build Coastguard Worker file=$func_resolve_sysroot_result 4109*a67afe4dSAndroid Build Coastguard Worker 4110*a67afe4dSAndroid Build Coastguard Worker # Check to see that this really is a libtool archive. 4111*a67afe4dSAndroid Build Coastguard Worker func_lalib_unsafe_p "$file" \ 4112*a67afe4dSAndroid Build Coastguard Worker || func_fatal_help "'$lib' is not a valid libtool archive" 4113*a67afe4dSAndroid Build Coastguard Worker 4114*a67afe4dSAndroid Build Coastguard Worker # Read the libtool library. 4115*a67afe4dSAndroid Build Coastguard Worker dlname= 4116*a67afe4dSAndroid Build Coastguard Worker library_names= 4117*a67afe4dSAndroid Build Coastguard Worker func_source "$file" 4118*a67afe4dSAndroid Build Coastguard Worker 4119*a67afe4dSAndroid Build Coastguard Worker # Skip this library if it cannot be dlopened. 4120*a67afe4dSAndroid Build Coastguard Worker if test -z "$dlname"; then 4121*a67afe4dSAndroid Build Coastguard Worker # Warn if it was a shared library. 4122*a67afe4dSAndroid Build Coastguard Worker test -n "$library_names" && \ 4123*a67afe4dSAndroid Build Coastguard Worker func_warning "'$file' was not linked with '-export-dynamic'" 4124*a67afe4dSAndroid Build Coastguard Worker continue 4125*a67afe4dSAndroid Build Coastguard Worker fi 4126*a67afe4dSAndroid Build Coastguard Worker 4127*a67afe4dSAndroid Build Coastguard Worker func_dirname "$file" "" "." 4128*a67afe4dSAndroid Build Coastguard Worker dir=$func_dirname_result 4129*a67afe4dSAndroid Build Coastguard Worker 4130*a67afe4dSAndroid Build Coastguard Worker if test -f "$dir/$objdir/$dlname"; then 4131*a67afe4dSAndroid Build Coastguard Worker func_append dir "/$objdir" 4132*a67afe4dSAndroid Build Coastguard Worker else 4133*a67afe4dSAndroid Build Coastguard Worker if test ! -f "$dir/$dlname"; then 4134*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 4135*a67afe4dSAndroid Build Coastguard Worker fi 4136*a67afe4dSAndroid Build Coastguard Worker fi 4137*a67afe4dSAndroid Build Coastguard Worker ;; 4138*a67afe4dSAndroid Build Coastguard Worker 4139*a67afe4dSAndroid Build Coastguard Worker *.lo) 4140*a67afe4dSAndroid Build Coastguard Worker # Just add the directory containing the .lo file. 4141*a67afe4dSAndroid Build Coastguard Worker func_dirname "$file" "" "." 4142*a67afe4dSAndroid Build Coastguard Worker dir=$func_dirname_result 4143*a67afe4dSAndroid Build Coastguard Worker ;; 4144*a67afe4dSAndroid Build Coastguard Worker 4145*a67afe4dSAndroid Build Coastguard Worker *) 4146*a67afe4dSAndroid Build Coastguard Worker func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 4147*a67afe4dSAndroid Build Coastguard Worker continue 4148*a67afe4dSAndroid Build Coastguard Worker ;; 4149*a67afe4dSAndroid Build Coastguard Worker esac 4150*a67afe4dSAndroid Build Coastguard Worker 4151*a67afe4dSAndroid Build Coastguard Worker # Get the absolute pathname. 4152*a67afe4dSAndroid Build Coastguard Worker absdir=`cd "$dir" && pwd` 4153*a67afe4dSAndroid Build Coastguard Worker test -n "$absdir" && dir=$absdir 4154*a67afe4dSAndroid Build Coastguard Worker 4155*a67afe4dSAndroid Build Coastguard Worker # Now add the directory to shlibpath_var. 4156*a67afe4dSAndroid Build Coastguard Worker if eval "test -z \"\$$shlibpath_var\""; then 4157*a67afe4dSAndroid Build Coastguard Worker eval "$shlibpath_var=\"\$dir\"" 4158*a67afe4dSAndroid Build Coastguard Worker else 4159*a67afe4dSAndroid Build Coastguard Worker eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 4160*a67afe4dSAndroid Build Coastguard Worker fi 4161*a67afe4dSAndroid Build Coastguard Worker done 4162*a67afe4dSAndroid Build Coastguard Worker 4163*a67afe4dSAndroid Build Coastguard Worker # This variable tells wrapper scripts just to set shlibpath_var 4164*a67afe4dSAndroid Build Coastguard Worker # rather than running their programs. 4165*a67afe4dSAndroid Build Coastguard Worker libtool_execute_magic=$magic 4166*a67afe4dSAndroid Build Coastguard Worker 4167*a67afe4dSAndroid Build Coastguard Worker # Check if any of the arguments is a wrapper script. 4168*a67afe4dSAndroid Build Coastguard Worker args= 4169*a67afe4dSAndroid Build Coastguard Worker for file 4170*a67afe4dSAndroid Build Coastguard Worker do 4171*a67afe4dSAndroid Build Coastguard Worker case $file in 4172*a67afe4dSAndroid Build Coastguard Worker -* | *.la | *.lo ) ;; 4173*a67afe4dSAndroid Build Coastguard Worker *) 4174*a67afe4dSAndroid Build Coastguard Worker # Do a test to see if this is really a libtool program. 4175*a67afe4dSAndroid Build Coastguard Worker if func_ltwrapper_script_p "$file"; then 4176*a67afe4dSAndroid Build Coastguard Worker func_source "$file" 4177*a67afe4dSAndroid Build Coastguard Worker # Transform arg to wrapped name. 4178*a67afe4dSAndroid Build Coastguard Worker file=$progdir/$program 4179*a67afe4dSAndroid Build Coastguard Worker elif func_ltwrapper_executable_p "$file"; then 4180*a67afe4dSAndroid Build Coastguard Worker func_ltwrapper_scriptname "$file" 4181*a67afe4dSAndroid Build Coastguard Worker func_source "$func_ltwrapper_scriptname_result" 4182*a67afe4dSAndroid Build Coastguard Worker # Transform arg to wrapped name. 4183*a67afe4dSAndroid Build Coastguard Worker file=$progdir/$program 4184*a67afe4dSAndroid Build Coastguard Worker fi 4185*a67afe4dSAndroid Build Coastguard Worker ;; 4186*a67afe4dSAndroid Build Coastguard Worker esac 4187*a67afe4dSAndroid Build Coastguard Worker # Quote arguments (to preserve shell metacharacters). 4188*a67afe4dSAndroid Build Coastguard Worker func_append_quoted args "$file" 4189*a67afe4dSAndroid Build Coastguard Worker done 4190*a67afe4dSAndroid Build Coastguard Worker 4191*a67afe4dSAndroid Build Coastguard Worker if $opt_dry_run; then 4192*a67afe4dSAndroid Build Coastguard Worker # Display what would be done. 4193*a67afe4dSAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 4194*a67afe4dSAndroid Build Coastguard Worker eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 4195*a67afe4dSAndroid Build Coastguard Worker echo "export $shlibpath_var" 4196*a67afe4dSAndroid Build Coastguard Worker fi 4197*a67afe4dSAndroid Build Coastguard Worker $ECHO "$cmd$args" 4198*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 4199*a67afe4dSAndroid Build Coastguard Worker else 4200*a67afe4dSAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 4201*a67afe4dSAndroid Build Coastguard Worker # Export the shlibpath_var. 4202*a67afe4dSAndroid Build Coastguard Worker eval "export $shlibpath_var" 4203*a67afe4dSAndroid Build Coastguard Worker fi 4204*a67afe4dSAndroid Build Coastguard Worker 4205*a67afe4dSAndroid Build Coastguard Worker # Restore saved environment variables 4206*a67afe4dSAndroid Build Coastguard Worker for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 4207*a67afe4dSAndroid Build Coastguard Worker do 4208*a67afe4dSAndroid Build Coastguard Worker eval "if test \"\${save_$lt_var+set}\" = set; then 4209*a67afe4dSAndroid Build Coastguard Worker $lt_var=\$save_$lt_var; export $lt_var 4210*a67afe4dSAndroid Build Coastguard Worker else 4211*a67afe4dSAndroid Build Coastguard Worker $lt_unset $lt_var 4212*a67afe4dSAndroid Build Coastguard Worker fi" 4213*a67afe4dSAndroid Build Coastguard Worker done 4214*a67afe4dSAndroid Build Coastguard Worker 4215*a67afe4dSAndroid Build Coastguard Worker # Now prepare to actually exec the command. 4216*a67afe4dSAndroid Build Coastguard Worker exec_cmd=\$cmd$args 4217*a67afe4dSAndroid Build Coastguard Worker fi 4218*a67afe4dSAndroid Build Coastguard Worker} 4219*a67afe4dSAndroid Build Coastguard Worker 4220*a67afe4dSAndroid Build Coastguard Workertest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 4221*a67afe4dSAndroid Build Coastguard Worker 4222*a67afe4dSAndroid Build Coastguard Worker 4223*a67afe4dSAndroid Build Coastguard Worker# func_mode_finish arg... 4224*a67afe4dSAndroid Build Coastguard Workerfunc_mode_finish () 4225*a67afe4dSAndroid Build Coastguard Worker{ 4226*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 4227*a67afe4dSAndroid Build Coastguard Worker 4228*a67afe4dSAndroid Build Coastguard Worker libs= 4229*a67afe4dSAndroid Build Coastguard Worker libdirs= 4230*a67afe4dSAndroid Build Coastguard Worker admincmds= 4231*a67afe4dSAndroid Build Coastguard Worker 4232*a67afe4dSAndroid Build Coastguard Worker for opt in "$nonopt" ${1+"$@"} 4233*a67afe4dSAndroid Build Coastguard Worker do 4234*a67afe4dSAndroid Build Coastguard Worker if test -d "$opt"; then 4235*a67afe4dSAndroid Build Coastguard Worker func_append libdirs " $opt" 4236*a67afe4dSAndroid Build Coastguard Worker 4237*a67afe4dSAndroid Build Coastguard Worker elif test -f "$opt"; then 4238*a67afe4dSAndroid Build Coastguard Worker if func_lalib_unsafe_p "$opt"; then 4239*a67afe4dSAndroid Build Coastguard Worker func_append libs " $opt" 4240*a67afe4dSAndroid Build Coastguard Worker else 4241*a67afe4dSAndroid Build Coastguard Worker func_warning "'$opt' is not a valid libtool archive" 4242*a67afe4dSAndroid Build Coastguard Worker fi 4243*a67afe4dSAndroid Build Coastguard Worker 4244*a67afe4dSAndroid Build Coastguard Worker else 4245*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "invalid argument '$opt'" 4246*a67afe4dSAndroid Build Coastguard Worker fi 4247*a67afe4dSAndroid Build Coastguard Worker done 4248*a67afe4dSAndroid Build Coastguard Worker 4249*a67afe4dSAndroid Build Coastguard Worker if test -n "$libs"; then 4250*a67afe4dSAndroid Build Coastguard Worker if test -n "$lt_sysroot"; then 4251*a67afe4dSAndroid Build Coastguard Worker sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 4252*a67afe4dSAndroid Build Coastguard Worker sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 4253*a67afe4dSAndroid Build Coastguard Worker else 4254*a67afe4dSAndroid Build Coastguard Worker sysroot_cmd= 4255*a67afe4dSAndroid Build Coastguard Worker fi 4256*a67afe4dSAndroid Build Coastguard Worker 4257*a67afe4dSAndroid Build Coastguard Worker # Remove sysroot references 4258*a67afe4dSAndroid Build Coastguard Worker if $opt_dry_run; then 4259*a67afe4dSAndroid Build Coastguard Worker for lib in $libs; do 4260*a67afe4dSAndroid Build Coastguard Worker echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4261*a67afe4dSAndroid Build Coastguard Worker done 4262*a67afe4dSAndroid Build Coastguard Worker else 4263*a67afe4dSAndroid Build Coastguard Worker tmpdir=`func_mktempdir` 4264*a67afe4dSAndroid Build Coastguard Worker for lib in $libs; do 4265*a67afe4dSAndroid Build Coastguard Worker $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4266*a67afe4dSAndroid Build Coastguard Worker > $tmpdir/tmp-la 4267*a67afe4dSAndroid Build Coastguard Worker mv -f $tmpdir/tmp-la $lib 4268*a67afe4dSAndroid Build Coastguard Worker done 4269*a67afe4dSAndroid Build Coastguard Worker ${RM}r "$tmpdir" 4270*a67afe4dSAndroid Build Coastguard Worker fi 4271*a67afe4dSAndroid Build Coastguard Worker fi 4272*a67afe4dSAndroid Build Coastguard Worker 4273*a67afe4dSAndroid Build Coastguard Worker if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4274*a67afe4dSAndroid Build Coastguard Worker for libdir in $libdirs; do 4275*a67afe4dSAndroid Build Coastguard Worker if test -n "$finish_cmds"; then 4276*a67afe4dSAndroid Build Coastguard Worker # Do each command in the finish commands. 4277*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4278*a67afe4dSAndroid Build Coastguard Worker'"$cmd"'"' 4279*a67afe4dSAndroid Build Coastguard Worker fi 4280*a67afe4dSAndroid Build Coastguard Worker if test -n "$finish_eval"; then 4281*a67afe4dSAndroid Build Coastguard Worker # Do the single finish_eval. 4282*a67afe4dSAndroid Build Coastguard Worker eval cmds=\"$finish_eval\" 4283*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || eval "$cmds" || func_append admincmds " 4284*a67afe4dSAndroid Build Coastguard Worker $cmds" 4285*a67afe4dSAndroid Build Coastguard Worker fi 4286*a67afe4dSAndroid Build Coastguard Worker done 4287*a67afe4dSAndroid Build Coastguard Worker fi 4288*a67afe4dSAndroid Build Coastguard Worker 4289*a67afe4dSAndroid Build Coastguard Worker # Exit here if they wanted silent mode. 4290*a67afe4dSAndroid Build Coastguard Worker $opt_quiet && exit $EXIT_SUCCESS 4291*a67afe4dSAndroid Build Coastguard Worker 4292*a67afe4dSAndroid Build Coastguard Worker if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4293*a67afe4dSAndroid Build Coastguard Worker echo "----------------------------------------------------------------------" 4294*a67afe4dSAndroid Build Coastguard Worker echo "Libraries have been installed in:" 4295*a67afe4dSAndroid Build Coastguard Worker for libdir in $libdirs; do 4296*a67afe4dSAndroid Build Coastguard Worker $ECHO " $libdir" 4297*a67afe4dSAndroid Build Coastguard Worker done 4298*a67afe4dSAndroid Build Coastguard Worker echo 4299*a67afe4dSAndroid Build Coastguard Worker echo "If you ever happen to want to link against installed libraries" 4300*a67afe4dSAndroid Build Coastguard Worker echo "in a given directory, LIBDIR, you must either use libtool, and" 4301*a67afe4dSAndroid Build Coastguard Worker echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4302*a67afe4dSAndroid Build Coastguard Worker echo "flag during linking and do at least one of the following:" 4303*a67afe4dSAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 4304*a67afe4dSAndroid Build Coastguard Worker echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4305*a67afe4dSAndroid Build Coastguard Worker echo " during execution" 4306*a67afe4dSAndroid Build Coastguard Worker fi 4307*a67afe4dSAndroid Build Coastguard Worker if test -n "$runpath_var"; then 4308*a67afe4dSAndroid Build Coastguard Worker echo " - add LIBDIR to the '$runpath_var' environment variable" 4309*a67afe4dSAndroid Build Coastguard Worker echo " during linking" 4310*a67afe4dSAndroid Build Coastguard Worker fi 4311*a67afe4dSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 4312*a67afe4dSAndroid Build Coastguard Worker libdir=LIBDIR 4313*a67afe4dSAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 4314*a67afe4dSAndroid Build Coastguard Worker 4315*a67afe4dSAndroid Build Coastguard Worker $ECHO " - use the '$flag' linker flag" 4316*a67afe4dSAndroid Build Coastguard Worker fi 4317*a67afe4dSAndroid Build Coastguard Worker if test -n "$admincmds"; then 4318*a67afe4dSAndroid Build Coastguard Worker $ECHO " - have your system administrator run these commands:$admincmds" 4319*a67afe4dSAndroid Build Coastguard Worker fi 4320*a67afe4dSAndroid Build Coastguard Worker if test -f /etc/ld.so.conf; then 4321*a67afe4dSAndroid Build Coastguard Worker echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4322*a67afe4dSAndroid Build Coastguard Worker fi 4323*a67afe4dSAndroid Build Coastguard Worker echo 4324*a67afe4dSAndroid Build Coastguard Worker 4325*a67afe4dSAndroid Build Coastguard Worker echo "See any operating system documentation about shared libraries for" 4326*a67afe4dSAndroid Build Coastguard Worker case $host in 4327*a67afe4dSAndroid Build Coastguard Worker solaris2.[6789]|solaris2.1[0-9]) 4328*a67afe4dSAndroid Build Coastguard Worker echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4329*a67afe4dSAndroid Build Coastguard Worker echo "pages." 4330*a67afe4dSAndroid Build Coastguard Worker ;; 4331*a67afe4dSAndroid Build Coastguard Worker *) 4332*a67afe4dSAndroid Build Coastguard Worker echo "more information, such as the ld(1) and ld.so(8) manual pages." 4333*a67afe4dSAndroid Build Coastguard Worker ;; 4334*a67afe4dSAndroid Build Coastguard Worker esac 4335*a67afe4dSAndroid Build Coastguard Worker echo "----------------------------------------------------------------------" 4336*a67afe4dSAndroid Build Coastguard Worker fi 4337*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 4338*a67afe4dSAndroid Build Coastguard Worker} 4339*a67afe4dSAndroid Build Coastguard Worker 4340*a67afe4dSAndroid Build Coastguard Workertest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4341*a67afe4dSAndroid Build Coastguard Worker 4342*a67afe4dSAndroid Build Coastguard Worker 4343*a67afe4dSAndroid Build Coastguard Worker# func_mode_install arg... 4344*a67afe4dSAndroid Build Coastguard Workerfunc_mode_install () 4345*a67afe4dSAndroid Build Coastguard Worker{ 4346*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 4347*a67afe4dSAndroid Build Coastguard Worker 4348*a67afe4dSAndroid Build Coastguard Worker # There may be an optional sh(1) argument at the beginning of 4349*a67afe4dSAndroid Build Coastguard Worker # install_prog (especially on Windows NT). 4350*a67afe4dSAndroid Build Coastguard Worker if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4351*a67afe4dSAndroid Build Coastguard Worker # Allow the use of GNU shtool's install command. 4352*a67afe4dSAndroid Build Coastguard Worker case $nonopt in *shtool*) :;; *) false;; esac 4353*a67afe4dSAndroid Build Coastguard Worker then 4354*a67afe4dSAndroid Build Coastguard Worker # Aesthetically quote it. 4355*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$nonopt" 4356*a67afe4dSAndroid Build Coastguard Worker install_prog="$func_quote_arg_result " 4357*a67afe4dSAndroid Build Coastguard Worker arg=$1 4358*a67afe4dSAndroid Build Coastguard Worker shift 4359*a67afe4dSAndroid Build Coastguard Worker else 4360*a67afe4dSAndroid Build Coastguard Worker install_prog= 4361*a67afe4dSAndroid Build Coastguard Worker arg=$nonopt 4362*a67afe4dSAndroid Build Coastguard Worker fi 4363*a67afe4dSAndroid Build Coastguard Worker 4364*a67afe4dSAndroid Build Coastguard Worker # The real first argument should be the name of the installation program. 4365*a67afe4dSAndroid Build Coastguard Worker # Aesthetically quote it. 4366*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 4367*a67afe4dSAndroid Build Coastguard Worker func_append install_prog "$func_quote_arg_result" 4368*a67afe4dSAndroid Build Coastguard Worker install_shared_prog=$install_prog 4369*a67afe4dSAndroid Build Coastguard Worker case " $install_prog " in 4370*a67afe4dSAndroid Build Coastguard Worker *[\\\ /]cp\ *) install_cp=: ;; 4371*a67afe4dSAndroid Build Coastguard Worker *) install_cp=false ;; 4372*a67afe4dSAndroid Build Coastguard Worker esac 4373*a67afe4dSAndroid Build Coastguard Worker 4374*a67afe4dSAndroid Build Coastguard Worker # We need to accept at least all the BSD install flags. 4375*a67afe4dSAndroid Build Coastguard Worker dest= 4376*a67afe4dSAndroid Build Coastguard Worker files= 4377*a67afe4dSAndroid Build Coastguard Worker opts= 4378*a67afe4dSAndroid Build Coastguard Worker prev= 4379*a67afe4dSAndroid Build Coastguard Worker install_type= 4380*a67afe4dSAndroid Build Coastguard Worker isdir=false 4381*a67afe4dSAndroid Build Coastguard Worker stripme= 4382*a67afe4dSAndroid Build Coastguard Worker no_mode=: 4383*a67afe4dSAndroid Build Coastguard Worker for arg 4384*a67afe4dSAndroid Build Coastguard Worker do 4385*a67afe4dSAndroid Build Coastguard Worker arg2= 4386*a67afe4dSAndroid Build Coastguard Worker if test -n "$dest"; then 4387*a67afe4dSAndroid Build Coastguard Worker func_append files " $dest" 4388*a67afe4dSAndroid Build Coastguard Worker dest=$arg 4389*a67afe4dSAndroid Build Coastguard Worker continue 4390*a67afe4dSAndroid Build Coastguard Worker fi 4391*a67afe4dSAndroid Build Coastguard Worker 4392*a67afe4dSAndroid Build Coastguard Worker case $arg in 4393*a67afe4dSAndroid Build Coastguard Worker -d) isdir=: ;; 4394*a67afe4dSAndroid Build Coastguard Worker -f) 4395*a67afe4dSAndroid Build Coastguard Worker if $install_cp; then :; else 4396*a67afe4dSAndroid Build Coastguard Worker prev=$arg 4397*a67afe4dSAndroid Build Coastguard Worker fi 4398*a67afe4dSAndroid Build Coastguard Worker ;; 4399*a67afe4dSAndroid Build Coastguard Worker -g | -m | -o) 4400*a67afe4dSAndroid Build Coastguard Worker prev=$arg 4401*a67afe4dSAndroid Build Coastguard Worker ;; 4402*a67afe4dSAndroid Build Coastguard Worker -s) 4403*a67afe4dSAndroid Build Coastguard Worker stripme=" -s" 4404*a67afe4dSAndroid Build Coastguard Worker continue 4405*a67afe4dSAndroid Build Coastguard Worker ;; 4406*a67afe4dSAndroid Build Coastguard Worker -*) 4407*a67afe4dSAndroid Build Coastguard Worker ;; 4408*a67afe4dSAndroid Build Coastguard Worker *) 4409*a67afe4dSAndroid Build Coastguard Worker # If the previous option needed an argument, then skip it. 4410*a67afe4dSAndroid Build Coastguard Worker if test -n "$prev"; then 4411*a67afe4dSAndroid Build Coastguard Worker if test X-m = "X$prev" && test -n "$install_override_mode"; then 4412*a67afe4dSAndroid Build Coastguard Worker arg2=$install_override_mode 4413*a67afe4dSAndroid Build Coastguard Worker no_mode=false 4414*a67afe4dSAndroid Build Coastguard Worker fi 4415*a67afe4dSAndroid Build Coastguard Worker prev= 4416*a67afe4dSAndroid Build Coastguard Worker else 4417*a67afe4dSAndroid Build Coastguard Worker dest=$arg 4418*a67afe4dSAndroid Build Coastguard Worker continue 4419*a67afe4dSAndroid Build Coastguard Worker fi 4420*a67afe4dSAndroid Build Coastguard Worker ;; 4421*a67afe4dSAndroid Build Coastguard Worker esac 4422*a67afe4dSAndroid Build Coastguard Worker 4423*a67afe4dSAndroid Build Coastguard Worker # Aesthetically quote the argument. 4424*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 4425*a67afe4dSAndroid Build Coastguard Worker func_append install_prog " $func_quote_arg_result" 4426*a67afe4dSAndroid Build Coastguard Worker if test -n "$arg2"; then 4427*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$arg2" 4428*a67afe4dSAndroid Build Coastguard Worker fi 4429*a67afe4dSAndroid Build Coastguard Worker func_append install_shared_prog " $func_quote_arg_result" 4430*a67afe4dSAndroid Build Coastguard Worker done 4431*a67afe4dSAndroid Build Coastguard Worker 4432*a67afe4dSAndroid Build Coastguard Worker test -z "$install_prog" && \ 4433*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "you must specify an install program" 4434*a67afe4dSAndroid Build Coastguard Worker 4435*a67afe4dSAndroid Build Coastguard Worker test -n "$prev" && \ 4436*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "the '$prev' option requires an argument" 4437*a67afe4dSAndroid Build Coastguard Worker 4438*a67afe4dSAndroid Build Coastguard Worker if test -n "$install_override_mode" && $no_mode; then 4439*a67afe4dSAndroid Build Coastguard Worker if $install_cp; then :; else 4440*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$install_override_mode" 4441*a67afe4dSAndroid Build Coastguard Worker func_append install_shared_prog " -m $func_quote_arg_result" 4442*a67afe4dSAndroid Build Coastguard Worker fi 4443*a67afe4dSAndroid Build Coastguard Worker fi 4444*a67afe4dSAndroid Build Coastguard Worker 4445*a67afe4dSAndroid Build Coastguard Worker if test -z "$files"; then 4446*a67afe4dSAndroid Build Coastguard Worker if test -z "$dest"; then 4447*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "no file or destination specified" 4448*a67afe4dSAndroid Build Coastguard Worker else 4449*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "you must specify a destination" 4450*a67afe4dSAndroid Build Coastguard Worker fi 4451*a67afe4dSAndroid Build Coastguard Worker fi 4452*a67afe4dSAndroid Build Coastguard Worker 4453*a67afe4dSAndroid Build Coastguard Worker # Strip any trailing slash from the destination. 4454*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '/' "$dest" 4455*a67afe4dSAndroid Build Coastguard Worker dest=$func_stripname_result 4456*a67afe4dSAndroid Build Coastguard Worker 4457*a67afe4dSAndroid Build Coastguard Worker # Check to see that the destination is a directory. 4458*a67afe4dSAndroid Build Coastguard Worker test -d "$dest" && isdir=: 4459*a67afe4dSAndroid Build Coastguard Worker if $isdir; then 4460*a67afe4dSAndroid Build Coastguard Worker destdir=$dest 4461*a67afe4dSAndroid Build Coastguard Worker destname= 4462*a67afe4dSAndroid Build Coastguard Worker else 4463*a67afe4dSAndroid Build Coastguard Worker func_dirname_and_basename "$dest" "" "." 4464*a67afe4dSAndroid Build Coastguard Worker destdir=$func_dirname_result 4465*a67afe4dSAndroid Build Coastguard Worker destname=$func_basename_result 4466*a67afe4dSAndroid Build Coastguard Worker 4467*a67afe4dSAndroid Build Coastguard Worker # Not a directory, so check to see that there is only one file specified. 4468*a67afe4dSAndroid Build Coastguard Worker set dummy $files; shift 4469*a67afe4dSAndroid Build Coastguard Worker test "$#" -gt 1 && \ 4470*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "'$dest' is not a directory" 4471*a67afe4dSAndroid Build Coastguard Worker fi 4472*a67afe4dSAndroid Build Coastguard Worker case $destdir in 4473*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 4474*a67afe4dSAndroid Build Coastguard Worker *) 4475*a67afe4dSAndroid Build Coastguard Worker for file in $files; do 4476*a67afe4dSAndroid Build Coastguard Worker case $file in 4477*a67afe4dSAndroid Build Coastguard Worker *.lo) ;; 4478*a67afe4dSAndroid Build Coastguard Worker *) 4479*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "'$destdir' must be an absolute directory name" 4480*a67afe4dSAndroid Build Coastguard Worker ;; 4481*a67afe4dSAndroid Build Coastguard Worker esac 4482*a67afe4dSAndroid Build Coastguard Worker done 4483*a67afe4dSAndroid Build Coastguard Worker ;; 4484*a67afe4dSAndroid Build Coastguard Worker esac 4485*a67afe4dSAndroid Build Coastguard Worker 4486*a67afe4dSAndroid Build Coastguard Worker # This variable tells wrapper scripts just to set variables rather 4487*a67afe4dSAndroid Build Coastguard Worker # than running their programs. 4488*a67afe4dSAndroid Build Coastguard Worker libtool_install_magic=$magic 4489*a67afe4dSAndroid Build Coastguard Worker 4490*a67afe4dSAndroid Build Coastguard Worker staticlibs= 4491*a67afe4dSAndroid Build Coastguard Worker future_libdirs= 4492*a67afe4dSAndroid Build Coastguard Worker current_libdirs= 4493*a67afe4dSAndroid Build Coastguard Worker for file in $files; do 4494*a67afe4dSAndroid Build Coastguard Worker 4495*a67afe4dSAndroid Build Coastguard Worker # Do each installation. 4496*a67afe4dSAndroid Build Coastguard Worker case $file in 4497*a67afe4dSAndroid Build Coastguard Worker *.$libext) 4498*a67afe4dSAndroid Build Coastguard Worker # Do the static libraries later. 4499*a67afe4dSAndroid Build Coastguard Worker func_append staticlibs " $file" 4500*a67afe4dSAndroid Build Coastguard Worker ;; 4501*a67afe4dSAndroid Build Coastguard Worker 4502*a67afe4dSAndroid Build Coastguard Worker *.la) 4503*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$file" 4504*a67afe4dSAndroid Build Coastguard Worker file=$func_resolve_sysroot_result 4505*a67afe4dSAndroid Build Coastguard Worker 4506*a67afe4dSAndroid Build Coastguard Worker # Check to see that this really is a libtool archive. 4507*a67afe4dSAndroid Build Coastguard Worker func_lalib_unsafe_p "$file" \ 4508*a67afe4dSAndroid Build Coastguard Worker || func_fatal_help "'$file' is not a valid libtool archive" 4509*a67afe4dSAndroid Build Coastguard Worker 4510*a67afe4dSAndroid Build Coastguard Worker library_names= 4511*a67afe4dSAndroid Build Coastguard Worker old_library= 4512*a67afe4dSAndroid Build Coastguard Worker relink_command= 4513*a67afe4dSAndroid Build Coastguard Worker func_source "$file" 4514*a67afe4dSAndroid Build Coastguard Worker 4515*a67afe4dSAndroid Build Coastguard Worker # Add the libdir to current_libdirs if it is the destination. 4516*a67afe4dSAndroid Build Coastguard Worker if test "X$destdir" = "X$libdir"; then 4517*a67afe4dSAndroid Build Coastguard Worker case "$current_libdirs " in 4518*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 4519*a67afe4dSAndroid Build Coastguard Worker *) func_append current_libdirs " $libdir" ;; 4520*a67afe4dSAndroid Build Coastguard Worker esac 4521*a67afe4dSAndroid Build Coastguard Worker else 4522*a67afe4dSAndroid Build Coastguard Worker # Note the libdir as a future libdir. 4523*a67afe4dSAndroid Build Coastguard Worker case "$future_libdirs " in 4524*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 4525*a67afe4dSAndroid Build Coastguard Worker *) func_append future_libdirs " $libdir" ;; 4526*a67afe4dSAndroid Build Coastguard Worker esac 4527*a67afe4dSAndroid Build Coastguard Worker fi 4528*a67afe4dSAndroid Build Coastguard Worker 4529*a67afe4dSAndroid Build Coastguard Worker func_dirname "$file" "/" "" 4530*a67afe4dSAndroid Build Coastguard Worker dir=$func_dirname_result 4531*a67afe4dSAndroid Build Coastguard Worker func_append dir "$objdir" 4532*a67afe4dSAndroid Build Coastguard Worker 4533*a67afe4dSAndroid Build Coastguard Worker if test -n "$relink_command"; then 4534*a67afe4dSAndroid Build Coastguard Worker # Determine the prefix the user has applied to our future dir. 4535*a67afe4dSAndroid Build Coastguard Worker inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4536*a67afe4dSAndroid Build Coastguard Worker 4537*a67afe4dSAndroid Build Coastguard Worker # Don't allow the user to place us outside of our expected 4538*a67afe4dSAndroid Build Coastguard Worker # location b/c this prevents finding dependent libraries that 4539*a67afe4dSAndroid Build Coastguard Worker # are installed to the same prefix. 4540*a67afe4dSAndroid Build Coastguard Worker # At present, this check doesn't affect windows .dll's that 4541*a67afe4dSAndroid Build Coastguard Worker # are installed into $libdir/../bin (currently, that works fine) 4542*a67afe4dSAndroid Build Coastguard Worker # but it's something to keep an eye on. 4543*a67afe4dSAndroid Build Coastguard Worker test "$inst_prefix_dir" = "$destdir" && \ 4544*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4545*a67afe4dSAndroid Build Coastguard Worker 4546*a67afe4dSAndroid Build Coastguard Worker if test -n "$inst_prefix_dir"; then 4547*a67afe4dSAndroid Build Coastguard Worker # Stick the inst_prefix_dir data into the link command. 4548*a67afe4dSAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4549*a67afe4dSAndroid Build Coastguard Worker else 4550*a67afe4dSAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4551*a67afe4dSAndroid Build Coastguard Worker fi 4552*a67afe4dSAndroid Build Coastguard Worker 4553*a67afe4dSAndroid Build Coastguard Worker func_warning "relinking '$file'" 4554*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$relink_command" \ 4555*a67afe4dSAndroid Build Coastguard Worker 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4556*a67afe4dSAndroid Build Coastguard Worker fi 4557*a67afe4dSAndroid Build Coastguard Worker 4558*a67afe4dSAndroid Build Coastguard Worker # See the names of the shared library. 4559*a67afe4dSAndroid Build Coastguard Worker set dummy $library_names; shift 4560*a67afe4dSAndroid Build Coastguard Worker if test -n "$1"; then 4561*a67afe4dSAndroid Build Coastguard Worker realname=$1 4562*a67afe4dSAndroid Build Coastguard Worker shift 4563*a67afe4dSAndroid Build Coastguard Worker 4564*a67afe4dSAndroid Build Coastguard Worker srcname=$realname 4565*a67afe4dSAndroid Build Coastguard Worker test -n "$relink_command" && srcname=${realname}T 4566*a67afe4dSAndroid Build Coastguard Worker 4567*a67afe4dSAndroid Build Coastguard Worker # Install the shared library and build the symlinks. 4568*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4569*a67afe4dSAndroid Build Coastguard Worker 'exit $?' 4570*a67afe4dSAndroid Build Coastguard Worker tstripme=$stripme 4571*a67afe4dSAndroid Build Coastguard Worker case $host_os in 4572*a67afe4dSAndroid Build Coastguard Worker cygwin* | mingw* | pw32* | cegcc*) 4573*a67afe4dSAndroid Build Coastguard Worker case $realname in 4574*a67afe4dSAndroid Build Coastguard Worker *.dll.a) 4575*a67afe4dSAndroid Build Coastguard Worker tstripme= 4576*a67afe4dSAndroid Build Coastguard Worker ;; 4577*a67afe4dSAndroid Build Coastguard Worker esac 4578*a67afe4dSAndroid Build Coastguard Worker ;; 4579*a67afe4dSAndroid Build Coastguard Worker os2*) 4580*a67afe4dSAndroid Build Coastguard Worker case $realname in 4581*a67afe4dSAndroid Build Coastguard Worker *_dll.a) 4582*a67afe4dSAndroid Build Coastguard Worker tstripme= 4583*a67afe4dSAndroid Build Coastguard Worker ;; 4584*a67afe4dSAndroid Build Coastguard Worker esac 4585*a67afe4dSAndroid Build Coastguard Worker ;; 4586*a67afe4dSAndroid Build Coastguard Worker esac 4587*a67afe4dSAndroid Build Coastguard Worker if test -n "$tstripme" && test -n "$striplib"; then 4588*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$striplib $destdir/$realname" 'exit $?' 4589*a67afe4dSAndroid Build Coastguard Worker fi 4590*a67afe4dSAndroid Build Coastguard Worker 4591*a67afe4dSAndroid Build Coastguard Worker if test "$#" -gt 0; then 4592*a67afe4dSAndroid Build Coastguard Worker # Delete the old symlinks, and create new ones. 4593*a67afe4dSAndroid Build Coastguard Worker # Try 'ln -sf' first, because the 'ln' binary might depend on 4594*a67afe4dSAndroid Build Coastguard Worker # the symlink we replace! Solaris /bin/ln does not understand -f, 4595*a67afe4dSAndroid Build Coastguard Worker # so we also need to try rm && ln -s. 4596*a67afe4dSAndroid Build Coastguard Worker for linkname 4597*a67afe4dSAndroid Build Coastguard Worker do 4598*a67afe4dSAndroid Build Coastguard Worker test "$linkname" != "$realname" \ 4599*a67afe4dSAndroid Build Coastguard Worker && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 4600*a67afe4dSAndroid Build Coastguard Worker done 4601*a67afe4dSAndroid Build Coastguard Worker fi 4602*a67afe4dSAndroid Build Coastguard Worker 4603*a67afe4dSAndroid Build Coastguard Worker # Do each command in the postinstall commands. 4604*a67afe4dSAndroid Build Coastguard Worker lib=$destdir/$realname 4605*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$postinstall_cmds" 'exit $?' 4606*a67afe4dSAndroid Build Coastguard Worker fi 4607*a67afe4dSAndroid Build Coastguard Worker 4608*a67afe4dSAndroid Build Coastguard Worker # Install the pseudo-library for information purposes. 4609*a67afe4dSAndroid Build Coastguard Worker func_basename "$file" 4610*a67afe4dSAndroid Build Coastguard Worker name=$func_basename_result 4611*a67afe4dSAndroid Build Coastguard Worker instname=$dir/${name}i 4612*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 4613*a67afe4dSAndroid Build Coastguard Worker 4614*a67afe4dSAndroid Build Coastguard Worker # Maybe install the static library, too. 4615*a67afe4dSAndroid Build Coastguard Worker test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4616*a67afe4dSAndroid Build Coastguard Worker ;; 4617*a67afe4dSAndroid Build Coastguard Worker 4618*a67afe4dSAndroid Build Coastguard Worker *.lo) 4619*a67afe4dSAndroid Build Coastguard Worker # Install (i.e. copy) a libtool object. 4620*a67afe4dSAndroid Build Coastguard Worker 4621*a67afe4dSAndroid Build Coastguard Worker # Figure out destination file name, if it wasn't already specified. 4622*a67afe4dSAndroid Build Coastguard Worker if test -n "$destname"; then 4623*a67afe4dSAndroid Build Coastguard Worker destfile=$destdir/$destname 4624*a67afe4dSAndroid Build Coastguard Worker else 4625*a67afe4dSAndroid Build Coastguard Worker func_basename "$file" 4626*a67afe4dSAndroid Build Coastguard Worker destfile=$func_basename_result 4627*a67afe4dSAndroid Build Coastguard Worker destfile=$destdir/$destfile 4628*a67afe4dSAndroid Build Coastguard Worker fi 4629*a67afe4dSAndroid Build Coastguard Worker 4630*a67afe4dSAndroid Build Coastguard Worker # Deduce the name of the destination old-style object file. 4631*a67afe4dSAndroid Build Coastguard Worker case $destfile in 4632*a67afe4dSAndroid Build Coastguard Worker *.lo) 4633*a67afe4dSAndroid Build Coastguard Worker func_lo2o "$destfile" 4634*a67afe4dSAndroid Build Coastguard Worker staticdest=$func_lo2o_result 4635*a67afe4dSAndroid Build Coastguard Worker ;; 4636*a67afe4dSAndroid Build Coastguard Worker *.$objext) 4637*a67afe4dSAndroid Build Coastguard Worker staticdest=$destfile 4638*a67afe4dSAndroid Build Coastguard Worker destfile= 4639*a67afe4dSAndroid Build Coastguard Worker ;; 4640*a67afe4dSAndroid Build Coastguard Worker *) 4641*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "cannot copy a libtool object to '$destfile'" 4642*a67afe4dSAndroid Build Coastguard Worker ;; 4643*a67afe4dSAndroid Build Coastguard Worker esac 4644*a67afe4dSAndroid Build Coastguard Worker 4645*a67afe4dSAndroid Build Coastguard Worker # Install the libtool object if requested. 4646*a67afe4dSAndroid Build Coastguard Worker test -n "$destfile" && \ 4647*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$install_prog $file $destfile" 'exit $?' 4648*a67afe4dSAndroid Build Coastguard Worker 4649*a67afe4dSAndroid Build Coastguard Worker # Install the old object if enabled. 4650*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 4651*a67afe4dSAndroid Build Coastguard Worker # Deduce the name of the old-style object file. 4652*a67afe4dSAndroid Build Coastguard Worker func_lo2o "$file" 4653*a67afe4dSAndroid Build Coastguard Worker staticobj=$func_lo2o_result 4654*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4655*a67afe4dSAndroid Build Coastguard Worker fi 4656*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 4657*a67afe4dSAndroid Build Coastguard Worker ;; 4658*a67afe4dSAndroid Build Coastguard Worker 4659*a67afe4dSAndroid Build Coastguard Worker *) 4660*a67afe4dSAndroid Build Coastguard Worker # Figure out destination file name, if it wasn't already specified. 4661*a67afe4dSAndroid Build Coastguard Worker if test -n "$destname"; then 4662*a67afe4dSAndroid Build Coastguard Worker destfile=$destdir/$destname 4663*a67afe4dSAndroid Build Coastguard Worker else 4664*a67afe4dSAndroid Build Coastguard Worker func_basename "$file" 4665*a67afe4dSAndroid Build Coastguard Worker destfile=$func_basename_result 4666*a67afe4dSAndroid Build Coastguard Worker destfile=$destdir/$destfile 4667*a67afe4dSAndroid Build Coastguard Worker fi 4668*a67afe4dSAndroid Build Coastguard Worker 4669*a67afe4dSAndroid Build Coastguard Worker # If the file is missing, and there is a .exe on the end, strip it 4670*a67afe4dSAndroid Build Coastguard Worker # because it is most likely a libtool script we actually want to 4671*a67afe4dSAndroid Build Coastguard Worker # install 4672*a67afe4dSAndroid Build Coastguard Worker stripped_ext= 4673*a67afe4dSAndroid Build Coastguard Worker case $file in 4674*a67afe4dSAndroid Build Coastguard Worker *.exe) 4675*a67afe4dSAndroid Build Coastguard Worker if test ! -f "$file"; then 4676*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '.exe' "$file" 4677*a67afe4dSAndroid Build Coastguard Worker file=$func_stripname_result 4678*a67afe4dSAndroid Build Coastguard Worker stripped_ext=.exe 4679*a67afe4dSAndroid Build Coastguard Worker fi 4680*a67afe4dSAndroid Build Coastguard Worker ;; 4681*a67afe4dSAndroid Build Coastguard Worker esac 4682*a67afe4dSAndroid Build Coastguard Worker 4683*a67afe4dSAndroid Build Coastguard Worker # Do a test to see if this is really a libtool program. 4684*a67afe4dSAndroid Build Coastguard Worker case $host in 4685*a67afe4dSAndroid Build Coastguard Worker *cygwin* | *mingw*) 4686*a67afe4dSAndroid Build Coastguard Worker if func_ltwrapper_executable_p "$file"; then 4687*a67afe4dSAndroid Build Coastguard Worker func_ltwrapper_scriptname "$file" 4688*a67afe4dSAndroid Build Coastguard Worker wrapper=$func_ltwrapper_scriptname_result 4689*a67afe4dSAndroid Build Coastguard Worker else 4690*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '.exe' "$file" 4691*a67afe4dSAndroid Build Coastguard Worker wrapper=$func_stripname_result 4692*a67afe4dSAndroid Build Coastguard Worker fi 4693*a67afe4dSAndroid Build Coastguard Worker ;; 4694*a67afe4dSAndroid Build Coastguard Worker *) 4695*a67afe4dSAndroid Build Coastguard Worker wrapper=$file 4696*a67afe4dSAndroid Build Coastguard Worker ;; 4697*a67afe4dSAndroid Build Coastguard Worker esac 4698*a67afe4dSAndroid Build Coastguard Worker if func_ltwrapper_script_p "$wrapper"; then 4699*a67afe4dSAndroid Build Coastguard Worker notinst_deplibs= 4700*a67afe4dSAndroid Build Coastguard Worker relink_command= 4701*a67afe4dSAndroid Build Coastguard Worker 4702*a67afe4dSAndroid Build Coastguard Worker func_source "$wrapper" 4703*a67afe4dSAndroid Build Coastguard Worker 4704*a67afe4dSAndroid Build Coastguard Worker # Check the variables that should have been set. 4705*a67afe4dSAndroid Build Coastguard Worker test -z "$generated_by_libtool_version" && \ 4706*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "invalid libtool wrapper script '$wrapper'" 4707*a67afe4dSAndroid Build Coastguard Worker 4708*a67afe4dSAndroid Build Coastguard Worker finalize=: 4709*a67afe4dSAndroid Build Coastguard Worker for lib in $notinst_deplibs; do 4710*a67afe4dSAndroid Build Coastguard Worker # Check to see that each library is installed. 4711*a67afe4dSAndroid Build Coastguard Worker libdir= 4712*a67afe4dSAndroid Build Coastguard Worker if test -f "$lib"; then 4713*a67afe4dSAndroid Build Coastguard Worker func_source "$lib" 4714*a67afe4dSAndroid Build Coastguard Worker fi 4715*a67afe4dSAndroid Build Coastguard Worker libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4716*a67afe4dSAndroid Build Coastguard Worker if test -n "$libdir" && test ! -f "$libfile"; then 4717*a67afe4dSAndroid Build Coastguard Worker func_warning "'$lib' has not been installed in '$libdir'" 4718*a67afe4dSAndroid Build Coastguard Worker finalize=false 4719*a67afe4dSAndroid Build Coastguard Worker fi 4720*a67afe4dSAndroid Build Coastguard Worker done 4721*a67afe4dSAndroid Build Coastguard Worker 4722*a67afe4dSAndroid Build Coastguard Worker relink_command= 4723*a67afe4dSAndroid Build Coastguard Worker func_source "$wrapper" 4724*a67afe4dSAndroid Build Coastguard Worker 4725*a67afe4dSAndroid Build Coastguard Worker outputname= 4726*a67afe4dSAndroid Build Coastguard Worker if test no = "$fast_install" && test -n "$relink_command"; then 4727*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 4728*a67afe4dSAndroid Build Coastguard Worker if $finalize; then 4729*a67afe4dSAndroid Build Coastguard Worker tmpdir=`func_mktempdir` 4730*a67afe4dSAndroid Build Coastguard Worker func_basename "$file$stripped_ext" 4731*a67afe4dSAndroid Build Coastguard Worker file=$func_basename_result 4732*a67afe4dSAndroid Build Coastguard Worker outputname=$tmpdir/$file 4733*a67afe4dSAndroid Build Coastguard Worker # Replace the output file specification. 4734*a67afe4dSAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4735*a67afe4dSAndroid Build Coastguard Worker 4736*a67afe4dSAndroid Build Coastguard Worker $opt_quiet || { 4737*a67afe4dSAndroid Build Coastguard Worker func_quote_arg expand,pretty "$relink_command" 4738*a67afe4dSAndroid Build Coastguard Worker eval "func_echo $func_quote_arg_result" 4739*a67afe4dSAndroid Build Coastguard Worker } 4740*a67afe4dSAndroid Build Coastguard Worker if eval "$relink_command"; then : 4741*a67afe4dSAndroid Build Coastguard Worker else 4742*a67afe4dSAndroid Build Coastguard Worker func_error "error: relink '$file' with the above command before installing it" 4743*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || ${RM}r "$tmpdir" 4744*a67afe4dSAndroid Build Coastguard Worker continue 4745*a67afe4dSAndroid Build Coastguard Worker fi 4746*a67afe4dSAndroid Build Coastguard Worker file=$outputname 4747*a67afe4dSAndroid Build Coastguard Worker else 4748*a67afe4dSAndroid Build Coastguard Worker func_warning "cannot relink '$file'" 4749*a67afe4dSAndroid Build Coastguard Worker fi 4750*a67afe4dSAndroid Build Coastguard Worker } 4751*a67afe4dSAndroid Build Coastguard Worker else 4752*a67afe4dSAndroid Build Coastguard Worker # Install the binary that we compiled earlier. 4753*a67afe4dSAndroid Build Coastguard Worker file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4754*a67afe4dSAndroid Build Coastguard Worker fi 4755*a67afe4dSAndroid Build Coastguard Worker fi 4756*a67afe4dSAndroid Build Coastguard Worker 4757*a67afe4dSAndroid Build Coastguard Worker # remove .exe since cygwin /usr/bin/install will append another 4758*a67afe4dSAndroid Build Coastguard Worker # one anyway 4759*a67afe4dSAndroid Build Coastguard Worker case $install_prog,$host in 4760*a67afe4dSAndroid Build Coastguard Worker */usr/bin/install*,*cygwin*) 4761*a67afe4dSAndroid Build Coastguard Worker case $file:$destfile in 4762*a67afe4dSAndroid Build Coastguard Worker *.exe:*.exe) 4763*a67afe4dSAndroid Build Coastguard Worker # this is ok 4764*a67afe4dSAndroid Build Coastguard Worker ;; 4765*a67afe4dSAndroid Build Coastguard Worker *.exe:*) 4766*a67afe4dSAndroid Build Coastguard Worker destfile=$destfile.exe 4767*a67afe4dSAndroid Build Coastguard Worker ;; 4768*a67afe4dSAndroid Build Coastguard Worker *:*.exe) 4769*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '.exe' "$destfile" 4770*a67afe4dSAndroid Build Coastguard Worker destfile=$func_stripname_result 4771*a67afe4dSAndroid Build Coastguard Worker ;; 4772*a67afe4dSAndroid Build Coastguard Worker esac 4773*a67afe4dSAndroid Build Coastguard Worker ;; 4774*a67afe4dSAndroid Build Coastguard Worker esac 4775*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4776*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || if test -n "$outputname"; then 4777*a67afe4dSAndroid Build Coastguard Worker ${RM}r "$tmpdir" 4778*a67afe4dSAndroid Build Coastguard Worker fi 4779*a67afe4dSAndroid Build Coastguard Worker ;; 4780*a67afe4dSAndroid Build Coastguard Worker esac 4781*a67afe4dSAndroid Build Coastguard Worker done 4782*a67afe4dSAndroid Build Coastguard Worker 4783*a67afe4dSAndroid Build Coastguard Worker for file in $staticlibs; do 4784*a67afe4dSAndroid Build Coastguard Worker func_basename "$file" 4785*a67afe4dSAndroid Build Coastguard Worker name=$func_basename_result 4786*a67afe4dSAndroid Build Coastguard Worker 4787*a67afe4dSAndroid Build Coastguard Worker # Set up the ranlib parameters. 4788*a67afe4dSAndroid Build Coastguard Worker oldlib=$destdir/$name 4789*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4790*a67afe4dSAndroid Build Coastguard Worker tool_oldlib=$func_to_tool_file_result 4791*a67afe4dSAndroid Build Coastguard Worker 4792*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4793*a67afe4dSAndroid Build Coastguard Worker 4794*a67afe4dSAndroid Build Coastguard Worker if test -n "$stripme" && test -n "$old_striplib"; then 4795*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4796*a67afe4dSAndroid Build Coastguard Worker fi 4797*a67afe4dSAndroid Build Coastguard Worker 4798*a67afe4dSAndroid Build Coastguard Worker # Do each command in the postinstall commands. 4799*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4800*a67afe4dSAndroid Build Coastguard Worker done 4801*a67afe4dSAndroid Build Coastguard Worker 4802*a67afe4dSAndroid Build Coastguard Worker test -n "$future_libdirs" && \ 4803*a67afe4dSAndroid Build Coastguard Worker func_warning "remember to run '$progname --finish$future_libdirs'" 4804*a67afe4dSAndroid Build Coastguard Worker 4805*a67afe4dSAndroid Build Coastguard Worker if test -n "$current_libdirs"; then 4806*a67afe4dSAndroid Build Coastguard Worker # Maybe just do a dry run. 4807*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run && current_libdirs=" -n$current_libdirs" 4808*a67afe4dSAndroid Build Coastguard Worker exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4809*a67afe4dSAndroid Build Coastguard Worker else 4810*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 4811*a67afe4dSAndroid Build Coastguard Worker fi 4812*a67afe4dSAndroid Build Coastguard Worker} 4813*a67afe4dSAndroid Build Coastguard Worker 4814*a67afe4dSAndroid Build Coastguard Workertest install = "$opt_mode" && func_mode_install ${1+"$@"} 4815*a67afe4dSAndroid Build Coastguard Worker 4816*a67afe4dSAndroid Build Coastguard Worker 4817*a67afe4dSAndroid Build Coastguard Worker# func_generate_dlsyms outputname originator pic_p 4818*a67afe4dSAndroid Build Coastguard Worker# Extract symbols from dlprefiles and create ${outputname}S.o with 4819*a67afe4dSAndroid Build Coastguard Worker# a dlpreopen symbol table. 4820*a67afe4dSAndroid Build Coastguard Workerfunc_generate_dlsyms () 4821*a67afe4dSAndroid Build Coastguard Worker{ 4822*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 4823*a67afe4dSAndroid Build Coastguard Worker 4824*a67afe4dSAndroid Build Coastguard Worker my_outputname=$1 4825*a67afe4dSAndroid Build Coastguard Worker my_originator=$2 4826*a67afe4dSAndroid Build Coastguard Worker my_pic_p=${3-false} 4827*a67afe4dSAndroid Build Coastguard Worker my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4828*a67afe4dSAndroid Build Coastguard Worker my_dlsyms= 4829*a67afe4dSAndroid Build Coastguard Worker 4830*a67afe4dSAndroid Build Coastguard Worker if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4831*a67afe4dSAndroid Build Coastguard Worker if test -n "$NM" && test -n "$global_symbol_pipe"; then 4832*a67afe4dSAndroid Build Coastguard Worker my_dlsyms=${my_outputname}S.c 4833*a67afe4dSAndroid Build Coastguard Worker else 4834*a67afe4dSAndroid Build Coastguard Worker func_error "not configured to extract global symbols from dlpreopened files" 4835*a67afe4dSAndroid Build Coastguard Worker fi 4836*a67afe4dSAndroid Build Coastguard Worker fi 4837*a67afe4dSAndroid Build Coastguard Worker 4838*a67afe4dSAndroid Build Coastguard Worker if test -n "$my_dlsyms"; then 4839*a67afe4dSAndroid Build Coastguard Worker case $my_dlsyms in 4840*a67afe4dSAndroid Build Coastguard Worker "") ;; 4841*a67afe4dSAndroid Build Coastguard Worker *.c) 4842*a67afe4dSAndroid Build Coastguard Worker # Discover the nlist of each of the dlfiles. 4843*a67afe4dSAndroid Build Coastguard Worker nlist=$output_objdir/$my_outputname.nm 4844*a67afe4dSAndroid Build Coastguard Worker 4845*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4846*a67afe4dSAndroid Build Coastguard Worker 4847*a67afe4dSAndroid Build Coastguard Worker # Parse the name list into a source file. 4848*a67afe4dSAndroid Build Coastguard Worker func_verbose "creating $output_objdir/$my_dlsyms" 4849*a67afe4dSAndroid Build Coastguard Worker 4850*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 4851*a67afe4dSAndroid Build Coastguard Worker/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 4852*a67afe4dSAndroid Build Coastguard Worker/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4853*a67afe4dSAndroid Build Coastguard Worker 4854*a67afe4dSAndroid Build Coastguard Worker#ifdef __cplusplus 4855*a67afe4dSAndroid Build Coastguard Workerextern \"C\" { 4856*a67afe4dSAndroid Build Coastguard Worker#endif 4857*a67afe4dSAndroid Build Coastguard Worker 4858*a67afe4dSAndroid Build Coastguard Worker#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4859*a67afe4dSAndroid Build Coastguard Worker#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 4860*a67afe4dSAndroid Build Coastguard Worker#endif 4861*a67afe4dSAndroid Build Coastguard Worker 4862*a67afe4dSAndroid Build Coastguard Worker/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 4863*a67afe4dSAndroid Build Coastguard Worker#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 4864*a67afe4dSAndroid Build Coastguard Worker/* DATA imports from DLLs on WIN32 can't be const, because runtime 4865*a67afe4dSAndroid Build Coastguard Worker relocations are performed -- see ld's documentation on pseudo-relocs. */ 4866*a67afe4dSAndroid Build Coastguard Worker# define LT_DLSYM_CONST 4867*a67afe4dSAndroid Build Coastguard Worker#elif defined __osf__ 4868*a67afe4dSAndroid Build Coastguard Worker/* This system does not cope well with relocations in const data. */ 4869*a67afe4dSAndroid Build Coastguard Worker# define LT_DLSYM_CONST 4870*a67afe4dSAndroid Build Coastguard Worker#else 4871*a67afe4dSAndroid Build Coastguard Worker# define LT_DLSYM_CONST const 4872*a67afe4dSAndroid Build Coastguard Worker#endif 4873*a67afe4dSAndroid Build Coastguard Worker 4874*a67afe4dSAndroid Build Coastguard Worker#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 4875*a67afe4dSAndroid Build Coastguard Worker 4876*a67afe4dSAndroid Build Coastguard Worker/* External symbol declarations for the compiler. */\ 4877*a67afe4dSAndroid Build Coastguard Worker" 4878*a67afe4dSAndroid Build Coastguard Worker 4879*a67afe4dSAndroid Build Coastguard Worker if test yes = "$dlself"; then 4880*a67afe4dSAndroid Build Coastguard Worker func_verbose "generating symbol list for '$output'" 4881*a67afe4dSAndroid Build Coastguard Worker 4882*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4883*a67afe4dSAndroid Build Coastguard Worker 4884*a67afe4dSAndroid Build Coastguard Worker # Add our own program objects to the symbol list. 4885*a67afe4dSAndroid Build Coastguard Worker progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4886*a67afe4dSAndroid Build Coastguard Worker for progfile in $progfiles; do 4887*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$progfile" func_convert_file_msys_to_w32 4888*a67afe4dSAndroid Build Coastguard Worker func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4889*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4890*a67afe4dSAndroid Build Coastguard Worker done 4891*a67afe4dSAndroid Build Coastguard Worker 4892*a67afe4dSAndroid Build Coastguard Worker if test -n "$exclude_expsyms"; then 4893*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 4894*a67afe4dSAndroid Build Coastguard Worker eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4895*a67afe4dSAndroid Build Coastguard Worker eval '$MV "$nlist"T "$nlist"' 4896*a67afe4dSAndroid Build Coastguard Worker } 4897*a67afe4dSAndroid Build Coastguard Worker fi 4898*a67afe4dSAndroid Build Coastguard Worker 4899*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols_regex"; then 4900*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 4901*a67afe4dSAndroid Build Coastguard Worker eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4902*a67afe4dSAndroid Build Coastguard Worker eval '$MV "$nlist"T "$nlist"' 4903*a67afe4dSAndroid Build Coastguard Worker } 4904*a67afe4dSAndroid Build Coastguard Worker fi 4905*a67afe4dSAndroid Build Coastguard Worker 4906*a67afe4dSAndroid Build Coastguard Worker # Prepare the list of exported symbols 4907*a67afe4dSAndroid Build Coastguard Worker if test -z "$export_symbols"; then 4908*a67afe4dSAndroid Build Coastguard Worker export_symbols=$output_objdir/$outputname.exp 4909*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 4910*a67afe4dSAndroid Build Coastguard Worker $RM $export_symbols 4911*a67afe4dSAndroid Build Coastguard Worker eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4912*a67afe4dSAndroid Build Coastguard Worker case $host in 4913*a67afe4dSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 4914*a67afe4dSAndroid Build Coastguard Worker eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4915*a67afe4dSAndroid Build Coastguard Worker eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4916*a67afe4dSAndroid Build Coastguard Worker ;; 4917*a67afe4dSAndroid Build Coastguard Worker esac 4918*a67afe4dSAndroid Build Coastguard Worker } 4919*a67afe4dSAndroid Build Coastguard Worker else 4920*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 4921*a67afe4dSAndroid Build Coastguard Worker eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4922*a67afe4dSAndroid Build Coastguard Worker eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4923*a67afe4dSAndroid Build Coastguard Worker eval '$MV "$nlist"T "$nlist"' 4924*a67afe4dSAndroid Build Coastguard Worker case $host in 4925*a67afe4dSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 4926*a67afe4dSAndroid Build Coastguard Worker eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4927*a67afe4dSAndroid Build Coastguard Worker eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4928*a67afe4dSAndroid Build Coastguard Worker ;; 4929*a67afe4dSAndroid Build Coastguard Worker esac 4930*a67afe4dSAndroid Build Coastguard Worker } 4931*a67afe4dSAndroid Build Coastguard Worker fi 4932*a67afe4dSAndroid Build Coastguard Worker fi 4933*a67afe4dSAndroid Build Coastguard Worker 4934*a67afe4dSAndroid Build Coastguard Worker for dlprefile in $dlprefiles; do 4935*a67afe4dSAndroid Build Coastguard Worker func_verbose "extracting global C symbols from '$dlprefile'" 4936*a67afe4dSAndroid Build Coastguard Worker func_basename "$dlprefile" 4937*a67afe4dSAndroid Build Coastguard Worker name=$func_basename_result 4938*a67afe4dSAndroid Build Coastguard Worker case $host in 4939*a67afe4dSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 4940*a67afe4dSAndroid Build Coastguard Worker # if an import library, we need to obtain dlname 4941*a67afe4dSAndroid Build Coastguard Worker if func_win32_import_lib_p "$dlprefile"; then 4942*a67afe4dSAndroid Build Coastguard Worker func_tr_sh "$dlprefile" 4943*a67afe4dSAndroid Build Coastguard Worker eval "curr_lafile=\$libfile_$func_tr_sh_result" 4944*a67afe4dSAndroid Build Coastguard Worker dlprefile_dlbasename= 4945*a67afe4dSAndroid Build Coastguard Worker if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4946*a67afe4dSAndroid Build Coastguard Worker # Use subshell, to avoid clobbering current variable values 4947*a67afe4dSAndroid Build Coastguard Worker dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 4948*a67afe4dSAndroid Build Coastguard Worker if test -n "$dlprefile_dlname"; then 4949*a67afe4dSAndroid Build Coastguard Worker func_basename "$dlprefile_dlname" 4950*a67afe4dSAndroid Build Coastguard Worker dlprefile_dlbasename=$func_basename_result 4951*a67afe4dSAndroid Build Coastguard Worker else 4952*a67afe4dSAndroid Build Coastguard Worker # no lafile. user explicitly requested -dlpreopen <import library>. 4953*a67afe4dSAndroid Build Coastguard Worker $sharedlib_from_linklib_cmd "$dlprefile" 4954*a67afe4dSAndroid Build Coastguard Worker dlprefile_dlbasename=$sharedlib_from_linklib_result 4955*a67afe4dSAndroid Build Coastguard Worker fi 4956*a67afe4dSAndroid Build Coastguard Worker fi 4957*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 4958*a67afe4dSAndroid Build Coastguard Worker if test -n "$dlprefile_dlbasename"; then 4959*a67afe4dSAndroid Build Coastguard Worker eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4960*a67afe4dSAndroid Build Coastguard Worker else 4961*a67afe4dSAndroid Build Coastguard Worker func_warning "Could not compute DLL name from $name" 4962*a67afe4dSAndroid Build Coastguard Worker eval '$ECHO ": $name " >> "$nlist"' 4963*a67afe4dSAndroid Build Coastguard Worker fi 4964*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4965*a67afe4dSAndroid Build Coastguard Worker eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4966*a67afe4dSAndroid Build Coastguard Worker $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4967*a67afe4dSAndroid Build Coastguard Worker } 4968*a67afe4dSAndroid Build Coastguard Worker else # not an import lib 4969*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 4970*a67afe4dSAndroid Build Coastguard Worker eval '$ECHO ": $name " >> "$nlist"' 4971*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4972*a67afe4dSAndroid Build Coastguard Worker eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4973*a67afe4dSAndroid Build Coastguard Worker } 4974*a67afe4dSAndroid Build Coastguard Worker fi 4975*a67afe4dSAndroid Build Coastguard Worker ;; 4976*a67afe4dSAndroid Build Coastguard Worker *) 4977*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 4978*a67afe4dSAndroid Build Coastguard Worker eval '$ECHO ": $name " >> "$nlist"' 4979*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4980*a67afe4dSAndroid Build Coastguard Worker eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4981*a67afe4dSAndroid Build Coastguard Worker } 4982*a67afe4dSAndroid Build Coastguard Worker ;; 4983*a67afe4dSAndroid Build Coastguard Worker esac 4984*a67afe4dSAndroid Build Coastguard Worker done 4985*a67afe4dSAndroid Build Coastguard Worker 4986*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 4987*a67afe4dSAndroid Build Coastguard Worker # Make sure we have at least an empty file. 4988*a67afe4dSAndroid Build Coastguard Worker test -f "$nlist" || : > "$nlist" 4989*a67afe4dSAndroid Build Coastguard Worker 4990*a67afe4dSAndroid Build Coastguard Worker if test -n "$exclude_expsyms"; then 4991*a67afe4dSAndroid Build Coastguard Worker $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4992*a67afe4dSAndroid Build Coastguard Worker $MV "$nlist"T "$nlist" 4993*a67afe4dSAndroid Build Coastguard Worker fi 4994*a67afe4dSAndroid Build Coastguard Worker 4995*a67afe4dSAndroid Build Coastguard Worker # Try sorting and uniquifying the output. 4996*a67afe4dSAndroid Build Coastguard Worker if $GREP -v "^: " < "$nlist" | 4997*a67afe4dSAndroid Build Coastguard Worker if sort -k 3 </dev/null >/dev/null 2>&1; then 4998*a67afe4dSAndroid Build Coastguard Worker sort -k 3 4999*a67afe4dSAndroid Build Coastguard Worker else 5000*a67afe4dSAndroid Build Coastguard Worker sort +2 5001*a67afe4dSAndroid Build Coastguard Worker fi | 5002*a67afe4dSAndroid Build Coastguard Worker uniq > "$nlist"S; then 5003*a67afe4dSAndroid Build Coastguard Worker : 5004*a67afe4dSAndroid Build Coastguard Worker else 5005*a67afe4dSAndroid Build Coastguard Worker $GREP -v "^: " < "$nlist" > "$nlist"S 5006*a67afe4dSAndroid Build Coastguard Worker fi 5007*a67afe4dSAndroid Build Coastguard Worker 5008*a67afe4dSAndroid Build Coastguard Worker if test -f "$nlist"S; then 5009*a67afe4dSAndroid Build Coastguard Worker eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 5010*a67afe4dSAndroid Build Coastguard Worker else 5011*a67afe4dSAndroid Build Coastguard Worker echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 5012*a67afe4dSAndroid Build Coastguard Worker fi 5013*a67afe4dSAndroid Build Coastguard Worker 5014*a67afe4dSAndroid Build Coastguard Worker func_show_eval '$RM "${nlist}I"' 5015*a67afe4dSAndroid Build Coastguard Worker if test -n "$global_symbol_to_import"; then 5016*a67afe4dSAndroid Build Coastguard Worker eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 5017*a67afe4dSAndroid Build Coastguard Worker fi 5018*a67afe4dSAndroid Build Coastguard Worker 5019*a67afe4dSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 5020*a67afe4dSAndroid Build Coastguard Worker 5021*a67afe4dSAndroid Build Coastguard Worker/* The mapping between symbol names and symbols. */ 5022*a67afe4dSAndroid Build Coastguard Workertypedef struct { 5023*a67afe4dSAndroid Build Coastguard Worker const char *name; 5024*a67afe4dSAndroid Build Coastguard Worker void *address; 5025*a67afe4dSAndroid Build Coastguard Worker} lt_dlsymlist; 5026*a67afe4dSAndroid Build Coastguard Workerextern LT_DLSYM_CONST lt_dlsymlist 5027*a67afe4dSAndroid Build Coastguard Workerlt_${my_prefix}_LTX_preloaded_symbols[];\ 5028*a67afe4dSAndroid Build Coastguard Worker" 5029*a67afe4dSAndroid Build Coastguard Worker 5030*a67afe4dSAndroid Build Coastguard Worker if test -s "$nlist"I; then 5031*a67afe4dSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 5032*a67afe4dSAndroid Build Coastguard Workerstatic void lt_syminit(void) 5033*a67afe4dSAndroid Build Coastguard Worker{ 5034*a67afe4dSAndroid Build Coastguard Worker LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 5035*a67afe4dSAndroid Build Coastguard Worker for (; symbol->name; ++symbol) 5036*a67afe4dSAndroid Build Coastguard Worker {" 5037*a67afe4dSAndroid Build Coastguard Worker $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 5038*a67afe4dSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 5039*a67afe4dSAndroid Build Coastguard Worker } 5040*a67afe4dSAndroid Build Coastguard Worker}" 5041*a67afe4dSAndroid Build Coastguard Worker fi 5042*a67afe4dSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 5043*a67afe4dSAndroid Build Coastguard WorkerLT_DLSYM_CONST lt_dlsymlist 5044*a67afe4dSAndroid Build Coastguard Workerlt_${my_prefix}_LTX_preloaded_symbols[] = 5045*a67afe4dSAndroid Build Coastguard Worker{ {\"$my_originator\", (void *) 0}," 5046*a67afe4dSAndroid Build Coastguard Worker 5047*a67afe4dSAndroid Build Coastguard Worker if test -s "$nlist"I; then 5048*a67afe4dSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 5049*a67afe4dSAndroid Build Coastguard Worker {\"@INIT@\", (void *) <_syminit}," 5050*a67afe4dSAndroid Build Coastguard Worker fi 5051*a67afe4dSAndroid Build Coastguard Worker 5052*a67afe4dSAndroid Build Coastguard Worker case $need_lib_prefix in 5053*a67afe4dSAndroid Build Coastguard Worker no) 5054*a67afe4dSAndroid Build Coastguard Worker eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 5055*a67afe4dSAndroid Build Coastguard Worker ;; 5056*a67afe4dSAndroid Build Coastguard Worker *) 5057*a67afe4dSAndroid Build Coastguard Worker eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 5058*a67afe4dSAndroid Build Coastguard Worker ;; 5059*a67afe4dSAndroid Build Coastguard Worker esac 5060*a67afe4dSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 5061*a67afe4dSAndroid Build Coastguard Worker {0, (void *) 0} 5062*a67afe4dSAndroid Build Coastguard Worker}; 5063*a67afe4dSAndroid Build Coastguard Worker 5064*a67afe4dSAndroid Build Coastguard Worker/* This works around a problem in FreeBSD linker */ 5065*a67afe4dSAndroid Build Coastguard Worker#ifdef FREEBSD_WORKAROUND 5066*a67afe4dSAndroid Build Coastguard Workerstatic const void *lt_preloaded_setup() { 5067*a67afe4dSAndroid Build Coastguard Worker return lt_${my_prefix}_LTX_preloaded_symbols; 5068*a67afe4dSAndroid Build Coastguard Worker} 5069*a67afe4dSAndroid Build Coastguard Worker#endif 5070*a67afe4dSAndroid Build Coastguard Worker 5071*a67afe4dSAndroid Build Coastguard Worker#ifdef __cplusplus 5072*a67afe4dSAndroid Build Coastguard Worker} 5073*a67afe4dSAndroid Build Coastguard Worker#endif\ 5074*a67afe4dSAndroid Build Coastguard Worker" 5075*a67afe4dSAndroid Build Coastguard Worker } # !$opt_dry_run 5076*a67afe4dSAndroid Build Coastguard Worker 5077*a67afe4dSAndroid Build Coastguard Worker pic_flag_for_symtable= 5078*a67afe4dSAndroid Build Coastguard Worker case "$compile_command " in 5079*a67afe4dSAndroid Build Coastguard Worker *" -static "*) ;; 5080*a67afe4dSAndroid Build Coastguard Worker *) 5081*a67afe4dSAndroid Build Coastguard Worker case $host in 5082*a67afe4dSAndroid Build Coastguard Worker # compiling the symbol table file with pic_flag works around 5083*a67afe4dSAndroid Build Coastguard Worker # a FreeBSD bug that causes programs to crash when -lm is 5084*a67afe4dSAndroid Build Coastguard Worker # linked before any other PIC object. But we must not use 5085*a67afe4dSAndroid Build Coastguard Worker # pic_flag when linking with -static. The problem exists in 5086*a67afe4dSAndroid Build Coastguard Worker # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 5087*a67afe4dSAndroid Build Coastguard Worker *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 5088*a67afe4dSAndroid Build Coastguard Worker pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 5089*a67afe4dSAndroid Build Coastguard Worker *-*-hpux*) 5090*a67afe4dSAndroid Build Coastguard Worker pic_flag_for_symtable=" $pic_flag" ;; 5091*a67afe4dSAndroid Build Coastguard Worker *) 5092*a67afe4dSAndroid Build Coastguard Worker $my_pic_p && pic_flag_for_symtable=" $pic_flag" 5093*a67afe4dSAndroid Build Coastguard Worker ;; 5094*a67afe4dSAndroid Build Coastguard Worker esac 5095*a67afe4dSAndroid Build Coastguard Worker ;; 5096*a67afe4dSAndroid Build Coastguard Worker esac 5097*a67afe4dSAndroid Build Coastguard Worker symtab_cflags= 5098*a67afe4dSAndroid Build Coastguard Worker for arg in $LTCFLAGS; do 5099*a67afe4dSAndroid Build Coastguard Worker case $arg in 5100*a67afe4dSAndroid Build Coastguard Worker -pie | -fpie | -fPIE) ;; 5101*a67afe4dSAndroid Build Coastguard Worker *) func_append symtab_cflags " $arg" ;; 5102*a67afe4dSAndroid Build Coastguard Worker esac 5103*a67afe4dSAndroid Build Coastguard Worker done 5104*a67afe4dSAndroid Build Coastguard Worker 5105*a67afe4dSAndroid Build Coastguard Worker # Now compile the dynamic symbol file. 5106*a67afe4dSAndroid Build Coastguard Worker func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 5107*a67afe4dSAndroid Build Coastguard Worker 5108*a67afe4dSAndroid Build Coastguard Worker # Clean up the generated files. 5109*a67afe4dSAndroid Build Coastguard Worker func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 5110*a67afe4dSAndroid Build Coastguard Worker 5111*a67afe4dSAndroid Build Coastguard Worker # Transform the symbol file into the correct name. 5112*a67afe4dSAndroid Build Coastguard Worker symfileobj=$output_objdir/${my_outputname}S.$objext 5113*a67afe4dSAndroid Build Coastguard Worker case $host in 5114*a67afe4dSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 5115*a67afe4dSAndroid Build Coastguard Worker if test -f "$output_objdir/$my_outputname.def"; then 5116*a67afe4dSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5117*a67afe4dSAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5118*a67afe4dSAndroid Build Coastguard Worker else 5119*a67afe4dSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5120*a67afe4dSAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5121*a67afe4dSAndroid Build Coastguard Worker fi 5122*a67afe4dSAndroid Build Coastguard Worker ;; 5123*a67afe4dSAndroid Build Coastguard Worker *) 5124*a67afe4dSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5125*a67afe4dSAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5126*a67afe4dSAndroid Build Coastguard Worker ;; 5127*a67afe4dSAndroid Build Coastguard Worker esac 5128*a67afe4dSAndroid Build Coastguard Worker ;; 5129*a67afe4dSAndroid Build Coastguard Worker *) 5130*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "unknown suffix for '$my_dlsyms'" 5131*a67afe4dSAndroid Build Coastguard Worker ;; 5132*a67afe4dSAndroid Build Coastguard Worker esac 5133*a67afe4dSAndroid Build Coastguard Worker else 5134*a67afe4dSAndroid Build Coastguard Worker # We keep going just in case the user didn't refer to 5135*a67afe4dSAndroid Build Coastguard Worker # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 5136*a67afe4dSAndroid Build Coastguard Worker # really was required. 5137*a67afe4dSAndroid Build Coastguard Worker 5138*a67afe4dSAndroid Build Coastguard Worker # Nullify the symbol file. 5139*a67afe4dSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 5140*a67afe4dSAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 5141*a67afe4dSAndroid Build Coastguard Worker fi 5142*a67afe4dSAndroid Build Coastguard Worker} 5143*a67afe4dSAndroid Build Coastguard Worker 5144*a67afe4dSAndroid Build Coastguard Worker# func_cygming_gnu_implib_p ARG 5145*a67afe4dSAndroid Build Coastguard Worker# This predicate returns with zero status (TRUE) if 5146*a67afe4dSAndroid Build Coastguard Worker# ARG is a GNU/binutils-style import library. Returns 5147*a67afe4dSAndroid Build Coastguard Worker# with nonzero status (FALSE) otherwise. 5148*a67afe4dSAndroid Build Coastguard Workerfunc_cygming_gnu_implib_p () 5149*a67afe4dSAndroid Build Coastguard Worker{ 5150*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 5151*a67afe4dSAndroid Build Coastguard Worker 5152*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$1" func_convert_file_msys_to_w32 5153*a67afe4dSAndroid 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)$'` 5154*a67afe4dSAndroid Build Coastguard Worker test -n "$func_cygming_gnu_implib_tmp" 5155*a67afe4dSAndroid Build Coastguard Worker} 5156*a67afe4dSAndroid Build Coastguard Worker 5157*a67afe4dSAndroid Build Coastguard Worker# func_cygming_ms_implib_p ARG 5158*a67afe4dSAndroid Build Coastguard Worker# This predicate returns with zero status (TRUE) if 5159*a67afe4dSAndroid Build Coastguard Worker# ARG is an MS-style import library. Returns 5160*a67afe4dSAndroid Build Coastguard Worker# with nonzero status (FALSE) otherwise. 5161*a67afe4dSAndroid Build Coastguard Workerfunc_cygming_ms_implib_p () 5162*a67afe4dSAndroid Build Coastguard Worker{ 5163*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 5164*a67afe4dSAndroid Build Coastguard Worker 5165*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$1" func_convert_file_msys_to_w32 5166*a67afe4dSAndroid Build Coastguard Worker func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 5167*a67afe4dSAndroid Build Coastguard Worker test -n "$func_cygming_ms_implib_tmp" 5168*a67afe4dSAndroid Build Coastguard Worker} 5169*a67afe4dSAndroid Build Coastguard Worker 5170*a67afe4dSAndroid Build Coastguard Worker# func_win32_libid arg 5171*a67afe4dSAndroid Build Coastguard Worker# return the library type of file 'arg' 5172*a67afe4dSAndroid Build Coastguard Worker# 5173*a67afe4dSAndroid Build Coastguard Worker# Need a lot of goo to handle *both* DLLs and import libs 5174*a67afe4dSAndroid Build Coastguard Worker# Has to be a shell function in order to 'eat' the argument 5175*a67afe4dSAndroid Build Coastguard Worker# that is supplied when $file_magic_command is called. 5176*a67afe4dSAndroid Build Coastguard Worker# Despite the name, also deal with 64 bit binaries. 5177*a67afe4dSAndroid Build Coastguard Workerfunc_win32_libid () 5178*a67afe4dSAndroid Build Coastguard Worker{ 5179*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 5180*a67afe4dSAndroid Build Coastguard Worker 5181*a67afe4dSAndroid Build Coastguard Worker win32_libid_type=unknown 5182*a67afe4dSAndroid Build Coastguard Worker win32_fileres=`file -L $1 2>/dev/null` 5183*a67afe4dSAndroid Build Coastguard Worker case $win32_fileres in 5184*a67afe4dSAndroid Build Coastguard Worker *ar\ archive\ import\ library*) # definitely import 5185*a67afe4dSAndroid Build Coastguard Worker win32_libid_type="x86 archive import" 5186*a67afe4dSAndroid Build Coastguard Worker ;; 5187*a67afe4dSAndroid Build Coastguard Worker *ar\ archive*) # could be an import, or static 5188*a67afe4dSAndroid Build Coastguard Worker # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 5189*a67afe4dSAndroid Build Coastguard Worker if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 5190*a67afe4dSAndroid Build Coastguard Worker $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 5191*a67afe4dSAndroid Build Coastguard Worker case $nm_interface in 5192*a67afe4dSAndroid Build Coastguard Worker "MS dumpbin") 5193*a67afe4dSAndroid Build Coastguard Worker if func_cygming_ms_implib_p "$1" || 5194*a67afe4dSAndroid Build Coastguard Worker func_cygming_gnu_implib_p "$1" 5195*a67afe4dSAndroid Build Coastguard Worker then 5196*a67afe4dSAndroid Build Coastguard Worker win32_nmres=import 5197*a67afe4dSAndroid Build Coastguard Worker else 5198*a67afe4dSAndroid Build Coastguard Worker win32_nmres= 5199*a67afe4dSAndroid Build Coastguard Worker fi 5200*a67afe4dSAndroid Build Coastguard Worker ;; 5201*a67afe4dSAndroid Build Coastguard Worker *) 5202*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$1" func_convert_file_msys_to_w32 5203*a67afe4dSAndroid Build Coastguard Worker win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 5204*a67afe4dSAndroid Build Coastguard Worker $SED -n -e ' 5205*a67afe4dSAndroid Build Coastguard Worker 1,100{ 5206*a67afe4dSAndroid Build Coastguard Worker / I /{ 5207*a67afe4dSAndroid Build Coastguard Worker s|.*|import| 5208*a67afe4dSAndroid Build Coastguard Worker p 5209*a67afe4dSAndroid Build Coastguard Worker q 5210*a67afe4dSAndroid Build Coastguard Worker } 5211*a67afe4dSAndroid Build Coastguard Worker }'` 5212*a67afe4dSAndroid Build Coastguard Worker ;; 5213*a67afe4dSAndroid Build Coastguard Worker esac 5214*a67afe4dSAndroid Build Coastguard Worker case $win32_nmres in 5215*a67afe4dSAndroid Build Coastguard Worker import*) win32_libid_type="x86 archive import";; 5216*a67afe4dSAndroid Build Coastguard Worker *) win32_libid_type="x86 archive static";; 5217*a67afe4dSAndroid Build Coastguard Worker esac 5218*a67afe4dSAndroid Build Coastguard Worker fi 5219*a67afe4dSAndroid Build Coastguard Worker ;; 5220*a67afe4dSAndroid Build Coastguard Worker *DLL*) 5221*a67afe4dSAndroid Build Coastguard Worker win32_libid_type="x86 DLL" 5222*a67afe4dSAndroid Build Coastguard Worker ;; 5223*a67afe4dSAndroid Build Coastguard Worker *executable*) # but shell scripts are "executable" too... 5224*a67afe4dSAndroid Build Coastguard Worker case $win32_fileres in 5225*a67afe4dSAndroid Build Coastguard Worker *MS\ Windows\ PE\ Intel*) 5226*a67afe4dSAndroid Build Coastguard Worker win32_libid_type="x86 DLL" 5227*a67afe4dSAndroid Build Coastguard Worker ;; 5228*a67afe4dSAndroid Build Coastguard Worker esac 5229*a67afe4dSAndroid Build Coastguard Worker ;; 5230*a67afe4dSAndroid Build Coastguard Worker esac 5231*a67afe4dSAndroid Build Coastguard Worker $ECHO "$win32_libid_type" 5232*a67afe4dSAndroid Build Coastguard Worker} 5233*a67afe4dSAndroid Build Coastguard Worker 5234*a67afe4dSAndroid Build Coastguard Worker# func_cygming_dll_for_implib ARG 5235*a67afe4dSAndroid Build Coastguard Worker# 5236*a67afe4dSAndroid Build Coastguard Worker# Platform-specific function to extract the 5237*a67afe4dSAndroid Build Coastguard Worker# name of the DLL associated with the specified 5238*a67afe4dSAndroid Build Coastguard Worker# import library ARG. 5239*a67afe4dSAndroid Build Coastguard Worker# Invoked by eval'ing the libtool variable 5240*a67afe4dSAndroid Build Coastguard Worker# $sharedlib_from_linklib_cmd 5241*a67afe4dSAndroid Build Coastguard Worker# Result is available in the variable 5242*a67afe4dSAndroid Build Coastguard Worker# $sharedlib_from_linklib_result 5243*a67afe4dSAndroid Build Coastguard Workerfunc_cygming_dll_for_implib () 5244*a67afe4dSAndroid Build Coastguard Worker{ 5245*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 5246*a67afe4dSAndroid Build Coastguard Worker 5247*a67afe4dSAndroid Build Coastguard Worker sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 5248*a67afe4dSAndroid Build Coastguard Worker} 5249*a67afe4dSAndroid Build Coastguard Worker 5250*a67afe4dSAndroid Build Coastguard Worker# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 5251*a67afe4dSAndroid Build Coastguard Worker# 5252*a67afe4dSAndroid Build Coastguard Worker# The is the core of a fallback implementation of a 5253*a67afe4dSAndroid Build Coastguard Worker# platform-specific function to extract the name of the 5254*a67afe4dSAndroid Build Coastguard Worker# DLL associated with the specified import library LIBNAME. 5255*a67afe4dSAndroid Build Coastguard Worker# 5256*a67afe4dSAndroid Build Coastguard Worker# SECTION_NAME is either .idata$6 or .idata$7, depending 5257*a67afe4dSAndroid Build Coastguard Worker# on the platform and compiler that created the implib. 5258*a67afe4dSAndroid Build Coastguard Worker# 5259*a67afe4dSAndroid Build Coastguard Worker# Echos the name of the DLL associated with the 5260*a67afe4dSAndroid Build Coastguard Worker# specified import library. 5261*a67afe4dSAndroid Build Coastguard Workerfunc_cygming_dll_for_implib_fallback_core () 5262*a67afe4dSAndroid Build Coastguard Worker{ 5263*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 5264*a67afe4dSAndroid Build Coastguard Worker 5265*a67afe4dSAndroid Build Coastguard Worker match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5266*a67afe4dSAndroid Build Coastguard Worker $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5267*a67afe4dSAndroid Build Coastguard Worker $SED '/^Contents of section '"$match_literal"':/{ 5268*a67afe4dSAndroid Build Coastguard Worker # Place marker at beginning of archive member dllname section 5269*a67afe4dSAndroid Build Coastguard Worker s/.*/====MARK====/ 5270*a67afe4dSAndroid Build Coastguard Worker p 5271*a67afe4dSAndroid Build Coastguard Worker d 5272*a67afe4dSAndroid Build Coastguard Worker } 5273*a67afe4dSAndroid Build Coastguard Worker # These lines can sometimes be longer than 43 characters, but 5274*a67afe4dSAndroid Build Coastguard Worker # are always uninteresting 5275*a67afe4dSAndroid Build Coastguard Worker /:[ ]*file format pe[i]\{,1\}-/d 5276*a67afe4dSAndroid Build Coastguard Worker /^In archive [^:]*:/d 5277*a67afe4dSAndroid Build Coastguard Worker # Ensure marker is printed 5278*a67afe4dSAndroid Build Coastguard Worker /^====MARK====/p 5279*a67afe4dSAndroid Build Coastguard Worker # Remove all lines with less than 43 characters 5280*a67afe4dSAndroid Build Coastguard Worker /^.\{43\}/!d 5281*a67afe4dSAndroid Build Coastguard Worker # From remaining lines, remove first 43 characters 5282*a67afe4dSAndroid Build Coastguard Worker s/^.\{43\}//' | 5283*a67afe4dSAndroid Build Coastguard Worker $SED -n ' 5284*a67afe4dSAndroid Build Coastguard Worker # Join marker and all lines until next marker into a single line 5285*a67afe4dSAndroid Build Coastguard Worker /^====MARK====/ b para 5286*a67afe4dSAndroid Build Coastguard Worker H 5287*a67afe4dSAndroid Build Coastguard Worker $ b para 5288*a67afe4dSAndroid Build Coastguard Worker b 5289*a67afe4dSAndroid Build Coastguard Worker :para 5290*a67afe4dSAndroid Build Coastguard Worker x 5291*a67afe4dSAndroid Build Coastguard Worker s/\n//g 5292*a67afe4dSAndroid Build Coastguard Worker # Remove the marker 5293*a67afe4dSAndroid Build Coastguard Worker s/^====MARK====// 5294*a67afe4dSAndroid Build Coastguard Worker # Remove trailing dots and whitespace 5295*a67afe4dSAndroid Build Coastguard Worker s/[\. \t]*$// 5296*a67afe4dSAndroid Build Coastguard Worker # Print 5297*a67afe4dSAndroid Build Coastguard Worker /./p' | 5298*a67afe4dSAndroid Build Coastguard Worker # we now have a list, one entry per line, of the stringified 5299*a67afe4dSAndroid Build Coastguard Worker # contents of the appropriate section of all members of the 5300*a67afe4dSAndroid Build Coastguard Worker # archive that possess that section. Heuristic: eliminate 5301*a67afe4dSAndroid Build Coastguard Worker # all those that have a first or second character that is 5302*a67afe4dSAndroid Build Coastguard Worker # a '.' (that is, objdump's representation of an unprintable 5303*a67afe4dSAndroid Build Coastguard Worker # character.) This should work for all archives with less than 5304*a67afe4dSAndroid Build Coastguard Worker # 0x302f exports -- but will fail for DLLs whose name actually 5305*a67afe4dSAndroid Build Coastguard Worker # begins with a literal '.' or a single character followed by 5306*a67afe4dSAndroid Build Coastguard Worker # a '.'. 5307*a67afe4dSAndroid Build Coastguard Worker # 5308*a67afe4dSAndroid Build Coastguard Worker # Of those that remain, print the first one. 5309*a67afe4dSAndroid Build Coastguard Worker $SED -e '/^\./d;/^.\./d;q' 5310*a67afe4dSAndroid Build Coastguard Worker} 5311*a67afe4dSAndroid Build Coastguard Worker 5312*a67afe4dSAndroid Build Coastguard Worker# func_cygming_dll_for_implib_fallback ARG 5313*a67afe4dSAndroid Build Coastguard Worker# Platform-specific function to extract the 5314*a67afe4dSAndroid Build Coastguard Worker# name of the DLL associated with the specified 5315*a67afe4dSAndroid Build Coastguard Worker# import library ARG. 5316*a67afe4dSAndroid Build Coastguard Worker# 5317*a67afe4dSAndroid Build Coastguard Worker# This fallback implementation is for use when $DLLTOOL 5318*a67afe4dSAndroid Build Coastguard Worker# does not support the --identify-strict option. 5319*a67afe4dSAndroid Build Coastguard Worker# Invoked by eval'ing the libtool variable 5320*a67afe4dSAndroid Build Coastguard Worker# $sharedlib_from_linklib_cmd 5321*a67afe4dSAndroid Build Coastguard Worker# Result is available in the variable 5322*a67afe4dSAndroid Build Coastguard Worker# $sharedlib_from_linklib_result 5323*a67afe4dSAndroid Build Coastguard Workerfunc_cygming_dll_for_implib_fallback () 5324*a67afe4dSAndroid Build Coastguard Worker{ 5325*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 5326*a67afe4dSAndroid Build Coastguard Worker 5327*a67afe4dSAndroid Build Coastguard Worker if func_cygming_gnu_implib_p "$1"; then 5328*a67afe4dSAndroid Build Coastguard Worker # binutils import library 5329*a67afe4dSAndroid Build Coastguard Worker sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 5330*a67afe4dSAndroid Build Coastguard Worker elif func_cygming_ms_implib_p "$1"; then 5331*a67afe4dSAndroid Build Coastguard Worker # ms-generated import library 5332*a67afe4dSAndroid Build Coastguard Worker sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5333*a67afe4dSAndroid Build Coastguard Worker else 5334*a67afe4dSAndroid Build Coastguard Worker # unknown 5335*a67afe4dSAndroid Build Coastguard Worker sharedlib_from_linklib_result= 5336*a67afe4dSAndroid Build Coastguard Worker fi 5337*a67afe4dSAndroid Build Coastguard Worker} 5338*a67afe4dSAndroid Build Coastguard Worker 5339*a67afe4dSAndroid Build Coastguard Worker 5340*a67afe4dSAndroid Build Coastguard Worker# func_extract_an_archive dir oldlib 5341*a67afe4dSAndroid Build Coastguard Workerfunc_extract_an_archive () 5342*a67afe4dSAndroid Build Coastguard Worker{ 5343*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 5344*a67afe4dSAndroid Build Coastguard Worker 5345*a67afe4dSAndroid Build Coastguard Worker f_ex_an_ar_dir=$1; shift 5346*a67afe4dSAndroid Build Coastguard Worker f_ex_an_ar_oldlib=$1 5347*a67afe4dSAndroid Build Coastguard Worker if test yes = "$lock_old_archive_extraction"; then 5348*a67afe4dSAndroid Build Coastguard Worker lockfile=$f_ex_an_ar_oldlib.lock 5349*a67afe4dSAndroid Build Coastguard Worker until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5350*a67afe4dSAndroid Build Coastguard Worker func_echo "Waiting for $lockfile to be removed" 5351*a67afe4dSAndroid Build Coastguard Worker sleep 2 5352*a67afe4dSAndroid Build Coastguard Worker done 5353*a67afe4dSAndroid Build Coastguard Worker fi 5354*a67afe4dSAndroid Build Coastguard Worker func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5355*a67afe4dSAndroid Build Coastguard Worker 'stat=$?; rm -f "$lockfile"; exit $stat' 5356*a67afe4dSAndroid Build Coastguard Worker if test yes = "$lock_old_archive_extraction"; then 5357*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || rm -f "$lockfile" 5358*a67afe4dSAndroid Build Coastguard Worker fi 5359*a67afe4dSAndroid Build Coastguard Worker if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5360*a67afe4dSAndroid Build Coastguard Worker : 5361*a67afe4dSAndroid Build Coastguard Worker else 5362*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5363*a67afe4dSAndroid Build Coastguard Worker fi 5364*a67afe4dSAndroid Build Coastguard Worker} 5365*a67afe4dSAndroid Build Coastguard Worker 5366*a67afe4dSAndroid Build Coastguard Worker 5367*a67afe4dSAndroid Build Coastguard Worker# func_extract_archives gentop oldlib ... 5368*a67afe4dSAndroid Build Coastguard Workerfunc_extract_archives () 5369*a67afe4dSAndroid Build Coastguard Worker{ 5370*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 5371*a67afe4dSAndroid Build Coastguard Worker 5372*a67afe4dSAndroid Build Coastguard Worker my_gentop=$1; shift 5373*a67afe4dSAndroid Build Coastguard Worker my_oldlibs=${1+"$@"} 5374*a67afe4dSAndroid Build Coastguard Worker my_oldobjs= 5375*a67afe4dSAndroid Build Coastguard Worker my_xlib= 5376*a67afe4dSAndroid Build Coastguard Worker my_xabs= 5377*a67afe4dSAndroid Build Coastguard Worker my_xdir= 5378*a67afe4dSAndroid Build Coastguard Worker 5379*a67afe4dSAndroid Build Coastguard Worker for my_xlib in $my_oldlibs; do 5380*a67afe4dSAndroid Build Coastguard Worker # Extract the objects. 5381*a67afe4dSAndroid Build Coastguard Worker case $my_xlib in 5382*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5383*a67afe4dSAndroid Build Coastguard Worker *) my_xabs=`pwd`"/$my_xlib" ;; 5384*a67afe4dSAndroid Build Coastguard Worker esac 5385*a67afe4dSAndroid Build Coastguard Worker func_basename "$my_xlib" 5386*a67afe4dSAndroid Build Coastguard Worker my_xlib=$func_basename_result 5387*a67afe4dSAndroid Build Coastguard Worker my_xlib_u=$my_xlib 5388*a67afe4dSAndroid Build Coastguard Worker while :; do 5389*a67afe4dSAndroid Build Coastguard Worker case " $extracted_archives " in 5390*a67afe4dSAndroid Build Coastguard Worker *" $my_xlib_u "*) 5391*a67afe4dSAndroid Build Coastguard Worker func_arith $extracted_serial + 1 5392*a67afe4dSAndroid Build Coastguard Worker extracted_serial=$func_arith_result 5393*a67afe4dSAndroid Build Coastguard Worker my_xlib_u=lt$extracted_serial-$my_xlib ;; 5394*a67afe4dSAndroid Build Coastguard Worker *) break ;; 5395*a67afe4dSAndroid Build Coastguard Worker esac 5396*a67afe4dSAndroid Build Coastguard Worker done 5397*a67afe4dSAndroid Build Coastguard Worker extracted_archives="$extracted_archives $my_xlib_u" 5398*a67afe4dSAndroid Build Coastguard Worker my_xdir=$my_gentop/$my_xlib_u 5399*a67afe4dSAndroid Build Coastguard Worker 5400*a67afe4dSAndroid Build Coastguard Worker func_mkdir_p "$my_xdir" 5401*a67afe4dSAndroid Build Coastguard Worker 5402*a67afe4dSAndroid Build Coastguard Worker case $host in 5403*a67afe4dSAndroid Build Coastguard Worker *-darwin*) 5404*a67afe4dSAndroid Build Coastguard Worker func_verbose "Extracting $my_xabs" 5405*a67afe4dSAndroid Build Coastguard Worker # Do not bother doing anything if just a dry run 5406*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 5407*a67afe4dSAndroid Build Coastguard Worker darwin_orig_dir=`pwd` 5408*a67afe4dSAndroid Build Coastguard Worker cd $my_xdir || exit $? 5409*a67afe4dSAndroid Build Coastguard Worker darwin_archive=$my_xabs 5410*a67afe4dSAndroid Build Coastguard Worker darwin_curdir=`pwd` 5411*a67afe4dSAndroid Build Coastguard Worker func_basename "$darwin_archive" 5412*a67afe4dSAndroid Build Coastguard Worker darwin_base_archive=$func_basename_result 5413*a67afe4dSAndroid Build Coastguard Worker darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5414*a67afe4dSAndroid Build Coastguard Worker if test -n "$darwin_arches"; then 5415*a67afe4dSAndroid Build Coastguard Worker darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5416*a67afe4dSAndroid Build Coastguard Worker darwin_arch= 5417*a67afe4dSAndroid Build Coastguard Worker func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 5418*a67afe4dSAndroid Build Coastguard Worker for darwin_arch in $darwin_arches; do 5419*a67afe4dSAndroid Build Coastguard Worker func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 5420*a67afe4dSAndroid Build Coastguard Worker $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 5421*a67afe4dSAndroid Build Coastguard Worker cd "unfat-$$/$darwin_base_archive-$darwin_arch" 5422*a67afe4dSAndroid Build Coastguard Worker func_extract_an_archive "`pwd`" "$darwin_base_archive" 5423*a67afe4dSAndroid Build Coastguard Worker cd "$darwin_curdir" 5424*a67afe4dSAndroid Build Coastguard Worker $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5425*a67afe4dSAndroid Build Coastguard Worker done # $darwin_arches 5426*a67afe4dSAndroid Build Coastguard Worker ## Okay now we've a bunch of thin objects, gotta fatten them up :) 5427*a67afe4dSAndroid Build Coastguard Worker darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5428*a67afe4dSAndroid Build Coastguard Worker darwin_file= 5429*a67afe4dSAndroid Build Coastguard Worker darwin_files= 5430*a67afe4dSAndroid Build Coastguard Worker for darwin_file in $darwin_filelist; do 5431*a67afe4dSAndroid Build Coastguard Worker darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5432*a67afe4dSAndroid Build Coastguard Worker $LIPO -create -output "$darwin_file" $darwin_files 5433*a67afe4dSAndroid Build Coastguard Worker done # $darwin_filelist 5434*a67afe4dSAndroid Build Coastguard Worker $RM -rf unfat-$$ 5435*a67afe4dSAndroid Build Coastguard Worker cd "$darwin_orig_dir" 5436*a67afe4dSAndroid Build Coastguard Worker else 5437*a67afe4dSAndroid Build Coastguard Worker cd $darwin_orig_dir 5438*a67afe4dSAndroid Build Coastguard Worker func_extract_an_archive "$my_xdir" "$my_xabs" 5439*a67afe4dSAndroid Build Coastguard Worker fi # $darwin_arches 5440*a67afe4dSAndroid Build Coastguard Worker } # !$opt_dry_run 5441*a67afe4dSAndroid Build Coastguard Worker ;; 5442*a67afe4dSAndroid Build Coastguard Worker *) 5443*a67afe4dSAndroid Build Coastguard Worker func_extract_an_archive "$my_xdir" "$my_xabs" 5444*a67afe4dSAndroid Build Coastguard Worker ;; 5445*a67afe4dSAndroid Build Coastguard Worker esac 5446*a67afe4dSAndroid Build Coastguard Worker my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5447*a67afe4dSAndroid Build Coastguard Worker done 5448*a67afe4dSAndroid Build Coastguard Worker 5449*a67afe4dSAndroid Build Coastguard Worker func_extract_archives_result=$my_oldobjs 5450*a67afe4dSAndroid Build Coastguard Worker} 5451*a67afe4dSAndroid Build Coastguard Worker 5452*a67afe4dSAndroid Build Coastguard Worker 5453*a67afe4dSAndroid Build Coastguard Worker# func_emit_wrapper [arg=no] 5454*a67afe4dSAndroid Build Coastguard Worker# 5455*a67afe4dSAndroid Build Coastguard Worker# Emit a libtool wrapper script on stdout. 5456*a67afe4dSAndroid Build Coastguard Worker# Don't directly open a file because we may want to 5457*a67afe4dSAndroid Build Coastguard Worker# incorporate the script contents within a cygwin/mingw 5458*a67afe4dSAndroid Build Coastguard Worker# wrapper executable. Must ONLY be called from within 5459*a67afe4dSAndroid Build Coastguard Worker# func_mode_link because it depends on a number of variables 5460*a67afe4dSAndroid Build Coastguard Worker# set therein. 5461*a67afe4dSAndroid Build Coastguard Worker# 5462*a67afe4dSAndroid Build Coastguard Worker# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5463*a67afe4dSAndroid Build Coastguard Worker# variable will take. If 'yes', then the emitted script 5464*a67afe4dSAndroid Build Coastguard Worker# will assume that the directory where it is stored is 5465*a67afe4dSAndroid Build Coastguard Worker# the $objdir directory. This is a cygwin/mingw-specific 5466*a67afe4dSAndroid Build Coastguard Worker# behavior. 5467*a67afe4dSAndroid Build Coastguard Workerfunc_emit_wrapper () 5468*a67afe4dSAndroid Build Coastguard Worker{ 5469*a67afe4dSAndroid Build Coastguard Worker func_emit_wrapper_arg1=${1-no} 5470*a67afe4dSAndroid Build Coastguard Worker 5471*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5472*a67afe4dSAndroid Build Coastguard Worker#! $SHELL 5473*a67afe4dSAndroid Build Coastguard Worker 5474*a67afe4dSAndroid Build Coastguard Worker# $output - temporary wrapper script for $objdir/$outputname 5475*a67afe4dSAndroid Build Coastguard Worker# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5476*a67afe4dSAndroid Build Coastguard Worker# 5477*a67afe4dSAndroid Build Coastguard Worker# The $output program cannot be directly executed until all the libtool 5478*a67afe4dSAndroid Build Coastguard Worker# libraries that it depends on are installed. 5479*a67afe4dSAndroid Build Coastguard Worker# 5480*a67afe4dSAndroid Build Coastguard Worker# This wrapper script should never be moved out of the build directory. 5481*a67afe4dSAndroid Build Coastguard Worker# If it is, it will not operate correctly. 5482*a67afe4dSAndroid Build Coastguard Worker 5483*a67afe4dSAndroid Build Coastguard Worker# Sed substitution that helps us do robust quoting. It backslashifies 5484*a67afe4dSAndroid Build Coastguard Worker# metacharacters that are still active within double-quoted strings. 5485*a67afe4dSAndroid Build Coastguard Workersed_quote_subst='$sed_quote_subst' 5486*a67afe4dSAndroid Build Coastguard Worker 5487*a67afe4dSAndroid Build Coastguard Worker# Be Bourne compatible 5488*a67afe4dSAndroid Build Coastguard Workerif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5489*a67afe4dSAndroid Build Coastguard Worker emulate sh 5490*a67afe4dSAndroid Build Coastguard Worker NULLCMD=: 5491*a67afe4dSAndroid Build Coastguard Worker # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5492*a67afe4dSAndroid Build Coastguard Worker # is contrary to our usage. Disable this feature. 5493*a67afe4dSAndroid Build Coastguard Worker alias -g '\${1+\"\$@\"}'='\"\$@\"' 5494*a67afe4dSAndroid Build Coastguard Worker setopt NO_GLOB_SUBST 5495*a67afe4dSAndroid Build Coastguard Workerelse 5496*a67afe4dSAndroid Build Coastguard Worker case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5497*a67afe4dSAndroid Build Coastguard Workerfi 5498*a67afe4dSAndroid Build Coastguard WorkerBIN_SH=xpg4; export BIN_SH # for Tru64 5499*a67afe4dSAndroid Build Coastguard WorkerDUALCASE=1; export DUALCASE # for MKS sh 5500*a67afe4dSAndroid Build Coastguard Worker 5501*a67afe4dSAndroid Build Coastguard Worker# The HP-UX ksh and POSIX shell print the target directory to stdout 5502*a67afe4dSAndroid Build Coastguard Worker# if CDPATH is set. 5503*a67afe4dSAndroid Build Coastguard Worker(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5504*a67afe4dSAndroid Build Coastguard Worker 5505*a67afe4dSAndroid Build Coastguard Workerrelink_command=\"$relink_command\" 5506*a67afe4dSAndroid Build Coastguard Worker 5507*a67afe4dSAndroid Build Coastguard Worker# This environment variable determines our operation mode. 5508*a67afe4dSAndroid Build Coastguard Workerif test \"\$libtool_install_magic\" = \"$magic\"; then 5509*a67afe4dSAndroid Build Coastguard Worker # install mode needs the following variables: 5510*a67afe4dSAndroid Build Coastguard Worker generated_by_libtool_version='$macro_version' 5511*a67afe4dSAndroid Build Coastguard Worker notinst_deplibs='$notinst_deplibs' 5512*a67afe4dSAndroid Build Coastguard Workerelse 5513*a67afe4dSAndroid Build Coastguard Worker # When we are sourced in execute mode, \$file and \$ECHO are already set. 5514*a67afe4dSAndroid Build Coastguard Worker if test \"\$libtool_execute_magic\" != \"$magic\"; then 5515*a67afe4dSAndroid Build Coastguard Worker file=\"\$0\"" 5516*a67afe4dSAndroid Build Coastguard Worker 5517*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$ECHO" 5518*a67afe4dSAndroid Build Coastguard Worker qECHO=$func_quote_arg_result 5519*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5520*a67afe4dSAndroid Build Coastguard Worker 5521*a67afe4dSAndroid Build Coastguard Worker# A function that is used when there is no print builtin or printf. 5522*a67afe4dSAndroid Build Coastguard Workerfunc_fallback_echo () 5523*a67afe4dSAndroid Build Coastguard Worker{ 5524*a67afe4dSAndroid Build Coastguard Worker eval 'cat <<_LTECHO_EOF 5525*a67afe4dSAndroid Build Coastguard Worker\$1 5526*a67afe4dSAndroid Build Coastguard Worker_LTECHO_EOF' 5527*a67afe4dSAndroid Build Coastguard Worker} 5528*a67afe4dSAndroid Build Coastguard Worker ECHO=$qECHO 5529*a67afe4dSAndroid Build Coastguard Worker fi 5530*a67afe4dSAndroid Build Coastguard Worker 5531*a67afe4dSAndroid Build Coastguard Worker# Very basic option parsing. These options are (a) specific to 5532*a67afe4dSAndroid Build Coastguard Worker# the libtool wrapper, (b) are identical between the wrapper 5533*a67afe4dSAndroid Build Coastguard Worker# /script/ and the wrapper /executable/ that is used only on 5534*a67afe4dSAndroid Build Coastguard Worker# windows platforms, and (c) all begin with the string "--lt-" 5535*a67afe4dSAndroid Build Coastguard Worker# (application programs are unlikely to have options that match 5536*a67afe4dSAndroid Build Coastguard Worker# this pattern). 5537*a67afe4dSAndroid Build Coastguard Worker# 5538*a67afe4dSAndroid Build Coastguard Worker# There are only two supported options: --lt-debug and 5539*a67afe4dSAndroid Build Coastguard Worker# --lt-dump-script. There is, deliberately, no --lt-help. 5540*a67afe4dSAndroid Build Coastguard Worker# 5541*a67afe4dSAndroid Build Coastguard Worker# The first argument to this parsing function should be the 5542*a67afe4dSAndroid Build Coastguard Worker# script's $0 value, followed by "$@". 5543*a67afe4dSAndroid Build Coastguard Workerlt_option_debug= 5544*a67afe4dSAndroid Build Coastguard Workerfunc_parse_lt_options () 5545*a67afe4dSAndroid Build Coastguard Worker{ 5546*a67afe4dSAndroid Build Coastguard Worker lt_script_arg0=\$0 5547*a67afe4dSAndroid Build Coastguard Worker shift 5548*a67afe4dSAndroid Build Coastguard Worker for lt_opt 5549*a67afe4dSAndroid Build Coastguard Worker do 5550*a67afe4dSAndroid Build Coastguard Worker case \"\$lt_opt\" in 5551*a67afe4dSAndroid Build Coastguard Worker --lt-debug) lt_option_debug=1 ;; 5552*a67afe4dSAndroid Build Coastguard Worker --lt-dump-script) 5553*a67afe4dSAndroid Build Coastguard Worker lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5554*a67afe4dSAndroid Build Coastguard Worker test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5555*a67afe4dSAndroid Build Coastguard Worker lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5556*a67afe4dSAndroid Build Coastguard Worker cat \"\$lt_dump_D/\$lt_dump_F\" 5557*a67afe4dSAndroid Build Coastguard Worker exit 0 5558*a67afe4dSAndroid Build Coastguard Worker ;; 5559*a67afe4dSAndroid Build Coastguard Worker --lt-*) 5560*a67afe4dSAndroid Build Coastguard Worker \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5561*a67afe4dSAndroid Build Coastguard Worker exit 1 5562*a67afe4dSAndroid Build Coastguard Worker ;; 5563*a67afe4dSAndroid Build Coastguard Worker esac 5564*a67afe4dSAndroid Build Coastguard Worker done 5565*a67afe4dSAndroid Build Coastguard Worker 5566*a67afe4dSAndroid Build Coastguard Worker # Print the debug banner immediately: 5567*a67afe4dSAndroid Build Coastguard Worker if test -n \"\$lt_option_debug\"; then 5568*a67afe4dSAndroid Build Coastguard Worker echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5569*a67afe4dSAndroid Build Coastguard Worker fi 5570*a67afe4dSAndroid Build Coastguard Worker} 5571*a67afe4dSAndroid Build Coastguard Worker 5572*a67afe4dSAndroid Build Coastguard Worker# Used when --lt-debug. Prints its arguments to stdout 5573*a67afe4dSAndroid Build Coastguard Worker# (redirection is the responsibility of the caller) 5574*a67afe4dSAndroid Build Coastguard Workerfunc_lt_dump_args () 5575*a67afe4dSAndroid Build Coastguard Worker{ 5576*a67afe4dSAndroid Build Coastguard Worker lt_dump_args_N=1; 5577*a67afe4dSAndroid Build Coastguard Worker for lt_arg 5578*a67afe4dSAndroid Build Coastguard Worker do 5579*a67afe4dSAndroid Build Coastguard Worker \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5580*a67afe4dSAndroid Build Coastguard Worker lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5581*a67afe4dSAndroid Build Coastguard Worker done 5582*a67afe4dSAndroid Build Coastguard Worker} 5583*a67afe4dSAndroid Build Coastguard Worker 5584*a67afe4dSAndroid Build Coastguard Worker# Core function for launching the target application 5585*a67afe4dSAndroid Build Coastguard Workerfunc_exec_program_core () 5586*a67afe4dSAndroid Build Coastguard Worker{ 5587*a67afe4dSAndroid Build Coastguard Worker" 5588*a67afe4dSAndroid Build Coastguard Worker case $host in 5589*a67afe4dSAndroid Build Coastguard Worker # Backslashes separate directories on plain windows 5590*a67afe4dSAndroid Build Coastguard Worker *-*-mingw | *-*-os2* | *-cegcc*) 5591*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5592*a67afe4dSAndroid Build Coastguard Worker if test -n \"\$lt_option_debug\"; then 5593*a67afe4dSAndroid Build Coastguard Worker \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5594*a67afe4dSAndroid Build Coastguard Worker func_lt_dump_args \${1+\"\$@\"} 1>&2 5595*a67afe4dSAndroid Build Coastguard Worker fi 5596*a67afe4dSAndroid Build Coastguard Worker exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5597*a67afe4dSAndroid Build Coastguard Worker" 5598*a67afe4dSAndroid Build Coastguard Worker ;; 5599*a67afe4dSAndroid Build Coastguard Worker 5600*a67afe4dSAndroid Build Coastguard Worker *) 5601*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5602*a67afe4dSAndroid Build Coastguard Worker if test -n \"\$lt_option_debug\"; then 5603*a67afe4dSAndroid Build Coastguard Worker \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5604*a67afe4dSAndroid Build Coastguard Worker func_lt_dump_args \${1+\"\$@\"} 1>&2 5605*a67afe4dSAndroid Build Coastguard Worker fi 5606*a67afe4dSAndroid Build Coastguard Worker exec \"\$progdir/\$program\" \${1+\"\$@\"} 5607*a67afe4dSAndroid Build Coastguard Worker" 5608*a67afe4dSAndroid Build Coastguard Worker ;; 5609*a67afe4dSAndroid Build Coastguard Worker esac 5610*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5611*a67afe4dSAndroid Build Coastguard Worker \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5612*a67afe4dSAndroid Build Coastguard Worker exit 1 5613*a67afe4dSAndroid Build Coastguard Worker} 5614*a67afe4dSAndroid Build Coastguard Worker 5615*a67afe4dSAndroid Build Coastguard Worker# A function to encapsulate launching the target application 5616*a67afe4dSAndroid Build Coastguard Worker# Strips options in the --lt-* namespace from \$@ and 5617*a67afe4dSAndroid Build Coastguard Worker# launches target application with the remaining arguments. 5618*a67afe4dSAndroid Build Coastguard Workerfunc_exec_program () 5619*a67afe4dSAndroid Build Coastguard Worker{ 5620*a67afe4dSAndroid Build Coastguard Worker case \" \$* \" in 5621*a67afe4dSAndroid Build Coastguard Worker *\\ --lt-*) 5622*a67afe4dSAndroid Build Coastguard Worker for lt_wr_arg 5623*a67afe4dSAndroid Build Coastguard Worker do 5624*a67afe4dSAndroid Build Coastguard Worker case \$lt_wr_arg in 5625*a67afe4dSAndroid Build Coastguard Worker --lt-*) ;; 5626*a67afe4dSAndroid Build Coastguard Worker *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5627*a67afe4dSAndroid Build Coastguard Worker esac 5628*a67afe4dSAndroid Build Coastguard Worker shift 5629*a67afe4dSAndroid Build Coastguard Worker done ;; 5630*a67afe4dSAndroid Build Coastguard Worker esac 5631*a67afe4dSAndroid Build Coastguard Worker func_exec_program_core \${1+\"\$@\"} 5632*a67afe4dSAndroid Build Coastguard Worker} 5633*a67afe4dSAndroid Build Coastguard Worker 5634*a67afe4dSAndroid Build Coastguard Worker # Parse options 5635*a67afe4dSAndroid Build Coastguard Worker func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5636*a67afe4dSAndroid Build Coastguard Worker 5637*a67afe4dSAndroid Build Coastguard Worker # Find the directory that this script lives in. 5638*a67afe4dSAndroid Build Coastguard Worker thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5639*a67afe4dSAndroid Build Coastguard Worker test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5640*a67afe4dSAndroid Build Coastguard Worker 5641*a67afe4dSAndroid Build Coastguard Worker # Follow symbolic links until we get to the real thisdir. 5642*a67afe4dSAndroid Build Coastguard Worker file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5643*a67afe4dSAndroid Build Coastguard Worker while test -n \"\$file\"; do 5644*a67afe4dSAndroid Build Coastguard Worker destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5645*a67afe4dSAndroid Build Coastguard Worker 5646*a67afe4dSAndroid Build Coastguard Worker # If there was a directory component, then change thisdir. 5647*a67afe4dSAndroid Build Coastguard Worker if test \"x\$destdir\" != \"x\$file\"; then 5648*a67afe4dSAndroid Build Coastguard Worker case \"\$destdir\" in 5649*a67afe4dSAndroid Build Coastguard Worker [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5650*a67afe4dSAndroid Build Coastguard Worker *) thisdir=\"\$thisdir/\$destdir\" ;; 5651*a67afe4dSAndroid Build Coastguard Worker esac 5652*a67afe4dSAndroid Build Coastguard Worker fi 5653*a67afe4dSAndroid Build Coastguard Worker 5654*a67afe4dSAndroid Build Coastguard Worker file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5655*a67afe4dSAndroid Build Coastguard Worker file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5656*a67afe4dSAndroid Build Coastguard Worker done 5657*a67afe4dSAndroid Build Coastguard Worker 5658*a67afe4dSAndroid Build Coastguard Worker # Usually 'no', except on cygwin/mingw when embedded into 5659*a67afe4dSAndroid Build Coastguard Worker # the cwrapper. 5660*a67afe4dSAndroid Build Coastguard Worker WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5661*a67afe4dSAndroid Build Coastguard Worker if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5662*a67afe4dSAndroid Build Coastguard Worker # special case for '.' 5663*a67afe4dSAndroid Build Coastguard Worker if test \"\$thisdir\" = \".\"; then 5664*a67afe4dSAndroid Build Coastguard Worker thisdir=\`pwd\` 5665*a67afe4dSAndroid Build Coastguard Worker fi 5666*a67afe4dSAndroid Build Coastguard Worker # remove .libs from thisdir 5667*a67afe4dSAndroid Build Coastguard Worker case \"\$thisdir\" in 5668*a67afe4dSAndroid Build Coastguard Worker *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5669*a67afe4dSAndroid Build Coastguard Worker $objdir ) thisdir=. ;; 5670*a67afe4dSAndroid Build Coastguard Worker esac 5671*a67afe4dSAndroid Build Coastguard Worker fi 5672*a67afe4dSAndroid Build Coastguard Worker 5673*a67afe4dSAndroid Build Coastguard Worker # Try to get the absolute directory name. 5674*a67afe4dSAndroid Build Coastguard Worker absdir=\`cd \"\$thisdir\" && pwd\` 5675*a67afe4dSAndroid Build Coastguard Worker test -n \"\$absdir\" && thisdir=\"\$absdir\" 5676*a67afe4dSAndroid Build Coastguard Worker" 5677*a67afe4dSAndroid Build Coastguard Worker 5678*a67afe4dSAndroid Build Coastguard Worker if test yes = "$fast_install"; then 5679*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5680*a67afe4dSAndroid Build Coastguard Worker program=lt-'$outputname'$exeext 5681*a67afe4dSAndroid Build Coastguard Worker progdir=\"\$thisdir/$objdir\" 5682*a67afe4dSAndroid Build Coastguard Worker 5683*a67afe4dSAndroid Build Coastguard Worker if test ! -f \"\$progdir/\$program\" || 5684*a67afe4dSAndroid Build Coastguard Worker { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5685*a67afe4dSAndroid Build Coastguard Worker test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5686*a67afe4dSAndroid Build Coastguard Worker 5687*a67afe4dSAndroid Build Coastguard Worker file=\"\$\$-\$program\" 5688*a67afe4dSAndroid Build Coastguard Worker 5689*a67afe4dSAndroid Build Coastguard Worker if test ! -d \"\$progdir\"; then 5690*a67afe4dSAndroid Build Coastguard Worker $MKDIR \"\$progdir\" 5691*a67afe4dSAndroid Build Coastguard Worker else 5692*a67afe4dSAndroid Build Coastguard Worker $RM \"\$progdir/\$file\" 5693*a67afe4dSAndroid Build Coastguard Worker fi" 5694*a67afe4dSAndroid Build Coastguard Worker 5695*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5696*a67afe4dSAndroid Build Coastguard Worker 5697*a67afe4dSAndroid Build Coastguard Worker # relink executable if necessary 5698*a67afe4dSAndroid Build Coastguard Worker if test -n \"\$relink_command\"; then 5699*a67afe4dSAndroid Build Coastguard Worker if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5700*a67afe4dSAndroid Build Coastguard Worker else 5701*a67afe4dSAndroid Build Coastguard Worker \$ECHO \"\$relink_command_output\" >&2 5702*a67afe4dSAndroid Build Coastguard Worker $RM \"\$progdir/\$file\" 5703*a67afe4dSAndroid Build Coastguard Worker exit 1 5704*a67afe4dSAndroid Build Coastguard Worker fi 5705*a67afe4dSAndroid Build Coastguard Worker fi 5706*a67afe4dSAndroid Build Coastguard Worker 5707*a67afe4dSAndroid Build Coastguard Worker $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5708*a67afe4dSAndroid Build Coastguard Worker { $RM \"\$progdir/\$program\"; 5709*a67afe4dSAndroid Build Coastguard Worker $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5710*a67afe4dSAndroid Build Coastguard Worker $RM \"\$progdir/\$file\" 5711*a67afe4dSAndroid Build Coastguard Worker fi" 5712*a67afe4dSAndroid Build Coastguard Worker else 5713*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5714*a67afe4dSAndroid Build Coastguard Worker program='$outputname' 5715*a67afe4dSAndroid Build Coastguard Worker progdir=\"\$thisdir/$objdir\" 5716*a67afe4dSAndroid Build Coastguard Worker" 5717*a67afe4dSAndroid Build Coastguard Worker fi 5718*a67afe4dSAndroid Build Coastguard Worker 5719*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5720*a67afe4dSAndroid Build Coastguard Worker 5721*a67afe4dSAndroid Build Coastguard Worker if test -f \"\$progdir/\$program\"; then" 5722*a67afe4dSAndroid Build Coastguard Worker 5723*a67afe4dSAndroid Build Coastguard Worker # fixup the dll searchpath if we need to. 5724*a67afe4dSAndroid Build Coastguard Worker # 5725*a67afe4dSAndroid Build Coastguard Worker # Fix the DLL searchpath if we need to. Do this before prepending 5726*a67afe4dSAndroid Build Coastguard Worker # to shlibpath, because on Windows, both are PATH and uninstalled 5727*a67afe4dSAndroid Build Coastguard Worker # libraries must come first. 5728*a67afe4dSAndroid Build Coastguard Worker if test -n "$dllsearchpath"; then 5729*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5730*a67afe4dSAndroid Build Coastguard Worker # Add the dll search path components to the executable PATH 5731*a67afe4dSAndroid Build Coastguard Worker PATH=$dllsearchpath:\$PATH 5732*a67afe4dSAndroid Build Coastguard Worker" 5733*a67afe4dSAndroid Build Coastguard Worker fi 5734*a67afe4dSAndroid Build Coastguard Worker 5735*a67afe4dSAndroid Build Coastguard Worker # Export our shlibpath_var if we have one. 5736*a67afe4dSAndroid Build Coastguard Worker if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5737*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5738*a67afe4dSAndroid Build Coastguard Worker # Add our own library path to $shlibpath_var 5739*a67afe4dSAndroid Build Coastguard Worker $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5740*a67afe4dSAndroid Build Coastguard Worker 5741*a67afe4dSAndroid Build Coastguard Worker # Some systems cannot cope with colon-terminated $shlibpath_var 5742*a67afe4dSAndroid Build Coastguard Worker # The second colon is a workaround for a bug in BeOS R4 sed 5743*a67afe4dSAndroid Build Coastguard Worker $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5744*a67afe4dSAndroid Build Coastguard Worker 5745*a67afe4dSAndroid Build Coastguard Worker export $shlibpath_var 5746*a67afe4dSAndroid Build Coastguard Worker" 5747*a67afe4dSAndroid Build Coastguard Worker fi 5748*a67afe4dSAndroid Build Coastguard Worker 5749*a67afe4dSAndroid Build Coastguard Worker $ECHO "\ 5750*a67afe4dSAndroid Build Coastguard Worker if test \"\$libtool_execute_magic\" != \"$magic\"; then 5751*a67afe4dSAndroid Build Coastguard Worker # Run the actual program with our arguments. 5752*a67afe4dSAndroid Build Coastguard Worker func_exec_program \${1+\"\$@\"} 5753*a67afe4dSAndroid Build Coastguard Worker fi 5754*a67afe4dSAndroid Build Coastguard Worker else 5755*a67afe4dSAndroid Build Coastguard Worker # The program doesn't exist. 5756*a67afe4dSAndroid Build Coastguard Worker \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5757*a67afe4dSAndroid Build Coastguard Worker \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5758*a67afe4dSAndroid Build Coastguard Worker \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5759*a67afe4dSAndroid Build Coastguard Worker exit 1 5760*a67afe4dSAndroid Build Coastguard Worker fi 5761*a67afe4dSAndroid Build Coastguard Workerfi\ 5762*a67afe4dSAndroid Build Coastguard Worker" 5763*a67afe4dSAndroid Build Coastguard Worker} 5764*a67afe4dSAndroid Build Coastguard Worker 5765*a67afe4dSAndroid Build Coastguard Worker 5766*a67afe4dSAndroid Build Coastguard Worker# func_emit_cwrapperexe_src 5767*a67afe4dSAndroid Build Coastguard Worker# emit the source code for a wrapper executable on stdout 5768*a67afe4dSAndroid Build Coastguard Worker# Must ONLY be called from within func_mode_link because 5769*a67afe4dSAndroid Build Coastguard Worker# it depends on a number of variable set therein. 5770*a67afe4dSAndroid Build Coastguard Workerfunc_emit_cwrapperexe_src () 5771*a67afe4dSAndroid Build Coastguard Worker{ 5772*a67afe4dSAndroid Build Coastguard Worker cat <<EOF 5773*a67afe4dSAndroid Build Coastguard Worker 5774*a67afe4dSAndroid Build Coastguard Worker/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 5775*a67afe4dSAndroid Build Coastguard Worker Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5776*a67afe4dSAndroid Build Coastguard Worker 5777*a67afe4dSAndroid Build Coastguard Worker The $output program cannot be directly executed until all the libtool 5778*a67afe4dSAndroid Build Coastguard Worker libraries that it depends on are installed. 5779*a67afe4dSAndroid Build Coastguard Worker 5780*a67afe4dSAndroid Build Coastguard Worker This wrapper executable should never be moved out of the build directory. 5781*a67afe4dSAndroid Build Coastguard Worker If it is, it will not operate correctly. 5782*a67afe4dSAndroid Build Coastguard Worker*/ 5783*a67afe4dSAndroid Build Coastguard WorkerEOF 5784*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 5785*a67afe4dSAndroid Build Coastguard Worker#ifdef _MSC_VER 5786*a67afe4dSAndroid Build Coastguard Worker# define _CRT_SECURE_NO_DEPRECATE 1 5787*a67afe4dSAndroid Build Coastguard Worker#endif 5788*a67afe4dSAndroid Build Coastguard Worker#include <stdio.h> 5789*a67afe4dSAndroid Build Coastguard Worker#include <stdlib.h> 5790*a67afe4dSAndroid Build Coastguard Worker#ifdef _MSC_VER 5791*a67afe4dSAndroid Build Coastguard Worker# include <direct.h> 5792*a67afe4dSAndroid Build Coastguard Worker# include <process.h> 5793*a67afe4dSAndroid Build Coastguard Worker# include <io.h> 5794*a67afe4dSAndroid Build Coastguard Worker#else 5795*a67afe4dSAndroid Build Coastguard Worker# include <unistd.h> 5796*a67afe4dSAndroid Build Coastguard Worker# include <stdint.h> 5797*a67afe4dSAndroid Build Coastguard Worker# ifdef __CYGWIN__ 5798*a67afe4dSAndroid Build Coastguard Worker# include <io.h> 5799*a67afe4dSAndroid Build Coastguard Worker# endif 5800*a67afe4dSAndroid Build Coastguard Worker#endif 5801*a67afe4dSAndroid Build Coastguard Worker#include <malloc.h> 5802*a67afe4dSAndroid Build Coastguard Worker#include <stdarg.h> 5803*a67afe4dSAndroid Build Coastguard Worker#include <assert.h> 5804*a67afe4dSAndroid Build Coastguard Worker#include <string.h> 5805*a67afe4dSAndroid Build Coastguard Worker#include <ctype.h> 5806*a67afe4dSAndroid Build Coastguard Worker#include <errno.h> 5807*a67afe4dSAndroid Build Coastguard Worker#include <fcntl.h> 5808*a67afe4dSAndroid Build Coastguard Worker#include <sys/stat.h> 5809*a67afe4dSAndroid Build Coastguard Worker 5810*a67afe4dSAndroid Build Coastguard Worker#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 5811*a67afe4dSAndroid Build Coastguard Worker 5812*a67afe4dSAndroid Build Coastguard Worker/* declarations of non-ANSI functions */ 5813*a67afe4dSAndroid Build Coastguard Worker#if defined __MINGW32__ 5814*a67afe4dSAndroid Build Coastguard Worker# ifdef __STRICT_ANSI__ 5815*a67afe4dSAndroid Build Coastguard Workerint _putenv (const char *); 5816*a67afe4dSAndroid Build Coastguard Worker# endif 5817*a67afe4dSAndroid Build Coastguard Worker#elif defined __CYGWIN__ 5818*a67afe4dSAndroid Build Coastguard Worker# ifdef __STRICT_ANSI__ 5819*a67afe4dSAndroid Build Coastguard Workerchar *realpath (const char *, char *); 5820*a67afe4dSAndroid Build Coastguard Workerint putenv (char *); 5821*a67afe4dSAndroid Build Coastguard Workerint setenv (const char *, const char *, int); 5822*a67afe4dSAndroid Build Coastguard Worker# endif 5823*a67afe4dSAndroid Build Coastguard Worker/* #elif defined other_platform || defined ... */ 5824*a67afe4dSAndroid Build Coastguard Worker#endif 5825*a67afe4dSAndroid Build Coastguard Worker 5826*a67afe4dSAndroid Build Coastguard Worker/* portability defines, excluding path handling macros */ 5827*a67afe4dSAndroid Build Coastguard Worker#if defined _MSC_VER 5828*a67afe4dSAndroid Build Coastguard Worker# define setmode _setmode 5829*a67afe4dSAndroid Build Coastguard Worker# define stat _stat 5830*a67afe4dSAndroid Build Coastguard Worker# define chmod _chmod 5831*a67afe4dSAndroid Build Coastguard Worker# define getcwd _getcwd 5832*a67afe4dSAndroid Build Coastguard Worker# define putenv _putenv 5833*a67afe4dSAndroid Build Coastguard Worker# define S_IXUSR _S_IEXEC 5834*a67afe4dSAndroid Build Coastguard Worker#elif defined __MINGW32__ 5835*a67afe4dSAndroid Build Coastguard Worker# define setmode _setmode 5836*a67afe4dSAndroid Build Coastguard Worker# define stat _stat 5837*a67afe4dSAndroid Build Coastguard Worker# define chmod _chmod 5838*a67afe4dSAndroid Build Coastguard Worker# define getcwd _getcwd 5839*a67afe4dSAndroid Build Coastguard Worker# define putenv _putenv 5840*a67afe4dSAndroid Build Coastguard Worker#elif defined __CYGWIN__ 5841*a67afe4dSAndroid Build Coastguard Worker# define HAVE_SETENV 5842*a67afe4dSAndroid Build Coastguard Worker# define FOPEN_WB "wb" 5843*a67afe4dSAndroid Build Coastguard Worker/* #elif defined other platforms ... */ 5844*a67afe4dSAndroid Build Coastguard Worker#endif 5845*a67afe4dSAndroid Build Coastguard Worker 5846*a67afe4dSAndroid Build Coastguard Worker#if defined PATH_MAX 5847*a67afe4dSAndroid Build Coastguard Worker# define LT_PATHMAX PATH_MAX 5848*a67afe4dSAndroid Build Coastguard Worker#elif defined MAXPATHLEN 5849*a67afe4dSAndroid Build Coastguard Worker# define LT_PATHMAX MAXPATHLEN 5850*a67afe4dSAndroid Build Coastguard Worker#else 5851*a67afe4dSAndroid Build Coastguard Worker# define LT_PATHMAX 1024 5852*a67afe4dSAndroid Build Coastguard Worker#endif 5853*a67afe4dSAndroid Build Coastguard Worker 5854*a67afe4dSAndroid Build Coastguard Worker#ifndef S_IXOTH 5855*a67afe4dSAndroid Build Coastguard Worker# define S_IXOTH 0 5856*a67afe4dSAndroid Build Coastguard Worker#endif 5857*a67afe4dSAndroid Build Coastguard Worker#ifndef S_IXGRP 5858*a67afe4dSAndroid Build Coastguard Worker# define S_IXGRP 0 5859*a67afe4dSAndroid Build Coastguard Worker#endif 5860*a67afe4dSAndroid Build Coastguard Worker 5861*a67afe4dSAndroid Build Coastguard Worker/* path handling portability macros */ 5862*a67afe4dSAndroid Build Coastguard Worker#ifndef DIR_SEPARATOR 5863*a67afe4dSAndroid Build Coastguard Worker# define DIR_SEPARATOR '/' 5864*a67afe4dSAndroid Build Coastguard Worker# define PATH_SEPARATOR ':' 5865*a67afe4dSAndroid Build Coastguard Worker#endif 5866*a67afe4dSAndroid Build Coastguard Worker 5867*a67afe4dSAndroid Build Coastguard Worker#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 5868*a67afe4dSAndroid Build Coastguard Worker defined __OS2__ 5869*a67afe4dSAndroid Build Coastguard Worker# define HAVE_DOS_BASED_FILE_SYSTEM 5870*a67afe4dSAndroid Build Coastguard Worker# define FOPEN_WB "wb" 5871*a67afe4dSAndroid Build Coastguard Worker# ifndef DIR_SEPARATOR_2 5872*a67afe4dSAndroid Build Coastguard Worker# define DIR_SEPARATOR_2 '\\' 5873*a67afe4dSAndroid Build Coastguard Worker# endif 5874*a67afe4dSAndroid Build Coastguard Worker# ifndef PATH_SEPARATOR_2 5875*a67afe4dSAndroid Build Coastguard Worker# define PATH_SEPARATOR_2 ';' 5876*a67afe4dSAndroid Build Coastguard Worker# endif 5877*a67afe4dSAndroid Build Coastguard Worker#endif 5878*a67afe4dSAndroid Build Coastguard Worker 5879*a67afe4dSAndroid Build Coastguard Worker#ifndef DIR_SEPARATOR_2 5880*a67afe4dSAndroid Build Coastguard Worker# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5881*a67afe4dSAndroid Build Coastguard Worker#else /* DIR_SEPARATOR_2 */ 5882*a67afe4dSAndroid Build Coastguard Worker# define IS_DIR_SEPARATOR(ch) \ 5883*a67afe4dSAndroid Build Coastguard Worker (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5884*a67afe4dSAndroid Build Coastguard Worker#endif /* DIR_SEPARATOR_2 */ 5885*a67afe4dSAndroid Build Coastguard Worker 5886*a67afe4dSAndroid Build Coastguard Worker#ifndef PATH_SEPARATOR_2 5887*a67afe4dSAndroid Build Coastguard Worker# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5888*a67afe4dSAndroid Build Coastguard Worker#else /* PATH_SEPARATOR_2 */ 5889*a67afe4dSAndroid Build Coastguard Worker# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5890*a67afe4dSAndroid Build Coastguard Worker#endif /* PATH_SEPARATOR_2 */ 5891*a67afe4dSAndroid Build Coastguard Worker 5892*a67afe4dSAndroid Build Coastguard Worker#ifndef FOPEN_WB 5893*a67afe4dSAndroid Build Coastguard Worker# define FOPEN_WB "w" 5894*a67afe4dSAndroid Build Coastguard Worker#endif 5895*a67afe4dSAndroid Build Coastguard Worker#ifndef _O_BINARY 5896*a67afe4dSAndroid Build Coastguard Worker# define _O_BINARY 0 5897*a67afe4dSAndroid Build Coastguard Worker#endif 5898*a67afe4dSAndroid Build Coastguard Worker 5899*a67afe4dSAndroid Build Coastguard Worker#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5900*a67afe4dSAndroid Build Coastguard Worker#define XFREE(stale) do { \ 5901*a67afe4dSAndroid Build Coastguard Worker if (stale) { free (stale); stale = 0; } \ 5902*a67afe4dSAndroid Build Coastguard Worker} while (0) 5903*a67afe4dSAndroid Build Coastguard Worker 5904*a67afe4dSAndroid Build Coastguard Worker#if defined LT_DEBUGWRAPPER 5905*a67afe4dSAndroid Build Coastguard Workerstatic int lt_debug = 1; 5906*a67afe4dSAndroid Build Coastguard Worker#else 5907*a67afe4dSAndroid Build Coastguard Workerstatic int lt_debug = 0; 5908*a67afe4dSAndroid Build Coastguard Worker#endif 5909*a67afe4dSAndroid Build Coastguard Worker 5910*a67afe4dSAndroid Build Coastguard Workerconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5911*a67afe4dSAndroid Build Coastguard Worker 5912*a67afe4dSAndroid Build Coastguard Workervoid *xmalloc (size_t num); 5913*a67afe4dSAndroid Build Coastguard Workerchar *xstrdup (const char *string); 5914*a67afe4dSAndroid Build Coastguard Workerconst char *base_name (const char *name); 5915*a67afe4dSAndroid Build Coastguard Workerchar *find_executable (const char *wrapper); 5916*a67afe4dSAndroid Build Coastguard Workerchar *chase_symlinks (const char *pathspec); 5917*a67afe4dSAndroid Build Coastguard Workerint make_executable (const char *path); 5918*a67afe4dSAndroid Build Coastguard Workerint check_executable (const char *path); 5919*a67afe4dSAndroid Build Coastguard Workerchar *strendzap (char *str, const char *pat); 5920*a67afe4dSAndroid Build Coastguard Workervoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 5921*a67afe4dSAndroid Build Coastguard Workervoid lt_fatal (const char *file, int line, const char *message, ...); 5922*a67afe4dSAndroid Build Coastguard Workerstatic const char *nonnull (const char *s); 5923*a67afe4dSAndroid Build Coastguard Workerstatic const char *nonempty (const char *s); 5924*a67afe4dSAndroid Build Coastguard Workervoid lt_setenv (const char *name, const char *value); 5925*a67afe4dSAndroid Build Coastguard Workerchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5926*a67afe4dSAndroid Build Coastguard Workervoid lt_update_exe_path (const char *name, const char *value); 5927*a67afe4dSAndroid Build Coastguard Workervoid lt_update_lib_path (const char *name, const char *value); 5928*a67afe4dSAndroid Build Coastguard Workerchar **prepare_spawn (char **argv); 5929*a67afe4dSAndroid Build Coastguard Workervoid lt_dump_script (FILE *f); 5930*a67afe4dSAndroid Build Coastguard WorkerEOF 5931*a67afe4dSAndroid Build Coastguard Worker 5932*a67afe4dSAndroid Build Coastguard Worker cat <<EOF 5933*a67afe4dSAndroid Build Coastguard Worker#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 5934*a67afe4dSAndroid Build Coastguard Worker# define externally_visible volatile 5935*a67afe4dSAndroid Build Coastguard Worker#else 5936*a67afe4dSAndroid Build Coastguard Worker# define externally_visible __attribute__((externally_visible)) volatile 5937*a67afe4dSAndroid Build Coastguard Worker#endif 5938*a67afe4dSAndroid Build Coastguard Workerexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5939*a67afe4dSAndroid Build Coastguard Workerconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5940*a67afe4dSAndroid Build Coastguard WorkerEOF 5941*a67afe4dSAndroid Build Coastguard Worker 5942*a67afe4dSAndroid Build Coastguard Worker if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5943*a67afe4dSAndroid Build Coastguard Worker func_to_host_path "$temp_rpath" 5944*a67afe4dSAndroid Build Coastguard Worker cat <<EOF 5945*a67afe4dSAndroid Build Coastguard Workerconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 5946*a67afe4dSAndroid Build Coastguard WorkerEOF 5947*a67afe4dSAndroid Build Coastguard Worker else 5948*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 5949*a67afe4dSAndroid Build Coastguard Workerconst char * LIB_PATH_VALUE = ""; 5950*a67afe4dSAndroid Build Coastguard WorkerEOF 5951*a67afe4dSAndroid Build Coastguard Worker fi 5952*a67afe4dSAndroid Build Coastguard Worker 5953*a67afe4dSAndroid Build Coastguard Worker if test -n "$dllsearchpath"; then 5954*a67afe4dSAndroid Build Coastguard Worker func_to_host_path "$dllsearchpath:" 5955*a67afe4dSAndroid Build Coastguard Worker cat <<EOF 5956*a67afe4dSAndroid Build Coastguard Workerconst char * EXE_PATH_VARNAME = "PATH"; 5957*a67afe4dSAndroid Build Coastguard Workerconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5958*a67afe4dSAndroid Build Coastguard WorkerEOF 5959*a67afe4dSAndroid Build Coastguard Worker else 5960*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 5961*a67afe4dSAndroid Build Coastguard Workerconst char * EXE_PATH_VARNAME = ""; 5962*a67afe4dSAndroid Build Coastguard Workerconst char * EXE_PATH_VALUE = ""; 5963*a67afe4dSAndroid Build Coastguard WorkerEOF 5964*a67afe4dSAndroid Build Coastguard Worker fi 5965*a67afe4dSAndroid Build Coastguard Worker 5966*a67afe4dSAndroid Build Coastguard Worker if test yes = "$fast_install"; then 5967*a67afe4dSAndroid Build Coastguard Worker cat <<EOF 5968*a67afe4dSAndroid Build Coastguard Workerconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5969*a67afe4dSAndroid Build Coastguard WorkerEOF 5970*a67afe4dSAndroid Build Coastguard Worker else 5971*a67afe4dSAndroid Build Coastguard Worker cat <<EOF 5972*a67afe4dSAndroid Build Coastguard Workerconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5973*a67afe4dSAndroid Build Coastguard WorkerEOF 5974*a67afe4dSAndroid Build Coastguard Worker fi 5975*a67afe4dSAndroid Build Coastguard Worker 5976*a67afe4dSAndroid Build Coastguard Worker 5977*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 5978*a67afe4dSAndroid Build Coastguard Worker 5979*a67afe4dSAndroid Build Coastguard Worker#define LTWRAPPER_OPTION_PREFIX "--lt-" 5980*a67afe4dSAndroid Build Coastguard Worker 5981*a67afe4dSAndroid Build Coastguard Workerstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5982*a67afe4dSAndroid Build Coastguard Workerstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 5983*a67afe4dSAndroid Build Coastguard Workerstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 5984*a67afe4dSAndroid Build Coastguard Worker 5985*a67afe4dSAndroid Build Coastguard Workerint 5986*a67afe4dSAndroid Build Coastguard Workermain (int argc, char *argv[]) 5987*a67afe4dSAndroid Build Coastguard Worker{ 5988*a67afe4dSAndroid Build Coastguard Worker char **newargz; 5989*a67afe4dSAndroid Build Coastguard Worker int newargc; 5990*a67afe4dSAndroid Build Coastguard Worker char *tmp_pathspec; 5991*a67afe4dSAndroid Build Coastguard Worker char *actual_cwrapper_path; 5992*a67afe4dSAndroid Build Coastguard Worker char *actual_cwrapper_name; 5993*a67afe4dSAndroid Build Coastguard Worker char *target_name; 5994*a67afe4dSAndroid Build Coastguard Worker char *lt_argv_zero; 5995*a67afe4dSAndroid Build Coastguard Worker int rval = 127; 5996*a67afe4dSAndroid Build Coastguard Worker 5997*a67afe4dSAndroid Build Coastguard Worker int i; 5998*a67afe4dSAndroid Build Coastguard Worker 5999*a67afe4dSAndroid Build Coastguard Worker program_name = (char *) xstrdup (base_name (argv[0])); 6000*a67afe4dSAndroid Build Coastguard Worker newargz = XMALLOC (char *, (size_t) argc + 1); 6001*a67afe4dSAndroid Build Coastguard Worker 6002*a67afe4dSAndroid Build Coastguard Worker /* very simple arg parsing; don't want to rely on getopt 6003*a67afe4dSAndroid Build Coastguard Worker * also, copy all non cwrapper options to newargz, except 6004*a67afe4dSAndroid Build Coastguard Worker * argz[0], which is handled differently 6005*a67afe4dSAndroid Build Coastguard Worker */ 6006*a67afe4dSAndroid Build Coastguard Worker newargc=0; 6007*a67afe4dSAndroid Build Coastguard Worker for (i = 1; i < argc; i++) 6008*a67afe4dSAndroid Build Coastguard Worker { 6009*a67afe4dSAndroid Build Coastguard Worker if (STREQ (argv[i], dumpscript_opt)) 6010*a67afe4dSAndroid Build Coastguard Worker { 6011*a67afe4dSAndroid Build Coastguard WorkerEOF 6012*a67afe4dSAndroid Build Coastguard Worker case $host in 6013*a67afe4dSAndroid Build Coastguard Worker *mingw* | *cygwin* ) 6014*a67afe4dSAndroid Build Coastguard Worker # make stdout use "unix" line endings 6015*a67afe4dSAndroid Build Coastguard Worker echo " setmode(1,_O_BINARY);" 6016*a67afe4dSAndroid Build Coastguard Worker ;; 6017*a67afe4dSAndroid Build Coastguard Worker esac 6018*a67afe4dSAndroid Build Coastguard Worker 6019*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6020*a67afe4dSAndroid Build Coastguard Worker lt_dump_script (stdout); 6021*a67afe4dSAndroid Build Coastguard Worker return 0; 6022*a67afe4dSAndroid Build Coastguard Worker } 6023*a67afe4dSAndroid Build Coastguard Worker if (STREQ (argv[i], debug_opt)) 6024*a67afe4dSAndroid Build Coastguard Worker { 6025*a67afe4dSAndroid Build Coastguard Worker lt_debug = 1; 6026*a67afe4dSAndroid Build Coastguard Worker continue; 6027*a67afe4dSAndroid Build Coastguard Worker } 6028*a67afe4dSAndroid Build Coastguard Worker if (STREQ (argv[i], ltwrapper_option_prefix)) 6029*a67afe4dSAndroid Build Coastguard Worker { 6030*a67afe4dSAndroid Build Coastguard Worker /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 6031*a67afe4dSAndroid Build Coastguard Worker namespace, but it is not one of the ones we know about and 6032*a67afe4dSAndroid Build Coastguard Worker have already dealt with, above (inluding dump-script), then 6033*a67afe4dSAndroid Build Coastguard Worker report an error. Otherwise, targets might begin to believe 6034*a67afe4dSAndroid Build Coastguard Worker they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 6035*a67afe4dSAndroid Build Coastguard Worker namespace. The first time any user complains about this, we'll 6036*a67afe4dSAndroid Build Coastguard Worker need to make LTWRAPPER_OPTION_PREFIX a configure-time option 6037*a67afe4dSAndroid Build Coastguard Worker or a configure.ac-settable value. 6038*a67afe4dSAndroid Build Coastguard Worker */ 6039*a67afe4dSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, 6040*a67afe4dSAndroid Build Coastguard Worker "unrecognized %s option: '%s'", 6041*a67afe4dSAndroid Build Coastguard Worker ltwrapper_option_prefix, argv[i]); 6042*a67afe4dSAndroid Build Coastguard Worker } 6043*a67afe4dSAndroid Build Coastguard Worker /* otherwise ... */ 6044*a67afe4dSAndroid Build Coastguard Worker newargz[++newargc] = xstrdup (argv[i]); 6045*a67afe4dSAndroid Build Coastguard Worker } 6046*a67afe4dSAndroid Build Coastguard Worker newargz[++newargc] = NULL; 6047*a67afe4dSAndroid Build Coastguard Worker 6048*a67afe4dSAndroid Build Coastguard WorkerEOF 6049*a67afe4dSAndroid Build Coastguard Worker cat <<EOF 6050*a67afe4dSAndroid Build Coastguard Worker /* The GNU banner must be the first non-error debug message */ 6051*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 6052*a67afe4dSAndroid Build Coastguard WorkerEOF 6053*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6054*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 6055*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 6056*a67afe4dSAndroid Build Coastguard Worker 6057*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec = find_executable (argv[0]); 6058*a67afe4dSAndroid Build Coastguard Worker if (tmp_pathspec == NULL) 6059*a67afe4dSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 6060*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6061*a67afe4dSAndroid Build Coastguard Worker "(main) found exe (before symlink chase) at: %s\n", 6062*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec); 6063*a67afe4dSAndroid Build Coastguard Worker 6064*a67afe4dSAndroid Build Coastguard Worker actual_cwrapper_path = chase_symlinks (tmp_pathspec); 6065*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6066*a67afe4dSAndroid Build Coastguard Worker "(main) found exe (after symlink chase) at: %s\n", 6067*a67afe4dSAndroid Build Coastguard Worker actual_cwrapper_path); 6068*a67afe4dSAndroid Build Coastguard Worker XFREE (tmp_pathspec); 6069*a67afe4dSAndroid Build Coastguard Worker 6070*a67afe4dSAndroid Build Coastguard Worker actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 6071*a67afe4dSAndroid Build Coastguard Worker strendzap (actual_cwrapper_path, actual_cwrapper_name); 6072*a67afe4dSAndroid Build Coastguard Worker 6073*a67afe4dSAndroid Build Coastguard Worker /* wrapper name transforms */ 6074*a67afe4dSAndroid Build Coastguard Worker strendzap (actual_cwrapper_name, ".exe"); 6075*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 6076*a67afe4dSAndroid Build Coastguard Worker XFREE (actual_cwrapper_name); 6077*a67afe4dSAndroid Build Coastguard Worker actual_cwrapper_name = tmp_pathspec; 6078*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec = 0; 6079*a67afe4dSAndroid Build Coastguard Worker 6080*a67afe4dSAndroid Build Coastguard Worker /* target_name transforms -- use actual target program name; might have lt- prefix */ 6081*a67afe4dSAndroid Build Coastguard Worker target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 6082*a67afe4dSAndroid Build Coastguard Worker strendzap (target_name, ".exe"); 6083*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 6084*a67afe4dSAndroid Build Coastguard Worker XFREE (target_name); 6085*a67afe4dSAndroid Build Coastguard Worker target_name = tmp_pathspec; 6086*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec = 0; 6087*a67afe4dSAndroid Build Coastguard Worker 6088*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6089*a67afe4dSAndroid Build Coastguard Worker "(main) libtool target name: %s\n", 6090*a67afe4dSAndroid Build Coastguard Worker target_name); 6091*a67afe4dSAndroid Build Coastguard WorkerEOF 6092*a67afe4dSAndroid Build Coastguard Worker 6093*a67afe4dSAndroid Build Coastguard Worker cat <<EOF 6094*a67afe4dSAndroid Build Coastguard Worker newargz[0] = 6095*a67afe4dSAndroid Build Coastguard Worker XMALLOC (char, (strlen (actual_cwrapper_path) + 6096*a67afe4dSAndroid Build Coastguard Worker strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 6097*a67afe4dSAndroid Build Coastguard Worker strcpy (newargz[0], actual_cwrapper_path); 6098*a67afe4dSAndroid Build Coastguard Worker strcat (newargz[0], "$objdir"); 6099*a67afe4dSAndroid Build Coastguard Worker strcat (newargz[0], "/"); 6100*a67afe4dSAndroid Build Coastguard WorkerEOF 6101*a67afe4dSAndroid Build Coastguard Worker 6102*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6103*a67afe4dSAndroid Build Coastguard Worker /* stop here, and copy so we don't have to do this twice */ 6104*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec = xstrdup (newargz[0]); 6105*a67afe4dSAndroid Build Coastguard Worker 6106*a67afe4dSAndroid Build Coastguard Worker /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 6107*a67afe4dSAndroid Build Coastguard Worker strcat (newargz[0], actual_cwrapper_name); 6108*a67afe4dSAndroid Build Coastguard Worker 6109*a67afe4dSAndroid Build Coastguard Worker /* DO want the lt- prefix here if it exists, so use target_name */ 6110*a67afe4dSAndroid Build Coastguard Worker lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 6111*a67afe4dSAndroid Build Coastguard Worker XFREE (tmp_pathspec); 6112*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec = NULL; 6113*a67afe4dSAndroid Build Coastguard WorkerEOF 6114*a67afe4dSAndroid Build Coastguard Worker 6115*a67afe4dSAndroid Build Coastguard Worker case $host_os in 6116*a67afe4dSAndroid Build Coastguard Worker mingw*) 6117*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6118*a67afe4dSAndroid Build Coastguard Worker { 6119*a67afe4dSAndroid Build Coastguard Worker char* p; 6120*a67afe4dSAndroid Build Coastguard Worker while ((p = strchr (newargz[0], '\\')) != NULL) 6121*a67afe4dSAndroid Build Coastguard Worker { 6122*a67afe4dSAndroid Build Coastguard Worker *p = '/'; 6123*a67afe4dSAndroid Build Coastguard Worker } 6124*a67afe4dSAndroid Build Coastguard Worker while ((p = strchr (lt_argv_zero, '\\')) != NULL) 6125*a67afe4dSAndroid Build Coastguard Worker { 6126*a67afe4dSAndroid Build Coastguard Worker *p = '/'; 6127*a67afe4dSAndroid Build Coastguard Worker } 6128*a67afe4dSAndroid Build Coastguard Worker } 6129*a67afe4dSAndroid Build Coastguard WorkerEOF 6130*a67afe4dSAndroid Build Coastguard Worker ;; 6131*a67afe4dSAndroid Build Coastguard Worker esac 6132*a67afe4dSAndroid Build Coastguard Worker 6133*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6134*a67afe4dSAndroid Build Coastguard Worker XFREE (target_name); 6135*a67afe4dSAndroid Build Coastguard Worker XFREE (actual_cwrapper_path); 6136*a67afe4dSAndroid Build Coastguard Worker XFREE (actual_cwrapper_name); 6137*a67afe4dSAndroid Build Coastguard Worker 6138*a67afe4dSAndroid Build Coastguard Worker lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 6139*a67afe4dSAndroid Build Coastguard Worker lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 6140*a67afe4dSAndroid Build Coastguard Worker /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 6141*a67afe4dSAndroid Build Coastguard Worker be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 6142*a67afe4dSAndroid Build Coastguard Worker because on Windows, both *_VARNAMEs are PATH but uninstalled 6143*a67afe4dSAndroid Build Coastguard Worker libraries must come first. */ 6144*a67afe4dSAndroid Build Coastguard Worker lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 6145*a67afe4dSAndroid Build Coastguard Worker lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 6146*a67afe4dSAndroid Build Coastguard Worker 6147*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 6148*a67afe4dSAndroid Build Coastguard Worker nonnull (lt_argv_zero)); 6149*a67afe4dSAndroid Build Coastguard Worker for (i = 0; i < newargc; i++) 6150*a67afe4dSAndroid Build Coastguard Worker { 6151*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 6152*a67afe4dSAndroid Build Coastguard Worker i, nonnull (newargz[i])); 6153*a67afe4dSAndroid Build Coastguard Worker } 6154*a67afe4dSAndroid Build Coastguard Worker 6155*a67afe4dSAndroid Build Coastguard WorkerEOF 6156*a67afe4dSAndroid Build Coastguard Worker 6157*a67afe4dSAndroid Build Coastguard Worker case $host_os in 6158*a67afe4dSAndroid Build Coastguard Worker mingw*) 6159*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6160*a67afe4dSAndroid Build Coastguard Worker /* execv doesn't actually work on mingw as expected on unix */ 6161*a67afe4dSAndroid Build Coastguard Worker newargz = prepare_spawn (newargz); 6162*a67afe4dSAndroid Build Coastguard Worker rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 6163*a67afe4dSAndroid Build Coastguard Worker if (rval == -1) 6164*a67afe4dSAndroid Build Coastguard Worker { 6165*a67afe4dSAndroid Build Coastguard Worker /* failed to start process */ 6166*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6167*a67afe4dSAndroid Build Coastguard Worker "(main) failed to launch target \"%s\": %s\n", 6168*a67afe4dSAndroid Build Coastguard Worker lt_argv_zero, nonnull (strerror (errno))); 6169*a67afe4dSAndroid Build Coastguard Worker return 127; 6170*a67afe4dSAndroid Build Coastguard Worker } 6171*a67afe4dSAndroid Build Coastguard Worker return rval; 6172*a67afe4dSAndroid Build Coastguard WorkerEOF 6173*a67afe4dSAndroid Build Coastguard Worker ;; 6174*a67afe4dSAndroid Build Coastguard Worker *) 6175*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6176*a67afe4dSAndroid Build Coastguard Worker execv (lt_argv_zero, newargz); 6177*a67afe4dSAndroid Build Coastguard Worker return rval; /* =127, but avoids unused variable warning */ 6178*a67afe4dSAndroid Build Coastguard WorkerEOF 6179*a67afe4dSAndroid Build Coastguard Worker ;; 6180*a67afe4dSAndroid Build Coastguard Worker esac 6181*a67afe4dSAndroid Build Coastguard Worker 6182*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6183*a67afe4dSAndroid Build Coastguard Worker} 6184*a67afe4dSAndroid Build Coastguard Worker 6185*a67afe4dSAndroid Build Coastguard Workervoid * 6186*a67afe4dSAndroid Build Coastguard Workerxmalloc (size_t num) 6187*a67afe4dSAndroid Build Coastguard Worker{ 6188*a67afe4dSAndroid Build Coastguard Worker void *p = (void *) malloc (num); 6189*a67afe4dSAndroid Build Coastguard Worker if (!p) 6190*a67afe4dSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "memory exhausted"); 6191*a67afe4dSAndroid Build Coastguard Worker 6192*a67afe4dSAndroid Build Coastguard Worker return p; 6193*a67afe4dSAndroid Build Coastguard Worker} 6194*a67afe4dSAndroid Build Coastguard Worker 6195*a67afe4dSAndroid Build Coastguard Workerchar * 6196*a67afe4dSAndroid Build Coastguard Workerxstrdup (const char *string) 6197*a67afe4dSAndroid Build Coastguard Worker{ 6198*a67afe4dSAndroid Build Coastguard Worker return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 6199*a67afe4dSAndroid Build Coastguard Worker string) : NULL; 6200*a67afe4dSAndroid Build Coastguard Worker} 6201*a67afe4dSAndroid Build Coastguard Worker 6202*a67afe4dSAndroid Build Coastguard Workerconst char * 6203*a67afe4dSAndroid Build Coastguard Workerbase_name (const char *name) 6204*a67afe4dSAndroid Build Coastguard Worker{ 6205*a67afe4dSAndroid Build Coastguard Worker const char *base; 6206*a67afe4dSAndroid Build Coastguard Worker 6207*a67afe4dSAndroid Build Coastguard Worker#if defined HAVE_DOS_BASED_FILE_SYSTEM 6208*a67afe4dSAndroid Build Coastguard Worker /* Skip over the disk name in MSDOS pathnames. */ 6209*a67afe4dSAndroid Build Coastguard Worker if (isalpha ((unsigned char) name[0]) && name[1] == ':') 6210*a67afe4dSAndroid Build Coastguard Worker name += 2; 6211*a67afe4dSAndroid Build Coastguard Worker#endif 6212*a67afe4dSAndroid Build Coastguard Worker 6213*a67afe4dSAndroid Build Coastguard Worker for (base = name; *name; name++) 6214*a67afe4dSAndroid Build Coastguard Worker if (IS_DIR_SEPARATOR (*name)) 6215*a67afe4dSAndroid Build Coastguard Worker base = name + 1; 6216*a67afe4dSAndroid Build Coastguard Worker return base; 6217*a67afe4dSAndroid Build Coastguard Worker} 6218*a67afe4dSAndroid Build Coastguard Worker 6219*a67afe4dSAndroid Build Coastguard Workerint 6220*a67afe4dSAndroid Build Coastguard Workercheck_executable (const char *path) 6221*a67afe4dSAndroid Build Coastguard Worker{ 6222*a67afe4dSAndroid Build Coastguard Worker struct stat st; 6223*a67afe4dSAndroid Build Coastguard Worker 6224*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 6225*a67afe4dSAndroid Build Coastguard Worker nonempty (path)); 6226*a67afe4dSAndroid Build Coastguard Worker if ((!path) || (!*path)) 6227*a67afe4dSAndroid Build Coastguard Worker return 0; 6228*a67afe4dSAndroid Build Coastguard Worker 6229*a67afe4dSAndroid Build Coastguard Worker if ((stat (path, &st) >= 0) 6230*a67afe4dSAndroid Build Coastguard Worker && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 6231*a67afe4dSAndroid Build Coastguard Worker return 1; 6232*a67afe4dSAndroid Build Coastguard Worker else 6233*a67afe4dSAndroid Build Coastguard Worker return 0; 6234*a67afe4dSAndroid Build Coastguard Worker} 6235*a67afe4dSAndroid Build Coastguard Worker 6236*a67afe4dSAndroid Build Coastguard Workerint 6237*a67afe4dSAndroid Build Coastguard Workermake_executable (const char *path) 6238*a67afe4dSAndroid Build Coastguard Worker{ 6239*a67afe4dSAndroid Build Coastguard Worker int rval = 0; 6240*a67afe4dSAndroid Build Coastguard Worker struct stat st; 6241*a67afe4dSAndroid Build Coastguard Worker 6242*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 6243*a67afe4dSAndroid Build Coastguard Worker nonempty (path)); 6244*a67afe4dSAndroid Build Coastguard Worker if ((!path) || (!*path)) 6245*a67afe4dSAndroid Build Coastguard Worker return 0; 6246*a67afe4dSAndroid Build Coastguard Worker 6247*a67afe4dSAndroid Build Coastguard Worker if (stat (path, &st) >= 0) 6248*a67afe4dSAndroid Build Coastguard Worker { 6249*a67afe4dSAndroid Build Coastguard Worker rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 6250*a67afe4dSAndroid Build Coastguard Worker } 6251*a67afe4dSAndroid Build Coastguard Worker return rval; 6252*a67afe4dSAndroid Build Coastguard Worker} 6253*a67afe4dSAndroid Build Coastguard Worker 6254*a67afe4dSAndroid Build Coastguard Worker/* Searches for the full path of the wrapper. Returns 6255*a67afe4dSAndroid Build Coastguard Worker newly allocated full path name if found, NULL otherwise 6256*a67afe4dSAndroid Build Coastguard Worker Does not chase symlinks, even on platforms that support them. 6257*a67afe4dSAndroid Build Coastguard Worker*/ 6258*a67afe4dSAndroid Build Coastguard Workerchar * 6259*a67afe4dSAndroid Build Coastguard Workerfind_executable (const char *wrapper) 6260*a67afe4dSAndroid Build Coastguard Worker{ 6261*a67afe4dSAndroid Build Coastguard Worker int has_slash = 0; 6262*a67afe4dSAndroid Build Coastguard Worker const char *p; 6263*a67afe4dSAndroid Build Coastguard Worker const char *p_next; 6264*a67afe4dSAndroid Build Coastguard Worker /* static buffer for getcwd */ 6265*a67afe4dSAndroid Build Coastguard Worker char tmp[LT_PATHMAX + 1]; 6266*a67afe4dSAndroid Build Coastguard Worker size_t tmp_len; 6267*a67afe4dSAndroid Build Coastguard Worker char *concat_name; 6268*a67afe4dSAndroid Build Coastguard Worker 6269*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6270*a67afe4dSAndroid Build Coastguard Worker nonempty (wrapper)); 6271*a67afe4dSAndroid Build Coastguard Worker 6272*a67afe4dSAndroid Build Coastguard Worker if ((wrapper == NULL) || (*wrapper == '\0')) 6273*a67afe4dSAndroid Build Coastguard Worker return NULL; 6274*a67afe4dSAndroid Build Coastguard Worker 6275*a67afe4dSAndroid Build Coastguard Worker /* Absolute path? */ 6276*a67afe4dSAndroid Build Coastguard Worker#if defined HAVE_DOS_BASED_FILE_SYSTEM 6277*a67afe4dSAndroid Build Coastguard Worker if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6278*a67afe4dSAndroid Build Coastguard Worker { 6279*a67afe4dSAndroid Build Coastguard Worker concat_name = xstrdup (wrapper); 6280*a67afe4dSAndroid Build Coastguard Worker if (check_executable (concat_name)) 6281*a67afe4dSAndroid Build Coastguard Worker return concat_name; 6282*a67afe4dSAndroid Build Coastguard Worker XFREE (concat_name); 6283*a67afe4dSAndroid Build Coastguard Worker } 6284*a67afe4dSAndroid Build Coastguard Worker else 6285*a67afe4dSAndroid Build Coastguard Worker { 6286*a67afe4dSAndroid Build Coastguard Worker#endif 6287*a67afe4dSAndroid Build Coastguard Worker if (IS_DIR_SEPARATOR (wrapper[0])) 6288*a67afe4dSAndroid Build Coastguard Worker { 6289*a67afe4dSAndroid Build Coastguard Worker concat_name = xstrdup (wrapper); 6290*a67afe4dSAndroid Build Coastguard Worker if (check_executable (concat_name)) 6291*a67afe4dSAndroid Build Coastguard Worker return concat_name; 6292*a67afe4dSAndroid Build Coastguard Worker XFREE (concat_name); 6293*a67afe4dSAndroid Build Coastguard Worker } 6294*a67afe4dSAndroid Build Coastguard Worker#if defined HAVE_DOS_BASED_FILE_SYSTEM 6295*a67afe4dSAndroid Build Coastguard Worker } 6296*a67afe4dSAndroid Build Coastguard Worker#endif 6297*a67afe4dSAndroid Build Coastguard Worker 6298*a67afe4dSAndroid Build Coastguard Worker for (p = wrapper; *p; p++) 6299*a67afe4dSAndroid Build Coastguard Worker if (*p == '/') 6300*a67afe4dSAndroid Build Coastguard Worker { 6301*a67afe4dSAndroid Build Coastguard Worker has_slash = 1; 6302*a67afe4dSAndroid Build Coastguard Worker break; 6303*a67afe4dSAndroid Build Coastguard Worker } 6304*a67afe4dSAndroid Build Coastguard Worker if (!has_slash) 6305*a67afe4dSAndroid Build Coastguard Worker { 6306*a67afe4dSAndroid Build Coastguard Worker /* no slashes; search PATH */ 6307*a67afe4dSAndroid Build Coastguard Worker const char *path = getenv ("PATH"); 6308*a67afe4dSAndroid Build Coastguard Worker if (path != NULL) 6309*a67afe4dSAndroid Build Coastguard Worker { 6310*a67afe4dSAndroid Build Coastguard Worker for (p = path; *p; p = p_next) 6311*a67afe4dSAndroid Build Coastguard Worker { 6312*a67afe4dSAndroid Build Coastguard Worker const char *q; 6313*a67afe4dSAndroid Build Coastguard Worker size_t p_len; 6314*a67afe4dSAndroid Build Coastguard Worker for (q = p; *q; q++) 6315*a67afe4dSAndroid Build Coastguard Worker if (IS_PATH_SEPARATOR (*q)) 6316*a67afe4dSAndroid Build Coastguard Worker break; 6317*a67afe4dSAndroid Build Coastguard Worker p_len = (size_t) (q - p); 6318*a67afe4dSAndroid Build Coastguard Worker p_next = (*q == '\0' ? q : q + 1); 6319*a67afe4dSAndroid Build Coastguard Worker if (p_len == 0) 6320*a67afe4dSAndroid Build Coastguard Worker { 6321*a67afe4dSAndroid Build Coastguard Worker /* empty path: current directory */ 6322*a67afe4dSAndroid Build Coastguard Worker if (getcwd (tmp, LT_PATHMAX) == NULL) 6323*a67afe4dSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6324*a67afe4dSAndroid Build Coastguard Worker nonnull (strerror (errno))); 6325*a67afe4dSAndroid Build Coastguard Worker tmp_len = strlen (tmp); 6326*a67afe4dSAndroid Build Coastguard Worker concat_name = 6327*a67afe4dSAndroid Build Coastguard Worker XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6328*a67afe4dSAndroid Build Coastguard Worker memcpy (concat_name, tmp, tmp_len); 6329*a67afe4dSAndroid Build Coastguard Worker concat_name[tmp_len] = '/'; 6330*a67afe4dSAndroid Build Coastguard Worker strcpy (concat_name + tmp_len + 1, wrapper); 6331*a67afe4dSAndroid Build Coastguard Worker } 6332*a67afe4dSAndroid Build Coastguard Worker else 6333*a67afe4dSAndroid Build Coastguard Worker { 6334*a67afe4dSAndroid Build Coastguard Worker concat_name = 6335*a67afe4dSAndroid Build Coastguard Worker XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6336*a67afe4dSAndroid Build Coastguard Worker memcpy (concat_name, p, p_len); 6337*a67afe4dSAndroid Build Coastguard Worker concat_name[p_len] = '/'; 6338*a67afe4dSAndroid Build Coastguard Worker strcpy (concat_name + p_len + 1, wrapper); 6339*a67afe4dSAndroid Build Coastguard Worker } 6340*a67afe4dSAndroid Build Coastguard Worker if (check_executable (concat_name)) 6341*a67afe4dSAndroid Build Coastguard Worker return concat_name; 6342*a67afe4dSAndroid Build Coastguard Worker XFREE (concat_name); 6343*a67afe4dSAndroid Build Coastguard Worker } 6344*a67afe4dSAndroid Build Coastguard Worker } 6345*a67afe4dSAndroid Build Coastguard Worker /* not found in PATH; assume curdir */ 6346*a67afe4dSAndroid Build Coastguard Worker } 6347*a67afe4dSAndroid Build Coastguard Worker /* Relative path | not found in path: prepend cwd */ 6348*a67afe4dSAndroid Build Coastguard Worker if (getcwd (tmp, LT_PATHMAX) == NULL) 6349*a67afe4dSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6350*a67afe4dSAndroid Build Coastguard Worker nonnull (strerror (errno))); 6351*a67afe4dSAndroid Build Coastguard Worker tmp_len = strlen (tmp); 6352*a67afe4dSAndroid Build Coastguard Worker concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6353*a67afe4dSAndroid Build Coastguard Worker memcpy (concat_name, tmp, tmp_len); 6354*a67afe4dSAndroid Build Coastguard Worker concat_name[tmp_len] = '/'; 6355*a67afe4dSAndroid Build Coastguard Worker strcpy (concat_name + tmp_len + 1, wrapper); 6356*a67afe4dSAndroid Build Coastguard Worker 6357*a67afe4dSAndroid Build Coastguard Worker if (check_executable (concat_name)) 6358*a67afe4dSAndroid Build Coastguard Worker return concat_name; 6359*a67afe4dSAndroid Build Coastguard Worker XFREE (concat_name); 6360*a67afe4dSAndroid Build Coastguard Worker return NULL; 6361*a67afe4dSAndroid Build Coastguard Worker} 6362*a67afe4dSAndroid Build Coastguard Worker 6363*a67afe4dSAndroid Build Coastguard Workerchar * 6364*a67afe4dSAndroid Build Coastguard Workerchase_symlinks (const char *pathspec) 6365*a67afe4dSAndroid Build Coastguard Worker{ 6366*a67afe4dSAndroid Build Coastguard Worker#ifndef S_ISLNK 6367*a67afe4dSAndroid Build Coastguard Worker return xstrdup (pathspec); 6368*a67afe4dSAndroid Build Coastguard Worker#else 6369*a67afe4dSAndroid Build Coastguard Worker char buf[LT_PATHMAX]; 6370*a67afe4dSAndroid Build Coastguard Worker struct stat s; 6371*a67afe4dSAndroid Build Coastguard Worker char *tmp_pathspec = xstrdup (pathspec); 6372*a67afe4dSAndroid Build Coastguard Worker char *p; 6373*a67afe4dSAndroid Build Coastguard Worker int has_symlinks = 0; 6374*a67afe4dSAndroid Build Coastguard Worker while (strlen (tmp_pathspec) && !has_symlinks) 6375*a67afe4dSAndroid Build Coastguard Worker { 6376*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6377*a67afe4dSAndroid Build Coastguard Worker "checking path component for symlinks: %s\n", 6378*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec); 6379*a67afe4dSAndroid Build Coastguard Worker if (lstat (tmp_pathspec, &s) == 0) 6380*a67afe4dSAndroid Build Coastguard Worker { 6381*a67afe4dSAndroid Build Coastguard Worker if (S_ISLNK (s.st_mode) != 0) 6382*a67afe4dSAndroid Build Coastguard Worker { 6383*a67afe4dSAndroid Build Coastguard Worker has_symlinks = 1; 6384*a67afe4dSAndroid Build Coastguard Worker break; 6385*a67afe4dSAndroid Build Coastguard Worker } 6386*a67afe4dSAndroid Build Coastguard Worker 6387*a67afe4dSAndroid Build Coastguard Worker /* search backwards for last DIR_SEPARATOR */ 6388*a67afe4dSAndroid Build Coastguard Worker p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6389*a67afe4dSAndroid Build Coastguard Worker while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6390*a67afe4dSAndroid Build Coastguard Worker p--; 6391*a67afe4dSAndroid Build Coastguard Worker if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6392*a67afe4dSAndroid Build Coastguard Worker { 6393*a67afe4dSAndroid Build Coastguard Worker /* no more DIR_SEPARATORS left */ 6394*a67afe4dSAndroid Build Coastguard Worker break; 6395*a67afe4dSAndroid Build Coastguard Worker } 6396*a67afe4dSAndroid Build Coastguard Worker *p = '\0'; 6397*a67afe4dSAndroid Build Coastguard Worker } 6398*a67afe4dSAndroid Build Coastguard Worker else 6399*a67afe4dSAndroid Build Coastguard Worker { 6400*a67afe4dSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, 6401*a67afe4dSAndroid Build Coastguard Worker "error accessing file \"%s\": %s", 6402*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec, nonnull (strerror (errno))); 6403*a67afe4dSAndroid Build Coastguard Worker } 6404*a67afe4dSAndroid Build Coastguard Worker } 6405*a67afe4dSAndroid Build Coastguard Worker XFREE (tmp_pathspec); 6406*a67afe4dSAndroid Build Coastguard Worker 6407*a67afe4dSAndroid Build Coastguard Worker if (!has_symlinks) 6408*a67afe4dSAndroid Build Coastguard Worker { 6409*a67afe4dSAndroid Build Coastguard Worker return xstrdup (pathspec); 6410*a67afe4dSAndroid Build Coastguard Worker } 6411*a67afe4dSAndroid Build Coastguard Worker 6412*a67afe4dSAndroid Build Coastguard Worker tmp_pathspec = realpath (pathspec, buf); 6413*a67afe4dSAndroid Build Coastguard Worker if (tmp_pathspec == 0) 6414*a67afe4dSAndroid Build Coastguard Worker { 6415*a67afe4dSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, 6416*a67afe4dSAndroid Build Coastguard Worker "could not follow symlinks for %s", pathspec); 6417*a67afe4dSAndroid Build Coastguard Worker } 6418*a67afe4dSAndroid Build Coastguard Worker return xstrdup (tmp_pathspec); 6419*a67afe4dSAndroid Build Coastguard Worker#endif 6420*a67afe4dSAndroid Build Coastguard Worker} 6421*a67afe4dSAndroid Build Coastguard Worker 6422*a67afe4dSAndroid Build Coastguard Workerchar * 6423*a67afe4dSAndroid Build Coastguard Workerstrendzap (char *str, const char *pat) 6424*a67afe4dSAndroid Build Coastguard Worker{ 6425*a67afe4dSAndroid Build Coastguard Worker size_t len, patlen; 6426*a67afe4dSAndroid Build Coastguard Worker 6427*a67afe4dSAndroid Build Coastguard Worker assert (str != NULL); 6428*a67afe4dSAndroid Build Coastguard Worker assert (pat != NULL); 6429*a67afe4dSAndroid Build Coastguard Worker 6430*a67afe4dSAndroid Build Coastguard Worker len = strlen (str); 6431*a67afe4dSAndroid Build Coastguard Worker patlen = strlen (pat); 6432*a67afe4dSAndroid Build Coastguard Worker 6433*a67afe4dSAndroid Build Coastguard Worker if (patlen <= len) 6434*a67afe4dSAndroid Build Coastguard Worker { 6435*a67afe4dSAndroid Build Coastguard Worker str += len - patlen; 6436*a67afe4dSAndroid Build Coastguard Worker if (STREQ (str, pat)) 6437*a67afe4dSAndroid Build Coastguard Worker *str = '\0'; 6438*a67afe4dSAndroid Build Coastguard Worker } 6439*a67afe4dSAndroid Build Coastguard Worker return str; 6440*a67afe4dSAndroid Build Coastguard Worker} 6441*a67afe4dSAndroid Build Coastguard Worker 6442*a67afe4dSAndroid Build Coastguard Workervoid 6443*a67afe4dSAndroid Build Coastguard Workerlt_debugprintf (const char *file, int line, const char *fmt, ...) 6444*a67afe4dSAndroid Build Coastguard Worker{ 6445*a67afe4dSAndroid Build Coastguard Worker va_list args; 6446*a67afe4dSAndroid Build Coastguard Worker if (lt_debug) 6447*a67afe4dSAndroid Build Coastguard Worker { 6448*a67afe4dSAndroid Build Coastguard Worker (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6449*a67afe4dSAndroid Build Coastguard Worker va_start (args, fmt); 6450*a67afe4dSAndroid Build Coastguard Worker (void) vfprintf (stderr, fmt, args); 6451*a67afe4dSAndroid Build Coastguard Worker va_end (args); 6452*a67afe4dSAndroid Build Coastguard Worker } 6453*a67afe4dSAndroid Build Coastguard Worker} 6454*a67afe4dSAndroid Build Coastguard Worker 6455*a67afe4dSAndroid Build Coastguard Workerstatic void 6456*a67afe4dSAndroid Build Coastguard Workerlt_error_core (int exit_status, const char *file, 6457*a67afe4dSAndroid Build Coastguard Worker int line, const char *mode, 6458*a67afe4dSAndroid Build Coastguard Worker const char *message, va_list ap) 6459*a67afe4dSAndroid Build Coastguard Worker{ 6460*a67afe4dSAndroid Build Coastguard Worker fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6461*a67afe4dSAndroid Build Coastguard Worker vfprintf (stderr, message, ap); 6462*a67afe4dSAndroid Build Coastguard Worker fprintf (stderr, ".\n"); 6463*a67afe4dSAndroid Build Coastguard Worker 6464*a67afe4dSAndroid Build Coastguard Worker if (exit_status >= 0) 6465*a67afe4dSAndroid Build Coastguard Worker exit (exit_status); 6466*a67afe4dSAndroid Build Coastguard Worker} 6467*a67afe4dSAndroid Build Coastguard Worker 6468*a67afe4dSAndroid Build Coastguard Workervoid 6469*a67afe4dSAndroid Build Coastguard Workerlt_fatal (const char *file, int line, const char *message, ...) 6470*a67afe4dSAndroid Build Coastguard Worker{ 6471*a67afe4dSAndroid Build Coastguard Worker va_list ap; 6472*a67afe4dSAndroid Build Coastguard Worker va_start (ap, message); 6473*a67afe4dSAndroid Build Coastguard Worker lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6474*a67afe4dSAndroid Build Coastguard Worker va_end (ap); 6475*a67afe4dSAndroid Build Coastguard Worker} 6476*a67afe4dSAndroid Build Coastguard Worker 6477*a67afe4dSAndroid Build Coastguard Workerstatic const char * 6478*a67afe4dSAndroid Build Coastguard Workernonnull (const char *s) 6479*a67afe4dSAndroid Build Coastguard Worker{ 6480*a67afe4dSAndroid Build Coastguard Worker return s ? s : "(null)"; 6481*a67afe4dSAndroid Build Coastguard Worker} 6482*a67afe4dSAndroid Build Coastguard Worker 6483*a67afe4dSAndroid Build Coastguard Workerstatic const char * 6484*a67afe4dSAndroid Build Coastguard Workernonempty (const char *s) 6485*a67afe4dSAndroid Build Coastguard Worker{ 6486*a67afe4dSAndroid Build Coastguard Worker return (s && !*s) ? "(empty)" : nonnull (s); 6487*a67afe4dSAndroid Build Coastguard Worker} 6488*a67afe4dSAndroid Build Coastguard Worker 6489*a67afe4dSAndroid Build Coastguard Workervoid 6490*a67afe4dSAndroid Build Coastguard Workerlt_setenv (const char *name, const char *value) 6491*a67afe4dSAndroid Build Coastguard Worker{ 6492*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6493*a67afe4dSAndroid Build Coastguard Worker "(lt_setenv) setting '%s' to '%s'\n", 6494*a67afe4dSAndroid Build Coastguard Worker nonnull (name), nonnull (value)); 6495*a67afe4dSAndroid Build Coastguard Worker { 6496*a67afe4dSAndroid Build Coastguard Worker#ifdef HAVE_SETENV 6497*a67afe4dSAndroid Build Coastguard Worker /* always make a copy, for consistency with !HAVE_SETENV */ 6498*a67afe4dSAndroid Build Coastguard Worker char *str = xstrdup (value); 6499*a67afe4dSAndroid Build Coastguard Worker setenv (name, str, 1); 6500*a67afe4dSAndroid Build Coastguard Worker#else 6501*a67afe4dSAndroid Build Coastguard Worker size_t len = strlen (name) + 1 + strlen (value) + 1; 6502*a67afe4dSAndroid Build Coastguard Worker char *str = XMALLOC (char, len); 6503*a67afe4dSAndroid Build Coastguard Worker sprintf (str, "%s=%s", name, value); 6504*a67afe4dSAndroid Build Coastguard Worker if (putenv (str) != EXIT_SUCCESS) 6505*a67afe4dSAndroid Build Coastguard Worker { 6506*a67afe4dSAndroid Build Coastguard Worker XFREE (str); 6507*a67afe4dSAndroid Build Coastguard Worker } 6508*a67afe4dSAndroid Build Coastguard Worker#endif 6509*a67afe4dSAndroid Build Coastguard Worker } 6510*a67afe4dSAndroid Build Coastguard Worker} 6511*a67afe4dSAndroid Build Coastguard Worker 6512*a67afe4dSAndroid Build Coastguard Workerchar * 6513*a67afe4dSAndroid Build Coastguard Workerlt_extend_str (const char *orig_value, const char *add, int to_end) 6514*a67afe4dSAndroid Build Coastguard Worker{ 6515*a67afe4dSAndroid Build Coastguard Worker char *new_value; 6516*a67afe4dSAndroid Build Coastguard Worker if (orig_value && *orig_value) 6517*a67afe4dSAndroid Build Coastguard Worker { 6518*a67afe4dSAndroid Build Coastguard Worker size_t orig_value_len = strlen (orig_value); 6519*a67afe4dSAndroid Build Coastguard Worker size_t add_len = strlen (add); 6520*a67afe4dSAndroid Build Coastguard Worker new_value = XMALLOC (char, add_len + orig_value_len + 1); 6521*a67afe4dSAndroid Build Coastguard Worker if (to_end) 6522*a67afe4dSAndroid Build Coastguard Worker { 6523*a67afe4dSAndroid Build Coastguard Worker strcpy (new_value, orig_value); 6524*a67afe4dSAndroid Build Coastguard Worker strcpy (new_value + orig_value_len, add); 6525*a67afe4dSAndroid Build Coastguard Worker } 6526*a67afe4dSAndroid Build Coastguard Worker else 6527*a67afe4dSAndroid Build Coastguard Worker { 6528*a67afe4dSAndroid Build Coastguard Worker strcpy (new_value, add); 6529*a67afe4dSAndroid Build Coastguard Worker strcpy (new_value + add_len, orig_value); 6530*a67afe4dSAndroid Build Coastguard Worker } 6531*a67afe4dSAndroid Build Coastguard Worker } 6532*a67afe4dSAndroid Build Coastguard Worker else 6533*a67afe4dSAndroid Build Coastguard Worker { 6534*a67afe4dSAndroid Build Coastguard Worker new_value = xstrdup (add); 6535*a67afe4dSAndroid Build Coastguard Worker } 6536*a67afe4dSAndroid Build Coastguard Worker return new_value; 6537*a67afe4dSAndroid Build Coastguard Worker} 6538*a67afe4dSAndroid Build Coastguard Worker 6539*a67afe4dSAndroid Build Coastguard Workervoid 6540*a67afe4dSAndroid Build Coastguard Workerlt_update_exe_path (const char *name, const char *value) 6541*a67afe4dSAndroid Build Coastguard Worker{ 6542*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6543*a67afe4dSAndroid Build Coastguard Worker "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6544*a67afe4dSAndroid Build Coastguard Worker nonnull (name), nonnull (value)); 6545*a67afe4dSAndroid Build Coastguard Worker 6546*a67afe4dSAndroid Build Coastguard Worker if (name && *name && value && *value) 6547*a67afe4dSAndroid Build Coastguard Worker { 6548*a67afe4dSAndroid Build Coastguard Worker char *new_value = lt_extend_str (getenv (name), value, 0); 6549*a67afe4dSAndroid Build Coastguard Worker /* some systems can't cope with a ':'-terminated path #' */ 6550*a67afe4dSAndroid Build Coastguard Worker size_t len = strlen (new_value); 6551*a67afe4dSAndroid Build Coastguard Worker while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6552*a67afe4dSAndroid Build Coastguard Worker { 6553*a67afe4dSAndroid Build Coastguard Worker new_value[--len] = '\0'; 6554*a67afe4dSAndroid Build Coastguard Worker } 6555*a67afe4dSAndroid Build Coastguard Worker lt_setenv (name, new_value); 6556*a67afe4dSAndroid Build Coastguard Worker XFREE (new_value); 6557*a67afe4dSAndroid Build Coastguard Worker } 6558*a67afe4dSAndroid Build Coastguard Worker} 6559*a67afe4dSAndroid Build Coastguard Worker 6560*a67afe4dSAndroid Build Coastguard Workervoid 6561*a67afe4dSAndroid Build Coastguard Workerlt_update_lib_path (const char *name, const char *value) 6562*a67afe4dSAndroid Build Coastguard Worker{ 6563*a67afe4dSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6564*a67afe4dSAndroid Build Coastguard Worker "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6565*a67afe4dSAndroid Build Coastguard Worker nonnull (name), nonnull (value)); 6566*a67afe4dSAndroid Build Coastguard Worker 6567*a67afe4dSAndroid Build Coastguard Worker if (name && *name && value && *value) 6568*a67afe4dSAndroid Build Coastguard Worker { 6569*a67afe4dSAndroid Build Coastguard Worker char *new_value = lt_extend_str (getenv (name), value, 0); 6570*a67afe4dSAndroid Build Coastguard Worker lt_setenv (name, new_value); 6571*a67afe4dSAndroid Build Coastguard Worker XFREE (new_value); 6572*a67afe4dSAndroid Build Coastguard Worker } 6573*a67afe4dSAndroid Build Coastguard Worker} 6574*a67afe4dSAndroid Build Coastguard Worker 6575*a67afe4dSAndroid Build Coastguard WorkerEOF 6576*a67afe4dSAndroid Build Coastguard Worker case $host_os in 6577*a67afe4dSAndroid Build Coastguard Worker mingw*) 6578*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6579*a67afe4dSAndroid Build Coastguard Worker 6580*a67afe4dSAndroid Build Coastguard Worker/* Prepares an argument vector before calling spawn(). 6581*a67afe4dSAndroid Build Coastguard Worker Note that spawn() does not by itself call the command interpreter 6582*a67afe4dSAndroid Build Coastguard Worker (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6583*a67afe4dSAndroid Build Coastguard Worker ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6584*a67afe4dSAndroid Build Coastguard Worker GetVersionEx(&v); 6585*a67afe4dSAndroid Build Coastguard Worker v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6586*a67afe4dSAndroid Build Coastguard Worker }) ? "cmd.exe" : "command.com"). 6587*a67afe4dSAndroid Build Coastguard Worker Instead it simply concatenates the arguments, separated by ' ', and calls 6588*a67afe4dSAndroid Build Coastguard Worker CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6589*a67afe4dSAndroid Build Coastguard Worker interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6590*a67afe4dSAndroid Build Coastguard Worker special way: 6591*a67afe4dSAndroid Build Coastguard Worker - Space and tab are interpreted as delimiters. They are not treated as 6592*a67afe4dSAndroid Build Coastguard Worker delimiters if they are surrounded by double quotes: "...". 6593*a67afe4dSAndroid Build Coastguard Worker - Unescaped double quotes are removed from the input. Their only effect is 6594*a67afe4dSAndroid Build Coastguard Worker that within double quotes, space and tab are treated like normal 6595*a67afe4dSAndroid Build Coastguard Worker characters. 6596*a67afe4dSAndroid Build Coastguard Worker - Backslashes not followed by double quotes are not special. 6597*a67afe4dSAndroid Build Coastguard Worker - But 2*n+1 backslashes followed by a double quote become 6598*a67afe4dSAndroid Build Coastguard Worker n backslashes followed by a double quote (n >= 0): 6599*a67afe4dSAndroid Build Coastguard Worker \" -> " 6600*a67afe4dSAndroid Build Coastguard Worker \\\" -> \" 6601*a67afe4dSAndroid Build Coastguard Worker \\\\\" -> \\" 6602*a67afe4dSAndroid Build Coastguard Worker */ 6603*a67afe4dSAndroid 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" 6604*a67afe4dSAndroid 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" 6605*a67afe4dSAndroid Build Coastguard Workerchar ** 6606*a67afe4dSAndroid Build Coastguard Workerprepare_spawn (char **argv) 6607*a67afe4dSAndroid Build Coastguard Worker{ 6608*a67afe4dSAndroid Build Coastguard Worker size_t argc; 6609*a67afe4dSAndroid Build Coastguard Worker char **new_argv; 6610*a67afe4dSAndroid Build Coastguard Worker size_t i; 6611*a67afe4dSAndroid Build Coastguard Worker 6612*a67afe4dSAndroid Build Coastguard Worker /* Count number of arguments. */ 6613*a67afe4dSAndroid Build Coastguard Worker for (argc = 0; argv[argc] != NULL; argc++) 6614*a67afe4dSAndroid Build Coastguard Worker ; 6615*a67afe4dSAndroid Build Coastguard Worker 6616*a67afe4dSAndroid Build Coastguard Worker /* Allocate new argument vector. */ 6617*a67afe4dSAndroid Build Coastguard Worker new_argv = XMALLOC (char *, argc + 1); 6618*a67afe4dSAndroid Build Coastguard Worker 6619*a67afe4dSAndroid Build Coastguard Worker /* Put quoted arguments into the new argument vector. */ 6620*a67afe4dSAndroid Build Coastguard Worker for (i = 0; i < argc; i++) 6621*a67afe4dSAndroid Build Coastguard Worker { 6622*a67afe4dSAndroid Build Coastguard Worker const char *string = argv[i]; 6623*a67afe4dSAndroid Build Coastguard Worker 6624*a67afe4dSAndroid Build Coastguard Worker if (string[0] == '\0') 6625*a67afe4dSAndroid Build Coastguard Worker new_argv[i] = xstrdup ("\"\""); 6626*a67afe4dSAndroid Build Coastguard Worker else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6627*a67afe4dSAndroid Build Coastguard Worker { 6628*a67afe4dSAndroid Build Coastguard Worker int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6629*a67afe4dSAndroid Build Coastguard Worker size_t length; 6630*a67afe4dSAndroid Build Coastguard Worker unsigned int backslashes; 6631*a67afe4dSAndroid Build Coastguard Worker const char *s; 6632*a67afe4dSAndroid Build Coastguard Worker char *quoted_string; 6633*a67afe4dSAndroid Build Coastguard Worker char *p; 6634*a67afe4dSAndroid Build Coastguard Worker 6635*a67afe4dSAndroid Build Coastguard Worker length = 0; 6636*a67afe4dSAndroid Build Coastguard Worker backslashes = 0; 6637*a67afe4dSAndroid Build Coastguard Worker if (quote_around) 6638*a67afe4dSAndroid Build Coastguard Worker length++; 6639*a67afe4dSAndroid Build Coastguard Worker for (s = string; *s != '\0'; s++) 6640*a67afe4dSAndroid Build Coastguard Worker { 6641*a67afe4dSAndroid Build Coastguard Worker char c = *s; 6642*a67afe4dSAndroid Build Coastguard Worker if (c == '"') 6643*a67afe4dSAndroid Build Coastguard Worker length += backslashes + 1; 6644*a67afe4dSAndroid Build Coastguard Worker length++; 6645*a67afe4dSAndroid Build Coastguard Worker if (c == '\\') 6646*a67afe4dSAndroid Build Coastguard Worker backslashes++; 6647*a67afe4dSAndroid Build Coastguard Worker else 6648*a67afe4dSAndroid Build Coastguard Worker backslashes = 0; 6649*a67afe4dSAndroid Build Coastguard Worker } 6650*a67afe4dSAndroid Build Coastguard Worker if (quote_around) 6651*a67afe4dSAndroid Build Coastguard Worker length += backslashes + 1; 6652*a67afe4dSAndroid Build Coastguard Worker 6653*a67afe4dSAndroid Build Coastguard Worker quoted_string = XMALLOC (char, length + 1); 6654*a67afe4dSAndroid Build Coastguard Worker 6655*a67afe4dSAndroid Build Coastguard Worker p = quoted_string; 6656*a67afe4dSAndroid Build Coastguard Worker backslashes = 0; 6657*a67afe4dSAndroid Build Coastguard Worker if (quote_around) 6658*a67afe4dSAndroid Build Coastguard Worker *p++ = '"'; 6659*a67afe4dSAndroid Build Coastguard Worker for (s = string; *s != '\0'; s++) 6660*a67afe4dSAndroid Build Coastguard Worker { 6661*a67afe4dSAndroid Build Coastguard Worker char c = *s; 6662*a67afe4dSAndroid Build Coastguard Worker if (c == '"') 6663*a67afe4dSAndroid Build Coastguard Worker { 6664*a67afe4dSAndroid Build Coastguard Worker unsigned int j; 6665*a67afe4dSAndroid Build Coastguard Worker for (j = backslashes + 1; j > 0; j--) 6666*a67afe4dSAndroid Build Coastguard Worker *p++ = '\\'; 6667*a67afe4dSAndroid Build Coastguard Worker } 6668*a67afe4dSAndroid Build Coastguard Worker *p++ = c; 6669*a67afe4dSAndroid Build Coastguard Worker if (c == '\\') 6670*a67afe4dSAndroid Build Coastguard Worker backslashes++; 6671*a67afe4dSAndroid Build Coastguard Worker else 6672*a67afe4dSAndroid Build Coastguard Worker backslashes = 0; 6673*a67afe4dSAndroid Build Coastguard Worker } 6674*a67afe4dSAndroid Build Coastguard Worker if (quote_around) 6675*a67afe4dSAndroid Build Coastguard Worker { 6676*a67afe4dSAndroid Build Coastguard Worker unsigned int j; 6677*a67afe4dSAndroid Build Coastguard Worker for (j = backslashes; j > 0; j--) 6678*a67afe4dSAndroid Build Coastguard Worker *p++ = '\\'; 6679*a67afe4dSAndroid Build Coastguard Worker *p++ = '"'; 6680*a67afe4dSAndroid Build Coastguard Worker } 6681*a67afe4dSAndroid Build Coastguard Worker *p = '\0'; 6682*a67afe4dSAndroid Build Coastguard Worker 6683*a67afe4dSAndroid Build Coastguard Worker new_argv[i] = quoted_string; 6684*a67afe4dSAndroid Build Coastguard Worker } 6685*a67afe4dSAndroid Build Coastguard Worker else 6686*a67afe4dSAndroid Build Coastguard Worker new_argv[i] = (char *) string; 6687*a67afe4dSAndroid Build Coastguard Worker } 6688*a67afe4dSAndroid Build Coastguard Worker new_argv[argc] = NULL; 6689*a67afe4dSAndroid Build Coastguard Worker 6690*a67afe4dSAndroid Build Coastguard Worker return new_argv; 6691*a67afe4dSAndroid Build Coastguard Worker} 6692*a67afe4dSAndroid Build Coastguard WorkerEOF 6693*a67afe4dSAndroid Build Coastguard Worker ;; 6694*a67afe4dSAndroid Build Coastguard Worker esac 6695*a67afe4dSAndroid Build Coastguard Worker 6696*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6697*a67afe4dSAndroid Build Coastguard Workervoid lt_dump_script (FILE* f) 6698*a67afe4dSAndroid Build Coastguard Worker{ 6699*a67afe4dSAndroid Build Coastguard WorkerEOF 6700*a67afe4dSAndroid Build Coastguard Worker func_emit_wrapper yes | 6701*a67afe4dSAndroid Build Coastguard Worker $SED -n -e ' 6702*a67afe4dSAndroid Build Coastguard Workers/^\(.\{79\}\)\(..*\)/\1\ 6703*a67afe4dSAndroid Build Coastguard Worker\2/ 6704*a67afe4dSAndroid Build Coastguard Workerh 6705*a67afe4dSAndroid Build Coastguard Workers/\([\\"]\)/\\\1/g 6706*a67afe4dSAndroid Build Coastguard Workers/$/\\n/ 6707*a67afe4dSAndroid Build Coastguard Workers/\([^\n]*\).*/ fputs ("\1", f);/p 6708*a67afe4dSAndroid Build Coastguard Workerg 6709*a67afe4dSAndroid Build Coastguard WorkerD' 6710*a67afe4dSAndroid Build Coastguard Worker cat <<"EOF" 6711*a67afe4dSAndroid Build Coastguard Worker} 6712*a67afe4dSAndroid Build Coastguard WorkerEOF 6713*a67afe4dSAndroid Build Coastguard Worker} 6714*a67afe4dSAndroid Build Coastguard Worker# end: func_emit_cwrapperexe_src 6715*a67afe4dSAndroid Build Coastguard Worker 6716*a67afe4dSAndroid Build Coastguard Worker# func_win32_import_lib_p ARG 6717*a67afe4dSAndroid Build Coastguard Worker# True if ARG is an import lib, as indicated by $file_magic_cmd 6718*a67afe4dSAndroid Build Coastguard Workerfunc_win32_import_lib_p () 6719*a67afe4dSAndroid Build Coastguard Worker{ 6720*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 6721*a67afe4dSAndroid Build Coastguard Worker 6722*a67afe4dSAndroid Build Coastguard Worker case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6723*a67afe4dSAndroid Build Coastguard Worker *import*) : ;; 6724*a67afe4dSAndroid Build Coastguard Worker *) false ;; 6725*a67afe4dSAndroid Build Coastguard Worker esac 6726*a67afe4dSAndroid Build Coastguard Worker} 6727*a67afe4dSAndroid Build Coastguard Worker 6728*a67afe4dSAndroid Build Coastguard Worker# func_suncc_cstd_abi 6729*a67afe4dSAndroid Build Coastguard Worker# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 6730*a67afe4dSAndroid Build Coastguard Worker# Several compiler flags select an ABI that is incompatible with the 6731*a67afe4dSAndroid Build Coastguard Worker# Cstd library. Avoid specifying it if any are in CXXFLAGS. 6732*a67afe4dSAndroid Build Coastguard Workerfunc_suncc_cstd_abi () 6733*a67afe4dSAndroid Build Coastguard Worker{ 6734*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 6735*a67afe4dSAndroid Build Coastguard Worker 6736*a67afe4dSAndroid Build Coastguard Worker case " $compile_command " in 6737*a67afe4dSAndroid Build Coastguard Worker *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 6738*a67afe4dSAndroid Build Coastguard Worker suncc_use_cstd_abi=no 6739*a67afe4dSAndroid Build Coastguard Worker ;; 6740*a67afe4dSAndroid Build Coastguard Worker *) 6741*a67afe4dSAndroid Build Coastguard Worker suncc_use_cstd_abi=yes 6742*a67afe4dSAndroid Build Coastguard Worker ;; 6743*a67afe4dSAndroid Build Coastguard Worker esac 6744*a67afe4dSAndroid Build Coastguard Worker} 6745*a67afe4dSAndroid Build Coastguard Worker 6746*a67afe4dSAndroid Build Coastguard Worker# func_mode_link arg... 6747*a67afe4dSAndroid Build Coastguard Workerfunc_mode_link () 6748*a67afe4dSAndroid Build Coastguard Worker{ 6749*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 6750*a67afe4dSAndroid Build Coastguard Worker 6751*a67afe4dSAndroid Build Coastguard Worker case $host in 6752*a67afe4dSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6753*a67afe4dSAndroid Build Coastguard Worker # It is impossible to link a dll without this setting, and 6754*a67afe4dSAndroid Build Coastguard Worker # we shouldn't force the makefile maintainer to figure out 6755*a67afe4dSAndroid Build Coastguard Worker # what system we are compiling for in order to pass an extra 6756*a67afe4dSAndroid Build Coastguard Worker # flag for every libtool invocation. 6757*a67afe4dSAndroid Build Coastguard Worker # allow_undefined=no 6758*a67afe4dSAndroid Build Coastguard Worker 6759*a67afe4dSAndroid Build Coastguard Worker # FIXME: Unfortunately, there are problems with the above when trying 6760*a67afe4dSAndroid Build Coastguard Worker # to make a dll that has undefined symbols, in which case not 6761*a67afe4dSAndroid Build Coastguard Worker # even a static library is built. For now, we need to specify 6762*a67afe4dSAndroid Build Coastguard Worker # -no-undefined on the libtool link line when we can be certain 6763*a67afe4dSAndroid Build Coastguard Worker # that all symbols are satisfied, otherwise we get a static library. 6764*a67afe4dSAndroid Build Coastguard Worker allow_undefined=yes 6765*a67afe4dSAndroid Build Coastguard Worker ;; 6766*a67afe4dSAndroid Build Coastguard Worker *) 6767*a67afe4dSAndroid Build Coastguard Worker allow_undefined=yes 6768*a67afe4dSAndroid Build Coastguard Worker ;; 6769*a67afe4dSAndroid Build Coastguard Worker esac 6770*a67afe4dSAndroid Build Coastguard Worker libtool_args=$nonopt 6771*a67afe4dSAndroid Build Coastguard Worker base_compile="$nonopt $@" 6772*a67afe4dSAndroid Build Coastguard Worker compile_command=$nonopt 6773*a67afe4dSAndroid Build Coastguard Worker finalize_command=$nonopt 6774*a67afe4dSAndroid Build Coastguard Worker 6775*a67afe4dSAndroid Build Coastguard Worker compile_rpath= 6776*a67afe4dSAndroid Build Coastguard Worker finalize_rpath= 6777*a67afe4dSAndroid Build Coastguard Worker compile_shlibpath= 6778*a67afe4dSAndroid Build Coastguard Worker finalize_shlibpath= 6779*a67afe4dSAndroid Build Coastguard Worker convenience= 6780*a67afe4dSAndroid Build Coastguard Worker old_convenience= 6781*a67afe4dSAndroid Build Coastguard Worker deplibs= 6782*a67afe4dSAndroid Build Coastguard Worker old_deplibs= 6783*a67afe4dSAndroid Build Coastguard Worker compiler_flags= 6784*a67afe4dSAndroid Build Coastguard Worker linker_flags= 6785*a67afe4dSAndroid Build Coastguard Worker dllsearchpath= 6786*a67afe4dSAndroid Build Coastguard Worker lib_search_path=`pwd` 6787*a67afe4dSAndroid Build Coastguard Worker inst_prefix_dir= 6788*a67afe4dSAndroid Build Coastguard Worker new_inherited_linker_flags= 6789*a67afe4dSAndroid Build Coastguard Worker 6790*a67afe4dSAndroid Build Coastguard Worker avoid_version=no 6791*a67afe4dSAndroid Build Coastguard Worker bindir= 6792*a67afe4dSAndroid Build Coastguard Worker dlfiles= 6793*a67afe4dSAndroid Build Coastguard Worker dlprefiles= 6794*a67afe4dSAndroid Build Coastguard Worker dlself=no 6795*a67afe4dSAndroid Build Coastguard Worker export_dynamic=no 6796*a67afe4dSAndroid Build Coastguard Worker export_symbols= 6797*a67afe4dSAndroid Build Coastguard Worker export_symbols_regex= 6798*a67afe4dSAndroid Build Coastguard Worker generated= 6799*a67afe4dSAndroid Build Coastguard Worker libobjs= 6800*a67afe4dSAndroid Build Coastguard Worker ltlibs= 6801*a67afe4dSAndroid Build Coastguard Worker module=no 6802*a67afe4dSAndroid Build Coastguard Worker no_install=no 6803*a67afe4dSAndroid Build Coastguard Worker objs= 6804*a67afe4dSAndroid Build Coastguard Worker os2dllname= 6805*a67afe4dSAndroid Build Coastguard Worker non_pic_objects= 6806*a67afe4dSAndroid Build Coastguard Worker precious_files_regex= 6807*a67afe4dSAndroid Build Coastguard Worker prefer_static_libs=no 6808*a67afe4dSAndroid Build Coastguard Worker preload=false 6809*a67afe4dSAndroid Build Coastguard Worker prev= 6810*a67afe4dSAndroid Build Coastguard Worker prevarg= 6811*a67afe4dSAndroid Build Coastguard Worker release= 6812*a67afe4dSAndroid Build Coastguard Worker rpath= 6813*a67afe4dSAndroid Build Coastguard Worker xrpath= 6814*a67afe4dSAndroid Build Coastguard Worker perm_rpath= 6815*a67afe4dSAndroid Build Coastguard Worker temp_rpath= 6816*a67afe4dSAndroid Build Coastguard Worker thread_safe=no 6817*a67afe4dSAndroid Build Coastguard Worker vinfo= 6818*a67afe4dSAndroid Build Coastguard Worker vinfo_number=no 6819*a67afe4dSAndroid Build Coastguard Worker weak_libs= 6820*a67afe4dSAndroid Build Coastguard Worker single_module=$wl-single_module 6821*a67afe4dSAndroid Build Coastguard Worker func_infer_tag $base_compile 6822*a67afe4dSAndroid Build Coastguard Worker 6823*a67afe4dSAndroid Build Coastguard Worker # We need to know -static, to get the right output filenames. 6824*a67afe4dSAndroid Build Coastguard Worker for arg 6825*a67afe4dSAndroid Build Coastguard Worker do 6826*a67afe4dSAndroid Build Coastguard Worker case $arg in 6827*a67afe4dSAndroid Build Coastguard Worker -shared) 6828*a67afe4dSAndroid Build Coastguard Worker test yes != "$build_libtool_libs" \ 6829*a67afe4dSAndroid Build Coastguard Worker && func_fatal_configuration "cannot build a shared library" 6830*a67afe4dSAndroid Build Coastguard Worker build_old_libs=no 6831*a67afe4dSAndroid Build Coastguard Worker break 6832*a67afe4dSAndroid Build Coastguard Worker ;; 6833*a67afe4dSAndroid Build Coastguard Worker -all-static | -static | -static-libtool-libs) 6834*a67afe4dSAndroid Build Coastguard Worker case $arg in 6835*a67afe4dSAndroid Build Coastguard Worker -all-static) 6836*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6837*a67afe4dSAndroid Build Coastguard Worker func_warning "complete static linking is impossible in this configuration" 6838*a67afe4dSAndroid Build Coastguard Worker fi 6839*a67afe4dSAndroid Build Coastguard Worker if test -n "$link_static_flag"; then 6840*a67afe4dSAndroid Build Coastguard Worker dlopen_self=$dlopen_self_static 6841*a67afe4dSAndroid Build Coastguard Worker fi 6842*a67afe4dSAndroid Build Coastguard Worker prefer_static_libs=yes 6843*a67afe4dSAndroid Build Coastguard Worker ;; 6844*a67afe4dSAndroid Build Coastguard Worker -static) 6845*a67afe4dSAndroid Build Coastguard Worker if test -z "$pic_flag" && test -n "$link_static_flag"; then 6846*a67afe4dSAndroid Build Coastguard Worker dlopen_self=$dlopen_self_static 6847*a67afe4dSAndroid Build Coastguard Worker fi 6848*a67afe4dSAndroid Build Coastguard Worker prefer_static_libs=built 6849*a67afe4dSAndroid Build Coastguard Worker ;; 6850*a67afe4dSAndroid Build Coastguard Worker -static-libtool-libs) 6851*a67afe4dSAndroid Build Coastguard Worker if test -z "$pic_flag" && test -n "$link_static_flag"; then 6852*a67afe4dSAndroid Build Coastguard Worker dlopen_self=$dlopen_self_static 6853*a67afe4dSAndroid Build Coastguard Worker fi 6854*a67afe4dSAndroid Build Coastguard Worker prefer_static_libs=yes 6855*a67afe4dSAndroid Build Coastguard Worker ;; 6856*a67afe4dSAndroid Build Coastguard Worker esac 6857*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=no 6858*a67afe4dSAndroid Build Coastguard Worker build_old_libs=yes 6859*a67afe4dSAndroid Build Coastguard Worker break 6860*a67afe4dSAndroid Build Coastguard Worker ;; 6861*a67afe4dSAndroid Build Coastguard Worker esac 6862*a67afe4dSAndroid Build Coastguard Worker done 6863*a67afe4dSAndroid Build Coastguard Worker 6864*a67afe4dSAndroid Build Coastguard Worker # See if our shared archives depend on static archives. 6865*a67afe4dSAndroid Build Coastguard Worker test -n "$old_archive_from_new_cmds" && build_old_libs=yes 6866*a67afe4dSAndroid Build Coastguard Worker 6867*a67afe4dSAndroid Build Coastguard Worker # Go through the arguments, transforming them on the way. 6868*a67afe4dSAndroid Build Coastguard Worker while test "$#" -gt 0; do 6869*a67afe4dSAndroid Build Coastguard Worker arg=$1 6870*a67afe4dSAndroid Build Coastguard Worker shift 6871*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty,unquoted "$arg" 6872*a67afe4dSAndroid Build Coastguard Worker qarg=$func_quote_arg_unquoted_result 6873*a67afe4dSAndroid Build Coastguard Worker func_append libtool_args " $func_quote_arg_result" 6874*a67afe4dSAndroid Build Coastguard Worker 6875*a67afe4dSAndroid Build Coastguard Worker # If the previous option needs an argument, assign it. 6876*a67afe4dSAndroid Build Coastguard Worker if test -n "$prev"; then 6877*a67afe4dSAndroid Build Coastguard Worker case $prev in 6878*a67afe4dSAndroid Build Coastguard Worker output) 6879*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " @OUTPUT@" 6880*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " @OUTPUT@" 6881*a67afe4dSAndroid Build Coastguard Worker ;; 6882*a67afe4dSAndroid Build Coastguard Worker esac 6883*a67afe4dSAndroid Build Coastguard Worker 6884*a67afe4dSAndroid Build Coastguard Worker case $prev in 6885*a67afe4dSAndroid Build Coastguard Worker bindir) 6886*a67afe4dSAndroid Build Coastguard Worker bindir=$arg 6887*a67afe4dSAndroid Build Coastguard Worker prev= 6888*a67afe4dSAndroid Build Coastguard Worker continue 6889*a67afe4dSAndroid Build Coastguard Worker ;; 6890*a67afe4dSAndroid Build Coastguard Worker dlfiles|dlprefiles) 6891*a67afe4dSAndroid Build Coastguard Worker $preload || { 6892*a67afe4dSAndroid Build Coastguard Worker # Add the symbol object into the linking commands. 6893*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " @SYMFILE@" 6894*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " @SYMFILE@" 6895*a67afe4dSAndroid Build Coastguard Worker preload=: 6896*a67afe4dSAndroid Build Coastguard Worker } 6897*a67afe4dSAndroid Build Coastguard Worker case $arg in 6898*a67afe4dSAndroid Build Coastguard Worker *.la | *.lo) ;; # We handle these cases below. 6899*a67afe4dSAndroid Build Coastguard Worker force) 6900*a67afe4dSAndroid Build Coastguard Worker if test no = "$dlself"; then 6901*a67afe4dSAndroid Build Coastguard Worker dlself=needless 6902*a67afe4dSAndroid Build Coastguard Worker export_dynamic=yes 6903*a67afe4dSAndroid Build Coastguard Worker fi 6904*a67afe4dSAndroid Build Coastguard Worker prev= 6905*a67afe4dSAndroid Build Coastguard Worker continue 6906*a67afe4dSAndroid Build Coastguard Worker ;; 6907*a67afe4dSAndroid Build Coastguard Worker self) 6908*a67afe4dSAndroid Build Coastguard Worker if test dlprefiles = "$prev"; then 6909*a67afe4dSAndroid Build Coastguard Worker dlself=yes 6910*a67afe4dSAndroid Build Coastguard Worker elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6911*a67afe4dSAndroid Build Coastguard Worker dlself=yes 6912*a67afe4dSAndroid Build Coastguard Worker else 6913*a67afe4dSAndroid Build Coastguard Worker dlself=needless 6914*a67afe4dSAndroid Build Coastguard Worker export_dynamic=yes 6915*a67afe4dSAndroid Build Coastguard Worker fi 6916*a67afe4dSAndroid Build Coastguard Worker prev= 6917*a67afe4dSAndroid Build Coastguard Worker continue 6918*a67afe4dSAndroid Build Coastguard Worker ;; 6919*a67afe4dSAndroid Build Coastguard Worker *) 6920*a67afe4dSAndroid Build Coastguard Worker if test dlfiles = "$prev"; then 6921*a67afe4dSAndroid Build Coastguard Worker func_append dlfiles " $arg" 6922*a67afe4dSAndroid Build Coastguard Worker else 6923*a67afe4dSAndroid Build Coastguard Worker func_append dlprefiles " $arg" 6924*a67afe4dSAndroid Build Coastguard Worker fi 6925*a67afe4dSAndroid Build Coastguard Worker prev= 6926*a67afe4dSAndroid Build Coastguard Worker continue 6927*a67afe4dSAndroid Build Coastguard Worker ;; 6928*a67afe4dSAndroid Build Coastguard Worker esac 6929*a67afe4dSAndroid Build Coastguard Worker ;; 6930*a67afe4dSAndroid Build Coastguard Worker expsyms) 6931*a67afe4dSAndroid Build Coastguard Worker export_symbols=$arg 6932*a67afe4dSAndroid Build Coastguard Worker test -f "$arg" \ 6933*a67afe4dSAndroid Build Coastguard Worker || func_fatal_error "symbol file '$arg' does not exist" 6934*a67afe4dSAndroid Build Coastguard Worker prev= 6935*a67afe4dSAndroid Build Coastguard Worker continue 6936*a67afe4dSAndroid Build Coastguard Worker ;; 6937*a67afe4dSAndroid Build Coastguard Worker expsyms_regex) 6938*a67afe4dSAndroid Build Coastguard Worker export_symbols_regex=$arg 6939*a67afe4dSAndroid Build Coastguard Worker prev= 6940*a67afe4dSAndroid Build Coastguard Worker continue 6941*a67afe4dSAndroid Build Coastguard Worker ;; 6942*a67afe4dSAndroid Build Coastguard Worker framework) 6943*a67afe4dSAndroid Build Coastguard Worker case $host in 6944*a67afe4dSAndroid Build Coastguard Worker *-*-darwin*) 6945*a67afe4dSAndroid Build Coastguard Worker case "$deplibs " in 6946*a67afe4dSAndroid Build Coastguard Worker *" $qarg.ltframework "*) ;; 6947*a67afe4dSAndroid Build Coastguard Worker *) func_append deplibs " $qarg.ltframework" # this is fixed later 6948*a67afe4dSAndroid Build Coastguard Worker ;; 6949*a67afe4dSAndroid Build Coastguard Worker esac 6950*a67afe4dSAndroid Build Coastguard Worker ;; 6951*a67afe4dSAndroid Build Coastguard Worker esac 6952*a67afe4dSAndroid Build Coastguard Worker prev= 6953*a67afe4dSAndroid Build Coastguard Worker continue 6954*a67afe4dSAndroid Build Coastguard Worker ;; 6955*a67afe4dSAndroid Build Coastguard Worker inst_prefix) 6956*a67afe4dSAndroid Build Coastguard Worker inst_prefix_dir=$arg 6957*a67afe4dSAndroid Build Coastguard Worker prev= 6958*a67afe4dSAndroid Build Coastguard Worker continue 6959*a67afe4dSAndroid Build Coastguard Worker ;; 6960*a67afe4dSAndroid Build Coastguard Worker mllvm) 6961*a67afe4dSAndroid Build Coastguard Worker # Clang does not use LLVM to link, so we can simply discard any 6962*a67afe4dSAndroid Build Coastguard Worker # '-mllvm $arg' options when doing the link step. 6963*a67afe4dSAndroid Build Coastguard Worker prev= 6964*a67afe4dSAndroid Build Coastguard Worker continue 6965*a67afe4dSAndroid Build Coastguard Worker ;; 6966*a67afe4dSAndroid Build Coastguard Worker objectlist) 6967*a67afe4dSAndroid Build Coastguard Worker if test -f "$arg"; then 6968*a67afe4dSAndroid Build Coastguard Worker save_arg=$arg 6969*a67afe4dSAndroid Build Coastguard Worker moreargs= 6970*a67afe4dSAndroid Build Coastguard Worker for fil in `cat "$save_arg"` 6971*a67afe4dSAndroid Build Coastguard Worker do 6972*a67afe4dSAndroid Build Coastguard Worker# func_append moreargs " $fil" 6973*a67afe4dSAndroid Build Coastguard Worker arg=$fil 6974*a67afe4dSAndroid Build Coastguard Worker # A libtool-controlled object. 6975*a67afe4dSAndroid Build Coastguard Worker 6976*a67afe4dSAndroid Build Coastguard Worker # Check to see that this really is a libtool object. 6977*a67afe4dSAndroid Build Coastguard Worker if func_lalib_unsafe_p "$arg"; then 6978*a67afe4dSAndroid Build Coastguard Worker pic_object= 6979*a67afe4dSAndroid Build Coastguard Worker non_pic_object= 6980*a67afe4dSAndroid Build Coastguard Worker 6981*a67afe4dSAndroid Build Coastguard Worker # Read the .lo file 6982*a67afe4dSAndroid Build Coastguard Worker func_source "$arg" 6983*a67afe4dSAndroid Build Coastguard Worker 6984*a67afe4dSAndroid Build Coastguard Worker if test -z "$pic_object" || 6985*a67afe4dSAndroid Build Coastguard Worker test -z "$non_pic_object" || 6986*a67afe4dSAndroid Build Coastguard Worker test none = "$pic_object" && 6987*a67afe4dSAndroid Build Coastguard Worker test none = "$non_pic_object"; then 6988*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "cannot find name of object for '$arg'" 6989*a67afe4dSAndroid Build Coastguard Worker fi 6990*a67afe4dSAndroid Build Coastguard Worker 6991*a67afe4dSAndroid Build Coastguard Worker # Extract subdirectory from the argument. 6992*a67afe4dSAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 6993*a67afe4dSAndroid Build Coastguard Worker xdir=$func_dirname_result 6994*a67afe4dSAndroid Build Coastguard Worker 6995*a67afe4dSAndroid Build Coastguard Worker if test none != "$pic_object"; then 6996*a67afe4dSAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 6997*a67afe4dSAndroid Build Coastguard Worker pic_object=$xdir$pic_object 6998*a67afe4dSAndroid Build Coastguard Worker 6999*a67afe4dSAndroid Build Coastguard Worker if test dlfiles = "$prev"; then 7000*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7001*a67afe4dSAndroid Build Coastguard Worker func_append dlfiles " $pic_object" 7002*a67afe4dSAndroid Build Coastguard Worker prev= 7003*a67afe4dSAndroid Build Coastguard Worker continue 7004*a67afe4dSAndroid Build Coastguard Worker else 7005*a67afe4dSAndroid Build Coastguard Worker # If libtool objects are unsupported, then we need to preload. 7006*a67afe4dSAndroid Build Coastguard Worker prev=dlprefiles 7007*a67afe4dSAndroid Build Coastguard Worker fi 7008*a67afe4dSAndroid Build Coastguard Worker fi 7009*a67afe4dSAndroid Build Coastguard Worker 7010*a67afe4dSAndroid Build Coastguard Worker # CHECK ME: I think I busted this. -Ossama 7011*a67afe4dSAndroid Build Coastguard Worker if test dlprefiles = "$prev"; then 7012*a67afe4dSAndroid Build Coastguard Worker # Preload the old-style object. 7013*a67afe4dSAndroid Build Coastguard Worker func_append dlprefiles " $pic_object" 7014*a67afe4dSAndroid Build Coastguard Worker prev= 7015*a67afe4dSAndroid Build Coastguard Worker fi 7016*a67afe4dSAndroid Build Coastguard Worker 7017*a67afe4dSAndroid Build Coastguard Worker # A PIC object. 7018*a67afe4dSAndroid Build Coastguard Worker func_append libobjs " $pic_object" 7019*a67afe4dSAndroid Build Coastguard Worker arg=$pic_object 7020*a67afe4dSAndroid Build Coastguard Worker fi 7021*a67afe4dSAndroid Build Coastguard Worker 7022*a67afe4dSAndroid Build Coastguard Worker # Non-PIC object. 7023*a67afe4dSAndroid Build Coastguard Worker if test none != "$non_pic_object"; then 7024*a67afe4dSAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 7025*a67afe4dSAndroid Build Coastguard Worker non_pic_object=$xdir$non_pic_object 7026*a67afe4dSAndroid Build Coastguard Worker 7027*a67afe4dSAndroid Build Coastguard Worker # A standard non-PIC object 7028*a67afe4dSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 7029*a67afe4dSAndroid Build Coastguard Worker if test -z "$pic_object" || test none = "$pic_object"; then 7030*a67afe4dSAndroid Build Coastguard Worker arg=$non_pic_object 7031*a67afe4dSAndroid Build Coastguard Worker fi 7032*a67afe4dSAndroid Build Coastguard Worker else 7033*a67afe4dSAndroid Build Coastguard Worker # If the PIC object exists, use it instead. 7034*a67afe4dSAndroid Build Coastguard Worker # $xdir was prepended to $pic_object above. 7035*a67afe4dSAndroid Build Coastguard Worker non_pic_object=$pic_object 7036*a67afe4dSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 7037*a67afe4dSAndroid Build Coastguard Worker fi 7038*a67afe4dSAndroid Build Coastguard Worker else 7039*a67afe4dSAndroid Build Coastguard Worker # Only an error if not doing a dry-run. 7040*a67afe4dSAndroid Build Coastguard Worker if $opt_dry_run; then 7041*a67afe4dSAndroid Build Coastguard Worker # Extract subdirectory from the argument. 7042*a67afe4dSAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 7043*a67afe4dSAndroid Build Coastguard Worker xdir=$func_dirname_result 7044*a67afe4dSAndroid Build Coastguard Worker 7045*a67afe4dSAndroid Build Coastguard Worker func_lo2o "$arg" 7046*a67afe4dSAndroid Build Coastguard Worker pic_object=$xdir$objdir/$func_lo2o_result 7047*a67afe4dSAndroid Build Coastguard Worker non_pic_object=$xdir$func_lo2o_result 7048*a67afe4dSAndroid Build Coastguard Worker func_append libobjs " $pic_object" 7049*a67afe4dSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 7050*a67afe4dSAndroid Build Coastguard Worker else 7051*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$arg' is not a valid libtool object" 7052*a67afe4dSAndroid Build Coastguard Worker fi 7053*a67afe4dSAndroid Build Coastguard Worker fi 7054*a67afe4dSAndroid Build Coastguard Worker done 7055*a67afe4dSAndroid Build Coastguard Worker else 7056*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "link input file '$arg' does not exist" 7057*a67afe4dSAndroid Build Coastguard Worker fi 7058*a67afe4dSAndroid Build Coastguard Worker arg=$save_arg 7059*a67afe4dSAndroid Build Coastguard Worker prev= 7060*a67afe4dSAndroid Build Coastguard Worker continue 7061*a67afe4dSAndroid Build Coastguard Worker ;; 7062*a67afe4dSAndroid Build Coastguard Worker os2dllname) 7063*a67afe4dSAndroid Build Coastguard Worker os2dllname=$arg 7064*a67afe4dSAndroid Build Coastguard Worker prev= 7065*a67afe4dSAndroid Build Coastguard Worker continue 7066*a67afe4dSAndroid Build Coastguard Worker ;; 7067*a67afe4dSAndroid Build Coastguard Worker precious_regex) 7068*a67afe4dSAndroid Build Coastguard Worker precious_files_regex=$arg 7069*a67afe4dSAndroid Build Coastguard Worker prev= 7070*a67afe4dSAndroid Build Coastguard Worker continue 7071*a67afe4dSAndroid Build Coastguard Worker ;; 7072*a67afe4dSAndroid Build Coastguard Worker release) 7073*a67afe4dSAndroid Build Coastguard Worker release=-$arg 7074*a67afe4dSAndroid Build Coastguard Worker prev= 7075*a67afe4dSAndroid Build Coastguard Worker continue 7076*a67afe4dSAndroid Build Coastguard Worker ;; 7077*a67afe4dSAndroid Build Coastguard Worker rpath | xrpath) 7078*a67afe4dSAndroid Build Coastguard Worker # We need an absolute path. 7079*a67afe4dSAndroid Build Coastguard Worker case $arg in 7080*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 7081*a67afe4dSAndroid Build Coastguard Worker *) 7082*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "only absolute run-paths are allowed" 7083*a67afe4dSAndroid Build Coastguard Worker ;; 7084*a67afe4dSAndroid Build Coastguard Worker esac 7085*a67afe4dSAndroid Build Coastguard Worker if test rpath = "$prev"; then 7086*a67afe4dSAndroid Build Coastguard Worker case "$rpath " in 7087*a67afe4dSAndroid Build Coastguard Worker *" $arg "*) ;; 7088*a67afe4dSAndroid Build Coastguard Worker *) func_append rpath " $arg" ;; 7089*a67afe4dSAndroid Build Coastguard Worker esac 7090*a67afe4dSAndroid Build Coastguard Worker else 7091*a67afe4dSAndroid Build Coastguard Worker case "$xrpath " in 7092*a67afe4dSAndroid Build Coastguard Worker *" $arg "*) ;; 7093*a67afe4dSAndroid Build Coastguard Worker *) func_append xrpath " $arg" ;; 7094*a67afe4dSAndroid Build Coastguard Worker esac 7095*a67afe4dSAndroid Build Coastguard Worker fi 7096*a67afe4dSAndroid Build Coastguard Worker prev= 7097*a67afe4dSAndroid Build Coastguard Worker continue 7098*a67afe4dSAndroid Build Coastguard Worker ;; 7099*a67afe4dSAndroid Build Coastguard Worker shrext) 7100*a67afe4dSAndroid Build Coastguard Worker shrext_cmds=$arg 7101*a67afe4dSAndroid Build Coastguard Worker prev= 7102*a67afe4dSAndroid Build Coastguard Worker continue 7103*a67afe4dSAndroid Build Coastguard Worker ;; 7104*a67afe4dSAndroid Build Coastguard Worker weak) 7105*a67afe4dSAndroid Build Coastguard Worker func_append weak_libs " $arg" 7106*a67afe4dSAndroid Build Coastguard Worker prev= 7107*a67afe4dSAndroid Build Coastguard Worker continue 7108*a67afe4dSAndroid Build Coastguard Worker ;; 7109*a67afe4dSAndroid Build Coastguard Worker xassembler) 7110*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " -Xassembler $qarg" 7111*a67afe4dSAndroid Build Coastguard Worker prev= 7112*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " -Xassembler $qarg" 7113*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " -Xassembler $qarg" 7114*a67afe4dSAndroid Build Coastguard Worker continue 7115*a67afe4dSAndroid Build Coastguard Worker ;; 7116*a67afe4dSAndroid Build Coastguard Worker xcclinker) 7117*a67afe4dSAndroid Build Coastguard Worker func_append linker_flags " $qarg" 7118*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " $qarg" 7119*a67afe4dSAndroid Build Coastguard Worker prev= 7120*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $qarg" 7121*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $qarg" 7122*a67afe4dSAndroid Build Coastguard Worker continue 7123*a67afe4dSAndroid Build Coastguard Worker ;; 7124*a67afe4dSAndroid Build Coastguard Worker xcompiler) 7125*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " $qarg" 7126*a67afe4dSAndroid Build Coastguard Worker prev= 7127*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $qarg" 7128*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $qarg" 7129*a67afe4dSAndroid Build Coastguard Worker continue 7130*a67afe4dSAndroid Build Coastguard Worker ;; 7131*a67afe4dSAndroid Build Coastguard Worker xlinker) 7132*a67afe4dSAndroid Build Coastguard Worker func_append linker_flags " $qarg" 7133*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " $wl$qarg" 7134*a67afe4dSAndroid Build Coastguard Worker prev= 7135*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $wl$qarg" 7136*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $wl$qarg" 7137*a67afe4dSAndroid Build Coastguard Worker continue 7138*a67afe4dSAndroid Build Coastguard Worker ;; 7139*a67afe4dSAndroid Build Coastguard Worker *) 7140*a67afe4dSAndroid Build Coastguard Worker eval "$prev=\"\$arg\"" 7141*a67afe4dSAndroid Build Coastguard Worker prev= 7142*a67afe4dSAndroid Build Coastguard Worker continue 7143*a67afe4dSAndroid Build Coastguard Worker ;; 7144*a67afe4dSAndroid Build Coastguard Worker esac 7145*a67afe4dSAndroid Build Coastguard Worker fi # test -n "$prev" 7146*a67afe4dSAndroid Build Coastguard Worker 7147*a67afe4dSAndroid Build Coastguard Worker prevarg=$arg 7148*a67afe4dSAndroid Build Coastguard Worker 7149*a67afe4dSAndroid Build Coastguard Worker case $arg in 7150*a67afe4dSAndroid Build Coastguard Worker -all-static) 7151*a67afe4dSAndroid Build Coastguard Worker if test -n "$link_static_flag"; then 7152*a67afe4dSAndroid Build Coastguard Worker # See comment for -static flag below, for more details. 7153*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $link_static_flag" 7154*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $link_static_flag" 7155*a67afe4dSAndroid Build Coastguard Worker fi 7156*a67afe4dSAndroid Build Coastguard Worker continue 7157*a67afe4dSAndroid Build Coastguard Worker ;; 7158*a67afe4dSAndroid Build Coastguard Worker 7159*a67afe4dSAndroid Build Coastguard Worker -allow-undefined) 7160*a67afe4dSAndroid Build Coastguard Worker # FIXME: remove this flag sometime in the future. 7161*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'-allow-undefined' must not be used because it is the default" 7162*a67afe4dSAndroid Build Coastguard Worker ;; 7163*a67afe4dSAndroid Build Coastguard Worker 7164*a67afe4dSAndroid Build Coastguard Worker -avoid-version) 7165*a67afe4dSAndroid Build Coastguard Worker avoid_version=yes 7166*a67afe4dSAndroid Build Coastguard Worker continue 7167*a67afe4dSAndroid Build Coastguard Worker ;; 7168*a67afe4dSAndroid Build Coastguard Worker 7169*a67afe4dSAndroid Build Coastguard Worker -bindir) 7170*a67afe4dSAndroid Build Coastguard Worker prev=bindir 7171*a67afe4dSAndroid Build Coastguard Worker continue 7172*a67afe4dSAndroid Build Coastguard Worker ;; 7173*a67afe4dSAndroid Build Coastguard Worker 7174*a67afe4dSAndroid Build Coastguard Worker -dlopen) 7175*a67afe4dSAndroid Build Coastguard Worker prev=dlfiles 7176*a67afe4dSAndroid Build Coastguard Worker continue 7177*a67afe4dSAndroid Build Coastguard Worker ;; 7178*a67afe4dSAndroid Build Coastguard Worker 7179*a67afe4dSAndroid Build Coastguard Worker -dlpreopen) 7180*a67afe4dSAndroid Build Coastguard Worker prev=dlprefiles 7181*a67afe4dSAndroid Build Coastguard Worker continue 7182*a67afe4dSAndroid Build Coastguard Worker ;; 7183*a67afe4dSAndroid Build Coastguard Worker 7184*a67afe4dSAndroid Build Coastguard Worker -export-dynamic) 7185*a67afe4dSAndroid Build Coastguard Worker export_dynamic=yes 7186*a67afe4dSAndroid Build Coastguard Worker continue 7187*a67afe4dSAndroid Build Coastguard Worker ;; 7188*a67afe4dSAndroid Build Coastguard Worker 7189*a67afe4dSAndroid Build Coastguard Worker -export-symbols | -export-symbols-regex) 7190*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 7191*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "more than one -exported-symbols argument is not allowed" 7192*a67afe4dSAndroid Build Coastguard Worker fi 7193*a67afe4dSAndroid Build Coastguard Worker if test X-export-symbols = "X$arg"; then 7194*a67afe4dSAndroid Build Coastguard Worker prev=expsyms 7195*a67afe4dSAndroid Build Coastguard Worker else 7196*a67afe4dSAndroid Build Coastguard Worker prev=expsyms_regex 7197*a67afe4dSAndroid Build Coastguard Worker fi 7198*a67afe4dSAndroid Build Coastguard Worker continue 7199*a67afe4dSAndroid Build Coastguard Worker ;; 7200*a67afe4dSAndroid Build Coastguard Worker 7201*a67afe4dSAndroid Build Coastguard Worker -framework) 7202*a67afe4dSAndroid Build Coastguard Worker prev=framework 7203*a67afe4dSAndroid Build Coastguard Worker continue 7204*a67afe4dSAndroid Build Coastguard Worker ;; 7205*a67afe4dSAndroid Build Coastguard Worker 7206*a67afe4dSAndroid Build Coastguard Worker -inst-prefix-dir) 7207*a67afe4dSAndroid Build Coastguard Worker prev=inst_prefix 7208*a67afe4dSAndroid Build Coastguard Worker continue 7209*a67afe4dSAndroid Build Coastguard Worker ;; 7210*a67afe4dSAndroid Build Coastguard Worker 7211*a67afe4dSAndroid Build Coastguard Worker # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 7212*a67afe4dSAndroid Build Coastguard Worker # so, if we see these flags be careful not to treat them like -L 7213*a67afe4dSAndroid Build Coastguard Worker -L[A-Z][A-Z]*:*) 7214*a67afe4dSAndroid Build Coastguard Worker case $with_gcc/$host in 7215*a67afe4dSAndroid Build Coastguard Worker no/*-*-irix* | /*-*-irix*) 7216*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $arg" 7217*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7218*a67afe4dSAndroid Build Coastguard Worker ;; 7219*a67afe4dSAndroid Build Coastguard Worker esac 7220*a67afe4dSAndroid Build Coastguard Worker continue 7221*a67afe4dSAndroid Build Coastguard Worker ;; 7222*a67afe4dSAndroid Build Coastguard Worker 7223*a67afe4dSAndroid Build Coastguard Worker -L*) 7224*a67afe4dSAndroid Build Coastguard Worker func_stripname "-L" '' "$arg" 7225*a67afe4dSAndroid Build Coastguard Worker if test -z "$func_stripname_result"; then 7226*a67afe4dSAndroid Build Coastguard Worker if test "$#" -gt 0; then 7227*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "require no space between '-L' and '$1'" 7228*a67afe4dSAndroid Build Coastguard Worker else 7229*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "need path for '-L' option" 7230*a67afe4dSAndroid Build Coastguard Worker fi 7231*a67afe4dSAndroid Build Coastguard Worker fi 7232*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 7233*a67afe4dSAndroid Build Coastguard Worker dir=$func_resolve_sysroot_result 7234*a67afe4dSAndroid Build Coastguard Worker # We need an absolute path. 7235*a67afe4dSAndroid Build Coastguard Worker case $dir in 7236*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 7237*a67afe4dSAndroid Build Coastguard Worker *) 7238*a67afe4dSAndroid Build Coastguard Worker absdir=`cd "$dir" && pwd` 7239*a67afe4dSAndroid Build Coastguard Worker test -z "$absdir" && \ 7240*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "cannot determine absolute directory name of '$dir'" 7241*a67afe4dSAndroid Build Coastguard Worker dir=$absdir 7242*a67afe4dSAndroid Build Coastguard Worker ;; 7243*a67afe4dSAndroid Build Coastguard Worker esac 7244*a67afe4dSAndroid Build Coastguard Worker case "$deplibs " in 7245*a67afe4dSAndroid Build Coastguard Worker *" -L$dir "* | *" $arg "*) 7246*a67afe4dSAndroid Build Coastguard Worker # Will only happen for absolute or sysroot arguments 7247*a67afe4dSAndroid Build Coastguard Worker ;; 7248*a67afe4dSAndroid Build Coastguard Worker *) 7249*a67afe4dSAndroid Build Coastguard Worker # Preserve sysroot, but never include relative directories 7250*a67afe4dSAndroid Build Coastguard Worker case $dir in 7251*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 7252*a67afe4dSAndroid Build Coastguard Worker *) func_append deplibs " -L$dir" ;; 7253*a67afe4dSAndroid Build Coastguard Worker esac 7254*a67afe4dSAndroid Build Coastguard Worker func_append lib_search_path " $dir" 7255*a67afe4dSAndroid Build Coastguard Worker ;; 7256*a67afe4dSAndroid Build Coastguard Worker esac 7257*a67afe4dSAndroid Build Coastguard Worker case $host in 7258*a67afe4dSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7259*a67afe4dSAndroid Build Coastguard Worker testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 7260*a67afe4dSAndroid Build Coastguard Worker case :$dllsearchpath: in 7261*a67afe4dSAndroid Build Coastguard Worker *":$dir:"*) ;; 7262*a67afe4dSAndroid Build Coastguard Worker ::) dllsearchpath=$dir;; 7263*a67afe4dSAndroid Build Coastguard Worker *) func_append dllsearchpath ":$dir";; 7264*a67afe4dSAndroid Build Coastguard Worker esac 7265*a67afe4dSAndroid Build Coastguard Worker case :$dllsearchpath: in 7266*a67afe4dSAndroid Build Coastguard Worker *":$testbindir:"*) ;; 7267*a67afe4dSAndroid Build Coastguard Worker ::) dllsearchpath=$testbindir;; 7268*a67afe4dSAndroid Build Coastguard Worker *) func_append dllsearchpath ":$testbindir";; 7269*a67afe4dSAndroid Build Coastguard Worker esac 7270*a67afe4dSAndroid Build Coastguard Worker ;; 7271*a67afe4dSAndroid Build Coastguard Worker esac 7272*a67afe4dSAndroid Build Coastguard Worker continue 7273*a67afe4dSAndroid Build Coastguard Worker ;; 7274*a67afe4dSAndroid Build Coastguard Worker 7275*a67afe4dSAndroid Build Coastguard Worker -l*) 7276*a67afe4dSAndroid Build Coastguard Worker if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7277*a67afe4dSAndroid Build Coastguard Worker case $host in 7278*a67afe4dSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7279*a67afe4dSAndroid Build Coastguard Worker # These systems don't actually have a C or math library (as such) 7280*a67afe4dSAndroid Build Coastguard Worker continue 7281*a67afe4dSAndroid Build Coastguard Worker ;; 7282*a67afe4dSAndroid Build Coastguard Worker *-*-os2*) 7283*a67afe4dSAndroid Build Coastguard Worker # These systems don't actually have a C library (as such) 7284*a67afe4dSAndroid Build Coastguard Worker test X-lc = "X$arg" && continue 7285*a67afe4dSAndroid Build Coastguard Worker ;; 7286*a67afe4dSAndroid Build Coastguard Worker *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) 7287*a67afe4dSAndroid Build Coastguard Worker # Do not include libc due to us having libc/libc_r. 7288*a67afe4dSAndroid Build Coastguard Worker test X-lc = "X$arg" && continue 7289*a67afe4dSAndroid Build Coastguard Worker ;; 7290*a67afe4dSAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 7291*a67afe4dSAndroid Build Coastguard Worker # Rhapsody C and math libraries are in the System framework 7292*a67afe4dSAndroid Build Coastguard Worker func_append deplibs " System.ltframework" 7293*a67afe4dSAndroid Build Coastguard Worker continue 7294*a67afe4dSAndroid Build Coastguard Worker ;; 7295*a67afe4dSAndroid Build Coastguard Worker *-*-sco3.2v5* | *-*-sco5v6*) 7296*a67afe4dSAndroid Build Coastguard Worker # Causes problems with __ctype 7297*a67afe4dSAndroid Build Coastguard Worker test X-lc = "X$arg" && continue 7298*a67afe4dSAndroid Build Coastguard Worker ;; 7299*a67afe4dSAndroid Build Coastguard Worker *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7300*a67afe4dSAndroid Build Coastguard Worker # Compiler inserts libc in the correct place for threads to work 7301*a67afe4dSAndroid Build Coastguard Worker test X-lc = "X$arg" && continue 7302*a67afe4dSAndroid Build Coastguard Worker ;; 7303*a67afe4dSAndroid Build Coastguard Worker esac 7304*a67afe4dSAndroid Build Coastguard Worker elif test X-lc_r = "X$arg"; then 7305*a67afe4dSAndroid Build Coastguard Worker case $host in 7306*a67afe4dSAndroid Build Coastguard Worker *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) 7307*a67afe4dSAndroid Build Coastguard Worker # Do not include libc_r directly, use -pthread flag. 7308*a67afe4dSAndroid Build Coastguard Worker continue 7309*a67afe4dSAndroid Build Coastguard Worker ;; 7310*a67afe4dSAndroid Build Coastguard Worker esac 7311*a67afe4dSAndroid Build Coastguard Worker fi 7312*a67afe4dSAndroid Build Coastguard Worker func_append deplibs " $arg" 7313*a67afe4dSAndroid Build Coastguard Worker continue 7314*a67afe4dSAndroid Build Coastguard Worker ;; 7315*a67afe4dSAndroid Build Coastguard Worker 7316*a67afe4dSAndroid Build Coastguard Worker -mllvm) 7317*a67afe4dSAndroid Build Coastguard Worker prev=mllvm 7318*a67afe4dSAndroid Build Coastguard Worker continue 7319*a67afe4dSAndroid Build Coastguard Worker ;; 7320*a67afe4dSAndroid Build Coastguard Worker 7321*a67afe4dSAndroid Build Coastguard Worker -module) 7322*a67afe4dSAndroid Build Coastguard Worker module=yes 7323*a67afe4dSAndroid Build Coastguard Worker continue 7324*a67afe4dSAndroid Build Coastguard Worker ;; 7325*a67afe4dSAndroid Build Coastguard Worker 7326*a67afe4dSAndroid Build Coastguard Worker # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7327*a67afe4dSAndroid Build Coastguard Worker # classes, name mangling, and exception handling. 7328*a67afe4dSAndroid Build Coastguard Worker # Darwin uses the -arch flag to determine output architecture. 7329*a67afe4dSAndroid Build Coastguard Worker -model|-arch|-isysroot|--sysroot) 7330*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " $arg" 7331*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $arg" 7332*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7333*a67afe4dSAndroid Build Coastguard Worker prev=xcompiler 7334*a67afe4dSAndroid Build Coastguard Worker continue 7335*a67afe4dSAndroid Build Coastguard Worker ;; 7336*a67afe4dSAndroid Build Coastguard Worker # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. 7337*a67afe4dSAndroid Build Coastguard Worker -pthread) 7338*a67afe4dSAndroid Build Coastguard Worker case $host in 7339*a67afe4dSAndroid Build Coastguard Worker *solaris2*) ;; 7340*a67afe4dSAndroid Build Coastguard Worker *) 7341*a67afe4dSAndroid Build Coastguard Worker case "$new_inherited_linker_flags " in 7342*a67afe4dSAndroid Build Coastguard Worker *" $arg "*) ;; 7343*a67afe4dSAndroid Build Coastguard Worker * ) func_append new_inherited_linker_flags " $arg" ;; 7344*a67afe4dSAndroid Build Coastguard Worker esac 7345*a67afe4dSAndroid Build Coastguard Worker ;; 7346*a67afe4dSAndroid Build Coastguard Worker esac 7347*a67afe4dSAndroid Build Coastguard Worker continue 7348*a67afe4dSAndroid Build Coastguard Worker ;; 7349*a67afe4dSAndroid Build Coastguard Worker -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ 7350*a67afe4dSAndroid Build Coastguard Worker |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7351*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " $arg" 7352*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $arg" 7353*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7354*a67afe4dSAndroid Build Coastguard Worker case "$new_inherited_linker_flags " in 7355*a67afe4dSAndroid Build Coastguard Worker *" $arg "*) ;; 7356*a67afe4dSAndroid Build Coastguard Worker * ) func_append new_inherited_linker_flags " $arg" ;; 7357*a67afe4dSAndroid Build Coastguard Worker esac 7358*a67afe4dSAndroid Build Coastguard Worker continue 7359*a67afe4dSAndroid Build Coastguard Worker ;; 7360*a67afe4dSAndroid Build Coastguard Worker 7361*a67afe4dSAndroid Build Coastguard Worker -multi_module) 7362*a67afe4dSAndroid Build Coastguard Worker single_module=$wl-multi_module 7363*a67afe4dSAndroid Build Coastguard Worker continue 7364*a67afe4dSAndroid Build Coastguard Worker ;; 7365*a67afe4dSAndroid Build Coastguard Worker 7366*a67afe4dSAndroid Build Coastguard Worker -no-fast-install) 7367*a67afe4dSAndroid Build Coastguard Worker fast_install=no 7368*a67afe4dSAndroid Build Coastguard Worker continue 7369*a67afe4dSAndroid Build Coastguard Worker ;; 7370*a67afe4dSAndroid Build Coastguard Worker 7371*a67afe4dSAndroid Build Coastguard Worker -no-install) 7372*a67afe4dSAndroid Build Coastguard Worker case $host in 7373*a67afe4dSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7374*a67afe4dSAndroid Build Coastguard Worker # The PATH hackery in wrapper scripts is required on Windows 7375*a67afe4dSAndroid Build Coastguard Worker # and Darwin in order for the loader to find any dlls it needs. 7376*a67afe4dSAndroid Build Coastguard Worker func_warning "'-no-install' is ignored for $host" 7377*a67afe4dSAndroid Build Coastguard Worker func_warning "assuming '-no-fast-install' instead" 7378*a67afe4dSAndroid Build Coastguard Worker fast_install=no 7379*a67afe4dSAndroid Build Coastguard Worker ;; 7380*a67afe4dSAndroid Build Coastguard Worker *) no_install=yes ;; 7381*a67afe4dSAndroid Build Coastguard Worker esac 7382*a67afe4dSAndroid Build Coastguard Worker continue 7383*a67afe4dSAndroid Build Coastguard Worker ;; 7384*a67afe4dSAndroid Build Coastguard Worker 7385*a67afe4dSAndroid Build Coastguard Worker -no-undefined) 7386*a67afe4dSAndroid Build Coastguard Worker allow_undefined=no 7387*a67afe4dSAndroid Build Coastguard Worker continue 7388*a67afe4dSAndroid Build Coastguard Worker ;; 7389*a67afe4dSAndroid Build Coastguard Worker 7390*a67afe4dSAndroid Build Coastguard Worker -objectlist) 7391*a67afe4dSAndroid Build Coastguard Worker prev=objectlist 7392*a67afe4dSAndroid Build Coastguard Worker continue 7393*a67afe4dSAndroid Build Coastguard Worker ;; 7394*a67afe4dSAndroid Build Coastguard Worker 7395*a67afe4dSAndroid Build Coastguard Worker -os2dllname) 7396*a67afe4dSAndroid Build Coastguard Worker prev=os2dllname 7397*a67afe4dSAndroid Build Coastguard Worker continue 7398*a67afe4dSAndroid Build Coastguard Worker ;; 7399*a67afe4dSAndroid Build Coastguard Worker 7400*a67afe4dSAndroid Build Coastguard Worker -o) prev=output ;; 7401*a67afe4dSAndroid Build Coastguard Worker 7402*a67afe4dSAndroid Build Coastguard Worker -precious-files-regex) 7403*a67afe4dSAndroid Build Coastguard Worker prev=precious_regex 7404*a67afe4dSAndroid Build Coastguard Worker continue 7405*a67afe4dSAndroid Build Coastguard Worker ;; 7406*a67afe4dSAndroid Build Coastguard Worker 7407*a67afe4dSAndroid Build Coastguard Worker -release) 7408*a67afe4dSAndroid Build Coastguard Worker prev=release 7409*a67afe4dSAndroid Build Coastguard Worker continue 7410*a67afe4dSAndroid Build Coastguard Worker ;; 7411*a67afe4dSAndroid Build Coastguard Worker 7412*a67afe4dSAndroid Build Coastguard Worker -rpath) 7413*a67afe4dSAndroid Build Coastguard Worker prev=rpath 7414*a67afe4dSAndroid Build Coastguard Worker continue 7415*a67afe4dSAndroid Build Coastguard Worker ;; 7416*a67afe4dSAndroid Build Coastguard Worker 7417*a67afe4dSAndroid Build Coastguard Worker -R) 7418*a67afe4dSAndroid Build Coastguard Worker prev=xrpath 7419*a67afe4dSAndroid Build Coastguard Worker continue 7420*a67afe4dSAndroid Build Coastguard Worker ;; 7421*a67afe4dSAndroid Build Coastguard Worker 7422*a67afe4dSAndroid Build Coastguard Worker -R*) 7423*a67afe4dSAndroid Build Coastguard Worker func_stripname '-R' '' "$arg" 7424*a67afe4dSAndroid Build Coastguard Worker dir=$func_stripname_result 7425*a67afe4dSAndroid Build Coastguard Worker # We need an absolute path. 7426*a67afe4dSAndroid Build Coastguard Worker case $dir in 7427*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 7428*a67afe4dSAndroid Build Coastguard Worker =*) 7429*a67afe4dSAndroid Build Coastguard Worker func_stripname '=' '' "$dir" 7430*a67afe4dSAndroid Build Coastguard Worker dir=$lt_sysroot$func_stripname_result 7431*a67afe4dSAndroid Build Coastguard Worker ;; 7432*a67afe4dSAndroid Build Coastguard Worker *) 7433*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "only absolute run-paths are allowed" 7434*a67afe4dSAndroid Build Coastguard Worker ;; 7435*a67afe4dSAndroid Build Coastguard Worker esac 7436*a67afe4dSAndroid Build Coastguard Worker case "$xrpath " in 7437*a67afe4dSAndroid Build Coastguard Worker *" $dir "*) ;; 7438*a67afe4dSAndroid Build Coastguard Worker *) func_append xrpath " $dir" ;; 7439*a67afe4dSAndroid Build Coastguard Worker esac 7440*a67afe4dSAndroid Build Coastguard Worker continue 7441*a67afe4dSAndroid Build Coastguard Worker ;; 7442*a67afe4dSAndroid Build Coastguard Worker 7443*a67afe4dSAndroid Build Coastguard Worker -shared) 7444*a67afe4dSAndroid Build Coastguard Worker # The effects of -shared are defined in a previous loop. 7445*a67afe4dSAndroid Build Coastguard Worker continue 7446*a67afe4dSAndroid Build Coastguard Worker ;; 7447*a67afe4dSAndroid Build Coastguard Worker 7448*a67afe4dSAndroid Build Coastguard Worker -shrext) 7449*a67afe4dSAndroid Build Coastguard Worker prev=shrext 7450*a67afe4dSAndroid Build Coastguard Worker continue 7451*a67afe4dSAndroid Build Coastguard Worker ;; 7452*a67afe4dSAndroid Build Coastguard Worker 7453*a67afe4dSAndroid Build Coastguard Worker -static | -static-libtool-libs) 7454*a67afe4dSAndroid Build Coastguard Worker # The effects of -static are defined in a previous loop. 7455*a67afe4dSAndroid Build Coastguard Worker # We used to do the same as -all-static on platforms that 7456*a67afe4dSAndroid Build Coastguard Worker # didn't have a PIC flag, but the assumption that the effects 7457*a67afe4dSAndroid Build Coastguard Worker # would be equivalent was wrong. It would break on at least 7458*a67afe4dSAndroid Build Coastguard Worker # Digital Unix and AIX. 7459*a67afe4dSAndroid Build Coastguard Worker continue 7460*a67afe4dSAndroid Build Coastguard Worker ;; 7461*a67afe4dSAndroid Build Coastguard Worker 7462*a67afe4dSAndroid Build Coastguard Worker -thread-safe) 7463*a67afe4dSAndroid Build Coastguard Worker thread_safe=yes 7464*a67afe4dSAndroid Build Coastguard Worker continue 7465*a67afe4dSAndroid Build Coastguard Worker ;; 7466*a67afe4dSAndroid Build Coastguard Worker 7467*a67afe4dSAndroid Build Coastguard Worker -version-info) 7468*a67afe4dSAndroid Build Coastguard Worker prev=vinfo 7469*a67afe4dSAndroid Build Coastguard Worker continue 7470*a67afe4dSAndroid Build Coastguard Worker ;; 7471*a67afe4dSAndroid Build Coastguard Worker 7472*a67afe4dSAndroid Build Coastguard Worker -version-number) 7473*a67afe4dSAndroid Build Coastguard Worker prev=vinfo 7474*a67afe4dSAndroid Build Coastguard Worker vinfo_number=yes 7475*a67afe4dSAndroid Build Coastguard Worker continue 7476*a67afe4dSAndroid Build Coastguard Worker ;; 7477*a67afe4dSAndroid Build Coastguard Worker 7478*a67afe4dSAndroid Build Coastguard Worker -weak) 7479*a67afe4dSAndroid Build Coastguard Worker prev=weak 7480*a67afe4dSAndroid Build Coastguard Worker continue 7481*a67afe4dSAndroid Build Coastguard Worker ;; 7482*a67afe4dSAndroid Build Coastguard Worker 7483*a67afe4dSAndroid Build Coastguard Worker -Wc,*) 7484*a67afe4dSAndroid Build Coastguard Worker func_stripname '-Wc,' '' "$arg" 7485*a67afe4dSAndroid Build Coastguard Worker args=$func_stripname_result 7486*a67afe4dSAndroid Build Coastguard Worker arg= 7487*a67afe4dSAndroid Build Coastguard Worker save_ifs=$IFS; IFS=, 7488*a67afe4dSAndroid Build Coastguard Worker for flag in $args; do 7489*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 7490*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$flag" 7491*a67afe4dSAndroid Build Coastguard Worker func_append arg " $func_quote_arg_result" 7492*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " $func_quote_arg_result" 7493*a67afe4dSAndroid Build Coastguard Worker done 7494*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 7495*a67afe4dSAndroid Build Coastguard Worker func_stripname ' ' '' "$arg" 7496*a67afe4dSAndroid Build Coastguard Worker arg=$func_stripname_result 7497*a67afe4dSAndroid Build Coastguard Worker ;; 7498*a67afe4dSAndroid Build Coastguard Worker 7499*a67afe4dSAndroid Build Coastguard Worker -Wl,*) 7500*a67afe4dSAndroid Build Coastguard Worker func_stripname '-Wl,' '' "$arg" 7501*a67afe4dSAndroid Build Coastguard Worker args=$func_stripname_result 7502*a67afe4dSAndroid Build Coastguard Worker arg= 7503*a67afe4dSAndroid Build Coastguard Worker save_ifs=$IFS; IFS=, 7504*a67afe4dSAndroid Build Coastguard Worker for flag in $args; do 7505*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 7506*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$flag" 7507*a67afe4dSAndroid Build Coastguard Worker func_append arg " $wl$func_quote_arg_result" 7508*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " $wl$func_quote_arg_result" 7509*a67afe4dSAndroid Build Coastguard Worker func_append linker_flags " $func_quote_arg_result" 7510*a67afe4dSAndroid Build Coastguard Worker done 7511*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 7512*a67afe4dSAndroid Build Coastguard Worker func_stripname ' ' '' "$arg" 7513*a67afe4dSAndroid Build Coastguard Worker arg=$func_stripname_result 7514*a67afe4dSAndroid Build Coastguard Worker ;; 7515*a67afe4dSAndroid Build Coastguard Worker 7516*a67afe4dSAndroid Build Coastguard Worker -Xassembler) 7517*a67afe4dSAndroid Build Coastguard Worker prev=xassembler 7518*a67afe4dSAndroid Build Coastguard Worker continue 7519*a67afe4dSAndroid Build Coastguard Worker ;; 7520*a67afe4dSAndroid Build Coastguard Worker 7521*a67afe4dSAndroid Build Coastguard Worker -Xcompiler) 7522*a67afe4dSAndroid Build Coastguard Worker prev=xcompiler 7523*a67afe4dSAndroid Build Coastguard Worker continue 7524*a67afe4dSAndroid Build Coastguard Worker ;; 7525*a67afe4dSAndroid Build Coastguard Worker 7526*a67afe4dSAndroid Build Coastguard Worker -Xlinker) 7527*a67afe4dSAndroid Build Coastguard Worker prev=xlinker 7528*a67afe4dSAndroid Build Coastguard Worker continue 7529*a67afe4dSAndroid Build Coastguard Worker ;; 7530*a67afe4dSAndroid Build Coastguard Worker 7531*a67afe4dSAndroid Build Coastguard Worker -XCClinker) 7532*a67afe4dSAndroid Build Coastguard Worker prev=xcclinker 7533*a67afe4dSAndroid Build Coastguard Worker continue 7534*a67afe4dSAndroid Build Coastguard Worker ;; 7535*a67afe4dSAndroid Build Coastguard Worker 7536*a67afe4dSAndroid Build Coastguard Worker # -msg_* for osf cc 7537*a67afe4dSAndroid Build Coastguard Worker -msg_*) 7538*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 7539*a67afe4dSAndroid Build Coastguard Worker arg=$func_quote_arg_result 7540*a67afe4dSAndroid Build Coastguard Worker ;; 7541*a67afe4dSAndroid Build Coastguard Worker 7542*a67afe4dSAndroid Build Coastguard Worker # Flags to be passed through unchanged, with rationale: 7543*a67afe4dSAndroid Build Coastguard Worker # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7544*a67afe4dSAndroid Build Coastguard Worker # -r[0-9][0-9]* specify processor for the SGI compiler 7545*a67afe4dSAndroid Build Coastguard Worker # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7546*a67afe4dSAndroid Build Coastguard Worker # +DA*, +DD* enable 64-bit mode for the HP compiler 7547*a67afe4dSAndroid Build Coastguard Worker # -q* compiler args for the IBM compiler 7548*a67afe4dSAndroid Build Coastguard Worker # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7549*a67afe4dSAndroid Build Coastguard Worker # -F/path path to uninstalled frameworks, gcc on darwin 7550*a67afe4dSAndroid Build Coastguard Worker # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 7551*a67afe4dSAndroid Build Coastguard Worker # -fstack-protector* stack protector flags for GCC 7552*a67afe4dSAndroid Build Coastguard Worker # @file GCC response files 7553*a67afe4dSAndroid Build Coastguard Worker # -tp=* Portland pgcc target processor selection 7554*a67afe4dSAndroid Build Coastguard Worker # --sysroot=* for sysroot support 7555*a67afe4dSAndroid Build Coastguard Worker # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 7556*a67afe4dSAndroid Build Coastguard Worker # -specs=* GCC specs files 7557*a67afe4dSAndroid Build Coastguard Worker # -stdlib=* select c++ std lib with clang 7558*a67afe4dSAndroid Build Coastguard Worker # -fsanitize=* Clang/GCC memory and address sanitizer 7559*a67afe4dSAndroid Build Coastguard Worker # -fuse-ld=* Linker select flags for GCC 7560*a67afe4dSAndroid Build Coastguard Worker # -Wa,* Pass flags directly to the assembler 7561*a67afe4dSAndroid Build Coastguard Worker -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7562*a67afe4dSAndroid Build Coastguard Worker -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7563*a67afe4dSAndroid Build Coastguard Worker -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 7564*a67afe4dSAndroid Build Coastguard Worker -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*) 7565*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 7566*a67afe4dSAndroid Build Coastguard Worker arg=$func_quote_arg_result 7567*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $arg" 7568*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7569*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " $arg" 7570*a67afe4dSAndroid Build Coastguard Worker continue 7571*a67afe4dSAndroid Build Coastguard Worker ;; 7572*a67afe4dSAndroid Build Coastguard Worker 7573*a67afe4dSAndroid Build Coastguard Worker -Z*) 7574*a67afe4dSAndroid Build Coastguard Worker if test os2 = "`expr $host : '.*\(os2\)'`"; then 7575*a67afe4dSAndroid Build Coastguard Worker # OS/2 uses -Zxxx to specify OS/2-specific options 7576*a67afe4dSAndroid Build Coastguard Worker compiler_flags="$compiler_flags $arg" 7577*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $arg" 7578*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7579*a67afe4dSAndroid Build Coastguard Worker case $arg in 7580*a67afe4dSAndroid Build Coastguard Worker -Zlinker | -Zstack) 7581*a67afe4dSAndroid Build Coastguard Worker prev=xcompiler 7582*a67afe4dSAndroid Build Coastguard Worker ;; 7583*a67afe4dSAndroid Build Coastguard Worker esac 7584*a67afe4dSAndroid Build Coastguard Worker continue 7585*a67afe4dSAndroid Build Coastguard Worker else 7586*a67afe4dSAndroid Build Coastguard Worker # Otherwise treat like 'Some other compiler flag' below 7587*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 7588*a67afe4dSAndroid Build Coastguard Worker arg=$func_quote_arg_result 7589*a67afe4dSAndroid Build Coastguard Worker fi 7590*a67afe4dSAndroid Build Coastguard Worker ;; 7591*a67afe4dSAndroid Build Coastguard Worker 7592*a67afe4dSAndroid Build Coastguard Worker # Some other compiler flag. 7593*a67afe4dSAndroid Build Coastguard Worker -* | +*) 7594*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 7595*a67afe4dSAndroid Build Coastguard Worker arg=$func_quote_arg_result 7596*a67afe4dSAndroid Build Coastguard Worker ;; 7597*a67afe4dSAndroid Build Coastguard Worker 7598*a67afe4dSAndroid Build Coastguard Worker *.$objext) 7599*a67afe4dSAndroid Build Coastguard Worker # A standard object. 7600*a67afe4dSAndroid Build Coastguard Worker func_append objs " $arg" 7601*a67afe4dSAndroid Build Coastguard Worker ;; 7602*a67afe4dSAndroid Build Coastguard Worker 7603*a67afe4dSAndroid Build Coastguard Worker *.lo) 7604*a67afe4dSAndroid Build Coastguard Worker # A libtool-controlled object. 7605*a67afe4dSAndroid Build Coastguard Worker 7606*a67afe4dSAndroid Build Coastguard Worker # Check to see that this really is a libtool object. 7607*a67afe4dSAndroid Build Coastguard Worker if func_lalib_unsafe_p "$arg"; then 7608*a67afe4dSAndroid Build Coastguard Worker pic_object= 7609*a67afe4dSAndroid Build Coastguard Worker non_pic_object= 7610*a67afe4dSAndroid Build Coastguard Worker 7611*a67afe4dSAndroid Build Coastguard Worker # Read the .lo file 7612*a67afe4dSAndroid Build Coastguard Worker func_source "$arg" 7613*a67afe4dSAndroid Build Coastguard Worker 7614*a67afe4dSAndroid Build Coastguard Worker if test -z "$pic_object" || 7615*a67afe4dSAndroid Build Coastguard Worker test -z "$non_pic_object" || 7616*a67afe4dSAndroid Build Coastguard Worker test none = "$pic_object" && 7617*a67afe4dSAndroid Build Coastguard Worker test none = "$non_pic_object"; then 7618*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "cannot find name of object for '$arg'" 7619*a67afe4dSAndroid Build Coastguard Worker fi 7620*a67afe4dSAndroid Build Coastguard Worker 7621*a67afe4dSAndroid Build Coastguard Worker # Extract subdirectory from the argument. 7622*a67afe4dSAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 7623*a67afe4dSAndroid Build Coastguard Worker xdir=$func_dirname_result 7624*a67afe4dSAndroid Build Coastguard Worker 7625*a67afe4dSAndroid Build Coastguard Worker test none = "$pic_object" || { 7626*a67afe4dSAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 7627*a67afe4dSAndroid Build Coastguard Worker pic_object=$xdir$pic_object 7628*a67afe4dSAndroid Build Coastguard Worker 7629*a67afe4dSAndroid Build Coastguard Worker if test dlfiles = "$prev"; then 7630*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7631*a67afe4dSAndroid Build Coastguard Worker func_append dlfiles " $pic_object" 7632*a67afe4dSAndroid Build Coastguard Worker prev= 7633*a67afe4dSAndroid Build Coastguard Worker continue 7634*a67afe4dSAndroid Build Coastguard Worker else 7635*a67afe4dSAndroid Build Coastguard Worker # If libtool objects are unsupported, then we need to preload. 7636*a67afe4dSAndroid Build Coastguard Worker prev=dlprefiles 7637*a67afe4dSAndroid Build Coastguard Worker fi 7638*a67afe4dSAndroid Build Coastguard Worker fi 7639*a67afe4dSAndroid Build Coastguard Worker 7640*a67afe4dSAndroid Build Coastguard Worker # CHECK ME: I think I busted this. -Ossama 7641*a67afe4dSAndroid Build Coastguard Worker if test dlprefiles = "$prev"; then 7642*a67afe4dSAndroid Build Coastguard Worker # Preload the old-style object. 7643*a67afe4dSAndroid Build Coastguard Worker func_append dlprefiles " $pic_object" 7644*a67afe4dSAndroid Build Coastguard Worker prev= 7645*a67afe4dSAndroid Build Coastguard Worker fi 7646*a67afe4dSAndroid Build Coastguard Worker 7647*a67afe4dSAndroid Build Coastguard Worker # A PIC object. 7648*a67afe4dSAndroid Build Coastguard Worker func_append libobjs " $pic_object" 7649*a67afe4dSAndroid Build Coastguard Worker arg=$pic_object 7650*a67afe4dSAndroid Build Coastguard Worker } 7651*a67afe4dSAndroid Build Coastguard Worker 7652*a67afe4dSAndroid Build Coastguard Worker # Non-PIC object. 7653*a67afe4dSAndroid Build Coastguard Worker if test none != "$non_pic_object"; then 7654*a67afe4dSAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 7655*a67afe4dSAndroid Build Coastguard Worker non_pic_object=$xdir$non_pic_object 7656*a67afe4dSAndroid Build Coastguard Worker 7657*a67afe4dSAndroid Build Coastguard Worker # A standard non-PIC object 7658*a67afe4dSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 7659*a67afe4dSAndroid Build Coastguard Worker if test -z "$pic_object" || test none = "$pic_object"; then 7660*a67afe4dSAndroid Build Coastguard Worker arg=$non_pic_object 7661*a67afe4dSAndroid Build Coastguard Worker fi 7662*a67afe4dSAndroid Build Coastguard Worker else 7663*a67afe4dSAndroid Build Coastguard Worker # If the PIC object exists, use it instead. 7664*a67afe4dSAndroid Build Coastguard Worker # $xdir was prepended to $pic_object above. 7665*a67afe4dSAndroid Build Coastguard Worker non_pic_object=$pic_object 7666*a67afe4dSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 7667*a67afe4dSAndroid Build Coastguard Worker fi 7668*a67afe4dSAndroid Build Coastguard Worker else 7669*a67afe4dSAndroid Build Coastguard Worker # Only an error if not doing a dry-run. 7670*a67afe4dSAndroid Build Coastguard Worker if $opt_dry_run; then 7671*a67afe4dSAndroid Build Coastguard Worker # Extract subdirectory from the argument. 7672*a67afe4dSAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 7673*a67afe4dSAndroid Build Coastguard Worker xdir=$func_dirname_result 7674*a67afe4dSAndroid Build Coastguard Worker 7675*a67afe4dSAndroid Build Coastguard Worker func_lo2o "$arg" 7676*a67afe4dSAndroid Build Coastguard Worker pic_object=$xdir$objdir/$func_lo2o_result 7677*a67afe4dSAndroid Build Coastguard Worker non_pic_object=$xdir$func_lo2o_result 7678*a67afe4dSAndroid Build Coastguard Worker func_append libobjs " $pic_object" 7679*a67afe4dSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 7680*a67afe4dSAndroid Build Coastguard Worker else 7681*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$arg' is not a valid libtool object" 7682*a67afe4dSAndroid Build Coastguard Worker fi 7683*a67afe4dSAndroid Build Coastguard Worker fi 7684*a67afe4dSAndroid Build Coastguard Worker ;; 7685*a67afe4dSAndroid Build Coastguard Worker 7686*a67afe4dSAndroid Build Coastguard Worker *.$libext) 7687*a67afe4dSAndroid Build Coastguard Worker # An archive. 7688*a67afe4dSAndroid Build Coastguard Worker func_append deplibs " $arg" 7689*a67afe4dSAndroid Build Coastguard Worker func_append old_deplibs " $arg" 7690*a67afe4dSAndroid Build Coastguard Worker continue 7691*a67afe4dSAndroid Build Coastguard Worker ;; 7692*a67afe4dSAndroid Build Coastguard Worker 7693*a67afe4dSAndroid Build Coastguard Worker *.la) 7694*a67afe4dSAndroid Build Coastguard Worker # A libtool-controlled library. 7695*a67afe4dSAndroid Build Coastguard Worker 7696*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$arg" 7697*a67afe4dSAndroid Build Coastguard Worker if test dlfiles = "$prev"; then 7698*a67afe4dSAndroid Build Coastguard Worker # This library was specified with -dlopen. 7699*a67afe4dSAndroid Build Coastguard Worker func_append dlfiles " $func_resolve_sysroot_result" 7700*a67afe4dSAndroid Build Coastguard Worker prev= 7701*a67afe4dSAndroid Build Coastguard Worker elif test dlprefiles = "$prev"; then 7702*a67afe4dSAndroid Build Coastguard Worker # The library was specified with -dlpreopen. 7703*a67afe4dSAndroid Build Coastguard Worker func_append dlprefiles " $func_resolve_sysroot_result" 7704*a67afe4dSAndroid Build Coastguard Worker prev= 7705*a67afe4dSAndroid Build Coastguard Worker else 7706*a67afe4dSAndroid Build Coastguard Worker func_append deplibs " $func_resolve_sysroot_result" 7707*a67afe4dSAndroid Build Coastguard Worker fi 7708*a67afe4dSAndroid Build Coastguard Worker continue 7709*a67afe4dSAndroid Build Coastguard Worker ;; 7710*a67afe4dSAndroid Build Coastguard Worker 7711*a67afe4dSAndroid Build Coastguard Worker # Some other compiler argument. 7712*a67afe4dSAndroid Build Coastguard Worker *) 7713*a67afe4dSAndroid Build Coastguard Worker # Unknown arguments in both finalize_command and compile_command need 7714*a67afe4dSAndroid Build Coastguard Worker # to be aesthetically quoted because they are evaled later. 7715*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 7716*a67afe4dSAndroid Build Coastguard Worker arg=$func_quote_arg_result 7717*a67afe4dSAndroid Build Coastguard Worker ;; 7718*a67afe4dSAndroid Build Coastguard Worker esac # arg 7719*a67afe4dSAndroid Build Coastguard Worker 7720*a67afe4dSAndroid Build Coastguard Worker # Now actually substitute the argument into the commands. 7721*a67afe4dSAndroid Build Coastguard Worker if test -n "$arg"; then 7722*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $arg" 7723*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7724*a67afe4dSAndroid Build Coastguard Worker fi 7725*a67afe4dSAndroid Build Coastguard Worker done # argument parsing loop 7726*a67afe4dSAndroid Build Coastguard Worker 7727*a67afe4dSAndroid Build Coastguard Worker test -n "$prev" && \ 7728*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "the '$prevarg' option requires an argument" 7729*a67afe4dSAndroid Build Coastguard Worker 7730*a67afe4dSAndroid Build Coastguard Worker if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7731*a67afe4dSAndroid Build Coastguard Worker eval arg=\"$export_dynamic_flag_spec\" 7732*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $arg" 7733*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7734*a67afe4dSAndroid Build Coastguard Worker fi 7735*a67afe4dSAndroid Build Coastguard Worker 7736*a67afe4dSAndroid Build Coastguard Worker oldlibs= 7737*a67afe4dSAndroid Build Coastguard Worker # calculate the name of the file, without its directory 7738*a67afe4dSAndroid Build Coastguard Worker func_basename "$output" 7739*a67afe4dSAndroid Build Coastguard Worker outputname=$func_basename_result 7740*a67afe4dSAndroid Build Coastguard Worker libobjs_save=$libobjs 7741*a67afe4dSAndroid Build Coastguard Worker 7742*a67afe4dSAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 7743*a67afe4dSAndroid Build Coastguard Worker # get the directories listed in $shlibpath_var 7744*a67afe4dSAndroid Build Coastguard Worker eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7745*a67afe4dSAndroid Build Coastguard Worker else 7746*a67afe4dSAndroid Build Coastguard Worker shlib_search_path= 7747*a67afe4dSAndroid Build Coastguard Worker fi 7748*a67afe4dSAndroid Build Coastguard Worker eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7749*a67afe4dSAndroid Build Coastguard Worker eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7750*a67afe4dSAndroid Build Coastguard Worker 7751*a67afe4dSAndroid Build Coastguard Worker # Definition is injected by LT_CONFIG during libtool generation. 7752*a67afe4dSAndroid Build Coastguard Worker func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 7753*a67afe4dSAndroid Build Coastguard Worker 7754*a67afe4dSAndroid Build Coastguard Worker func_dirname "$output" "/" "" 7755*a67afe4dSAndroid Build Coastguard Worker output_objdir=$func_dirname_result$objdir 7756*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$output_objdir/" 7757*a67afe4dSAndroid Build Coastguard Worker tool_output_objdir=$func_to_tool_file_result 7758*a67afe4dSAndroid Build Coastguard Worker # Create the object directory. 7759*a67afe4dSAndroid Build Coastguard Worker func_mkdir_p "$output_objdir" 7760*a67afe4dSAndroid Build Coastguard Worker 7761*a67afe4dSAndroid Build Coastguard Worker # Determine the type of output 7762*a67afe4dSAndroid Build Coastguard Worker case $output in 7763*a67afe4dSAndroid Build Coastguard Worker "") 7764*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "you must specify an output file" 7765*a67afe4dSAndroid Build Coastguard Worker ;; 7766*a67afe4dSAndroid Build Coastguard Worker *.$libext) linkmode=oldlib ;; 7767*a67afe4dSAndroid Build Coastguard Worker *.lo | *.$objext) linkmode=obj ;; 7768*a67afe4dSAndroid Build Coastguard Worker *.la) linkmode=lib ;; 7769*a67afe4dSAndroid Build Coastguard Worker *) linkmode=prog ;; # Anything else should be a program. 7770*a67afe4dSAndroid Build Coastguard Worker esac 7771*a67afe4dSAndroid Build Coastguard Worker 7772*a67afe4dSAndroid Build Coastguard Worker specialdeplibs= 7773*a67afe4dSAndroid Build Coastguard Worker 7774*a67afe4dSAndroid Build Coastguard Worker libs= 7775*a67afe4dSAndroid Build Coastguard Worker # Find all interdependent deplibs by searching for libraries 7776*a67afe4dSAndroid Build Coastguard Worker # that are linked more than once (e.g. -la -lb -la) 7777*a67afe4dSAndroid Build Coastguard Worker for deplib in $deplibs; do 7778*a67afe4dSAndroid Build Coastguard Worker if $opt_preserve_dup_deps; then 7779*a67afe4dSAndroid Build Coastguard Worker case "$libs " in 7780*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7781*a67afe4dSAndroid Build Coastguard Worker esac 7782*a67afe4dSAndroid Build Coastguard Worker fi 7783*a67afe4dSAndroid Build Coastguard Worker func_append libs " $deplib" 7784*a67afe4dSAndroid Build Coastguard Worker done 7785*a67afe4dSAndroid Build Coastguard Worker 7786*a67afe4dSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 7787*a67afe4dSAndroid Build Coastguard Worker libs="$predeps $libs $compiler_lib_search_path $postdeps" 7788*a67afe4dSAndroid Build Coastguard Worker 7789*a67afe4dSAndroid Build Coastguard Worker # Compute libraries that are listed more than once in $predeps 7790*a67afe4dSAndroid Build Coastguard Worker # $postdeps and mark them as special (i.e., whose duplicates are 7791*a67afe4dSAndroid Build Coastguard Worker # not to be eliminated). 7792*a67afe4dSAndroid Build Coastguard Worker pre_post_deps= 7793*a67afe4dSAndroid Build Coastguard Worker if $opt_duplicate_compiler_generated_deps; then 7794*a67afe4dSAndroid Build Coastguard Worker for pre_post_dep in $predeps $postdeps; do 7795*a67afe4dSAndroid Build Coastguard Worker case "$pre_post_deps " in 7796*a67afe4dSAndroid Build Coastguard Worker *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7797*a67afe4dSAndroid Build Coastguard Worker esac 7798*a67afe4dSAndroid Build Coastguard Worker func_append pre_post_deps " $pre_post_dep" 7799*a67afe4dSAndroid Build Coastguard Worker done 7800*a67afe4dSAndroid Build Coastguard Worker fi 7801*a67afe4dSAndroid Build Coastguard Worker pre_post_deps= 7802*a67afe4dSAndroid Build Coastguard Worker fi 7803*a67afe4dSAndroid Build Coastguard Worker 7804*a67afe4dSAndroid Build Coastguard Worker deplibs= 7805*a67afe4dSAndroid Build Coastguard Worker newdependency_libs= 7806*a67afe4dSAndroid Build Coastguard Worker newlib_search_path= 7807*a67afe4dSAndroid Build Coastguard Worker need_relink=no # whether we're linking any uninstalled libtool libraries 7808*a67afe4dSAndroid Build Coastguard Worker notinst_deplibs= # not-installed libtool libraries 7809*a67afe4dSAndroid Build Coastguard Worker notinst_path= # paths that contain not-installed libtool libraries 7810*a67afe4dSAndroid Build Coastguard Worker 7811*a67afe4dSAndroid Build Coastguard Worker case $linkmode in 7812*a67afe4dSAndroid Build Coastguard Worker lib) 7813*a67afe4dSAndroid Build Coastguard Worker passes="conv dlpreopen link" 7814*a67afe4dSAndroid Build Coastguard Worker for file in $dlfiles $dlprefiles; do 7815*a67afe4dSAndroid Build Coastguard Worker case $file in 7816*a67afe4dSAndroid Build Coastguard Worker *.la) ;; 7817*a67afe4dSAndroid Build Coastguard Worker *) 7818*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7819*a67afe4dSAndroid Build Coastguard Worker ;; 7820*a67afe4dSAndroid Build Coastguard Worker esac 7821*a67afe4dSAndroid Build Coastguard Worker done 7822*a67afe4dSAndroid Build Coastguard Worker ;; 7823*a67afe4dSAndroid Build Coastguard Worker prog) 7824*a67afe4dSAndroid Build Coastguard Worker compile_deplibs= 7825*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs= 7826*a67afe4dSAndroid Build Coastguard Worker alldeplibs=false 7827*a67afe4dSAndroid Build Coastguard Worker newdlfiles= 7828*a67afe4dSAndroid Build Coastguard Worker newdlprefiles= 7829*a67afe4dSAndroid Build Coastguard Worker passes="conv scan dlopen dlpreopen link" 7830*a67afe4dSAndroid Build Coastguard Worker ;; 7831*a67afe4dSAndroid Build Coastguard Worker *) passes="conv" 7832*a67afe4dSAndroid Build Coastguard Worker ;; 7833*a67afe4dSAndroid Build Coastguard Worker esac 7834*a67afe4dSAndroid Build Coastguard Worker 7835*a67afe4dSAndroid Build Coastguard Worker for pass in $passes; do 7836*a67afe4dSAndroid Build Coastguard Worker # The preopen pass in lib mode reverses $deplibs; put it back here 7837*a67afe4dSAndroid Build Coastguard Worker # so that -L comes before libs that need it for instance... 7838*a67afe4dSAndroid Build Coastguard Worker if test lib,link = "$linkmode,$pass"; then 7839*a67afe4dSAndroid Build Coastguard Worker ## FIXME: Find the place where the list is rebuilt in the wrong 7840*a67afe4dSAndroid Build Coastguard Worker ## order, and fix it there properly 7841*a67afe4dSAndroid Build Coastguard Worker tmp_deplibs= 7842*a67afe4dSAndroid Build Coastguard Worker for deplib in $deplibs; do 7843*a67afe4dSAndroid Build Coastguard Worker tmp_deplibs="$deplib $tmp_deplibs" 7844*a67afe4dSAndroid Build Coastguard Worker done 7845*a67afe4dSAndroid Build Coastguard Worker deplibs=$tmp_deplibs 7846*a67afe4dSAndroid Build Coastguard Worker fi 7847*a67afe4dSAndroid Build Coastguard Worker 7848*a67afe4dSAndroid Build Coastguard Worker if test lib,link = "$linkmode,$pass" || 7849*a67afe4dSAndroid Build Coastguard Worker test prog,scan = "$linkmode,$pass"; then 7850*a67afe4dSAndroid Build Coastguard Worker libs=$deplibs 7851*a67afe4dSAndroid Build Coastguard Worker deplibs= 7852*a67afe4dSAndroid Build Coastguard Worker fi 7853*a67afe4dSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 7854*a67afe4dSAndroid Build Coastguard Worker case $pass in 7855*a67afe4dSAndroid Build Coastguard Worker dlopen) libs=$dlfiles ;; 7856*a67afe4dSAndroid Build Coastguard Worker dlpreopen) libs=$dlprefiles ;; 7857*a67afe4dSAndroid Build Coastguard Worker link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 7858*a67afe4dSAndroid Build Coastguard Worker esac 7859*a67afe4dSAndroid Build Coastguard Worker fi 7860*a67afe4dSAndroid Build Coastguard Worker if test lib,dlpreopen = "$linkmode,$pass"; then 7861*a67afe4dSAndroid Build Coastguard Worker # Collect and forward deplibs of preopened libtool libs 7862*a67afe4dSAndroid Build Coastguard Worker for lib in $dlprefiles; do 7863*a67afe4dSAndroid Build Coastguard Worker # Ignore non-libtool-libs 7864*a67afe4dSAndroid Build Coastguard Worker dependency_libs= 7865*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$lib" 7866*a67afe4dSAndroid Build Coastguard Worker case $lib in 7867*a67afe4dSAndroid Build Coastguard Worker *.la) func_source "$func_resolve_sysroot_result" ;; 7868*a67afe4dSAndroid Build Coastguard Worker esac 7869*a67afe4dSAndroid Build Coastguard Worker 7870*a67afe4dSAndroid Build Coastguard Worker # Collect preopened libtool deplibs, except any this library 7871*a67afe4dSAndroid Build Coastguard Worker # has declared as weak libs 7872*a67afe4dSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 7873*a67afe4dSAndroid Build Coastguard Worker func_basename "$deplib" 7874*a67afe4dSAndroid Build Coastguard Worker deplib_base=$func_basename_result 7875*a67afe4dSAndroid Build Coastguard Worker case " $weak_libs " in 7876*a67afe4dSAndroid Build Coastguard Worker *" $deplib_base "*) ;; 7877*a67afe4dSAndroid Build Coastguard Worker *) func_append deplibs " $deplib" ;; 7878*a67afe4dSAndroid Build Coastguard Worker esac 7879*a67afe4dSAndroid Build Coastguard Worker done 7880*a67afe4dSAndroid Build Coastguard Worker done 7881*a67afe4dSAndroid Build Coastguard Worker libs=$dlprefiles 7882*a67afe4dSAndroid Build Coastguard Worker fi 7883*a67afe4dSAndroid Build Coastguard Worker if test dlopen = "$pass"; then 7884*a67afe4dSAndroid Build Coastguard Worker # Collect dlpreopened libraries 7885*a67afe4dSAndroid Build Coastguard Worker save_deplibs=$deplibs 7886*a67afe4dSAndroid Build Coastguard Worker deplibs= 7887*a67afe4dSAndroid Build Coastguard Worker fi 7888*a67afe4dSAndroid Build Coastguard Worker 7889*a67afe4dSAndroid Build Coastguard Worker for deplib in $libs; do 7890*a67afe4dSAndroid Build Coastguard Worker lib= 7891*a67afe4dSAndroid Build Coastguard Worker found=false 7892*a67afe4dSAndroid Build Coastguard Worker case $deplib in 7893*a67afe4dSAndroid Build Coastguard Worker -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7894*a67afe4dSAndroid Build Coastguard Worker |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7895*a67afe4dSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 7896*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 7897*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 7898*a67afe4dSAndroid Build Coastguard Worker else 7899*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " $deplib" 7900*a67afe4dSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 7901*a67afe4dSAndroid Build Coastguard Worker case "$new_inherited_linker_flags " in 7902*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) ;; 7903*a67afe4dSAndroid Build Coastguard Worker * ) func_append new_inherited_linker_flags " $deplib" ;; 7904*a67afe4dSAndroid Build Coastguard Worker esac 7905*a67afe4dSAndroid Build Coastguard Worker fi 7906*a67afe4dSAndroid Build Coastguard Worker fi 7907*a67afe4dSAndroid Build Coastguard Worker continue 7908*a67afe4dSAndroid Build Coastguard Worker ;; 7909*a67afe4dSAndroid Build Coastguard Worker -l*) 7910*a67afe4dSAndroid Build Coastguard Worker if test lib != "$linkmode" && test prog != "$linkmode"; then 7911*a67afe4dSAndroid Build Coastguard Worker func_warning "'-l' is ignored for archives/objects" 7912*a67afe4dSAndroid Build Coastguard Worker continue 7913*a67afe4dSAndroid Build Coastguard Worker fi 7914*a67afe4dSAndroid Build Coastguard Worker func_stripname '-l' '' "$deplib" 7915*a67afe4dSAndroid Build Coastguard Worker name=$func_stripname_result 7916*a67afe4dSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 7917*a67afe4dSAndroid Build Coastguard Worker searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7918*a67afe4dSAndroid Build Coastguard Worker else 7919*a67afe4dSAndroid Build Coastguard Worker searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7920*a67afe4dSAndroid Build Coastguard Worker fi 7921*a67afe4dSAndroid Build Coastguard Worker for searchdir in $searchdirs; do 7922*a67afe4dSAndroid Build Coastguard Worker for search_ext in .la $std_shrext .so .a; do 7923*a67afe4dSAndroid Build Coastguard Worker # Search the libtool library 7924*a67afe4dSAndroid Build Coastguard Worker lib=$searchdir/lib$name$search_ext 7925*a67afe4dSAndroid Build Coastguard Worker if test -f "$lib"; then 7926*a67afe4dSAndroid Build Coastguard Worker if test .la = "$search_ext"; then 7927*a67afe4dSAndroid Build Coastguard Worker found=: 7928*a67afe4dSAndroid Build Coastguard Worker else 7929*a67afe4dSAndroid Build Coastguard Worker found=false 7930*a67afe4dSAndroid Build Coastguard Worker fi 7931*a67afe4dSAndroid Build Coastguard Worker break 2 7932*a67afe4dSAndroid Build Coastguard Worker fi 7933*a67afe4dSAndroid Build Coastguard Worker done 7934*a67afe4dSAndroid Build Coastguard Worker done 7935*a67afe4dSAndroid Build Coastguard Worker if $found; then 7936*a67afe4dSAndroid Build Coastguard Worker # deplib is a libtool library 7937*a67afe4dSAndroid Build Coastguard Worker # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7938*a67afe4dSAndroid Build Coastguard Worker # We need to do some special things here, and not later. 7939*a67afe4dSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7940*a67afe4dSAndroid Build Coastguard Worker case " $predeps $postdeps " in 7941*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) 7942*a67afe4dSAndroid Build Coastguard Worker if func_lalib_p "$lib"; then 7943*a67afe4dSAndroid Build Coastguard Worker library_names= 7944*a67afe4dSAndroid Build Coastguard Worker old_library= 7945*a67afe4dSAndroid Build Coastguard Worker func_source "$lib" 7946*a67afe4dSAndroid Build Coastguard Worker for l in $old_library $library_names; do 7947*a67afe4dSAndroid Build Coastguard Worker ll=$l 7948*a67afe4dSAndroid Build Coastguard Worker done 7949*a67afe4dSAndroid Build Coastguard Worker if test "X$ll" = "X$old_library"; then # only static version available 7950*a67afe4dSAndroid Build Coastguard Worker found=false 7951*a67afe4dSAndroid Build Coastguard Worker func_dirname "$lib" "" "." 7952*a67afe4dSAndroid Build Coastguard Worker ladir=$func_dirname_result 7953*a67afe4dSAndroid Build Coastguard Worker lib=$ladir/$old_library 7954*a67afe4dSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 7955*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 7956*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 7957*a67afe4dSAndroid Build Coastguard Worker else 7958*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7959*a67afe4dSAndroid Build Coastguard Worker test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7960*a67afe4dSAndroid Build Coastguard Worker fi 7961*a67afe4dSAndroid Build Coastguard Worker continue 7962*a67afe4dSAndroid Build Coastguard Worker fi 7963*a67afe4dSAndroid Build Coastguard Worker fi 7964*a67afe4dSAndroid Build Coastguard Worker ;; 7965*a67afe4dSAndroid Build Coastguard Worker *) ;; 7966*a67afe4dSAndroid Build Coastguard Worker esac 7967*a67afe4dSAndroid Build Coastguard Worker fi 7968*a67afe4dSAndroid Build Coastguard Worker else 7969*a67afe4dSAndroid Build Coastguard Worker # deplib doesn't seem to be a libtool library 7970*a67afe4dSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 7971*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 7972*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 7973*a67afe4dSAndroid Build Coastguard Worker else 7974*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7975*a67afe4dSAndroid Build Coastguard Worker test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7976*a67afe4dSAndroid Build Coastguard Worker fi 7977*a67afe4dSAndroid Build Coastguard Worker continue 7978*a67afe4dSAndroid Build Coastguard Worker fi 7979*a67afe4dSAndroid Build Coastguard Worker ;; # -l 7980*a67afe4dSAndroid Build Coastguard Worker *.ltframework) 7981*a67afe4dSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 7982*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 7983*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 7984*a67afe4dSAndroid Build Coastguard Worker else 7985*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7986*a67afe4dSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 7987*a67afe4dSAndroid Build Coastguard Worker case "$new_inherited_linker_flags " in 7988*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) ;; 7989*a67afe4dSAndroid Build Coastguard Worker * ) func_append new_inherited_linker_flags " $deplib" ;; 7990*a67afe4dSAndroid Build Coastguard Worker esac 7991*a67afe4dSAndroid Build Coastguard Worker fi 7992*a67afe4dSAndroid Build Coastguard Worker fi 7993*a67afe4dSAndroid Build Coastguard Worker continue 7994*a67afe4dSAndroid Build Coastguard Worker ;; 7995*a67afe4dSAndroid Build Coastguard Worker -L*) 7996*a67afe4dSAndroid Build Coastguard Worker case $linkmode in 7997*a67afe4dSAndroid Build Coastguard Worker lib) 7998*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7999*a67afe4dSAndroid Build Coastguard Worker test conv = "$pass" && continue 8000*a67afe4dSAndroid Build Coastguard Worker newdependency_libs="$deplib $newdependency_libs" 8001*a67afe4dSAndroid Build Coastguard Worker func_stripname '-L' '' "$deplib" 8002*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 8003*a67afe4dSAndroid Build Coastguard Worker func_append newlib_search_path " $func_resolve_sysroot_result" 8004*a67afe4dSAndroid Build Coastguard Worker ;; 8005*a67afe4dSAndroid Build Coastguard Worker prog) 8006*a67afe4dSAndroid Build Coastguard Worker if test conv = "$pass"; then 8007*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8008*a67afe4dSAndroid Build Coastguard Worker continue 8009*a67afe4dSAndroid Build Coastguard Worker fi 8010*a67afe4dSAndroid Build Coastguard Worker if test scan = "$pass"; then 8011*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8012*a67afe4dSAndroid Build Coastguard Worker else 8013*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 8014*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 8015*a67afe4dSAndroid Build Coastguard Worker fi 8016*a67afe4dSAndroid Build Coastguard Worker func_stripname '-L' '' "$deplib" 8017*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 8018*a67afe4dSAndroid Build Coastguard Worker func_append newlib_search_path " $func_resolve_sysroot_result" 8019*a67afe4dSAndroid Build Coastguard Worker ;; 8020*a67afe4dSAndroid Build Coastguard Worker *) 8021*a67afe4dSAndroid Build Coastguard Worker func_warning "'-L' is ignored for archives/objects" 8022*a67afe4dSAndroid Build Coastguard Worker ;; 8023*a67afe4dSAndroid Build Coastguard Worker esac # linkmode 8024*a67afe4dSAndroid Build Coastguard Worker continue 8025*a67afe4dSAndroid Build Coastguard Worker ;; # -L 8026*a67afe4dSAndroid Build Coastguard Worker -R*) 8027*a67afe4dSAndroid Build Coastguard Worker if test link = "$pass"; then 8028*a67afe4dSAndroid Build Coastguard Worker func_stripname '-R' '' "$deplib" 8029*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 8030*a67afe4dSAndroid Build Coastguard Worker dir=$func_resolve_sysroot_result 8031*a67afe4dSAndroid Build Coastguard Worker # Make sure the xrpath contains only unique directories. 8032*a67afe4dSAndroid Build Coastguard Worker case "$xrpath " in 8033*a67afe4dSAndroid Build Coastguard Worker *" $dir "*) ;; 8034*a67afe4dSAndroid Build Coastguard Worker *) func_append xrpath " $dir" ;; 8035*a67afe4dSAndroid Build Coastguard Worker esac 8036*a67afe4dSAndroid Build Coastguard Worker fi 8037*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8038*a67afe4dSAndroid Build Coastguard Worker continue 8039*a67afe4dSAndroid Build Coastguard Worker ;; 8040*a67afe4dSAndroid Build Coastguard Worker *.la) 8041*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$deplib" 8042*a67afe4dSAndroid Build Coastguard Worker lib=$func_resolve_sysroot_result 8043*a67afe4dSAndroid Build Coastguard Worker ;; 8044*a67afe4dSAndroid Build Coastguard Worker *.$libext) 8045*a67afe4dSAndroid Build Coastguard Worker if test conv = "$pass"; then 8046*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8047*a67afe4dSAndroid Build Coastguard Worker continue 8048*a67afe4dSAndroid Build Coastguard Worker fi 8049*a67afe4dSAndroid Build Coastguard Worker case $linkmode in 8050*a67afe4dSAndroid Build Coastguard Worker lib) 8051*a67afe4dSAndroid Build Coastguard Worker # Linking convenience modules into shared libraries is allowed, 8052*a67afe4dSAndroid Build Coastguard Worker # but linking other static libraries is non-portable. 8053*a67afe4dSAndroid Build Coastguard Worker case " $dlpreconveniencelibs " in 8054*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) ;; 8055*a67afe4dSAndroid Build Coastguard Worker *) 8056*a67afe4dSAndroid Build Coastguard Worker valid_a_lib=false 8057*a67afe4dSAndroid Build Coastguard Worker case $deplibs_check_method in 8058*a67afe4dSAndroid Build Coastguard Worker match_pattern*) 8059*a67afe4dSAndroid Build Coastguard Worker set dummy $deplibs_check_method; shift 8060*a67afe4dSAndroid Build Coastguard Worker match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 8061*a67afe4dSAndroid Build Coastguard Worker if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 8062*a67afe4dSAndroid Build Coastguard Worker | $EGREP "$match_pattern_regex" > /dev/null; then 8063*a67afe4dSAndroid Build Coastguard Worker valid_a_lib=: 8064*a67afe4dSAndroid Build Coastguard Worker fi 8065*a67afe4dSAndroid Build Coastguard Worker ;; 8066*a67afe4dSAndroid Build Coastguard Worker pass_all) 8067*a67afe4dSAndroid Build Coastguard Worker valid_a_lib=: 8068*a67afe4dSAndroid Build Coastguard Worker ;; 8069*a67afe4dSAndroid Build Coastguard Worker esac 8070*a67afe4dSAndroid Build Coastguard Worker if $valid_a_lib; then 8071*a67afe4dSAndroid Build Coastguard Worker echo 8072*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the shared library $output against the" 8073*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** static library $deplib is not portable!" 8074*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8075*a67afe4dSAndroid Build Coastguard Worker else 8076*a67afe4dSAndroid Build Coastguard Worker echo 8077*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: Trying to link with static lib archive $deplib." 8078*a67afe4dSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 8079*a67afe4dSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 8080*a67afe4dSAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 8081*a67afe4dSAndroid Build Coastguard Worker echo "*** because the file extensions .$libext of this argument makes me believe" 8082*a67afe4dSAndroid Build Coastguard Worker echo "*** that it is just a static archive that I should not use here." 8083*a67afe4dSAndroid Build Coastguard Worker fi 8084*a67afe4dSAndroid Build Coastguard Worker ;; 8085*a67afe4dSAndroid Build Coastguard Worker esac 8086*a67afe4dSAndroid Build Coastguard Worker continue 8087*a67afe4dSAndroid Build Coastguard Worker ;; 8088*a67afe4dSAndroid Build Coastguard Worker prog) 8089*a67afe4dSAndroid Build Coastguard Worker if test link != "$pass"; then 8090*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8091*a67afe4dSAndroid Build Coastguard Worker else 8092*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 8093*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 8094*a67afe4dSAndroid Build Coastguard Worker fi 8095*a67afe4dSAndroid Build Coastguard Worker continue 8096*a67afe4dSAndroid Build Coastguard Worker ;; 8097*a67afe4dSAndroid Build Coastguard Worker esac # linkmode 8098*a67afe4dSAndroid Build Coastguard Worker ;; # *.$libext 8099*a67afe4dSAndroid Build Coastguard Worker *.lo | *.$objext) 8100*a67afe4dSAndroid Build Coastguard Worker if test conv = "$pass"; then 8101*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8102*a67afe4dSAndroid Build Coastguard Worker elif test prog = "$linkmode"; then 8103*a67afe4dSAndroid Build Coastguard Worker if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 8104*a67afe4dSAndroid Build Coastguard Worker # If there is no dlopen support or we're linking statically, 8105*a67afe4dSAndroid Build Coastguard Worker # we need to preload. 8106*a67afe4dSAndroid Build Coastguard Worker func_append newdlprefiles " $deplib" 8107*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 8108*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 8109*a67afe4dSAndroid Build Coastguard Worker else 8110*a67afe4dSAndroid Build Coastguard Worker func_append newdlfiles " $deplib" 8111*a67afe4dSAndroid Build Coastguard Worker fi 8112*a67afe4dSAndroid Build Coastguard Worker fi 8113*a67afe4dSAndroid Build Coastguard Worker continue 8114*a67afe4dSAndroid Build Coastguard Worker ;; 8115*a67afe4dSAndroid Build Coastguard Worker %DEPLIBS%) 8116*a67afe4dSAndroid Build Coastguard Worker alldeplibs=: 8117*a67afe4dSAndroid Build Coastguard Worker continue 8118*a67afe4dSAndroid Build Coastguard Worker ;; 8119*a67afe4dSAndroid Build Coastguard Worker esac # case $deplib 8120*a67afe4dSAndroid Build Coastguard Worker 8121*a67afe4dSAndroid Build Coastguard Worker $found || test -f "$lib" \ 8122*a67afe4dSAndroid Build Coastguard Worker || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 8123*a67afe4dSAndroid Build Coastguard Worker 8124*a67afe4dSAndroid Build Coastguard Worker # Check to see that this really is a libtool archive. 8125*a67afe4dSAndroid Build Coastguard Worker func_lalib_unsafe_p "$lib" \ 8126*a67afe4dSAndroid Build Coastguard Worker || func_fatal_error "'$lib' is not a valid libtool archive" 8127*a67afe4dSAndroid Build Coastguard Worker 8128*a67afe4dSAndroid Build Coastguard Worker func_dirname "$lib" "" "." 8129*a67afe4dSAndroid Build Coastguard Worker ladir=$func_dirname_result 8130*a67afe4dSAndroid Build Coastguard Worker 8131*a67afe4dSAndroid Build Coastguard Worker dlname= 8132*a67afe4dSAndroid Build Coastguard Worker dlopen= 8133*a67afe4dSAndroid Build Coastguard Worker dlpreopen= 8134*a67afe4dSAndroid Build Coastguard Worker libdir= 8135*a67afe4dSAndroid Build Coastguard Worker library_names= 8136*a67afe4dSAndroid Build Coastguard Worker old_library= 8137*a67afe4dSAndroid Build Coastguard Worker inherited_linker_flags= 8138*a67afe4dSAndroid Build Coastguard Worker # If the library was installed with an old release of libtool, 8139*a67afe4dSAndroid Build Coastguard Worker # it will not redefine variables installed, or shouldnotlink 8140*a67afe4dSAndroid Build Coastguard Worker installed=yes 8141*a67afe4dSAndroid Build Coastguard Worker shouldnotlink=no 8142*a67afe4dSAndroid Build Coastguard Worker avoidtemprpath= 8143*a67afe4dSAndroid Build Coastguard Worker 8144*a67afe4dSAndroid Build Coastguard Worker 8145*a67afe4dSAndroid Build Coastguard Worker # Read the .la file 8146*a67afe4dSAndroid Build Coastguard Worker func_source "$lib" 8147*a67afe4dSAndroid Build Coastguard Worker 8148*a67afe4dSAndroid Build Coastguard Worker # Convert "-framework foo" to "foo.ltframework" 8149*a67afe4dSAndroid Build Coastguard Worker if test -n "$inherited_linker_flags"; then 8150*a67afe4dSAndroid Build Coastguard Worker tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 8151*a67afe4dSAndroid Build Coastguard Worker for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 8152*a67afe4dSAndroid Build Coastguard Worker case " $new_inherited_linker_flags " in 8153*a67afe4dSAndroid Build Coastguard Worker *" $tmp_inherited_linker_flag "*) ;; 8154*a67afe4dSAndroid Build Coastguard Worker *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 8155*a67afe4dSAndroid Build Coastguard Worker esac 8156*a67afe4dSAndroid Build Coastguard Worker done 8157*a67afe4dSAndroid Build Coastguard Worker fi 8158*a67afe4dSAndroid Build Coastguard Worker dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8159*a67afe4dSAndroid Build Coastguard Worker if test lib,link = "$linkmode,$pass" || 8160*a67afe4dSAndroid Build Coastguard Worker test prog,scan = "$linkmode,$pass" || 8161*a67afe4dSAndroid Build Coastguard Worker { test prog != "$linkmode" && test lib != "$linkmode"; }; then 8162*a67afe4dSAndroid Build Coastguard Worker test -n "$dlopen" && func_append dlfiles " $dlopen" 8163*a67afe4dSAndroid Build Coastguard Worker test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 8164*a67afe4dSAndroid Build Coastguard Worker fi 8165*a67afe4dSAndroid Build Coastguard Worker 8166*a67afe4dSAndroid Build Coastguard Worker if test conv = "$pass"; then 8167*a67afe4dSAndroid Build Coastguard Worker # Only check for convenience libraries 8168*a67afe4dSAndroid Build Coastguard Worker deplibs="$lib $deplibs" 8169*a67afe4dSAndroid Build Coastguard Worker if test -z "$libdir"; then 8170*a67afe4dSAndroid Build Coastguard Worker if test -z "$old_library"; then 8171*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "cannot find name of link library for '$lib'" 8172*a67afe4dSAndroid Build Coastguard Worker fi 8173*a67afe4dSAndroid Build Coastguard Worker # It is a libtool convenience library, so add in its objects. 8174*a67afe4dSAndroid Build Coastguard Worker func_append convenience " $ladir/$objdir/$old_library" 8175*a67afe4dSAndroid Build Coastguard Worker func_append old_convenience " $ladir/$objdir/$old_library" 8176*a67afe4dSAndroid Build Coastguard Worker elif test prog != "$linkmode" && test lib != "$linkmode"; then 8177*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$lib' is not a convenience library" 8178*a67afe4dSAndroid Build Coastguard Worker fi 8179*a67afe4dSAndroid Build Coastguard Worker tmp_libs= 8180*a67afe4dSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 8181*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8182*a67afe4dSAndroid Build Coastguard Worker if $opt_preserve_dup_deps; then 8183*a67afe4dSAndroid Build Coastguard Worker case "$tmp_libs " in 8184*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8185*a67afe4dSAndroid Build Coastguard Worker esac 8186*a67afe4dSAndroid Build Coastguard Worker fi 8187*a67afe4dSAndroid Build Coastguard Worker func_append tmp_libs " $deplib" 8188*a67afe4dSAndroid Build Coastguard Worker done 8189*a67afe4dSAndroid Build Coastguard Worker continue 8190*a67afe4dSAndroid Build Coastguard Worker fi # $pass = conv 8191*a67afe4dSAndroid Build Coastguard Worker 8192*a67afe4dSAndroid Build Coastguard Worker 8193*a67afe4dSAndroid Build Coastguard Worker # Get the name of the library we link against. 8194*a67afe4dSAndroid Build Coastguard Worker linklib= 8195*a67afe4dSAndroid Build Coastguard Worker if test -n "$old_library" && 8196*a67afe4dSAndroid Build Coastguard Worker { test yes = "$prefer_static_libs" || 8197*a67afe4dSAndroid Build Coastguard Worker test built,no = "$prefer_static_libs,$installed"; }; then 8198*a67afe4dSAndroid Build Coastguard Worker linklib=$old_library 8199*a67afe4dSAndroid Build Coastguard Worker else 8200*a67afe4dSAndroid Build Coastguard Worker for l in $old_library $library_names; do 8201*a67afe4dSAndroid Build Coastguard Worker linklib=$l 8202*a67afe4dSAndroid Build Coastguard Worker done 8203*a67afe4dSAndroid Build Coastguard Worker fi 8204*a67afe4dSAndroid Build Coastguard Worker if test -z "$linklib"; then 8205*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "cannot find name of link library for '$lib'" 8206*a67afe4dSAndroid Build Coastguard Worker fi 8207*a67afe4dSAndroid Build Coastguard Worker 8208*a67afe4dSAndroid Build Coastguard Worker # This library was specified with -dlopen. 8209*a67afe4dSAndroid Build Coastguard Worker if test dlopen = "$pass"; then 8210*a67afe4dSAndroid Build Coastguard Worker test -z "$libdir" \ 8211*a67afe4dSAndroid Build Coastguard Worker && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 8212*a67afe4dSAndroid Build Coastguard Worker if test -z "$dlname" || 8213*a67afe4dSAndroid Build Coastguard Worker test yes != "$dlopen_support" || 8214*a67afe4dSAndroid Build Coastguard Worker test no = "$build_libtool_libs" 8215*a67afe4dSAndroid Build Coastguard Worker then 8216*a67afe4dSAndroid Build Coastguard Worker # If there is no dlname, no dlopen support or we're linking 8217*a67afe4dSAndroid Build Coastguard Worker # statically, we need to preload. We also need to preload any 8218*a67afe4dSAndroid Build Coastguard Worker # dependent libraries so libltdl's deplib preloader doesn't 8219*a67afe4dSAndroid Build Coastguard Worker # bomb out in the load deplibs phase. 8220*a67afe4dSAndroid Build Coastguard Worker func_append dlprefiles " $lib $dependency_libs" 8221*a67afe4dSAndroid Build Coastguard Worker else 8222*a67afe4dSAndroid Build Coastguard Worker func_append newdlfiles " $lib" 8223*a67afe4dSAndroid Build Coastguard Worker fi 8224*a67afe4dSAndroid Build Coastguard Worker continue 8225*a67afe4dSAndroid Build Coastguard Worker fi # $pass = dlopen 8226*a67afe4dSAndroid Build Coastguard Worker 8227*a67afe4dSAndroid Build Coastguard Worker # We need an absolute path. 8228*a67afe4dSAndroid Build Coastguard Worker case $ladir in 8229*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 8230*a67afe4dSAndroid Build Coastguard Worker *) 8231*a67afe4dSAndroid Build Coastguard Worker abs_ladir=`cd "$ladir" && pwd` 8232*a67afe4dSAndroid Build Coastguard Worker if test -z "$abs_ladir"; then 8233*a67afe4dSAndroid Build Coastguard Worker func_warning "cannot determine absolute directory name of '$ladir'" 8234*a67afe4dSAndroid Build Coastguard Worker func_warning "passing it literally to the linker, although it might fail" 8235*a67afe4dSAndroid Build Coastguard Worker abs_ladir=$ladir 8236*a67afe4dSAndroid Build Coastguard Worker fi 8237*a67afe4dSAndroid Build Coastguard Worker ;; 8238*a67afe4dSAndroid Build Coastguard Worker esac 8239*a67afe4dSAndroid Build Coastguard Worker func_basename "$lib" 8240*a67afe4dSAndroid Build Coastguard Worker laname=$func_basename_result 8241*a67afe4dSAndroid Build Coastguard Worker 8242*a67afe4dSAndroid Build Coastguard Worker # Find the relevant object directory and library name. 8243*a67afe4dSAndroid Build Coastguard Worker if test yes = "$installed"; then 8244*a67afe4dSAndroid Build Coastguard Worker if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8245*a67afe4dSAndroid Build Coastguard Worker func_warning "library '$lib' was moved." 8246*a67afe4dSAndroid Build Coastguard Worker dir=$ladir 8247*a67afe4dSAndroid Build Coastguard Worker absdir=$abs_ladir 8248*a67afe4dSAndroid Build Coastguard Worker libdir=$abs_ladir 8249*a67afe4dSAndroid Build Coastguard Worker else 8250*a67afe4dSAndroid Build Coastguard Worker dir=$lt_sysroot$libdir 8251*a67afe4dSAndroid Build Coastguard Worker absdir=$lt_sysroot$libdir 8252*a67afe4dSAndroid Build Coastguard Worker fi 8253*a67afe4dSAndroid Build Coastguard Worker test yes = "$hardcode_automatic" && avoidtemprpath=yes 8254*a67afe4dSAndroid Build Coastguard Worker else 8255*a67afe4dSAndroid Build Coastguard Worker if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8256*a67afe4dSAndroid Build Coastguard Worker dir=$ladir 8257*a67afe4dSAndroid Build Coastguard Worker absdir=$abs_ladir 8258*a67afe4dSAndroid Build Coastguard Worker # Remove this search path later 8259*a67afe4dSAndroid Build Coastguard Worker func_append notinst_path " $abs_ladir" 8260*a67afe4dSAndroid Build Coastguard Worker else 8261*a67afe4dSAndroid Build Coastguard Worker dir=$ladir/$objdir 8262*a67afe4dSAndroid Build Coastguard Worker absdir=$abs_ladir/$objdir 8263*a67afe4dSAndroid Build Coastguard Worker # Remove this search path later 8264*a67afe4dSAndroid Build Coastguard Worker func_append notinst_path " $abs_ladir" 8265*a67afe4dSAndroid Build Coastguard Worker fi 8266*a67afe4dSAndroid Build Coastguard Worker fi # $installed = yes 8267*a67afe4dSAndroid Build Coastguard Worker func_stripname 'lib' '.la' "$laname" 8268*a67afe4dSAndroid Build Coastguard Worker name=$func_stripname_result 8269*a67afe4dSAndroid Build Coastguard Worker 8270*a67afe4dSAndroid Build Coastguard Worker # This library was specified with -dlpreopen. 8271*a67afe4dSAndroid Build Coastguard Worker if test dlpreopen = "$pass"; then 8272*a67afe4dSAndroid Build Coastguard Worker if test -z "$libdir" && test prog = "$linkmode"; then 8273*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 8274*a67afe4dSAndroid Build Coastguard Worker fi 8275*a67afe4dSAndroid Build Coastguard Worker case $host in 8276*a67afe4dSAndroid Build Coastguard Worker # special handling for platforms with PE-DLLs. 8277*a67afe4dSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 8278*a67afe4dSAndroid Build Coastguard Worker # Linker will automatically link against shared library if both 8279*a67afe4dSAndroid Build Coastguard Worker # static and shared are present. Therefore, ensure we extract 8280*a67afe4dSAndroid Build Coastguard Worker # symbols from the import library if a shared library is present 8281*a67afe4dSAndroid Build Coastguard Worker # (otherwise, the dlopen module name will be incorrect). We do 8282*a67afe4dSAndroid Build Coastguard Worker # this by putting the import library name into $newdlprefiles. 8283*a67afe4dSAndroid Build Coastguard Worker # We recover the dlopen module name by 'saving' the la file 8284*a67afe4dSAndroid Build Coastguard Worker # name in a special purpose variable, and (later) extracting the 8285*a67afe4dSAndroid Build Coastguard Worker # dlname from the la file. 8286*a67afe4dSAndroid Build Coastguard Worker if test -n "$dlname"; then 8287*a67afe4dSAndroid Build Coastguard Worker func_tr_sh "$dir/$linklib" 8288*a67afe4dSAndroid Build Coastguard Worker eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8289*a67afe4dSAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$linklib" 8290*a67afe4dSAndroid Build Coastguard Worker else 8291*a67afe4dSAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$old_library" 8292*a67afe4dSAndroid Build Coastguard Worker # Keep a list of preopened convenience libraries to check 8293*a67afe4dSAndroid Build Coastguard Worker # that they are being used correctly in the link pass. 8294*a67afe4dSAndroid Build Coastguard Worker test -z "$libdir" && \ 8295*a67afe4dSAndroid Build Coastguard Worker func_append dlpreconveniencelibs " $dir/$old_library" 8296*a67afe4dSAndroid Build Coastguard Worker fi 8297*a67afe4dSAndroid Build Coastguard Worker ;; 8298*a67afe4dSAndroid Build Coastguard Worker * ) 8299*a67afe4dSAndroid Build Coastguard Worker # Prefer using a static library (so that no silly _DYNAMIC symbols 8300*a67afe4dSAndroid Build Coastguard Worker # are required to link). 8301*a67afe4dSAndroid Build Coastguard Worker if test -n "$old_library"; then 8302*a67afe4dSAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$old_library" 8303*a67afe4dSAndroid Build Coastguard Worker # Keep a list of preopened convenience libraries to check 8304*a67afe4dSAndroid Build Coastguard Worker # that they are being used correctly in the link pass. 8305*a67afe4dSAndroid Build Coastguard Worker test -z "$libdir" && \ 8306*a67afe4dSAndroid Build Coastguard Worker func_append dlpreconveniencelibs " $dir/$old_library" 8307*a67afe4dSAndroid Build Coastguard Worker # Otherwise, use the dlname, so that lt_dlopen finds it. 8308*a67afe4dSAndroid Build Coastguard Worker elif test -n "$dlname"; then 8309*a67afe4dSAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$dlname" 8310*a67afe4dSAndroid Build Coastguard Worker else 8311*a67afe4dSAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$linklib" 8312*a67afe4dSAndroid Build Coastguard Worker fi 8313*a67afe4dSAndroid Build Coastguard Worker ;; 8314*a67afe4dSAndroid Build Coastguard Worker esac 8315*a67afe4dSAndroid Build Coastguard Worker fi # $pass = dlpreopen 8316*a67afe4dSAndroid Build Coastguard Worker 8317*a67afe4dSAndroid Build Coastguard Worker if test -z "$libdir"; then 8318*a67afe4dSAndroid Build Coastguard Worker # Link the convenience library 8319*a67afe4dSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 8320*a67afe4dSAndroid Build Coastguard Worker deplibs="$dir/$old_library $deplibs" 8321*a67afe4dSAndroid Build Coastguard Worker elif test prog,link = "$linkmode,$pass"; then 8322*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="$dir/$old_library $compile_deplibs" 8323*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="$dir/$old_library $finalize_deplibs" 8324*a67afe4dSAndroid Build Coastguard Worker else 8325*a67afe4dSAndroid Build Coastguard Worker deplibs="$lib $deplibs" # used for prog,scan pass 8326*a67afe4dSAndroid Build Coastguard Worker fi 8327*a67afe4dSAndroid Build Coastguard Worker continue 8328*a67afe4dSAndroid Build Coastguard Worker fi 8329*a67afe4dSAndroid Build Coastguard Worker 8330*a67afe4dSAndroid Build Coastguard Worker 8331*a67afe4dSAndroid Build Coastguard Worker if test prog = "$linkmode" && test link != "$pass"; then 8332*a67afe4dSAndroid Build Coastguard Worker func_append newlib_search_path " $ladir" 8333*a67afe4dSAndroid Build Coastguard Worker deplibs="$lib $deplibs" 8334*a67afe4dSAndroid Build Coastguard Worker 8335*a67afe4dSAndroid Build Coastguard Worker linkalldeplibs=false 8336*a67afe4dSAndroid Build Coastguard Worker if test no != "$link_all_deplibs" || test -z "$library_names" || 8337*a67afe4dSAndroid Build Coastguard Worker test no = "$build_libtool_libs"; then 8338*a67afe4dSAndroid Build Coastguard Worker linkalldeplibs=: 8339*a67afe4dSAndroid Build Coastguard Worker fi 8340*a67afe4dSAndroid Build Coastguard Worker 8341*a67afe4dSAndroid Build Coastguard Worker tmp_libs= 8342*a67afe4dSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 8343*a67afe4dSAndroid Build Coastguard Worker case $deplib in 8344*a67afe4dSAndroid Build Coastguard Worker -L*) func_stripname '-L' '' "$deplib" 8345*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 8346*a67afe4dSAndroid Build Coastguard Worker func_append newlib_search_path " $func_resolve_sysroot_result" 8347*a67afe4dSAndroid Build Coastguard Worker ;; 8348*a67afe4dSAndroid Build Coastguard Worker esac 8349*a67afe4dSAndroid Build Coastguard Worker # Need to link against all dependency_libs? 8350*a67afe4dSAndroid Build Coastguard Worker if $linkalldeplibs; then 8351*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8352*a67afe4dSAndroid Build Coastguard Worker else 8353*a67afe4dSAndroid Build Coastguard Worker # Need to hardcode shared library paths 8354*a67afe4dSAndroid Build Coastguard Worker # or/and link against static libraries 8355*a67afe4dSAndroid Build Coastguard Worker newdependency_libs="$deplib $newdependency_libs" 8356*a67afe4dSAndroid Build Coastguard Worker fi 8357*a67afe4dSAndroid Build Coastguard Worker if $opt_preserve_dup_deps; then 8358*a67afe4dSAndroid Build Coastguard Worker case "$tmp_libs " in 8359*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8360*a67afe4dSAndroid Build Coastguard Worker esac 8361*a67afe4dSAndroid Build Coastguard Worker fi 8362*a67afe4dSAndroid Build Coastguard Worker func_append tmp_libs " $deplib" 8363*a67afe4dSAndroid Build Coastguard Worker done # for deplib 8364*a67afe4dSAndroid Build Coastguard Worker continue 8365*a67afe4dSAndroid Build Coastguard Worker fi # $linkmode = prog... 8366*a67afe4dSAndroid Build Coastguard Worker 8367*a67afe4dSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 8368*a67afe4dSAndroid Build Coastguard Worker if test -n "$library_names" && 8369*a67afe4dSAndroid Build Coastguard Worker { { test no = "$prefer_static_libs" || 8370*a67afe4dSAndroid Build Coastguard Worker test built,yes = "$prefer_static_libs,$installed"; } || 8371*a67afe4dSAndroid Build Coastguard Worker test -z "$old_library"; }; then 8372*a67afe4dSAndroid Build Coastguard Worker # We need to hardcode the library path 8373*a67afe4dSAndroid Build Coastguard Worker if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8374*a67afe4dSAndroid Build Coastguard Worker # Make sure the rpath contains only unique directories. 8375*a67afe4dSAndroid Build Coastguard Worker case $temp_rpath: in 8376*a67afe4dSAndroid Build Coastguard Worker *"$absdir:"*) ;; 8377*a67afe4dSAndroid Build Coastguard Worker *) func_append temp_rpath "$absdir:" ;; 8378*a67afe4dSAndroid Build Coastguard Worker esac 8379*a67afe4dSAndroid Build Coastguard Worker fi 8380*a67afe4dSAndroid Build Coastguard Worker 8381*a67afe4dSAndroid Build Coastguard Worker # Hardcode the library path. 8382*a67afe4dSAndroid Build Coastguard Worker # Skip directories that are in the system default run-time 8383*a67afe4dSAndroid Build Coastguard Worker # search path. 8384*a67afe4dSAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 8385*a67afe4dSAndroid Build Coastguard Worker *" $absdir "*) ;; 8386*a67afe4dSAndroid Build Coastguard Worker *) 8387*a67afe4dSAndroid Build Coastguard Worker case "$compile_rpath " in 8388*a67afe4dSAndroid Build Coastguard Worker *" $absdir "*) ;; 8389*a67afe4dSAndroid Build Coastguard Worker *) func_append compile_rpath " $absdir" ;; 8390*a67afe4dSAndroid Build Coastguard Worker esac 8391*a67afe4dSAndroid Build Coastguard Worker ;; 8392*a67afe4dSAndroid Build Coastguard Worker esac 8393*a67afe4dSAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 8394*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 8395*a67afe4dSAndroid Build Coastguard Worker *) 8396*a67afe4dSAndroid Build Coastguard Worker case "$finalize_rpath " in 8397*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 8398*a67afe4dSAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 8399*a67afe4dSAndroid Build Coastguard Worker esac 8400*a67afe4dSAndroid Build Coastguard Worker ;; 8401*a67afe4dSAndroid Build Coastguard Worker esac 8402*a67afe4dSAndroid Build Coastguard Worker fi # $linkmode,$pass = prog,link... 8403*a67afe4dSAndroid Build Coastguard Worker 8404*a67afe4dSAndroid Build Coastguard Worker if $alldeplibs && 8405*a67afe4dSAndroid Build Coastguard Worker { test pass_all = "$deplibs_check_method" || 8406*a67afe4dSAndroid Build Coastguard Worker { test yes = "$build_libtool_libs" && 8407*a67afe4dSAndroid Build Coastguard Worker test -n "$library_names"; }; }; then 8408*a67afe4dSAndroid Build Coastguard Worker # We only need to search for static libraries 8409*a67afe4dSAndroid Build Coastguard Worker continue 8410*a67afe4dSAndroid Build Coastguard Worker fi 8411*a67afe4dSAndroid Build Coastguard Worker fi 8412*a67afe4dSAndroid Build Coastguard Worker 8413*a67afe4dSAndroid Build Coastguard Worker link_static=no # Whether the deplib will be linked statically 8414*a67afe4dSAndroid Build Coastguard Worker use_static_libs=$prefer_static_libs 8415*a67afe4dSAndroid Build Coastguard Worker if test built = "$use_static_libs" && test yes = "$installed"; then 8416*a67afe4dSAndroid Build Coastguard Worker use_static_libs=no 8417*a67afe4dSAndroid Build Coastguard Worker fi 8418*a67afe4dSAndroid Build Coastguard Worker if test -n "$library_names" && 8419*a67afe4dSAndroid Build Coastguard Worker { test no = "$use_static_libs" || test -z "$old_library"; }; then 8420*a67afe4dSAndroid Build Coastguard Worker case $host in 8421*a67afe4dSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* | *os2*) 8422*a67afe4dSAndroid Build Coastguard Worker # No point in relinking DLLs because paths are not encoded 8423*a67afe4dSAndroid Build Coastguard Worker func_append notinst_deplibs " $lib" 8424*a67afe4dSAndroid Build Coastguard Worker need_relink=no 8425*a67afe4dSAndroid Build Coastguard Worker ;; 8426*a67afe4dSAndroid Build Coastguard Worker *) 8427*a67afe4dSAndroid Build Coastguard Worker if test no = "$installed"; then 8428*a67afe4dSAndroid Build Coastguard Worker func_append notinst_deplibs " $lib" 8429*a67afe4dSAndroid Build Coastguard Worker need_relink=yes 8430*a67afe4dSAndroid Build Coastguard Worker fi 8431*a67afe4dSAndroid Build Coastguard Worker ;; 8432*a67afe4dSAndroid Build Coastguard Worker esac 8433*a67afe4dSAndroid Build Coastguard Worker # This is a shared library 8434*a67afe4dSAndroid Build Coastguard Worker 8435*a67afe4dSAndroid Build Coastguard Worker # Warn about portability, can't link against -module's on some 8436*a67afe4dSAndroid Build Coastguard Worker # systems (darwin). Don't bleat about dlopened modules though! 8437*a67afe4dSAndroid Build Coastguard Worker dlopenmodule= 8438*a67afe4dSAndroid Build Coastguard Worker for dlpremoduletest in $dlprefiles; do 8439*a67afe4dSAndroid Build Coastguard Worker if test "X$dlpremoduletest" = "X$lib"; then 8440*a67afe4dSAndroid Build Coastguard Worker dlopenmodule=$dlpremoduletest 8441*a67afe4dSAndroid Build Coastguard Worker break 8442*a67afe4dSAndroid Build Coastguard Worker fi 8443*a67afe4dSAndroid Build Coastguard Worker done 8444*a67afe4dSAndroid Build Coastguard Worker if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8445*a67afe4dSAndroid Build Coastguard Worker echo 8446*a67afe4dSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 8447*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the executable $output against the loadable module" 8448*a67afe4dSAndroid Build Coastguard Worker else 8449*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8450*a67afe4dSAndroid Build Coastguard Worker fi 8451*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** $linklib is not portable!" 8452*a67afe4dSAndroid Build Coastguard Worker fi 8453*a67afe4dSAndroid Build Coastguard Worker if test lib = "$linkmode" && 8454*a67afe4dSAndroid Build Coastguard Worker test yes = "$hardcode_into_libs"; then 8455*a67afe4dSAndroid Build Coastguard Worker # Hardcode the library path. 8456*a67afe4dSAndroid Build Coastguard Worker # Skip directories that are in the system default run-time 8457*a67afe4dSAndroid Build Coastguard Worker # search path. 8458*a67afe4dSAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 8459*a67afe4dSAndroid Build Coastguard Worker *" $absdir "*) ;; 8460*a67afe4dSAndroid Build Coastguard Worker *) 8461*a67afe4dSAndroid Build Coastguard Worker case "$compile_rpath " in 8462*a67afe4dSAndroid Build Coastguard Worker *" $absdir "*) ;; 8463*a67afe4dSAndroid Build Coastguard Worker *) func_append compile_rpath " $absdir" ;; 8464*a67afe4dSAndroid Build Coastguard Worker esac 8465*a67afe4dSAndroid Build Coastguard Worker ;; 8466*a67afe4dSAndroid Build Coastguard Worker esac 8467*a67afe4dSAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 8468*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 8469*a67afe4dSAndroid Build Coastguard Worker *) 8470*a67afe4dSAndroid Build Coastguard Worker case "$finalize_rpath " in 8471*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 8472*a67afe4dSAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 8473*a67afe4dSAndroid Build Coastguard Worker esac 8474*a67afe4dSAndroid Build Coastguard Worker ;; 8475*a67afe4dSAndroid Build Coastguard Worker esac 8476*a67afe4dSAndroid Build Coastguard Worker fi 8477*a67afe4dSAndroid Build Coastguard Worker 8478*a67afe4dSAndroid Build Coastguard Worker if test -n "$old_archive_from_expsyms_cmds"; then 8479*a67afe4dSAndroid Build Coastguard Worker # figure out the soname 8480*a67afe4dSAndroid Build Coastguard Worker set dummy $library_names 8481*a67afe4dSAndroid Build Coastguard Worker shift 8482*a67afe4dSAndroid Build Coastguard Worker realname=$1 8483*a67afe4dSAndroid Build Coastguard Worker shift 8484*a67afe4dSAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 8485*a67afe4dSAndroid Build Coastguard Worker # use dlname if we got it. it's perfectly good, no? 8486*a67afe4dSAndroid Build Coastguard Worker if test -n "$dlname"; then 8487*a67afe4dSAndroid Build Coastguard Worker soname=$dlname 8488*a67afe4dSAndroid Build Coastguard Worker elif test -n "$soname_spec"; then 8489*a67afe4dSAndroid Build Coastguard Worker # bleh windows 8490*a67afe4dSAndroid Build Coastguard Worker case $host in 8491*a67afe4dSAndroid Build Coastguard Worker *cygwin* | mingw* | *cegcc* | *os2*) 8492*a67afe4dSAndroid Build Coastguard Worker func_arith $current - $age 8493*a67afe4dSAndroid Build Coastguard Worker major=$func_arith_result 8494*a67afe4dSAndroid Build Coastguard Worker versuffix=-$major 8495*a67afe4dSAndroid Build Coastguard Worker ;; 8496*a67afe4dSAndroid Build Coastguard Worker esac 8497*a67afe4dSAndroid Build Coastguard Worker eval soname=\"$soname_spec\" 8498*a67afe4dSAndroid Build Coastguard Worker else 8499*a67afe4dSAndroid Build Coastguard Worker soname=$realname 8500*a67afe4dSAndroid Build Coastguard Worker fi 8501*a67afe4dSAndroid Build Coastguard Worker 8502*a67afe4dSAndroid Build Coastguard Worker # Make a new name for the extract_expsyms_cmds to use 8503*a67afe4dSAndroid Build Coastguard Worker soroot=$soname 8504*a67afe4dSAndroid Build Coastguard Worker func_basename "$soroot" 8505*a67afe4dSAndroid Build Coastguard Worker soname=$func_basename_result 8506*a67afe4dSAndroid Build Coastguard Worker func_stripname 'lib' '.dll' "$soname" 8507*a67afe4dSAndroid Build Coastguard Worker newlib=libimp-$func_stripname_result.a 8508*a67afe4dSAndroid Build Coastguard Worker 8509*a67afe4dSAndroid Build Coastguard Worker # If the library has no export list, then create one now 8510*a67afe4dSAndroid Build Coastguard Worker if test -f "$output_objdir/$soname-def"; then : 8511*a67afe4dSAndroid Build Coastguard Worker else 8512*a67afe4dSAndroid Build Coastguard Worker func_verbose "extracting exported symbol list from '$soname'" 8513*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8514*a67afe4dSAndroid Build Coastguard Worker fi 8515*a67afe4dSAndroid Build Coastguard Worker 8516*a67afe4dSAndroid Build Coastguard Worker # Create $newlib 8517*a67afe4dSAndroid Build Coastguard Worker if test -f "$output_objdir/$newlib"; then :; else 8518*a67afe4dSAndroid Build Coastguard Worker func_verbose "generating import library for '$soname'" 8519*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8520*a67afe4dSAndroid Build Coastguard Worker fi 8521*a67afe4dSAndroid Build Coastguard Worker # make sure the library variables are pointing to the new library 8522*a67afe4dSAndroid Build Coastguard Worker dir=$output_objdir 8523*a67afe4dSAndroid Build Coastguard Worker linklib=$newlib 8524*a67afe4dSAndroid Build Coastguard Worker fi # test -n "$old_archive_from_expsyms_cmds" 8525*a67afe4dSAndroid Build Coastguard Worker 8526*a67afe4dSAndroid Build Coastguard Worker if test prog = "$linkmode" || test relink != "$opt_mode"; then 8527*a67afe4dSAndroid Build Coastguard Worker add_shlibpath= 8528*a67afe4dSAndroid Build Coastguard Worker add_dir= 8529*a67afe4dSAndroid Build Coastguard Worker add= 8530*a67afe4dSAndroid Build Coastguard Worker lib_linked=yes 8531*a67afe4dSAndroid Build Coastguard Worker case $hardcode_action in 8532*a67afe4dSAndroid Build Coastguard Worker immediate | unsupported) 8533*a67afe4dSAndroid Build Coastguard Worker if test no = "$hardcode_direct"; then 8534*a67afe4dSAndroid Build Coastguard Worker add=$dir/$linklib 8535*a67afe4dSAndroid Build Coastguard Worker case $host in 8536*a67afe4dSAndroid Build Coastguard Worker *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 8537*a67afe4dSAndroid Build Coastguard Worker *-*-sysv4*uw2*) add_dir=-L$dir ;; 8538*a67afe4dSAndroid Build Coastguard Worker *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 8539*a67afe4dSAndroid Build Coastguard Worker *-*-unixware7*) add_dir=-L$dir ;; 8540*a67afe4dSAndroid Build Coastguard Worker *-*-darwin* ) 8541*a67afe4dSAndroid Build Coastguard Worker # if the lib is a (non-dlopened) module then we cannot 8542*a67afe4dSAndroid Build Coastguard Worker # link against it, someone is ignoring the earlier warnings 8543*a67afe4dSAndroid Build Coastguard Worker if /usr/bin/file -L $add 2> /dev/null | 8544*a67afe4dSAndroid Build Coastguard Worker $GREP ": [^:]* bundle" >/dev/null; then 8545*a67afe4dSAndroid Build Coastguard Worker if test "X$dlopenmodule" != "X$lib"; then 8546*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: lib $linklib is a module, not a shared library" 8547*a67afe4dSAndroid Build Coastguard Worker if test -z "$old_library"; then 8548*a67afe4dSAndroid Build Coastguard Worker echo 8549*a67afe4dSAndroid Build Coastguard Worker echo "*** And there doesn't seem to be a static archive available" 8550*a67afe4dSAndroid Build Coastguard Worker echo "*** The link will probably fail, sorry" 8551*a67afe4dSAndroid Build Coastguard Worker else 8552*a67afe4dSAndroid Build Coastguard Worker add=$dir/$old_library 8553*a67afe4dSAndroid Build Coastguard Worker fi 8554*a67afe4dSAndroid Build Coastguard Worker elif test -n "$old_library"; then 8555*a67afe4dSAndroid Build Coastguard Worker add=$dir/$old_library 8556*a67afe4dSAndroid Build Coastguard Worker fi 8557*a67afe4dSAndroid Build Coastguard Worker fi 8558*a67afe4dSAndroid Build Coastguard Worker esac 8559*a67afe4dSAndroid Build Coastguard Worker elif test no = "$hardcode_minus_L"; then 8560*a67afe4dSAndroid Build Coastguard Worker case $host in 8561*a67afe4dSAndroid Build Coastguard Worker *-*-sunos*) add_shlibpath=$dir ;; 8562*a67afe4dSAndroid Build Coastguard Worker esac 8563*a67afe4dSAndroid Build Coastguard Worker add_dir=-L$dir 8564*a67afe4dSAndroid Build Coastguard Worker add=-l$name 8565*a67afe4dSAndroid Build Coastguard Worker elif test no = "$hardcode_shlibpath_var"; then 8566*a67afe4dSAndroid Build Coastguard Worker add_shlibpath=$dir 8567*a67afe4dSAndroid Build Coastguard Worker add=-l$name 8568*a67afe4dSAndroid Build Coastguard Worker else 8569*a67afe4dSAndroid Build Coastguard Worker lib_linked=no 8570*a67afe4dSAndroid Build Coastguard Worker fi 8571*a67afe4dSAndroid Build Coastguard Worker ;; 8572*a67afe4dSAndroid Build Coastguard Worker relink) 8573*a67afe4dSAndroid Build Coastguard Worker if test yes = "$hardcode_direct" && 8574*a67afe4dSAndroid Build Coastguard Worker test no = "$hardcode_direct_absolute"; then 8575*a67afe4dSAndroid Build Coastguard Worker add=$dir/$linklib 8576*a67afe4dSAndroid Build Coastguard Worker elif test yes = "$hardcode_minus_L"; then 8577*a67afe4dSAndroid Build Coastguard Worker add_dir=-L$absdir 8578*a67afe4dSAndroid Build Coastguard Worker # Try looking first in the location we're being installed to. 8579*a67afe4dSAndroid Build Coastguard Worker if test -n "$inst_prefix_dir"; then 8580*a67afe4dSAndroid Build Coastguard Worker case $libdir in 8581*a67afe4dSAndroid Build Coastguard Worker [\\/]*) 8582*a67afe4dSAndroid Build Coastguard Worker func_append add_dir " -L$inst_prefix_dir$libdir" 8583*a67afe4dSAndroid Build Coastguard Worker ;; 8584*a67afe4dSAndroid Build Coastguard Worker esac 8585*a67afe4dSAndroid Build Coastguard Worker fi 8586*a67afe4dSAndroid Build Coastguard Worker add=-l$name 8587*a67afe4dSAndroid Build Coastguard Worker elif test yes = "$hardcode_shlibpath_var"; then 8588*a67afe4dSAndroid Build Coastguard Worker add_shlibpath=$dir 8589*a67afe4dSAndroid Build Coastguard Worker add=-l$name 8590*a67afe4dSAndroid Build Coastguard Worker else 8591*a67afe4dSAndroid Build Coastguard Worker lib_linked=no 8592*a67afe4dSAndroid Build Coastguard Worker fi 8593*a67afe4dSAndroid Build Coastguard Worker ;; 8594*a67afe4dSAndroid Build Coastguard Worker *) lib_linked=no ;; 8595*a67afe4dSAndroid Build Coastguard Worker esac 8596*a67afe4dSAndroid Build Coastguard Worker 8597*a67afe4dSAndroid Build Coastguard Worker if test yes != "$lib_linked"; then 8598*a67afe4dSAndroid Build Coastguard Worker func_fatal_configuration "unsupported hardcode properties" 8599*a67afe4dSAndroid Build Coastguard Worker fi 8600*a67afe4dSAndroid Build Coastguard Worker 8601*a67afe4dSAndroid Build Coastguard Worker if test -n "$add_shlibpath"; then 8602*a67afe4dSAndroid Build Coastguard Worker case :$compile_shlibpath: in 8603*a67afe4dSAndroid Build Coastguard Worker *":$add_shlibpath:"*) ;; 8604*a67afe4dSAndroid Build Coastguard Worker *) func_append compile_shlibpath "$add_shlibpath:" ;; 8605*a67afe4dSAndroid Build Coastguard Worker esac 8606*a67afe4dSAndroid Build Coastguard Worker fi 8607*a67afe4dSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 8608*a67afe4dSAndroid Build Coastguard Worker test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8609*a67afe4dSAndroid Build Coastguard Worker test -n "$add" && compile_deplibs="$add $compile_deplibs" 8610*a67afe4dSAndroid Build Coastguard Worker else 8611*a67afe4dSAndroid Build Coastguard Worker test -n "$add_dir" && deplibs="$add_dir $deplibs" 8612*a67afe4dSAndroid Build Coastguard Worker test -n "$add" && deplibs="$add $deplibs" 8613*a67afe4dSAndroid Build Coastguard Worker if test yes != "$hardcode_direct" && 8614*a67afe4dSAndroid Build Coastguard Worker test yes != "$hardcode_minus_L" && 8615*a67afe4dSAndroid Build Coastguard Worker test yes = "$hardcode_shlibpath_var"; then 8616*a67afe4dSAndroid Build Coastguard Worker case :$finalize_shlibpath: in 8617*a67afe4dSAndroid Build Coastguard Worker *":$libdir:"*) ;; 8618*a67afe4dSAndroid Build Coastguard Worker *) func_append finalize_shlibpath "$libdir:" ;; 8619*a67afe4dSAndroid Build Coastguard Worker esac 8620*a67afe4dSAndroid Build Coastguard Worker fi 8621*a67afe4dSAndroid Build Coastguard Worker fi 8622*a67afe4dSAndroid Build Coastguard Worker fi 8623*a67afe4dSAndroid Build Coastguard Worker 8624*a67afe4dSAndroid Build Coastguard Worker if test prog = "$linkmode" || test relink = "$opt_mode"; then 8625*a67afe4dSAndroid Build Coastguard Worker add_shlibpath= 8626*a67afe4dSAndroid Build Coastguard Worker add_dir= 8627*a67afe4dSAndroid Build Coastguard Worker add= 8628*a67afe4dSAndroid Build Coastguard Worker # Finalize command for both is simple: just hardcode it. 8629*a67afe4dSAndroid Build Coastguard Worker if test yes = "$hardcode_direct" && 8630*a67afe4dSAndroid Build Coastguard Worker test no = "$hardcode_direct_absolute"; then 8631*a67afe4dSAndroid Build Coastguard Worker add=$libdir/$linklib 8632*a67afe4dSAndroid Build Coastguard Worker elif test yes = "$hardcode_minus_L"; then 8633*a67afe4dSAndroid Build Coastguard Worker add_dir=-L$libdir 8634*a67afe4dSAndroid Build Coastguard Worker add=-l$name 8635*a67afe4dSAndroid Build Coastguard Worker elif test yes = "$hardcode_shlibpath_var"; then 8636*a67afe4dSAndroid Build Coastguard Worker case :$finalize_shlibpath: in 8637*a67afe4dSAndroid Build Coastguard Worker *":$libdir:"*) ;; 8638*a67afe4dSAndroid Build Coastguard Worker *) func_append finalize_shlibpath "$libdir:" ;; 8639*a67afe4dSAndroid Build Coastguard Worker esac 8640*a67afe4dSAndroid Build Coastguard Worker add=-l$name 8641*a67afe4dSAndroid Build Coastguard Worker elif test yes = "$hardcode_automatic"; then 8642*a67afe4dSAndroid Build Coastguard Worker if test -n "$inst_prefix_dir" && 8643*a67afe4dSAndroid Build Coastguard Worker test -f "$inst_prefix_dir$libdir/$linklib"; then 8644*a67afe4dSAndroid Build Coastguard Worker add=$inst_prefix_dir$libdir/$linklib 8645*a67afe4dSAndroid Build Coastguard Worker else 8646*a67afe4dSAndroid Build Coastguard Worker add=$libdir/$linklib 8647*a67afe4dSAndroid Build Coastguard Worker fi 8648*a67afe4dSAndroid Build Coastguard Worker else 8649*a67afe4dSAndroid Build Coastguard Worker # We cannot seem to hardcode it, guess we'll fake it. 8650*a67afe4dSAndroid Build Coastguard Worker add_dir=-L$libdir 8651*a67afe4dSAndroid Build Coastguard Worker # Try looking first in the location we're being installed to. 8652*a67afe4dSAndroid Build Coastguard Worker if test -n "$inst_prefix_dir"; then 8653*a67afe4dSAndroid Build Coastguard Worker case $libdir in 8654*a67afe4dSAndroid Build Coastguard Worker [\\/]*) 8655*a67afe4dSAndroid Build Coastguard Worker func_append add_dir " -L$inst_prefix_dir$libdir" 8656*a67afe4dSAndroid Build Coastguard Worker ;; 8657*a67afe4dSAndroid Build Coastguard Worker esac 8658*a67afe4dSAndroid Build Coastguard Worker fi 8659*a67afe4dSAndroid Build Coastguard Worker add=-l$name 8660*a67afe4dSAndroid Build Coastguard Worker fi 8661*a67afe4dSAndroid Build Coastguard Worker 8662*a67afe4dSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 8663*a67afe4dSAndroid Build Coastguard Worker test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8664*a67afe4dSAndroid Build Coastguard Worker test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8665*a67afe4dSAndroid Build Coastguard Worker else 8666*a67afe4dSAndroid Build Coastguard Worker test -n "$add_dir" && deplibs="$add_dir $deplibs" 8667*a67afe4dSAndroid Build Coastguard Worker test -n "$add" && deplibs="$add $deplibs" 8668*a67afe4dSAndroid Build Coastguard Worker fi 8669*a67afe4dSAndroid Build Coastguard Worker fi 8670*a67afe4dSAndroid Build Coastguard Worker elif test prog = "$linkmode"; then 8671*a67afe4dSAndroid Build Coastguard Worker # Here we assume that one of hardcode_direct or hardcode_minus_L 8672*a67afe4dSAndroid Build Coastguard Worker # is not unsupported. This is valid on all known static and 8673*a67afe4dSAndroid Build Coastguard Worker # shared platforms. 8674*a67afe4dSAndroid Build Coastguard Worker if test unsupported != "$hardcode_direct"; then 8675*a67afe4dSAndroid Build Coastguard Worker test -n "$old_library" && linklib=$old_library 8676*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="$dir/$linklib $compile_deplibs" 8677*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="$dir/$linklib $finalize_deplibs" 8678*a67afe4dSAndroid Build Coastguard Worker else 8679*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="-l$name -L$dir $compile_deplibs" 8680*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8681*a67afe4dSAndroid Build Coastguard Worker fi 8682*a67afe4dSAndroid Build Coastguard Worker elif test yes = "$build_libtool_libs"; then 8683*a67afe4dSAndroid Build Coastguard Worker # Not a shared library 8684*a67afe4dSAndroid Build Coastguard Worker if test pass_all != "$deplibs_check_method"; then 8685*a67afe4dSAndroid Build Coastguard Worker # We're trying link a shared library against a static one 8686*a67afe4dSAndroid Build Coastguard Worker # but the system doesn't support it. 8687*a67afe4dSAndroid Build Coastguard Worker 8688*a67afe4dSAndroid Build Coastguard Worker # Just print a warning and add the library to dependency_libs so 8689*a67afe4dSAndroid Build Coastguard Worker # that the program can be linked against the static library. 8690*a67afe4dSAndroid Build Coastguard Worker echo 8691*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8692*a67afe4dSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 8693*a67afe4dSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 8694*a67afe4dSAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have." 8695*a67afe4dSAndroid Build Coastguard Worker if test yes = "$module"; then 8696*a67afe4dSAndroid Build Coastguard Worker echo "*** But as you try to build a module library, libtool will still create " 8697*a67afe4dSAndroid Build Coastguard Worker echo "*** a static module, that should work as long as the dlopening application" 8698*a67afe4dSAndroid Build Coastguard Worker echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8699*a67afe4dSAndroid Build Coastguard Worker if test -z "$global_symbol_pipe"; then 8700*a67afe4dSAndroid Build Coastguard Worker echo 8701*a67afe4dSAndroid Build Coastguard Worker echo "*** However, this would only work if libtool was able to extract symbol" 8702*a67afe4dSAndroid Build Coastguard Worker echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8703*a67afe4dSAndroid Build Coastguard Worker echo "*** not find such a program. So, this module is probably useless." 8704*a67afe4dSAndroid Build Coastguard Worker echo "*** 'nm' from GNU binutils and a full rebuild may help." 8705*a67afe4dSAndroid Build Coastguard Worker fi 8706*a67afe4dSAndroid Build Coastguard Worker if test no = "$build_old_libs"; then 8707*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=module 8708*a67afe4dSAndroid Build Coastguard Worker build_old_libs=yes 8709*a67afe4dSAndroid Build Coastguard Worker else 8710*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=no 8711*a67afe4dSAndroid Build Coastguard Worker fi 8712*a67afe4dSAndroid Build Coastguard Worker fi 8713*a67afe4dSAndroid Build Coastguard Worker else 8714*a67afe4dSAndroid Build Coastguard Worker deplibs="$dir/$old_library $deplibs" 8715*a67afe4dSAndroid Build Coastguard Worker link_static=yes 8716*a67afe4dSAndroid Build Coastguard Worker fi 8717*a67afe4dSAndroid Build Coastguard Worker fi # link shared/static library? 8718*a67afe4dSAndroid Build Coastguard Worker 8719*a67afe4dSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 8720*a67afe4dSAndroid Build Coastguard Worker if test -n "$dependency_libs" && 8721*a67afe4dSAndroid Build Coastguard Worker { test yes != "$hardcode_into_libs" || 8722*a67afe4dSAndroid Build Coastguard Worker test yes = "$build_old_libs" || 8723*a67afe4dSAndroid Build Coastguard Worker test yes = "$link_static"; }; then 8724*a67afe4dSAndroid Build Coastguard Worker # Extract -R from dependency_libs 8725*a67afe4dSAndroid Build Coastguard Worker temp_deplibs= 8726*a67afe4dSAndroid Build Coastguard Worker for libdir in $dependency_libs; do 8727*a67afe4dSAndroid Build Coastguard Worker case $libdir in 8728*a67afe4dSAndroid Build Coastguard Worker -R*) func_stripname '-R' '' "$libdir" 8729*a67afe4dSAndroid Build Coastguard Worker temp_xrpath=$func_stripname_result 8730*a67afe4dSAndroid Build Coastguard Worker case " $xrpath " in 8731*a67afe4dSAndroid Build Coastguard Worker *" $temp_xrpath "*) ;; 8732*a67afe4dSAndroid Build Coastguard Worker *) func_append xrpath " $temp_xrpath";; 8733*a67afe4dSAndroid Build Coastguard Worker esac;; 8734*a67afe4dSAndroid Build Coastguard Worker *) func_append temp_deplibs " $libdir";; 8735*a67afe4dSAndroid Build Coastguard Worker esac 8736*a67afe4dSAndroid Build Coastguard Worker done 8737*a67afe4dSAndroid Build Coastguard Worker dependency_libs=$temp_deplibs 8738*a67afe4dSAndroid Build Coastguard Worker fi 8739*a67afe4dSAndroid Build Coastguard Worker 8740*a67afe4dSAndroid Build Coastguard Worker func_append newlib_search_path " $absdir" 8741*a67afe4dSAndroid Build Coastguard Worker # Link against this library 8742*a67afe4dSAndroid Build Coastguard Worker test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8743*a67afe4dSAndroid Build Coastguard Worker # ... and its dependency_libs 8744*a67afe4dSAndroid Build Coastguard Worker tmp_libs= 8745*a67afe4dSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 8746*a67afe4dSAndroid Build Coastguard Worker newdependency_libs="$deplib $newdependency_libs" 8747*a67afe4dSAndroid Build Coastguard Worker case $deplib in 8748*a67afe4dSAndroid Build Coastguard Worker -L*) func_stripname '-L' '' "$deplib" 8749*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result";; 8750*a67afe4dSAndroid Build Coastguard Worker *) func_resolve_sysroot "$deplib" ;; 8751*a67afe4dSAndroid Build Coastguard Worker esac 8752*a67afe4dSAndroid Build Coastguard Worker if $opt_preserve_dup_deps; then 8753*a67afe4dSAndroid Build Coastguard Worker case "$tmp_libs " in 8754*a67afe4dSAndroid Build Coastguard Worker *" $func_resolve_sysroot_result "*) 8755*a67afe4dSAndroid Build Coastguard Worker func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8756*a67afe4dSAndroid Build Coastguard Worker esac 8757*a67afe4dSAndroid Build Coastguard Worker fi 8758*a67afe4dSAndroid Build Coastguard Worker func_append tmp_libs " $func_resolve_sysroot_result" 8759*a67afe4dSAndroid Build Coastguard Worker done 8760*a67afe4dSAndroid Build Coastguard Worker 8761*a67afe4dSAndroid Build Coastguard Worker if test no != "$link_all_deplibs"; then 8762*a67afe4dSAndroid Build Coastguard Worker # Add the search paths of all dependency libraries 8763*a67afe4dSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 8764*a67afe4dSAndroid Build Coastguard Worker path= 8765*a67afe4dSAndroid Build Coastguard Worker case $deplib in 8766*a67afe4dSAndroid Build Coastguard Worker -L*) path=$deplib ;; 8767*a67afe4dSAndroid Build Coastguard Worker *.la) 8768*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$deplib" 8769*a67afe4dSAndroid Build Coastguard Worker deplib=$func_resolve_sysroot_result 8770*a67afe4dSAndroid Build Coastguard Worker func_dirname "$deplib" "" "." 8771*a67afe4dSAndroid Build Coastguard Worker dir=$func_dirname_result 8772*a67afe4dSAndroid Build Coastguard Worker # We need an absolute path. 8773*a67afe4dSAndroid Build Coastguard Worker case $dir in 8774*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8775*a67afe4dSAndroid Build Coastguard Worker *) 8776*a67afe4dSAndroid Build Coastguard Worker absdir=`cd "$dir" && pwd` 8777*a67afe4dSAndroid Build Coastguard Worker if test -z "$absdir"; then 8778*a67afe4dSAndroid Build Coastguard Worker func_warning "cannot determine absolute directory name of '$dir'" 8779*a67afe4dSAndroid Build Coastguard Worker absdir=$dir 8780*a67afe4dSAndroid Build Coastguard Worker fi 8781*a67afe4dSAndroid Build Coastguard Worker ;; 8782*a67afe4dSAndroid Build Coastguard Worker esac 8783*a67afe4dSAndroid Build Coastguard Worker if $GREP "^installed=no" $deplib > /dev/null; then 8784*a67afe4dSAndroid Build Coastguard Worker case $host in 8785*a67afe4dSAndroid Build Coastguard Worker *-*-darwin*) 8786*a67afe4dSAndroid Build Coastguard Worker depdepl= 8787*a67afe4dSAndroid Build Coastguard Worker eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 8788*a67afe4dSAndroid Build Coastguard Worker if test -n "$deplibrary_names"; then 8789*a67afe4dSAndroid Build Coastguard Worker for tmp in $deplibrary_names; do 8790*a67afe4dSAndroid Build Coastguard Worker depdepl=$tmp 8791*a67afe4dSAndroid Build Coastguard Worker done 8792*a67afe4dSAndroid Build Coastguard Worker if test -f "$absdir/$objdir/$depdepl"; then 8793*a67afe4dSAndroid Build Coastguard Worker depdepl=$absdir/$objdir/$depdepl 8794*a67afe4dSAndroid Build Coastguard Worker darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8795*a67afe4dSAndroid Build Coastguard Worker if test -z "$darwin_install_name"; then 8796*a67afe4dSAndroid Build Coastguard Worker darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8797*a67afe4dSAndroid Build Coastguard Worker fi 8798*a67afe4dSAndroid Build Coastguard Worker func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 8799*a67afe4dSAndroid Build Coastguard Worker func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8800*a67afe4dSAndroid Build Coastguard Worker path= 8801*a67afe4dSAndroid Build Coastguard Worker fi 8802*a67afe4dSAndroid Build Coastguard Worker fi 8803*a67afe4dSAndroid Build Coastguard Worker ;; 8804*a67afe4dSAndroid Build Coastguard Worker *) 8805*a67afe4dSAndroid Build Coastguard Worker path=-L$absdir/$objdir 8806*a67afe4dSAndroid Build Coastguard Worker ;; 8807*a67afe4dSAndroid Build Coastguard Worker esac 8808*a67afe4dSAndroid Build Coastguard Worker else 8809*a67afe4dSAndroid Build Coastguard Worker eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8810*a67afe4dSAndroid Build Coastguard Worker test -z "$libdir" && \ 8811*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$deplib' is not a valid libtool archive" 8812*a67afe4dSAndroid Build Coastguard Worker test "$absdir" != "$libdir" && \ 8813*a67afe4dSAndroid Build Coastguard Worker func_warning "'$deplib' seems to be moved" 8814*a67afe4dSAndroid Build Coastguard Worker 8815*a67afe4dSAndroid Build Coastguard Worker path=-L$absdir 8816*a67afe4dSAndroid Build Coastguard Worker fi 8817*a67afe4dSAndroid Build Coastguard Worker ;; 8818*a67afe4dSAndroid Build Coastguard Worker esac 8819*a67afe4dSAndroid Build Coastguard Worker case " $deplibs " in 8820*a67afe4dSAndroid Build Coastguard Worker *" $path "*) ;; 8821*a67afe4dSAndroid Build Coastguard Worker *) deplibs="$path $deplibs" ;; 8822*a67afe4dSAndroid Build Coastguard Worker esac 8823*a67afe4dSAndroid Build Coastguard Worker done 8824*a67afe4dSAndroid Build Coastguard Worker fi # link_all_deplibs != no 8825*a67afe4dSAndroid Build Coastguard Worker fi # linkmode = lib 8826*a67afe4dSAndroid Build Coastguard Worker done # for deplib in $libs 8827*a67afe4dSAndroid Build Coastguard Worker if test link = "$pass"; then 8828*a67afe4dSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 8829*a67afe4dSAndroid Build Coastguard Worker compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8830*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8831*a67afe4dSAndroid Build Coastguard Worker else 8832*a67afe4dSAndroid Build Coastguard Worker compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8833*a67afe4dSAndroid Build Coastguard Worker fi 8834*a67afe4dSAndroid Build Coastguard Worker fi 8835*a67afe4dSAndroid Build Coastguard Worker dependency_libs=$newdependency_libs 8836*a67afe4dSAndroid Build Coastguard Worker if test dlpreopen = "$pass"; then 8837*a67afe4dSAndroid Build Coastguard Worker # Link the dlpreopened libraries before other libraries 8838*a67afe4dSAndroid Build Coastguard Worker for deplib in $save_deplibs; do 8839*a67afe4dSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8840*a67afe4dSAndroid Build Coastguard Worker done 8841*a67afe4dSAndroid Build Coastguard Worker fi 8842*a67afe4dSAndroid Build Coastguard Worker if test dlopen != "$pass"; then 8843*a67afe4dSAndroid Build Coastguard Worker test conv = "$pass" || { 8844*a67afe4dSAndroid Build Coastguard Worker # Make sure lib_search_path contains only unique directories. 8845*a67afe4dSAndroid Build Coastguard Worker lib_search_path= 8846*a67afe4dSAndroid Build Coastguard Worker for dir in $newlib_search_path; do 8847*a67afe4dSAndroid Build Coastguard Worker case "$lib_search_path " in 8848*a67afe4dSAndroid Build Coastguard Worker *" $dir "*) ;; 8849*a67afe4dSAndroid Build Coastguard Worker *) func_append lib_search_path " $dir" ;; 8850*a67afe4dSAndroid Build Coastguard Worker esac 8851*a67afe4dSAndroid Build Coastguard Worker done 8852*a67afe4dSAndroid Build Coastguard Worker newlib_search_path= 8853*a67afe4dSAndroid Build Coastguard Worker } 8854*a67afe4dSAndroid Build Coastguard Worker 8855*a67afe4dSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 8856*a67afe4dSAndroid Build Coastguard Worker vars="compile_deplibs finalize_deplibs" 8857*a67afe4dSAndroid Build Coastguard Worker else 8858*a67afe4dSAndroid Build Coastguard Worker vars=deplibs 8859*a67afe4dSAndroid Build Coastguard Worker fi 8860*a67afe4dSAndroid Build Coastguard Worker for var in $vars dependency_libs; do 8861*a67afe4dSAndroid Build Coastguard Worker # Add libraries to $var in reverse order 8862*a67afe4dSAndroid Build Coastguard Worker eval tmp_libs=\"\$$var\" 8863*a67afe4dSAndroid Build Coastguard Worker new_libs= 8864*a67afe4dSAndroid Build Coastguard Worker for deplib in $tmp_libs; do 8865*a67afe4dSAndroid Build Coastguard Worker # FIXME: Pedantically, this is the right thing to do, so 8866*a67afe4dSAndroid Build Coastguard Worker # that some nasty dependency loop isn't accidentally 8867*a67afe4dSAndroid Build Coastguard Worker # broken: 8868*a67afe4dSAndroid Build Coastguard Worker #new_libs="$deplib $new_libs" 8869*a67afe4dSAndroid Build Coastguard Worker # Pragmatically, this seems to cause very few problems in 8870*a67afe4dSAndroid Build Coastguard Worker # practice: 8871*a67afe4dSAndroid Build Coastguard Worker case $deplib in 8872*a67afe4dSAndroid Build Coastguard Worker -L*) new_libs="$deplib $new_libs" ;; 8873*a67afe4dSAndroid Build Coastguard Worker -R*) ;; 8874*a67afe4dSAndroid Build Coastguard Worker *) 8875*a67afe4dSAndroid Build Coastguard Worker # And here is the reason: when a library appears more 8876*a67afe4dSAndroid Build Coastguard Worker # than once as an explicit dependence of a library, or 8877*a67afe4dSAndroid Build Coastguard Worker # is implicitly linked in more than once by the 8878*a67afe4dSAndroid Build Coastguard Worker # compiler, it is considered special, and multiple 8879*a67afe4dSAndroid Build Coastguard Worker # occurrences thereof are not removed. Compare this 8880*a67afe4dSAndroid Build Coastguard Worker # with having the same library being listed as a 8881*a67afe4dSAndroid Build Coastguard Worker # dependency of multiple other libraries: in this case, 8882*a67afe4dSAndroid Build Coastguard Worker # we know (pedantically, we assume) the library does not 8883*a67afe4dSAndroid Build Coastguard Worker # need to be listed more than once, so we keep only the 8884*a67afe4dSAndroid Build Coastguard Worker # last copy. This is not always right, but it is rare 8885*a67afe4dSAndroid Build Coastguard Worker # enough that we require users that really mean to play 8886*a67afe4dSAndroid Build Coastguard Worker # such unportable linking tricks to link the library 8887*a67afe4dSAndroid Build Coastguard Worker # using -Wl,-lname, so that libtool does not consider it 8888*a67afe4dSAndroid Build Coastguard Worker # for duplicate removal. 8889*a67afe4dSAndroid Build Coastguard Worker case " $specialdeplibs " in 8890*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) new_libs="$deplib $new_libs" ;; 8891*a67afe4dSAndroid Build Coastguard Worker *) 8892*a67afe4dSAndroid Build Coastguard Worker case " $new_libs " in 8893*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) ;; 8894*a67afe4dSAndroid Build Coastguard Worker *) new_libs="$deplib $new_libs" ;; 8895*a67afe4dSAndroid Build Coastguard Worker esac 8896*a67afe4dSAndroid Build Coastguard Worker ;; 8897*a67afe4dSAndroid Build Coastguard Worker esac 8898*a67afe4dSAndroid Build Coastguard Worker ;; 8899*a67afe4dSAndroid Build Coastguard Worker esac 8900*a67afe4dSAndroid Build Coastguard Worker done 8901*a67afe4dSAndroid Build Coastguard Worker tmp_libs= 8902*a67afe4dSAndroid Build Coastguard Worker for deplib in $new_libs; do 8903*a67afe4dSAndroid Build Coastguard Worker case $deplib in 8904*a67afe4dSAndroid Build Coastguard Worker -L*) 8905*a67afe4dSAndroid Build Coastguard Worker case " $tmp_libs " in 8906*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) ;; 8907*a67afe4dSAndroid Build Coastguard Worker *) func_append tmp_libs " $deplib" ;; 8908*a67afe4dSAndroid Build Coastguard Worker esac 8909*a67afe4dSAndroid Build Coastguard Worker ;; 8910*a67afe4dSAndroid Build Coastguard Worker *) func_append tmp_libs " $deplib" ;; 8911*a67afe4dSAndroid Build Coastguard Worker esac 8912*a67afe4dSAndroid Build Coastguard Worker done 8913*a67afe4dSAndroid Build Coastguard Worker eval $var=\"$tmp_libs\" 8914*a67afe4dSAndroid Build Coastguard Worker done # for var 8915*a67afe4dSAndroid Build Coastguard Worker fi 8916*a67afe4dSAndroid Build Coastguard Worker 8917*a67afe4dSAndroid Build Coastguard Worker # Add Sun CC postdeps if required: 8918*a67afe4dSAndroid Build Coastguard Worker test CXX = "$tagname" && { 8919*a67afe4dSAndroid Build Coastguard Worker case $host_os in 8920*a67afe4dSAndroid Build Coastguard Worker linux*) 8921*a67afe4dSAndroid Build Coastguard Worker case `$CC -V 2>&1 | $SED 5q` in 8922*a67afe4dSAndroid Build Coastguard Worker *Sun\ C*) # Sun C++ 5.9 8923*a67afe4dSAndroid Build Coastguard Worker func_suncc_cstd_abi 8924*a67afe4dSAndroid Build Coastguard Worker 8925*a67afe4dSAndroid Build Coastguard Worker if test no != "$suncc_use_cstd_abi"; then 8926*a67afe4dSAndroid Build Coastguard Worker func_append postdeps ' -library=Cstd -library=Crun' 8927*a67afe4dSAndroid Build Coastguard Worker fi 8928*a67afe4dSAndroid Build Coastguard Worker ;; 8929*a67afe4dSAndroid Build Coastguard Worker esac 8930*a67afe4dSAndroid Build Coastguard Worker ;; 8931*a67afe4dSAndroid Build Coastguard Worker 8932*a67afe4dSAndroid Build Coastguard Worker solaris*) 8933*a67afe4dSAndroid Build Coastguard Worker func_cc_basename "$CC" 8934*a67afe4dSAndroid Build Coastguard Worker case $func_cc_basename_result in 8935*a67afe4dSAndroid Build Coastguard Worker CC* | sunCC*) 8936*a67afe4dSAndroid Build Coastguard Worker func_suncc_cstd_abi 8937*a67afe4dSAndroid Build Coastguard Worker 8938*a67afe4dSAndroid Build Coastguard Worker if test no != "$suncc_use_cstd_abi"; then 8939*a67afe4dSAndroid Build Coastguard Worker func_append postdeps ' -library=Cstd -library=Crun' 8940*a67afe4dSAndroid Build Coastguard Worker fi 8941*a67afe4dSAndroid Build Coastguard Worker ;; 8942*a67afe4dSAndroid Build Coastguard Worker esac 8943*a67afe4dSAndroid Build Coastguard Worker ;; 8944*a67afe4dSAndroid Build Coastguard Worker esac 8945*a67afe4dSAndroid Build Coastguard Worker } 8946*a67afe4dSAndroid Build Coastguard Worker 8947*a67afe4dSAndroid Build Coastguard Worker # Last step: remove runtime libs from dependency_libs 8948*a67afe4dSAndroid Build Coastguard Worker # (they stay in deplibs) 8949*a67afe4dSAndroid Build Coastguard Worker tmp_libs= 8950*a67afe4dSAndroid Build Coastguard Worker for i in $dependency_libs; do 8951*a67afe4dSAndroid Build Coastguard Worker case " $predeps $postdeps $compiler_lib_search_path " in 8952*a67afe4dSAndroid Build Coastguard Worker *" $i "*) 8953*a67afe4dSAndroid Build Coastguard Worker i= 8954*a67afe4dSAndroid Build Coastguard Worker ;; 8955*a67afe4dSAndroid Build Coastguard Worker esac 8956*a67afe4dSAndroid Build Coastguard Worker if test -n "$i"; then 8957*a67afe4dSAndroid Build Coastguard Worker func_append tmp_libs " $i" 8958*a67afe4dSAndroid Build Coastguard Worker fi 8959*a67afe4dSAndroid Build Coastguard Worker done 8960*a67afe4dSAndroid Build Coastguard Worker dependency_libs=$tmp_libs 8961*a67afe4dSAndroid Build Coastguard Worker done # for pass 8962*a67afe4dSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 8963*a67afe4dSAndroid Build Coastguard Worker dlfiles=$newdlfiles 8964*a67afe4dSAndroid Build Coastguard Worker fi 8965*a67afe4dSAndroid Build Coastguard Worker if test prog = "$linkmode" || test lib = "$linkmode"; then 8966*a67afe4dSAndroid Build Coastguard Worker dlprefiles=$newdlprefiles 8967*a67afe4dSAndroid Build Coastguard Worker fi 8968*a67afe4dSAndroid Build Coastguard Worker 8969*a67afe4dSAndroid Build Coastguard Worker case $linkmode in 8970*a67afe4dSAndroid Build Coastguard Worker oldlib) 8971*a67afe4dSAndroid Build Coastguard Worker if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 8972*a67afe4dSAndroid Build Coastguard Worker func_warning "'-dlopen' is ignored for archives" 8973*a67afe4dSAndroid Build Coastguard Worker fi 8974*a67afe4dSAndroid Build Coastguard Worker 8975*a67afe4dSAndroid Build Coastguard Worker case " $deplibs" in 8976*a67afe4dSAndroid Build Coastguard Worker *\ -l* | *\ -L*) 8977*a67afe4dSAndroid Build Coastguard Worker func_warning "'-l' and '-L' are ignored for archives" ;; 8978*a67afe4dSAndroid Build Coastguard Worker esac 8979*a67afe4dSAndroid Build Coastguard Worker 8980*a67afe4dSAndroid Build Coastguard Worker test -n "$rpath" && \ 8981*a67afe4dSAndroid Build Coastguard Worker func_warning "'-rpath' is ignored for archives" 8982*a67afe4dSAndroid Build Coastguard Worker 8983*a67afe4dSAndroid Build Coastguard Worker test -n "$xrpath" && \ 8984*a67afe4dSAndroid Build Coastguard Worker func_warning "'-R' is ignored for archives" 8985*a67afe4dSAndroid Build Coastguard Worker 8986*a67afe4dSAndroid Build Coastguard Worker test -n "$vinfo" && \ 8987*a67afe4dSAndroid Build Coastguard Worker func_warning "'-version-info/-version-number' is ignored for archives" 8988*a67afe4dSAndroid Build Coastguard Worker 8989*a67afe4dSAndroid Build Coastguard Worker test -n "$release" && \ 8990*a67afe4dSAndroid Build Coastguard Worker func_warning "'-release' is ignored for archives" 8991*a67afe4dSAndroid Build Coastguard Worker 8992*a67afe4dSAndroid Build Coastguard Worker test -n "$export_symbols$export_symbols_regex" && \ 8993*a67afe4dSAndroid Build Coastguard Worker func_warning "'-export-symbols' is ignored for archives" 8994*a67afe4dSAndroid Build Coastguard Worker 8995*a67afe4dSAndroid Build Coastguard Worker # Now set the variables for building old libraries. 8996*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=no 8997*a67afe4dSAndroid Build Coastguard Worker oldlibs=$output 8998*a67afe4dSAndroid Build Coastguard Worker func_append objs "$old_deplibs" 8999*a67afe4dSAndroid Build Coastguard Worker ;; 9000*a67afe4dSAndroid Build Coastguard Worker 9001*a67afe4dSAndroid Build Coastguard Worker lib) 9002*a67afe4dSAndroid Build Coastguard Worker # Make sure we only generate libraries of the form 'libNAME.la'. 9003*a67afe4dSAndroid Build Coastguard Worker case $outputname in 9004*a67afe4dSAndroid Build Coastguard Worker lib*) 9005*a67afe4dSAndroid Build Coastguard Worker func_stripname 'lib' '.la' "$outputname" 9006*a67afe4dSAndroid Build Coastguard Worker name=$func_stripname_result 9007*a67afe4dSAndroid Build Coastguard Worker eval shared_ext=\"$shrext_cmds\" 9008*a67afe4dSAndroid Build Coastguard Worker eval libname=\"$libname_spec\" 9009*a67afe4dSAndroid Build Coastguard Worker ;; 9010*a67afe4dSAndroid Build Coastguard Worker *) 9011*a67afe4dSAndroid Build Coastguard Worker test no = "$module" \ 9012*a67afe4dSAndroid Build Coastguard Worker && func_fatal_help "libtool library '$output' must begin with 'lib'" 9013*a67afe4dSAndroid Build Coastguard Worker 9014*a67afe4dSAndroid Build Coastguard Worker if test no != "$need_lib_prefix"; then 9015*a67afe4dSAndroid Build Coastguard Worker # Add the "lib" prefix for modules if required 9016*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '.la' "$outputname" 9017*a67afe4dSAndroid Build Coastguard Worker name=$func_stripname_result 9018*a67afe4dSAndroid Build Coastguard Worker eval shared_ext=\"$shrext_cmds\" 9019*a67afe4dSAndroid Build Coastguard Worker eval libname=\"$libname_spec\" 9020*a67afe4dSAndroid Build Coastguard Worker else 9021*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '.la' "$outputname" 9022*a67afe4dSAndroid Build Coastguard Worker libname=$func_stripname_result 9023*a67afe4dSAndroid Build Coastguard Worker fi 9024*a67afe4dSAndroid Build Coastguard Worker ;; 9025*a67afe4dSAndroid Build Coastguard Worker esac 9026*a67afe4dSAndroid Build Coastguard Worker 9027*a67afe4dSAndroid Build Coastguard Worker if test -n "$objs"; then 9028*a67afe4dSAndroid Build Coastguard Worker if test pass_all != "$deplibs_check_method"; then 9029*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 9030*a67afe4dSAndroid Build Coastguard Worker else 9031*a67afe4dSAndroid Build Coastguard Worker echo 9032*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 9033*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** objects $objs is not portable!" 9034*a67afe4dSAndroid Build Coastguard Worker func_append libobjs " $objs" 9035*a67afe4dSAndroid Build Coastguard Worker fi 9036*a67afe4dSAndroid Build Coastguard Worker fi 9037*a67afe4dSAndroid Build Coastguard Worker 9038*a67afe4dSAndroid Build Coastguard Worker test no = "$dlself" \ 9039*a67afe4dSAndroid Build Coastguard Worker || func_warning "'-dlopen self' is ignored for libtool libraries" 9040*a67afe4dSAndroid Build Coastguard Worker 9041*a67afe4dSAndroid Build Coastguard Worker set dummy $rpath 9042*a67afe4dSAndroid Build Coastguard Worker shift 9043*a67afe4dSAndroid Build Coastguard Worker test 1 -lt "$#" \ 9044*a67afe4dSAndroid Build Coastguard Worker && func_warning "ignoring multiple '-rpath's for a libtool library" 9045*a67afe4dSAndroid Build Coastguard Worker 9046*a67afe4dSAndroid Build Coastguard Worker install_libdir=$1 9047*a67afe4dSAndroid Build Coastguard Worker 9048*a67afe4dSAndroid Build Coastguard Worker oldlibs= 9049*a67afe4dSAndroid Build Coastguard Worker if test -z "$rpath"; then 9050*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 9051*a67afe4dSAndroid Build Coastguard Worker # Building a libtool convenience library. 9052*a67afe4dSAndroid Build Coastguard Worker # Some compilers have problems with a '.al' extension so 9053*a67afe4dSAndroid Build Coastguard Worker # convenience libraries should have the same extension an 9054*a67afe4dSAndroid Build Coastguard Worker # archive normally would. 9055*a67afe4dSAndroid Build Coastguard Worker oldlibs="$output_objdir/$libname.$libext $oldlibs" 9056*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=convenience 9057*a67afe4dSAndroid Build Coastguard Worker build_old_libs=yes 9058*a67afe4dSAndroid Build Coastguard Worker fi 9059*a67afe4dSAndroid Build Coastguard Worker 9060*a67afe4dSAndroid Build Coastguard Worker test -n "$vinfo" && \ 9061*a67afe4dSAndroid Build Coastguard Worker func_warning "'-version-info/-version-number' is ignored for convenience libraries" 9062*a67afe4dSAndroid Build Coastguard Worker 9063*a67afe4dSAndroid Build Coastguard Worker test -n "$release" && \ 9064*a67afe4dSAndroid Build Coastguard Worker func_warning "'-release' is ignored for convenience libraries" 9065*a67afe4dSAndroid Build Coastguard Worker else 9066*a67afe4dSAndroid Build Coastguard Worker 9067*a67afe4dSAndroid Build Coastguard Worker # Parse the version information argument. 9068*a67afe4dSAndroid Build Coastguard Worker save_ifs=$IFS; IFS=: 9069*a67afe4dSAndroid Build Coastguard Worker set dummy $vinfo 0 0 0 9070*a67afe4dSAndroid Build Coastguard Worker shift 9071*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 9072*a67afe4dSAndroid Build Coastguard Worker 9073*a67afe4dSAndroid Build Coastguard Worker test -n "$7" && \ 9074*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "too many parameters to '-version-info'" 9075*a67afe4dSAndroid Build Coastguard Worker 9076*a67afe4dSAndroid Build Coastguard Worker # convert absolute version numbers to libtool ages 9077*a67afe4dSAndroid Build Coastguard Worker # this retains compatibility with .la files and attempts 9078*a67afe4dSAndroid Build Coastguard Worker # to make the code below a bit more comprehensible 9079*a67afe4dSAndroid Build Coastguard Worker 9080*a67afe4dSAndroid Build Coastguard Worker case $vinfo_number in 9081*a67afe4dSAndroid Build Coastguard Worker yes) 9082*a67afe4dSAndroid Build Coastguard Worker number_major=$1 9083*a67afe4dSAndroid Build Coastguard Worker number_minor=$2 9084*a67afe4dSAndroid Build Coastguard Worker number_revision=$3 9085*a67afe4dSAndroid Build Coastguard Worker # 9086*a67afe4dSAndroid Build Coastguard Worker # There are really only two kinds -- those that 9087*a67afe4dSAndroid Build Coastguard Worker # use the current revision as the major version 9088*a67afe4dSAndroid Build Coastguard Worker # and those that subtract age and use age as 9089*a67afe4dSAndroid Build Coastguard Worker # a minor version. But, then there is irix 9090*a67afe4dSAndroid Build Coastguard Worker # that has an extra 1 added just for fun 9091*a67afe4dSAndroid Build Coastguard Worker # 9092*a67afe4dSAndroid Build Coastguard Worker case $version_type in 9093*a67afe4dSAndroid Build Coastguard Worker # correct linux to gnu/linux during the next big refactor 9094*a67afe4dSAndroid Build Coastguard Worker darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) 9095*a67afe4dSAndroid Build Coastguard Worker func_arith $number_major + $number_minor 9096*a67afe4dSAndroid Build Coastguard Worker current=$func_arith_result 9097*a67afe4dSAndroid Build Coastguard Worker age=$number_minor 9098*a67afe4dSAndroid Build Coastguard Worker revision=$number_revision 9099*a67afe4dSAndroid Build Coastguard Worker ;; 9100*a67afe4dSAndroid Build Coastguard Worker freebsd-aout|qnx|sunos) 9101*a67afe4dSAndroid Build Coastguard Worker current=$number_major 9102*a67afe4dSAndroid Build Coastguard Worker revision=$number_minor 9103*a67afe4dSAndroid Build Coastguard Worker age=0 9104*a67afe4dSAndroid Build Coastguard Worker ;; 9105*a67afe4dSAndroid Build Coastguard Worker irix|nonstopux) 9106*a67afe4dSAndroid Build Coastguard Worker func_arith $number_major + $number_minor 9107*a67afe4dSAndroid Build Coastguard Worker current=$func_arith_result 9108*a67afe4dSAndroid Build Coastguard Worker age=$number_minor 9109*a67afe4dSAndroid Build Coastguard Worker revision=$number_minor 9110*a67afe4dSAndroid Build Coastguard Worker lt_irix_increment=no 9111*a67afe4dSAndroid Build Coastguard Worker ;; 9112*a67afe4dSAndroid Build Coastguard Worker esac 9113*a67afe4dSAndroid Build Coastguard Worker ;; 9114*a67afe4dSAndroid Build Coastguard Worker no) 9115*a67afe4dSAndroid Build Coastguard Worker current=$1 9116*a67afe4dSAndroid Build Coastguard Worker revision=$2 9117*a67afe4dSAndroid Build Coastguard Worker age=$3 9118*a67afe4dSAndroid Build Coastguard Worker ;; 9119*a67afe4dSAndroid Build Coastguard Worker esac 9120*a67afe4dSAndroid Build Coastguard Worker 9121*a67afe4dSAndroid Build Coastguard Worker # Check that each of the things are valid numbers. 9122*a67afe4dSAndroid Build Coastguard Worker case $current in 9123*a67afe4dSAndroid 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]) ;; 9124*a67afe4dSAndroid Build Coastguard Worker *) 9125*a67afe4dSAndroid Build Coastguard Worker func_error "CURRENT '$current' must be a nonnegative integer" 9126*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$vinfo' is not valid version information" 9127*a67afe4dSAndroid Build Coastguard Worker ;; 9128*a67afe4dSAndroid Build Coastguard Worker esac 9129*a67afe4dSAndroid Build Coastguard Worker 9130*a67afe4dSAndroid Build Coastguard Worker case $revision in 9131*a67afe4dSAndroid 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]) ;; 9132*a67afe4dSAndroid Build Coastguard Worker *) 9133*a67afe4dSAndroid Build Coastguard Worker func_error "REVISION '$revision' must be a nonnegative integer" 9134*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$vinfo' is not valid version information" 9135*a67afe4dSAndroid Build Coastguard Worker ;; 9136*a67afe4dSAndroid Build Coastguard Worker esac 9137*a67afe4dSAndroid Build Coastguard Worker 9138*a67afe4dSAndroid Build Coastguard Worker case $age in 9139*a67afe4dSAndroid 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]) ;; 9140*a67afe4dSAndroid Build Coastguard Worker *) 9141*a67afe4dSAndroid Build Coastguard Worker func_error "AGE '$age' must be a nonnegative integer" 9142*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$vinfo' is not valid version information" 9143*a67afe4dSAndroid Build Coastguard Worker ;; 9144*a67afe4dSAndroid Build Coastguard Worker esac 9145*a67afe4dSAndroid Build Coastguard Worker 9146*a67afe4dSAndroid Build Coastguard Worker if test "$age" -gt "$current"; then 9147*a67afe4dSAndroid Build Coastguard Worker func_error "AGE '$age' is greater than the current interface number '$current'" 9148*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$vinfo' is not valid version information" 9149*a67afe4dSAndroid Build Coastguard Worker fi 9150*a67afe4dSAndroid Build Coastguard Worker 9151*a67afe4dSAndroid Build Coastguard Worker # Calculate the version variables. 9152*a67afe4dSAndroid Build Coastguard Worker major= 9153*a67afe4dSAndroid Build Coastguard Worker versuffix= 9154*a67afe4dSAndroid Build Coastguard Worker verstring= 9155*a67afe4dSAndroid Build Coastguard Worker case $version_type in 9156*a67afe4dSAndroid Build Coastguard Worker none) ;; 9157*a67afe4dSAndroid Build Coastguard Worker 9158*a67afe4dSAndroid Build Coastguard Worker darwin) 9159*a67afe4dSAndroid Build Coastguard Worker # Like Linux, but with the current version available in 9160*a67afe4dSAndroid Build Coastguard Worker # verstring for coding it into the library header 9161*a67afe4dSAndroid Build Coastguard Worker func_arith $current - $age 9162*a67afe4dSAndroid Build Coastguard Worker major=.$func_arith_result 9163*a67afe4dSAndroid Build Coastguard Worker versuffix=$major.$age.$revision 9164*a67afe4dSAndroid Build Coastguard Worker # Darwin ld doesn't like 0 for these options... 9165*a67afe4dSAndroid Build Coastguard Worker func_arith $current + 1 9166*a67afe4dSAndroid Build Coastguard Worker minor_current=$func_arith_result 9167*a67afe4dSAndroid Build Coastguard Worker xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9168*a67afe4dSAndroid Build Coastguard Worker verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 9169*a67afe4dSAndroid Build Coastguard Worker # On Darwin other compilers 9170*a67afe4dSAndroid Build Coastguard Worker case $CC in 9171*a67afe4dSAndroid Build Coastguard Worker nagfor*) 9172*a67afe4dSAndroid Build Coastguard Worker verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9173*a67afe4dSAndroid Build Coastguard Worker ;; 9174*a67afe4dSAndroid Build Coastguard Worker *) 9175*a67afe4dSAndroid Build Coastguard Worker verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 9176*a67afe4dSAndroid Build Coastguard Worker ;; 9177*a67afe4dSAndroid Build Coastguard Worker esac 9178*a67afe4dSAndroid Build Coastguard Worker ;; 9179*a67afe4dSAndroid Build Coastguard Worker 9180*a67afe4dSAndroid Build Coastguard Worker freebsd-aout) 9181*a67afe4dSAndroid Build Coastguard Worker major=.$current 9182*a67afe4dSAndroid Build Coastguard Worker versuffix=.$current.$revision 9183*a67afe4dSAndroid Build Coastguard Worker ;; 9184*a67afe4dSAndroid Build Coastguard Worker 9185*a67afe4dSAndroid Build Coastguard Worker freebsd-elf | midnightbsd-elf) 9186*a67afe4dSAndroid Build Coastguard Worker func_arith $current - $age 9187*a67afe4dSAndroid Build Coastguard Worker major=.$func_arith_result 9188*a67afe4dSAndroid Build Coastguard Worker versuffix=$major.$age.$revision 9189*a67afe4dSAndroid Build Coastguard Worker ;; 9190*a67afe4dSAndroid Build Coastguard Worker 9191*a67afe4dSAndroid Build Coastguard Worker irix | nonstopux) 9192*a67afe4dSAndroid Build Coastguard Worker if test no = "$lt_irix_increment"; then 9193*a67afe4dSAndroid Build Coastguard Worker func_arith $current - $age 9194*a67afe4dSAndroid Build Coastguard Worker else 9195*a67afe4dSAndroid Build Coastguard Worker func_arith $current - $age + 1 9196*a67afe4dSAndroid Build Coastguard Worker fi 9197*a67afe4dSAndroid Build Coastguard Worker major=$func_arith_result 9198*a67afe4dSAndroid Build Coastguard Worker 9199*a67afe4dSAndroid Build Coastguard Worker case $version_type in 9200*a67afe4dSAndroid Build Coastguard Worker nonstopux) verstring_prefix=nonstopux ;; 9201*a67afe4dSAndroid Build Coastguard Worker *) verstring_prefix=sgi ;; 9202*a67afe4dSAndroid Build Coastguard Worker esac 9203*a67afe4dSAndroid Build Coastguard Worker verstring=$verstring_prefix$major.$revision 9204*a67afe4dSAndroid Build Coastguard Worker 9205*a67afe4dSAndroid Build Coastguard Worker # Add in all the interfaces that we are compatible with. 9206*a67afe4dSAndroid Build Coastguard Worker loop=$revision 9207*a67afe4dSAndroid Build Coastguard Worker while test 0 -ne "$loop"; do 9208*a67afe4dSAndroid Build Coastguard Worker func_arith $revision - $loop 9209*a67afe4dSAndroid Build Coastguard Worker iface=$func_arith_result 9210*a67afe4dSAndroid Build Coastguard Worker func_arith $loop - 1 9211*a67afe4dSAndroid Build Coastguard Worker loop=$func_arith_result 9212*a67afe4dSAndroid Build Coastguard Worker verstring=$verstring_prefix$major.$iface:$verstring 9213*a67afe4dSAndroid Build Coastguard Worker done 9214*a67afe4dSAndroid Build Coastguard Worker 9215*a67afe4dSAndroid Build Coastguard Worker # Before this point, $major must not contain '.'. 9216*a67afe4dSAndroid Build Coastguard Worker major=.$major 9217*a67afe4dSAndroid Build Coastguard Worker versuffix=$major.$revision 9218*a67afe4dSAndroid Build Coastguard Worker ;; 9219*a67afe4dSAndroid Build Coastguard Worker 9220*a67afe4dSAndroid Build Coastguard Worker linux) # correct to gnu/linux during the next big refactor 9221*a67afe4dSAndroid Build Coastguard Worker func_arith $current - $age 9222*a67afe4dSAndroid Build Coastguard Worker major=.$func_arith_result 9223*a67afe4dSAndroid Build Coastguard Worker versuffix=$major.$age.$revision 9224*a67afe4dSAndroid Build Coastguard Worker ;; 9225*a67afe4dSAndroid Build Coastguard Worker 9226*a67afe4dSAndroid Build Coastguard Worker osf) 9227*a67afe4dSAndroid Build Coastguard Worker func_arith $current - $age 9228*a67afe4dSAndroid Build Coastguard Worker major=.$func_arith_result 9229*a67afe4dSAndroid Build Coastguard Worker versuffix=.$current.$age.$revision 9230*a67afe4dSAndroid Build Coastguard Worker verstring=$current.$age.$revision 9231*a67afe4dSAndroid Build Coastguard Worker 9232*a67afe4dSAndroid Build Coastguard Worker # Add in all the interfaces that we are compatible with. 9233*a67afe4dSAndroid Build Coastguard Worker loop=$age 9234*a67afe4dSAndroid Build Coastguard Worker while test 0 -ne "$loop"; do 9235*a67afe4dSAndroid Build Coastguard Worker func_arith $current - $loop 9236*a67afe4dSAndroid Build Coastguard Worker iface=$func_arith_result 9237*a67afe4dSAndroid Build Coastguard Worker func_arith $loop - 1 9238*a67afe4dSAndroid Build Coastguard Worker loop=$func_arith_result 9239*a67afe4dSAndroid Build Coastguard Worker verstring=$verstring:$iface.0 9240*a67afe4dSAndroid Build Coastguard Worker done 9241*a67afe4dSAndroid Build Coastguard Worker 9242*a67afe4dSAndroid Build Coastguard Worker # Make executables depend on our current version. 9243*a67afe4dSAndroid Build Coastguard Worker func_append verstring ":$current.0" 9244*a67afe4dSAndroid Build Coastguard Worker ;; 9245*a67afe4dSAndroid Build Coastguard Worker 9246*a67afe4dSAndroid Build Coastguard Worker qnx) 9247*a67afe4dSAndroid Build Coastguard Worker major=.$current 9248*a67afe4dSAndroid Build Coastguard Worker versuffix=.$current 9249*a67afe4dSAndroid Build Coastguard Worker ;; 9250*a67afe4dSAndroid Build Coastguard Worker 9251*a67afe4dSAndroid Build Coastguard Worker sco) 9252*a67afe4dSAndroid Build Coastguard Worker major=.$current 9253*a67afe4dSAndroid Build Coastguard Worker versuffix=.$current 9254*a67afe4dSAndroid Build Coastguard Worker ;; 9255*a67afe4dSAndroid Build Coastguard Worker 9256*a67afe4dSAndroid Build Coastguard Worker sunos) 9257*a67afe4dSAndroid Build Coastguard Worker major=.$current 9258*a67afe4dSAndroid Build Coastguard Worker versuffix=.$current.$revision 9259*a67afe4dSAndroid Build Coastguard Worker ;; 9260*a67afe4dSAndroid Build Coastguard Worker 9261*a67afe4dSAndroid Build Coastguard Worker windows) 9262*a67afe4dSAndroid Build Coastguard Worker # Use '-' rather than '.', since we only want one 9263*a67afe4dSAndroid Build Coastguard Worker # extension on DOS 8.3 file systems. 9264*a67afe4dSAndroid Build Coastguard Worker func_arith $current - $age 9265*a67afe4dSAndroid Build Coastguard Worker major=$func_arith_result 9266*a67afe4dSAndroid Build Coastguard Worker versuffix=-$major 9267*a67afe4dSAndroid Build Coastguard Worker ;; 9268*a67afe4dSAndroid Build Coastguard Worker 9269*a67afe4dSAndroid Build Coastguard Worker *) 9270*a67afe4dSAndroid Build Coastguard Worker func_fatal_configuration "unknown library version type '$version_type'" 9271*a67afe4dSAndroid Build Coastguard Worker ;; 9272*a67afe4dSAndroid Build Coastguard Worker esac 9273*a67afe4dSAndroid Build Coastguard Worker 9274*a67afe4dSAndroid Build Coastguard Worker # Clear the version info if we defaulted, and they specified a release. 9275*a67afe4dSAndroid Build Coastguard Worker if test -z "$vinfo" && test -n "$release"; then 9276*a67afe4dSAndroid Build Coastguard Worker major= 9277*a67afe4dSAndroid Build Coastguard Worker case $version_type in 9278*a67afe4dSAndroid Build Coastguard Worker darwin) 9279*a67afe4dSAndroid Build Coastguard Worker # we can't check for "0.0" in archive_cmds due to quoting 9280*a67afe4dSAndroid Build Coastguard Worker # problems, so we reset it completely 9281*a67afe4dSAndroid Build Coastguard Worker verstring= 9282*a67afe4dSAndroid Build Coastguard Worker ;; 9283*a67afe4dSAndroid Build Coastguard Worker *) 9284*a67afe4dSAndroid Build Coastguard Worker verstring=0.0 9285*a67afe4dSAndroid Build Coastguard Worker ;; 9286*a67afe4dSAndroid Build Coastguard Worker esac 9287*a67afe4dSAndroid Build Coastguard Worker if test no = "$need_version"; then 9288*a67afe4dSAndroid Build Coastguard Worker versuffix= 9289*a67afe4dSAndroid Build Coastguard Worker else 9290*a67afe4dSAndroid Build Coastguard Worker versuffix=.0.0 9291*a67afe4dSAndroid Build Coastguard Worker fi 9292*a67afe4dSAndroid Build Coastguard Worker fi 9293*a67afe4dSAndroid Build Coastguard Worker 9294*a67afe4dSAndroid Build Coastguard Worker # Remove version info from name if versioning should be avoided 9295*a67afe4dSAndroid Build Coastguard Worker if test yes,no = "$avoid_version,$need_version"; then 9296*a67afe4dSAndroid Build Coastguard Worker major= 9297*a67afe4dSAndroid Build Coastguard Worker versuffix= 9298*a67afe4dSAndroid Build Coastguard Worker verstring= 9299*a67afe4dSAndroid Build Coastguard Worker fi 9300*a67afe4dSAndroid Build Coastguard Worker 9301*a67afe4dSAndroid Build Coastguard Worker # Check to see if the archive will have undefined symbols. 9302*a67afe4dSAndroid Build Coastguard Worker if test yes = "$allow_undefined"; then 9303*a67afe4dSAndroid Build Coastguard Worker if test unsupported = "$allow_undefined_flag"; then 9304*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 9305*a67afe4dSAndroid Build Coastguard Worker func_warning "undefined symbols not allowed in $host shared libraries; building static only" 9306*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=no 9307*a67afe4dSAndroid Build Coastguard Worker else 9308*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "can't build $host shared library unless -no-undefined is specified" 9309*a67afe4dSAndroid Build Coastguard Worker fi 9310*a67afe4dSAndroid Build Coastguard Worker fi 9311*a67afe4dSAndroid Build Coastguard Worker else 9312*a67afe4dSAndroid Build Coastguard Worker # Don't allow undefined symbols. 9313*a67afe4dSAndroid Build Coastguard Worker allow_undefined_flag=$no_undefined_flag 9314*a67afe4dSAndroid Build Coastguard Worker fi 9315*a67afe4dSAndroid Build Coastguard Worker 9316*a67afe4dSAndroid Build Coastguard Worker fi 9317*a67afe4dSAndroid Build Coastguard Worker 9318*a67afe4dSAndroid Build Coastguard Worker func_generate_dlsyms "$libname" "$libname" : 9319*a67afe4dSAndroid Build Coastguard Worker func_append libobjs " $symfileobj" 9320*a67afe4dSAndroid Build Coastguard Worker test " " = "$libobjs" && libobjs= 9321*a67afe4dSAndroid Build Coastguard Worker 9322*a67afe4dSAndroid Build Coastguard Worker if test relink != "$opt_mode"; then 9323*a67afe4dSAndroid Build Coastguard Worker # Remove our outputs, but don't remove object files since they 9324*a67afe4dSAndroid Build Coastguard Worker # may have been created when compiling PIC objects. 9325*a67afe4dSAndroid Build Coastguard Worker removelist= 9326*a67afe4dSAndroid Build Coastguard Worker tempremovelist=`$ECHO "$output_objdir/*"` 9327*a67afe4dSAndroid Build Coastguard Worker for p in $tempremovelist; do 9328*a67afe4dSAndroid Build Coastguard Worker case $p in 9329*a67afe4dSAndroid Build Coastguard Worker *.$objext | *.gcno) 9330*a67afe4dSAndroid Build Coastguard Worker ;; 9331*a67afe4dSAndroid Build Coastguard Worker $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 9332*a67afe4dSAndroid Build Coastguard Worker if test -n "$precious_files_regex"; then 9333*a67afe4dSAndroid Build Coastguard Worker if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9334*a67afe4dSAndroid Build Coastguard Worker then 9335*a67afe4dSAndroid Build Coastguard Worker continue 9336*a67afe4dSAndroid Build Coastguard Worker fi 9337*a67afe4dSAndroid Build Coastguard Worker fi 9338*a67afe4dSAndroid Build Coastguard Worker func_append removelist " $p" 9339*a67afe4dSAndroid Build Coastguard Worker ;; 9340*a67afe4dSAndroid Build Coastguard Worker *) ;; 9341*a67afe4dSAndroid Build Coastguard Worker esac 9342*a67afe4dSAndroid Build Coastguard Worker done 9343*a67afe4dSAndroid Build Coastguard Worker test -n "$removelist" && \ 9344*a67afe4dSAndroid Build Coastguard Worker func_show_eval "${RM}r \$removelist" 9345*a67afe4dSAndroid Build Coastguard Worker fi 9346*a67afe4dSAndroid Build Coastguard Worker 9347*a67afe4dSAndroid Build Coastguard Worker # Now set the variables for building old libraries. 9348*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9349*a67afe4dSAndroid Build Coastguard Worker func_append oldlibs " $output_objdir/$libname.$libext" 9350*a67afe4dSAndroid Build Coastguard Worker 9351*a67afe4dSAndroid Build Coastguard Worker # Transform .lo files to .o files. 9352*a67afe4dSAndroid Build Coastguard Worker oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9353*a67afe4dSAndroid Build Coastguard Worker fi 9354*a67afe4dSAndroid Build Coastguard Worker 9355*a67afe4dSAndroid Build Coastguard Worker # Eliminate all temporary directories. 9356*a67afe4dSAndroid Build Coastguard Worker #for path in $notinst_path; do 9357*a67afe4dSAndroid Build Coastguard Worker # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9358*a67afe4dSAndroid Build Coastguard Worker # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9359*a67afe4dSAndroid Build Coastguard Worker # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9360*a67afe4dSAndroid Build Coastguard Worker #done 9361*a67afe4dSAndroid Build Coastguard Worker 9362*a67afe4dSAndroid Build Coastguard Worker if test -n "$xrpath"; then 9363*a67afe4dSAndroid Build Coastguard Worker # If the user specified any rpath flags, then add them. 9364*a67afe4dSAndroid Build Coastguard Worker temp_xrpath= 9365*a67afe4dSAndroid Build Coastguard Worker for libdir in $xrpath; do 9366*a67afe4dSAndroid Build Coastguard Worker func_replace_sysroot "$libdir" 9367*a67afe4dSAndroid Build Coastguard Worker func_append temp_xrpath " -R$func_replace_sysroot_result" 9368*a67afe4dSAndroid Build Coastguard Worker case "$finalize_rpath " in 9369*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 9370*a67afe4dSAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 9371*a67afe4dSAndroid Build Coastguard Worker esac 9372*a67afe4dSAndroid Build Coastguard Worker done 9373*a67afe4dSAndroid Build Coastguard Worker if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9374*a67afe4dSAndroid Build Coastguard Worker dependency_libs="$temp_xrpath $dependency_libs" 9375*a67afe4dSAndroid Build Coastguard Worker fi 9376*a67afe4dSAndroid Build Coastguard Worker fi 9377*a67afe4dSAndroid Build Coastguard Worker 9378*a67afe4dSAndroid Build Coastguard Worker # Make sure dlfiles contains only unique files that won't be dlpreopened 9379*a67afe4dSAndroid Build Coastguard Worker old_dlfiles=$dlfiles 9380*a67afe4dSAndroid Build Coastguard Worker dlfiles= 9381*a67afe4dSAndroid Build Coastguard Worker for lib in $old_dlfiles; do 9382*a67afe4dSAndroid Build Coastguard Worker case " $dlprefiles $dlfiles " in 9383*a67afe4dSAndroid Build Coastguard Worker *" $lib "*) ;; 9384*a67afe4dSAndroid Build Coastguard Worker *) func_append dlfiles " $lib" ;; 9385*a67afe4dSAndroid Build Coastguard Worker esac 9386*a67afe4dSAndroid Build Coastguard Worker done 9387*a67afe4dSAndroid Build Coastguard Worker 9388*a67afe4dSAndroid Build Coastguard Worker # Make sure dlprefiles contains only unique files 9389*a67afe4dSAndroid Build Coastguard Worker old_dlprefiles=$dlprefiles 9390*a67afe4dSAndroid Build Coastguard Worker dlprefiles= 9391*a67afe4dSAndroid Build Coastguard Worker for lib in $old_dlprefiles; do 9392*a67afe4dSAndroid Build Coastguard Worker case "$dlprefiles " in 9393*a67afe4dSAndroid Build Coastguard Worker *" $lib "*) ;; 9394*a67afe4dSAndroid Build Coastguard Worker *) func_append dlprefiles " $lib" ;; 9395*a67afe4dSAndroid Build Coastguard Worker esac 9396*a67afe4dSAndroid Build Coastguard Worker done 9397*a67afe4dSAndroid Build Coastguard Worker 9398*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 9399*a67afe4dSAndroid Build Coastguard Worker if test -n "$rpath"; then 9400*a67afe4dSAndroid Build Coastguard Worker case $host in 9401*a67afe4dSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9402*a67afe4dSAndroid Build Coastguard Worker # these systems don't actually have a c library (as such)! 9403*a67afe4dSAndroid Build Coastguard Worker ;; 9404*a67afe4dSAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 9405*a67afe4dSAndroid Build Coastguard Worker # Rhapsody C library is in the System framework 9406*a67afe4dSAndroid Build Coastguard Worker func_append deplibs " System.ltframework" 9407*a67afe4dSAndroid Build Coastguard Worker ;; 9408*a67afe4dSAndroid Build Coastguard Worker *-*-netbsd*) 9409*a67afe4dSAndroid Build Coastguard Worker # Don't link with libc until the a.out ld.so is fixed. 9410*a67afe4dSAndroid Build Coastguard Worker ;; 9411*a67afe4dSAndroid Build Coastguard Worker *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 9412*a67afe4dSAndroid Build Coastguard Worker # Do not include libc due to us having libc/libc_r. 9413*a67afe4dSAndroid Build Coastguard Worker ;; 9414*a67afe4dSAndroid Build Coastguard Worker *-*-sco3.2v5* | *-*-sco5v6*) 9415*a67afe4dSAndroid Build Coastguard Worker # Causes problems with __ctype 9416*a67afe4dSAndroid Build Coastguard Worker ;; 9417*a67afe4dSAndroid Build Coastguard Worker *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9418*a67afe4dSAndroid Build Coastguard Worker # Compiler inserts libc in the correct place for threads to work 9419*a67afe4dSAndroid Build Coastguard Worker ;; 9420*a67afe4dSAndroid Build Coastguard Worker *) 9421*a67afe4dSAndroid Build Coastguard Worker # Add libc to deplibs on all other systems if necessary. 9422*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_libtool_need_lc"; then 9423*a67afe4dSAndroid Build Coastguard Worker func_append deplibs " -lc" 9424*a67afe4dSAndroid Build Coastguard Worker fi 9425*a67afe4dSAndroid Build Coastguard Worker ;; 9426*a67afe4dSAndroid Build Coastguard Worker esac 9427*a67afe4dSAndroid Build Coastguard Worker fi 9428*a67afe4dSAndroid Build Coastguard Worker 9429*a67afe4dSAndroid Build Coastguard Worker # Transform deplibs into only deplibs that can be linked in shared. 9430*a67afe4dSAndroid Build Coastguard Worker name_save=$name 9431*a67afe4dSAndroid Build Coastguard Worker libname_save=$libname 9432*a67afe4dSAndroid Build Coastguard Worker release_save=$release 9433*a67afe4dSAndroid Build Coastguard Worker versuffix_save=$versuffix 9434*a67afe4dSAndroid Build Coastguard Worker major_save=$major 9435*a67afe4dSAndroid Build Coastguard Worker # I'm not sure if I'm treating the release correctly. I think 9436*a67afe4dSAndroid Build Coastguard Worker # release should show up in the -l (ie -lgmp5) so we don't want to 9437*a67afe4dSAndroid Build Coastguard Worker # add it in twice. Is that correct? 9438*a67afe4dSAndroid Build Coastguard Worker release= 9439*a67afe4dSAndroid Build Coastguard Worker versuffix= 9440*a67afe4dSAndroid Build Coastguard Worker major= 9441*a67afe4dSAndroid Build Coastguard Worker newdeplibs= 9442*a67afe4dSAndroid Build Coastguard Worker droppeddeps=no 9443*a67afe4dSAndroid Build Coastguard Worker case $deplibs_check_method in 9444*a67afe4dSAndroid Build Coastguard Worker pass_all) 9445*a67afe4dSAndroid Build Coastguard Worker # Don't check for shared/static. Everything works. 9446*a67afe4dSAndroid Build Coastguard Worker # This might be a little naive. We might want to check 9447*a67afe4dSAndroid Build Coastguard Worker # whether the library exists or not. But this is on 9448*a67afe4dSAndroid Build Coastguard Worker # osf3 & osf4 and I'm not really sure... Just 9449*a67afe4dSAndroid Build Coastguard Worker # implementing what was already the behavior. 9450*a67afe4dSAndroid Build Coastguard Worker newdeplibs=$deplibs 9451*a67afe4dSAndroid Build Coastguard Worker ;; 9452*a67afe4dSAndroid Build Coastguard Worker test_compile) 9453*a67afe4dSAndroid Build Coastguard Worker # This code stresses the "libraries are programs" paradigm to its 9454*a67afe4dSAndroid Build Coastguard Worker # limits. Maybe even breaks it. We compile a program, linking it 9455*a67afe4dSAndroid Build Coastguard Worker # against the deplibs as a proxy for the library. Then we can check 9456*a67afe4dSAndroid Build Coastguard Worker # whether they linked in statically or dynamically with ldd. 9457*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM conftest.c 9458*a67afe4dSAndroid Build Coastguard Worker cat > conftest.c <<EOF 9459*a67afe4dSAndroid Build Coastguard Worker int main() { return 0; } 9460*a67afe4dSAndroid Build Coastguard WorkerEOF 9461*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM conftest 9462*a67afe4dSAndroid Build Coastguard Worker if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9463*a67afe4dSAndroid Build Coastguard Worker ldd_output=`ldd conftest` 9464*a67afe4dSAndroid Build Coastguard Worker for i in $deplibs; do 9465*a67afe4dSAndroid Build Coastguard Worker case $i in 9466*a67afe4dSAndroid Build Coastguard Worker -l*) 9467*a67afe4dSAndroid Build Coastguard Worker func_stripname -l '' "$i" 9468*a67afe4dSAndroid Build Coastguard Worker name=$func_stripname_result 9469*a67afe4dSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9470*a67afe4dSAndroid Build Coastguard Worker case " $predeps $postdeps " in 9471*a67afe4dSAndroid Build Coastguard Worker *" $i "*) 9472*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9473*a67afe4dSAndroid Build Coastguard Worker i= 9474*a67afe4dSAndroid Build Coastguard Worker ;; 9475*a67afe4dSAndroid Build Coastguard Worker esac 9476*a67afe4dSAndroid Build Coastguard Worker fi 9477*a67afe4dSAndroid Build Coastguard Worker if test -n "$i"; then 9478*a67afe4dSAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 9479*a67afe4dSAndroid Build Coastguard Worker deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9480*a67afe4dSAndroid Build Coastguard Worker set dummy $deplib_matches; shift 9481*a67afe4dSAndroid Build Coastguard Worker deplib_match=$1 9482*a67afe4dSAndroid Build Coastguard Worker if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9483*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9484*a67afe4dSAndroid Build Coastguard Worker else 9485*a67afe4dSAndroid Build Coastguard Worker droppeddeps=yes 9486*a67afe4dSAndroid Build Coastguard Worker echo 9487*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9488*a67afe4dSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 9489*a67afe4dSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 9490*a67afe4dSAndroid Build Coastguard Worker echo "*** shared version of the library, which I believe you do not have" 9491*a67afe4dSAndroid Build Coastguard Worker echo "*** because a test_compile did reveal that the linker did not use it for" 9492*a67afe4dSAndroid Build Coastguard Worker echo "*** its dynamic dependency list that programs get resolved with at runtime." 9493*a67afe4dSAndroid Build Coastguard Worker fi 9494*a67afe4dSAndroid Build Coastguard Worker fi 9495*a67afe4dSAndroid Build Coastguard Worker ;; 9496*a67afe4dSAndroid Build Coastguard Worker *) 9497*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9498*a67afe4dSAndroid Build Coastguard Worker ;; 9499*a67afe4dSAndroid Build Coastguard Worker esac 9500*a67afe4dSAndroid Build Coastguard Worker done 9501*a67afe4dSAndroid Build Coastguard Worker else 9502*a67afe4dSAndroid Build Coastguard Worker # Error occurred in the first compile. Let's try to salvage 9503*a67afe4dSAndroid Build Coastguard Worker # the situation: Compile a separate program for each library. 9504*a67afe4dSAndroid Build Coastguard Worker for i in $deplibs; do 9505*a67afe4dSAndroid Build Coastguard Worker case $i in 9506*a67afe4dSAndroid Build Coastguard Worker -l*) 9507*a67afe4dSAndroid Build Coastguard Worker func_stripname -l '' "$i" 9508*a67afe4dSAndroid Build Coastguard Worker name=$func_stripname_result 9509*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM conftest 9510*a67afe4dSAndroid Build Coastguard Worker if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9511*a67afe4dSAndroid Build Coastguard Worker ldd_output=`ldd conftest` 9512*a67afe4dSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9513*a67afe4dSAndroid Build Coastguard Worker case " $predeps $postdeps " in 9514*a67afe4dSAndroid Build Coastguard Worker *" $i "*) 9515*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9516*a67afe4dSAndroid Build Coastguard Worker i= 9517*a67afe4dSAndroid Build Coastguard Worker ;; 9518*a67afe4dSAndroid Build Coastguard Worker esac 9519*a67afe4dSAndroid Build Coastguard Worker fi 9520*a67afe4dSAndroid Build Coastguard Worker if test -n "$i"; then 9521*a67afe4dSAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 9522*a67afe4dSAndroid Build Coastguard Worker deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9523*a67afe4dSAndroid Build Coastguard Worker set dummy $deplib_matches; shift 9524*a67afe4dSAndroid Build Coastguard Worker deplib_match=$1 9525*a67afe4dSAndroid Build Coastguard Worker if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9526*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9527*a67afe4dSAndroid Build Coastguard Worker else 9528*a67afe4dSAndroid Build Coastguard Worker droppeddeps=yes 9529*a67afe4dSAndroid Build Coastguard Worker echo 9530*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9531*a67afe4dSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 9532*a67afe4dSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 9533*a67afe4dSAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 9534*a67afe4dSAndroid Build Coastguard Worker echo "*** because a test_compile did reveal that the linker did not use this one" 9535*a67afe4dSAndroid Build Coastguard Worker echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9536*a67afe4dSAndroid Build Coastguard Worker fi 9537*a67afe4dSAndroid Build Coastguard Worker fi 9538*a67afe4dSAndroid Build Coastguard Worker else 9539*a67afe4dSAndroid Build Coastguard Worker droppeddeps=yes 9540*a67afe4dSAndroid Build Coastguard Worker echo 9541*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9542*a67afe4dSAndroid Build Coastguard Worker echo "*** make it link in! You will probably need to install it or some" 9543*a67afe4dSAndroid Build Coastguard Worker echo "*** library that it depends on before this library will be fully" 9544*a67afe4dSAndroid Build Coastguard Worker echo "*** functional. Installing it before continuing would be even better." 9545*a67afe4dSAndroid Build Coastguard Worker fi 9546*a67afe4dSAndroid Build Coastguard Worker ;; 9547*a67afe4dSAndroid Build Coastguard Worker *) 9548*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9549*a67afe4dSAndroid Build Coastguard Worker ;; 9550*a67afe4dSAndroid Build Coastguard Worker esac 9551*a67afe4dSAndroid Build Coastguard Worker done 9552*a67afe4dSAndroid Build Coastguard Worker fi 9553*a67afe4dSAndroid Build Coastguard Worker ;; 9554*a67afe4dSAndroid Build Coastguard Worker file_magic*) 9555*a67afe4dSAndroid Build Coastguard Worker set dummy $deplibs_check_method; shift 9556*a67afe4dSAndroid Build Coastguard Worker file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9557*a67afe4dSAndroid Build Coastguard Worker for a_deplib in $deplibs; do 9558*a67afe4dSAndroid Build Coastguard Worker case $a_deplib in 9559*a67afe4dSAndroid Build Coastguard Worker -l*) 9560*a67afe4dSAndroid Build Coastguard Worker func_stripname -l '' "$a_deplib" 9561*a67afe4dSAndroid Build Coastguard Worker name=$func_stripname_result 9562*a67afe4dSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9563*a67afe4dSAndroid Build Coastguard Worker case " $predeps $postdeps " in 9564*a67afe4dSAndroid Build Coastguard Worker *" $a_deplib "*) 9565*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9566*a67afe4dSAndroid Build Coastguard Worker a_deplib= 9567*a67afe4dSAndroid Build Coastguard Worker ;; 9568*a67afe4dSAndroid Build Coastguard Worker esac 9569*a67afe4dSAndroid Build Coastguard Worker fi 9570*a67afe4dSAndroid Build Coastguard Worker if test -n "$a_deplib"; then 9571*a67afe4dSAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 9572*a67afe4dSAndroid Build Coastguard Worker if test -n "$file_magic_glob"; then 9573*a67afe4dSAndroid Build Coastguard Worker libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9574*a67afe4dSAndroid Build Coastguard Worker else 9575*a67afe4dSAndroid Build Coastguard Worker libnameglob=$libname 9576*a67afe4dSAndroid Build Coastguard Worker fi 9577*a67afe4dSAndroid Build Coastguard Worker test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9578*a67afe4dSAndroid Build Coastguard Worker for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9579*a67afe4dSAndroid Build Coastguard Worker if test yes = "$want_nocaseglob"; then 9580*a67afe4dSAndroid Build Coastguard Worker shopt -s nocaseglob 9581*a67afe4dSAndroid Build Coastguard Worker potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9582*a67afe4dSAndroid Build Coastguard Worker $nocaseglob 9583*a67afe4dSAndroid Build Coastguard Worker else 9584*a67afe4dSAndroid Build Coastguard Worker potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9585*a67afe4dSAndroid Build Coastguard Worker fi 9586*a67afe4dSAndroid Build Coastguard Worker for potent_lib in $potential_libs; do 9587*a67afe4dSAndroid Build Coastguard Worker # Follow soft links. 9588*a67afe4dSAndroid Build Coastguard Worker if ls -lLd "$potent_lib" 2>/dev/null | 9589*a67afe4dSAndroid Build Coastguard Worker $GREP " -> " >/dev/null; then 9590*a67afe4dSAndroid Build Coastguard Worker continue 9591*a67afe4dSAndroid Build Coastguard Worker fi 9592*a67afe4dSAndroid Build Coastguard Worker # The statement above tries to avoid entering an 9593*a67afe4dSAndroid Build Coastguard Worker # endless loop below, in case of cyclic links. 9594*a67afe4dSAndroid Build Coastguard Worker # We might still enter an endless loop, since a link 9595*a67afe4dSAndroid Build Coastguard Worker # loop can be closed while we follow links, 9596*a67afe4dSAndroid Build Coastguard Worker # but so what? 9597*a67afe4dSAndroid Build Coastguard Worker potlib=$potent_lib 9598*a67afe4dSAndroid Build Coastguard Worker while test -h "$potlib" 2>/dev/null; do 9599*a67afe4dSAndroid Build Coastguard Worker potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9600*a67afe4dSAndroid Build Coastguard Worker case $potliblink in 9601*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 9602*a67afe4dSAndroid Build Coastguard Worker *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9603*a67afe4dSAndroid Build Coastguard Worker esac 9604*a67afe4dSAndroid Build Coastguard Worker done 9605*a67afe4dSAndroid Build Coastguard Worker if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9606*a67afe4dSAndroid Build Coastguard Worker $SED -e 10q | 9607*a67afe4dSAndroid Build Coastguard Worker $EGREP "$file_magic_regex" > /dev/null; then 9608*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9609*a67afe4dSAndroid Build Coastguard Worker a_deplib= 9610*a67afe4dSAndroid Build Coastguard Worker break 2 9611*a67afe4dSAndroid Build Coastguard Worker fi 9612*a67afe4dSAndroid Build Coastguard Worker done 9613*a67afe4dSAndroid Build Coastguard Worker done 9614*a67afe4dSAndroid Build Coastguard Worker fi 9615*a67afe4dSAndroid Build Coastguard Worker if test -n "$a_deplib"; then 9616*a67afe4dSAndroid Build Coastguard Worker droppeddeps=yes 9617*a67afe4dSAndroid Build Coastguard Worker echo 9618*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9619*a67afe4dSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 9620*a67afe4dSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 9621*a67afe4dSAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 9622*a67afe4dSAndroid Build Coastguard Worker echo "*** because I did check the linker path looking for a file starting" 9623*a67afe4dSAndroid Build Coastguard Worker if test -z "$potlib"; then 9624*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9625*a67afe4dSAndroid Build Coastguard Worker else 9626*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** with $libname and none of the candidates passed a file format test" 9627*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** using a file magic. Last file checked: $potlib" 9628*a67afe4dSAndroid Build Coastguard Worker fi 9629*a67afe4dSAndroid Build Coastguard Worker fi 9630*a67afe4dSAndroid Build Coastguard Worker ;; 9631*a67afe4dSAndroid Build Coastguard Worker *) 9632*a67afe4dSAndroid Build Coastguard Worker # Add a -L argument. 9633*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9634*a67afe4dSAndroid Build Coastguard Worker ;; 9635*a67afe4dSAndroid Build Coastguard Worker esac 9636*a67afe4dSAndroid Build Coastguard Worker done # Gone through all deplibs. 9637*a67afe4dSAndroid Build Coastguard Worker ;; 9638*a67afe4dSAndroid Build Coastguard Worker match_pattern*) 9639*a67afe4dSAndroid Build Coastguard Worker set dummy $deplibs_check_method; shift 9640*a67afe4dSAndroid Build Coastguard Worker match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9641*a67afe4dSAndroid Build Coastguard Worker for a_deplib in $deplibs; do 9642*a67afe4dSAndroid Build Coastguard Worker case $a_deplib in 9643*a67afe4dSAndroid Build Coastguard Worker -l*) 9644*a67afe4dSAndroid Build Coastguard Worker func_stripname -l '' "$a_deplib" 9645*a67afe4dSAndroid Build Coastguard Worker name=$func_stripname_result 9646*a67afe4dSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9647*a67afe4dSAndroid Build Coastguard Worker case " $predeps $postdeps " in 9648*a67afe4dSAndroid Build Coastguard Worker *" $a_deplib "*) 9649*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9650*a67afe4dSAndroid Build Coastguard Worker a_deplib= 9651*a67afe4dSAndroid Build Coastguard Worker ;; 9652*a67afe4dSAndroid Build Coastguard Worker esac 9653*a67afe4dSAndroid Build Coastguard Worker fi 9654*a67afe4dSAndroid Build Coastguard Worker if test -n "$a_deplib"; then 9655*a67afe4dSAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 9656*a67afe4dSAndroid Build Coastguard Worker for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9657*a67afe4dSAndroid Build Coastguard Worker potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9658*a67afe4dSAndroid Build Coastguard Worker for potent_lib in $potential_libs; do 9659*a67afe4dSAndroid Build Coastguard Worker potlib=$potent_lib # see symlink-check above in file_magic test 9660*a67afe4dSAndroid Build Coastguard Worker if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9661*a67afe4dSAndroid Build Coastguard Worker $EGREP "$match_pattern_regex" > /dev/null; then 9662*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9663*a67afe4dSAndroid Build Coastguard Worker a_deplib= 9664*a67afe4dSAndroid Build Coastguard Worker break 2 9665*a67afe4dSAndroid Build Coastguard Worker fi 9666*a67afe4dSAndroid Build Coastguard Worker done 9667*a67afe4dSAndroid Build Coastguard Worker done 9668*a67afe4dSAndroid Build Coastguard Worker fi 9669*a67afe4dSAndroid Build Coastguard Worker if test -n "$a_deplib"; then 9670*a67afe4dSAndroid Build Coastguard Worker droppeddeps=yes 9671*a67afe4dSAndroid Build Coastguard Worker echo 9672*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9673*a67afe4dSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 9674*a67afe4dSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 9675*a67afe4dSAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 9676*a67afe4dSAndroid Build Coastguard Worker echo "*** because I did check the linker path looking for a file starting" 9677*a67afe4dSAndroid Build Coastguard Worker if test -z "$potlib"; then 9678*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9679*a67afe4dSAndroid Build Coastguard Worker else 9680*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** with $libname and none of the candidates passed a file format test" 9681*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** using a regex pattern. Last file checked: $potlib" 9682*a67afe4dSAndroid Build Coastguard Worker fi 9683*a67afe4dSAndroid Build Coastguard Worker fi 9684*a67afe4dSAndroid Build Coastguard Worker ;; 9685*a67afe4dSAndroid Build Coastguard Worker *) 9686*a67afe4dSAndroid Build Coastguard Worker # Add a -L argument. 9687*a67afe4dSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9688*a67afe4dSAndroid Build Coastguard Worker ;; 9689*a67afe4dSAndroid Build Coastguard Worker esac 9690*a67afe4dSAndroid Build Coastguard Worker done # Gone through all deplibs. 9691*a67afe4dSAndroid Build Coastguard Worker ;; 9692*a67afe4dSAndroid Build Coastguard Worker none | unknown | *) 9693*a67afe4dSAndroid Build Coastguard Worker newdeplibs= 9694*a67afe4dSAndroid Build Coastguard Worker tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 9695*a67afe4dSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9696*a67afe4dSAndroid Build Coastguard Worker for i in $predeps $postdeps; do 9697*a67afe4dSAndroid Build Coastguard Worker # can't use Xsed below, because $i might contain '/' 9698*a67afe4dSAndroid Build Coastguard Worker tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9699*a67afe4dSAndroid Build Coastguard Worker done 9700*a67afe4dSAndroid Build Coastguard Worker fi 9701*a67afe4dSAndroid Build Coastguard Worker case $tmp_deplibs in 9702*a67afe4dSAndroid Build Coastguard Worker *[!\ \ ]*) 9703*a67afe4dSAndroid Build Coastguard Worker echo 9704*a67afe4dSAndroid Build Coastguard Worker if test none = "$deplibs_check_method"; then 9705*a67afe4dSAndroid Build Coastguard Worker echo "*** Warning: inter-library dependencies are not supported in this platform." 9706*a67afe4dSAndroid Build Coastguard Worker else 9707*a67afe4dSAndroid Build Coastguard Worker echo "*** Warning: inter-library dependencies are not known to be supported." 9708*a67afe4dSAndroid Build Coastguard Worker fi 9709*a67afe4dSAndroid Build Coastguard Worker echo "*** All declared inter-library dependencies are being dropped." 9710*a67afe4dSAndroid Build Coastguard Worker droppeddeps=yes 9711*a67afe4dSAndroid Build Coastguard Worker ;; 9712*a67afe4dSAndroid Build Coastguard Worker esac 9713*a67afe4dSAndroid Build Coastguard Worker ;; 9714*a67afe4dSAndroid Build Coastguard Worker esac 9715*a67afe4dSAndroid Build Coastguard Worker versuffix=$versuffix_save 9716*a67afe4dSAndroid Build Coastguard Worker major=$major_save 9717*a67afe4dSAndroid Build Coastguard Worker release=$release_save 9718*a67afe4dSAndroid Build Coastguard Worker libname=$libname_save 9719*a67afe4dSAndroid Build Coastguard Worker name=$name_save 9720*a67afe4dSAndroid Build Coastguard Worker 9721*a67afe4dSAndroid Build Coastguard Worker case $host in 9722*a67afe4dSAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 9723*a67afe4dSAndroid Build Coastguard Worker # On Rhapsody replace the C library with the System framework 9724*a67afe4dSAndroid Build Coastguard Worker newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9725*a67afe4dSAndroid Build Coastguard Worker ;; 9726*a67afe4dSAndroid Build Coastguard Worker esac 9727*a67afe4dSAndroid Build Coastguard Worker 9728*a67afe4dSAndroid Build Coastguard Worker if test yes = "$droppeddeps"; then 9729*a67afe4dSAndroid Build Coastguard Worker if test yes = "$module"; then 9730*a67afe4dSAndroid Build Coastguard Worker echo 9731*a67afe4dSAndroid Build Coastguard Worker echo "*** Warning: libtool could not satisfy all declared inter-library" 9732*a67afe4dSAndroid Build Coastguard Worker $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9733*a67afe4dSAndroid Build Coastguard Worker echo "*** a static module, that should work as long as the dlopening" 9734*a67afe4dSAndroid Build Coastguard Worker echo "*** application is linked with the -dlopen flag." 9735*a67afe4dSAndroid Build Coastguard Worker if test -z "$global_symbol_pipe"; then 9736*a67afe4dSAndroid Build Coastguard Worker echo 9737*a67afe4dSAndroid Build Coastguard Worker echo "*** However, this would only work if libtool was able to extract symbol" 9738*a67afe4dSAndroid Build Coastguard Worker echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9739*a67afe4dSAndroid Build Coastguard Worker echo "*** not find such a program. So, this module is probably useless." 9740*a67afe4dSAndroid Build Coastguard Worker echo "*** 'nm' from GNU binutils and a full rebuild may help." 9741*a67afe4dSAndroid Build Coastguard Worker fi 9742*a67afe4dSAndroid Build Coastguard Worker if test no = "$build_old_libs"; then 9743*a67afe4dSAndroid Build Coastguard Worker oldlibs=$output_objdir/$libname.$libext 9744*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=module 9745*a67afe4dSAndroid Build Coastguard Worker build_old_libs=yes 9746*a67afe4dSAndroid Build Coastguard Worker else 9747*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=no 9748*a67afe4dSAndroid Build Coastguard Worker fi 9749*a67afe4dSAndroid Build Coastguard Worker else 9750*a67afe4dSAndroid Build Coastguard Worker echo "*** The inter-library dependencies that have been dropped here will be" 9751*a67afe4dSAndroid Build Coastguard Worker echo "*** automatically added whenever a program is linked with this library" 9752*a67afe4dSAndroid Build Coastguard Worker echo "*** or is declared to -dlopen it." 9753*a67afe4dSAndroid Build Coastguard Worker 9754*a67afe4dSAndroid Build Coastguard Worker if test no = "$allow_undefined"; then 9755*a67afe4dSAndroid Build Coastguard Worker echo 9756*a67afe4dSAndroid Build Coastguard Worker echo "*** Since this library must not contain undefined symbols," 9757*a67afe4dSAndroid Build Coastguard Worker echo "*** because either the platform does not support them or" 9758*a67afe4dSAndroid Build Coastguard Worker echo "*** it was explicitly requested with -no-undefined," 9759*a67afe4dSAndroid Build Coastguard Worker echo "*** libtool will only create a static version of it." 9760*a67afe4dSAndroid Build Coastguard Worker if test no = "$build_old_libs"; then 9761*a67afe4dSAndroid Build Coastguard Worker oldlibs=$output_objdir/$libname.$libext 9762*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=module 9763*a67afe4dSAndroid Build Coastguard Worker build_old_libs=yes 9764*a67afe4dSAndroid Build Coastguard Worker else 9765*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=no 9766*a67afe4dSAndroid Build Coastguard Worker fi 9767*a67afe4dSAndroid Build Coastguard Worker fi 9768*a67afe4dSAndroid Build Coastguard Worker fi 9769*a67afe4dSAndroid Build Coastguard Worker fi 9770*a67afe4dSAndroid Build Coastguard Worker # Done checking deplibs! 9771*a67afe4dSAndroid Build Coastguard Worker deplibs=$newdeplibs 9772*a67afe4dSAndroid Build Coastguard Worker fi 9773*a67afe4dSAndroid Build Coastguard Worker # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9774*a67afe4dSAndroid Build Coastguard Worker case $host in 9775*a67afe4dSAndroid Build Coastguard Worker *-*-darwin*) 9776*a67afe4dSAndroid Build Coastguard Worker newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9777*a67afe4dSAndroid Build Coastguard Worker new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9778*a67afe4dSAndroid Build Coastguard Worker deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9779*a67afe4dSAndroid Build Coastguard Worker ;; 9780*a67afe4dSAndroid Build Coastguard Worker esac 9781*a67afe4dSAndroid Build Coastguard Worker 9782*a67afe4dSAndroid Build Coastguard Worker # move library search paths that coincide with paths to not yet 9783*a67afe4dSAndroid Build Coastguard Worker # installed libraries to the beginning of the library search list 9784*a67afe4dSAndroid Build Coastguard Worker new_libs= 9785*a67afe4dSAndroid Build Coastguard Worker for path in $notinst_path; do 9786*a67afe4dSAndroid Build Coastguard Worker case " $new_libs " in 9787*a67afe4dSAndroid Build Coastguard Worker *" -L$path/$objdir "*) ;; 9788*a67afe4dSAndroid Build Coastguard Worker *) 9789*a67afe4dSAndroid Build Coastguard Worker case " $deplibs " in 9790*a67afe4dSAndroid Build Coastguard Worker *" -L$path/$objdir "*) 9791*a67afe4dSAndroid Build Coastguard Worker func_append new_libs " -L$path/$objdir" ;; 9792*a67afe4dSAndroid Build Coastguard Worker esac 9793*a67afe4dSAndroid Build Coastguard Worker ;; 9794*a67afe4dSAndroid Build Coastguard Worker esac 9795*a67afe4dSAndroid Build Coastguard Worker done 9796*a67afe4dSAndroid Build Coastguard Worker for deplib in $deplibs; do 9797*a67afe4dSAndroid Build Coastguard Worker case $deplib in 9798*a67afe4dSAndroid Build Coastguard Worker -L*) 9799*a67afe4dSAndroid Build Coastguard Worker case " $new_libs " in 9800*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) ;; 9801*a67afe4dSAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 9802*a67afe4dSAndroid Build Coastguard Worker esac 9803*a67afe4dSAndroid Build Coastguard Worker ;; 9804*a67afe4dSAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 9805*a67afe4dSAndroid Build Coastguard Worker esac 9806*a67afe4dSAndroid Build Coastguard Worker done 9807*a67afe4dSAndroid Build Coastguard Worker deplibs=$new_libs 9808*a67afe4dSAndroid Build Coastguard Worker 9809*a67afe4dSAndroid Build Coastguard Worker # All the library-specific variables (install_libdir is set above). 9810*a67afe4dSAndroid Build Coastguard Worker library_names= 9811*a67afe4dSAndroid Build Coastguard Worker old_library= 9812*a67afe4dSAndroid Build Coastguard Worker dlname= 9813*a67afe4dSAndroid Build Coastguard Worker 9814*a67afe4dSAndroid Build Coastguard Worker # Test again, we may have decided not to build it any more 9815*a67afe4dSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 9816*a67afe4dSAndroid Build Coastguard Worker # Remove $wl instances when linking with ld. 9817*a67afe4dSAndroid Build Coastguard Worker # FIXME: should test the right _cmds variable. 9818*a67afe4dSAndroid Build Coastguard Worker case $archive_cmds in 9819*a67afe4dSAndroid Build Coastguard Worker *\$LD\ *) wl= ;; 9820*a67afe4dSAndroid Build Coastguard Worker esac 9821*a67afe4dSAndroid Build Coastguard Worker if test yes = "$hardcode_into_libs"; then 9822*a67afe4dSAndroid Build Coastguard Worker # Hardcode the library paths 9823*a67afe4dSAndroid Build Coastguard Worker hardcode_libdirs= 9824*a67afe4dSAndroid Build Coastguard Worker dep_rpath= 9825*a67afe4dSAndroid Build Coastguard Worker rpath=$finalize_rpath 9826*a67afe4dSAndroid Build Coastguard Worker test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9827*a67afe4dSAndroid Build Coastguard Worker for libdir in $rpath; do 9828*a67afe4dSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 9829*a67afe4dSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator"; then 9830*a67afe4dSAndroid Build Coastguard Worker func_replace_sysroot "$libdir" 9831*a67afe4dSAndroid Build Coastguard Worker libdir=$func_replace_sysroot_result 9832*a67afe4dSAndroid Build Coastguard Worker if test -z "$hardcode_libdirs"; then 9833*a67afe4dSAndroid Build Coastguard Worker hardcode_libdirs=$libdir 9834*a67afe4dSAndroid Build Coastguard Worker else 9835*a67afe4dSAndroid Build Coastguard Worker # Just accumulate the unique libdirs. 9836*a67afe4dSAndroid Build Coastguard Worker case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9837*a67afe4dSAndroid Build Coastguard Worker *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9838*a67afe4dSAndroid Build Coastguard Worker ;; 9839*a67afe4dSAndroid Build Coastguard Worker *) 9840*a67afe4dSAndroid Build Coastguard Worker func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9841*a67afe4dSAndroid Build Coastguard Worker ;; 9842*a67afe4dSAndroid Build Coastguard Worker esac 9843*a67afe4dSAndroid Build Coastguard Worker fi 9844*a67afe4dSAndroid Build Coastguard Worker else 9845*a67afe4dSAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 9846*a67afe4dSAndroid Build Coastguard Worker func_append dep_rpath " $flag" 9847*a67afe4dSAndroid Build Coastguard Worker fi 9848*a67afe4dSAndroid Build Coastguard Worker elif test -n "$runpath_var"; then 9849*a67afe4dSAndroid Build Coastguard Worker case "$perm_rpath " in 9850*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 9851*a67afe4dSAndroid Build Coastguard Worker *) func_append perm_rpath " $libdir" ;; 9852*a67afe4dSAndroid Build Coastguard Worker esac 9853*a67afe4dSAndroid Build Coastguard Worker fi 9854*a67afe4dSAndroid Build Coastguard Worker done 9855*a67afe4dSAndroid Build Coastguard Worker # Substitute the hardcoded libdirs into the rpath. 9856*a67afe4dSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator" && 9857*a67afe4dSAndroid Build Coastguard Worker test -n "$hardcode_libdirs"; then 9858*a67afe4dSAndroid Build Coastguard Worker libdir=$hardcode_libdirs 9859*a67afe4dSAndroid Build Coastguard Worker eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9860*a67afe4dSAndroid Build Coastguard Worker fi 9861*a67afe4dSAndroid Build Coastguard Worker if test -n "$runpath_var" && test -n "$perm_rpath"; then 9862*a67afe4dSAndroid Build Coastguard Worker # We should set the runpath_var. 9863*a67afe4dSAndroid Build Coastguard Worker rpath= 9864*a67afe4dSAndroid Build Coastguard Worker for dir in $perm_rpath; do 9865*a67afe4dSAndroid Build Coastguard Worker func_append rpath "$dir:" 9866*a67afe4dSAndroid Build Coastguard Worker done 9867*a67afe4dSAndroid Build Coastguard Worker eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9868*a67afe4dSAndroid Build Coastguard Worker fi 9869*a67afe4dSAndroid Build Coastguard Worker test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9870*a67afe4dSAndroid Build Coastguard Worker fi 9871*a67afe4dSAndroid Build Coastguard Worker 9872*a67afe4dSAndroid Build Coastguard Worker shlibpath=$finalize_shlibpath 9873*a67afe4dSAndroid Build Coastguard Worker test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9874*a67afe4dSAndroid Build Coastguard Worker if test -n "$shlibpath"; then 9875*a67afe4dSAndroid Build Coastguard Worker eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9876*a67afe4dSAndroid Build Coastguard Worker fi 9877*a67afe4dSAndroid Build Coastguard Worker 9878*a67afe4dSAndroid Build Coastguard Worker # Get the real and link names of the library. 9879*a67afe4dSAndroid Build Coastguard Worker eval shared_ext=\"$shrext_cmds\" 9880*a67afe4dSAndroid Build Coastguard Worker eval library_names=\"$library_names_spec\" 9881*a67afe4dSAndroid Build Coastguard Worker set dummy $library_names 9882*a67afe4dSAndroid Build Coastguard Worker shift 9883*a67afe4dSAndroid Build Coastguard Worker realname=$1 9884*a67afe4dSAndroid Build Coastguard Worker shift 9885*a67afe4dSAndroid Build Coastguard Worker 9886*a67afe4dSAndroid Build Coastguard Worker if test -n "$soname_spec"; then 9887*a67afe4dSAndroid Build Coastguard Worker eval soname=\"$soname_spec\" 9888*a67afe4dSAndroid Build Coastguard Worker else 9889*a67afe4dSAndroid Build Coastguard Worker soname=$realname 9890*a67afe4dSAndroid Build Coastguard Worker fi 9891*a67afe4dSAndroid Build Coastguard Worker if test -z "$dlname"; then 9892*a67afe4dSAndroid Build Coastguard Worker dlname=$soname 9893*a67afe4dSAndroid Build Coastguard Worker fi 9894*a67afe4dSAndroid Build Coastguard Worker 9895*a67afe4dSAndroid Build Coastguard Worker lib=$output_objdir/$realname 9896*a67afe4dSAndroid Build Coastguard Worker linknames= 9897*a67afe4dSAndroid Build Coastguard Worker for link 9898*a67afe4dSAndroid Build Coastguard Worker do 9899*a67afe4dSAndroid Build Coastguard Worker func_append linknames " $link" 9900*a67afe4dSAndroid Build Coastguard Worker done 9901*a67afe4dSAndroid Build Coastguard Worker 9902*a67afe4dSAndroid Build Coastguard Worker # Use standard objects if they are pic 9903*a67afe4dSAndroid Build Coastguard Worker test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9904*a67afe4dSAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 9905*a67afe4dSAndroid Build Coastguard Worker 9906*a67afe4dSAndroid Build Coastguard Worker delfiles= 9907*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$include_expsyms"; then 9908*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 9909*a67afe4dSAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.uexp 9910*a67afe4dSAndroid Build Coastguard Worker func_append delfiles " $export_symbols" 9911*a67afe4dSAndroid Build Coastguard Worker fi 9912*a67afe4dSAndroid Build Coastguard Worker 9913*a67afe4dSAndroid Build Coastguard Worker orig_export_symbols= 9914*a67afe4dSAndroid Build Coastguard Worker case $host_os in 9915*a67afe4dSAndroid Build Coastguard Worker cygwin* | mingw* | cegcc*) 9916*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9917*a67afe4dSAndroid Build Coastguard Worker # exporting using user supplied symfile 9918*a67afe4dSAndroid Build Coastguard Worker func_dll_def_p "$export_symbols" || { 9919*a67afe4dSAndroid Build Coastguard Worker # and it's NOT already a .def file. Must figure out 9920*a67afe4dSAndroid Build Coastguard Worker # which of the given symbols are data symbols and tag 9921*a67afe4dSAndroid Build Coastguard Worker # them as such. So, trigger use of export_symbols_cmds. 9922*a67afe4dSAndroid Build Coastguard Worker # export_symbols gets reassigned inside the "prepare 9923*a67afe4dSAndroid Build Coastguard Worker # the list of exported symbols" if statement, so the 9924*a67afe4dSAndroid Build Coastguard Worker # include_expsyms logic still works. 9925*a67afe4dSAndroid Build Coastguard Worker orig_export_symbols=$export_symbols 9926*a67afe4dSAndroid Build Coastguard Worker export_symbols= 9927*a67afe4dSAndroid Build Coastguard Worker always_export_symbols=yes 9928*a67afe4dSAndroid Build Coastguard Worker } 9929*a67afe4dSAndroid Build Coastguard Worker fi 9930*a67afe4dSAndroid Build Coastguard Worker ;; 9931*a67afe4dSAndroid Build Coastguard Worker esac 9932*a67afe4dSAndroid Build Coastguard Worker 9933*a67afe4dSAndroid Build Coastguard Worker # Prepare the list of exported symbols 9934*a67afe4dSAndroid Build Coastguard Worker if test -z "$export_symbols"; then 9935*a67afe4dSAndroid Build Coastguard Worker if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 9936*a67afe4dSAndroid Build Coastguard Worker func_verbose "generating symbol list for '$libname.la'" 9937*a67afe4dSAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.exp 9938*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM $export_symbols 9939*a67afe4dSAndroid Build Coastguard Worker cmds=$export_symbols_cmds 9940*a67afe4dSAndroid Build Coastguard Worker save_ifs=$IFS; IFS='~' 9941*a67afe4dSAndroid Build Coastguard Worker for cmd1 in $cmds; do 9942*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 9943*a67afe4dSAndroid Build Coastguard Worker # Take the normal branch if the nm_file_list_spec branch 9944*a67afe4dSAndroid Build Coastguard Worker # doesn't work or if tool conversion is not needed. 9945*a67afe4dSAndroid Build Coastguard Worker case $nm_file_list_spec~$to_tool_file_cmd in 9946*a67afe4dSAndroid Build Coastguard Worker *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9947*a67afe4dSAndroid Build Coastguard Worker try_normal_branch=yes 9948*a67afe4dSAndroid Build Coastguard Worker eval cmd=\"$cmd1\" 9949*a67afe4dSAndroid Build Coastguard Worker func_len " $cmd" 9950*a67afe4dSAndroid Build Coastguard Worker len=$func_len_result 9951*a67afe4dSAndroid Build Coastguard Worker ;; 9952*a67afe4dSAndroid Build Coastguard Worker *) 9953*a67afe4dSAndroid Build Coastguard Worker try_normal_branch=no 9954*a67afe4dSAndroid Build Coastguard Worker ;; 9955*a67afe4dSAndroid Build Coastguard Worker esac 9956*a67afe4dSAndroid Build Coastguard Worker if test yes = "$try_normal_branch" \ 9957*a67afe4dSAndroid Build Coastguard Worker && { test "$len" -lt "$max_cmd_len" \ 9958*a67afe4dSAndroid Build Coastguard Worker || test "$max_cmd_len" -le -1; } 9959*a67afe4dSAndroid Build Coastguard Worker then 9960*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$cmd" 'exit $?' 9961*a67afe4dSAndroid Build Coastguard Worker skipped_export=false 9962*a67afe4dSAndroid Build Coastguard Worker elif test -n "$nm_file_list_spec"; then 9963*a67afe4dSAndroid Build Coastguard Worker func_basename "$output" 9964*a67afe4dSAndroid Build Coastguard Worker output_la=$func_basename_result 9965*a67afe4dSAndroid Build Coastguard Worker save_libobjs=$libobjs 9966*a67afe4dSAndroid Build Coastguard Worker save_output=$output 9967*a67afe4dSAndroid Build Coastguard Worker output=$output_objdir/$output_la.nm 9968*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$output" 9969*a67afe4dSAndroid Build Coastguard Worker libobjs=$nm_file_list_spec$func_to_tool_file_result 9970*a67afe4dSAndroid Build Coastguard Worker func_append delfiles " $output" 9971*a67afe4dSAndroid Build Coastguard Worker func_verbose "creating $NM input file list: $output" 9972*a67afe4dSAndroid Build Coastguard Worker for obj in $save_libobjs; do 9973*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$obj" 9974*a67afe4dSAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" 9975*a67afe4dSAndroid Build Coastguard Worker done > "$output" 9976*a67afe4dSAndroid Build Coastguard Worker eval cmd=\"$cmd1\" 9977*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$cmd" 'exit $?' 9978*a67afe4dSAndroid Build Coastguard Worker output=$save_output 9979*a67afe4dSAndroid Build Coastguard Worker libobjs=$save_libobjs 9980*a67afe4dSAndroid Build Coastguard Worker skipped_export=false 9981*a67afe4dSAndroid Build Coastguard Worker else 9982*a67afe4dSAndroid Build Coastguard Worker # The command line is too long to execute in one step. 9983*a67afe4dSAndroid Build Coastguard Worker func_verbose "using reloadable object file for export list..." 9984*a67afe4dSAndroid Build Coastguard Worker skipped_export=: 9985*a67afe4dSAndroid Build Coastguard Worker # Break out early, otherwise skipped_export may be 9986*a67afe4dSAndroid Build Coastguard Worker # set to false by a later but shorter cmd. 9987*a67afe4dSAndroid Build Coastguard Worker break 9988*a67afe4dSAndroid Build Coastguard Worker fi 9989*a67afe4dSAndroid Build Coastguard Worker done 9990*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 9991*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9992*a67afe4dSAndroid Build Coastguard Worker func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9993*a67afe4dSAndroid Build Coastguard Worker func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9994*a67afe4dSAndroid Build Coastguard Worker fi 9995*a67afe4dSAndroid Build Coastguard Worker fi 9996*a67afe4dSAndroid Build Coastguard Worker fi 9997*a67afe4dSAndroid Build Coastguard Worker 9998*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$include_expsyms"; then 9999*a67afe4dSAndroid Build Coastguard Worker tmp_export_symbols=$export_symbols 10000*a67afe4dSAndroid Build Coastguard Worker test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10001*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10002*a67afe4dSAndroid Build Coastguard Worker fi 10003*a67afe4dSAndroid Build Coastguard Worker 10004*a67afe4dSAndroid Build Coastguard Worker if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 10005*a67afe4dSAndroid Build Coastguard Worker # The given exports_symbols file has to be filtered, so filter it. 10006*a67afe4dSAndroid Build Coastguard Worker func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10007*a67afe4dSAndroid Build Coastguard Worker # FIXME: $output_objdir/$libname.filter potentially contains lots of 10008*a67afe4dSAndroid Build Coastguard Worker # 's' commands, which not all seds can handle. GNU sed should be fine 10009*a67afe4dSAndroid Build Coastguard Worker # though. Also, the filter scales superlinearly with the number of 10010*a67afe4dSAndroid Build Coastguard Worker # global variables. join(1) would be nice here, but unfortunately 10011*a67afe4dSAndroid Build Coastguard Worker # isn't a blessed tool. 10012*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10013*a67afe4dSAndroid Build Coastguard Worker func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10014*a67afe4dSAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.def 10015*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10016*a67afe4dSAndroid Build Coastguard Worker fi 10017*a67afe4dSAndroid Build Coastguard Worker 10018*a67afe4dSAndroid Build Coastguard Worker tmp_deplibs= 10019*a67afe4dSAndroid Build Coastguard Worker for test_deplib in $deplibs; do 10020*a67afe4dSAndroid Build Coastguard Worker case " $convenience " in 10021*a67afe4dSAndroid Build Coastguard Worker *" $test_deplib "*) ;; 10022*a67afe4dSAndroid Build Coastguard Worker *) 10023*a67afe4dSAndroid Build Coastguard Worker func_append tmp_deplibs " $test_deplib" 10024*a67afe4dSAndroid Build Coastguard Worker ;; 10025*a67afe4dSAndroid Build Coastguard Worker esac 10026*a67afe4dSAndroid Build Coastguard Worker done 10027*a67afe4dSAndroid Build Coastguard Worker deplibs=$tmp_deplibs 10028*a67afe4dSAndroid Build Coastguard Worker 10029*a67afe4dSAndroid Build Coastguard Worker if test -n "$convenience"; then 10030*a67afe4dSAndroid Build Coastguard Worker if test -n "$whole_archive_flag_spec" && 10031*a67afe4dSAndroid Build Coastguard Worker test yes = "$compiler_needs_object" && 10032*a67afe4dSAndroid Build Coastguard Worker test -z "$libobjs"; then 10033*a67afe4dSAndroid Build Coastguard Worker # extract the archives, so we have objects to list. 10034*a67afe4dSAndroid Build Coastguard Worker # TODO: could optimize this to just extract one archive. 10035*a67afe4dSAndroid Build Coastguard Worker whole_archive_flag_spec= 10036*a67afe4dSAndroid Build Coastguard Worker fi 10037*a67afe4dSAndroid Build Coastguard Worker if test -n "$whole_archive_flag_spec"; then 10038*a67afe4dSAndroid Build Coastguard Worker save_libobjs=$libobjs 10039*a67afe4dSAndroid Build Coastguard Worker eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10040*a67afe4dSAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 10041*a67afe4dSAndroid Build Coastguard Worker else 10042*a67afe4dSAndroid Build Coastguard Worker gentop=$output_objdir/${outputname}x 10043*a67afe4dSAndroid Build Coastguard Worker func_append generated " $gentop" 10044*a67afe4dSAndroid Build Coastguard Worker 10045*a67afe4dSAndroid Build Coastguard Worker func_extract_archives $gentop $convenience 10046*a67afe4dSAndroid Build Coastguard Worker func_append libobjs " $func_extract_archives_result" 10047*a67afe4dSAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 10048*a67afe4dSAndroid Build Coastguard Worker fi 10049*a67afe4dSAndroid Build Coastguard Worker fi 10050*a67afe4dSAndroid Build Coastguard Worker 10051*a67afe4dSAndroid Build Coastguard Worker if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 10052*a67afe4dSAndroid Build Coastguard Worker eval flag=\"$thread_safe_flag_spec\" 10053*a67afe4dSAndroid Build Coastguard Worker func_append linker_flags " $flag" 10054*a67afe4dSAndroid Build Coastguard Worker fi 10055*a67afe4dSAndroid Build Coastguard Worker 10056*a67afe4dSAndroid Build Coastguard Worker # Make a backup of the uninstalled library when relinking 10057*a67afe4dSAndroid Build Coastguard Worker if test relink = "$opt_mode"; then 10058*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 10059*a67afe4dSAndroid Build Coastguard Worker fi 10060*a67afe4dSAndroid Build Coastguard Worker 10061*a67afe4dSAndroid Build Coastguard Worker # Do each of the archive commands. 10062*a67afe4dSAndroid Build Coastguard Worker if test yes = "$module" && test -n "$module_cmds"; then 10063*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10064*a67afe4dSAndroid Build Coastguard Worker eval test_cmds=\"$module_expsym_cmds\" 10065*a67afe4dSAndroid Build Coastguard Worker cmds=$module_expsym_cmds 10066*a67afe4dSAndroid Build Coastguard Worker else 10067*a67afe4dSAndroid Build Coastguard Worker eval test_cmds=\"$module_cmds\" 10068*a67afe4dSAndroid Build Coastguard Worker cmds=$module_cmds 10069*a67afe4dSAndroid Build Coastguard Worker fi 10070*a67afe4dSAndroid Build Coastguard Worker else 10071*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10072*a67afe4dSAndroid Build Coastguard Worker eval test_cmds=\"$archive_expsym_cmds\" 10073*a67afe4dSAndroid Build Coastguard Worker cmds=$archive_expsym_cmds 10074*a67afe4dSAndroid Build Coastguard Worker else 10075*a67afe4dSAndroid Build Coastguard Worker eval test_cmds=\"$archive_cmds\" 10076*a67afe4dSAndroid Build Coastguard Worker cmds=$archive_cmds 10077*a67afe4dSAndroid Build Coastguard Worker fi 10078*a67afe4dSAndroid Build Coastguard Worker fi 10079*a67afe4dSAndroid Build Coastguard Worker 10080*a67afe4dSAndroid Build Coastguard Worker if test : != "$skipped_export" && 10081*a67afe4dSAndroid Build Coastguard Worker func_len " $test_cmds" && 10082*a67afe4dSAndroid Build Coastguard Worker len=$func_len_result && 10083*a67afe4dSAndroid Build Coastguard Worker test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10084*a67afe4dSAndroid Build Coastguard Worker : 10085*a67afe4dSAndroid Build Coastguard Worker else 10086*a67afe4dSAndroid Build Coastguard Worker # The command line is too long to link in one step, link piecewise 10087*a67afe4dSAndroid Build Coastguard Worker # or, if using GNU ld and skipped_export is not :, use a linker 10088*a67afe4dSAndroid Build Coastguard Worker # script. 10089*a67afe4dSAndroid Build Coastguard Worker 10090*a67afe4dSAndroid Build Coastguard Worker # Save the value of $output and $libobjs because we want to 10091*a67afe4dSAndroid Build Coastguard Worker # use them later. If we have whole_archive_flag_spec, we 10092*a67afe4dSAndroid Build Coastguard Worker # want to use save_libobjs as it was before 10093*a67afe4dSAndroid Build Coastguard Worker # whole_archive_flag_spec was expanded, because we can't 10094*a67afe4dSAndroid Build Coastguard Worker # assume the linker understands whole_archive_flag_spec. 10095*a67afe4dSAndroid Build Coastguard Worker # This may have to be revisited, in case too many 10096*a67afe4dSAndroid Build Coastguard Worker # convenience libraries get linked in and end up exceeding 10097*a67afe4dSAndroid Build Coastguard Worker # the spec. 10098*a67afe4dSAndroid Build Coastguard Worker if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 10099*a67afe4dSAndroid Build Coastguard Worker save_libobjs=$libobjs 10100*a67afe4dSAndroid Build Coastguard Worker fi 10101*a67afe4dSAndroid Build Coastguard Worker save_output=$output 10102*a67afe4dSAndroid Build Coastguard Worker func_basename "$output" 10103*a67afe4dSAndroid Build Coastguard Worker output_la=$func_basename_result 10104*a67afe4dSAndroid Build Coastguard Worker 10105*a67afe4dSAndroid Build Coastguard Worker # Clear the reloadable object creation command queue and 10106*a67afe4dSAndroid Build Coastguard Worker # initialize k to one. 10107*a67afe4dSAndroid Build Coastguard Worker test_cmds= 10108*a67afe4dSAndroid Build Coastguard Worker concat_cmds= 10109*a67afe4dSAndroid Build Coastguard Worker objlist= 10110*a67afe4dSAndroid Build Coastguard Worker last_robj= 10111*a67afe4dSAndroid Build Coastguard Worker k=1 10112*a67afe4dSAndroid Build Coastguard Worker 10113*a67afe4dSAndroid Build Coastguard Worker if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 10114*a67afe4dSAndroid Build Coastguard Worker output=$output_objdir/$output_la.lnkscript 10115*a67afe4dSAndroid Build Coastguard Worker func_verbose "creating GNU ld script: $output" 10116*a67afe4dSAndroid Build Coastguard Worker echo 'INPUT (' > $output 10117*a67afe4dSAndroid Build Coastguard Worker for obj in $save_libobjs 10118*a67afe4dSAndroid Build Coastguard Worker do 10119*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$obj" 10120*a67afe4dSAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" >> $output 10121*a67afe4dSAndroid Build Coastguard Worker done 10122*a67afe4dSAndroid Build Coastguard Worker echo ')' >> $output 10123*a67afe4dSAndroid Build Coastguard Worker func_append delfiles " $output" 10124*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$output" 10125*a67afe4dSAndroid Build Coastguard Worker output=$func_to_tool_file_result 10126*a67afe4dSAndroid Build Coastguard Worker elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 10127*a67afe4dSAndroid Build Coastguard Worker output=$output_objdir/$output_la.lnk 10128*a67afe4dSAndroid Build Coastguard Worker func_verbose "creating linker input file list: $output" 10129*a67afe4dSAndroid Build Coastguard Worker : > $output 10130*a67afe4dSAndroid Build Coastguard Worker set x $save_libobjs 10131*a67afe4dSAndroid Build Coastguard Worker shift 10132*a67afe4dSAndroid Build Coastguard Worker firstobj= 10133*a67afe4dSAndroid Build Coastguard Worker if test yes = "$compiler_needs_object"; then 10134*a67afe4dSAndroid Build Coastguard Worker firstobj="$1 " 10135*a67afe4dSAndroid Build Coastguard Worker shift 10136*a67afe4dSAndroid Build Coastguard Worker fi 10137*a67afe4dSAndroid Build Coastguard Worker for obj 10138*a67afe4dSAndroid Build Coastguard Worker do 10139*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$obj" 10140*a67afe4dSAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" >> $output 10141*a67afe4dSAndroid Build Coastguard Worker done 10142*a67afe4dSAndroid Build Coastguard Worker func_append delfiles " $output" 10143*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$output" 10144*a67afe4dSAndroid Build Coastguard Worker output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 10145*a67afe4dSAndroid Build Coastguard Worker else 10146*a67afe4dSAndroid Build Coastguard Worker if test -n "$save_libobjs"; then 10147*a67afe4dSAndroid Build Coastguard Worker func_verbose "creating reloadable object files..." 10148*a67afe4dSAndroid Build Coastguard Worker output=$output_objdir/$output_la-$k.$objext 10149*a67afe4dSAndroid Build Coastguard Worker eval test_cmds=\"$reload_cmds\" 10150*a67afe4dSAndroid Build Coastguard Worker func_len " $test_cmds" 10151*a67afe4dSAndroid Build Coastguard Worker len0=$func_len_result 10152*a67afe4dSAndroid Build Coastguard Worker len=$len0 10153*a67afe4dSAndroid Build Coastguard Worker 10154*a67afe4dSAndroid Build Coastguard Worker # Loop over the list of objects to be linked. 10155*a67afe4dSAndroid Build Coastguard Worker for obj in $save_libobjs 10156*a67afe4dSAndroid Build Coastguard Worker do 10157*a67afe4dSAndroid Build Coastguard Worker func_len " $obj" 10158*a67afe4dSAndroid Build Coastguard Worker func_arith $len + $func_len_result 10159*a67afe4dSAndroid Build Coastguard Worker len=$func_arith_result 10160*a67afe4dSAndroid Build Coastguard Worker if test -z "$objlist" || 10161*a67afe4dSAndroid Build Coastguard Worker test "$len" -lt "$max_cmd_len"; then 10162*a67afe4dSAndroid Build Coastguard Worker func_append objlist " $obj" 10163*a67afe4dSAndroid Build Coastguard Worker else 10164*a67afe4dSAndroid Build Coastguard Worker # The command $test_cmds is almost too long, add a 10165*a67afe4dSAndroid Build Coastguard Worker # command to the queue. 10166*a67afe4dSAndroid Build Coastguard Worker if test 1 -eq "$k"; then 10167*a67afe4dSAndroid Build Coastguard Worker # The first file doesn't have a previous command to add. 10168*a67afe4dSAndroid Build Coastguard Worker reload_objs=$objlist 10169*a67afe4dSAndroid Build Coastguard Worker eval concat_cmds=\"$reload_cmds\" 10170*a67afe4dSAndroid Build Coastguard Worker else 10171*a67afe4dSAndroid Build Coastguard Worker # All subsequent reloadable object files will link in 10172*a67afe4dSAndroid Build Coastguard Worker # the last one created. 10173*a67afe4dSAndroid Build Coastguard Worker reload_objs="$objlist $last_robj" 10174*a67afe4dSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 10175*a67afe4dSAndroid Build Coastguard Worker fi 10176*a67afe4dSAndroid Build Coastguard Worker last_robj=$output_objdir/$output_la-$k.$objext 10177*a67afe4dSAndroid Build Coastguard Worker func_arith $k + 1 10178*a67afe4dSAndroid Build Coastguard Worker k=$func_arith_result 10179*a67afe4dSAndroid Build Coastguard Worker output=$output_objdir/$output_la-$k.$objext 10180*a67afe4dSAndroid Build Coastguard Worker objlist=" $obj" 10181*a67afe4dSAndroid Build Coastguard Worker func_len " $last_robj" 10182*a67afe4dSAndroid Build Coastguard Worker func_arith $len0 + $func_len_result 10183*a67afe4dSAndroid Build Coastguard Worker len=$func_arith_result 10184*a67afe4dSAndroid Build Coastguard Worker fi 10185*a67afe4dSAndroid Build Coastguard Worker done 10186*a67afe4dSAndroid Build Coastguard Worker # Handle the remaining objects by creating one last 10187*a67afe4dSAndroid Build Coastguard Worker # reloadable object file. All subsequent reloadable object 10188*a67afe4dSAndroid Build Coastguard Worker # files will link in the last one created. 10189*a67afe4dSAndroid Build Coastguard Worker test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10190*a67afe4dSAndroid Build Coastguard Worker reload_objs="$objlist $last_robj" 10191*a67afe4dSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds$reload_cmds\" 10192*a67afe4dSAndroid Build Coastguard Worker if test -n "$last_robj"; then 10193*a67afe4dSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10194*a67afe4dSAndroid Build Coastguard Worker fi 10195*a67afe4dSAndroid Build Coastguard Worker func_append delfiles " $output" 10196*a67afe4dSAndroid Build Coastguard Worker 10197*a67afe4dSAndroid Build Coastguard Worker else 10198*a67afe4dSAndroid Build Coastguard Worker output= 10199*a67afe4dSAndroid Build Coastguard Worker fi 10200*a67afe4dSAndroid Build Coastguard Worker 10201*a67afe4dSAndroid Build Coastguard Worker ${skipped_export-false} && { 10202*a67afe4dSAndroid Build Coastguard Worker func_verbose "generating symbol list for '$libname.la'" 10203*a67afe4dSAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.exp 10204*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM $export_symbols 10205*a67afe4dSAndroid Build Coastguard Worker libobjs=$output 10206*a67afe4dSAndroid Build Coastguard Worker # Append the command to create the export file. 10207*a67afe4dSAndroid Build Coastguard Worker test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10208*a67afe4dSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 10209*a67afe4dSAndroid Build Coastguard Worker if test -n "$last_robj"; then 10210*a67afe4dSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10211*a67afe4dSAndroid Build Coastguard Worker fi 10212*a67afe4dSAndroid Build Coastguard Worker } 10213*a67afe4dSAndroid Build Coastguard Worker 10214*a67afe4dSAndroid Build Coastguard Worker test -n "$save_libobjs" && 10215*a67afe4dSAndroid Build Coastguard Worker func_verbose "creating a temporary reloadable object file: $output" 10216*a67afe4dSAndroid Build Coastguard Worker 10217*a67afe4dSAndroid Build Coastguard Worker # Loop through the commands generated above and execute them. 10218*a67afe4dSAndroid Build Coastguard Worker save_ifs=$IFS; IFS='~' 10219*a67afe4dSAndroid Build Coastguard Worker for cmd in $concat_cmds; do 10220*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 10221*a67afe4dSAndroid Build Coastguard Worker $opt_quiet || { 10222*a67afe4dSAndroid Build Coastguard Worker func_quote_arg expand,pretty "$cmd" 10223*a67afe4dSAndroid Build Coastguard Worker eval "func_echo $func_quote_arg_result" 10224*a67afe4dSAndroid Build Coastguard Worker } 10225*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || eval "$cmd" || { 10226*a67afe4dSAndroid Build Coastguard Worker lt_exit=$? 10227*a67afe4dSAndroid Build Coastguard Worker 10228*a67afe4dSAndroid Build Coastguard Worker # Restore the uninstalled library and exit 10229*a67afe4dSAndroid Build Coastguard Worker if test relink = "$opt_mode"; then 10230*a67afe4dSAndroid Build Coastguard Worker ( cd "$output_objdir" && \ 10231*a67afe4dSAndroid Build Coastguard Worker $RM "${realname}T" && \ 10232*a67afe4dSAndroid Build Coastguard Worker $MV "${realname}U" "$realname" ) 10233*a67afe4dSAndroid Build Coastguard Worker fi 10234*a67afe4dSAndroid Build Coastguard Worker 10235*a67afe4dSAndroid Build Coastguard Worker exit $lt_exit 10236*a67afe4dSAndroid Build Coastguard Worker } 10237*a67afe4dSAndroid Build Coastguard Worker done 10238*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 10239*a67afe4dSAndroid Build Coastguard Worker 10240*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols_regex" && ${skipped_export-false}; then 10241*a67afe4dSAndroid Build Coastguard Worker func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 10242*a67afe4dSAndroid Build Coastguard Worker func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 10243*a67afe4dSAndroid Build Coastguard Worker fi 10244*a67afe4dSAndroid Build Coastguard Worker fi 10245*a67afe4dSAndroid Build Coastguard Worker 10246*a67afe4dSAndroid Build Coastguard Worker ${skipped_export-false} && { 10247*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$include_expsyms"; then 10248*a67afe4dSAndroid Build Coastguard Worker tmp_export_symbols=$export_symbols 10249*a67afe4dSAndroid Build Coastguard Worker test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10250*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10251*a67afe4dSAndroid Build Coastguard Worker fi 10252*a67afe4dSAndroid Build Coastguard Worker 10253*a67afe4dSAndroid Build Coastguard Worker if test -n "$orig_export_symbols"; then 10254*a67afe4dSAndroid Build Coastguard Worker # The given exports_symbols file has to be filtered, so filter it. 10255*a67afe4dSAndroid Build Coastguard Worker func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10256*a67afe4dSAndroid Build Coastguard Worker # FIXME: $output_objdir/$libname.filter potentially contains lots of 10257*a67afe4dSAndroid Build Coastguard Worker # 's' commands, which not all seds can handle. GNU sed should be fine 10258*a67afe4dSAndroid Build Coastguard Worker # though. Also, the filter scales superlinearly with the number of 10259*a67afe4dSAndroid Build Coastguard Worker # global variables. join(1) would be nice here, but unfortunately 10260*a67afe4dSAndroid Build Coastguard Worker # isn't a blessed tool. 10261*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10262*a67afe4dSAndroid Build Coastguard Worker func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10263*a67afe4dSAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.def 10264*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10265*a67afe4dSAndroid Build Coastguard Worker fi 10266*a67afe4dSAndroid Build Coastguard Worker } 10267*a67afe4dSAndroid Build Coastguard Worker 10268*a67afe4dSAndroid Build Coastguard Worker libobjs=$output 10269*a67afe4dSAndroid Build Coastguard Worker # Restore the value of output. 10270*a67afe4dSAndroid Build Coastguard Worker output=$save_output 10271*a67afe4dSAndroid Build Coastguard Worker 10272*a67afe4dSAndroid Build Coastguard Worker if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 10273*a67afe4dSAndroid Build Coastguard Worker eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10274*a67afe4dSAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 10275*a67afe4dSAndroid Build Coastguard Worker fi 10276*a67afe4dSAndroid Build Coastguard Worker # Expand the library linking commands again to reset the 10277*a67afe4dSAndroid Build Coastguard Worker # value of $libobjs for piecewise linking. 10278*a67afe4dSAndroid Build Coastguard Worker 10279*a67afe4dSAndroid Build Coastguard Worker # Do each of the archive commands. 10280*a67afe4dSAndroid Build Coastguard Worker if test yes = "$module" && test -n "$module_cmds"; then 10281*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10282*a67afe4dSAndroid Build Coastguard Worker cmds=$module_expsym_cmds 10283*a67afe4dSAndroid Build Coastguard Worker else 10284*a67afe4dSAndroid Build Coastguard Worker cmds=$module_cmds 10285*a67afe4dSAndroid Build Coastguard Worker fi 10286*a67afe4dSAndroid Build Coastguard Worker else 10287*a67afe4dSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10288*a67afe4dSAndroid Build Coastguard Worker cmds=$archive_expsym_cmds 10289*a67afe4dSAndroid Build Coastguard Worker else 10290*a67afe4dSAndroid Build Coastguard Worker cmds=$archive_cmds 10291*a67afe4dSAndroid Build Coastguard Worker fi 10292*a67afe4dSAndroid Build Coastguard Worker fi 10293*a67afe4dSAndroid Build Coastguard Worker fi 10294*a67afe4dSAndroid Build Coastguard Worker 10295*a67afe4dSAndroid Build Coastguard Worker if test -n "$delfiles"; then 10296*a67afe4dSAndroid Build Coastguard Worker # Append the command to remove temporary files to $cmds. 10297*a67afe4dSAndroid Build Coastguard Worker eval cmds=\"\$cmds~\$RM $delfiles\" 10298*a67afe4dSAndroid Build Coastguard Worker fi 10299*a67afe4dSAndroid Build Coastguard Worker 10300*a67afe4dSAndroid Build Coastguard Worker # Add any objects from preloaded convenience libraries 10301*a67afe4dSAndroid Build Coastguard Worker if test -n "$dlprefiles"; then 10302*a67afe4dSAndroid Build Coastguard Worker gentop=$output_objdir/${outputname}x 10303*a67afe4dSAndroid Build Coastguard Worker func_append generated " $gentop" 10304*a67afe4dSAndroid Build Coastguard Worker 10305*a67afe4dSAndroid Build Coastguard Worker func_extract_archives $gentop $dlprefiles 10306*a67afe4dSAndroid Build Coastguard Worker func_append libobjs " $func_extract_archives_result" 10307*a67afe4dSAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 10308*a67afe4dSAndroid Build Coastguard Worker fi 10309*a67afe4dSAndroid Build Coastguard Worker 10310*a67afe4dSAndroid Build Coastguard Worker save_ifs=$IFS; IFS='~' 10311*a67afe4dSAndroid Build Coastguard Worker for cmd in $cmds; do 10312*a67afe4dSAndroid Build Coastguard Worker IFS=$sp$nl 10313*a67afe4dSAndroid Build Coastguard Worker eval cmd=\"$cmd\" 10314*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 10315*a67afe4dSAndroid Build Coastguard Worker $opt_quiet || { 10316*a67afe4dSAndroid Build Coastguard Worker func_quote_arg expand,pretty "$cmd" 10317*a67afe4dSAndroid Build Coastguard Worker eval "func_echo $func_quote_arg_result" 10318*a67afe4dSAndroid Build Coastguard Worker } 10319*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || eval "$cmd" || { 10320*a67afe4dSAndroid Build Coastguard Worker lt_exit=$? 10321*a67afe4dSAndroid Build Coastguard Worker 10322*a67afe4dSAndroid Build Coastguard Worker # Restore the uninstalled library and exit 10323*a67afe4dSAndroid Build Coastguard Worker if test relink = "$opt_mode"; then 10324*a67afe4dSAndroid Build Coastguard Worker ( cd "$output_objdir" && \ 10325*a67afe4dSAndroid Build Coastguard Worker $RM "${realname}T" && \ 10326*a67afe4dSAndroid Build Coastguard Worker $MV "${realname}U" "$realname" ) 10327*a67afe4dSAndroid Build Coastguard Worker fi 10328*a67afe4dSAndroid Build Coastguard Worker 10329*a67afe4dSAndroid Build Coastguard Worker exit $lt_exit 10330*a67afe4dSAndroid Build Coastguard Worker } 10331*a67afe4dSAndroid Build Coastguard Worker done 10332*a67afe4dSAndroid Build Coastguard Worker IFS=$save_ifs 10333*a67afe4dSAndroid Build Coastguard Worker 10334*a67afe4dSAndroid Build Coastguard Worker # Restore the uninstalled library and exit 10335*a67afe4dSAndroid Build Coastguard Worker if test relink = "$opt_mode"; then 10336*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10337*a67afe4dSAndroid Build Coastguard Worker 10338*a67afe4dSAndroid Build Coastguard Worker if test -n "$convenience"; then 10339*a67afe4dSAndroid Build Coastguard Worker if test -z "$whole_archive_flag_spec"; then 10340*a67afe4dSAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 10341*a67afe4dSAndroid Build Coastguard Worker fi 10342*a67afe4dSAndroid Build Coastguard Worker fi 10343*a67afe4dSAndroid Build Coastguard Worker 10344*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10345*a67afe4dSAndroid Build Coastguard Worker fi 10346*a67afe4dSAndroid Build Coastguard Worker 10347*a67afe4dSAndroid Build Coastguard Worker # Create links to the real library. 10348*a67afe4dSAndroid Build Coastguard Worker for linkname in $linknames; do 10349*a67afe4dSAndroid Build Coastguard Worker if test "$realname" != "$linkname"; then 10350*a67afe4dSAndroid Build Coastguard Worker func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10351*a67afe4dSAndroid Build Coastguard Worker fi 10352*a67afe4dSAndroid Build Coastguard Worker done 10353*a67afe4dSAndroid Build Coastguard Worker 10354*a67afe4dSAndroid Build Coastguard Worker # If -module or -export-dynamic was specified, set the dlname. 10355*a67afe4dSAndroid Build Coastguard Worker if test yes = "$module" || test yes = "$export_dynamic"; then 10356*a67afe4dSAndroid Build Coastguard Worker # On all known operating systems, these are identical. 10357*a67afe4dSAndroid Build Coastguard Worker dlname=$soname 10358*a67afe4dSAndroid Build Coastguard Worker fi 10359*a67afe4dSAndroid Build Coastguard Worker fi 10360*a67afe4dSAndroid Build Coastguard Worker ;; 10361*a67afe4dSAndroid Build Coastguard Worker 10362*a67afe4dSAndroid Build Coastguard Worker obj) 10363*a67afe4dSAndroid Build Coastguard Worker if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 10364*a67afe4dSAndroid Build Coastguard Worker func_warning "'-dlopen' is ignored for objects" 10365*a67afe4dSAndroid Build Coastguard Worker fi 10366*a67afe4dSAndroid Build Coastguard Worker 10367*a67afe4dSAndroid Build Coastguard Worker case " $deplibs" in 10368*a67afe4dSAndroid Build Coastguard Worker *\ -l* | *\ -L*) 10369*a67afe4dSAndroid Build Coastguard Worker func_warning "'-l' and '-L' are ignored for objects" ;; 10370*a67afe4dSAndroid Build Coastguard Worker esac 10371*a67afe4dSAndroid Build Coastguard Worker 10372*a67afe4dSAndroid Build Coastguard Worker test -n "$rpath" && \ 10373*a67afe4dSAndroid Build Coastguard Worker func_warning "'-rpath' is ignored for objects" 10374*a67afe4dSAndroid Build Coastguard Worker 10375*a67afe4dSAndroid Build Coastguard Worker test -n "$xrpath" && \ 10376*a67afe4dSAndroid Build Coastguard Worker func_warning "'-R' is ignored for objects" 10377*a67afe4dSAndroid Build Coastguard Worker 10378*a67afe4dSAndroid Build Coastguard Worker test -n "$vinfo" && \ 10379*a67afe4dSAndroid Build Coastguard Worker func_warning "'-version-info' is ignored for objects" 10380*a67afe4dSAndroid Build Coastguard Worker 10381*a67afe4dSAndroid Build Coastguard Worker test -n "$release" && \ 10382*a67afe4dSAndroid Build Coastguard Worker func_warning "'-release' is ignored for objects" 10383*a67afe4dSAndroid Build Coastguard Worker 10384*a67afe4dSAndroid Build Coastguard Worker case $output in 10385*a67afe4dSAndroid Build Coastguard Worker *.lo) 10386*a67afe4dSAndroid Build Coastguard Worker test -n "$objs$old_deplibs" && \ 10387*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "cannot build library object '$output' from non-libtool objects" 10388*a67afe4dSAndroid Build Coastguard Worker 10389*a67afe4dSAndroid Build Coastguard Worker libobj=$output 10390*a67afe4dSAndroid Build Coastguard Worker func_lo2o "$libobj" 10391*a67afe4dSAndroid Build Coastguard Worker obj=$func_lo2o_result 10392*a67afe4dSAndroid Build Coastguard Worker ;; 10393*a67afe4dSAndroid Build Coastguard Worker *) 10394*a67afe4dSAndroid Build Coastguard Worker libobj= 10395*a67afe4dSAndroid Build Coastguard Worker obj=$output 10396*a67afe4dSAndroid Build Coastguard Worker ;; 10397*a67afe4dSAndroid Build Coastguard Worker esac 10398*a67afe4dSAndroid Build Coastguard Worker 10399*a67afe4dSAndroid Build Coastguard Worker # Delete the old objects. 10400*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM $obj $libobj 10401*a67afe4dSAndroid Build Coastguard Worker 10402*a67afe4dSAndroid Build Coastguard Worker # Objects from convenience libraries. This assumes 10403*a67afe4dSAndroid Build Coastguard Worker # single-version convenience libraries. Whenever we create 10404*a67afe4dSAndroid Build Coastguard Worker # different ones for PIC/non-PIC, this we'll have to duplicate 10405*a67afe4dSAndroid Build Coastguard Worker # the extraction. 10406*a67afe4dSAndroid Build Coastguard Worker reload_conv_objs= 10407*a67afe4dSAndroid Build Coastguard Worker gentop= 10408*a67afe4dSAndroid Build Coastguard Worker # if reload_cmds runs $LD directly, get rid of -Wl from 10409*a67afe4dSAndroid Build Coastguard Worker # whole_archive_flag_spec and hope we can get by with turning comma 10410*a67afe4dSAndroid Build Coastguard Worker # into space. 10411*a67afe4dSAndroid Build Coastguard Worker case $reload_cmds in 10412*a67afe4dSAndroid Build Coastguard Worker *\$LD[\ \$]*) wl= ;; 10413*a67afe4dSAndroid Build Coastguard Worker esac 10414*a67afe4dSAndroid Build Coastguard Worker if test -n "$convenience"; then 10415*a67afe4dSAndroid Build Coastguard Worker if test -n "$whole_archive_flag_spec"; then 10416*a67afe4dSAndroid Build Coastguard Worker eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 10417*a67afe4dSAndroid Build Coastguard Worker test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 10418*a67afe4dSAndroid Build Coastguard Worker reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10419*a67afe4dSAndroid Build Coastguard Worker else 10420*a67afe4dSAndroid Build Coastguard Worker gentop=$output_objdir/${obj}x 10421*a67afe4dSAndroid Build Coastguard Worker func_append generated " $gentop" 10422*a67afe4dSAndroid Build Coastguard Worker 10423*a67afe4dSAndroid Build Coastguard Worker func_extract_archives $gentop $convenience 10424*a67afe4dSAndroid Build Coastguard Worker reload_conv_objs="$reload_objs $func_extract_archives_result" 10425*a67afe4dSAndroid Build Coastguard Worker fi 10426*a67afe4dSAndroid Build Coastguard Worker fi 10427*a67afe4dSAndroid Build Coastguard Worker 10428*a67afe4dSAndroid Build Coastguard Worker # If we're not building shared, we need to use non_pic_objs 10429*a67afe4dSAndroid Build Coastguard Worker test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10430*a67afe4dSAndroid Build Coastguard Worker 10431*a67afe4dSAndroid Build Coastguard Worker # Create the old-style object. 10432*a67afe4dSAndroid Build Coastguard Worker reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10433*a67afe4dSAndroid Build Coastguard Worker 10434*a67afe4dSAndroid Build Coastguard Worker output=$obj 10435*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$reload_cmds" 'exit $?' 10436*a67afe4dSAndroid Build Coastguard Worker 10437*a67afe4dSAndroid Build Coastguard Worker # Exit if we aren't doing a library object file. 10438*a67afe4dSAndroid Build Coastguard Worker if test -z "$libobj"; then 10439*a67afe4dSAndroid Build Coastguard Worker if test -n "$gentop"; then 10440*a67afe4dSAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 10441*a67afe4dSAndroid Build Coastguard Worker fi 10442*a67afe4dSAndroid Build Coastguard Worker 10443*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10444*a67afe4dSAndroid Build Coastguard Worker fi 10445*a67afe4dSAndroid Build Coastguard Worker 10446*a67afe4dSAndroid Build Coastguard Worker test yes = "$build_libtool_libs" || { 10447*a67afe4dSAndroid Build Coastguard Worker if test -n "$gentop"; then 10448*a67afe4dSAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 10449*a67afe4dSAndroid Build Coastguard Worker fi 10450*a67afe4dSAndroid Build Coastguard Worker 10451*a67afe4dSAndroid Build Coastguard Worker # Create an invalid libtool object if no PIC, so that we don't 10452*a67afe4dSAndroid Build Coastguard Worker # accidentally link it into a program. 10453*a67afe4dSAndroid Build Coastguard Worker # $show "echo timestamp > $libobj" 10454*a67afe4dSAndroid Build Coastguard Worker # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10455*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10456*a67afe4dSAndroid Build Coastguard Worker } 10457*a67afe4dSAndroid Build Coastguard Worker 10458*a67afe4dSAndroid Build Coastguard Worker if test -n "$pic_flag" || test default != "$pic_mode"; then 10459*a67afe4dSAndroid Build Coastguard Worker # Only do commands if we really have different PIC objects. 10460*a67afe4dSAndroid Build Coastguard Worker reload_objs="$libobjs $reload_conv_objs" 10461*a67afe4dSAndroid Build Coastguard Worker output=$libobj 10462*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$reload_cmds" 'exit $?' 10463*a67afe4dSAndroid Build Coastguard Worker fi 10464*a67afe4dSAndroid Build Coastguard Worker 10465*a67afe4dSAndroid Build Coastguard Worker if test -n "$gentop"; then 10466*a67afe4dSAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 10467*a67afe4dSAndroid Build Coastguard Worker fi 10468*a67afe4dSAndroid Build Coastguard Worker 10469*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10470*a67afe4dSAndroid Build Coastguard Worker ;; 10471*a67afe4dSAndroid Build Coastguard Worker 10472*a67afe4dSAndroid Build Coastguard Worker prog) 10473*a67afe4dSAndroid Build Coastguard Worker case $host in 10474*a67afe4dSAndroid Build Coastguard Worker *cygwin*) func_stripname '' '.exe' "$output" 10475*a67afe4dSAndroid Build Coastguard Worker output=$func_stripname_result.exe;; 10476*a67afe4dSAndroid Build Coastguard Worker esac 10477*a67afe4dSAndroid Build Coastguard Worker test -n "$vinfo" && \ 10478*a67afe4dSAndroid Build Coastguard Worker func_warning "'-version-info' is ignored for programs" 10479*a67afe4dSAndroid Build Coastguard Worker 10480*a67afe4dSAndroid Build Coastguard Worker test -n "$release" && \ 10481*a67afe4dSAndroid Build Coastguard Worker func_warning "'-release' is ignored for programs" 10482*a67afe4dSAndroid Build Coastguard Worker 10483*a67afe4dSAndroid Build Coastguard Worker $preload \ 10484*a67afe4dSAndroid Build Coastguard Worker && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 10485*a67afe4dSAndroid Build Coastguard Worker && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10486*a67afe4dSAndroid Build Coastguard Worker 10487*a67afe4dSAndroid Build Coastguard Worker case $host in 10488*a67afe4dSAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 10489*a67afe4dSAndroid Build Coastguard Worker # On Rhapsody replace the C library is the System framework 10490*a67afe4dSAndroid Build Coastguard Worker compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10491*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10492*a67afe4dSAndroid Build Coastguard Worker ;; 10493*a67afe4dSAndroid Build Coastguard Worker esac 10494*a67afe4dSAndroid Build Coastguard Worker 10495*a67afe4dSAndroid Build Coastguard Worker case $host in 10496*a67afe4dSAndroid Build Coastguard Worker *-*-darwin*) 10497*a67afe4dSAndroid Build Coastguard Worker # Don't allow lazy linking, it breaks C++ global constructors 10498*a67afe4dSAndroid Build Coastguard Worker # But is supposedly fixed on 10.4 or later (yay!). 10499*a67afe4dSAndroid Build Coastguard Worker if test CXX = "$tagname"; then 10500*a67afe4dSAndroid Build Coastguard Worker case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10501*a67afe4dSAndroid Build Coastguard Worker 10.[0123]) 10502*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $wl-bind_at_load" 10503*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $wl-bind_at_load" 10504*a67afe4dSAndroid Build Coastguard Worker ;; 10505*a67afe4dSAndroid Build Coastguard Worker esac 10506*a67afe4dSAndroid Build Coastguard Worker fi 10507*a67afe4dSAndroid Build Coastguard Worker # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10508*a67afe4dSAndroid Build Coastguard Worker compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10509*a67afe4dSAndroid Build Coastguard Worker finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10510*a67afe4dSAndroid Build Coastguard Worker ;; 10511*a67afe4dSAndroid Build Coastguard Worker esac 10512*a67afe4dSAndroid Build Coastguard Worker 10513*a67afe4dSAndroid Build Coastguard Worker 10514*a67afe4dSAndroid Build Coastguard Worker # move library search paths that coincide with paths to not yet 10515*a67afe4dSAndroid Build Coastguard Worker # installed libraries to the beginning of the library search list 10516*a67afe4dSAndroid Build Coastguard Worker new_libs= 10517*a67afe4dSAndroid Build Coastguard Worker for path in $notinst_path; do 10518*a67afe4dSAndroid Build Coastguard Worker case " $new_libs " in 10519*a67afe4dSAndroid Build Coastguard Worker *" -L$path/$objdir "*) ;; 10520*a67afe4dSAndroid Build Coastguard Worker *) 10521*a67afe4dSAndroid Build Coastguard Worker case " $compile_deplibs " in 10522*a67afe4dSAndroid Build Coastguard Worker *" -L$path/$objdir "*) 10523*a67afe4dSAndroid Build Coastguard Worker func_append new_libs " -L$path/$objdir" ;; 10524*a67afe4dSAndroid Build Coastguard Worker esac 10525*a67afe4dSAndroid Build Coastguard Worker ;; 10526*a67afe4dSAndroid Build Coastguard Worker esac 10527*a67afe4dSAndroid Build Coastguard Worker done 10528*a67afe4dSAndroid Build Coastguard Worker for deplib in $compile_deplibs; do 10529*a67afe4dSAndroid Build Coastguard Worker case $deplib in 10530*a67afe4dSAndroid Build Coastguard Worker -L*) 10531*a67afe4dSAndroid Build Coastguard Worker case " $new_libs " in 10532*a67afe4dSAndroid Build Coastguard Worker *" $deplib "*) ;; 10533*a67afe4dSAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 10534*a67afe4dSAndroid Build Coastguard Worker esac 10535*a67afe4dSAndroid Build Coastguard Worker ;; 10536*a67afe4dSAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 10537*a67afe4dSAndroid Build Coastguard Worker esac 10538*a67afe4dSAndroid Build Coastguard Worker done 10539*a67afe4dSAndroid Build Coastguard Worker compile_deplibs=$new_libs 10540*a67afe4dSAndroid Build Coastguard Worker 10541*a67afe4dSAndroid Build Coastguard Worker 10542*a67afe4dSAndroid Build Coastguard Worker func_append compile_command " $compile_deplibs" 10543*a67afe4dSAndroid Build Coastguard Worker func_append finalize_command " $finalize_deplibs" 10544*a67afe4dSAndroid Build Coastguard Worker 10545*a67afe4dSAndroid Build Coastguard Worker if test -n "$rpath$xrpath"; then 10546*a67afe4dSAndroid Build Coastguard Worker # If the user specified any rpath flags, then add them. 10547*a67afe4dSAndroid Build Coastguard Worker for libdir in $rpath $xrpath; do 10548*a67afe4dSAndroid Build Coastguard Worker # This is the magic to use -rpath. 10549*a67afe4dSAndroid Build Coastguard Worker case "$finalize_rpath " in 10550*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 10551*a67afe4dSAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 10552*a67afe4dSAndroid Build Coastguard Worker esac 10553*a67afe4dSAndroid Build Coastguard Worker done 10554*a67afe4dSAndroid Build Coastguard Worker fi 10555*a67afe4dSAndroid Build Coastguard Worker 10556*a67afe4dSAndroid Build Coastguard Worker # Now hardcode the library paths 10557*a67afe4dSAndroid Build Coastguard Worker rpath= 10558*a67afe4dSAndroid Build Coastguard Worker hardcode_libdirs= 10559*a67afe4dSAndroid Build Coastguard Worker for libdir in $compile_rpath $finalize_rpath; do 10560*a67afe4dSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 10561*a67afe4dSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator"; then 10562*a67afe4dSAndroid Build Coastguard Worker if test -z "$hardcode_libdirs"; then 10563*a67afe4dSAndroid Build Coastguard Worker hardcode_libdirs=$libdir 10564*a67afe4dSAndroid Build Coastguard Worker else 10565*a67afe4dSAndroid Build Coastguard Worker # Just accumulate the unique libdirs. 10566*a67afe4dSAndroid Build Coastguard Worker case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10567*a67afe4dSAndroid Build Coastguard Worker *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10568*a67afe4dSAndroid Build Coastguard Worker ;; 10569*a67afe4dSAndroid Build Coastguard Worker *) 10570*a67afe4dSAndroid Build Coastguard Worker func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10571*a67afe4dSAndroid Build Coastguard Worker ;; 10572*a67afe4dSAndroid Build Coastguard Worker esac 10573*a67afe4dSAndroid Build Coastguard Worker fi 10574*a67afe4dSAndroid Build Coastguard Worker else 10575*a67afe4dSAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 10576*a67afe4dSAndroid Build Coastguard Worker func_append rpath " $flag" 10577*a67afe4dSAndroid Build Coastguard Worker fi 10578*a67afe4dSAndroid Build Coastguard Worker elif test -n "$runpath_var"; then 10579*a67afe4dSAndroid Build Coastguard Worker case "$perm_rpath " in 10580*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 10581*a67afe4dSAndroid Build Coastguard Worker *) func_append perm_rpath " $libdir" ;; 10582*a67afe4dSAndroid Build Coastguard Worker esac 10583*a67afe4dSAndroid Build Coastguard Worker fi 10584*a67afe4dSAndroid Build Coastguard Worker case $host in 10585*a67afe4dSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 10586*a67afe4dSAndroid Build Coastguard Worker testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10587*a67afe4dSAndroid Build Coastguard Worker case :$dllsearchpath: in 10588*a67afe4dSAndroid Build Coastguard Worker *":$libdir:"*) ;; 10589*a67afe4dSAndroid Build Coastguard Worker ::) dllsearchpath=$libdir;; 10590*a67afe4dSAndroid Build Coastguard Worker *) func_append dllsearchpath ":$libdir";; 10591*a67afe4dSAndroid Build Coastguard Worker esac 10592*a67afe4dSAndroid Build Coastguard Worker case :$dllsearchpath: in 10593*a67afe4dSAndroid Build Coastguard Worker *":$testbindir:"*) ;; 10594*a67afe4dSAndroid Build Coastguard Worker ::) dllsearchpath=$testbindir;; 10595*a67afe4dSAndroid Build Coastguard Worker *) func_append dllsearchpath ":$testbindir";; 10596*a67afe4dSAndroid Build Coastguard Worker esac 10597*a67afe4dSAndroid Build Coastguard Worker ;; 10598*a67afe4dSAndroid Build Coastguard Worker esac 10599*a67afe4dSAndroid Build Coastguard Worker done 10600*a67afe4dSAndroid Build Coastguard Worker # Substitute the hardcoded libdirs into the rpath. 10601*a67afe4dSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator" && 10602*a67afe4dSAndroid Build Coastguard Worker test -n "$hardcode_libdirs"; then 10603*a67afe4dSAndroid Build Coastguard Worker libdir=$hardcode_libdirs 10604*a67afe4dSAndroid Build Coastguard Worker eval rpath=\" $hardcode_libdir_flag_spec\" 10605*a67afe4dSAndroid Build Coastguard Worker fi 10606*a67afe4dSAndroid Build Coastguard Worker compile_rpath=$rpath 10607*a67afe4dSAndroid Build Coastguard Worker 10608*a67afe4dSAndroid Build Coastguard Worker rpath= 10609*a67afe4dSAndroid Build Coastguard Worker hardcode_libdirs= 10610*a67afe4dSAndroid Build Coastguard Worker for libdir in $finalize_rpath; do 10611*a67afe4dSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 10612*a67afe4dSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator"; then 10613*a67afe4dSAndroid Build Coastguard Worker if test -z "$hardcode_libdirs"; then 10614*a67afe4dSAndroid Build Coastguard Worker hardcode_libdirs=$libdir 10615*a67afe4dSAndroid Build Coastguard Worker else 10616*a67afe4dSAndroid Build Coastguard Worker # Just accumulate the unique libdirs. 10617*a67afe4dSAndroid Build Coastguard Worker case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10618*a67afe4dSAndroid Build Coastguard Worker *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10619*a67afe4dSAndroid Build Coastguard Worker ;; 10620*a67afe4dSAndroid Build Coastguard Worker *) 10621*a67afe4dSAndroid Build Coastguard Worker func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10622*a67afe4dSAndroid Build Coastguard Worker ;; 10623*a67afe4dSAndroid Build Coastguard Worker esac 10624*a67afe4dSAndroid Build Coastguard Worker fi 10625*a67afe4dSAndroid Build Coastguard Worker else 10626*a67afe4dSAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 10627*a67afe4dSAndroid Build Coastguard Worker func_append rpath " $flag" 10628*a67afe4dSAndroid Build Coastguard Worker fi 10629*a67afe4dSAndroid Build Coastguard Worker elif test -n "$runpath_var"; then 10630*a67afe4dSAndroid Build Coastguard Worker case "$finalize_perm_rpath " in 10631*a67afe4dSAndroid Build Coastguard Worker *" $libdir "*) ;; 10632*a67afe4dSAndroid Build Coastguard Worker *) func_append finalize_perm_rpath " $libdir" ;; 10633*a67afe4dSAndroid Build Coastguard Worker esac 10634*a67afe4dSAndroid Build Coastguard Worker fi 10635*a67afe4dSAndroid Build Coastguard Worker done 10636*a67afe4dSAndroid Build Coastguard Worker # Substitute the hardcoded libdirs into the rpath. 10637*a67afe4dSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator" && 10638*a67afe4dSAndroid Build Coastguard Worker test -n "$hardcode_libdirs"; then 10639*a67afe4dSAndroid Build Coastguard Worker libdir=$hardcode_libdirs 10640*a67afe4dSAndroid Build Coastguard Worker eval rpath=\" $hardcode_libdir_flag_spec\" 10641*a67afe4dSAndroid Build Coastguard Worker fi 10642*a67afe4dSAndroid Build Coastguard Worker finalize_rpath=$rpath 10643*a67afe4dSAndroid Build Coastguard Worker 10644*a67afe4dSAndroid Build Coastguard Worker if test -n "$libobjs" && test yes = "$build_old_libs"; then 10645*a67afe4dSAndroid Build Coastguard Worker # Transform all the library objects into standard objects. 10646*a67afe4dSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10647*a67afe4dSAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10648*a67afe4dSAndroid Build Coastguard Worker fi 10649*a67afe4dSAndroid Build Coastguard Worker 10650*a67afe4dSAndroid Build Coastguard Worker func_generate_dlsyms "$outputname" "@PROGRAM@" false 10651*a67afe4dSAndroid Build Coastguard Worker 10652*a67afe4dSAndroid Build Coastguard Worker # template prelinking step 10653*a67afe4dSAndroid Build Coastguard Worker if test -n "$prelink_cmds"; then 10654*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$prelink_cmds" 'exit $?' 10655*a67afe4dSAndroid Build Coastguard Worker fi 10656*a67afe4dSAndroid Build Coastguard Worker 10657*a67afe4dSAndroid Build Coastguard Worker wrappers_required=: 10658*a67afe4dSAndroid Build Coastguard Worker case $host in 10659*a67afe4dSAndroid Build Coastguard Worker *cegcc* | *mingw32ce*) 10660*a67afe4dSAndroid Build Coastguard Worker # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 10661*a67afe4dSAndroid Build Coastguard Worker wrappers_required=false 10662*a67afe4dSAndroid Build Coastguard Worker ;; 10663*a67afe4dSAndroid Build Coastguard Worker *cygwin* | *mingw* ) 10664*a67afe4dSAndroid Build Coastguard Worker test yes = "$build_libtool_libs" || wrappers_required=false 10665*a67afe4dSAndroid Build Coastguard Worker ;; 10666*a67afe4dSAndroid Build Coastguard Worker *) 10667*a67afe4dSAndroid Build Coastguard Worker if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 10668*a67afe4dSAndroid Build Coastguard Worker wrappers_required=false 10669*a67afe4dSAndroid Build Coastguard Worker fi 10670*a67afe4dSAndroid Build Coastguard Worker ;; 10671*a67afe4dSAndroid Build Coastguard Worker esac 10672*a67afe4dSAndroid Build Coastguard Worker $wrappers_required || { 10673*a67afe4dSAndroid Build Coastguard Worker # Replace the output file specification. 10674*a67afe4dSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10675*a67afe4dSAndroid Build Coastguard Worker link_command=$compile_command$compile_rpath 10676*a67afe4dSAndroid Build Coastguard Worker 10677*a67afe4dSAndroid Build Coastguard Worker # We have no uninstalled library dependencies, so finalize right now. 10678*a67afe4dSAndroid Build Coastguard Worker exit_status=0 10679*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$link_command" 'exit_status=$?' 10680*a67afe4dSAndroid Build Coastguard Worker 10681*a67afe4dSAndroid Build Coastguard Worker if test -n "$postlink_cmds"; then 10682*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$output" 10683*a67afe4dSAndroid 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'` 10684*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$postlink_cmds" 'exit $?' 10685*a67afe4dSAndroid Build Coastguard Worker fi 10686*a67afe4dSAndroid Build Coastguard Worker 10687*a67afe4dSAndroid Build Coastguard Worker # Delete the generated files. 10688*a67afe4dSAndroid Build Coastguard Worker if test -f "$output_objdir/${outputname}S.$objext"; then 10689*a67afe4dSAndroid Build Coastguard Worker func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10690*a67afe4dSAndroid Build Coastguard Worker fi 10691*a67afe4dSAndroid Build Coastguard Worker 10692*a67afe4dSAndroid Build Coastguard Worker exit $exit_status 10693*a67afe4dSAndroid Build Coastguard Worker } 10694*a67afe4dSAndroid Build Coastguard Worker 10695*a67afe4dSAndroid Build Coastguard Worker if test -n "$compile_shlibpath$finalize_shlibpath"; then 10696*a67afe4dSAndroid Build Coastguard Worker compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10697*a67afe4dSAndroid Build Coastguard Worker fi 10698*a67afe4dSAndroid Build Coastguard Worker if test -n "$finalize_shlibpath"; then 10699*a67afe4dSAndroid Build Coastguard Worker finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10700*a67afe4dSAndroid Build Coastguard Worker fi 10701*a67afe4dSAndroid Build Coastguard Worker 10702*a67afe4dSAndroid Build Coastguard Worker compile_var= 10703*a67afe4dSAndroid Build Coastguard Worker finalize_var= 10704*a67afe4dSAndroid Build Coastguard Worker if test -n "$runpath_var"; then 10705*a67afe4dSAndroid Build Coastguard Worker if test -n "$perm_rpath"; then 10706*a67afe4dSAndroid Build Coastguard Worker # We should set the runpath_var. 10707*a67afe4dSAndroid Build Coastguard Worker rpath= 10708*a67afe4dSAndroid Build Coastguard Worker for dir in $perm_rpath; do 10709*a67afe4dSAndroid Build Coastguard Worker func_append rpath "$dir:" 10710*a67afe4dSAndroid Build Coastguard Worker done 10711*a67afe4dSAndroid Build Coastguard Worker compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10712*a67afe4dSAndroid Build Coastguard Worker fi 10713*a67afe4dSAndroid Build Coastguard Worker if test -n "$finalize_perm_rpath"; then 10714*a67afe4dSAndroid Build Coastguard Worker # We should set the runpath_var. 10715*a67afe4dSAndroid Build Coastguard Worker rpath= 10716*a67afe4dSAndroid Build Coastguard Worker for dir in $finalize_perm_rpath; do 10717*a67afe4dSAndroid Build Coastguard Worker func_append rpath "$dir:" 10718*a67afe4dSAndroid Build Coastguard Worker done 10719*a67afe4dSAndroid Build Coastguard Worker finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10720*a67afe4dSAndroid Build Coastguard Worker fi 10721*a67afe4dSAndroid Build Coastguard Worker fi 10722*a67afe4dSAndroid Build Coastguard Worker 10723*a67afe4dSAndroid Build Coastguard Worker if test yes = "$no_install"; then 10724*a67afe4dSAndroid Build Coastguard Worker # We don't need to create a wrapper script. 10725*a67afe4dSAndroid Build Coastguard Worker link_command=$compile_var$compile_command$compile_rpath 10726*a67afe4dSAndroid Build Coastguard Worker # Replace the output file specification. 10727*a67afe4dSAndroid Build Coastguard Worker link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10728*a67afe4dSAndroid Build Coastguard Worker # Delete the old output file. 10729*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM $output 10730*a67afe4dSAndroid Build Coastguard Worker # Link the executable and exit 10731*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$link_command" 'exit $?' 10732*a67afe4dSAndroid Build Coastguard Worker 10733*a67afe4dSAndroid Build Coastguard Worker if test -n "$postlink_cmds"; then 10734*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$output" 10735*a67afe4dSAndroid 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'` 10736*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$postlink_cmds" 'exit $?' 10737*a67afe4dSAndroid Build Coastguard Worker fi 10738*a67afe4dSAndroid Build Coastguard Worker 10739*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10740*a67afe4dSAndroid Build Coastguard Worker fi 10741*a67afe4dSAndroid Build Coastguard Worker 10742*a67afe4dSAndroid Build Coastguard Worker case $hardcode_action,$fast_install in 10743*a67afe4dSAndroid Build Coastguard Worker relink,*) 10744*a67afe4dSAndroid Build Coastguard Worker # Fast installation is not supported 10745*a67afe4dSAndroid Build Coastguard Worker link_command=$compile_var$compile_command$compile_rpath 10746*a67afe4dSAndroid Build Coastguard Worker relink_command=$finalize_var$finalize_command$finalize_rpath 10747*a67afe4dSAndroid Build Coastguard Worker 10748*a67afe4dSAndroid Build Coastguard Worker func_warning "this platform does not like uninstalled shared libraries" 10749*a67afe4dSAndroid Build Coastguard Worker func_warning "'$output' will be relinked during installation" 10750*a67afe4dSAndroid Build Coastguard Worker ;; 10751*a67afe4dSAndroid Build Coastguard Worker *,yes) 10752*a67afe4dSAndroid Build Coastguard Worker link_command=$finalize_var$compile_command$finalize_rpath 10753*a67afe4dSAndroid Build Coastguard Worker relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 10754*a67afe4dSAndroid Build Coastguard Worker ;; 10755*a67afe4dSAndroid Build Coastguard Worker *,no) 10756*a67afe4dSAndroid Build Coastguard Worker link_command=$compile_var$compile_command$compile_rpath 10757*a67afe4dSAndroid Build Coastguard Worker relink_command=$finalize_var$finalize_command$finalize_rpath 10758*a67afe4dSAndroid Build Coastguard Worker ;; 10759*a67afe4dSAndroid Build Coastguard Worker *,needless) 10760*a67afe4dSAndroid Build Coastguard Worker link_command=$finalize_var$compile_command$finalize_rpath 10761*a67afe4dSAndroid Build Coastguard Worker relink_command= 10762*a67afe4dSAndroid Build Coastguard Worker ;; 10763*a67afe4dSAndroid Build Coastguard Worker esac 10764*a67afe4dSAndroid Build Coastguard Worker 10765*a67afe4dSAndroid Build Coastguard Worker # Replace the output file specification. 10766*a67afe4dSAndroid Build Coastguard Worker link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10767*a67afe4dSAndroid Build Coastguard Worker 10768*a67afe4dSAndroid Build Coastguard Worker # Delete the old output files. 10769*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10770*a67afe4dSAndroid Build Coastguard Worker 10771*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$link_command" 'exit $?' 10772*a67afe4dSAndroid Build Coastguard Worker 10773*a67afe4dSAndroid Build Coastguard Worker if test -n "$postlink_cmds"; then 10774*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$output_objdir/$outputname" 10775*a67afe4dSAndroid 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'` 10776*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$postlink_cmds" 'exit $?' 10777*a67afe4dSAndroid Build Coastguard Worker fi 10778*a67afe4dSAndroid Build Coastguard Worker 10779*a67afe4dSAndroid Build Coastguard Worker # Now create the wrapper script. 10780*a67afe4dSAndroid Build Coastguard Worker func_verbose "creating $output" 10781*a67afe4dSAndroid Build Coastguard Worker 10782*a67afe4dSAndroid Build Coastguard Worker # Quote the relink command for shipping. 10783*a67afe4dSAndroid Build Coastguard Worker if test -n "$relink_command"; then 10784*a67afe4dSAndroid Build Coastguard Worker # Preserve any variables that may affect compiler behavior 10785*a67afe4dSAndroid Build Coastguard Worker for var in $variables_saved_for_relink; do 10786*a67afe4dSAndroid Build Coastguard Worker if eval test -z \"\${$var+set}\"; then 10787*a67afe4dSAndroid Build Coastguard Worker relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10788*a67afe4dSAndroid Build Coastguard Worker elif eval var_value=\$$var; test -z "$var_value"; then 10789*a67afe4dSAndroid Build Coastguard Worker relink_command="$var=; export $var; $relink_command" 10790*a67afe4dSAndroid Build Coastguard Worker else 10791*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty "$var_value" 10792*a67afe4dSAndroid Build Coastguard Worker relink_command="$var=$func_quote_arg_result; export $var; $relink_command" 10793*a67afe4dSAndroid Build Coastguard Worker fi 10794*a67afe4dSAndroid Build Coastguard Worker done 10795*a67afe4dSAndroid Build Coastguard Worker func_quote eval cd "`pwd`" 10796*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" 10797*a67afe4dSAndroid Build Coastguard Worker relink_command=$func_quote_arg_unquoted_result 10798*a67afe4dSAndroid Build Coastguard Worker fi 10799*a67afe4dSAndroid Build Coastguard Worker 10800*a67afe4dSAndroid Build Coastguard Worker # Only actually do things if not in dry run mode. 10801*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 10802*a67afe4dSAndroid Build Coastguard Worker # win32 will think the script is a binary if it has 10803*a67afe4dSAndroid Build Coastguard Worker # a .exe suffix, so we strip it off here. 10804*a67afe4dSAndroid Build Coastguard Worker case $output in 10805*a67afe4dSAndroid Build Coastguard Worker *.exe) func_stripname '' '.exe' "$output" 10806*a67afe4dSAndroid Build Coastguard Worker output=$func_stripname_result ;; 10807*a67afe4dSAndroid Build Coastguard Worker esac 10808*a67afe4dSAndroid Build Coastguard Worker # test for cygwin because mv fails w/o .exe extensions 10809*a67afe4dSAndroid Build Coastguard Worker case $host in 10810*a67afe4dSAndroid Build Coastguard Worker *cygwin*) 10811*a67afe4dSAndroid Build Coastguard Worker exeext=.exe 10812*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '.exe' "$outputname" 10813*a67afe4dSAndroid Build Coastguard Worker outputname=$func_stripname_result ;; 10814*a67afe4dSAndroid Build Coastguard Worker *) exeext= ;; 10815*a67afe4dSAndroid Build Coastguard Worker esac 10816*a67afe4dSAndroid Build Coastguard Worker case $host in 10817*a67afe4dSAndroid Build Coastguard Worker *cygwin* | *mingw* ) 10818*a67afe4dSAndroid Build Coastguard Worker func_dirname_and_basename "$output" "" "." 10819*a67afe4dSAndroid Build Coastguard Worker output_name=$func_basename_result 10820*a67afe4dSAndroid Build Coastguard Worker output_path=$func_dirname_result 10821*a67afe4dSAndroid Build Coastguard Worker cwrappersource=$output_path/$objdir/lt-$output_name.c 10822*a67afe4dSAndroid Build Coastguard Worker cwrapper=$output_path/$output_name.exe 10823*a67afe4dSAndroid Build Coastguard Worker $RM $cwrappersource $cwrapper 10824*a67afe4dSAndroid Build Coastguard Worker trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10825*a67afe4dSAndroid Build Coastguard Worker 10826*a67afe4dSAndroid Build Coastguard Worker func_emit_cwrapperexe_src > $cwrappersource 10827*a67afe4dSAndroid Build Coastguard Worker 10828*a67afe4dSAndroid Build Coastguard Worker # The wrapper executable is built using the $host compiler, 10829*a67afe4dSAndroid Build Coastguard Worker # because it contains $host paths and files. If cross- 10830*a67afe4dSAndroid Build Coastguard Worker # compiling, it, like the target executable, must be 10831*a67afe4dSAndroid Build Coastguard Worker # executed on the $host or under an emulation environment. 10832*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 10833*a67afe4dSAndroid Build Coastguard Worker $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10834*a67afe4dSAndroid Build Coastguard Worker $STRIP $cwrapper 10835*a67afe4dSAndroid Build Coastguard Worker } 10836*a67afe4dSAndroid Build Coastguard Worker 10837*a67afe4dSAndroid Build Coastguard Worker # Now, create the wrapper script for func_source use: 10838*a67afe4dSAndroid Build Coastguard Worker func_ltwrapper_scriptname $cwrapper 10839*a67afe4dSAndroid Build Coastguard Worker $RM $func_ltwrapper_scriptname_result 10840*a67afe4dSAndroid Build Coastguard Worker trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10841*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 10842*a67afe4dSAndroid Build Coastguard Worker # note: this script will not be executed, so do not chmod. 10843*a67afe4dSAndroid Build Coastguard Worker if test "x$build" = "x$host"; then 10844*a67afe4dSAndroid Build Coastguard Worker $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10845*a67afe4dSAndroid Build Coastguard Worker else 10846*a67afe4dSAndroid Build Coastguard Worker func_emit_wrapper no > $func_ltwrapper_scriptname_result 10847*a67afe4dSAndroid Build Coastguard Worker fi 10848*a67afe4dSAndroid Build Coastguard Worker } 10849*a67afe4dSAndroid Build Coastguard Worker ;; 10850*a67afe4dSAndroid Build Coastguard Worker * ) 10851*a67afe4dSAndroid Build Coastguard Worker $RM $output 10852*a67afe4dSAndroid Build Coastguard Worker trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10853*a67afe4dSAndroid Build Coastguard Worker 10854*a67afe4dSAndroid Build Coastguard Worker func_emit_wrapper no > $output 10855*a67afe4dSAndroid Build Coastguard Worker chmod +x $output 10856*a67afe4dSAndroid Build Coastguard Worker ;; 10857*a67afe4dSAndroid Build Coastguard Worker esac 10858*a67afe4dSAndroid Build Coastguard Worker } 10859*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10860*a67afe4dSAndroid Build Coastguard Worker ;; 10861*a67afe4dSAndroid Build Coastguard Worker esac 10862*a67afe4dSAndroid Build Coastguard Worker 10863*a67afe4dSAndroid Build Coastguard Worker # See if we need to build an old-fashioned archive. 10864*a67afe4dSAndroid Build Coastguard Worker for oldlib in $oldlibs; do 10865*a67afe4dSAndroid Build Coastguard Worker 10866*a67afe4dSAndroid Build Coastguard Worker case $build_libtool_libs in 10867*a67afe4dSAndroid Build Coastguard Worker convenience) 10868*a67afe4dSAndroid Build Coastguard Worker oldobjs="$libobjs_save $symfileobj" 10869*a67afe4dSAndroid Build Coastguard Worker addlibs=$convenience 10870*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=no 10871*a67afe4dSAndroid Build Coastguard Worker ;; 10872*a67afe4dSAndroid Build Coastguard Worker module) 10873*a67afe4dSAndroid Build Coastguard Worker oldobjs=$libobjs_save 10874*a67afe4dSAndroid Build Coastguard Worker addlibs=$old_convenience 10875*a67afe4dSAndroid Build Coastguard Worker build_libtool_libs=no 10876*a67afe4dSAndroid Build Coastguard Worker ;; 10877*a67afe4dSAndroid Build Coastguard Worker *) 10878*a67afe4dSAndroid Build Coastguard Worker oldobjs="$old_deplibs $non_pic_objects" 10879*a67afe4dSAndroid Build Coastguard Worker $preload && test -f "$symfileobj" \ 10880*a67afe4dSAndroid Build Coastguard Worker && func_append oldobjs " $symfileobj" 10881*a67afe4dSAndroid Build Coastguard Worker addlibs=$old_convenience 10882*a67afe4dSAndroid Build Coastguard Worker ;; 10883*a67afe4dSAndroid Build Coastguard Worker esac 10884*a67afe4dSAndroid Build Coastguard Worker 10885*a67afe4dSAndroid Build Coastguard Worker if test -n "$addlibs"; then 10886*a67afe4dSAndroid Build Coastguard Worker gentop=$output_objdir/${outputname}x 10887*a67afe4dSAndroid Build Coastguard Worker func_append generated " $gentop" 10888*a67afe4dSAndroid Build Coastguard Worker 10889*a67afe4dSAndroid Build Coastguard Worker func_extract_archives $gentop $addlibs 10890*a67afe4dSAndroid Build Coastguard Worker func_append oldobjs " $func_extract_archives_result" 10891*a67afe4dSAndroid Build Coastguard Worker fi 10892*a67afe4dSAndroid Build Coastguard Worker 10893*a67afe4dSAndroid Build Coastguard Worker # Do each command in the archive commands. 10894*a67afe4dSAndroid Build Coastguard Worker if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10895*a67afe4dSAndroid Build Coastguard Worker cmds=$old_archive_from_new_cmds 10896*a67afe4dSAndroid Build Coastguard Worker else 10897*a67afe4dSAndroid Build Coastguard Worker 10898*a67afe4dSAndroid Build Coastguard Worker # Add any objects from preloaded convenience libraries 10899*a67afe4dSAndroid Build Coastguard Worker if test -n "$dlprefiles"; then 10900*a67afe4dSAndroid Build Coastguard Worker gentop=$output_objdir/${outputname}x 10901*a67afe4dSAndroid Build Coastguard Worker func_append generated " $gentop" 10902*a67afe4dSAndroid Build Coastguard Worker 10903*a67afe4dSAndroid Build Coastguard Worker func_extract_archives $gentop $dlprefiles 10904*a67afe4dSAndroid Build Coastguard Worker func_append oldobjs " $func_extract_archives_result" 10905*a67afe4dSAndroid Build Coastguard Worker fi 10906*a67afe4dSAndroid Build Coastguard Worker 10907*a67afe4dSAndroid Build Coastguard Worker # POSIX demands no paths to be encoded in archives. We have 10908*a67afe4dSAndroid Build Coastguard Worker # to avoid creating archives with duplicate basenames if we 10909*a67afe4dSAndroid Build Coastguard Worker # might have to extract them afterwards, e.g., when creating a 10910*a67afe4dSAndroid Build Coastguard Worker # static archive out of a convenience library, or when linking 10911*a67afe4dSAndroid Build Coastguard Worker # the entirety of a libtool archive into another (currently 10912*a67afe4dSAndroid Build Coastguard Worker # not supported by libtool). 10913*a67afe4dSAndroid Build Coastguard Worker if (for obj in $oldobjs 10914*a67afe4dSAndroid Build Coastguard Worker do 10915*a67afe4dSAndroid Build Coastguard Worker func_basename "$obj" 10916*a67afe4dSAndroid Build Coastguard Worker $ECHO "$func_basename_result" 10917*a67afe4dSAndroid Build Coastguard Worker done | sort | sort -uc >/dev/null 2>&1); then 10918*a67afe4dSAndroid Build Coastguard Worker : 10919*a67afe4dSAndroid Build Coastguard Worker else 10920*a67afe4dSAndroid Build Coastguard Worker echo "copying selected object files to avoid basename conflicts..." 10921*a67afe4dSAndroid Build Coastguard Worker gentop=$output_objdir/${outputname}x 10922*a67afe4dSAndroid Build Coastguard Worker func_append generated " $gentop" 10923*a67afe4dSAndroid Build Coastguard Worker func_mkdir_p "$gentop" 10924*a67afe4dSAndroid Build Coastguard Worker save_oldobjs=$oldobjs 10925*a67afe4dSAndroid Build Coastguard Worker oldobjs= 10926*a67afe4dSAndroid Build Coastguard Worker counter=1 10927*a67afe4dSAndroid Build Coastguard Worker for obj in $save_oldobjs 10928*a67afe4dSAndroid Build Coastguard Worker do 10929*a67afe4dSAndroid Build Coastguard Worker func_basename "$obj" 10930*a67afe4dSAndroid Build Coastguard Worker objbase=$func_basename_result 10931*a67afe4dSAndroid Build Coastguard Worker case " $oldobjs " in 10932*a67afe4dSAndroid Build Coastguard Worker " ") oldobjs=$obj ;; 10933*a67afe4dSAndroid Build Coastguard Worker *[\ /]"$objbase "*) 10934*a67afe4dSAndroid Build Coastguard Worker while :; do 10935*a67afe4dSAndroid Build Coastguard Worker # Make sure we don't pick an alternate name that also 10936*a67afe4dSAndroid Build Coastguard Worker # overlaps. 10937*a67afe4dSAndroid Build Coastguard Worker newobj=lt$counter-$objbase 10938*a67afe4dSAndroid Build Coastguard Worker func_arith $counter + 1 10939*a67afe4dSAndroid Build Coastguard Worker counter=$func_arith_result 10940*a67afe4dSAndroid Build Coastguard Worker case " $oldobjs " in 10941*a67afe4dSAndroid Build Coastguard Worker *[\ /]"$newobj "*) ;; 10942*a67afe4dSAndroid Build Coastguard Worker *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10943*a67afe4dSAndroid Build Coastguard Worker esac 10944*a67afe4dSAndroid Build Coastguard Worker done 10945*a67afe4dSAndroid Build Coastguard Worker func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10946*a67afe4dSAndroid Build Coastguard Worker func_append oldobjs " $gentop/$newobj" 10947*a67afe4dSAndroid Build Coastguard Worker ;; 10948*a67afe4dSAndroid Build Coastguard Worker *) func_append oldobjs " $obj" ;; 10949*a67afe4dSAndroid Build Coastguard Worker esac 10950*a67afe4dSAndroid Build Coastguard Worker done 10951*a67afe4dSAndroid Build Coastguard Worker fi 10952*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10953*a67afe4dSAndroid Build Coastguard Worker tool_oldlib=$func_to_tool_file_result 10954*a67afe4dSAndroid Build Coastguard Worker eval cmds=\"$old_archive_cmds\" 10955*a67afe4dSAndroid Build Coastguard Worker 10956*a67afe4dSAndroid Build Coastguard Worker func_len " $cmds" 10957*a67afe4dSAndroid Build Coastguard Worker len=$func_len_result 10958*a67afe4dSAndroid Build Coastguard Worker if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10959*a67afe4dSAndroid Build Coastguard Worker cmds=$old_archive_cmds 10960*a67afe4dSAndroid Build Coastguard Worker elif test -n "$archiver_list_spec"; then 10961*a67afe4dSAndroid Build Coastguard Worker func_verbose "using command file archive linking..." 10962*a67afe4dSAndroid Build Coastguard Worker for obj in $oldobjs 10963*a67afe4dSAndroid Build Coastguard Worker do 10964*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$obj" 10965*a67afe4dSAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" 10966*a67afe4dSAndroid Build Coastguard Worker done > $output_objdir/$libname.libcmd 10967*a67afe4dSAndroid Build Coastguard Worker func_to_tool_file "$output_objdir/$libname.libcmd" 10968*a67afe4dSAndroid Build Coastguard Worker oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10969*a67afe4dSAndroid Build Coastguard Worker cmds=$old_archive_cmds 10970*a67afe4dSAndroid Build Coastguard Worker else 10971*a67afe4dSAndroid Build Coastguard Worker # the command line is too long to link in one step, link in parts 10972*a67afe4dSAndroid Build Coastguard Worker func_verbose "using piecewise archive linking..." 10973*a67afe4dSAndroid Build Coastguard Worker save_RANLIB=$RANLIB 10974*a67afe4dSAndroid Build Coastguard Worker RANLIB=: 10975*a67afe4dSAndroid Build Coastguard Worker objlist= 10976*a67afe4dSAndroid Build Coastguard Worker concat_cmds= 10977*a67afe4dSAndroid Build Coastguard Worker save_oldobjs=$oldobjs 10978*a67afe4dSAndroid Build Coastguard Worker oldobjs= 10979*a67afe4dSAndroid Build Coastguard Worker # Is there a better way of finding the last object in the list? 10980*a67afe4dSAndroid Build Coastguard Worker for obj in $save_oldobjs 10981*a67afe4dSAndroid Build Coastguard Worker do 10982*a67afe4dSAndroid Build Coastguard Worker last_oldobj=$obj 10983*a67afe4dSAndroid Build Coastguard Worker done 10984*a67afe4dSAndroid Build Coastguard Worker eval test_cmds=\"$old_archive_cmds\" 10985*a67afe4dSAndroid Build Coastguard Worker func_len " $test_cmds" 10986*a67afe4dSAndroid Build Coastguard Worker len0=$func_len_result 10987*a67afe4dSAndroid Build Coastguard Worker len=$len0 10988*a67afe4dSAndroid Build Coastguard Worker for obj in $save_oldobjs 10989*a67afe4dSAndroid Build Coastguard Worker do 10990*a67afe4dSAndroid Build Coastguard Worker func_len " $obj" 10991*a67afe4dSAndroid Build Coastguard Worker func_arith $len + $func_len_result 10992*a67afe4dSAndroid Build Coastguard Worker len=$func_arith_result 10993*a67afe4dSAndroid Build Coastguard Worker func_append objlist " $obj" 10994*a67afe4dSAndroid Build Coastguard Worker if test "$len" -lt "$max_cmd_len"; then 10995*a67afe4dSAndroid Build Coastguard Worker : 10996*a67afe4dSAndroid Build Coastguard Worker else 10997*a67afe4dSAndroid Build Coastguard Worker # the above command should be used before it gets too long 10998*a67afe4dSAndroid Build Coastguard Worker oldobjs=$objlist 10999*a67afe4dSAndroid Build Coastguard Worker if test "$obj" = "$last_oldobj"; then 11000*a67afe4dSAndroid Build Coastguard Worker RANLIB=$save_RANLIB 11001*a67afe4dSAndroid Build Coastguard Worker fi 11002*a67afe4dSAndroid Build Coastguard Worker test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 11003*a67afe4dSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 11004*a67afe4dSAndroid Build Coastguard Worker objlist= 11005*a67afe4dSAndroid Build Coastguard Worker len=$len0 11006*a67afe4dSAndroid Build Coastguard Worker fi 11007*a67afe4dSAndroid Build Coastguard Worker done 11008*a67afe4dSAndroid Build Coastguard Worker RANLIB=$save_RANLIB 11009*a67afe4dSAndroid Build Coastguard Worker oldobjs=$objlist 11010*a67afe4dSAndroid Build Coastguard Worker if test -z "$oldobjs"; then 11011*a67afe4dSAndroid Build Coastguard Worker eval cmds=\"\$concat_cmds\" 11012*a67afe4dSAndroid Build Coastguard Worker else 11013*a67afe4dSAndroid Build Coastguard Worker eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 11014*a67afe4dSAndroid Build Coastguard Worker fi 11015*a67afe4dSAndroid Build Coastguard Worker fi 11016*a67afe4dSAndroid Build Coastguard Worker fi 11017*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$cmds" 'exit $?' 11018*a67afe4dSAndroid Build Coastguard Worker done 11019*a67afe4dSAndroid Build Coastguard Worker 11020*a67afe4dSAndroid Build Coastguard Worker test -n "$generated" && \ 11021*a67afe4dSAndroid Build Coastguard Worker func_show_eval "${RM}r$generated" 11022*a67afe4dSAndroid Build Coastguard Worker 11023*a67afe4dSAndroid Build Coastguard Worker # Now create the libtool archive. 11024*a67afe4dSAndroid Build Coastguard Worker case $output in 11025*a67afe4dSAndroid Build Coastguard Worker *.la) 11026*a67afe4dSAndroid Build Coastguard Worker old_library= 11027*a67afe4dSAndroid Build Coastguard Worker test yes = "$build_old_libs" && old_library=$libname.$libext 11028*a67afe4dSAndroid Build Coastguard Worker func_verbose "creating $output" 11029*a67afe4dSAndroid Build Coastguard Worker 11030*a67afe4dSAndroid Build Coastguard Worker # Preserve any variables that may affect compiler behavior 11031*a67afe4dSAndroid Build Coastguard Worker for var in $variables_saved_for_relink; do 11032*a67afe4dSAndroid Build Coastguard Worker if eval test -z \"\${$var+set}\"; then 11033*a67afe4dSAndroid Build Coastguard Worker relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 11034*a67afe4dSAndroid Build Coastguard Worker elif eval var_value=\$$var; test -z "$var_value"; then 11035*a67afe4dSAndroid Build Coastguard Worker relink_command="$var=; export $var; $relink_command" 11036*a67afe4dSAndroid Build Coastguard Worker else 11037*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty,unquoted "$var_value" 11038*a67afe4dSAndroid Build Coastguard Worker relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" 11039*a67afe4dSAndroid Build Coastguard Worker fi 11040*a67afe4dSAndroid Build Coastguard Worker done 11041*a67afe4dSAndroid Build Coastguard Worker # Quote the link command for shipping. 11042*a67afe4dSAndroid Build Coastguard Worker func_quote eval cd "`pwd`" 11043*a67afe4dSAndroid Build Coastguard Worker relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 11044*a67afe4dSAndroid Build Coastguard Worker func_quote_arg pretty,unquoted "$relink_command" 11045*a67afe4dSAndroid Build Coastguard Worker relink_command=$func_quote_arg_unquoted_result 11046*a67afe4dSAndroid Build Coastguard Worker if test yes = "$hardcode_automatic"; then 11047*a67afe4dSAndroid Build Coastguard Worker relink_command= 11048*a67afe4dSAndroid Build Coastguard Worker fi 11049*a67afe4dSAndroid Build Coastguard Worker 11050*a67afe4dSAndroid Build Coastguard Worker # Only create the output if not a dry run. 11051*a67afe4dSAndroid Build Coastguard Worker $opt_dry_run || { 11052*a67afe4dSAndroid Build Coastguard Worker for installed in no yes; do 11053*a67afe4dSAndroid Build Coastguard Worker if test yes = "$installed"; then 11054*a67afe4dSAndroid Build Coastguard Worker if test -z "$install_libdir"; then 11055*a67afe4dSAndroid Build Coastguard Worker break 11056*a67afe4dSAndroid Build Coastguard Worker fi 11057*a67afe4dSAndroid Build Coastguard Worker output=$output_objdir/${outputname}i 11058*a67afe4dSAndroid Build Coastguard Worker # Replace all uninstalled libtool libraries with the installed ones 11059*a67afe4dSAndroid Build Coastguard Worker newdependency_libs= 11060*a67afe4dSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 11061*a67afe4dSAndroid Build Coastguard Worker case $deplib in 11062*a67afe4dSAndroid Build Coastguard Worker *.la) 11063*a67afe4dSAndroid Build Coastguard Worker func_basename "$deplib" 11064*a67afe4dSAndroid Build Coastguard Worker name=$func_basename_result 11065*a67afe4dSAndroid Build Coastguard Worker func_resolve_sysroot "$deplib" 11066*a67afe4dSAndroid Build Coastguard Worker eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 11067*a67afe4dSAndroid Build Coastguard Worker test -z "$libdir" && \ 11068*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$deplib' is not a valid libtool archive" 11069*a67afe4dSAndroid Build Coastguard Worker func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 11070*a67afe4dSAndroid Build Coastguard Worker ;; 11071*a67afe4dSAndroid Build Coastguard Worker -L*) 11072*a67afe4dSAndroid Build Coastguard Worker func_stripname -L '' "$deplib" 11073*a67afe4dSAndroid Build Coastguard Worker func_replace_sysroot "$func_stripname_result" 11074*a67afe4dSAndroid Build Coastguard Worker func_append newdependency_libs " -L$func_replace_sysroot_result" 11075*a67afe4dSAndroid Build Coastguard Worker ;; 11076*a67afe4dSAndroid Build Coastguard Worker -R*) 11077*a67afe4dSAndroid Build Coastguard Worker func_stripname -R '' "$deplib" 11078*a67afe4dSAndroid Build Coastguard Worker func_replace_sysroot "$func_stripname_result" 11079*a67afe4dSAndroid Build Coastguard Worker func_append newdependency_libs " -R$func_replace_sysroot_result" 11080*a67afe4dSAndroid Build Coastguard Worker ;; 11081*a67afe4dSAndroid Build Coastguard Worker *) func_append newdependency_libs " $deplib" ;; 11082*a67afe4dSAndroid Build Coastguard Worker esac 11083*a67afe4dSAndroid Build Coastguard Worker done 11084*a67afe4dSAndroid Build Coastguard Worker dependency_libs=$newdependency_libs 11085*a67afe4dSAndroid Build Coastguard Worker newdlfiles= 11086*a67afe4dSAndroid Build Coastguard Worker 11087*a67afe4dSAndroid Build Coastguard Worker for lib in $dlfiles; do 11088*a67afe4dSAndroid Build Coastguard Worker case $lib in 11089*a67afe4dSAndroid Build Coastguard Worker *.la) 11090*a67afe4dSAndroid Build Coastguard Worker func_basename "$lib" 11091*a67afe4dSAndroid Build Coastguard Worker name=$func_basename_result 11092*a67afe4dSAndroid Build Coastguard Worker eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11093*a67afe4dSAndroid Build Coastguard Worker test -z "$libdir" && \ 11094*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$lib' is not a valid libtool archive" 11095*a67afe4dSAndroid Build Coastguard Worker func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 11096*a67afe4dSAndroid Build Coastguard Worker ;; 11097*a67afe4dSAndroid Build Coastguard Worker *) func_append newdlfiles " $lib" ;; 11098*a67afe4dSAndroid Build Coastguard Worker esac 11099*a67afe4dSAndroid Build Coastguard Worker done 11100*a67afe4dSAndroid Build Coastguard Worker dlfiles=$newdlfiles 11101*a67afe4dSAndroid Build Coastguard Worker newdlprefiles= 11102*a67afe4dSAndroid Build Coastguard Worker for lib in $dlprefiles; do 11103*a67afe4dSAndroid Build Coastguard Worker case $lib in 11104*a67afe4dSAndroid Build Coastguard Worker *.la) 11105*a67afe4dSAndroid Build Coastguard Worker # Only pass preopened files to the pseudo-archive (for 11106*a67afe4dSAndroid Build Coastguard Worker # eventual linking with the app. that links it) if we 11107*a67afe4dSAndroid Build Coastguard Worker # didn't already link the preopened objects directly into 11108*a67afe4dSAndroid Build Coastguard Worker # the library: 11109*a67afe4dSAndroid Build Coastguard Worker func_basename "$lib" 11110*a67afe4dSAndroid Build Coastguard Worker name=$func_basename_result 11111*a67afe4dSAndroid Build Coastguard Worker eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11112*a67afe4dSAndroid Build Coastguard Worker test -z "$libdir" && \ 11113*a67afe4dSAndroid Build Coastguard Worker func_fatal_error "'$lib' is not a valid libtool archive" 11114*a67afe4dSAndroid Build Coastguard Worker func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 11115*a67afe4dSAndroid Build Coastguard Worker ;; 11116*a67afe4dSAndroid Build Coastguard Worker esac 11117*a67afe4dSAndroid Build Coastguard Worker done 11118*a67afe4dSAndroid Build Coastguard Worker dlprefiles=$newdlprefiles 11119*a67afe4dSAndroid Build Coastguard Worker else 11120*a67afe4dSAndroid Build Coastguard Worker newdlfiles= 11121*a67afe4dSAndroid Build Coastguard Worker for lib in $dlfiles; do 11122*a67afe4dSAndroid Build Coastguard Worker case $lib in 11123*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11124*a67afe4dSAndroid Build Coastguard Worker *) abs=`pwd`"/$lib" ;; 11125*a67afe4dSAndroid Build Coastguard Worker esac 11126*a67afe4dSAndroid Build Coastguard Worker func_append newdlfiles " $abs" 11127*a67afe4dSAndroid Build Coastguard Worker done 11128*a67afe4dSAndroid Build Coastguard Worker dlfiles=$newdlfiles 11129*a67afe4dSAndroid Build Coastguard Worker newdlprefiles= 11130*a67afe4dSAndroid Build Coastguard Worker for lib in $dlprefiles; do 11131*a67afe4dSAndroid Build Coastguard Worker case $lib in 11132*a67afe4dSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11133*a67afe4dSAndroid Build Coastguard Worker *) abs=`pwd`"/$lib" ;; 11134*a67afe4dSAndroid Build Coastguard Worker esac 11135*a67afe4dSAndroid Build Coastguard Worker func_append newdlprefiles " $abs" 11136*a67afe4dSAndroid Build Coastguard Worker done 11137*a67afe4dSAndroid Build Coastguard Worker dlprefiles=$newdlprefiles 11138*a67afe4dSAndroid Build Coastguard Worker fi 11139*a67afe4dSAndroid Build Coastguard Worker $RM $output 11140*a67afe4dSAndroid Build Coastguard Worker # place dlname in correct position for cygwin 11141*a67afe4dSAndroid Build Coastguard Worker # In fact, it would be nice if we could use this code for all target 11142*a67afe4dSAndroid Build Coastguard Worker # systems that can't hard-code library paths into their executables 11143*a67afe4dSAndroid Build Coastguard Worker # and that have no shared library path variable independent of PATH, 11144*a67afe4dSAndroid Build Coastguard Worker # but it turns out we can't easily determine that from inspecting 11145*a67afe4dSAndroid Build Coastguard Worker # libtool variables, so we have to hard-code the OSs to which it 11146*a67afe4dSAndroid Build Coastguard Worker # applies here; at the moment, that means platforms that use the PE 11147*a67afe4dSAndroid Build Coastguard Worker # object format with DLL files. See the long comment at the top of 11148*a67afe4dSAndroid Build Coastguard Worker # tests/bindir.at for full details. 11149*a67afe4dSAndroid Build Coastguard Worker tdlname=$dlname 11150*a67afe4dSAndroid Build Coastguard Worker case $host,$output,$installed,$module,$dlname in 11151*a67afe4dSAndroid Build Coastguard Worker *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 11152*a67afe4dSAndroid Build Coastguard Worker # If a -bindir argument was supplied, place the dll there. 11153*a67afe4dSAndroid Build Coastguard Worker if test -n "$bindir"; then 11154*a67afe4dSAndroid Build Coastguard Worker func_relative_path "$install_libdir" "$bindir" 11155*a67afe4dSAndroid Build Coastguard Worker tdlname=$func_relative_path_result/$dlname 11156*a67afe4dSAndroid Build Coastguard Worker else 11157*a67afe4dSAndroid Build Coastguard Worker # Otherwise fall back on heuristic. 11158*a67afe4dSAndroid Build Coastguard Worker tdlname=../bin/$dlname 11159*a67afe4dSAndroid Build Coastguard Worker fi 11160*a67afe4dSAndroid Build Coastguard Worker ;; 11161*a67afe4dSAndroid Build Coastguard Worker esac 11162*a67afe4dSAndroid Build Coastguard Worker $ECHO > $output "\ 11163*a67afe4dSAndroid Build Coastguard Worker# $outputname - a libtool library file 11164*a67afe4dSAndroid Build Coastguard Worker# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 11165*a67afe4dSAndroid Build Coastguard Worker# 11166*a67afe4dSAndroid Build Coastguard Worker# Please DO NOT delete this file! 11167*a67afe4dSAndroid Build Coastguard Worker# It is necessary for linking the library. 11168*a67afe4dSAndroid Build Coastguard Worker 11169*a67afe4dSAndroid Build Coastguard Worker# The name that we can dlopen(3). 11170*a67afe4dSAndroid Build Coastguard Workerdlname='$tdlname' 11171*a67afe4dSAndroid Build Coastguard Worker 11172*a67afe4dSAndroid Build Coastguard Worker# Names of this library. 11173*a67afe4dSAndroid Build Coastguard Workerlibrary_names='$library_names' 11174*a67afe4dSAndroid Build Coastguard Worker 11175*a67afe4dSAndroid Build Coastguard Worker# The name of the static archive. 11176*a67afe4dSAndroid Build Coastguard Workerold_library='$old_library' 11177*a67afe4dSAndroid Build Coastguard Worker 11178*a67afe4dSAndroid Build Coastguard Worker# Linker flags that cannot go in dependency_libs. 11179*a67afe4dSAndroid Build Coastguard Workerinherited_linker_flags='$new_inherited_linker_flags' 11180*a67afe4dSAndroid Build Coastguard Worker 11181*a67afe4dSAndroid Build Coastguard Worker# Libraries that this one depends upon. 11182*a67afe4dSAndroid Build Coastguard Workerdependency_libs='$dependency_libs' 11183*a67afe4dSAndroid Build Coastguard Worker 11184*a67afe4dSAndroid Build Coastguard Worker# Names of additional weak libraries provided by this library 11185*a67afe4dSAndroid Build Coastguard Workerweak_library_names='$weak_libs' 11186*a67afe4dSAndroid Build Coastguard Worker 11187*a67afe4dSAndroid Build Coastguard Worker# Version information for $libname. 11188*a67afe4dSAndroid Build Coastguard Workercurrent=$current 11189*a67afe4dSAndroid Build Coastguard Workerage=$age 11190*a67afe4dSAndroid Build Coastguard Workerrevision=$revision 11191*a67afe4dSAndroid Build Coastguard Worker 11192*a67afe4dSAndroid Build Coastguard Worker# Is this an already installed library? 11193*a67afe4dSAndroid Build Coastguard Workerinstalled=$installed 11194*a67afe4dSAndroid Build Coastguard Worker 11195*a67afe4dSAndroid Build Coastguard Worker# Should we warn about portability when linking against -modules? 11196*a67afe4dSAndroid Build Coastguard Workershouldnotlink=$module 11197*a67afe4dSAndroid Build Coastguard Worker 11198*a67afe4dSAndroid Build Coastguard Worker# Files to dlopen/dlpreopen 11199*a67afe4dSAndroid Build Coastguard Workerdlopen='$dlfiles' 11200*a67afe4dSAndroid Build Coastguard Workerdlpreopen='$dlprefiles' 11201*a67afe4dSAndroid Build Coastguard Worker 11202*a67afe4dSAndroid Build Coastguard Worker# Directory that this library needs to be installed in: 11203*a67afe4dSAndroid Build Coastguard Workerlibdir='$install_libdir'" 11204*a67afe4dSAndroid Build Coastguard Worker if test no,yes = "$installed,$need_relink"; then 11205*a67afe4dSAndroid Build Coastguard Worker $ECHO >> $output "\ 11206*a67afe4dSAndroid Build Coastguard Workerrelink_command=\"$relink_command\"" 11207*a67afe4dSAndroid Build Coastguard Worker fi 11208*a67afe4dSAndroid Build Coastguard Worker done 11209*a67afe4dSAndroid Build Coastguard Worker } 11210*a67afe4dSAndroid Build Coastguard Worker 11211*a67afe4dSAndroid Build Coastguard Worker # Do a symbolic link so that the libtool archive can be found in 11212*a67afe4dSAndroid Build Coastguard Worker # LD_LIBRARY_PATH before the program is installed. 11213*a67afe4dSAndroid Build Coastguard Worker func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 11214*a67afe4dSAndroid Build Coastguard Worker ;; 11215*a67afe4dSAndroid Build Coastguard Worker esac 11216*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 11217*a67afe4dSAndroid Build Coastguard Worker} 11218*a67afe4dSAndroid Build Coastguard Worker 11219*a67afe4dSAndroid Build Coastguard Workerif test link = "$opt_mode" || test relink = "$opt_mode"; then 11220*a67afe4dSAndroid Build Coastguard Worker func_mode_link ${1+"$@"} 11221*a67afe4dSAndroid Build Coastguard Workerfi 11222*a67afe4dSAndroid Build Coastguard Worker 11223*a67afe4dSAndroid Build Coastguard Worker 11224*a67afe4dSAndroid Build Coastguard Worker# func_mode_uninstall arg... 11225*a67afe4dSAndroid Build Coastguard Workerfunc_mode_uninstall () 11226*a67afe4dSAndroid Build Coastguard Worker{ 11227*a67afe4dSAndroid Build Coastguard Worker $debug_cmd 11228*a67afe4dSAndroid Build Coastguard Worker 11229*a67afe4dSAndroid Build Coastguard Worker RM=$nonopt 11230*a67afe4dSAndroid Build Coastguard Worker files= 11231*a67afe4dSAndroid Build Coastguard Worker rmforce=false 11232*a67afe4dSAndroid Build Coastguard Worker exit_status=0 11233*a67afe4dSAndroid Build Coastguard Worker 11234*a67afe4dSAndroid Build Coastguard Worker # This variable tells wrapper scripts just to set variables rather 11235*a67afe4dSAndroid Build Coastguard Worker # than running their programs. 11236*a67afe4dSAndroid Build Coastguard Worker libtool_install_magic=$magic 11237*a67afe4dSAndroid Build Coastguard Worker 11238*a67afe4dSAndroid Build Coastguard Worker for arg 11239*a67afe4dSAndroid Build Coastguard Worker do 11240*a67afe4dSAndroid Build Coastguard Worker case $arg in 11241*a67afe4dSAndroid Build Coastguard Worker -f) func_append RM " $arg"; rmforce=: ;; 11242*a67afe4dSAndroid Build Coastguard Worker -*) func_append RM " $arg" ;; 11243*a67afe4dSAndroid Build Coastguard Worker *) func_append files " $arg" ;; 11244*a67afe4dSAndroid Build Coastguard Worker esac 11245*a67afe4dSAndroid Build Coastguard Worker done 11246*a67afe4dSAndroid Build Coastguard Worker 11247*a67afe4dSAndroid Build Coastguard Worker test -z "$RM" && \ 11248*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "you must specify an RM program" 11249*a67afe4dSAndroid Build Coastguard Worker 11250*a67afe4dSAndroid Build Coastguard Worker rmdirs= 11251*a67afe4dSAndroid Build Coastguard Worker 11252*a67afe4dSAndroid Build Coastguard Worker for file in $files; do 11253*a67afe4dSAndroid Build Coastguard Worker func_dirname "$file" "" "." 11254*a67afe4dSAndroid Build Coastguard Worker dir=$func_dirname_result 11255*a67afe4dSAndroid Build Coastguard Worker if test . = "$dir"; then 11256*a67afe4dSAndroid Build Coastguard Worker odir=$objdir 11257*a67afe4dSAndroid Build Coastguard Worker else 11258*a67afe4dSAndroid Build Coastguard Worker odir=$dir/$objdir 11259*a67afe4dSAndroid Build Coastguard Worker fi 11260*a67afe4dSAndroid Build Coastguard Worker func_basename "$file" 11261*a67afe4dSAndroid Build Coastguard Worker name=$func_basename_result 11262*a67afe4dSAndroid Build Coastguard Worker test uninstall = "$opt_mode" && odir=$dir 11263*a67afe4dSAndroid Build Coastguard Worker 11264*a67afe4dSAndroid Build Coastguard Worker # Remember odir for removal later, being careful to avoid duplicates 11265*a67afe4dSAndroid Build Coastguard Worker if test clean = "$opt_mode"; then 11266*a67afe4dSAndroid Build Coastguard Worker case " $rmdirs " in 11267*a67afe4dSAndroid Build Coastguard Worker *" $odir "*) ;; 11268*a67afe4dSAndroid Build Coastguard Worker *) func_append rmdirs " $odir" ;; 11269*a67afe4dSAndroid Build Coastguard Worker esac 11270*a67afe4dSAndroid Build Coastguard Worker fi 11271*a67afe4dSAndroid Build Coastguard Worker 11272*a67afe4dSAndroid Build Coastguard Worker # Don't error if the file doesn't exist and rm -f was used. 11273*a67afe4dSAndroid Build Coastguard Worker if { test -L "$file"; } >/dev/null 2>&1 || 11274*a67afe4dSAndroid Build Coastguard Worker { test -h "$file"; } >/dev/null 2>&1 || 11275*a67afe4dSAndroid Build Coastguard Worker test -f "$file"; then 11276*a67afe4dSAndroid Build Coastguard Worker : 11277*a67afe4dSAndroid Build Coastguard Worker elif test -d "$file"; then 11278*a67afe4dSAndroid Build Coastguard Worker exit_status=1 11279*a67afe4dSAndroid Build Coastguard Worker continue 11280*a67afe4dSAndroid Build Coastguard Worker elif $rmforce; then 11281*a67afe4dSAndroid Build Coastguard Worker continue 11282*a67afe4dSAndroid Build Coastguard Worker fi 11283*a67afe4dSAndroid Build Coastguard Worker 11284*a67afe4dSAndroid Build Coastguard Worker rmfiles=$file 11285*a67afe4dSAndroid Build Coastguard Worker 11286*a67afe4dSAndroid Build Coastguard Worker case $name in 11287*a67afe4dSAndroid Build Coastguard Worker *.la) 11288*a67afe4dSAndroid Build Coastguard Worker # Possibly a libtool archive, so verify it. 11289*a67afe4dSAndroid Build Coastguard Worker if func_lalib_p "$file"; then 11290*a67afe4dSAndroid Build Coastguard Worker func_source $dir/$name 11291*a67afe4dSAndroid Build Coastguard Worker 11292*a67afe4dSAndroid Build Coastguard Worker # Delete the libtool libraries and symlinks. 11293*a67afe4dSAndroid Build Coastguard Worker for n in $library_names; do 11294*a67afe4dSAndroid Build Coastguard Worker func_append rmfiles " $odir/$n" 11295*a67afe4dSAndroid Build Coastguard Worker done 11296*a67afe4dSAndroid Build Coastguard Worker test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11297*a67afe4dSAndroid Build Coastguard Worker 11298*a67afe4dSAndroid Build Coastguard Worker case $opt_mode in 11299*a67afe4dSAndroid Build Coastguard Worker clean) 11300*a67afe4dSAndroid Build Coastguard Worker case " $library_names " in 11301*a67afe4dSAndroid Build Coastguard Worker *" $dlname "*) ;; 11302*a67afe4dSAndroid Build Coastguard Worker *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11303*a67afe4dSAndroid Build Coastguard Worker esac 11304*a67afe4dSAndroid Build Coastguard Worker test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11305*a67afe4dSAndroid Build Coastguard Worker ;; 11306*a67afe4dSAndroid Build Coastguard Worker uninstall) 11307*a67afe4dSAndroid Build Coastguard Worker if test -n "$library_names"; then 11308*a67afe4dSAndroid Build Coastguard Worker # Do each command in the postuninstall commands. 11309*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11310*a67afe4dSAndroid Build Coastguard Worker fi 11311*a67afe4dSAndroid Build Coastguard Worker 11312*a67afe4dSAndroid Build Coastguard Worker if test -n "$old_library"; then 11313*a67afe4dSAndroid Build Coastguard Worker # Do each command in the old_postuninstall commands. 11314*a67afe4dSAndroid Build Coastguard Worker func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11315*a67afe4dSAndroid Build Coastguard Worker fi 11316*a67afe4dSAndroid Build Coastguard Worker # FIXME: should reinstall the best remaining shared library. 11317*a67afe4dSAndroid Build Coastguard Worker ;; 11318*a67afe4dSAndroid Build Coastguard Worker esac 11319*a67afe4dSAndroid Build Coastguard Worker fi 11320*a67afe4dSAndroid Build Coastguard Worker ;; 11321*a67afe4dSAndroid Build Coastguard Worker 11322*a67afe4dSAndroid Build Coastguard Worker *.lo) 11323*a67afe4dSAndroid Build Coastguard Worker # Possibly a libtool object, so verify it. 11324*a67afe4dSAndroid Build Coastguard Worker if func_lalib_p "$file"; then 11325*a67afe4dSAndroid Build Coastguard Worker 11326*a67afe4dSAndroid Build Coastguard Worker # Read the .lo file 11327*a67afe4dSAndroid Build Coastguard Worker func_source $dir/$name 11328*a67afe4dSAndroid Build Coastguard Worker 11329*a67afe4dSAndroid Build Coastguard Worker # Add PIC object to the list of files to remove. 11330*a67afe4dSAndroid Build Coastguard Worker if test -n "$pic_object" && test none != "$pic_object"; then 11331*a67afe4dSAndroid Build Coastguard Worker func_append rmfiles " $dir/$pic_object" 11332*a67afe4dSAndroid Build Coastguard Worker fi 11333*a67afe4dSAndroid Build Coastguard Worker 11334*a67afe4dSAndroid Build Coastguard Worker # Add non-PIC object to the list of files to remove. 11335*a67afe4dSAndroid Build Coastguard Worker if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11336*a67afe4dSAndroid Build Coastguard Worker func_append rmfiles " $dir/$non_pic_object" 11337*a67afe4dSAndroid Build Coastguard Worker fi 11338*a67afe4dSAndroid Build Coastguard Worker fi 11339*a67afe4dSAndroid Build Coastguard Worker ;; 11340*a67afe4dSAndroid Build Coastguard Worker 11341*a67afe4dSAndroid Build Coastguard Worker *) 11342*a67afe4dSAndroid Build Coastguard Worker if test clean = "$opt_mode"; then 11343*a67afe4dSAndroid Build Coastguard Worker noexename=$name 11344*a67afe4dSAndroid Build Coastguard Worker case $file in 11345*a67afe4dSAndroid Build Coastguard Worker *.exe) 11346*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '.exe' "$file" 11347*a67afe4dSAndroid Build Coastguard Worker file=$func_stripname_result 11348*a67afe4dSAndroid Build Coastguard Worker func_stripname '' '.exe' "$name" 11349*a67afe4dSAndroid Build Coastguard Worker noexename=$func_stripname_result 11350*a67afe4dSAndroid Build Coastguard Worker # $file with .exe has already been added to rmfiles, 11351*a67afe4dSAndroid Build Coastguard Worker # add $file without .exe 11352*a67afe4dSAndroid Build Coastguard Worker func_append rmfiles " $file" 11353*a67afe4dSAndroid Build Coastguard Worker ;; 11354*a67afe4dSAndroid Build Coastguard Worker esac 11355*a67afe4dSAndroid Build Coastguard Worker # Do a test to see if this is a libtool program. 11356*a67afe4dSAndroid Build Coastguard Worker if func_ltwrapper_p "$file"; then 11357*a67afe4dSAndroid Build Coastguard Worker if func_ltwrapper_executable_p "$file"; then 11358*a67afe4dSAndroid Build Coastguard Worker func_ltwrapper_scriptname "$file" 11359*a67afe4dSAndroid Build Coastguard Worker relink_command= 11360*a67afe4dSAndroid Build Coastguard Worker func_source $func_ltwrapper_scriptname_result 11361*a67afe4dSAndroid Build Coastguard Worker func_append rmfiles " $func_ltwrapper_scriptname_result" 11362*a67afe4dSAndroid Build Coastguard Worker else 11363*a67afe4dSAndroid Build Coastguard Worker relink_command= 11364*a67afe4dSAndroid Build Coastguard Worker func_source $dir/$noexename 11365*a67afe4dSAndroid Build Coastguard Worker fi 11366*a67afe4dSAndroid Build Coastguard Worker 11367*a67afe4dSAndroid Build Coastguard Worker # note $name still contains .exe if it was in $file originally 11368*a67afe4dSAndroid Build Coastguard Worker # as does the version of $file that was added into $rmfiles 11369*a67afe4dSAndroid Build Coastguard Worker func_append rmfiles " $odir/$name $odir/${name}S.$objext" 11370*a67afe4dSAndroid Build Coastguard Worker if test yes = "$fast_install" && test -n "$relink_command"; then 11371*a67afe4dSAndroid Build Coastguard Worker func_append rmfiles " $odir/lt-$name" 11372*a67afe4dSAndroid Build Coastguard Worker fi 11373*a67afe4dSAndroid Build Coastguard Worker if test "X$noexename" != "X$name"; then 11374*a67afe4dSAndroid Build Coastguard Worker func_append rmfiles " $odir/lt-$noexename.c" 11375*a67afe4dSAndroid Build Coastguard Worker fi 11376*a67afe4dSAndroid Build Coastguard Worker fi 11377*a67afe4dSAndroid Build Coastguard Worker fi 11378*a67afe4dSAndroid Build Coastguard Worker ;; 11379*a67afe4dSAndroid Build Coastguard Worker esac 11380*a67afe4dSAndroid Build Coastguard Worker func_show_eval "$RM $rmfiles" 'exit_status=1' 11381*a67afe4dSAndroid Build Coastguard Worker done 11382*a67afe4dSAndroid Build Coastguard Worker 11383*a67afe4dSAndroid Build Coastguard Worker # Try to remove the $objdir's in the directories where we deleted files 11384*a67afe4dSAndroid Build Coastguard Worker for dir in $rmdirs; do 11385*a67afe4dSAndroid Build Coastguard Worker if test -d "$dir"; then 11386*a67afe4dSAndroid Build Coastguard Worker func_show_eval "rmdir $dir >/dev/null 2>&1" 11387*a67afe4dSAndroid Build Coastguard Worker fi 11388*a67afe4dSAndroid Build Coastguard Worker done 11389*a67afe4dSAndroid Build Coastguard Worker 11390*a67afe4dSAndroid Build Coastguard Worker exit $exit_status 11391*a67afe4dSAndroid Build Coastguard Worker} 11392*a67afe4dSAndroid Build Coastguard Worker 11393*a67afe4dSAndroid Build Coastguard Workerif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 11394*a67afe4dSAndroid Build Coastguard Worker func_mode_uninstall ${1+"$@"} 11395*a67afe4dSAndroid Build Coastguard Workerfi 11396*a67afe4dSAndroid Build Coastguard Worker 11397*a67afe4dSAndroid Build Coastguard Workertest -z "$opt_mode" && { 11398*a67afe4dSAndroid Build Coastguard Worker help=$generic_help 11399*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "you must specify a MODE" 11400*a67afe4dSAndroid Build Coastguard Worker} 11401*a67afe4dSAndroid Build Coastguard Worker 11402*a67afe4dSAndroid Build Coastguard Workertest -z "$exec_cmd" && \ 11403*a67afe4dSAndroid Build Coastguard Worker func_fatal_help "invalid operation mode '$opt_mode'" 11404*a67afe4dSAndroid Build Coastguard Worker 11405*a67afe4dSAndroid Build Coastguard Workerif test -n "$exec_cmd"; then 11406*a67afe4dSAndroid Build Coastguard Worker eval exec "$exec_cmd" 11407*a67afe4dSAndroid Build Coastguard Worker exit $EXIT_FAILURE 11408*a67afe4dSAndroid Build Coastguard Workerfi 11409*a67afe4dSAndroid Build Coastguard Worker 11410*a67afe4dSAndroid Build Coastguard Workerexit $exit_status 11411*a67afe4dSAndroid Build Coastguard Worker 11412*a67afe4dSAndroid Build Coastguard Worker 11413*a67afe4dSAndroid Build Coastguard Worker# The TAGs below are defined such that we never get into a situation 11414*a67afe4dSAndroid Build Coastguard Worker# where we disable both kinds of libraries. Given conflicting 11415*a67afe4dSAndroid Build Coastguard Worker# choices, we go for a static library, that is the most portable, 11416*a67afe4dSAndroid Build Coastguard Worker# since we can't tell whether shared libraries were disabled because 11417*a67afe4dSAndroid Build Coastguard Worker# the user asked for that or because the platform doesn't support 11418*a67afe4dSAndroid Build Coastguard Worker# them. This is particularly important on AIX, because we don't 11419*a67afe4dSAndroid Build Coastguard Worker# support having both static and shared libraries enabled at the same 11420*a67afe4dSAndroid Build Coastguard Worker# time on that platform, so we default to a shared-only configuration. 11421*a67afe4dSAndroid Build Coastguard Worker# If a disable-shared tag is given, we'll fallback to a static-only 11422*a67afe4dSAndroid Build Coastguard Worker# configuration. But we'll never go from static-only to shared-only. 11423*a67afe4dSAndroid Build Coastguard Worker 11424*a67afe4dSAndroid Build Coastguard Worker# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11425*a67afe4dSAndroid Build Coastguard Workerbuild_libtool_libs=no 11426*a67afe4dSAndroid Build Coastguard Workerbuild_old_libs=yes 11427*a67afe4dSAndroid Build Coastguard Worker# ### END LIBTOOL TAG CONFIG: disable-shared 11428*a67afe4dSAndroid Build Coastguard Worker 11429*a67afe4dSAndroid Build Coastguard Worker# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11430*a67afe4dSAndroid Build Coastguard Workerbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11431*a67afe4dSAndroid Build Coastguard Worker# ### END LIBTOOL TAG CONFIG: disable-static 11432*a67afe4dSAndroid Build Coastguard Worker 11433*a67afe4dSAndroid Build Coastguard Worker# Local Variables: 11434*a67afe4dSAndroid Build Coastguard Worker# mode:shell-script 11435*a67afe4dSAndroid Build Coastguard Worker# sh-indentation:2 11436*a67afe4dSAndroid Build Coastguard Worker# End: 11437