1*663afb9bSAndroid Build Coastguard Worker#! /bin/sh 2*663afb9bSAndroid Build Coastguard Worker## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 3*663afb9bSAndroid Build Coastguard Worker## by inline-source v2018-07-24.06 4*663afb9bSAndroid Build Coastguard Worker 5*663afb9bSAndroid Build Coastguard Worker# libtool (GNU libtool) 2.4.6.42-b88ce-dirty 6*663afb9bSAndroid Build Coastguard Worker# Provide generalized library-building support services. 7*663afb9bSAndroid Build Coastguard Worker# Written by Gordon Matzigkeit <[email protected]>, 1996 8*663afb9bSAndroid Build Coastguard Worker 9*663afb9bSAndroid Build Coastguard Worker# Copyright (C) 1996-2018 Free Software Foundation, Inc. 10*663afb9bSAndroid Build Coastguard Worker# This is free software; see the source for copying conditions. There is NO 11*663afb9bSAndroid Build Coastguard Worker# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12*663afb9bSAndroid Build Coastguard Worker 13*663afb9bSAndroid Build Coastguard Worker# GNU Libtool is free software; you can redistribute it and/or modify 14*663afb9bSAndroid Build Coastguard Worker# it under the terms of the GNU General Public License as published by 15*663afb9bSAndroid Build Coastguard Worker# the Free Software Foundation; either version 2 of the License, or 16*663afb9bSAndroid Build Coastguard Worker# (at your option) any later version. 17*663afb9bSAndroid Build Coastguard Worker# 18*663afb9bSAndroid Build Coastguard Worker# As a special exception to the GNU General Public License, 19*663afb9bSAndroid Build Coastguard Worker# if you distribute this file as part of a program or library that 20*663afb9bSAndroid Build Coastguard Worker# is built using GNU Libtool, you may include this file under the 21*663afb9bSAndroid Build Coastguard Worker# same distribution terms that you use for the rest of that program. 22*663afb9bSAndroid Build Coastguard Worker# 23*663afb9bSAndroid Build Coastguard Worker# GNU Libtool is distributed in the hope that it will be useful, but 24*663afb9bSAndroid Build Coastguard Worker# WITHOUT ANY WARRANTY; without even the implied warranty of 25*663afb9bSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26*663afb9bSAndroid Build Coastguard Worker# General Public License for more details. 27*663afb9bSAndroid Build Coastguard Worker# 28*663afb9bSAndroid Build Coastguard Worker# You should have received a copy of the GNU General Public License 29*663afb9bSAndroid Build Coastguard Worker# along with this program. If not, see <http://www.gnu.org/licenses/>. 30*663afb9bSAndroid Build Coastguard Worker 31*663afb9bSAndroid Build Coastguard Worker 32*663afb9bSAndroid Build Coastguard WorkerPROGRAM=libtool 33*663afb9bSAndroid Build Coastguard WorkerPACKAGE=libtool 34*663afb9bSAndroid Build Coastguard WorkerVERSION=2.4.6.42-b88ce-dirty 35*663afb9bSAndroid Build Coastguard Workerpackage_revision=2.4.6.42 36*663afb9bSAndroid Build Coastguard Worker 37*663afb9bSAndroid Build Coastguard Worker 38*663afb9bSAndroid Build Coastguard Worker## ------ ## 39*663afb9bSAndroid Build Coastguard Worker## Usage. ## 40*663afb9bSAndroid Build Coastguard Worker## ------ ## 41*663afb9bSAndroid Build Coastguard Worker 42*663afb9bSAndroid Build Coastguard Worker# Run './libtool --help' for help with using this script from the 43*663afb9bSAndroid Build Coastguard Worker# command line. 44*663afb9bSAndroid Build Coastguard Worker 45*663afb9bSAndroid Build Coastguard Worker 46*663afb9bSAndroid Build Coastguard Worker## ------------------------------- ## 47*663afb9bSAndroid Build Coastguard Worker## User overridable command paths. ## 48*663afb9bSAndroid Build Coastguard Worker## ------------------------------- ## 49*663afb9bSAndroid Build Coastguard Worker 50*663afb9bSAndroid Build Coastguard Worker# After configure completes, it has a better idea of some of the 51*663afb9bSAndroid Build Coastguard Worker# shell tools we need than the defaults used by the functions shared 52*663afb9bSAndroid Build Coastguard Worker# with bootstrap, so set those here where they can still be over- 53*663afb9bSAndroid Build Coastguard Worker# ridden by the user, but otherwise take precedence. 54*663afb9bSAndroid Build Coastguard Worker 55*663afb9bSAndroid Build Coastguard Worker: ${AUTOCONF="autoconf"} 56*663afb9bSAndroid Build Coastguard Worker: ${AUTOMAKE="automake"} 57*663afb9bSAndroid Build Coastguard Worker 58*663afb9bSAndroid Build Coastguard Worker 59*663afb9bSAndroid Build Coastguard Worker## -------------------------- ## 60*663afb9bSAndroid Build Coastguard Worker## Source external libraries. ## 61*663afb9bSAndroid Build Coastguard Worker## -------------------------- ## 62*663afb9bSAndroid Build Coastguard Worker 63*663afb9bSAndroid Build Coastguard Worker# Much of our low-level functionality needs to be sourced from external 64*663afb9bSAndroid Build Coastguard Worker# libraries, which are installed to $pkgauxdir. 65*663afb9bSAndroid Build Coastguard Worker 66*663afb9bSAndroid Build Coastguard Worker# Set a version string for this script. 67*663afb9bSAndroid Build Coastguard Workerscriptversion=2018-07-24.06; # UTC 68*663afb9bSAndroid Build Coastguard Worker 69*663afb9bSAndroid Build Coastguard Worker# General shell script boiler plate, and helper functions. 70*663afb9bSAndroid Build Coastguard Worker# Written by Gary V. Vaughan, 2004 71*663afb9bSAndroid Build Coastguard Worker 72*663afb9bSAndroid Build Coastguard Worker# This is free software. There is NO warranty; not even for 73*663afb9bSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 74*663afb9bSAndroid Build Coastguard Worker# 75*663afb9bSAndroid Build Coastguard Worker# Copyright (C) 2004-2018 Bootstrap Authors 76*663afb9bSAndroid Build Coastguard Worker# 77*663afb9bSAndroid Build Coastguard Worker# This file is dual licensed under the terms of the MIT license 78*663afb9bSAndroid Build Coastguard Worker# <https://opensource.org/license/MIT>, and GPL version 3 or later 79*663afb9bSAndroid Build Coastguard Worker# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 80*663afb9bSAndroid Build Coastguard Worker# these licenses when using or redistributing this software or any of 81*663afb9bSAndroid Build Coastguard Worker# the files within it. See the URLs above, or the file `LICENSE` 82*663afb9bSAndroid Build Coastguard Worker# included in the Bootstrap distribution for the full license texts. 83*663afb9bSAndroid Build Coastguard Worker 84*663afb9bSAndroid Build Coastguard Worker# Please report bugs or propose patches to: 85*663afb9bSAndroid Build Coastguard Worker# <https://github.com/gnulib-modules/bootstrap/issues> 86*663afb9bSAndroid Build Coastguard Worker 87*663afb9bSAndroid Build Coastguard Worker 88*663afb9bSAndroid Build Coastguard Worker## ------ ## 89*663afb9bSAndroid Build Coastguard Worker## Usage. ## 90*663afb9bSAndroid Build Coastguard Worker## ------ ## 91*663afb9bSAndroid Build Coastguard Worker 92*663afb9bSAndroid Build Coastguard Worker# Evaluate this file near the top of your script to gain access to 93*663afb9bSAndroid Build Coastguard Worker# the functions and variables defined here: 94*663afb9bSAndroid Build Coastguard Worker# 95*663afb9bSAndroid Build Coastguard Worker# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 96*663afb9bSAndroid Build Coastguard Worker# 97*663afb9bSAndroid Build Coastguard Worker# If you need to override any of the default environment variable 98*663afb9bSAndroid Build Coastguard Worker# settings, do that before evaluating this file. 99*663afb9bSAndroid Build Coastguard Worker 100*663afb9bSAndroid Build Coastguard Worker 101*663afb9bSAndroid Build Coastguard Worker## -------------------- ## 102*663afb9bSAndroid Build Coastguard Worker## Shell normalisation. ## 103*663afb9bSAndroid Build Coastguard Worker## -------------------- ## 104*663afb9bSAndroid Build Coastguard Worker 105*663afb9bSAndroid Build Coastguard Worker# Some shells need a little help to be as Bourne compatible as possible. 106*663afb9bSAndroid Build Coastguard Worker# Before doing anything else, make sure all that help has been provided! 107*663afb9bSAndroid Build Coastguard Worker 108*663afb9bSAndroid Build Coastguard WorkerDUALCASE=1; export DUALCASE # for MKS sh 109*663afb9bSAndroid Build Coastguard Workerif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 110*663afb9bSAndroid Build Coastguard Worker emulate sh 111*663afb9bSAndroid Build Coastguard Worker NULLCMD=: 112*663afb9bSAndroid Build Coastguard Worker # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 113*663afb9bSAndroid Build Coastguard Worker # is contrary to our usage. Disable this feature. 114*663afb9bSAndroid Build Coastguard Worker alias -g '${1+"$@"}'='"$@"' 115*663afb9bSAndroid Build Coastguard Worker setopt NO_GLOB_SUBST 116*663afb9bSAndroid Build Coastguard Workerelse 117*663afb9bSAndroid Build Coastguard Worker case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 118*663afb9bSAndroid Build Coastguard Workerfi 119*663afb9bSAndroid Build Coastguard Worker 120*663afb9bSAndroid Build Coastguard Worker# NLS nuisances: We save the old values in case they are required later. 121*663afb9bSAndroid Build Coastguard Worker_G_user_locale= 122*663afb9bSAndroid Build Coastguard Worker_G_safe_locale= 123*663afb9bSAndroid Build Coastguard Workerfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 124*663afb9bSAndroid Build Coastguard Workerdo 125*663afb9bSAndroid Build Coastguard Worker eval "if test set = \"\${$_G_var+set}\"; then 126*663afb9bSAndroid Build Coastguard Worker save_$_G_var=\$$_G_var 127*663afb9bSAndroid Build Coastguard Worker $_G_var=C 128*663afb9bSAndroid Build Coastguard Worker export $_G_var 129*663afb9bSAndroid Build Coastguard Worker _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 130*663afb9bSAndroid Build Coastguard Worker _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 131*663afb9bSAndroid Build Coastguard Worker fi" 132*663afb9bSAndroid Build Coastguard Workerdone 133*663afb9bSAndroid Build Coastguard Worker 134*663afb9bSAndroid Build Coastguard Worker# Make sure IFS has a sensible default 135*663afb9bSAndroid Build Coastguard Workersp=' ' 136*663afb9bSAndroid Build Coastguard Workernl=' 137*663afb9bSAndroid Build Coastguard Worker' 138*663afb9bSAndroid Build Coastguard WorkerIFS="$sp $nl" 139*663afb9bSAndroid Build Coastguard Worker 140*663afb9bSAndroid Build Coastguard Worker# There are apparently some retarded systems that use ';' as a PATH separator! 141*663afb9bSAndroid Build Coastguard Workerif test "${PATH_SEPARATOR+set}" != set; then 142*663afb9bSAndroid Build Coastguard Worker PATH_SEPARATOR=: 143*663afb9bSAndroid Build Coastguard Worker (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 144*663afb9bSAndroid Build Coastguard Worker (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 145*663afb9bSAndroid Build Coastguard Worker PATH_SEPARATOR=';' 146*663afb9bSAndroid Build Coastguard Worker } 147*663afb9bSAndroid Build Coastguard Workerfi 148*663afb9bSAndroid Build Coastguard Worker 149*663afb9bSAndroid Build Coastguard Worker 150*663afb9bSAndroid Build Coastguard Worker# func_unset VAR 151*663afb9bSAndroid Build Coastguard Worker# -------------- 152*663afb9bSAndroid Build Coastguard Worker# Portably unset VAR. 153*663afb9bSAndroid Build Coastguard Worker# In some shells, an 'unset VAR' statement leaves a non-zero return 154*663afb9bSAndroid Build Coastguard Worker# status if VAR is already unset, which might be problematic if the 155*663afb9bSAndroid Build Coastguard Worker# statement is used at the end of a function (thus poisoning its return 156*663afb9bSAndroid Build Coastguard Worker# value) or when 'set -e' is active (causing even a spurious abort of 157*663afb9bSAndroid Build Coastguard Worker# the script in this case). 158*663afb9bSAndroid Build Coastguard Workerfunc_unset () 159*663afb9bSAndroid Build Coastguard Worker{ 160*663afb9bSAndroid Build Coastguard Worker { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } 161*663afb9bSAndroid Build Coastguard Worker} 162*663afb9bSAndroid Build Coastguard Worker 163*663afb9bSAndroid Build Coastguard Worker 164*663afb9bSAndroid Build Coastguard Worker# Make sure CDPATH doesn't cause `cd` commands to output the target dir. 165*663afb9bSAndroid Build Coastguard Workerfunc_unset CDPATH 166*663afb9bSAndroid Build Coastguard Worker 167*663afb9bSAndroid Build Coastguard Worker# Make sure ${,E,F}GREP behave sanely. 168*663afb9bSAndroid Build Coastguard Workerfunc_unset GREP_OPTIONS 169*663afb9bSAndroid Build Coastguard Worker 170*663afb9bSAndroid Build Coastguard Worker 171*663afb9bSAndroid Build Coastguard Worker## ------------------------- ## 172*663afb9bSAndroid Build Coastguard Worker## Locate command utilities. ## 173*663afb9bSAndroid Build Coastguard Worker## ------------------------- ## 174*663afb9bSAndroid Build Coastguard Worker 175*663afb9bSAndroid Build Coastguard Worker 176*663afb9bSAndroid Build Coastguard Worker# func_executable_p FILE 177*663afb9bSAndroid Build Coastguard Worker# ---------------------- 178*663afb9bSAndroid Build Coastguard Worker# Check that FILE is an executable regular file. 179*663afb9bSAndroid Build Coastguard Workerfunc_executable_p () 180*663afb9bSAndroid Build Coastguard Worker{ 181*663afb9bSAndroid Build Coastguard Worker test -f "$1" && test -x "$1" 182*663afb9bSAndroid Build Coastguard Worker} 183*663afb9bSAndroid Build Coastguard Worker 184*663afb9bSAndroid Build Coastguard Worker 185*663afb9bSAndroid Build Coastguard Worker# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 186*663afb9bSAndroid Build Coastguard Worker# -------------------------------------------- 187*663afb9bSAndroid Build Coastguard Worker# Search for either a program that responds to --version with output 188*663afb9bSAndroid Build Coastguard Worker# containing "GNU", or else returned by CHECK_FUNC otherwise, by 189*663afb9bSAndroid Build Coastguard Worker# trying all the directories in PATH with each of the elements of 190*663afb9bSAndroid Build Coastguard Worker# PROGS_LIST. 191*663afb9bSAndroid Build Coastguard Worker# 192*663afb9bSAndroid Build Coastguard Worker# CHECK_FUNC should accept the path to a candidate program, and 193*663afb9bSAndroid Build Coastguard Worker# set $func_check_prog_result if it truncates its output less than 194*663afb9bSAndroid Build Coastguard Worker# $_G_path_prog_max characters. 195*663afb9bSAndroid Build Coastguard Workerfunc_path_progs () 196*663afb9bSAndroid Build Coastguard Worker{ 197*663afb9bSAndroid Build Coastguard Worker _G_progs_list=$1 198*663afb9bSAndroid Build Coastguard Worker _G_check_func=$2 199*663afb9bSAndroid Build Coastguard Worker _G_PATH=${3-"$PATH"} 200*663afb9bSAndroid Build Coastguard Worker 201*663afb9bSAndroid Build Coastguard Worker _G_path_prog_max=0 202*663afb9bSAndroid Build Coastguard Worker _G_path_prog_found=false 203*663afb9bSAndroid Build Coastguard Worker _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 204*663afb9bSAndroid Build Coastguard Worker for _G_dir in $_G_PATH; do 205*663afb9bSAndroid Build Coastguard Worker IFS=$_G_save_IFS 206*663afb9bSAndroid Build Coastguard Worker test -z "$_G_dir" && _G_dir=. 207*663afb9bSAndroid Build Coastguard Worker for _G_prog_name in $_G_progs_list; do 208*663afb9bSAndroid Build Coastguard Worker for _exeext in '' .EXE; do 209*663afb9bSAndroid Build Coastguard Worker _G_path_prog=$_G_dir/$_G_prog_name$_exeext 210*663afb9bSAndroid Build Coastguard Worker func_executable_p "$_G_path_prog" || continue 211*663afb9bSAndroid Build Coastguard Worker case `"$_G_path_prog" --version 2>&1` in 212*663afb9bSAndroid Build Coastguard Worker *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 213*663afb9bSAndroid Build Coastguard Worker *) $_G_check_func $_G_path_prog 214*663afb9bSAndroid Build Coastguard Worker func_path_progs_result=$func_check_prog_result 215*663afb9bSAndroid Build Coastguard Worker ;; 216*663afb9bSAndroid Build Coastguard Worker esac 217*663afb9bSAndroid Build Coastguard Worker $_G_path_prog_found && break 3 218*663afb9bSAndroid Build Coastguard Worker done 219*663afb9bSAndroid Build Coastguard Worker done 220*663afb9bSAndroid Build Coastguard Worker done 221*663afb9bSAndroid Build Coastguard Worker IFS=$_G_save_IFS 222*663afb9bSAndroid Build Coastguard Worker test -z "$func_path_progs_result" && { 223*663afb9bSAndroid Build Coastguard Worker echo "no acceptable sed could be found in \$PATH" >&2 224*663afb9bSAndroid Build Coastguard Worker exit 1 225*663afb9bSAndroid Build Coastguard Worker } 226*663afb9bSAndroid Build Coastguard Worker} 227*663afb9bSAndroid Build Coastguard Worker 228*663afb9bSAndroid Build Coastguard Worker 229*663afb9bSAndroid Build Coastguard Worker# We want to be able to use the functions in this file before configure 230*663afb9bSAndroid Build Coastguard Worker# has figured out where the best binaries are kept, which means we have 231*663afb9bSAndroid Build Coastguard Worker# to search for them ourselves - except when the results are already set 232*663afb9bSAndroid Build Coastguard Worker# where we skip the searches. 233*663afb9bSAndroid Build Coastguard Worker 234*663afb9bSAndroid Build Coastguard Worker# Unless the user overrides by setting SED, search the path for either GNU 235*663afb9bSAndroid Build Coastguard Worker# sed, or the sed that truncates its output the least. 236*663afb9bSAndroid Build Coastguard Workertest -z "$SED" && { 237*663afb9bSAndroid Build Coastguard Worker _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 238*663afb9bSAndroid Build Coastguard Worker for _G_i in 1 2 3 4 5 6 7; do 239*663afb9bSAndroid Build Coastguard Worker _G_sed_script=$_G_sed_script$nl$_G_sed_script 240*663afb9bSAndroid Build Coastguard Worker done 241*663afb9bSAndroid Build Coastguard Worker echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 242*663afb9bSAndroid Build Coastguard Worker _G_sed_script= 243*663afb9bSAndroid Build Coastguard Worker 244*663afb9bSAndroid Build Coastguard Worker func_check_prog_sed () 245*663afb9bSAndroid Build Coastguard Worker { 246*663afb9bSAndroid Build Coastguard Worker _G_path_prog=$1 247*663afb9bSAndroid Build Coastguard Worker 248*663afb9bSAndroid Build Coastguard Worker _G_count=0 249*663afb9bSAndroid Build Coastguard Worker printf 0123456789 >conftest.in 250*663afb9bSAndroid Build Coastguard Worker while : 251*663afb9bSAndroid Build Coastguard Worker do 252*663afb9bSAndroid Build Coastguard Worker cat conftest.in conftest.in >conftest.tmp 253*663afb9bSAndroid Build Coastguard Worker mv conftest.tmp conftest.in 254*663afb9bSAndroid Build Coastguard Worker cp conftest.in conftest.nl 255*663afb9bSAndroid Build Coastguard Worker echo '' >> conftest.nl 256*663afb9bSAndroid Build Coastguard Worker "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 257*663afb9bSAndroid Build Coastguard Worker diff conftest.out conftest.nl >/dev/null 2>&1 || break 258*663afb9bSAndroid Build Coastguard Worker _G_count=`expr $_G_count + 1` 259*663afb9bSAndroid Build Coastguard Worker if test "$_G_count" -gt "$_G_path_prog_max"; then 260*663afb9bSAndroid Build Coastguard Worker # Best one so far, save it but keep looking for a better one 261*663afb9bSAndroid Build Coastguard Worker func_check_prog_result=$_G_path_prog 262*663afb9bSAndroid Build Coastguard Worker _G_path_prog_max=$_G_count 263*663afb9bSAndroid Build Coastguard Worker fi 264*663afb9bSAndroid Build Coastguard Worker # 10*(2^10) chars as input seems more than enough 265*663afb9bSAndroid Build Coastguard Worker test 10 -lt "$_G_count" && break 266*663afb9bSAndroid Build Coastguard Worker done 267*663afb9bSAndroid Build Coastguard Worker rm -f conftest.in conftest.tmp conftest.nl conftest.out 268*663afb9bSAndroid Build Coastguard Worker } 269*663afb9bSAndroid Build Coastguard Worker 270*663afb9bSAndroid Build Coastguard Worker func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" 271*663afb9bSAndroid Build Coastguard Worker rm -f conftest.sed 272*663afb9bSAndroid Build Coastguard Worker SED=$func_path_progs_result 273*663afb9bSAndroid Build Coastguard Worker} 274*663afb9bSAndroid Build Coastguard Worker 275*663afb9bSAndroid Build Coastguard Worker 276*663afb9bSAndroid Build Coastguard Worker# Unless the user overrides by setting GREP, search the path for either GNU 277*663afb9bSAndroid Build Coastguard Worker# grep, or the grep that truncates its output the least. 278*663afb9bSAndroid Build Coastguard Workertest -z "$GREP" && { 279*663afb9bSAndroid Build Coastguard Worker func_check_prog_grep () 280*663afb9bSAndroid Build Coastguard Worker { 281*663afb9bSAndroid Build Coastguard Worker _G_path_prog=$1 282*663afb9bSAndroid Build Coastguard Worker 283*663afb9bSAndroid Build Coastguard Worker _G_count=0 284*663afb9bSAndroid Build Coastguard Worker _G_path_prog_max=0 285*663afb9bSAndroid Build Coastguard Worker printf 0123456789 >conftest.in 286*663afb9bSAndroid Build Coastguard Worker while : 287*663afb9bSAndroid Build Coastguard Worker do 288*663afb9bSAndroid Build Coastguard Worker cat conftest.in conftest.in >conftest.tmp 289*663afb9bSAndroid Build Coastguard Worker mv conftest.tmp conftest.in 290*663afb9bSAndroid Build Coastguard Worker cp conftest.in conftest.nl 291*663afb9bSAndroid Build Coastguard Worker echo 'GREP' >> conftest.nl 292*663afb9bSAndroid Build Coastguard Worker "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 293*663afb9bSAndroid Build Coastguard Worker diff conftest.out conftest.nl >/dev/null 2>&1 || break 294*663afb9bSAndroid Build Coastguard Worker _G_count=`expr $_G_count + 1` 295*663afb9bSAndroid Build Coastguard Worker if test "$_G_count" -gt "$_G_path_prog_max"; then 296*663afb9bSAndroid Build Coastguard Worker # Best one so far, save it but keep looking for a better one 297*663afb9bSAndroid Build Coastguard Worker func_check_prog_result=$_G_path_prog 298*663afb9bSAndroid Build Coastguard Worker _G_path_prog_max=$_G_count 299*663afb9bSAndroid Build Coastguard Worker fi 300*663afb9bSAndroid Build Coastguard Worker # 10*(2^10) chars as input seems more than enough 301*663afb9bSAndroid Build Coastguard Worker test 10 -lt "$_G_count" && break 302*663afb9bSAndroid Build Coastguard Worker done 303*663afb9bSAndroid Build Coastguard Worker rm -f conftest.in conftest.tmp conftest.nl conftest.out 304*663afb9bSAndroid Build Coastguard Worker } 305*663afb9bSAndroid Build Coastguard Worker 306*663afb9bSAndroid Build Coastguard Worker func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" 307*663afb9bSAndroid Build Coastguard Worker GREP=$func_path_progs_result 308*663afb9bSAndroid Build Coastguard Worker} 309*663afb9bSAndroid Build Coastguard Worker 310*663afb9bSAndroid Build Coastguard Worker 311*663afb9bSAndroid Build Coastguard Worker## ------------------------------- ## 312*663afb9bSAndroid Build Coastguard Worker## User overridable command paths. ## 313*663afb9bSAndroid Build Coastguard Worker## ------------------------------- ## 314*663afb9bSAndroid Build Coastguard Worker 315*663afb9bSAndroid Build Coastguard Worker# All uppercase variable names are used for environment variables. These 316*663afb9bSAndroid Build Coastguard Worker# variables can be overridden by the user before calling a script that 317*663afb9bSAndroid Build Coastguard Worker# uses them if a suitable command of that name is not already available 318*663afb9bSAndroid Build Coastguard Worker# in the command search PATH. 319*663afb9bSAndroid Build Coastguard Worker 320*663afb9bSAndroid Build Coastguard Worker: ${CP="cp -f"} 321*663afb9bSAndroid Build Coastguard Worker: ${ECHO="printf %s\n"} 322*663afb9bSAndroid Build Coastguard Worker: ${EGREP="$GREP -E"} 323*663afb9bSAndroid Build Coastguard Worker: ${FGREP="$GREP -F"} 324*663afb9bSAndroid Build Coastguard Worker: ${LN_S="ln -s"} 325*663afb9bSAndroid Build Coastguard Worker: ${MAKE="make"} 326*663afb9bSAndroid Build Coastguard Worker: ${MKDIR="mkdir"} 327*663afb9bSAndroid Build Coastguard Worker: ${MV="mv -f"} 328*663afb9bSAndroid Build Coastguard Worker: ${RM="rm -f"} 329*663afb9bSAndroid Build Coastguard Worker: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 330*663afb9bSAndroid Build Coastguard Worker 331*663afb9bSAndroid Build Coastguard Worker 332*663afb9bSAndroid Build Coastguard Worker## -------------------- ## 333*663afb9bSAndroid Build Coastguard Worker## Useful sed snippets. ## 334*663afb9bSAndroid Build Coastguard Worker## -------------------- ## 335*663afb9bSAndroid Build Coastguard Worker 336*663afb9bSAndroid Build Coastguard Workersed_dirname='s|/[^/]*$||' 337*663afb9bSAndroid Build Coastguard Workersed_basename='s|^.*/||' 338*663afb9bSAndroid Build Coastguard Worker 339*663afb9bSAndroid Build Coastguard Worker# Sed substitution that helps us do robust quoting. It backslashifies 340*663afb9bSAndroid Build Coastguard Worker# metacharacters that are still active within double-quoted strings. 341*663afb9bSAndroid Build Coastguard Workersed_quote_subst='s|\([`"$\\]\)|\\\1|g' 342*663afb9bSAndroid Build Coastguard Worker 343*663afb9bSAndroid Build Coastguard Worker# Same as above, but do not quote variable references. 344*663afb9bSAndroid Build Coastguard Workersed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 345*663afb9bSAndroid Build Coastguard Worker 346*663afb9bSAndroid Build Coastguard Worker# Sed substitution that turns a string into a regex matching for the 347*663afb9bSAndroid Build Coastguard Worker# string literally. 348*663afb9bSAndroid Build Coastguard Workersed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 349*663afb9bSAndroid Build Coastguard Worker 350*663afb9bSAndroid Build Coastguard Worker# Sed substitution that converts a w32 file name or path 351*663afb9bSAndroid Build Coastguard Worker# that contains forward slashes, into one that contains 352*663afb9bSAndroid Build Coastguard Worker# (escaped) backslashes. A very naive implementation. 353*663afb9bSAndroid Build Coastguard Workersed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 354*663afb9bSAndroid Build Coastguard Worker 355*663afb9bSAndroid Build Coastguard Worker# Re-'\' parameter expansions in output of sed_double_quote_subst that 356*663afb9bSAndroid Build Coastguard Worker# were '\'-ed in input to the same. If an odd number of '\' preceded a 357*663afb9bSAndroid Build Coastguard Worker# '$' in input to sed_double_quote_subst, that '$' was protected from 358*663afb9bSAndroid Build Coastguard Worker# expansion. Since each input '\' is now two '\'s, look for any number 359*663afb9bSAndroid Build Coastguard Worker# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 360*663afb9bSAndroid Build Coastguard Worker_G_bs='\\' 361*663afb9bSAndroid Build Coastguard Worker_G_bs2='\\\\' 362*663afb9bSAndroid Build Coastguard Worker_G_bs4='\\\\\\\\' 363*663afb9bSAndroid Build Coastguard Worker_G_dollar='\$' 364*663afb9bSAndroid Build Coastguard Workersed_double_backslash="\ 365*663afb9bSAndroid Build Coastguard Worker s/$_G_bs4/&\\ 366*663afb9bSAndroid Build Coastguard Worker/g 367*663afb9bSAndroid Build Coastguard Worker s/^$_G_bs2$_G_dollar/$_G_bs&/ 368*663afb9bSAndroid Build Coastguard Worker s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 369*663afb9bSAndroid Build Coastguard Worker s/\n//g" 370*663afb9bSAndroid Build Coastguard Worker 371*663afb9bSAndroid Build Coastguard Worker 372*663afb9bSAndroid Build Coastguard Worker## ----------------- ## 373*663afb9bSAndroid Build Coastguard Worker## Global variables. ## 374*663afb9bSAndroid Build Coastguard Worker## ----------------- ## 375*663afb9bSAndroid Build Coastguard Worker 376*663afb9bSAndroid Build Coastguard Worker# Except for the global variables explicitly listed below, the following 377*663afb9bSAndroid Build Coastguard Worker# functions in the '^func_' namespace, and the '^require_' namespace 378*663afb9bSAndroid Build Coastguard Worker# variables initialised in the 'Resource management' section, sourcing 379*663afb9bSAndroid Build Coastguard Worker# this file will not pollute your global namespace with anything 380*663afb9bSAndroid Build Coastguard Worker# else. There's no portable way to scope variables in Bourne shell 381*663afb9bSAndroid Build Coastguard Worker# though, so actually running these functions will sometimes place 382*663afb9bSAndroid Build Coastguard Worker# results into a variable named after the function, and often use 383*663afb9bSAndroid Build Coastguard Worker# temporary variables in the '^_G_' namespace. If you are careful to 384*663afb9bSAndroid Build Coastguard Worker# avoid using those namespaces casually in your sourcing script, things 385*663afb9bSAndroid Build Coastguard Worker# should continue to work as you expect. And, of course, you can freely 386*663afb9bSAndroid Build Coastguard Worker# overwrite any of the functions or variables defined here before 387*663afb9bSAndroid Build Coastguard Worker# calling anything to customize them. 388*663afb9bSAndroid Build Coastguard Worker 389*663afb9bSAndroid Build Coastguard WorkerEXIT_SUCCESS=0 390*663afb9bSAndroid Build Coastguard WorkerEXIT_FAILURE=1 391*663afb9bSAndroid Build Coastguard WorkerEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 392*663afb9bSAndroid Build Coastguard WorkerEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 393*663afb9bSAndroid Build Coastguard Worker 394*663afb9bSAndroid Build Coastguard Worker# Allow overriding, eg assuming that you follow the convention of 395*663afb9bSAndroid Build Coastguard Worker# putting '$debug_cmd' at the start of all your functions, you can get 396*663afb9bSAndroid Build Coastguard Worker# bash to show function call trace with: 397*663afb9bSAndroid Build Coastguard Worker# 398*663afb9bSAndroid Build Coastguard Worker# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 399*663afb9bSAndroid Build Coastguard Workerdebug_cmd=${debug_cmd-":"} 400*663afb9bSAndroid Build Coastguard Workerexit_cmd=: 401*663afb9bSAndroid Build Coastguard Worker 402*663afb9bSAndroid Build Coastguard Worker# By convention, finish your script with: 403*663afb9bSAndroid Build Coastguard Worker# 404*663afb9bSAndroid Build Coastguard Worker# exit $exit_status 405*663afb9bSAndroid Build Coastguard Worker# 406*663afb9bSAndroid Build Coastguard Worker# so that you can set exit_status to non-zero if you want to indicate 407*663afb9bSAndroid Build Coastguard Worker# something went wrong during execution without actually bailing out at 408*663afb9bSAndroid Build Coastguard Worker# the point of failure. 409*663afb9bSAndroid Build Coastguard Workerexit_status=$EXIT_SUCCESS 410*663afb9bSAndroid Build Coastguard Worker 411*663afb9bSAndroid Build Coastguard Worker# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 412*663afb9bSAndroid Build Coastguard Worker# is ksh but when the shell is invoked as "sh" and the current value of 413*663afb9bSAndroid Build Coastguard Worker# the _XPG environment variable is not equal to 1 (one), the special 414*663afb9bSAndroid Build Coastguard Worker# positional parameter $0, within a function call, is the name of the 415*663afb9bSAndroid Build Coastguard Worker# function. 416*663afb9bSAndroid Build Coastguard Workerprogpath=$0 417*663afb9bSAndroid Build Coastguard Worker 418*663afb9bSAndroid Build Coastguard Worker# The name of this program. 419*663afb9bSAndroid Build Coastguard Workerprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 420*663afb9bSAndroid Build Coastguard Worker 421*663afb9bSAndroid Build Coastguard Worker# Make sure we have an absolute progpath for reexecution: 422*663afb9bSAndroid Build Coastguard Workercase $progpath in 423*663afb9bSAndroid Build Coastguard Worker [\\/]*|[A-Za-z]:\\*) ;; 424*663afb9bSAndroid Build Coastguard Worker *[\\/]*) 425*663afb9bSAndroid Build Coastguard Worker progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 426*663afb9bSAndroid Build Coastguard Worker progdir=`cd "$progdir" && pwd` 427*663afb9bSAndroid Build Coastguard Worker progpath=$progdir/$progname 428*663afb9bSAndroid Build Coastguard Worker ;; 429*663afb9bSAndroid Build Coastguard Worker *) 430*663afb9bSAndroid Build Coastguard Worker _G_IFS=$IFS 431*663afb9bSAndroid Build Coastguard Worker IFS=${PATH_SEPARATOR-:} 432*663afb9bSAndroid Build Coastguard Worker for progdir in $PATH; do 433*663afb9bSAndroid Build Coastguard Worker IFS=$_G_IFS 434*663afb9bSAndroid Build Coastguard Worker test -x "$progdir/$progname" && break 435*663afb9bSAndroid Build Coastguard Worker done 436*663afb9bSAndroid Build Coastguard Worker IFS=$_G_IFS 437*663afb9bSAndroid Build Coastguard Worker test -n "$progdir" || progdir=`pwd` 438*663afb9bSAndroid Build Coastguard Worker progpath=$progdir/$progname 439*663afb9bSAndroid Build Coastguard Worker ;; 440*663afb9bSAndroid Build Coastguard Workeresac 441*663afb9bSAndroid Build Coastguard Worker 442*663afb9bSAndroid Build Coastguard Worker 443*663afb9bSAndroid Build Coastguard Worker## ----------------- ## 444*663afb9bSAndroid Build Coastguard Worker## Standard options. ## 445*663afb9bSAndroid Build Coastguard Worker## ----------------- ## 446*663afb9bSAndroid Build Coastguard Worker 447*663afb9bSAndroid Build Coastguard Worker# The following options affect the operation of the functions defined 448*663afb9bSAndroid Build Coastguard Worker# below, and should be set appropriately depending on run-time para- 449*663afb9bSAndroid Build Coastguard Worker# meters passed on the command line. 450*663afb9bSAndroid Build Coastguard Worker 451*663afb9bSAndroid Build Coastguard Workeropt_dry_run=false 452*663afb9bSAndroid Build Coastguard Workeropt_quiet=false 453*663afb9bSAndroid Build Coastguard Workeropt_verbose=false 454*663afb9bSAndroid Build Coastguard Worker 455*663afb9bSAndroid Build Coastguard Worker# Categories 'all' and 'none' are always available. Append any others 456*663afb9bSAndroid Build Coastguard Worker# you will pass as the first argument to func_warning from your own 457*663afb9bSAndroid Build Coastguard Worker# code. 458*663afb9bSAndroid Build Coastguard Workerwarning_categories= 459*663afb9bSAndroid Build Coastguard Worker 460*663afb9bSAndroid Build Coastguard Worker# By default, display warnings according to 'opt_warning_types'. Set 461*663afb9bSAndroid Build Coastguard Worker# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 462*663afb9bSAndroid Build Coastguard Worker# treat the next displayed warning as a fatal error. 463*663afb9bSAndroid Build Coastguard Workerwarning_func=func_warn_and_continue 464*663afb9bSAndroid Build Coastguard Worker 465*663afb9bSAndroid Build Coastguard Worker# Set to 'all' to display all warnings, 'none' to suppress all 466*663afb9bSAndroid Build Coastguard Worker# warnings, or a space delimited list of some subset of 467*663afb9bSAndroid Build Coastguard Worker# 'warning_categories' to display only the listed warnings. 468*663afb9bSAndroid Build Coastguard Workeropt_warning_types=all 469*663afb9bSAndroid Build Coastguard Worker 470*663afb9bSAndroid Build Coastguard Worker 471*663afb9bSAndroid Build Coastguard Worker## -------------------- ## 472*663afb9bSAndroid Build Coastguard Worker## Resource management. ## 473*663afb9bSAndroid Build Coastguard Worker## -------------------- ## 474*663afb9bSAndroid Build Coastguard Worker 475*663afb9bSAndroid Build Coastguard Worker# This section contains definitions for functions that each ensure a 476*663afb9bSAndroid Build Coastguard Worker# particular resource (a file, or a non-empty configuration variable for 477*663afb9bSAndroid Build Coastguard Worker# example) is available, and if appropriate to extract default values 478*663afb9bSAndroid Build Coastguard Worker# from pertinent package files. Call them using their associated 479*663afb9bSAndroid Build Coastguard Worker# 'require_*' variable to ensure that they are executed, at most, once. 480*663afb9bSAndroid Build Coastguard Worker# 481*663afb9bSAndroid Build Coastguard Worker# It's entirely deliberate that calling these functions can set 482*663afb9bSAndroid Build Coastguard Worker# variables that don't obey the namespace limitations obeyed by the rest 483*663afb9bSAndroid Build Coastguard Worker# of this file, in order that that they be as useful as possible to 484*663afb9bSAndroid Build Coastguard Worker# callers. 485*663afb9bSAndroid Build Coastguard Worker 486*663afb9bSAndroid Build Coastguard Worker 487*663afb9bSAndroid Build Coastguard Worker# require_term_colors 488*663afb9bSAndroid Build Coastguard Worker# ------------------- 489*663afb9bSAndroid Build Coastguard Worker# Allow display of bold text on terminals that support it. 490*663afb9bSAndroid Build Coastguard Workerrequire_term_colors=func_require_term_colors 491*663afb9bSAndroid Build Coastguard Workerfunc_require_term_colors () 492*663afb9bSAndroid Build Coastguard Worker{ 493*663afb9bSAndroid Build Coastguard Worker $debug_cmd 494*663afb9bSAndroid Build Coastguard Worker 495*663afb9bSAndroid Build Coastguard Worker test -t 1 && { 496*663afb9bSAndroid Build Coastguard Worker # COLORTERM and USE_ANSI_COLORS environment variables take 497*663afb9bSAndroid Build Coastguard Worker # precedence, because most terminfo databases neglect to describe 498*663afb9bSAndroid Build Coastguard Worker # whether color sequences are supported. 499*663afb9bSAndroid Build Coastguard Worker test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 500*663afb9bSAndroid Build Coastguard Worker 501*663afb9bSAndroid Build Coastguard Worker if test 1 = "$USE_ANSI_COLORS"; then 502*663afb9bSAndroid Build Coastguard Worker # Standard ANSI escape sequences 503*663afb9bSAndroid Build Coastguard Worker tc_reset='[0m' 504*663afb9bSAndroid Build Coastguard Worker tc_bold='[1m'; tc_standout='[7m' 505*663afb9bSAndroid Build Coastguard Worker tc_red='[31m'; tc_green='[32m' 506*663afb9bSAndroid Build Coastguard Worker tc_blue='[34m'; tc_cyan='[36m' 507*663afb9bSAndroid Build Coastguard Worker else 508*663afb9bSAndroid Build Coastguard Worker # Otherwise trust the terminfo database after all. 509*663afb9bSAndroid Build Coastguard Worker test -n "`tput sgr0 2>/dev/null`" && { 510*663afb9bSAndroid Build Coastguard Worker tc_reset=`tput sgr0` 511*663afb9bSAndroid Build Coastguard Worker test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 512*663afb9bSAndroid Build Coastguard Worker tc_standout=$tc_bold 513*663afb9bSAndroid Build Coastguard Worker test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 514*663afb9bSAndroid Build Coastguard Worker test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 515*663afb9bSAndroid Build Coastguard Worker test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 516*663afb9bSAndroid Build Coastguard Worker test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 517*663afb9bSAndroid Build Coastguard Worker test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 518*663afb9bSAndroid Build Coastguard Worker } 519*663afb9bSAndroid Build Coastguard Worker fi 520*663afb9bSAndroid Build Coastguard Worker } 521*663afb9bSAndroid Build Coastguard Worker 522*663afb9bSAndroid Build Coastguard Worker require_term_colors=: 523*663afb9bSAndroid Build Coastguard Worker} 524*663afb9bSAndroid Build Coastguard Worker 525*663afb9bSAndroid Build Coastguard Worker 526*663afb9bSAndroid Build Coastguard Worker## ----------------- ## 527*663afb9bSAndroid Build Coastguard Worker## Function library. ## 528*663afb9bSAndroid Build Coastguard Worker## ----------------- ## 529*663afb9bSAndroid Build Coastguard Worker 530*663afb9bSAndroid Build Coastguard Worker# This section contains a variety of useful functions to call in your 531*663afb9bSAndroid Build Coastguard Worker# scripts. Take note of the portable wrappers for features provided by 532*663afb9bSAndroid Build Coastguard Worker# some modern shells, which will fall back to slower equivalents on 533*663afb9bSAndroid Build Coastguard Worker# less featureful shells. 534*663afb9bSAndroid Build Coastguard Worker 535*663afb9bSAndroid Build Coastguard Worker 536*663afb9bSAndroid Build Coastguard Worker# func_append VAR VALUE 537*663afb9bSAndroid Build Coastguard Worker# --------------------- 538*663afb9bSAndroid Build Coastguard Worker# Append VALUE onto the existing contents of VAR. 539*663afb9bSAndroid Build Coastguard Worker 540*663afb9bSAndroid Build Coastguard Worker # We should try to minimise forks, especially on Windows where they are 541*663afb9bSAndroid Build Coastguard Worker # unreasonably slow, so skip the feature probes when bash or zsh are 542*663afb9bSAndroid Build Coastguard Worker # being used: 543*663afb9bSAndroid Build Coastguard Worker if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 544*663afb9bSAndroid Build Coastguard Worker : ${_G_HAVE_ARITH_OP="yes"} 545*663afb9bSAndroid Build Coastguard Worker : ${_G_HAVE_XSI_OPS="yes"} 546*663afb9bSAndroid Build Coastguard Worker # The += operator was introduced in bash 3.1 547*663afb9bSAndroid Build Coastguard Worker case $BASH_VERSION in 548*663afb9bSAndroid Build Coastguard Worker [12].* | 3.0 | 3.0*) ;; 549*663afb9bSAndroid Build Coastguard Worker *) 550*663afb9bSAndroid Build Coastguard Worker : ${_G_HAVE_PLUSEQ_OP="yes"} 551*663afb9bSAndroid Build Coastguard Worker ;; 552*663afb9bSAndroid Build Coastguard Worker esac 553*663afb9bSAndroid Build Coastguard Worker fi 554*663afb9bSAndroid Build Coastguard Worker 555*663afb9bSAndroid Build Coastguard Worker # _G_HAVE_PLUSEQ_OP 556*663afb9bSAndroid Build Coastguard Worker # Can be empty, in which case the shell is probed, "yes" if += is 557*663afb9bSAndroid Build Coastguard Worker # useable or anything else if it does not work. 558*663afb9bSAndroid Build Coastguard Worker test -z "$_G_HAVE_PLUSEQ_OP" \ 559*663afb9bSAndroid Build Coastguard Worker && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 560*663afb9bSAndroid Build Coastguard Worker && _G_HAVE_PLUSEQ_OP=yes 561*663afb9bSAndroid Build Coastguard Worker 562*663afb9bSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_PLUSEQ_OP" 563*663afb9bSAndroid Build Coastguard Workerthen 564*663afb9bSAndroid Build Coastguard Worker # This is an XSI compatible shell, allowing a faster implementation... 565*663afb9bSAndroid Build Coastguard Worker eval 'func_append () 566*663afb9bSAndroid Build Coastguard Worker { 567*663afb9bSAndroid Build Coastguard Worker $debug_cmd 568*663afb9bSAndroid Build Coastguard Worker 569*663afb9bSAndroid Build Coastguard Worker eval "$1+=\$2" 570*663afb9bSAndroid Build Coastguard Worker }' 571*663afb9bSAndroid Build Coastguard Workerelse 572*663afb9bSAndroid Build Coastguard Worker # ...otherwise fall back to using expr, which is often a shell builtin. 573*663afb9bSAndroid Build Coastguard Worker func_append () 574*663afb9bSAndroid Build Coastguard Worker { 575*663afb9bSAndroid Build Coastguard Worker $debug_cmd 576*663afb9bSAndroid Build Coastguard Worker 577*663afb9bSAndroid Build Coastguard Worker eval "$1=\$$1\$2" 578*663afb9bSAndroid Build Coastguard Worker } 579*663afb9bSAndroid Build Coastguard Workerfi 580*663afb9bSAndroid Build Coastguard Worker 581*663afb9bSAndroid Build Coastguard Worker 582*663afb9bSAndroid Build Coastguard Worker# func_append_quoted VAR VALUE 583*663afb9bSAndroid Build Coastguard Worker# ---------------------------- 584*663afb9bSAndroid Build Coastguard Worker# Quote VALUE and append to the end of shell variable VAR, separated 585*663afb9bSAndroid Build Coastguard Worker# by a space. 586*663afb9bSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_PLUSEQ_OP"; then 587*663afb9bSAndroid Build Coastguard Worker eval 'func_append_quoted () 588*663afb9bSAndroid Build Coastguard Worker { 589*663afb9bSAndroid Build Coastguard Worker $debug_cmd 590*663afb9bSAndroid Build Coastguard Worker 591*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$2" 592*663afb9bSAndroid Build Coastguard Worker eval "$1+=\\ \$func_quote_arg_result" 593*663afb9bSAndroid Build Coastguard Worker }' 594*663afb9bSAndroid Build Coastguard Workerelse 595*663afb9bSAndroid Build Coastguard Worker func_append_quoted () 596*663afb9bSAndroid Build Coastguard Worker { 597*663afb9bSAndroid Build Coastguard Worker $debug_cmd 598*663afb9bSAndroid Build Coastguard Worker 599*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$2" 600*663afb9bSAndroid Build Coastguard Worker eval "$1=\$$1\\ \$func_quote_arg_result" 601*663afb9bSAndroid Build Coastguard Worker } 602*663afb9bSAndroid Build Coastguard Workerfi 603*663afb9bSAndroid Build Coastguard Worker 604*663afb9bSAndroid Build Coastguard Worker 605*663afb9bSAndroid Build Coastguard Worker# func_append_uniq VAR VALUE 606*663afb9bSAndroid Build Coastguard Worker# -------------------------- 607*663afb9bSAndroid Build Coastguard Worker# Append unique VALUE onto the existing contents of VAR, assuming 608*663afb9bSAndroid Build Coastguard Worker# entries are delimited by the first character of VALUE. For example: 609*663afb9bSAndroid Build Coastguard Worker# 610*663afb9bSAndroid Build Coastguard Worker# func_append_uniq options " --another-option option-argument" 611*663afb9bSAndroid Build Coastguard Worker# 612*663afb9bSAndroid Build Coastguard Worker# will only append to $options if " --another-option option-argument " 613*663afb9bSAndroid Build Coastguard Worker# is not already present somewhere in $options already (note spaces at 614*663afb9bSAndroid Build Coastguard Worker# each end implied by leading space in second argument). 615*663afb9bSAndroid Build Coastguard Workerfunc_append_uniq () 616*663afb9bSAndroid Build Coastguard Worker{ 617*663afb9bSAndroid Build Coastguard Worker $debug_cmd 618*663afb9bSAndroid Build Coastguard Worker 619*663afb9bSAndroid Build Coastguard Worker eval _G_current_value='`$ECHO $'$1'`' 620*663afb9bSAndroid Build Coastguard Worker _G_delim=`expr "$2" : '\(.\)'` 621*663afb9bSAndroid Build Coastguard Worker 622*663afb9bSAndroid Build Coastguard Worker case $_G_delim$_G_current_value$_G_delim in 623*663afb9bSAndroid Build Coastguard Worker *"$2$_G_delim"*) ;; 624*663afb9bSAndroid Build Coastguard Worker *) func_append "$@" ;; 625*663afb9bSAndroid Build Coastguard Worker esac 626*663afb9bSAndroid Build Coastguard Worker} 627*663afb9bSAndroid Build Coastguard Worker 628*663afb9bSAndroid Build Coastguard Worker 629*663afb9bSAndroid Build Coastguard Worker# func_arith TERM... 630*663afb9bSAndroid Build Coastguard Worker# ------------------ 631*663afb9bSAndroid Build Coastguard Worker# Set func_arith_result to the result of evaluating TERMs. 632*663afb9bSAndroid Build Coastguard Worker test -z "$_G_HAVE_ARITH_OP" \ 633*663afb9bSAndroid Build Coastguard Worker && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 634*663afb9bSAndroid Build Coastguard Worker && _G_HAVE_ARITH_OP=yes 635*663afb9bSAndroid Build Coastguard Worker 636*663afb9bSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_ARITH_OP"; then 637*663afb9bSAndroid Build Coastguard Worker eval 'func_arith () 638*663afb9bSAndroid Build Coastguard Worker { 639*663afb9bSAndroid Build Coastguard Worker $debug_cmd 640*663afb9bSAndroid Build Coastguard Worker 641*663afb9bSAndroid Build Coastguard Worker func_arith_result=$(( $* )) 642*663afb9bSAndroid Build Coastguard Worker }' 643*663afb9bSAndroid Build Coastguard Workerelse 644*663afb9bSAndroid Build Coastguard Worker func_arith () 645*663afb9bSAndroid Build Coastguard Worker { 646*663afb9bSAndroid Build Coastguard Worker $debug_cmd 647*663afb9bSAndroid Build Coastguard Worker 648*663afb9bSAndroid Build Coastguard Worker func_arith_result=`expr "$@"` 649*663afb9bSAndroid Build Coastguard Worker } 650*663afb9bSAndroid Build Coastguard Workerfi 651*663afb9bSAndroid Build Coastguard Worker 652*663afb9bSAndroid Build Coastguard Worker 653*663afb9bSAndroid Build Coastguard Worker# func_basename FILE 654*663afb9bSAndroid Build Coastguard Worker# ------------------ 655*663afb9bSAndroid Build Coastguard Worker# Set func_basename_result to FILE with everything up to and including 656*663afb9bSAndroid Build Coastguard Worker# the last / stripped. 657*663afb9bSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS"; then 658*663afb9bSAndroid Build Coastguard Worker # If this shell supports suffix pattern removal, then use it to avoid 659*663afb9bSAndroid Build Coastguard Worker # forking. Hide the definitions single quotes in case the shell chokes 660*663afb9bSAndroid Build Coastguard Worker # on unsupported syntax... 661*663afb9bSAndroid Build Coastguard Worker _b='func_basename_result=${1##*/}' 662*663afb9bSAndroid Build Coastguard Worker _d='case $1 in 663*663afb9bSAndroid Build Coastguard Worker */*) func_dirname_result=${1%/*}$2 ;; 664*663afb9bSAndroid Build Coastguard Worker * ) func_dirname_result=$3 ;; 665*663afb9bSAndroid Build Coastguard Worker esac' 666*663afb9bSAndroid Build Coastguard Worker 667*663afb9bSAndroid Build Coastguard Workerelse 668*663afb9bSAndroid Build Coastguard Worker # ...otherwise fall back to using sed. 669*663afb9bSAndroid Build Coastguard Worker _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 670*663afb9bSAndroid Build Coastguard Worker _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 671*663afb9bSAndroid Build Coastguard Worker if test "X$func_dirname_result" = "X$1"; then 672*663afb9bSAndroid Build Coastguard Worker func_dirname_result=$3 673*663afb9bSAndroid Build Coastguard Worker else 674*663afb9bSAndroid Build Coastguard Worker func_append func_dirname_result "$2" 675*663afb9bSAndroid Build Coastguard Worker fi' 676*663afb9bSAndroid Build Coastguard Workerfi 677*663afb9bSAndroid Build Coastguard Worker 678*663afb9bSAndroid Build Coastguard Workereval 'func_basename () 679*663afb9bSAndroid Build Coastguard Worker{ 680*663afb9bSAndroid Build Coastguard Worker $debug_cmd 681*663afb9bSAndroid Build Coastguard Worker 682*663afb9bSAndroid Build Coastguard Worker '"$_b"' 683*663afb9bSAndroid Build Coastguard Worker}' 684*663afb9bSAndroid Build Coastguard Worker 685*663afb9bSAndroid Build Coastguard Worker 686*663afb9bSAndroid Build Coastguard Worker# func_dirname FILE APPEND NONDIR_REPLACEMENT 687*663afb9bSAndroid Build Coastguard Worker# ------------------------------------------- 688*663afb9bSAndroid Build Coastguard Worker# Compute the dirname of FILE. If nonempty, add APPEND to the result, 689*663afb9bSAndroid Build Coastguard Worker# otherwise set result to NONDIR_REPLACEMENT. 690*663afb9bSAndroid Build Coastguard Workereval 'func_dirname () 691*663afb9bSAndroid Build Coastguard Worker{ 692*663afb9bSAndroid Build Coastguard Worker $debug_cmd 693*663afb9bSAndroid Build Coastguard Worker 694*663afb9bSAndroid Build Coastguard Worker '"$_d"' 695*663afb9bSAndroid Build Coastguard Worker}' 696*663afb9bSAndroid Build Coastguard Worker 697*663afb9bSAndroid Build Coastguard Worker 698*663afb9bSAndroid Build Coastguard Worker# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 699*663afb9bSAndroid Build Coastguard Worker# -------------------------------------------------------- 700*663afb9bSAndroid Build Coastguard Worker# Perform func_basename and func_dirname in a single function 701*663afb9bSAndroid Build Coastguard Worker# call: 702*663afb9bSAndroid Build Coastguard Worker# dirname: Compute the dirname of FILE. If nonempty, 703*663afb9bSAndroid Build Coastguard Worker# add APPEND to the result, otherwise set result 704*663afb9bSAndroid Build Coastguard Worker# to NONDIR_REPLACEMENT. 705*663afb9bSAndroid Build Coastguard Worker# value returned in "$func_dirname_result" 706*663afb9bSAndroid Build Coastguard Worker# basename: Compute filename of FILE. 707*663afb9bSAndroid Build Coastguard Worker# value retuned in "$func_basename_result" 708*663afb9bSAndroid Build Coastguard Worker# For efficiency, we do not delegate to the functions above but instead 709*663afb9bSAndroid Build Coastguard Worker# duplicate the functionality here. 710*663afb9bSAndroid Build Coastguard Workereval 'func_dirname_and_basename () 711*663afb9bSAndroid Build Coastguard Worker{ 712*663afb9bSAndroid Build Coastguard Worker $debug_cmd 713*663afb9bSAndroid Build Coastguard Worker 714*663afb9bSAndroid Build Coastguard Worker '"$_b"' 715*663afb9bSAndroid Build Coastguard Worker '"$_d"' 716*663afb9bSAndroid Build Coastguard Worker}' 717*663afb9bSAndroid Build Coastguard Worker 718*663afb9bSAndroid Build Coastguard Worker 719*663afb9bSAndroid Build Coastguard Worker# func_echo ARG... 720*663afb9bSAndroid Build Coastguard Worker# ---------------- 721*663afb9bSAndroid Build Coastguard Worker# Echo program name prefixed message. 722*663afb9bSAndroid Build Coastguard Workerfunc_echo () 723*663afb9bSAndroid Build Coastguard Worker{ 724*663afb9bSAndroid Build Coastguard Worker $debug_cmd 725*663afb9bSAndroid Build Coastguard Worker 726*663afb9bSAndroid Build Coastguard Worker _G_message=$* 727*663afb9bSAndroid Build Coastguard Worker 728*663afb9bSAndroid Build Coastguard Worker func_echo_IFS=$IFS 729*663afb9bSAndroid Build Coastguard Worker IFS=$nl 730*663afb9bSAndroid Build Coastguard Worker for _G_line in $_G_message; do 731*663afb9bSAndroid Build Coastguard Worker IFS=$func_echo_IFS 732*663afb9bSAndroid Build Coastguard Worker $ECHO "$progname: $_G_line" 733*663afb9bSAndroid Build Coastguard Worker done 734*663afb9bSAndroid Build Coastguard Worker IFS=$func_echo_IFS 735*663afb9bSAndroid Build Coastguard Worker} 736*663afb9bSAndroid Build Coastguard Worker 737*663afb9bSAndroid Build Coastguard Worker 738*663afb9bSAndroid Build Coastguard Worker# func_echo_all ARG... 739*663afb9bSAndroid Build Coastguard Worker# -------------------- 740*663afb9bSAndroid Build Coastguard Worker# Invoke $ECHO with all args, space-separated. 741*663afb9bSAndroid Build Coastguard Workerfunc_echo_all () 742*663afb9bSAndroid Build Coastguard Worker{ 743*663afb9bSAndroid Build Coastguard Worker $ECHO "$*" 744*663afb9bSAndroid Build Coastguard Worker} 745*663afb9bSAndroid Build Coastguard Worker 746*663afb9bSAndroid Build Coastguard Worker 747*663afb9bSAndroid Build Coastguard Worker# func_echo_infix_1 INFIX ARG... 748*663afb9bSAndroid Build Coastguard Worker# ------------------------------ 749*663afb9bSAndroid Build Coastguard Worker# Echo program name, followed by INFIX on the first line, with any 750*663afb9bSAndroid Build Coastguard Worker# additional lines not showing INFIX. 751*663afb9bSAndroid Build Coastguard Workerfunc_echo_infix_1 () 752*663afb9bSAndroid Build Coastguard Worker{ 753*663afb9bSAndroid Build Coastguard Worker $debug_cmd 754*663afb9bSAndroid Build Coastguard Worker 755*663afb9bSAndroid Build Coastguard Worker $require_term_colors 756*663afb9bSAndroid Build Coastguard Worker 757*663afb9bSAndroid Build Coastguard Worker _G_infix=$1; shift 758*663afb9bSAndroid Build Coastguard Worker _G_indent=$_G_infix 759*663afb9bSAndroid Build Coastguard Worker _G_prefix="$progname: $_G_infix: " 760*663afb9bSAndroid Build Coastguard Worker _G_message=$* 761*663afb9bSAndroid Build Coastguard Worker 762*663afb9bSAndroid Build Coastguard Worker # Strip color escape sequences before counting printable length 763*663afb9bSAndroid Build Coastguard Worker for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 764*663afb9bSAndroid Build Coastguard Worker do 765*663afb9bSAndroid Build Coastguard Worker test -n "$_G_tc" && { 766*663afb9bSAndroid Build Coastguard Worker _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 767*663afb9bSAndroid Build Coastguard Worker _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 768*663afb9bSAndroid Build Coastguard Worker } 769*663afb9bSAndroid Build Coastguard Worker done 770*663afb9bSAndroid Build Coastguard Worker _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 771*663afb9bSAndroid Build Coastguard Worker 772*663afb9bSAndroid Build Coastguard Worker func_echo_infix_1_IFS=$IFS 773*663afb9bSAndroid Build Coastguard Worker IFS=$nl 774*663afb9bSAndroid Build Coastguard Worker for _G_line in $_G_message; do 775*663afb9bSAndroid Build Coastguard Worker IFS=$func_echo_infix_1_IFS 776*663afb9bSAndroid Build Coastguard Worker $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 777*663afb9bSAndroid Build Coastguard Worker _G_prefix=$_G_indent 778*663afb9bSAndroid Build Coastguard Worker done 779*663afb9bSAndroid Build Coastguard Worker IFS=$func_echo_infix_1_IFS 780*663afb9bSAndroid Build Coastguard Worker} 781*663afb9bSAndroid Build Coastguard Worker 782*663afb9bSAndroid Build Coastguard Worker 783*663afb9bSAndroid Build Coastguard Worker# func_error ARG... 784*663afb9bSAndroid Build Coastguard Worker# ----------------- 785*663afb9bSAndroid Build Coastguard Worker# Echo program name prefixed message to standard error. 786*663afb9bSAndroid Build Coastguard Workerfunc_error () 787*663afb9bSAndroid Build Coastguard Worker{ 788*663afb9bSAndroid Build Coastguard Worker $debug_cmd 789*663afb9bSAndroid Build Coastguard Worker 790*663afb9bSAndroid Build Coastguard Worker $require_term_colors 791*663afb9bSAndroid Build Coastguard Worker 792*663afb9bSAndroid Build Coastguard Worker func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 793*663afb9bSAndroid Build Coastguard Worker} 794*663afb9bSAndroid Build Coastguard Worker 795*663afb9bSAndroid Build Coastguard Worker 796*663afb9bSAndroid Build Coastguard Worker# func_fatal_error ARG... 797*663afb9bSAndroid Build Coastguard Worker# ----------------------- 798*663afb9bSAndroid Build Coastguard Worker# Echo program name prefixed message to standard error, and exit. 799*663afb9bSAndroid Build Coastguard Workerfunc_fatal_error () 800*663afb9bSAndroid Build Coastguard Worker{ 801*663afb9bSAndroid Build Coastguard Worker $debug_cmd 802*663afb9bSAndroid Build Coastguard Worker 803*663afb9bSAndroid Build Coastguard Worker func_error "$*" 804*663afb9bSAndroid Build Coastguard Worker exit $EXIT_FAILURE 805*663afb9bSAndroid Build Coastguard Worker} 806*663afb9bSAndroid Build Coastguard Worker 807*663afb9bSAndroid Build Coastguard Worker 808*663afb9bSAndroid Build Coastguard Worker# func_grep EXPRESSION FILENAME 809*663afb9bSAndroid Build Coastguard Worker# ----------------------------- 810*663afb9bSAndroid Build Coastguard Worker# Check whether EXPRESSION matches any line of FILENAME, without output. 811*663afb9bSAndroid Build Coastguard Workerfunc_grep () 812*663afb9bSAndroid Build Coastguard Worker{ 813*663afb9bSAndroid Build Coastguard Worker $debug_cmd 814*663afb9bSAndroid Build Coastguard Worker 815*663afb9bSAndroid Build Coastguard Worker $GREP "$1" "$2" >/dev/null 2>&1 816*663afb9bSAndroid Build Coastguard Worker} 817*663afb9bSAndroid Build Coastguard Worker 818*663afb9bSAndroid Build Coastguard Worker 819*663afb9bSAndroid Build Coastguard Worker# func_len STRING 820*663afb9bSAndroid Build Coastguard Worker# --------------- 821*663afb9bSAndroid Build Coastguard Worker# Set func_len_result to the length of STRING. STRING may not 822*663afb9bSAndroid Build Coastguard Worker# start with a hyphen. 823*663afb9bSAndroid Build Coastguard Worker test -z "$_G_HAVE_XSI_OPS" \ 824*663afb9bSAndroid Build Coastguard Worker && (eval 'x=a/b/c; 825*663afb9bSAndroid Build Coastguard Worker test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 826*663afb9bSAndroid Build Coastguard Worker && _G_HAVE_XSI_OPS=yes 827*663afb9bSAndroid Build Coastguard Worker 828*663afb9bSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS"; then 829*663afb9bSAndroid Build Coastguard Worker eval 'func_len () 830*663afb9bSAndroid Build Coastguard Worker { 831*663afb9bSAndroid Build Coastguard Worker $debug_cmd 832*663afb9bSAndroid Build Coastguard Worker 833*663afb9bSAndroid Build Coastguard Worker func_len_result=${#1} 834*663afb9bSAndroid Build Coastguard Worker }' 835*663afb9bSAndroid Build Coastguard Workerelse 836*663afb9bSAndroid Build Coastguard Worker func_len () 837*663afb9bSAndroid Build Coastguard Worker { 838*663afb9bSAndroid Build Coastguard Worker $debug_cmd 839*663afb9bSAndroid Build Coastguard Worker 840*663afb9bSAndroid Build Coastguard Worker func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 841*663afb9bSAndroid Build Coastguard Worker } 842*663afb9bSAndroid Build Coastguard Workerfi 843*663afb9bSAndroid Build Coastguard Worker 844*663afb9bSAndroid Build Coastguard Worker 845*663afb9bSAndroid Build Coastguard Worker# func_mkdir_p DIRECTORY-PATH 846*663afb9bSAndroid Build Coastguard Worker# --------------------------- 847*663afb9bSAndroid Build Coastguard Worker# Make sure the entire path to DIRECTORY-PATH is available. 848*663afb9bSAndroid Build Coastguard Workerfunc_mkdir_p () 849*663afb9bSAndroid Build Coastguard Worker{ 850*663afb9bSAndroid Build Coastguard Worker $debug_cmd 851*663afb9bSAndroid Build Coastguard Worker 852*663afb9bSAndroid Build Coastguard Worker _G_directory_path=$1 853*663afb9bSAndroid Build Coastguard Worker _G_dir_list= 854*663afb9bSAndroid Build Coastguard Worker 855*663afb9bSAndroid Build Coastguard Worker if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 856*663afb9bSAndroid Build Coastguard Worker 857*663afb9bSAndroid Build Coastguard Worker # Protect directory names starting with '-' 858*663afb9bSAndroid Build Coastguard Worker case $_G_directory_path in 859*663afb9bSAndroid Build Coastguard Worker -*) _G_directory_path=./$_G_directory_path ;; 860*663afb9bSAndroid Build Coastguard Worker esac 861*663afb9bSAndroid Build Coastguard Worker 862*663afb9bSAndroid Build Coastguard Worker # While some portion of DIR does not yet exist... 863*663afb9bSAndroid Build Coastguard Worker while test ! -d "$_G_directory_path"; do 864*663afb9bSAndroid Build Coastguard Worker # ...make a list in topmost first order. Use a colon delimited 865*663afb9bSAndroid Build Coastguard Worker # list incase some portion of path contains whitespace. 866*663afb9bSAndroid Build Coastguard Worker _G_dir_list=$_G_directory_path:$_G_dir_list 867*663afb9bSAndroid Build Coastguard Worker 868*663afb9bSAndroid Build Coastguard Worker # If the last portion added has no slash in it, the list is done 869*663afb9bSAndroid Build Coastguard Worker case $_G_directory_path in */*) ;; *) break ;; esac 870*663afb9bSAndroid Build Coastguard Worker 871*663afb9bSAndroid Build Coastguard Worker # ...otherwise throw away the child directory and loop 872*663afb9bSAndroid Build Coastguard Worker _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 873*663afb9bSAndroid Build Coastguard Worker done 874*663afb9bSAndroid Build Coastguard Worker _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 875*663afb9bSAndroid Build Coastguard Worker 876*663afb9bSAndroid Build Coastguard Worker func_mkdir_p_IFS=$IFS; IFS=: 877*663afb9bSAndroid Build Coastguard Worker for _G_dir in $_G_dir_list; do 878*663afb9bSAndroid Build Coastguard Worker IFS=$func_mkdir_p_IFS 879*663afb9bSAndroid Build Coastguard Worker # mkdir can fail with a 'File exist' error if two processes 880*663afb9bSAndroid Build Coastguard Worker # try to create one of the directories concurrently. Don't 881*663afb9bSAndroid Build Coastguard Worker # stop in that case! 882*663afb9bSAndroid Build Coastguard Worker $MKDIR "$_G_dir" 2>/dev/null || : 883*663afb9bSAndroid Build Coastguard Worker done 884*663afb9bSAndroid Build Coastguard Worker IFS=$func_mkdir_p_IFS 885*663afb9bSAndroid Build Coastguard Worker 886*663afb9bSAndroid Build Coastguard Worker # Bail out if we (or some other process) failed to create a directory. 887*663afb9bSAndroid Build Coastguard Worker test -d "$_G_directory_path" || \ 888*663afb9bSAndroid Build Coastguard Worker func_fatal_error "Failed to create '$1'" 889*663afb9bSAndroid Build Coastguard Worker fi 890*663afb9bSAndroid Build Coastguard Worker} 891*663afb9bSAndroid Build Coastguard Worker 892*663afb9bSAndroid Build Coastguard Worker 893*663afb9bSAndroid Build Coastguard Worker# func_mktempdir [BASENAME] 894*663afb9bSAndroid Build Coastguard Worker# ------------------------- 895*663afb9bSAndroid Build Coastguard Worker# Make a temporary directory that won't clash with other running 896*663afb9bSAndroid Build Coastguard Worker# libtool processes, and avoids race conditions if possible. If 897*663afb9bSAndroid Build Coastguard Worker# given, BASENAME is the basename for that directory. 898*663afb9bSAndroid Build Coastguard Workerfunc_mktempdir () 899*663afb9bSAndroid Build Coastguard Worker{ 900*663afb9bSAndroid Build Coastguard Worker $debug_cmd 901*663afb9bSAndroid Build Coastguard Worker 902*663afb9bSAndroid Build Coastguard Worker _G_template=${TMPDIR-/tmp}/${1-$progname} 903*663afb9bSAndroid Build Coastguard Worker 904*663afb9bSAndroid Build Coastguard Worker if test : = "$opt_dry_run"; then 905*663afb9bSAndroid Build Coastguard Worker # Return a directory name, but don't create it in dry-run mode 906*663afb9bSAndroid Build Coastguard Worker _G_tmpdir=$_G_template-$$ 907*663afb9bSAndroid Build Coastguard Worker else 908*663afb9bSAndroid Build Coastguard Worker 909*663afb9bSAndroid Build Coastguard Worker # If mktemp works, use that first and foremost 910*663afb9bSAndroid Build Coastguard Worker _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 911*663afb9bSAndroid Build Coastguard Worker 912*663afb9bSAndroid Build Coastguard Worker if test ! -d "$_G_tmpdir"; then 913*663afb9bSAndroid Build Coastguard Worker # Failing that, at least try and use $RANDOM to avoid a race 914*663afb9bSAndroid Build Coastguard Worker _G_tmpdir=$_G_template-${RANDOM-0}$$ 915*663afb9bSAndroid Build Coastguard Worker 916*663afb9bSAndroid Build Coastguard Worker func_mktempdir_umask=`umask` 917*663afb9bSAndroid Build Coastguard Worker umask 0077 918*663afb9bSAndroid Build Coastguard Worker $MKDIR "$_G_tmpdir" 919*663afb9bSAndroid Build Coastguard Worker umask $func_mktempdir_umask 920*663afb9bSAndroid Build Coastguard Worker fi 921*663afb9bSAndroid Build Coastguard Worker 922*663afb9bSAndroid Build Coastguard Worker # If we're not in dry-run mode, bomb out on failure 923*663afb9bSAndroid Build Coastguard Worker test -d "$_G_tmpdir" || \ 924*663afb9bSAndroid Build Coastguard Worker func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 925*663afb9bSAndroid Build Coastguard Worker fi 926*663afb9bSAndroid Build Coastguard Worker 927*663afb9bSAndroid Build Coastguard Worker $ECHO "$_G_tmpdir" 928*663afb9bSAndroid Build Coastguard Worker} 929*663afb9bSAndroid Build Coastguard Worker 930*663afb9bSAndroid Build Coastguard Worker 931*663afb9bSAndroid Build Coastguard Worker# func_normal_abspath PATH 932*663afb9bSAndroid Build Coastguard Worker# ------------------------ 933*663afb9bSAndroid Build Coastguard Worker# Remove doubled-up and trailing slashes, "." path components, 934*663afb9bSAndroid Build Coastguard Worker# and cancel out any ".." path components in PATH after making 935*663afb9bSAndroid Build Coastguard Worker# it an absolute path. 936*663afb9bSAndroid Build Coastguard Workerfunc_normal_abspath () 937*663afb9bSAndroid Build Coastguard Worker{ 938*663afb9bSAndroid Build Coastguard Worker $debug_cmd 939*663afb9bSAndroid Build Coastguard Worker 940*663afb9bSAndroid Build Coastguard Worker # These SED scripts presuppose an absolute path with a trailing slash. 941*663afb9bSAndroid Build Coastguard Worker _G_pathcar='s|^/\([^/]*\).*$|\1|' 942*663afb9bSAndroid Build Coastguard Worker _G_pathcdr='s|^/[^/]*||' 943*663afb9bSAndroid Build Coastguard Worker _G_removedotparts=':dotsl 944*663afb9bSAndroid Build Coastguard Worker s|/\./|/|g 945*663afb9bSAndroid Build Coastguard Worker t dotsl 946*663afb9bSAndroid Build Coastguard Worker s|/\.$|/|' 947*663afb9bSAndroid Build Coastguard Worker _G_collapseslashes='s|/\{1,\}|/|g' 948*663afb9bSAndroid Build Coastguard Worker _G_finalslash='s|/*$|/|' 949*663afb9bSAndroid Build Coastguard Worker 950*663afb9bSAndroid Build Coastguard Worker # Start from root dir and reassemble the path. 951*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_result= 952*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_tpath=$1 953*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_altnamespace= 954*663afb9bSAndroid Build Coastguard Worker case $func_normal_abspath_tpath in 955*663afb9bSAndroid Build Coastguard Worker "") 956*663afb9bSAndroid Build Coastguard Worker # Empty path, that just means $cwd. 957*663afb9bSAndroid Build Coastguard Worker func_stripname '' '/' "`pwd`" 958*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_result=$func_stripname_result 959*663afb9bSAndroid Build Coastguard Worker return 960*663afb9bSAndroid Build Coastguard Worker ;; 961*663afb9bSAndroid Build Coastguard Worker # The next three entries are used to spot a run of precisely 962*663afb9bSAndroid Build Coastguard Worker # two leading slashes without using negated character classes; 963*663afb9bSAndroid Build Coastguard Worker # we take advantage of case's first-match behaviour. 964*663afb9bSAndroid Build Coastguard Worker ///*) 965*663afb9bSAndroid Build Coastguard Worker # Unusual form of absolute path, do nothing. 966*663afb9bSAndroid Build Coastguard Worker ;; 967*663afb9bSAndroid Build Coastguard Worker //*) 968*663afb9bSAndroid Build Coastguard Worker # Not necessarily an ordinary path; POSIX reserves leading '//' 969*663afb9bSAndroid Build Coastguard Worker # and for example Cygwin uses it to access remote file shares 970*663afb9bSAndroid Build Coastguard Worker # over CIFS/SMB, so we conserve a leading double slash if found. 971*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_altnamespace=/ 972*663afb9bSAndroid Build Coastguard Worker ;; 973*663afb9bSAndroid Build Coastguard Worker /*) 974*663afb9bSAndroid Build Coastguard Worker # Absolute path, do nothing. 975*663afb9bSAndroid Build Coastguard Worker ;; 976*663afb9bSAndroid Build Coastguard Worker *) 977*663afb9bSAndroid Build Coastguard Worker # Relative path, prepend $cwd. 978*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 979*663afb9bSAndroid Build Coastguard Worker ;; 980*663afb9bSAndroid Build Coastguard Worker esac 981*663afb9bSAndroid Build Coastguard Worker 982*663afb9bSAndroid Build Coastguard Worker # Cancel out all the simple stuff to save iterations. We also want 983*663afb9bSAndroid Build Coastguard Worker # the path to end with a slash for ease of parsing, so make sure 984*663afb9bSAndroid Build Coastguard Worker # there is one (and only one) here. 985*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 986*663afb9bSAndroid Build Coastguard Worker -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 987*663afb9bSAndroid Build Coastguard Worker while :; do 988*663afb9bSAndroid Build Coastguard Worker # Processed it all yet? 989*663afb9bSAndroid Build Coastguard Worker if test / = "$func_normal_abspath_tpath"; then 990*663afb9bSAndroid Build Coastguard Worker # If we ascended to the root using ".." the result may be empty now. 991*663afb9bSAndroid Build Coastguard Worker if test -z "$func_normal_abspath_result"; then 992*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_result=/ 993*663afb9bSAndroid Build Coastguard Worker fi 994*663afb9bSAndroid Build Coastguard Worker break 995*663afb9bSAndroid Build Coastguard Worker fi 996*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 997*663afb9bSAndroid Build Coastguard Worker -e "$_G_pathcar"` 998*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 999*663afb9bSAndroid Build Coastguard Worker -e "$_G_pathcdr"` 1000*663afb9bSAndroid Build Coastguard Worker # Figure out what to do with it 1001*663afb9bSAndroid Build Coastguard Worker case $func_normal_abspath_tcomponent in 1002*663afb9bSAndroid Build Coastguard Worker "") 1003*663afb9bSAndroid Build Coastguard Worker # Trailing empty path component, ignore it. 1004*663afb9bSAndroid Build Coastguard Worker ;; 1005*663afb9bSAndroid Build Coastguard Worker ..) 1006*663afb9bSAndroid Build Coastguard Worker # Parent dir; strip last assembled component from result. 1007*663afb9bSAndroid Build Coastguard Worker func_dirname "$func_normal_abspath_result" 1008*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_result=$func_dirname_result 1009*663afb9bSAndroid Build Coastguard Worker ;; 1010*663afb9bSAndroid Build Coastguard Worker *) 1011*663afb9bSAndroid Build Coastguard Worker # Actual path component, append it. 1012*663afb9bSAndroid Build Coastguard Worker func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 1013*663afb9bSAndroid Build Coastguard Worker ;; 1014*663afb9bSAndroid Build Coastguard Worker esac 1015*663afb9bSAndroid Build Coastguard Worker done 1016*663afb9bSAndroid Build Coastguard Worker # Restore leading double-slash if one was found on entry. 1017*663afb9bSAndroid Build Coastguard Worker func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 1018*663afb9bSAndroid Build Coastguard Worker} 1019*663afb9bSAndroid Build Coastguard Worker 1020*663afb9bSAndroid Build Coastguard Worker 1021*663afb9bSAndroid Build Coastguard Worker# func_notquiet ARG... 1022*663afb9bSAndroid Build Coastguard Worker# -------------------- 1023*663afb9bSAndroid Build Coastguard Worker# Echo program name prefixed message only when not in quiet mode. 1024*663afb9bSAndroid Build Coastguard Workerfunc_notquiet () 1025*663afb9bSAndroid Build Coastguard Worker{ 1026*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1027*663afb9bSAndroid Build Coastguard Worker 1028*663afb9bSAndroid Build Coastguard Worker $opt_quiet || func_echo ${1+"$@"} 1029*663afb9bSAndroid Build Coastguard Worker 1030*663afb9bSAndroid Build Coastguard Worker # A bug in bash halts the script if the last line of a function 1031*663afb9bSAndroid Build Coastguard Worker # fails when set -e is in force, so we need another command to 1032*663afb9bSAndroid Build Coastguard Worker # work around that: 1033*663afb9bSAndroid Build Coastguard Worker : 1034*663afb9bSAndroid Build Coastguard Worker} 1035*663afb9bSAndroid Build Coastguard Worker 1036*663afb9bSAndroid Build Coastguard Worker 1037*663afb9bSAndroid Build Coastguard Worker# func_relative_path SRCDIR DSTDIR 1038*663afb9bSAndroid Build Coastguard Worker# -------------------------------- 1039*663afb9bSAndroid Build Coastguard Worker# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 1040*663afb9bSAndroid Build Coastguard Workerfunc_relative_path () 1041*663afb9bSAndroid Build Coastguard Worker{ 1042*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1043*663afb9bSAndroid Build Coastguard Worker 1044*663afb9bSAndroid Build Coastguard Worker func_relative_path_result= 1045*663afb9bSAndroid Build Coastguard Worker func_normal_abspath "$1" 1046*663afb9bSAndroid Build Coastguard Worker func_relative_path_tlibdir=$func_normal_abspath_result 1047*663afb9bSAndroid Build Coastguard Worker func_normal_abspath "$2" 1048*663afb9bSAndroid Build Coastguard Worker func_relative_path_tbindir=$func_normal_abspath_result 1049*663afb9bSAndroid Build Coastguard Worker 1050*663afb9bSAndroid Build Coastguard Worker # Ascend the tree starting from libdir 1051*663afb9bSAndroid Build Coastguard Worker while :; do 1052*663afb9bSAndroid Build Coastguard Worker # check if we have found a prefix of bindir 1053*663afb9bSAndroid Build Coastguard Worker case $func_relative_path_tbindir in 1054*663afb9bSAndroid Build Coastguard Worker $func_relative_path_tlibdir) 1055*663afb9bSAndroid Build Coastguard Worker # found an exact match 1056*663afb9bSAndroid Build Coastguard Worker func_relative_path_tcancelled= 1057*663afb9bSAndroid Build Coastguard Worker break 1058*663afb9bSAndroid Build Coastguard Worker ;; 1059*663afb9bSAndroid Build Coastguard Worker $func_relative_path_tlibdir*) 1060*663afb9bSAndroid Build Coastguard Worker # found a matching prefix 1061*663afb9bSAndroid Build Coastguard Worker func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 1062*663afb9bSAndroid Build Coastguard Worker func_relative_path_tcancelled=$func_stripname_result 1063*663afb9bSAndroid Build Coastguard Worker if test -z "$func_relative_path_result"; then 1064*663afb9bSAndroid Build Coastguard Worker func_relative_path_result=. 1065*663afb9bSAndroid Build Coastguard Worker fi 1066*663afb9bSAndroid Build Coastguard Worker break 1067*663afb9bSAndroid Build Coastguard Worker ;; 1068*663afb9bSAndroid Build Coastguard Worker *) 1069*663afb9bSAndroid Build Coastguard Worker func_dirname $func_relative_path_tlibdir 1070*663afb9bSAndroid Build Coastguard Worker func_relative_path_tlibdir=$func_dirname_result 1071*663afb9bSAndroid Build Coastguard Worker if test -z "$func_relative_path_tlibdir"; then 1072*663afb9bSAndroid Build Coastguard Worker # Have to descend all the way to the root! 1073*663afb9bSAndroid Build Coastguard Worker func_relative_path_result=../$func_relative_path_result 1074*663afb9bSAndroid Build Coastguard Worker func_relative_path_tcancelled=$func_relative_path_tbindir 1075*663afb9bSAndroid Build Coastguard Worker break 1076*663afb9bSAndroid Build Coastguard Worker fi 1077*663afb9bSAndroid Build Coastguard Worker func_relative_path_result=../$func_relative_path_result 1078*663afb9bSAndroid Build Coastguard Worker ;; 1079*663afb9bSAndroid Build Coastguard Worker esac 1080*663afb9bSAndroid Build Coastguard Worker done 1081*663afb9bSAndroid Build Coastguard Worker 1082*663afb9bSAndroid Build Coastguard Worker # Now calculate path; take care to avoid doubling-up slashes. 1083*663afb9bSAndroid Build Coastguard Worker func_stripname '' '/' "$func_relative_path_result" 1084*663afb9bSAndroid Build Coastguard Worker func_relative_path_result=$func_stripname_result 1085*663afb9bSAndroid Build Coastguard Worker func_stripname '/' '/' "$func_relative_path_tcancelled" 1086*663afb9bSAndroid Build Coastguard Worker if test -n "$func_stripname_result"; then 1087*663afb9bSAndroid Build Coastguard Worker func_append func_relative_path_result "/$func_stripname_result" 1088*663afb9bSAndroid Build Coastguard Worker fi 1089*663afb9bSAndroid Build Coastguard Worker 1090*663afb9bSAndroid Build Coastguard Worker # Normalisation. If bindir is libdir, return '.' else relative path. 1091*663afb9bSAndroid Build Coastguard Worker if test -n "$func_relative_path_result"; then 1092*663afb9bSAndroid Build Coastguard Worker func_stripname './' '' "$func_relative_path_result" 1093*663afb9bSAndroid Build Coastguard Worker func_relative_path_result=$func_stripname_result 1094*663afb9bSAndroid Build Coastguard Worker fi 1095*663afb9bSAndroid Build Coastguard Worker 1096*663afb9bSAndroid Build Coastguard Worker test -n "$func_relative_path_result" || func_relative_path_result=. 1097*663afb9bSAndroid Build Coastguard Worker 1098*663afb9bSAndroid Build Coastguard Worker : 1099*663afb9bSAndroid Build Coastguard Worker} 1100*663afb9bSAndroid Build Coastguard Worker 1101*663afb9bSAndroid Build Coastguard Worker 1102*663afb9bSAndroid Build Coastguard Worker# func_quote_portable EVAL ARG 1103*663afb9bSAndroid Build Coastguard Worker# ---------------------------- 1104*663afb9bSAndroid Build Coastguard Worker# Internal function to portably implement func_quote_arg. Note that we still 1105*663afb9bSAndroid Build Coastguard Worker# keep attention to performance here so we as much as possible try to avoid 1106*663afb9bSAndroid Build Coastguard Worker# calling sed binary (so far O(N) complexity as long as func_append is O(1)). 1107*663afb9bSAndroid Build Coastguard Workerfunc_quote_portable () 1108*663afb9bSAndroid Build Coastguard Worker{ 1109*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1110*663afb9bSAndroid Build Coastguard Worker 1111*663afb9bSAndroid Build Coastguard Worker func_quote_portable_result=$2 1112*663afb9bSAndroid Build Coastguard Worker 1113*663afb9bSAndroid Build Coastguard Worker # one-time-loop (easy break) 1114*663afb9bSAndroid Build Coastguard Worker while true 1115*663afb9bSAndroid Build Coastguard Worker do 1116*663afb9bSAndroid Build Coastguard Worker if $1; then 1117*663afb9bSAndroid Build Coastguard Worker func_quote_portable_result=`$ECHO "$2" | $SED \ 1118*663afb9bSAndroid Build Coastguard Worker -e "$sed_double_quote_subst" -e "$sed_double_backslash"` 1119*663afb9bSAndroid Build Coastguard Worker break 1120*663afb9bSAndroid Build Coastguard Worker fi 1121*663afb9bSAndroid Build Coastguard Worker 1122*663afb9bSAndroid Build Coastguard Worker # Quote for eval. 1123*663afb9bSAndroid Build Coastguard Worker case $func_quote_portable_result in 1124*663afb9bSAndroid Build Coastguard Worker *[\\\`\"\$]*) 1125*663afb9bSAndroid Build Coastguard Worker case $func_quote_portable_result in 1126*663afb9bSAndroid Build Coastguard Worker *[\[\*\?]*) 1127*663afb9bSAndroid Build Coastguard Worker func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ 1128*663afb9bSAndroid Build Coastguard Worker | $SED "$sed_quote_subst"` 1129*663afb9bSAndroid Build Coastguard Worker break 1130*663afb9bSAndroid Build Coastguard Worker ;; 1131*663afb9bSAndroid Build Coastguard Worker esac 1132*663afb9bSAndroid Build Coastguard Worker 1133*663afb9bSAndroid Build Coastguard Worker func_quote_portable_old_IFS=$IFS 1134*663afb9bSAndroid Build Coastguard Worker for _G_char in '\' '`' '"' '$' 1135*663afb9bSAndroid Build Coastguard Worker do 1136*663afb9bSAndroid Build Coastguard Worker # STATE($1) PREV($2) SEPARATOR($3) 1137*663afb9bSAndroid Build Coastguard Worker set start "" "" 1138*663afb9bSAndroid Build Coastguard Worker func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy 1139*663afb9bSAndroid Build Coastguard Worker IFS=$_G_char 1140*663afb9bSAndroid Build Coastguard Worker for _G_part in $func_quote_portable_result 1141*663afb9bSAndroid Build Coastguard Worker do 1142*663afb9bSAndroid Build Coastguard Worker case $1 in 1143*663afb9bSAndroid Build Coastguard Worker quote) 1144*663afb9bSAndroid Build Coastguard Worker func_append func_quote_portable_result "$3$2" 1145*663afb9bSAndroid Build Coastguard Worker set quote "$_G_part" "\\$_G_char" 1146*663afb9bSAndroid Build Coastguard Worker ;; 1147*663afb9bSAndroid Build Coastguard Worker start) 1148*663afb9bSAndroid Build Coastguard Worker set first "" "" 1149*663afb9bSAndroid Build Coastguard Worker func_quote_portable_result= 1150*663afb9bSAndroid Build Coastguard Worker ;; 1151*663afb9bSAndroid Build Coastguard Worker first) 1152*663afb9bSAndroid Build Coastguard Worker set quote "$_G_part" "" 1153*663afb9bSAndroid Build Coastguard Worker ;; 1154*663afb9bSAndroid Build Coastguard Worker esac 1155*663afb9bSAndroid Build Coastguard Worker done 1156*663afb9bSAndroid Build Coastguard Worker done 1157*663afb9bSAndroid Build Coastguard Worker IFS=$func_quote_portable_old_IFS 1158*663afb9bSAndroid Build Coastguard Worker ;; 1159*663afb9bSAndroid Build Coastguard Worker *) ;; 1160*663afb9bSAndroid Build Coastguard Worker esac 1161*663afb9bSAndroid Build Coastguard Worker break 1162*663afb9bSAndroid Build Coastguard Worker done 1163*663afb9bSAndroid Build Coastguard Worker 1164*663afb9bSAndroid Build Coastguard Worker func_quote_portable_unquoted_result=$func_quote_portable_result 1165*663afb9bSAndroid Build Coastguard Worker case $func_quote_portable_result in 1166*663afb9bSAndroid Build Coastguard Worker # double-quote args containing shell metacharacters to delay 1167*663afb9bSAndroid Build Coastguard Worker # word splitting, command substitution and variable expansion 1168*663afb9bSAndroid Build Coastguard Worker # for a subsequent eval. 1169*663afb9bSAndroid Build Coastguard Worker # many bourne shells cannot handle close brackets correctly 1170*663afb9bSAndroid Build Coastguard Worker # in scan sets, so we specify it separately. 1171*663afb9bSAndroid Build Coastguard Worker *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1172*663afb9bSAndroid Build Coastguard Worker func_quote_portable_result=\"$func_quote_portable_result\" 1173*663afb9bSAndroid Build Coastguard Worker ;; 1174*663afb9bSAndroid Build Coastguard Worker esac 1175*663afb9bSAndroid Build Coastguard Worker} 1176*663afb9bSAndroid Build Coastguard Worker 1177*663afb9bSAndroid Build Coastguard Worker 1178*663afb9bSAndroid Build Coastguard Worker# func_quotefast_eval ARG 1179*663afb9bSAndroid Build Coastguard Worker# ----------------------- 1180*663afb9bSAndroid Build Coastguard Worker# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', 1181*663afb9bSAndroid Build Coastguard Worker# but optimized for speed. Result is stored in $func_quotefast_eval. 1182*663afb9bSAndroid Build Coastguard Workerif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then 1183*663afb9bSAndroid Build Coastguard Worker printf -v _GL_test_printf_tilde %q '~' 1184*663afb9bSAndroid Build Coastguard Worker if test '\~' = "$_GL_test_printf_tilde"; then 1185*663afb9bSAndroid Build Coastguard Worker func_quotefast_eval () 1186*663afb9bSAndroid Build Coastguard Worker { 1187*663afb9bSAndroid Build Coastguard Worker printf -v func_quotefast_eval_result %q "$1" 1188*663afb9bSAndroid Build Coastguard Worker } 1189*663afb9bSAndroid Build Coastguard Worker else 1190*663afb9bSAndroid Build Coastguard Worker # Broken older Bash implementations. Make those faster too if possible. 1191*663afb9bSAndroid Build Coastguard Worker func_quotefast_eval () 1192*663afb9bSAndroid Build Coastguard Worker { 1193*663afb9bSAndroid Build Coastguard Worker case $1 in 1194*663afb9bSAndroid Build Coastguard Worker '~'*) 1195*663afb9bSAndroid Build Coastguard Worker func_quote_portable false "$1" 1196*663afb9bSAndroid Build Coastguard Worker func_quotefast_eval_result=$func_quote_portable_result 1197*663afb9bSAndroid Build Coastguard Worker ;; 1198*663afb9bSAndroid Build Coastguard Worker *) 1199*663afb9bSAndroid Build Coastguard Worker printf -v func_quotefast_eval_result %q "$1" 1200*663afb9bSAndroid Build Coastguard Worker ;; 1201*663afb9bSAndroid Build Coastguard Worker esac 1202*663afb9bSAndroid Build Coastguard Worker } 1203*663afb9bSAndroid Build Coastguard Worker fi 1204*663afb9bSAndroid Build Coastguard Workerelse 1205*663afb9bSAndroid Build Coastguard Worker func_quotefast_eval () 1206*663afb9bSAndroid Build Coastguard Worker { 1207*663afb9bSAndroid Build Coastguard Worker func_quote_portable false "$1" 1208*663afb9bSAndroid Build Coastguard Worker func_quotefast_eval_result=$func_quote_portable_result 1209*663afb9bSAndroid Build Coastguard Worker } 1210*663afb9bSAndroid Build Coastguard Workerfi 1211*663afb9bSAndroid Build Coastguard Worker 1212*663afb9bSAndroid Build Coastguard Worker 1213*663afb9bSAndroid Build Coastguard Worker# func_quote_arg MODEs ARG 1214*663afb9bSAndroid Build Coastguard Worker# ------------------------ 1215*663afb9bSAndroid Build Coastguard Worker# Quote one ARG to be evaled later. MODEs argument may contain zero or more 1216*663afb9bSAndroid Build Coastguard Worker# specifiers listed below separated by ',' character. This function returns two 1217*663afb9bSAndroid Build Coastguard Worker# values: 1218*663afb9bSAndroid Build Coastguard Worker# i) func_quote_arg_result 1219*663afb9bSAndroid Build Coastguard Worker# double-quoted (when needed), suitable for a subsequent eval 1220*663afb9bSAndroid Build Coastguard Worker# ii) func_quote_arg_unquoted_result 1221*663afb9bSAndroid Build Coastguard Worker# has all characters that are still active within double 1222*663afb9bSAndroid Build Coastguard Worker# quotes backslashified. Available only if 'unquoted' is specified. 1223*663afb9bSAndroid Build Coastguard Worker# 1224*663afb9bSAndroid Build Coastguard Worker# Available modes: 1225*663afb9bSAndroid Build Coastguard Worker# ---------------- 1226*663afb9bSAndroid Build Coastguard Worker# 'eval' (default) 1227*663afb9bSAndroid Build Coastguard Worker# - escape shell special characters 1228*663afb9bSAndroid Build Coastguard Worker# 'expand' 1229*663afb9bSAndroid Build Coastguard Worker# - the same as 'eval'; but do not quote variable references 1230*663afb9bSAndroid Build Coastguard Worker# 'pretty' 1231*663afb9bSAndroid Build Coastguard Worker# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might 1232*663afb9bSAndroid Build Coastguard Worker# be used later in func_quote to get output like: 'echo "a b"' instead 1233*663afb9bSAndroid Build Coastguard Worker# of 'echo a\ b'. This is slower than default on some shells. 1234*663afb9bSAndroid Build Coastguard Worker# 'unquoted' 1235*663afb9bSAndroid Build Coastguard Worker# - produce also $func_quote_arg_unquoted_result which does not contain 1236*663afb9bSAndroid Build Coastguard Worker# wrapping double-quotes. 1237*663afb9bSAndroid Build Coastguard Worker# 1238*663afb9bSAndroid Build Coastguard Worker# Examples for 'func_quote_arg pretty,unquoted string': 1239*663afb9bSAndroid Build Coastguard Worker# 1240*663afb9bSAndroid Build Coastguard Worker# string | *_result | *_unquoted_result 1241*663afb9bSAndroid Build Coastguard Worker# ------------+-----------------------+------------------- 1242*663afb9bSAndroid Build Coastguard Worker# " | \" | \" 1243*663afb9bSAndroid Build Coastguard Worker# a b | "a b" | a b 1244*663afb9bSAndroid Build Coastguard Worker# "a b" | "\"a b\"" | \"a b\" 1245*663afb9bSAndroid Build Coastguard Worker# * | "*" | * 1246*663afb9bSAndroid Build Coastguard Worker# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" 1247*663afb9bSAndroid Build Coastguard Worker# 1248*663afb9bSAndroid Build Coastguard Worker# Examples for 'func_quote_arg pretty,unquoted,expand string': 1249*663afb9bSAndroid Build Coastguard Worker# 1250*663afb9bSAndroid Build Coastguard Worker# string | *_result | *_unquoted_result 1251*663afb9bSAndroid Build Coastguard Worker# --------------+---------------------+-------------------- 1252*663afb9bSAndroid Build Coastguard Worker# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" 1253*663afb9bSAndroid Build Coastguard Workerfunc_quote_arg () 1254*663afb9bSAndroid Build Coastguard Worker{ 1255*663afb9bSAndroid Build Coastguard Worker _G_quote_expand=false 1256*663afb9bSAndroid Build Coastguard Worker case ,$1, in 1257*663afb9bSAndroid Build Coastguard Worker *,expand,*) 1258*663afb9bSAndroid Build Coastguard Worker _G_quote_expand=: 1259*663afb9bSAndroid Build Coastguard Worker ;; 1260*663afb9bSAndroid Build Coastguard Worker esac 1261*663afb9bSAndroid Build Coastguard Worker 1262*663afb9bSAndroid Build Coastguard Worker case ,$1, in 1263*663afb9bSAndroid Build Coastguard Worker *,pretty,*|*,expand,*|*,unquoted,*) 1264*663afb9bSAndroid Build Coastguard Worker func_quote_portable $_G_quote_expand "$2" 1265*663afb9bSAndroid Build Coastguard Worker func_quote_arg_result=$func_quote_portable_result 1266*663afb9bSAndroid Build Coastguard Worker func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result 1267*663afb9bSAndroid Build Coastguard Worker ;; 1268*663afb9bSAndroid Build Coastguard Worker *) 1269*663afb9bSAndroid Build Coastguard Worker # Faster quote-for-eval for some shells. 1270*663afb9bSAndroid Build Coastguard Worker func_quotefast_eval "$2" 1271*663afb9bSAndroid Build Coastguard Worker func_quote_arg_result=$func_quotefast_eval_result 1272*663afb9bSAndroid Build Coastguard Worker ;; 1273*663afb9bSAndroid Build Coastguard Worker esac 1274*663afb9bSAndroid Build Coastguard Worker} 1275*663afb9bSAndroid Build Coastguard Worker 1276*663afb9bSAndroid Build Coastguard Worker 1277*663afb9bSAndroid Build Coastguard Worker# func_quote MODEs ARGs... 1278*663afb9bSAndroid Build Coastguard Worker# ------------------------ 1279*663afb9bSAndroid Build Coastguard Worker# Quote all ARGs to be evaled later and join them into single command. See 1280*663afb9bSAndroid Build Coastguard Worker# func_quote_arg's description for more info. 1281*663afb9bSAndroid Build Coastguard Workerfunc_quote () 1282*663afb9bSAndroid Build Coastguard Worker{ 1283*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1284*663afb9bSAndroid Build Coastguard Worker _G_func_quote_mode=$1 ; shift 1285*663afb9bSAndroid Build Coastguard Worker func_quote_result= 1286*663afb9bSAndroid Build Coastguard Worker while test 0 -lt $#; do 1287*663afb9bSAndroid Build Coastguard Worker func_quote_arg "$_G_func_quote_mode" "$1" 1288*663afb9bSAndroid Build Coastguard Worker if test -n "$func_quote_result"; then 1289*663afb9bSAndroid Build Coastguard Worker func_append func_quote_result " $func_quote_arg_result" 1290*663afb9bSAndroid Build Coastguard Worker else 1291*663afb9bSAndroid Build Coastguard Worker func_append func_quote_result "$func_quote_arg_result" 1292*663afb9bSAndroid Build Coastguard Worker fi 1293*663afb9bSAndroid Build Coastguard Worker shift 1294*663afb9bSAndroid Build Coastguard Worker done 1295*663afb9bSAndroid Build Coastguard Worker} 1296*663afb9bSAndroid Build Coastguard Worker 1297*663afb9bSAndroid Build Coastguard Worker 1298*663afb9bSAndroid Build Coastguard Worker# func_stripname PREFIX SUFFIX NAME 1299*663afb9bSAndroid Build Coastguard Worker# --------------------------------- 1300*663afb9bSAndroid Build Coastguard Worker# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 1301*663afb9bSAndroid Build Coastguard Worker# PREFIX and SUFFIX must not contain globbing or regex special 1302*663afb9bSAndroid Build Coastguard Worker# characters, hashes, percent signs, but SUFFIX may contain a leading 1303*663afb9bSAndroid Build Coastguard Worker# dot (in which case that matches only a dot). 1304*663afb9bSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS"; then 1305*663afb9bSAndroid Build Coastguard Worker eval 'func_stripname () 1306*663afb9bSAndroid Build Coastguard Worker { 1307*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1308*663afb9bSAndroid Build Coastguard Worker 1309*663afb9bSAndroid Build Coastguard Worker # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 1310*663afb9bSAndroid Build Coastguard Worker # positional parameters, so assign one to ordinary variable first. 1311*663afb9bSAndroid Build Coastguard Worker func_stripname_result=$3 1312*663afb9bSAndroid Build Coastguard Worker func_stripname_result=${func_stripname_result#"$1"} 1313*663afb9bSAndroid Build Coastguard Worker func_stripname_result=${func_stripname_result%"$2"} 1314*663afb9bSAndroid Build Coastguard Worker }' 1315*663afb9bSAndroid Build Coastguard Workerelse 1316*663afb9bSAndroid Build Coastguard Worker func_stripname () 1317*663afb9bSAndroid Build Coastguard Worker { 1318*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1319*663afb9bSAndroid Build Coastguard Worker 1320*663afb9bSAndroid Build Coastguard Worker case $2 in 1321*663afb9bSAndroid Build Coastguard Worker .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 1322*663afb9bSAndroid Build Coastguard Worker *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 1323*663afb9bSAndroid Build Coastguard Worker esac 1324*663afb9bSAndroid Build Coastguard Worker } 1325*663afb9bSAndroid Build Coastguard Workerfi 1326*663afb9bSAndroid Build Coastguard Worker 1327*663afb9bSAndroid Build Coastguard Worker 1328*663afb9bSAndroid Build Coastguard Worker# func_show_eval CMD [FAIL_EXP] 1329*663afb9bSAndroid Build Coastguard Worker# ----------------------------- 1330*663afb9bSAndroid Build Coastguard Worker# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1331*663afb9bSAndroid Build Coastguard Worker# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1332*663afb9bSAndroid Build Coastguard Worker# is given, then evaluate it. 1333*663afb9bSAndroid Build Coastguard Workerfunc_show_eval () 1334*663afb9bSAndroid Build Coastguard Worker{ 1335*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1336*663afb9bSAndroid Build Coastguard Worker 1337*663afb9bSAndroid Build Coastguard Worker _G_cmd=$1 1338*663afb9bSAndroid Build Coastguard Worker _G_fail_exp=${2-':'} 1339*663afb9bSAndroid Build Coastguard Worker 1340*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty,expand "$_G_cmd" 1341*663afb9bSAndroid Build Coastguard Worker eval "func_notquiet $func_quote_arg_result" 1342*663afb9bSAndroid Build Coastguard Worker 1343*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 1344*663afb9bSAndroid Build Coastguard Worker eval "$_G_cmd" 1345*663afb9bSAndroid Build Coastguard Worker _G_status=$? 1346*663afb9bSAndroid Build Coastguard Worker if test 0 -ne "$_G_status"; then 1347*663afb9bSAndroid Build Coastguard Worker eval "(exit $_G_status); $_G_fail_exp" 1348*663afb9bSAndroid Build Coastguard Worker fi 1349*663afb9bSAndroid Build Coastguard Worker } 1350*663afb9bSAndroid Build Coastguard Worker} 1351*663afb9bSAndroid Build Coastguard Worker 1352*663afb9bSAndroid Build Coastguard Worker 1353*663afb9bSAndroid Build Coastguard Worker# func_show_eval_locale CMD [FAIL_EXP] 1354*663afb9bSAndroid Build Coastguard Worker# ------------------------------------ 1355*663afb9bSAndroid Build Coastguard Worker# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1356*663afb9bSAndroid Build Coastguard Worker# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1357*663afb9bSAndroid Build Coastguard Worker# is given, then evaluate it. Use the saved locale for evaluation. 1358*663afb9bSAndroid Build Coastguard Workerfunc_show_eval_locale () 1359*663afb9bSAndroid Build Coastguard Worker{ 1360*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1361*663afb9bSAndroid Build Coastguard Worker 1362*663afb9bSAndroid Build Coastguard Worker _G_cmd=$1 1363*663afb9bSAndroid Build Coastguard Worker _G_fail_exp=${2-':'} 1364*663afb9bSAndroid Build Coastguard Worker 1365*663afb9bSAndroid Build Coastguard Worker $opt_quiet || { 1366*663afb9bSAndroid Build Coastguard Worker func_quote_arg expand,pretty "$_G_cmd" 1367*663afb9bSAndroid Build Coastguard Worker eval "func_echo $func_quote_arg_result" 1368*663afb9bSAndroid Build Coastguard Worker } 1369*663afb9bSAndroid Build Coastguard Worker 1370*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 1371*663afb9bSAndroid Build Coastguard Worker eval "$_G_user_locale 1372*663afb9bSAndroid Build Coastguard Worker $_G_cmd" 1373*663afb9bSAndroid Build Coastguard Worker _G_status=$? 1374*663afb9bSAndroid Build Coastguard Worker eval "$_G_safe_locale" 1375*663afb9bSAndroid Build Coastguard Worker if test 0 -ne "$_G_status"; then 1376*663afb9bSAndroid Build Coastguard Worker eval "(exit $_G_status); $_G_fail_exp" 1377*663afb9bSAndroid Build Coastguard Worker fi 1378*663afb9bSAndroid Build Coastguard Worker } 1379*663afb9bSAndroid Build Coastguard Worker} 1380*663afb9bSAndroid Build Coastguard Worker 1381*663afb9bSAndroid Build Coastguard Worker 1382*663afb9bSAndroid Build Coastguard Worker# func_tr_sh 1383*663afb9bSAndroid Build Coastguard Worker# ---------- 1384*663afb9bSAndroid Build Coastguard Worker# Turn $1 into a string suitable for a shell variable name. 1385*663afb9bSAndroid Build Coastguard Worker# Result is stored in $func_tr_sh_result. All characters 1386*663afb9bSAndroid Build Coastguard Worker# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 1387*663afb9bSAndroid Build Coastguard Worker# if $1 begins with a digit, a '_' is prepended as well. 1388*663afb9bSAndroid Build Coastguard Workerfunc_tr_sh () 1389*663afb9bSAndroid Build Coastguard Worker{ 1390*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1391*663afb9bSAndroid Build Coastguard Worker 1392*663afb9bSAndroid Build Coastguard Worker case $1 in 1393*663afb9bSAndroid Build Coastguard Worker [0-9]* | *[!a-zA-Z0-9_]*) 1394*663afb9bSAndroid Build Coastguard Worker func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 1395*663afb9bSAndroid Build Coastguard Worker ;; 1396*663afb9bSAndroid Build Coastguard Worker * ) 1397*663afb9bSAndroid Build Coastguard Worker func_tr_sh_result=$1 1398*663afb9bSAndroid Build Coastguard Worker ;; 1399*663afb9bSAndroid Build Coastguard Worker esac 1400*663afb9bSAndroid Build Coastguard Worker} 1401*663afb9bSAndroid Build Coastguard Worker 1402*663afb9bSAndroid Build Coastguard Worker 1403*663afb9bSAndroid Build Coastguard Worker# func_verbose ARG... 1404*663afb9bSAndroid Build Coastguard Worker# ------------------- 1405*663afb9bSAndroid Build Coastguard Worker# Echo program name prefixed message in verbose mode only. 1406*663afb9bSAndroid Build Coastguard Workerfunc_verbose () 1407*663afb9bSAndroid Build Coastguard Worker{ 1408*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1409*663afb9bSAndroid Build Coastguard Worker 1410*663afb9bSAndroid Build Coastguard Worker $opt_verbose && func_echo "$*" 1411*663afb9bSAndroid Build Coastguard Worker 1412*663afb9bSAndroid Build Coastguard Worker : 1413*663afb9bSAndroid Build Coastguard Worker} 1414*663afb9bSAndroid Build Coastguard Worker 1415*663afb9bSAndroid Build Coastguard Worker 1416*663afb9bSAndroid Build Coastguard Worker# func_warn_and_continue ARG... 1417*663afb9bSAndroid Build Coastguard Worker# ----------------------------- 1418*663afb9bSAndroid Build Coastguard Worker# Echo program name prefixed warning message to standard error. 1419*663afb9bSAndroid Build Coastguard Workerfunc_warn_and_continue () 1420*663afb9bSAndroid Build Coastguard Worker{ 1421*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1422*663afb9bSAndroid Build Coastguard Worker 1423*663afb9bSAndroid Build Coastguard Worker $require_term_colors 1424*663afb9bSAndroid Build Coastguard Worker 1425*663afb9bSAndroid Build Coastguard Worker func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 1426*663afb9bSAndroid Build Coastguard Worker} 1427*663afb9bSAndroid Build Coastguard Worker 1428*663afb9bSAndroid Build Coastguard Worker 1429*663afb9bSAndroid Build Coastguard Worker# func_warning CATEGORY ARG... 1430*663afb9bSAndroid Build Coastguard Worker# ---------------------------- 1431*663afb9bSAndroid Build Coastguard Worker# Echo program name prefixed warning message to standard error. Warning 1432*663afb9bSAndroid Build Coastguard Worker# messages can be filtered according to CATEGORY, where this function 1433*663afb9bSAndroid Build Coastguard Worker# elides messages where CATEGORY is not listed in the global variable 1434*663afb9bSAndroid Build Coastguard Worker# 'opt_warning_types'. 1435*663afb9bSAndroid Build Coastguard Workerfunc_warning () 1436*663afb9bSAndroid Build Coastguard Worker{ 1437*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1438*663afb9bSAndroid Build Coastguard Worker 1439*663afb9bSAndroid Build Coastguard Worker # CATEGORY must be in the warning_categories list! 1440*663afb9bSAndroid Build Coastguard Worker case " $warning_categories " in 1441*663afb9bSAndroid Build Coastguard Worker *" $1 "*) ;; 1442*663afb9bSAndroid Build Coastguard Worker *) func_internal_error "invalid warning category '$1'" ;; 1443*663afb9bSAndroid Build Coastguard Worker esac 1444*663afb9bSAndroid Build Coastguard Worker 1445*663afb9bSAndroid Build Coastguard Worker _G_category=$1 1446*663afb9bSAndroid Build Coastguard Worker shift 1447*663afb9bSAndroid Build Coastguard Worker 1448*663afb9bSAndroid Build Coastguard Worker case " $opt_warning_types " in 1449*663afb9bSAndroid Build Coastguard Worker *" $_G_category "*) $warning_func ${1+"$@"} ;; 1450*663afb9bSAndroid Build Coastguard Worker esac 1451*663afb9bSAndroid Build Coastguard Worker} 1452*663afb9bSAndroid Build Coastguard Worker 1453*663afb9bSAndroid Build Coastguard Worker 1454*663afb9bSAndroid Build Coastguard Worker# func_sort_ver VER1 VER2 1455*663afb9bSAndroid Build Coastguard Worker# ----------------------- 1456*663afb9bSAndroid Build Coastguard Worker# 'sort -V' is not generally available. 1457*663afb9bSAndroid Build Coastguard Worker# Note this deviates from the version comparison in automake 1458*663afb9bSAndroid Build Coastguard Worker# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 1459*663afb9bSAndroid Build Coastguard Worker# but this should suffice as we won't be specifying old 1460*663afb9bSAndroid Build Coastguard Worker# version formats or redundant trailing .0 in bootstrap.conf. 1461*663afb9bSAndroid Build Coastguard Worker# If we did want full compatibility then we should probably 1462*663afb9bSAndroid Build Coastguard Worker# use m4_version_compare from autoconf. 1463*663afb9bSAndroid Build Coastguard Workerfunc_sort_ver () 1464*663afb9bSAndroid Build Coastguard Worker{ 1465*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1466*663afb9bSAndroid Build Coastguard Worker 1467*663afb9bSAndroid Build Coastguard Worker printf '%s\n%s\n' "$1" "$2" \ 1468*663afb9bSAndroid 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 1469*663afb9bSAndroid Build Coastguard Worker} 1470*663afb9bSAndroid Build Coastguard Worker 1471*663afb9bSAndroid Build Coastguard Worker# func_lt_ver PREV CURR 1472*663afb9bSAndroid Build Coastguard Worker# --------------------- 1473*663afb9bSAndroid Build Coastguard Worker# Return true if PREV and CURR are in the correct order according to 1474*663afb9bSAndroid Build Coastguard Worker# func_sort_ver, otherwise false. Use it like this: 1475*663afb9bSAndroid Build Coastguard Worker# 1476*663afb9bSAndroid Build Coastguard Worker# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 1477*663afb9bSAndroid Build Coastguard Workerfunc_lt_ver () 1478*663afb9bSAndroid Build Coastguard Worker{ 1479*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1480*663afb9bSAndroid Build Coastguard Worker 1481*663afb9bSAndroid Build Coastguard Worker test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 1482*663afb9bSAndroid Build Coastguard Worker} 1483*663afb9bSAndroid Build Coastguard Worker 1484*663afb9bSAndroid Build Coastguard Worker 1485*663afb9bSAndroid Build Coastguard Worker# Local variables: 1486*663afb9bSAndroid Build Coastguard Worker# mode: shell-script 1487*663afb9bSAndroid Build Coastguard Worker# sh-indentation: 2 1488*663afb9bSAndroid Build Coastguard Worker# eval: (add-hook 'before-save-hook 'time-stamp) 1489*663afb9bSAndroid Build Coastguard Worker# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1490*663afb9bSAndroid Build Coastguard Worker# time-stamp-time-zone: "UTC" 1491*663afb9bSAndroid Build Coastguard Worker# End: 1492*663afb9bSAndroid Build Coastguard Worker#! /bin/sh 1493*663afb9bSAndroid Build Coastguard Worker 1494*663afb9bSAndroid Build Coastguard Worker# A portable, pluggable option parser for Bourne shell. 1495*663afb9bSAndroid Build Coastguard Worker# Written by Gary V. Vaughan, 2010 1496*663afb9bSAndroid Build Coastguard Worker 1497*663afb9bSAndroid Build Coastguard Worker# This is free software. There is NO warranty; not even for 1498*663afb9bSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1499*663afb9bSAndroid Build Coastguard Worker# 1500*663afb9bSAndroid Build Coastguard Worker# Copyright (C) 2010-2018 Bootstrap Authors 1501*663afb9bSAndroid Build Coastguard Worker# 1502*663afb9bSAndroid Build Coastguard Worker# This file is dual licensed under the terms of the MIT license 1503*663afb9bSAndroid Build Coastguard Worker# <https://opensource.org/license/MIT>, and GPL version 3 or later 1504*663afb9bSAndroid Build Coastguard Worker# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 1505*663afb9bSAndroid Build Coastguard Worker# these licenses when using or redistributing this software or any of 1506*663afb9bSAndroid Build Coastguard Worker# the files within it. See the URLs above, or the file `LICENSE` 1507*663afb9bSAndroid Build Coastguard Worker# included in the Bootstrap distribution for the full license texts. 1508*663afb9bSAndroid Build Coastguard Worker 1509*663afb9bSAndroid Build Coastguard Worker# Please report bugs or propose patches to: 1510*663afb9bSAndroid Build Coastguard Worker# <https://github.com/gnulib-modules/bootstrap/issues> 1511*663afb9bSAndroid Build Coastguard Worker 1512*663afb9bSAndroid Build Coastguard Worker# Set a version string for this script. 1513*663afb9bSAndroid Build Coastguard Workerscriptversion=2018-07-24.06; # UTC 1514*663afb9bSAndroid Build Coastguard Worker 1515*663afb9bSAndroid Build Coastguard Worker 1516*663afb9bSAndroid Build Coastguard Worker## ------ ## 1517*663afb9bSAndroid Build Coastguard Worker## Usage. ## 1518*663afb9bSAndroid Build Coastguard Worker## ------ ## 1519*663afb9bSAndroid Build Coastguard Worker 1520*663afb9bSAndroid Build Coastguard Worker# This file is a library for parsing options in your shell scripts along 1521*663afb9bSAndroid Build Coastguard Worker# with assorted other useful supporting features that you can make use 1522*663afb9bSAndroid Build Coastguard Worker# of too. 1523*663afb9bSAndroid Build Coastguard Worker# 1524*663afb9bSAndroid Build Coastguard Worker# For the simplest scripts you might need only: 1525*663afb9bSAndroid Build Coastguard Worker# 1526*663afb9bSAndroid Build Coastguard Worker# #!/bin/sh 1527*663afb9bSAndroid Build Coastguard Worker# . relative/path/to/funclib.sh 1528*663afb9bSAndroid Build Coastguard Worker# . relative/path/to/options-parser 1529*663afb9bSAndroid Build Coastguard Worker# scriptversion=1.0 1530*663afb9bSAndroid Build Coastguard Worker# func_options ${1+"$@"} 1531*663afb9bSAndroid Build Coastguard Worker# eval set dummy "$func_options_result"; shift 1532*663afb9bSAndroid Build Coastguard Worker# ...rest of your script... 1533*663afb9bSAndroid Build Coastguard Worker# 1534*663afb9bSAndroid Build Coastguard Worker# In order for the '--version' option to work, you will need to have a 1535*663afb9bSAndroid Build Coastguard Worker# suitably formatted comment like the one at the top of this file 1536*663afb9bSAndroid Build Coastguard Worker# starting with '# Written by ' and ending with '# Copyright'. 1537*663afb9bSAndroid Build Coastguard Worker# 1538*663afb9bSAndroid Build Coastguard Worker# For '-h' and '--help' to work, you will also need a one line 1539*663afb9bSAndroid Build Coastguard Worker# description of your script's purpose in a comment directly above the 1540*663afb9bSAndroid Build Coastguard Worker# '# Written by ' line, like the one at the top of this file. 1541*663afb9bSAndroid Build Coastguard Worker# 1542*663afb9bSAndroid Build Coastguard Worker# The default options also support '--debug', which will turn on shell 1543*663afb9bSAndroid Build Coastguard Worker# execution tracing (see the comment above debug_cmd below for another 1544*663afb9bSAndroid Build Coastguard Worker# use), and '--verbose' and the func_verbose function to allow your script 1545*663afb9bSAndroid Build Coastguard Worker# to display verbose messages only when your user has specified 1546*663afb9bSAndroid Build Coastguard Worker# '--verbose'. 1547*663afb9bSAndroid Build Coastguard Worker# 1548*663afb9bSAndroid Build Coastguard Worker# After sourcing this file, you can plug in processing for additional 1549*663afb9bSAndroid Build Coastguard Worker# options by amending the variables from the 'Configuration' section 1550*663afb9bSAndroid Build Coastguard Worker# below, and following the instructions in the 'Option parsing' 1551*663afb9bSAndroid Build Coastguard Worker# section further down. 1552*663afb9bSAndroid Build Coastguard Worker 1553*663afb9bSAndroid Build Coastguard Worker## -------------- ## 1554*663afb9bSAndroid Build Coastguard Worker## Configuration. ## 1555*663afb9bSAndroid Build Coastguard Worker## -------------- ## 1556*663afb9bSAndroid Build Coastguard Worker 1557*663afb9bSAndroid Build Coastguard Worker# You should override these variables in your script after sourcing this 1558*663afb9bSAndroid Build Coastguard Worker# file so that they reflect the customisations you have added to the 1559*663afb9bSAndroid Build Coastguard Worker# option parser. 1560*663afb9bSAndroid Build Coastguard Worker 1561*663afb9bSAndroid Build Coastguard Worker# The usage line for option parsing errors and the start of '-h' and 1562*663afb9bSAndroid Build Coastguard Worker# '--help' output messages. You can embed shell variables for delayed 1563*663afb9bSAndroid Build Coastguard Worker# expansion at the time the message is displayed, but you will need to 1564*663afb9bSAndroid Build Coastguard Worker# quote other shell meta-characters carefully to prevent them being 1565*663afb9bSAndroid Build Coastguard Worker# expanded when the contents are evaled. 1566*663afb9bSAndroid Build Coastguard Workerusage='$progpath [OPTION]...' 1567*663afb9bSAndroid Build Coastguard Worker 1568*663afb9bSAndroid Build Coastguard Worker# Short help message in response to '-h' and '--help'. Add to this or 1569*663afb9bSAndroid Build Coastguard Worker# override it after sourcing this library to reflect the full set of 1570*663afb9bSAndroid Build Coastguard Worker# options your script accepts. 1571*663afb9bSAndroid Build Coastguard Workerusage_message="\ 1572*663afb9bSAndroid Build Coastguard Worker --debug enable verbose shell tracing 1573*663afb9bSAndroid Build Coastguard Worker -W, --warnings=CATEGORY 1574*663afb9bSAndroid Build Coastguard Worker report the warnings falling in CATEGORY [all] 1575*663afb9bSAndroid Build Coastguard Worker -v, --verbose verbosely report processing 1576*663afb9bSAndroid Build Coastguard Worker --version print version information and exit 1577*663afb9bSAndroid Build Coastguard Worker -h, --help print short or long help message and exit 1578*663afb9bSAndroid Build Coastguard Worker" 1579*663afb9bSAndroid Build Coastguard Worker 1580*663afb9bSAndroid Build Coastguard Worker# Additional text appended to 'usage_message' in response to '--help'. 1581*663afb9bSAndroid Build Coastguard Workerlong_help_message=" 1582*663afb9bSAndroid Build Coastguard WorkerWarning categories include: 1583*663afb9bSAndroid Build Coastguard Worker 'all' show all warnings 1584*663afb9bSAndroid Build Coastguard Worker 'none' turn off all the warnings 1585*663afb9bSAndroid Build Coastguard Worker 'error' warnings are treated as fatal errors" 1586*663afb9bSAndroid Build Coastguard Worker 1587*663afb9bSAndroid Build Coastguard Worker# Help message printed before fatal option parsing errors. 1588*663afb9bSAndroid Build Coastguard Workerfatal_help="Try '\$progname --help' for more information." 1589*663afb9bSAndroid Build Coastguard Worker 1590*663afb9bSAndroid Build Coastguard Worker 1591*663afb9bSAndroid Build Coastguard Worker 1592*663afb9bSAndroid Build Coastguard Worker## ------------------------- ## 1593*663afb9bSAndroid Build Coastguard Worker## Hook function management. ## 1594*663afb9bSAndroid Build Coastguard Worker## ------------------------- ## 1595*663afb9bSAndroid Build Coastguard Worker 1596*663afb9bSAndroid Build Coastguard Worker# This section contains functions for adding, removing, and running hooks 1597*663afb9bSAndroid Build Coastguard Worker# in the main code. A hook is just a list of function names that can be 1598*663afb9bSAndroid Build Coastguard Worker# run in order later on. 1599*663afb9bSAndroid Build Coastguard Worker 1600*663afb9bSAndroid Build Coastguard Worker# func_hookable FUNC_NAME 1601*663afb9bSAndroid Build Coastguard Worker# ----------------------- 1602*663afb9bSAndroid Build Coastguard Worker# Declare that FUNC_NAME will run hooks added with 1603*663afb9bSAndroid Build Coastguard Worker# 'func_add_hook FUNC_NAME ...'. 1604*663afb9bSAndroid Build Coastguard Workerfunc_hookable () 1605*663afb9bSAndroid Build Coastguard Worker{ 1606*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1607*663afb9bSAndroid Build Coastguard Worker 1608*663afb9bSAndroid Build Coastguard Worker func_append hookable_fns " $1" 1609*663afb9bSAndroid Build Coastguard Worker} 1610*663afb9bSAndroid Build Coastguard Worker 1611*663afb9bSAndroid Build Coastguard Worker 1612*663afb9bSAndroid Build Coastguard Worker# func_add_hook FUNC_NAME HOOK_FUNC 1613*663afb9bSAndroid Build Coastguard Worker# --------------------------------- 1614*663afb9bSAndroid Build Coastguard Worker# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 1615*663afb9bSAndroid Build Coastguard Worker# first have been declared "hookable" by a call to 'func_hookable'. 1616*663afb9bSAndroid Build Coastguard Workerfunc_add_hook () 1617*663afb9bSAndroid Build Coastguard Worker{ 1618*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1619*663afb9bSAndroid Build Coastguard Worker 1620*663afb9bSAndroid Build Coastguard Worker case " $hookable_fns " in 1621*663afb9bSAndroid Build Coastguard Worker *" $1 "*) ;; 1622*663afb9bSAndroid Build Coastguard Worker *) func_fatal_error "'$1' does not accept hook functions." ;; 1623*663afb9bSAndroid Build Coastguard Worker esac 1624*663afb9bSAndroid Build Coastguard Worker 1625*663afb9bSAndroid Build Coastguard Worker eval func_append ${1}_hooks '" $2"' 1626*663afb9bSAndroid Build Coastguard Worker} 1627*663afb9bSAndroid Build Coastguard Worker 1628*663afb9bSAndroid Build Coastguard Worker 1629*663afb9bSAndroid Build Coastguard Worker# func_remove_hook FUNC_NAME HOOK_FUNC 1630*663afb9bSAndroid Build Coastguard Worker# ------------------------------------ 1631*663afb9bSAndroid Build Coastguard Worker# Remove HOOK_FUNC from the list of hook functions to be called by 1632*663afb9bSAndroid Build Coastguard Worker# FUNC_NAME. 1633*663afb9bSAndroid Build Coastguard Workerfunc_remove_hook () 1634*663afb9bSAndroid Build Coastguard Worker{ 1635*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1636*663afb9bSAndroid Build Coastguard Worker 1637*663afb9bSAndroid Build Coastguard Worker eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 1638*663afb9bSAndroid Build Coastguard Worker} 1639*663afb9bSAndroid Build Coastguard Worker 1640*663afb9bSAndroid Build Coastguard Worker 1641*663afb9bSAndroid Build Coastguard Worker# func_propagate_result FUNC_NAME_A FUNC_NAME_B 1642*663afb9bSAndroid Build Coastguard Worker# --------------------------------------------- 1643*663afb9bSAndroid Build Coastguard Worker# If the *_result variable of FUNC_NAME_A _is set_, assign its value to 1644*663afb9bSAndroid Build Coastguard Worker# *_result variable of FUNC_NAME_B. 1645*663afb9bSAndroid Build Coastguard Workerfunc_propagate_result () 1646*663afb9bSAndroid Build Coastguard Worker{ 1647*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1648*663afb9bSAndroid Build Coastguard Worker 1649*663afb9bSAndroid Build Coastguard Worker func_propagate_result_result=: 1650*663afb9bSAndroid Build Coastguard Worker if eval "test \"\${${1}_result+set}\" = set" 1651*663afb9bSAndroid Build Coastguard Worker then 1652*663afb9bSAndroid Build Coastguard Worker eval "${2}_result=\$${1}_result" 1653*663afb9bSAndroid Build Coastguard Worker else 1654*663afb9bSAndroid Build Coastguard Worker func_propagate_result_result=false 1655*663afb9bSAndroid Build Coastguard Worker fi 1656*663afb9bSAndroid Build Coastguard Worker} 1657*663afb9bSAndroid Build Coastguard Worker 1658*663afb9bSAndroid Build Coastguard Worker 1659*663afb9bSAndroid Build Coastguard Worker# func_run_hooks FUNC_NAME [ARG]... 1660*663afb9bSAndroid Build Coastguard Worker# --------------------------------- 1661*663afb9bSAndroid Build Coastguard Worker# Run all hook functions registered to FUNC_NAME. 1662*663afb9bSAndroid Build Coastguard Worker# It's assumed that the list of hook functions contains nothing more 1663*663afb9bSAndroid Build Coastguard Worker# than a whitespace-delimited list of legal shell function names, and 1664*663afb9bSAndroid Build Coastguard Worker# no effort is wasted trying to catch shell meta-characters or preserve 1665*663afb9bSAndroid Build Coastguard Worker# whitespace. 1666*663afb9bSAndroid Build Coastguard Workerfunc_run_hooks () 1667*663afb9bSAndroid Build Coastguard Worker{ 1668*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1669*663afb9bSAndroid Build Coastguard Worker 1670*663afb9bSAndroid Build Coastguard Worker case " $hookable_fns " in 1671*663afb9bSAndroid Build Coastguard Worker *" $1 "*) ;; 1672*663afb9bSAndroid Build Coastguard Worker *) func_fatal_error "'$1' does not support hook functions." ;; 1673*663afb9bSAndroid Build Coastguard Worker esac 1674*663afb9bSAndroid Build Coastguard Worker 1675*663afb9bSAndroid Build Coastguard Worker eval _G_hook_fns=\$$1_hooks; shift 1676*663afb9bSAndroid Build Coastguard Worker 1677*663afb9bSAndroid Build Coastguard Worker for _G_hook in $_G_hook_fns; do 1678*663afb9bSAndroid Build Coastguard Worker func_unset "${_G_hook}_result" 1679*663afb9bSAndroid Build Coastguard Worker eval $_G_hook '${1+"$@"}' 1680*663afb9bSAndroid Build Coastguard Worker func_propagate_result $_G_hook func_run_hooks 1681*663afb9bSAndroid Build Coastguard Worker if $func_propagate_result_result; then 1682*663afb9bSAndroid Build Coastguard Worker eval set dummy "$func_run_hooks_result"; shift 1683*663afb9bSAndroid Build Coastguard Worker fi 1684*663afb9bSAndroid Build Coastguard Worker done 1685*663afb9bSAndroid Build Coastguard Worker} 1686*663afb9bSAndroid Build Coastguard Worker 1687*663afb9bSAndroid Build Coastguard Worker 1688*663afb9bSAndroid Build Coastguard Worker 1689*663afb9bSAndroid Build Coastguard Worker## --------------- ## 1690*663afb9bSAndroid Build Coastguard Worker## Option parsing. ## 1691*663afb9bSAndroid Build Coastguard Worker## --------------- ## 1692*663afb9bSAndroid Build Coastguard Worker 1693*663afb9bSAndroid Build Coastguard Worker# In order to add your own option parsing hooks, you must accept the 1694*663afb9bSAndroid Build Coastguard Worker# full positional parameter list from your hook function. You may remove 1695*663afb9bSAndroid Build Coastguard Worker# or edit any options that you action, and then pass back the remaining 1696*663afb9bSAndroid Build Coastguard Worker# unprocessed options in '<hooked_function_name>_result', escaped 1697*663afb9bSAndroid Build Coastguard Worker# suitably for 'eval'. 1698*663afb9bSAndroid Build Coastguard Worker# 1699*663afb9bSAndroid Build Coastguard Worker# The '<hooked_function_name>_result' variable is automatically unset 1700*663afb9bSAndroid Build Coastguard Worker# before your hook gets called; for best performance, only set the 1701*663afb9bSAndroid Build Coastguard Worker# *_result variable when necessary (i.e. don't call the 'func_quote' 1702*663afb9bSAndroid Build Coastguard Worker# function unnecessarily because it can be an expensive operation on some 1703*663afb9bSAndroid Build Coastguard Worker# machines). 1704*663afb9bSAndroid Build Coastguard Worker# 1705*663afb9bSAndroid Build Coastguard Worker# Like this: 1706*663afb9bSAndroid Build Coastguard Worker# 1707*663afb9bSAndroid Build Coastguard Worker# my_options_prep () 1708*663afb9bSAndroid Build Coastguard Worker# { 1709*663afb9bSAndroid Build Coastguard Worker# $debug_cmd 1710*663afb9bSAndroid Build Coastguard Worker# 1711*663afb9bSAndroid Build Coastguard Worker# # Extend the existing usage message. 1712*663afb9bSAndroid Build Coastguard Worker# usage_message=$usage_message' 1713*663afb9bSAndroid Build Coastguard Worker# -s, --silent don'\''t print informational messages 1714*663afb9bSAndroid Build Coastguard Worker# ' 1715*663afb9bSAndroid Build Coastguard Worker# # No change in '$@' (ignored completely by this hook). Leave 1716*663afb9bSAndroid Build Coastguard Worker# # my_options_prep_result variable intact. 1717*663afb9bSAndroid Build Coastguard Worker# } 1718*663afb9bSAndroid Build Coastguard Worker# func_add_hook func_options_prep my_options_prep 1719*663afb9bSAndroid Build Coastguard Worker# 1720*663afb9bSAndroid Build Coastguard Worker# 1721*663afb9bSAndroid Build Coastguard Worker# my_silent_option () 1722*663afb9bSAndroid Build Coastguard Worker# { 1723*663afb9bSAndroid Build Coastguard Worker# $debug_cmd 1724*663afb9bSAndroid Build Coastguard Worker# 1725*663afb9bSAndroid Build Coastguard Worker# args_changed=false 1726*663afb9bSAndroid Build Coastguard Worker# 1727*663afb9bSAndroid Build Coastguard Worker# # Note that, for efficiency, we parse as many options as we can 1728*663afb9bSAndroid Build Coastguard Worker# # recognise in a loop before passing the remainder back to the 1729*663afb9bSAndroid Build Coastguard Worker# # caller on the first unrecognised argument we encounter. 1730*663afb9bSAndroid Build Coastguard Worker# while test $# -gt 0; do 1731*663afb9bSAndroid Build Coastguard Worker# opt=$1; shift 1732*663afb9bSAndroid Build Coastguard Worker# case $opt in 1733*663afb9bSAndroid Build Coastguard Worker# --silent|-s) opt_silent=: 1734*663afb9bSAndroid Build Coastguard Worker# args_changed=: 1735*663afb9bSAndroid Build Coastguard Worker# ;; 1736*663afb9bSAndroid Build Coastguard Worker# # Separate non-argument short options: 1737*663afb9bSAndroid Build Coastguard Worker# -s*) func_split_short_opt "$_G_opt" 1738*663afb9bSAndroid Build Coastguard Worker# set dummy "$func_split_short_opt_name" \ 1739*663afb9bSAndroid Build Coastguard Worker# "-$func_split_short_opt_arg" ${1+"$@"} 1740*663afb9bSAndroid Build Coastguard Worker# shift 1741*663afb9bSAndroid Build Coastguard Worker# args_changed=: 1742*663afb9bSAndroid Build Coastguard Worker# ;; 1743*663afb9bSAndroid Build Coastguard Worker# *) # Make sure the first unrecognised option "$_G_opt" 1744*663afb9bSAndroid Build Coastguard Worker# # is added back to "$@" in case we need it later, 1745*663afb9bSAndroid Build Coastguard Worker# # if $args_changed was set to 'true'. 1746*663afb9bSAndroid Build Coastguard Worker# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 1747*663afb9bSAndroid Build Coastguard Worker# esac 1748*663afb9bSAndroid Build Coastguard Worker# done 1749*663afb9bSAndroid Build Coastguard Worker# 1750*663afb9bSAndroid Build Coastguard Worker# # Only call 'func_quote' here if we processed at least one argument. 1751*663afb9bSAndroid Build Coastguard Worker# if $args_changed; then 1752*663afb9bSAndroid Build Coastguard Worker# func_quote eval ${1+"$@"} 1753*663afb9bSAndroid Build Coastguard Worker# my_silent_option_result=$func_quote_result 1754*663afb9bSAndroid Build Coastguard Worker# fi 1755*663afb9bSAndroid Build Coastguard Worker# } 1756*663afb9bSAndroid Build Coastguard Worker# func_add_hook func_parse_options my_silent_option 1757*663afb9bSAndroid Build Coastguard Worker# 1758*663afb9bSAndroid Build Coastguard Worker# 1759*663afb9bSAndroid Build Coastguard Worker# my_option_validation () 1760*663afb9bSAndroid Build Coastguard Worker# { 1761*663afb9bSAndroid Build Coastguard Worker# $debug_cmd 1762*663afb9bSAndroid Build Coastguard Worker# 1763*663afb9bSAndroid Build Coastguard Worker# $opt_silent && $opt_verbose && func_fatal_help "\ 1764*663afb9bSAndroid Build Coastguard Worker# '--silent' and '--verbose' options are mutually exclusive." 1765*663afb9bSAndroid Build Coastguard Worker# } 1766*663afb9bSAndroid Build Coastguard Worker# func_add_hook func_validate_options my_option_validation 1767*663afb9bSAndroid Build Coastguard Worker# 1768*663afb9bSAndroid Build Coastguard Worker# You'll also need to manually amend $usage_message to reflect the extra 1769*663afb9bSAndroid Build Coastguard Worker# options you parse. It's preferable to append if you can, so that 1770*663afb9bSAndroid Build Coastguard Worker# multiple option parsing hooks can be added safely. 1771*663afb9bSAndroid Build Coastguard Worker 1772*663afb9bSAndroid Build Coastguard Worker 1773*663afb9bSAndroid Build Coastguard Worker# func_options_finish [ARG]... 1774*663afb9bSAndroid Build Coastguard Worker# ---------------------------- 1775*663afb9bSAndroid Build Coastguard Worker# Finishing the option parse loop (call 'func_options' hooks ATM). 1776*663afb9bSAndroid Build Coastguard Workerfunc_options_finish () 1777*663afb9bSAndroid Build Coastguard Worker{ 1778*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1779*663afb9bSAndroid Build Coastguard Worker 1780*663afb9bSAndroid Build Coastguard Worker func_run_hooks func_options ${1+"$@"} 1781*663afb9bSAndroid Build Coastguard Worker func_propagate_result func_run_hooks func_options_finish 1782*663afb9bSAndroid Build Coastguard Worker} 1783*663afb9bSAndroid Build Coastguard Worker 1784*663afb9bSAndroid Build Coastguard Worker 1785*663afb9bSAndroid Build Coastguard Worker# func_options [ARG]... 1786*663afb9bSAndroid Build Coastguard Worker# --------------------- 1787*663afb9bSAndroid Build Coastguard Worker# All the functions called inside func_options are hookable. See the 1788*663afb9bSAndroid Build Coastguard Worker# individual implementations for details. 1789*663afb9bSAndroid Build Coastguard Workerfunc_hookable func_options 1790*663afb9bSAndroid Build Coastguard Workerfunc_options () 1791*663afb9bSAndroid Build Coastguard Worker{ 1792*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1793*663afb9bSAndroid Build Coastguard Worker 1794*663afb9bSAndroid Build Coastguard Worker _G_options_quoted=false 1795*663afb9bSAndroid Build Coastguard Worker 1796*663afb9bSAndroid Build Coastguard Worker for my_func in options_prep parse_options validate_options options_finish 1797*663afb9bSAndroid Build Coastguard Worker do 1798*663afb9bSAndroid Build Coastguard Worker func_unset func_${my_func}_result 1799*663afb9bSAndroid Build Coastguard Worker func_unset func_run_hooks_result 1800*663afb9bSAndroid Build Coastguard Worker eval func_$my_func '${1+"$@"}' 1801*663afb9bSAndroid Build Coastguard Worker func_propagate_result func_$my_func func_options 1802*663afb9bSAndroid Build Coastguard Worker if $func_propagate_result_result; then 1803*663afb9bSAndroid Build Coastguard Worker eval set dummy "$func_options_result"; shift 1804*663afb9bSAndroid Build Coastguard Worker _G_options_quoted=: 1805*663afb9bSAndroid Build Coastguard Worker fi 1806*663afb9bSAndroid Build Coastguard Worker done 1807*663afb9bSAndroid Build Coastguard Worker 1808*663afb9bSAndroid Build Coastguard Worker $_G_options_quoted || { 1809*663afb9bSAndroid Build Coastguard Worker # As we (func_options) are top-level options-parser function and 1810*663afb9bSAndroid Build Coastguard Worker # nobody quoted "$@" for us yet, we need to do it explicitly for 1811*663afb9bSAndroid Build Coastguard Worker # caller. 1812*663afb9bSAndroid Build Coastguard Worker func_quote eval ${1+"$@"} 1813*663afb9bSAndroid Build Coastguard Worker func_options_result=$func_quote_result 1814*663afb9bSAndroid Build Coastguard Worker } 1815*663afb9bSAndroid Build Coastguard Worker} 1816*663afb9bSAndroid Build Coastguard Worker 1817*663afb9bSAndroid Build Coastguard Worker 1818*663afb9bSAndroid Build Coastguard Worker# func_options_prep [ARG]... 1819*663afb9bSAndroid Build Coastguard Worker# -------------------------- 1820*663afb9bSAndroid Build Coastguard Worker# All initialisations required before starting the option parse loop. 1821*663afb9bSAndroid Build Coastguard Worker# Note that when calling hook functions, we pass through the list of 1822*663afb9bSAndroid Build Coastguard Worker# positional parameters. If a hook function modifies that list, and 1823*663afb9bSAndroid Build Coastguard Worker# needs to propagate that back to rest of this script, then the complete 1824*663afb9bSAndroid Build Coastguard Worker# modified list must be put in 'func_run_hooks_result' before returning. 1825*663afb9bSAndroid Build Coastguard Workerfunc_hookable func_options_prep 1826*663afb9bSAndroid Build Coastguard Workerfunc_options_prep () 1827*663afb9bSAndroid Build Coastguard Worker{ 1828*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1829*663afb9bSAndroid Build Coastguard Worker 1830*663afb9bSAndroid Build Coastguard Worker # Option defaults: 1831*663afb9bSAndroid Build Coastguard Worker opt_verbose=false 1832*663afb9bSAndroid Build Coastguard Worker opt_warning_types= 1833*663afb9bSAndroid Build Coastguard Worker 1834*663afb9bSAndroid Build Coastguard Worker func_run_hooks func_options_prep ${1+"$@"} 1835*663afb9bSAndroid Build Coastguard Worker func_propagate_result func_run_hooks func_options_prep 1836*663afb9bSAndroid Build Coastguard Worker} 1837*663afb9bSAndroid Build Coastguard Worker 1838*663afb9bSAndroid Build Coastguard Worker 1839*663afb9bSAndroid Build Coastguard Worker# func_parse_options [ARG]... 1840*663afb9bSAndroid Build Coastguard Worker# --------------------------- 1841*663afb9bSAndroid Build Coastguard Worker# The main option parsing loop. 1842*663afb9bSAndroid Build Coastguard Workerfunc_hookable func_parse_options 1843*663afb9bSAndroid Build Coastguard Workerfunc_parse_options () 1844*663afb9bSAndroid Build Coastguard Worker{ 1845*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1846*663afb9bSAndroid Build Coastguard Worker 1847*663afb9bSAndroid Build Coastguard Worker _G_parse_options_requote=false 1848*663afb9bSAndroid Build Coastguard Worker # this just eases exit handling 1849*663afb9bSAndroid Build Coastguard Worker while test $# -gt 0; do 1850*663afb9bSAndroid Build Coastguard Worker # Defer to hook functions for initial option parsing, so they 1851*663afb9bSAndroid Build Coastguard Worker # get priority in the event of reusing an option name. 1852*663afb9bSAndroid Build Coastguard Worker func_run_hooks func_parse_options ${1+"$@"} 1853*663afb9bSAndroid Build Coastguard Worker func_propagate_result func_run_hooks func_parse_options 1854*663afb9bSAndroid Build Coastguard Worker if $func_propagate_result_result; then 1855*663afb9bSAndroid Build Coastguard Worker eval set dummy "$func_parse_options_result"; shift 1856*663afb9bSAndroid Build Coastguard Worker # Even though we may have changed "$@", we passed the "$@" array 1857*663afb9bSAndroid Build Coastguard Worker # down into the hook and it quoted it for us (because we are in 1858*663afb9bSAndroid Build Coastguard Worker # this if-branch). No need to quote it again. 1859*663afb9bSAndroid Build Coastguard Worker _G_parse_options_requote=false 1860*663afb9bSAndroid Build Coastguard Worker fi 1861*663afb9bSAndroid Build Coastguard Worker 1862*663afb9bSAndroid Build Coastguard Worker # Break out of the loop if we already parsed every option. 1863*663afb9bSAndroid Build Coastguard Worker test $# -gt 0 || break 1864*663afb9bSAndroid Build Coastguard Worker 1865*663afb9bSAndroid Build Coastguard Worker # We expect that one of the options parsed in this function matches 1866*663afb9bSAndroid Build Coastguard Worker # and thus we remove _G_opt from "$@" and need to re-quote. 1867*663afb9bSAndroid Build Coastguard Worker _G_match_parse_options=: 1868*663afb9bSAndroid Build Coastguard Worker _G_opt=$1 1869*663afb9bSAndroid Build Coastguard Worker shift 1870*663afb9bSAndroid Build Coastguard Worker case $_G_opt in 1871*663afb9bSAndroid Build Coastguard Worker --debug|-x) debug_cmd='set -x' 1872*663afb9bSAndroid Build Coastguard Worker func_echo "enabling shell trace mode" >&2 1873*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1874*663afb9bSAndroid Build Coastguard Worker ;; 1875*663afb9bSAndroid Build Coastguard Worker 1876*663afb9bSAndroid Build Coastguard Worker --no-warnings|--no-warning|--no-warn) 1877*663afb9bSAndroid Build Coastguard Worker set dummy --warnings none ${1+"$@"} 1878*663afb9bSAndroid Build Coastguard Worker shift 1879*663afb9bSAndroid Build Coastguard Worker ;; 1880*663afb9bSAndroid Build Coastguard Worker 1881*663afb9bSAndroid Build Coastguard Worker --warnings|--warning|-W) 1882*663afb9bSAndroid Build Coastguard Worker if test $# = 0 && func_missing_arg $_G_opt; then 1883*663afb9bSAndroid Build Coastguard Worker _G_parse_options_requote=: 1884*663afb9bSAndroid Build Coastguard Worker break 1885*663afb9bSAndroid Build Coastguard Worker fi 1886*663afb9bSAndroid Build Coastguard Worker case " $warning_categories $1" in 1887*663afb9bSAndroid Build Coastguard Worker *" $1 "*) 1888*663afb9bSAndroid Build Coastguard Worker # trailing space prevents matching last $1 above 1889*663afb9bSAndroid Build Coastguard Worker func_append_uniq opt_warning_types " $1" 1890*663afb9bSAndroid Build Coastguard Worker ;; 1891*663afb9bSAndroid Build Coastguard Worker *all) 1892*663afb9bSAndroid Build Coastguard Worker opt_warning_types=$warning_categories 1893*663afb9bSAndroid Build Coastguard Worker ;; 1894*663afb9bSAndroid Build Coastguard Worker *none) 1895*663afb9bSAndroid Build Coastguard Worker opt_warning_types=none 1896*663afb9bSAndroid Build Coastguard Worker warning_func=: 1897*663afb9bSAndroid Build Coastguard Worker ;; 1898*663afb9bSAndroid Build Coastguard Worker *error) 1899*663afb9bSAndroid Build Coastguard Worker opt_warning_types=$warning_categories 1900*663afb9bSAndroid Build Coastguard Worker warning_func=func_fatal_error 1901*663afb9bSAndroid Build Coastguard Worker ;; 1902*663afb9bSAndroid Build Coastguard Worker *) 1903*663afb9bSAndroid Build Coastguard Worker func_fatal_error \ 1904*663afb9bSAndroid Build Coastguard Worker "unsupported warning category: '$1'" 1905*663afb9bSAndroid Build Coastguard Worker ;; 1906*663afb9bSAndroid Build Coastguard Worker esac 1907*663afb9bSAndroid Build Coastguard Worker shift 1908*663afb9bSAndroid Build Coastguard Worker ;; 1909*663afb9bSAndroid Build Coastguard Worker 1910*663afb9bSAndroid Build Coastguard Worker --verbose|-v) opt_verbose=: ;; 1911*663afb9bSAndroid Build Coastguard Worker --version) func_version ;; 1912*663afb9bSAndroid Build Coastguard Worker -\?|-h) func_usage ;; 1913*663afb9bSAndroid Build Coastguard Worker --help) func_help ;; 1914*663afb9bSAndroid Build Coastguard Worker 1915*663afb9bSAndroid Build Coastguard Worker # Separate optargs to long options (plugins may need this): 1916*663afb9bSAndroid Build Coastguard Worker --*=*) func_split_equals "$_G_opt" 1917*663afb9bSAndroid Build Coastguard Worker set dummy "$func_split_equals_lhs" \ 1918*663afb9bSAndroid Build Coastguard Worker "$func_split_equals_rhs" ${1+"$@"} 1919*663afb9bSAndroid Build Coastguard Worker shift 1920*663afb9bSAndroid Build Coastguard Worker ;; 1921*663afb9bSAndroid Build Coastguard Worker 1922*663afb9bSAndroid Build Coastguard Worker # Separate optargs to short options: 1923*663afb9bSAndroid Build Coastguard Worker -W*) 1924*663afb9bSAndroid Build Coastguard Worker func_split_short_opt "$_G_opt" 1925*663afb9bSAndroid Build Coastguard Worker set dummy "$func_split_short_opt_name" \ 1926*663afb9bSAndroid Build Coastguard Worker "$func_split_short_opt_arg" ${1+"$@"} 1927*663afb9bSAndroid Build Coastguard Worker shift 1928*663afb9bSAndroid Build Coastguard Worker ;; 1929*663afb9bSAndroid Build Coastguard Worker 1930*663afb9bSAndroid Build Coastguard Worker # Separate non-argument short options: 1931*663afb9bSAndroid Build Coastguard Worker -\?*|-h*|-v*|-x*) 1932*663afb9bSAndroid Build Coastguard Worker func_split_short_opt "$_G_opt" 1933*663afb9bSAndroid Build Coastguard Worker set dummy "$func_split_short_opt_name" \ 1934*663afb9bSAndroid Build Coastguard Worker "-$func_split_short_opt_arg" ${1+"$@"} 1935*663afb9bSAndroid Build Coastguard Worker shift 1936*663afb9bSAndroid Build Coastguard Worker ;; 1937*663afb9bSAndroid Build Coastguard Worker 1938*663afb9bSAndroid Build Coastguard Worker --) _G_parse_options_requote=: ; break ;; 1939*663afb9bSAndroid Build Coastguard Worker -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 1940*663afb9bSAndroid Build Coastguard Worker *) set dummy "$_G_opt" ${1+"$@"}; shift 1941*663afb9bSAndroid Build Coastguard Worker _G_match_parse_options=false 1942*663afb9bSAndroid Build Coastguard Worker break 1943*663afb9bSAndroid Build Coastguard Worker ;; 1944*663afb9bSAndroid Build Coastguard Worker esac 1945*663afb9bSAndroid Build Coastguard Worker 1946*663afb9bSAndroid Build Coastguard Worker if $_G_match_parse_options; then 1947*663afb9bSAndroid Build Coastguard Worker _G_parse_options_requote=: 1948*663afb9bSAndroid Build Coastguard Worker fi 1949*663afb9bSAndroid Build Coastguard Worker done 1950*663afb9bSAndroid Build Coastguard Worker 1951*663afb9bSAndroid Build Coastguard Worker if $_G_parse_options_requote; then 1952*663afb9bSAndroid Build Coastguard Worker # save modified positional parameters for caller 1953*663afb9bSAndroid Build Coastguard Worker func_quote eval ${1+"$@"} 1954*663afb9bSAndroid Build Coastguard Worker func_parse_options_result=$func_quote_result 1955*663afb9bSAndroid Build Coastguard Worker fi 1956*663afb9bSAndroid Build Coastguard Worker} 1957*663afb9bSAndroid Build Coastguard Worker 1958*663afb9bSAndroid Build Coastguard Worker 1959*663afb9bSAndroid Build Coastguard Worker# func_validate_options [ARG]... 1960*663afb9bSAndroid Build Coastguard Worker# ------------------------------ 1961*663afb9bSAndroid Build Coastguard Worker# Perform any sanity checks on option settings and/or unconsumed 1962*663afb9bSAndroid Build Coastguard Worker# arguments. 1963*663afb9bSAndroid Build Coastguard Workerfunc_hookable func_validate_options 1964*663afb9bSAndroid Build Coastguard Workerfunc_validate_options () 1965*663afb9bSAndroid Build Coastguard Worker{ 1966*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1967*663afb9bSAndroid Build Coastguard Worker 1968*663afb9bSAndroid Build Coastguard Worker # Display all warnings if -W was not given. 1969*663afb9bSAndroid Build Coastguard Worker test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 1970*663afb9bSAndroid Build Coastguard Worker 1971*663afb9bSAndroid Build Coastguard Worker func_run_hooks func_validate_options ${1+"$@"} 1972*663afb9bSAndroid Build Coastguard Worker func_propagate_result func_run_hooks func_validate_options 1973*663afb9bSAndroid Build Coastguard Worker 1974*663afb9bSAndroid Build Coastguard Worker # Bail if the options were screwed! 1975*663afb9bSAndroid Build Coastguard Worker $exit_cmd $EXIT_FAILURE 1976*663afb9bSAndroid Build Coastguard Worker} 1977*663afb9bSAndroid Build Coastguard Worker 1978*663afb9bSAndroid Build Coastguard Worker 1979*663afb9bSAndroid Build Coastguard Worker 1980*663afb9bSAndroid Build Coastguard Worker## ----------------- ## 1981*663afb9bSAndroid Build Coastguard Worker## Helper functions. ## 1982*663afb9bSAndroid Build Coastguard Worker## ----------------- ## 1983*663afb9bSAndroid Build Coastguard Worker 1984*663afb9bSAndroid Build Coastguard Worker# This section contains the helper functions used by the rest of the 1985*663afb9bSAndroid Build Coastguard Worker# hookable option parser framework in ascii-betical order. 1986*663afb9bSAndroid Build Coastguard Worker 1987*663afb9bSAndroid Build Coastguard Worker 1988*663afb9bSAndroid Build Coastguard Worker# func_fatal_help ARG... 1989*663afb9bSAndroid Build Coastguard Worker# ---------------------- 1990*663afb9bSAndroid Build Coastguard Worker# Echo program name prefixed message to standard error, followed by 1991*663afb9bSAndroid Build Coastguard Worker# a help hint, and exit. 1992*663afb9bSAndroid Build Coastguard Workerfunc_fatal_help () 1993*663afb9bSAndroid Build Coastguard Worker{ 1994*663afb9bSAndroid Build Coastguard Worker $debug_cmd 1995*663afb9bSAndroid Build Coastguard Worker 1996*663afb9bSAndroid Build Coastguard Worker eval \$ECHO \""Usage: $usage"\" 1997*663afb9bSAndroid Build Coastguard Worker eval \$ECHO \""$fatal_help"\" 1998*663afb9bSAndroid Build Coastguard Worker func_error ${1+"$@"} 1999*663afb9bSAndroid Build Coastguard Worker exit $EXIT_FAILURE 2000*663afb9bSAndroid Build Coastguard Worker} 2001*663afb9bSAndroid Build Coastguard Worker 2002*663afb9bSAndroid Build Coastguard Worker 2003*663afb9bSAndroid Build Coastguard Worker# func_help 2004*663afb9bSAndroid Build Coastguard Worker# --------- 2005*663afb9bSAndroid Build Coastguard Worker# Echo long help message to standard output and exit. 2006*663afb9bSAndroid Build Coastguard Workerfunc_help () 2007*663afb9bSAndroid Build Coastguard Worker{ 2008*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2009*663afb9bSAndroid Build Coastguard Worker 2010*663afb9bSAndroid Build Coastguard Worker func_usage_message 2011*663afb9bSAndroid Build Coastguard Worker $ECHO "$long_help_message" 2012*663afb9bSAndroid Build Coastguard Worker exit 0 2013*663afb9bSAndroid Build Coastguard Worker} 2014*663afb9bSAndroid Build Coastguard Worker 2015*663afb9bSAndroid Build Coastguard Worker 2016*663afb9bSAndroid Build Coastguard Worker# func_missing_arg ARGNAME 2017*663afb9bSAndroid Build Coastguard Worker# ------------------------ 2018*663afb9bSAndroid Build Coastguard Worker# Echo program name prefixed message to standard error and set global 2019*663afb9bSAndroid Build Coastguard Worker# exit_cmd. 2020*663afb9bSAndroid Build Coastguard Workerfunc_missing_arg () 2021*663afb9bSAndroid Build Coastguard Worker{ 2022*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2023*663afb9bSAndroid Build Coastguard Worker 2024*663afb9bSAndroid Build Coastguard Worker func_error "Missing argument for '$1'." 2025*663afb9bSAndroid Build Coastguard Worker exit_cmd=exit 2026*663afb9bSAndroid Build Coastguard Worker} 2027*663afb9bSAndroid Build Coastguard Worker 2028*663afb9bSAndroid Build Coastguard Worker 2029*663afb9bSAndroid Build Coastguard Worker# func_split_equals STRING 2030*663afb9bSAndroid Build Coastguard Worker# ------------------------ 2031*663afb9bSAndroid Build Coastguard Worker# Set func_split_equals_lhs and func_split_equals_rhs shell variables 2032*663afb9bSAndroid Build Coastguard Worker# after splitting STRING at the '=' sign. 2033*663afb9bSAndroid Build Coastguard Workertest -z "$_G_HAVE_XSI_OPS" \ 2034*663afb9bSAndroid Build Coastguard Worker && (eval 'x=a/b/c; 2035*663afb9bSAndroid Build Coastguard Worker test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 2036*663afb9bSAndroid Build Coastguard Worker && _G_HAVE_XSI_OPS=yes 2037*663afb9bSAndroid Build Coastguard Worker 2038*663afb9bSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS" 2039*663afb9bSAndroid Build Coastguard Workerthen 2040*663afb9bSAndroid Build Coastguard Worker # This is an XSI compatible shell, allowing a faster implementation... 2041*663afb9bSAndroid Build Coastguard Worker eval 'func_split_equals () 2042*663afb9bSAndroid Build Coastguard Worker { 2043*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2044*663afb9bSAndroid Build Coastguard Worker 2045*663afb9bSAndroid Build Coastguard Worker func_split_equals_lhs=${1%%=*} 2046*663afb9bSAndroid Build Coastguard Worker func_split_equals_rhs=${1#*=} 2047*663afb9bSAndroid Build Coastguard Worker if test "x$func_split_equals_lhs" = "x$1"; then 2048*663afb9bSAndroid Build Coastguard Worker func_split_equals_rhs= 2049*663afb9bSAndroid Build Coastguard Worker fi 2050*663afb9bSAndroid Build Coastguard Worker }' 2051*663afb9bSAndroid Build Coastguard Workerelse 2052*663afb9bSAndroid Build Coastguard Worker # ...otherwise fall back to using expr, which is often a shell builtin. 2053*663afb9bSAndroid Build Coastguard Worker func_split_equals () 2054*663afb9bSAndroid Build Coastguard Worker { 2055*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2056*663afb9bSAndroid Build Coastguard Worker 2057*663afb9bSAndroid Build Coastguard Worker func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 2058*663afb9bSAndroid Build Coastguard Worker func_split_equals_rhs= 2059*663afb9bSAndroid Build Coastguard Worker test "x$func_split_equals_lhs" = "x$1" \ 2060*663afb9bSAndroid Build Coastguard Worker || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 2061*663afb9bSAndroid Build Coastguard Worker } 2062*663afb9bSAndroid Build Coastguard Workerfi #func_split_equals 2063*663afb9bSAndroid Build Coastguard Worker 2064*663afb9bSAndroid Build Coastguard Worker 2065*663afb9bSAndroid Build Coastguard Worker# func_split_short_opt SHORTOPT 2066*663afb9bSAndroid Build Coastguard Worker# ----------------------------- 2067*663afb9bSAndroid Build Coastguard Worker# Set func_split_short_opt_name and func_split_short_opt_arg shell 2068*663afb9bSAndroid Build Coastguard Worker# variables after splitting SHORTOPT after the 2nd character. 2069*663afb9bSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS" 2070*663afb9bSAndroid Build Coastguard Workerthen 2071*663afb9bSAndroid Build Coastguard Worker # This is an XSI compatible shell, allowing a faster implementation... 2072*663afb9bSAndroid Build Coastguard Worker eval 'func_split_short_opt () 2073*663afb9bSAndroid Build Coastguard Worker { 2074*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2075*663afb9bSAndroid Build Coastguard Worker 2076*663afb9bSAndroid Build Coastguard Worker func_split_short_opt_arg=${1#??} 2077*663afb9bSAndroid Build Coastguard Worker func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 2078*663afb9bSAndroid Build Coastguard Worker }' 2079*663afb9bSAndroid Build Coastguard Workerelse 2080*663afb9bSAndroid Build Coastguard Worker # ...otherwise fall back to using expr, which is often a shell builtin. 2081*663afb9bSAndroid Build Coastguard Worker func_split_short_opt () 2082*663afb9bSAndroid Build Coastguard Worker { 2083*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2084*663afb9bSAndroid Build Coastguard Worker 2085*663afb9bSAndroid Build Coastguard Worker func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` 2086*663afb9bSAndroid Build Coastguard Worker func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 2087*663afb9bSAndroid Build Coastguard Worker } 2088*663afb9bSAndroid Build Coastguard Workerfi #func_split_short_opt 2089*663afb9bSAndroid Build Coastguard Worker 2090*663afb9bSAndroid Build Coastguard Worker 2091*663afb9bSAndroid Build Coastguard Worker# func_usage 2092*663afb9bSAndroid Build Coastguard Worker# ---------- 2093*663afb9bSAndroid Build Coastguard Worker# Echo short help message to standard output and exit. 2094*663afb9bSAndroid Build Coastguard Workerfunc_usage () 2095*663afb9bSAndroid Build Coastguard Worker{ 2096*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2097*663afb9bSAndroid Build Coastguard Worker 2098*663afb9bSAndroid Build Coastguard Worker func_usage_message 2099*663afb9bSAndroid Build Coastguard Worker $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 2100*663afb9bSAndroid Build Coastguard Worker exit 0 2101*663afb9bSAndroid Build Coastguard Worker} 2102*663afb9bSAndroid Build Coastguard Worker 2103*663afb9bSAndroid Build Coastguard Worker 2104*663afb9bSAndroid Build Coastguard Worker# func_usage_message 2105*663afb9bSAndroid Build Coastguard Worker# ------------------ 2106*663afb9bSAndroid Build Coastguard Worker# Echo short help message to standard output. 2107*663afb9bSAndroid Build Coastguard Workerfunc_usage_message () 2108*663afb9bSAndroid Build Coastguard Worker{ 2109*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2110*663afb9bSAndroid Build Coastguard Worker 2111*663afb9bSAndroid Build Coastguard Worker eval \$ECHO \""Usage: $usage"\" 2112*663afb9bSAndroid Build Coastguard Worker echo 2113*663afb9bSAndroid Build Coastguard Worker $SED -n 's|^# || 2114*663afb9bSAndroid Build Coastguard Worker /^Written by/{ 2115*663afb9bSAndroid Build Coastguard Worker x;p;x 2116*663afb9bSAndroid Build Coastguard Worker } 2117*663afb9bSAndroid Build Coastguard Worker h 2118*663afb9bSAndroid Build Coastguard Worker /^Written by/q' < "$progpath" 2119*663afb9bSAndroid Build Coastguard Worker echo 2120*663afb9bSAndroid Build Coastguard Worker eval \$ECHO \""$usage_message"\" 2121*663afb9bSAndroid Build Coastguard Worker} 2122*663afb9bSAndroid Build Coastguard Worker 2123*663afb9bSAndroid Build Coastguard Worker 2124*663afb9bSAndroid Build Coastguard Worker# func_version 2125*663afb9bSAndroid Build Coastguard Worker# ------------ 2126*663afb9bSAndroid Build Coastguard Worker# Echo version message to standard output and exit. 2127*663afb9bSAndroid Build Coastguard Worker# The version message is extracted from the calling file's header 2128*663afb9bSAndroid Build Coastguard Worker# comments, with leading '# ' stripped: 2129*663afb9bSAndroid Build Coastguard Worker# 1. First display the progname and version 2130*663afb9bSAndroid Build Coastguard Worker# 2. Followed by the header comment line matching /^# Written by / 2131*663afb9bSAndroid Build Coastguard Worker# 3. Then a blank line followed by the first following line matching 2132*663afb9bSAndroid Build Coastguard Worker# /^# Copyright / 2133*663afb9bSAndroid Build Coastguard Worker# 4. Immediately followed by any lines between the previous matches, 2134*663afb9bSAndroid Build Coastguard Worker# except lines preceding the intervening completely blank line. 2135*663afb9bSAndroid Build Coastguard Worker# For example, see the header comments of this file. 2136*663afb9bSAndroid Build Coastguard Workerfunc_version () 2137*663afb9bSAndroid Build Coastguard Worker{ 2138*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2139*663afb9bSAndroid Build Coastguard Worker 2140*663afb9bSAndroid Build Coastguard Worker printf '%s\n' "$progname $scriptversion" 2141*663afb9bSAndroid Build Coastguard Worker $SED -n ' 2142*663afb9bSAndroid Build Coastguard Worker /^# Written by /!b 2143*663afb9bSAndroid Build Coastguard Worker s|^# ||; p; n 2144*663afb9bSAndroid Build Coastguard Worker 2145*663afb9bSAndroid Build Coastguard Worker :fwd2blnk 2146*663afb9bSAndroid Build Coastguard Worker /./ { 2147*663afb9bSAndroid Build Coastguard Worker n 2148*663afb9bSAndroid Build Coastguard Worker b fwd2blnk 2149*663afb9bSAndroid Build Coastguard Worker } 2150*663afb9bSAndroid Build Coastguard Worker p; n 2151*663afb9bSAndroid Build Coastguard Worker 2152*663afb9bSAndroid Build Coastguard Worker :holdwrnt 2153*663afb9bSAndroid Build Coastguard Worker s|^# || 2154*663afb9bSAndroid Build Coastguard Worker s|^# *$|| 2155*663afb9bSAndroid Build Coastguard Worker /^Copyright /!{ 2156*663afb9bSAndroid Build Coastguard Worker /./H 2157*663afb9bSAndroid Build Coastguard Worker n 2158*663afb9bSAndroid Build Coastguard Worker b holdwrnt 2159*663afb9bSAndroid Build Coastguard Worker } 2160*663afb9bSAndroid Build Coastguard Worker 2161*663afb9bSAndroid Build Coastguard Worker s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 2162*663afb9bSAndroid Build Coastguard Worker G 2163*663afb9bSAndroid Build Coastguard Worker s|\(\n\)\n*|\1|g 2164*663afb9bSAndroid Build Coastguard Worker p; q' < "$progpath" 2165*663afb9bSAndroid Build Coastguard Worker 2166*663afb9bSAndroid Build Coastguard Worker exit $? 2167*663afb9bSAndroid Build Coastguard Worker} 2168*663afb9bSAndroid Build Coastguard Worker 2169*663afb9bSAndroid Build Coastguard Worker 2170*663afb9bSAndroid Build Coastguard Worker# Local variables: 2171*663afb9bSAndroid Build Coastguard Worker# mode: shell-script 2172*663afb9bSAndroid Build Coastguard Worker# sh-indentation: 2 2173*663afb9bSAndroid Build Coastguard Worker# eval: (add-hook 'before-save-hook 'time-stamp) 2174*663afb9bSAndroid Build Coastguard Worker# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" 2175*663afb9bSAndroid Build Coastguard Worker# time-stamp-time-zone: "UTC" 2176*663afb9bSAndroid Build Coastguard Worker# End: 2177*663afb9bSAndroid Build Coastguard Worker 2178*663afb9bSAndroid Build Coastguard Worker# Set a version string. 2179*663afb9bSAndroid Build Coastguard Workerscriptversion='(GNU libtool) 2.4.6.42-b88ce-dirty' 2180*663afb9bSAndroid Build Coastguard Worker 2181*663afb9bSAndroid Build Coastguard Worker 2182*663afb9bSAndroid Build Coastguard Worker# func_echo ARG... 2183*663afb9bSAndroid Build Coastguard Worker# ---------------- 2184*663afb9bSAndroid Build Coastguard Worker# Libtool also displays the current mode in messages, so override 2185*663afb9bSAndroid Build Coastguard Worker# funclib.sh func_echo with this custom definition. 2186*663afb9bSAndroid Build Coastguard Workerfunc_echo () 2187*663afb9bSAndroid Build Coastguard Worker{ 2188*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2189*663afb9bSAndroid Build Coastguard Worker 2190*663afb9bSAndroid Build Coastguard Worker _G_message=$* 2191*663afb9bSAndroid Build Coastguard Worker 2192*663afb9bSAndroid Build Coastguard Worker func_echo_IFS=$IFS 2193*663afb9bSAndroid Build Coastguard Worker IFS=$nl 2194*663afb9bSAndroid Build Coastguard Worker for _G_line in $_G_message; do 2195*663afb9bSAndroid Build Coastguard Worker IFS=$func_echo_IFS 2196*663afb9bSAndroid Build Coastguard Worker $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 2197*663afb9bSAndroid Build Coastguard Worker done 2198*663afb9bSAndroid Build Coastguard Worker IFS=$func_echo_IFS 2199*663afb9bSAndroid Build Coastguard Worker} 2200*663afb9bSAndroid Build Coastguard Worker 2201*663afb9bSAndroid Build Coastguard Worker 2202*663afb9bSAndroid Build Coastguard Worker# func_warning ARG... 2203*663afb9bSAndroid Build Coastguard Worker# ------------------- 2204*663afb9bSAndroid Build Coastguard Worker# Libtool warnings are not categorized, so override funclib.sh 2205*663afb9bSAndroid Build Coastguard Worker# func_warning with this simpler definition. 2206*663afb9bSAndroid Build Coastguard Workerfunc_warning () 2207*663afb9bSAndroid Build Coastguard Worker{ 2208*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2209*663afb9bSAndroid Build Coastguard Worker 2210*663afb9bSAndroid Build Coastguard Worker $warning_func ${1+"$@"} 2211*663afb9bSAndroid Build Coastguard Worker} 2212*663afb9bSAndroid Build Coastguard Worker 2213*663afb9bSAndroid Build Coastguard Worker 2214*663afb9bSAndroid Build Coastguard Worker## ---------------- ## 2215*663afb9bSAndroid Build Coastguard Worker## Options parsing. ## 2216*663afb9bSAndroid Build Coastguard Worker## ---------------- ## 2217*663afb9bSAndroid Build Coastguard Worker 2218*663afb9bSAndroid Build Coastguard Worker# Hook in the functions to make sure our own options are parsed during 2219*663afb9bSAndroid Build Coastguard Worker# the option parsing loop. 2220*663afb9bSAndroid Build Coastguard Worker 2221*663afb9bSAndroid Build Coastguard Workerusage='$progpath [OPTION]... [MODE-ARG]...' 2222*663afb9bSAndroid Build Coastguard Worker 2223*663afb9bSAndroid Build Coastguard Worker# Short help message in response to '-h'. 2224*663afb9bSAndroid Build Coastguard Workerusage_message="Options: 2225*663afb9bSAndroid Build Coastguard Worker --config show all configuration variables 2226*663afb9bSAndroid Build Coastguard Worker --debug enable verbose shell tracing 2227*663afb9bSAndroid Build Coastguard Worker -n, --dry-run display commands without modifying any files 2228*663afb9bSAndroid Build Coastguard Worker --features display basic configuration information and exit 2229*663afb9bSAndroid Build Coastguard Worker --mode=MODE use operation mode MODE 2230*663afb9bSAndroid Build Coastguard Worker --no-warnings equivalent to '-Wnone' 2231*663afb9bSAndroid Build Coastguard Worker --preserve-dup-deps don't remove duplicate dependency libraries 2232*663afb9bSAndroid Build Coastguard Worker --quiet, --silent don't print informational messages 2233*663afb9bSAndroid Build Coastguard Worker --tag=TAG use configuration variables from tag TAG 2234*663afb9bSAndroid Build Coastguard Worker -v, --verbose print more informational messages than default 2235*663afb9bSAndroid Build Coastguard Worker --version print version information 2236*663afb9bSAndroid Build Coastguard Worker -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 2237*663afb9bSAndroid Build Coastguard Worker -h, --help, --help-all print short, long, or detailed help message 2238*663afb9bSAndroid Build Coastguard Worker" 2239*663afb9bSAndroid Build Coastguard Worker 2240*663afb9bSAndroid Build Coastguard Worker# Additional text appended to 'usage_message' in response to '--help'. 2241*663afb9bSAndroid Build Coastguard Workerfunc_help () 2242*663afb9bSAndroid Build Coastguard Worker{ 2243*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2244*663afb9bSAndroid Build Coastguard Worker 2245*663afb9bSAndroid Build Coastguard Worker func_usage_message 2246*663afb9bSAndroid Build Coastguard Worker $ECHO "$long_help_message 2247*663afb9bSAndroid Build Coastguard Worker 2248*663afb9bSAndroid Build Coastguard WorkerMODE must be one of the following: 2249*663afb9bSAndroid Build Coastguard Worker 2250*663afb9bSAndroid Build Coastguard Worker clean remove files from the build directory 2251*663afb9bSAndroid Build Coastguard Worker compile compile a source file into a libtool object 2252*663afb9bSAndroid Build Coastguard Worker execute automatically set library path, then run a program 2253*663afb9bSAndroid Build Coastguard Worker finish complete the installation of libtool libraries 2254*663afb9bSAndroid Build Coastguard Worker install install libraries or executables 2255*663afb9bSAndroid Build Coastguard Worker link create a library or an executable 2256*663afb9bSAndroid Build Coastguard Worker uninstall remove libraries from an installed directory 2257*663afb9bSAndroid Build Coastguard Worker 2258*663afb9bSAndroid Build Coastguard WorkerMODE-ARGS vary depending on the MODE. When passed as first option, 2259*663afb9bSAndroid Build Coastguard Worker'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 2260*663afb9bSAndroid Build Coastguard WorkerTry '$progname --help --mode=MODE' for a more detailed description of MODE. 2261*663afb9bSAndroid Build Coastguard Worker 2262*663afb9bSAndroid Build Coastguard WorkerWhen reporting a bug, please describe a test case to reproduce it and 2263*663afb9bSAndroid Build Coastguard Workerinclude the following information: 2264*663afb9bSAndroid Build Coastguard Worker 2265*663afb9bSAndroid Build Coastguard Worker host-triplet: $host 2266*663afb9bSAndroid Build Coastguard Worker shell: $SHELL 2267*663afb9bSAndroid Build Coastguard Worker compiler: $LTCC 2268*663afb9bSAndroid Build Coastguard Worker compiler flags: $LTCFLAGS 2269*663afb9bSAndroid Build Coastguard Worker linker: $LD (gnu? $with_gnu_ld) 2270*663afb9bSAndroid Build Coastguard Worker version: $progname (GNU libtool) 2.4.6.42-b88ce-dirty 2271*663afb9bSAndroid Build Coastguard Worker automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 2272*663afb9bSAndroid Build Coastguard Worker autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 2273*663afb9bSAndroid Build Coastguard Worker 2274*663afb9bSAndroid Build Coastguard WorkerReport bugs to <[email protected]>. 2275*663afb9bSAndroid Build Coastguard WorkerGNU libtool home page: <http://www.gnu.org/s/libtool/>. 2276*663afb9bSAndroid Build Coastguard WorkerGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 2277*663afb9bSAndroid Build Coastguard Worker exit 0 2278*663afb9bSAndroid Build Coastguard Worker} 2279*663afb9bSAndroid Build Coastguard Worker 2280*663afb9bSAndroid Build Coastguard Worker 2281*663afb9bSAndroid Build Coastguard Worker# func_lo2o OBJECT-NAME 2282*663afb9bSAndroid Build Coastguard Worker# --------------------- 2283*663afb9bSAndroid Build Coastguard Worker# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 2284*663afb9bSAndroid Build Coastguard Worker# object suffix. 2285*663afb9bSAndroid Build Coastguard Worker 2286*663afb9bSAndroid Build Coastguard Workerlo2o=s/\\.lo\$/.$objext/ 2287*663afb9bSAndroid Build Coastguard Workero2lo=s/\\.$objext\$/.lo/ 2288*663afb9bSAndroid Build Coastguard Worker 2289*663afb9bSAndroid Build Coastguard Workerif test yes = "$_G_HAVE_XSI_OPS"; then 2290*663afb9bSAndroid Build Coastguard Worker eval 'func_lo2o () 2291*663afb9bSAndroid Build Coastguard Worker { 2292*663afb9bSAndroid Build Coastguard Worker case $1 in 2293*663afb9bSAndroid Build Coastguard Worker *.lo) func_lo2o_result=${1%.lo}.$objext ;; 2294*663afb9bSAndroid Build Coastguard Worker * ) func_lo2o_result=$1 ;; 2295*663afb9bSAndroid Build Coastguard Worker esac 2296*663afb9bSAndroid Build Coastguard Worker }' 2297*663afb9bSAndroid Build Coastguard Worker 2298*663afb9bSAndroid Build Coastguard Worker # func_xform LIBOBJ-OR-SOURCE 2299*663afb9bSAndroid Build Coastguard Worker # --------------------------- 2300*663afb9bSAndroid Build Coastguard Worker # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 2301*663afb9bSAndroid Build Coastguard Worker # suffix to a '.lo' libtool-object suffix. 2302*663afb9bSAndroid Build Coastguard Worker eval 'func_xform () 2303*663afb9bSAndroid Build Coastguard Worker { 2304*663afb9bSAndroid Build Coastguard Worker func_xform_result=${1%.*}.lo 2305*663afb9bSAndroid Build Coastguard Worker }' 2306*663afb9bSAndroid Build Coastguard Workerelse 2307*663afb9bSAndroid Build Coastguard Worker # ...otherwise fall back to using sed. 2308*663afb9bSAndroid Build Coastguard Worker func_lo2o () 2309*663afb9bSAndroid Build Coastguard Worker { 2310*663afb9bSAndroid Build Coastguard Worker func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 2311*663afb9bSAndroid Build Coastguard Worker } 2312*663afb9bSAndroid Build Coastguard Worker 2313*663afb9bSAndroid Build Coastguard Worker func_xform () 2314*663afb9bSAndroid Build Coastguard Worker { 2315*663afb9bSAndroid Build Coastguard Worker func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 2316*663afb9bSAndroid Build Coastguard Worker } 2317*663afb9bSAndroid Build Coastguard Workerfi 2318*663afb9bSAndroid Build Coastguard Worker 2319*663afb9bSAndroid Build Coastguard Worker 2320*663afb9bSAndroid Build Coastguard Worker# func_fatal_configuration ARG... 2321*663afb9bSAndroid Build Coastguard Worker# ------------------------------- 2322*663afb9bSAndroid Build Coastguard Worker# Echo program name prefixed message to standard error, followed by 2323*663afb9bSAndroid Build Coastguard Worker# a configuration failure hint, and exit. 2324*663afb9bSAndroid Build Coastguard Workerfunc_fatal_configuration () 2325*663afb9bSAndroid Build Coastguard Worker{ 2326*663afb9bSAndroid Build Coastguard Worker func_fatal_error ${1+"$@"} \ 2327*663afb9bSAndroid Build Coastguard Worker "See the $PACKAGE documentation for more information." \ 2328*663afb9bSAndroid Build Coastguard Worker "Fatal configuration error." 2329*663afb9bSAndroid Build Coastguard Worker} 2330*663afb9bSAndroid Build Coastguard Worker 2331*663afb9bSAndroid Build Coastguard Worker 2332*663afb9bSAndroid Build Coastguard Worker# func_config 2333*663afb9bSAndroid Build Coastguard Worker# ----------- 2334*663afb9bSAndroid Build Coastguard Worker# Display the configuration for all the tags in this script. 2335*663afb9bSAndroid Build Coastguard Workerfunc_config () 2336*663afb9bSAndroid Build Coastguard Worker{ 2337*663afb9bSAndroid Build Coastguard Worker re_begincf='^# ### BEGIN LIBTOOL' 2338*663afb9bSAndroid Build Coastguard Worker re_endcf='^# ### END LIBTOOL' 2339*663afb9bSAndroid Build Coastguard Worker 2340*663afb9bSAndroid Build Coastguard Worker # Default configuration. 2341*663afb9bSAndroid Build Coastguard Worker $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 2342*663afb9bSAndroid Build Coastguard Worker 2343*663afb9bSAndroid Build Coastguard Worker # Now print the configurations for the tags. 2344*663afb9bSAndroid Build Coastguard Worker for tagname in $taglist; do 2345*663afb9bSAndroid Build Coastguard Worker $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2346*663afb9bSAndroid Build Coastguard Worker done 2347*663afb9bSAndroid Build Coastguard Worker 2348*663afb9bSAndroid Build Coastguard Worker exit $? 2349*663afb9bSAndroid Build Coastguard Worker} 2350*663afb9bSAndroid Build Coastguard Worker 2351*663afb9bSAndroid Build Coastguard Worker 2352*663afb9bSAndroid Build Coastguard Worker# func_features 2353*663afb9bSAndroid Build Coastguard Worker# ------------- 2354*663afb9bSAndroid Build Coastguard Worker# Display the features supported by this script. 2355*663afb9bSAndroid Build Coastguard Workerfunc_features () 2356*663afb9bSAndroid Build Coastguard Worker{ 2357*663afb9bSAndroid Build Coastguard Worker echo "host: $host" 2358*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 2359*663afb9bSAndroid Build Coastguard Worker echo "enable shared libraries" 2360*663afb9bSAndroid Build Coastguard Worker else 2361*663afb9bSAndroid Build Coastguard Worker echo "disable shared libraries" 2362*663afb9bSAndroid Build Coastguard Worker fi 2363*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 2364*663afb9bSAndroid Build Coastguard Worker echo "enable static libraries" 2365*663afb9bSAndroid Build Coastguard Worker else 2366*663afb9bSAndroid Build Coastguard Worker echo "disable static libraries" 2367*663afb9bSAndroid Build Coastguard Worker fi 2368*663afb9bSAndroid Build Coastguard Worker 2369*663afb9bSAndroid Build Coastguard Worker exit $? 2370*663afb9bSAndroid Build Coastguard Worker} 2371*663afb9bSAndroid Build Coastguard Worker 2372*663afb9bSAndroid Build Coastguard Worker 2373*663afb9bSAndroid Build Coastguard Worker# func_enable_tag TAGNAME 2374*663afb9bSAndroid Build Coastguard Worker# ----------------------- 2375*663afb9bSAndroid Build Coastguard Worker# Verify that TAGNAME is valid, and either flag an error and exit, or 2376*663afb9bSAndroid Build Coastguard Worker# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2377*663afb9bSAndroid Build Coastguard Worker# variable here. 2378*663afb9bSAndroid Build Coastguard Workerfunc_enable_tag () 2379*663afb9bSAndroid Build Coastguard Worker{ 2380*663afb9bSAndroid Build Coastguard Worker # Global variable: 2381*663afb9bSAndroid Build Coastguard Worker tagname=$1 2382*663afb9bSAndroid Build Coastguard Worker 2383*663afb9bSAndroid Build Coastguard Worker re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 2384*663afb9bSAndroid Build Coastguard Worker re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 2385*663afb9bSAndroid Build Coastguard Worker sed_extractcf=/$re_begincf/,/$re_endcf/p 2386*663afb9bSAndroid Build Coastguard Worker 2387*663afb9bSAndroid Build Coastguard Worker # Validate tagname. 2388*663afb9bSAndroid Build Coastguard Worker case $tagname in 2389*663afb9bSAndroid Build Coastguard Worker *[!-_A-Za-z0-9,/]*) 2390*663afb9bSAndroid Build Coastguard Worker func_fatal_error "invalid tag name: $tagname" 2391*663afb9bSAndroid Build Coastguard Worker ;; 2392*663afb9bSAndroid Build Coastguard Worker esac 2393*663afb9bSAndroid Build Coastguard Worker 2394*663afb9bSAndroid Build Coastguard Worker # Don't test for the "default" C tag, as we know it's 2395*663afb9bSAndroid Build Coastguard Worker # there but not specially marked. 2396*663afb9bSAndroid Build Coastguard Worker case $tagname in 2397*663afb9bSAndroid Build Coastguard Worker CC) ;; 2398*663afb9bSAndroid Build Coastguard Worker *) 2399*663afb9bSAndroid Build Coastguard Worker if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 2400*663afb9bSAndroid Build Coastguard Worker taglist="$taglist $tagname" 2401*663afb9bSAndroid Build Coastguard Worker 2402*663afb9bSAndroid Build Coastguard Worker # Evaluate the configuration. Be careful to quote the path 2403*663afb9bSAndroid Build Coastguard Worker # and the sed script, to avoid splitting on whitespace, but 2404*663afb9bSAndroid Build Coastguard Worker # also don't use non-portable quotes within backquotes within 2405*663afb9bSAndroid Build Coastguard Worker # quotes we have to do it in 2 steps: 2406*663afb9bSAndroid Build Coastguard Worker extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 2407*663afb9bSAndroid Build Coastguard Worker eval "$extractedcf" 2408*663afb9bSAndroid Build Coastguard Worker else 2409*663afb9bSAndroid Build Coastguard Worker func_error "ignoring unknown tag $tagname" 2410*663afb9bSAndroid Build Coastguard Worker fi 2411*663afb9bSAndroid Build Coastguard Worker ;; 2412*663afb9bSAndroid Build Coastguard Worker esac 2413*663afb9bSAndroid Build Coastguard Worker} 2414*663afb9bSAndroid Build Coastguard Worker 2415*663afb9bSAndroid Build Coastguard Worker 2416*663afb9bSAndroid Build Coastguard Worker# func_check_version_match 2417*663afb9bSAndroid Build Coastguard Worker# ------------------------ 2418*663afb9bSAndroid Build Coastguard Worker# Ensure that we are using m4 macros, and libtool script from the same 2419*663afb9bSAndroid Build Coastguard Worker# release of libtool. 2420*663afb9bSAndroid Build Coastguard Workerfunc_check_version_match () 2421*663afb9bSAndroid Build Coastguard Worker{ 2422*663afb9bSAndroid Build Coastguard Worker if test "$package_revision" != "$macro_revision"; then 2423*663afb9bSAndroid Build Coastguard Worker if test "$VERSION" != "$macro_version"; then 2424*663afb9bSAndroid Build Coastguard Worker if test -z "$macro_version"; then 2425*663afb9bSAndroid Build Coastguard Worker cat >&2 <<_LT_EOF 2426*663afb9bSAndroid Build Coastguard Worker$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2427*663afb9bSAndroid Build Coastguard Worker$progname: definition of this LT_INIT comes from an older release. 2428*663afb9bSAndroid Build Coastguard Worker$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2429*663afb9bSAndroid Build Coastguard Worker$progname: and run autoconf again. 2430*663afb9bSAndroid Build Coastguard Worker_LT_EOF 2431*663afb9bSAndroid Build Coastguard Worker else 2432*663afb9bSAndroid Build Coastguard Worker cat >&2 <<_LT_EOF 2433*663afb9bSAndroid Build Coastguard Worker$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2434*663afb9bSAndroid Build Coastguard Worker$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2435*663afb9bSAndroid Build Coastguard Worker$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2436*663afb9bSAndroid Build Coastguard Worker$progname: and run autoconf again. 2437*663afb9bSAndroid Build Coastguard Worker_LT_EOF 2438*663afb9bSAndroid Build Coastguard Worker fi 2439*663afb9bSAndroid Build Coastguard Worker else 2440*663afb9bSAndroid Build Coastguard Worker cat >&2 <<_LT_EOF 2441*663afb9bSAndroid Build Coastguard Worker$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2442*663afb9bSAndroid Build Coastguard Worker$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2443*663afb9bSAndroid Build Coastguard Worker$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2444*663afb9bSAndroid Build Coastguard Worker$progname: of $PACKAGE $VERSION and run autoconf again. 2445*663afb9bSAndroid Build Coastguard Worker_LT_EOF 2446*663afb9bSAndroid Build Coastguard Worker fi 2447*663afb9bSAndroid Build Coastguard Worker 2448*663afb9bSAndroid Build Coastguard Worker exit $EXIT_MISMATCH 2449*663afb9bSAndroid Build Coastguard Worker fi 2450*663afb9bSAndroid Build Coastguard Worker} 2451*663afb9bSAndroid Build Coastguard Worker 2452*663afb9bSAndroid Build Coastguard Worker 2453*663afb9bSAndroid Build Coastguard Worker# libtool_options_prep [ARG]... 2454*663afb9bSAndroid Build Coastguard Worker# ----------------------------- 2455*663afb9bSAndroid Build Coastguard Worker# Preparation for options parsed by libtool. 2456*663afb9bSAndroid Build Coastguard Workerlibtool_options_prep () 2457*663afb9bSAndroid Build Coastguard Worker{ 2458*663afb9bSAndroid Build Coastguard Worker $debug_mode 2459*663afb9bSAndroid Build Coastguard Worker 2460*663afb9bSAndroid Build Coastguard Worker # Option defaults: 2461*663afb9bSAndroid Build Coastguard Worker opt_config=false 2462*663afb9bSAndroid Build Coastguard Worker opt_dlopen= 2463*663afb9bSAndroid Build Coastguard Worker opt_dry_run=false 2464*663afb9bSAndroid Build Coastguard Worker opt_help=false 2465*663afb9bSAndroid Build Coastguard Worker opt_mode= 2466*663afb9bSAndroid Build Coastguard Worker opt_preserve_dup_deps=false 2467*663afb9bSAndroid Build Coastguard Worker opt_quiet=false 2468*663afb9bSAndroid Build Coastguard Worker 2469*663afb9bSAndroid Build Coastguard Worker nonopt= 2470*663afb9bSAndroid Build Coastguard Worker preserve_args= 2471*663afb9bSAndroid Build Coastguard Worker 2472*663afb9bSAndroid Build Coastguard Worker _G_rc_lt_options_prep=: 2473*663afb9bSAndroid Build Coastguard Worker 2474*663afb9bSAndroid Build Coastguard Worker # Shorthand for --mode=foo, only valid as the first argument 2475*663afb9bSAndroid Build Coastguard Worker case $1 in 2476*663afb9bSAndroid Build Coastguard Worker clean|clea|cle|cl) 2477*663afb9bSAndroid Build Coastguard Worker shift; set dummy --mode clean ${1+"$@"}; shift 2478*663afb9bSAndroid Build Coastguard Worker ;; 2479*663afb9bSAndroid Build Coastguard Worker compile|compil|compi|comp|com|co|c) 2480*663afb9bSAndroid Build Coastguard Worker shift; set dummy --mode compile ${1+"$@"}; shift 2481*663afb9bSAndroid Build Coastguard Worker ;; 2482*663afb9bSAndroid Build Coastguard Worker execute|execut|execu|exec|exe|ex|e) 2483*663afb9bSAndroid Build Coastguard Worker shift; set dummy --mode execute ${1+"$@"}; shift 2484*663afb9bSAndroid Build Coastguard Worker ;; 2485*663afb9bSAndroid Build Coastguard Worker finish|finis|fini|fin|fi|f) 2486*663afb9bSAndroid Build Coastguard Worker shift; set dummy --mode finish ${1+"$@"}; shift 2487*663afb9bSAndroid Build Coastguard Worker ;; 2488*663afb9bSAndroid Build Coastguard Worker install|instal|insta|inst|ins|in|i) 2489*663afb9bSAndroid Build Coastguard Worker shift; set dummy --mode install ${1+"$@"}; shift 2490*663afb9bSAndroid Build Coastguard Worker ;; 2491*663afb9bSAndroid Build Coastguard Worker link|lin|li|l) 2492*663afb9bSAndroid Build Coastguard Worker shift; set dummy --mode link ${1+"$@"}; shift 2493*663afb9bSAndroid Build Coastguard Worker ;; 2494*663afb9bSAndroid Build Coastguard Worker uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 2495*663afb9bSAndroid Build Coastguard Worker shift; set dummy --mode uninstall ${1+"$@"}; shift 2496*663afb9bSAndroid Build Coastguard Worker ;; 2497*663afb9bSAndroid Build Coastguard Worker *) 2498*663afb9bSAndroid Build Coastguard Worker _G_rc_lt_options_prep=false 2499*663afb9bSAndroid Build Coastguard Worker ;; 2500*663afb9bSAndroid Build Coastguard Worker esac 2501*663afb9bSAndroid Build Coastguard Worker 2502*663afb9bSAndroid Build Coastguard Worker if $_G_rc_lt_options_prep; then 2503*663afb9bSAndroid Build Coastguard Worker # Pass back the list of options. 2504*663afb9bSAndroid Build Coastguard Worker func_quote eval ${1+"$@"} 2505*663afb9bSAndroid Build Coastguard Worker libtool_options_prep_result=$func_quote_result 2506*663afb9bSAndroid Build Coastguard Worker fi 2507*663afb9bSAndroid Build Coastguard Worker} 2508*663afb9bSAndroid Build Coastguard Workerfunc_add_hook func_options_prep libtool_options_prep 2509*663afb9bSAndroid Build Coastguard Worker 2510*663afb9bSAndroid Build Coastguard Worker 2511*663afb9bSAndroid Build Coastguard Worker# libtool_parse_options [ARG]... 2512*663afb9bSAndroid Build Coastguard Worker# --------------------------------- 2513*663afb9bSAndroid Build Coastguard Worker# Provide handling for libtool specific options. 2514*663afb9bSAndroid Build Coastguard Workerlibtool_parse_options () 2515*663afb9bSAndroid Build Coastguard Worker{ 2516*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2517*663afb9bSAndroid Build Coastguard Worker 2518*663afb9bSAndroid Build Coastguard Worker _G_rc_lt_parse_options=false 2519*663afb9bSAndroid Build Coastguard Worker 2520*663afb9bSAndroid Build Coastguard Worker # Perform our own loop to consume as many options as possible in 2521*663afb9bSAndroid Build Coastguard Worker # each iteration. 2522*663afb9bSAndroid Build Coastguard Worker while test $# -gt 0; do 2523*663afb9bSAndroid Build Coastguard Worker _G_match_lt_parse_options=: 2524*663afb9bSAndroid Build Coastguard Worker _G_opt=$1 2525*663afb9bSAndroid Build Coastguard Worker shift 2526*663afb9bSAndroid Build Coastguard Worker case $_G_opt in 2527*663afb9bSAndroid Build Coastguard Worker --dry-run|--dryrun|-n) 2528*663afb9bSAndroid Build Coastguard Worker opt_dry_run=: 2529*663afb9bSAndroid Build Coastguard Worker ;; 2530*663afb9bSAndroid Build Coastguard Worker 2531*663afb9bSAndroid Build Coastguard Worker --config) func_config ;; 2532*663afb9bSAndroid Build Coastguard Worker 2533*663afb9bSAndroid Build Coastguard Worker --dlopen|-dlopen) 2534*663afb9bSAndroid Build Coastguard Worker opt_dlopen="${opt_dlopen+$opt_dlopen 2535*663afb9bSAndroid Build Coastguard Worker}$1" 2536*663afb9bSAndroid Build Coastguard Worker shift 2537*663afb9bSAndroid Build Coastguard Worker ;; 2538*663afb9bSAndroid Build Coastguard Worker 2539*663afb9bSAndroid Build Coastguard Worker --preserve-dup-deps) 2540*663afb9bSAndroid Build Coastguard Worker opt_preserve_dup_deps=: ;; 2541*663afb9bSAndroid Build Coastguard Worker 2542*663afb9bSAndroid Build Coastguard Worker --features) func_features ;; 2543*663afb9bSAndroid Build Coastguard Worker 2544*663afb9bSAndroid Build Coastguard Worker --finish) set dummy --mode finish ${1+"$@"}; shift ;; 2545*663afb9bSAndroid Build Coastguard Worker 2546*663afb9bSAndroid Build Coastguard Worker --help) opt_help=: ;; 2547*663afb9bSAndroid Build Coastguard Worker 2548*663afb9bSAndroid Build Coastguard Worker --help-all) opt_help=': help-all' ;; 2549*663afb9bSAndroid Build Coastguard Worker 2550*663afb9bSAndroid Build Coastguard Worker --mode) test $# = 0 && func_missing_arg $_G_opt && break 2551*663afb9bSAndroid Build Coastguard Worker opt_mode=$1 2552*663afb9bSAndroid Build Coastguard Worker case $1 in 2553*663afb9bSAndroid Build Coastguard Worker # Valid mode arguments: 2554*663afb9bSAndroid Build Coastguard Worker clean|compile|execute|finish|install|link|relink|uninstall) ;; 2555*663afb9bSAndroid Build Coastguard Worker 2556*663afb9bSAndroid Build Coastguard Worker # Catch anything else as an error 2557*663afb9bSAndroid Build Coastguard Worker *) func_error "invalid argument for $_G_opt" 2558*663afb9bSAndroid Build Coastguard Worker exit_cmd=exit 2559*663afb9bSAndroid Build Coastguard Worker break 2560*663afb9bSAndroid Build Coastguard Worker ;; 2561*663afb9bSAndroid Build Coastguard Worker esac 2562*663afb9bSAndroid Build Coastguard Worker shift 2563*663afb9bSAndroid Build Coastguard Worker ;; 2564*663afb9bSAndroid Build Coastguard Worker 2565*663afb9bSAndroid Build Coastguard Worker --no-silent|--no-quiet) 2566*663afb9bSAndroid Build Coastguard Worker opt_quiet=false 2567*663afb9bSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt" 2568*663afb9bSAndroid Build Coastguard Worker ;; 2569*663afb9bSAndroid Build Coastguard Worker 2570*663afb9bSAndroid Build Coastguard Worker --no-warnings|--no-warning|--no-warn) 2571*663afb9bSAndroid Build Coastguard Worker opt_warning=false 2572*663afb9bSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt" 2573*663afb9bSAndroid Build Coastguard Worker ;; 2574*663afb9bSAndroid Build Coastguard Worker 2575*663afb9bSAndroid Build Coastguard Worker --no-verbose) 2576*663afb9bSAndroid Build Coastguard Worker opt_verbose=false 2577*663afb9bSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt" 2578*663afb9bSAndroid Build Coastguard Worker ;; 2579*663afb9bSAndroid Build Coastguard Worker 2580*663afb9bSAndroid Build Coastguard Worker --silent|--quiet) 2581*663afb9bSAndroid Build Coastguard Worker opt_quiet=: 2582*663afb9bSAndroid Build Coastguard Worker opt_verbose=false 2583*663afb9bSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt" 2584*663afb9bSAndroid Build Coastguard Worker ;; 2585*663afb9bSAndroid Build Coastguard Worker 2586*663afb9bSAndroid Build Coastguard Worker --tag) test $# = 0 && func_missing_arg $_G_opt && break 2587*663afb9bSAndroid Build Coastguard Worker opt_tag=$1 2588*663afb9bSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt $1" 2589*663afb9bSAndroid Build Coastguard Worker func_enable_tag "$1" 2590*663afb9bSAndroid Build Coastguard Worker shift 2591*663afb9bSAndroid Build Coastguard Worker ;; 2592*663afb9bSAndroid Build Coastguard Worker 2593*663afb9bSAndroid Build Coastguard Worker --verbose|-v) opt_quiet=false 2594*663afb9bSAndroid Build Coastguard Worker opt_verbose=: 2595*663afb9bSAndroid Build Coastguard Worker func_append preserve_args " $_G_opt" 2596*663afb9bSAndroid Build Coastguard Worker ;; 2597*663afb9bSAndroid Build Coastguard Worker 2598*663afb9bSAndroid Build Coastguard Worker # An option not handled by this hook function: 2599*663afb9bSAndroid Build Coastguard Worker *) set dummy "$_G_opt" ${1+"$@"} ; shift 2600*663afb9bSAndroid Build Coastguard Worker _G_match_lt_parse_options=false 2601*663afb9bSAndroid Build Coastguard Worker break 2602*663afb9bSAndroid Build Coastguard Worker ;; 2603*663afb9bSAndroid Build Coastguard Worker esac 2604*663afb9bSAndroid Build Coastguard Worker $_G_match_lt_parse_options && _G_rc_lt_parse_options=: 2605*663afb9bSAndroid Build Coastguard Worker done 2606*663afb9bSAndroid Build Coastguard Worker 2607*663afb9bSAndroid Build Coastguard Worker if $_G_rc_lt_parse_options; then 2608*663afb9bSAndroid Build Coastguard Worker # save modified positional parameters for caller 2609*663afb9bSAndroid Build Coastguard Worker func_quote eval ${1+"$@"} 2610*663afb9bSAndroid Build Coastguard Worker libtool_parse_options_result=$func_quote_result 2611*663afb9bSAndroid Build Coastguard Worker fi 2612*663afb9bSAndroid Build Coastguard Worker} 2613*663afb9bSAndroid Build Coastguard Workerfunc_add_hook func_parse_options libtool_parse_options 2614*663afb9bSAndroid Build Coastguard Worker 2615*663afb9bSAndroid Build Coastguard Worker 2616*663afb9bSAndroid Build Coastguard Worker 2617*663afb9bSAndroid Build Coastguard Worker# libtool_validate_options [ARG]... 2618*663afb9bSAndroid Build Coastguard Worker# --------------------------------- 2619*663afb9bSAndroid Build Coastguard Worker# Perform any sanity checks on option settings and/or unconsumed 2620*663afb9bSAndroid Build Coastguard Worker# arguments. 2621*663afb9bSAndroid Build Coastguard Workerlibtool_validate_options () 2622*663afb9bSAndroid Build Coastguard Worker{ 2623*663afb9bSAndroid Build Coastguard Worker # save first non-option argument 2624*663afb9bSAndroid Build Coastguard Worker if test 0 -lt $#; then 2625*663afb9bSAndroid Build Coastguard Worker nonopt=$1 2626*663afb9bSAndroid Build Coastguard Worker shift 2627*663afb9bSAndroid Build Coastguard Worker fi 2628*663afb9bSAndroid Build Coastguard Worker 2629*663afb9bSAndroid Build Coastguard Worker # preserve --debug 2630*663afb9bSAndroid Build Coastguard Worker test : = "$debug_cmd" || func_append preserve_args " --debug" 2631*663afb9bSAndroid Build Coastguard Worker 2632*663afb9bSAndroid Build Coastguard Worker case $host in 2633*663afb9bSAndroid Build Coastguard Worker # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 2634*663afb9bSAndroid Build Coastguard Worker # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 2635*663afb9bSAndroid Build Coastguard Worker *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 2636*663afb9bSAndroid Build Coastguard Worker # don't eliminate duplications in $postdeps and $predeps 2637*663afb9bSAndroid Build Coastguard Worker opt_duplicate_compiler_generated_deps=: 2638*663afb9bSAndroid Build Coastguard Worker ;; 2639*663afb9bSAndroid Build Coastguard Worker *) 2640*663afb9bSAndroid Build Coastguard Worker opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 2641*663afb9bSAndroid Build Coastguard Worker ;; 2642*663afb9bSAndroid Build Coastguard Worker esac 2643*663afb9bSAndroid Build Coastguard Worker 2644*663afb9bSAndroid Build Coastguard Worker $opt_help || { 2645*663afb9bSAndroid Build Coastguard Worker # Sanity checks first: 2646*663afb9bSAndroid Build Coastguard Worker func_check_version_match 2647*663afb9bSAndroid Build Coastguard Worker 2648*663afb9bSAndroid Build Coastguard Worker test yes != "$build_libtool_libs" \ 2649*663afb9bSAndroid Build Coastguard Worker && test yes != "$build_old_libs" \ 2650*663afb9bSAndroid Build Coastguard Worker && func_fatal_configuration "not configured to build any kind of library" 2651*663afb9bSAndroid Build Coastguard Worker 2652*663afb9bSAndroid Build Coastguard Worker # Darwin sucks 2653*663afb9bSAndroid Build Coastguard Worker eval std_shrext=\"$shrext_cmds\" 2654*663afb9bSAndroid Build Coastguard Worker 2655*663afb9bSAndroid Build Coastguard Worker # Only execute mode is allowed to have -dlopen flags. 2656*663afb9bSAndroid Build Coastguard Worker if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 2657*663afb9bSAndroid Build Coastguard Worker func_error "unrecognized option '-dlopen'" 2658*663afb9bSAndroid Build Coastguard Worker $ECHO "$help" 1>&2 2659*663afb9bSAndroid Build Coastguard Worker exit $EXIT_FAILURE 2660*663afb9bSAndroid Build Coastguard Worker fi 2661*663afb9bSAndroid Build Coastguard Worker 2662*663afb9bSAndroid Build Coastguard Worker # Change the help message to a mode-specific one. 2663*663afb9bSAndroid Build Coastguard Worker generic_help=$help 2664*663afb9bSAndroid Build Coastguard Worker help="Try '$progname --help --mode=$opt_mode' for more information." 2665*663afb9bSAndroid Build Coastguard Worker } 2666*663afb9bSAndroid Build Coastguard Worker 2667*663afb9bSAndroid Build Coastguard Worker # Pass back the unparsed argument list 2668*663afb9bSAndroid Build Coastguard Worker func_quote eval ${1+"$@"} 2669*663afb9bSAndroid Build Coastguard Worker libtool_validate_options_result=$func_quote_result 2670*663afb9bSAndroid Build Coastguard Worker} 2671*663afb9bSAndroid Build Coastguard Workerfunc_add_hook func_validate_options libtool_validate_options 2672*663afb9bSAndroid Build Coastguard Worker 2673*663afb9bSAndroid Build Coastguard Worker 2674*663afb9bSAndroid Build Coastguard Worker# Process options as early as possible so that --help and --version 2675*663afb9bSAndroid Build Coastguard Worker# can return quickly. 2676*663afb9bSAndroid Build Coastguard Workerfunc_options ${1+"$@"} 2677*663afb9bSAndroid Build Coastguard Workereval set dummy "$func_options_result"; shift 2678*663afb9bSAndroid Build Coastguard Worker 2679*663afb9bSAndroid Build Coastguard Worker 2680*663afb9bSAndroid Build Coastguard Worker 2681*663afb9bSAndroid Build Coastguard Worker## ----------- ## 2682*663afb9bSAndroid Build Coastguard Worker## Main. ## 2683*663afb9bSAndroid Build Coastguard Worker## ----------- ## 2684*663afb9bSAndroid Build Coastguard Worker 2685*663afb9bSAndroid Build Coastguard Workermagic='%%%MAGIC variable%%%' 2686*663afb9bSAndroid Build Coastguard Workermagic_exe='%%%MAGIC EXE variable%%%' 2687*663afb9bSAndroid Build Coastguard Worker 2688*663afb9bSAndroid Build Coastguard Worker# Global variables. 2689*663afb9bSAndroid Build Coastguard Workerextracted_archives= 2690*663afb9bSAndroid Build Coastguard Workerextracted_serial=0 2691*663afb9bSAndroid Build Coastguard Worker 2692*663afb9bSAndroid Build Coastguard Worker# If this variable is set in any of the actions, the command in it 2693*663afb9bSAndroid Build Coastguard Worker# will be execed at the end. This prevents here-documents from being 2694*663afb9bSAndroid Build Coastguard Worker# left over by shells. 2695*663afb9bSAndroid Build Coastguard Workerexec_cmd= 2696*663afb9bSAndroid Build Coastguard Worker 2697*663afb9bSAndroid Build Coastguard Worker 2698*663afb9bSAndroid Build Coastguard Worker# A function that is used when there is no print builtin or printf. 2699*663afb9bSAndroid Build Coastguard Workerfunc_fallback_echo () 2700*663afb9bSAndroid Build Coastguard Worker{ 2701*663afb9bSAndroid Build Coastguard Worker eval 'cat <<_LTECHO_EOF 2702*663afb9bSAndroid Build Coastguard Worker$1 2703*663afb9bSAndroid Build Coastguard Worker_LTECHO_EOF' 2704*663afb9bSAndroid Build Coastguard Worker} 2705*663afb9bSAndroid Build Coastguard Worker 2706*663afb9bSAndroid Build Coastguard Worker# func_generated_by_libtool 2707*663afb9bSAndroid Build Coastguard Worker# True iff stdin has been generated by Libtool. This function is only 2708*663afb9bSAndroid Build Coastguard Worker# a basic sanity check; it will hardly flush out determined imposters. 2709*663afb9bSAndroid Build Coastguard Workerfunc_generated_by_libtool_p () 2710*663afb9bSAndroid Build Coastguard Worker{ 2711*663afb9bSAndroid Build Coastguard Worker $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 2712*663afb9bSAndroid Build Coastguard Worker} 2713*663afb9bSAndroid Build Coastguard Worker 2714*663afb9bSAndroid Build Coastguard Worker# func_lalib_p file 2715*663afb9bSAndroid Build Coastguard Worker# True iff FILE is a libtool '.la' library or '.lo' object file. 2716*663afb9bSAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 2717*663afb9bSAndroid Build Coastguard Worker# determined imposters. 2718*663afb9bSAndroid Build Coastguard Workerfunc_lalib_p () 2719*663afb9bSAndroid Build Coastguard Worker{ 2720*663afb9bSAndroid Build Coastguard Worker test -f "$1" && 2721*663afb9bSAndroid Build Coastguard Worker $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2722*663afb9bSAndroid Build Coastguard Worker} 2723*663afb9bSAndroid Build Coastguard Worker 2724*663afb9bSAndroid Build Coastguard Worker# func_lalib_unsafe_p file 2725*663afb9bSAndroid Build Coastguard Worker# True iff FILE is a libtool '.la' library or '.lo' object file. 2726*663afb9bSAndroid Build Coastguard Worker# This function implements the same check as func_lalib_p without 2727*663afb9bSAndroid Build Coastguard Worker# resorting to external programs. To this end, it redirects stdin and 2728*663afb9bSAndroid Build Coastguard Worker# closes it afterwards, without saving the original file descriptor. 2729*663afb9bSAndroid Build Coastguard Worker# As a safety measure, use it only where a negative result would be 2730*663afb9bSAndroid Build Coastguard Worker# fatal anyway. Works if 'file' does not exist. 2731*663afb9bSAndroid Build Coastguard Workerfunc_lalib_unsafe_p () 2732*663afb9bSAndroid Build Coastguard Worker{ 2733*663afb9bSAndroid Build Coastguard Worker lalib_p=no 2734*663afb9bSAndroid Build Coastguard Worker if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2735*663afb9bSAndroid Build Coastguard Worker for lalib_p_l in 1 2 3 4 2736*663afb9bSAndroid Build Coastguard Worker do 2737*663afb9bSAndroid Build Coastguard Worker read lalib_p_line 2738*663afb9bSAndroid Build Coastguard Worker case $lalib_p_line in 2739*663afb9bSAndroid Build Coastguard Worker \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2740*663afb9bSAndroid Build Coastguard Worker esac 2741*663afb9bSAndroid Build Coastguard Worker done 2742*663afb9bSAndroid Build Coastguard Worker exec 0<&5 5<&- 2743*663afb9bSAndroid Build Coastguard Worker fi 2744*663afb9bSAndroid Build Coastguard Worker test yes = "$lalib_p" 2745*663afb9bSAndroid Build Coastguard Worker} 2746*663afb9bSAndroid Build Coastguard Worker 2747*663afb9bSAndroid Build Coastguard Worker# func_ltwrapper_script_p file 2748*663afb9bSAndroid Build Coastguard Worker# True iff FILE is a libtool wrapper script 2749*663afb9bSAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 2750*663afb9bSAndroid Build Coastguard Worker# determined imposters. 2751*663afb9bSAndroid Build Coastguard Workerfunc_ltwrapper_script_p () 2752*663afb9bSAndroid Build Coastguard Worker{ 2753*663afb9bSAndroid Build Coastguard Worker test -f "$1" && 2754*663afb9bSAndroid Build Coastguard Worker $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2755*663afb9bSAndroid Build Coastguard Worker} 2756*663afb9bSAndroid Build Coastguard Worker 2757*663afb9bSAndroid Build Coastguard Worker# func_ltwrapper_executable_p file 2758*663afb9bSAndroid Build Coastguard Worker# True iff FILE is a libtool wrapper executable 2759*663afb9bSAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 2760*663afb9bSAndroid Build Coastguard Worker# determined imposters. 2761*663afb9bSAndroid Build Coastguard Workerfunc_ltwrapper_executable_p () 2762*663afb9bSAndroid Build Coastguard Worker{ 2763*663afb9bSAndroid Build Coastguard Worker func_ltwrapper_exec_suffix= 2764*663afb9bSAndroid Build Coastguard Worker case $1 in 2765*663afb9bSAndroid Build Coastguard Worker *.exe) ;; 2766*663afb9bSAndroid Build Coastguard Worker *) func_ltwrapper_exec_suffix=.exe ;; 2767*663afb9bSAndroid Build Coastguard Worker esac 2768*663afb9bSAndroid Build Coastguard Worker $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2769*663afb9bSAndroid Build Coastguard Worker} 2770*663afb9bSAndroid Build Coastguard Worker 2771*663afb9bSAndroid Build Coastguard Worker# func_ltwrapper_scriptname file 2772*663afb9bSAndroid Build Coastguard Worker# Assumes file is an ltwrapper_executable 2773*663afb9bSAndroid Build Coastguard Worker# uses $file to determine the appropriate filename for a 2774*663afb9bSAndroid Build Coastguard Worker# temporary ltwrapper_script. 2775*663afb9bSAndroid Build Coastguard Workerfunc_ltwrapper_scriptname () 2776*663afb9bSAndroid Build Coastguard Worker{ 2777*663afb9bSAndroid Build Coastguard Worker func_dirname_and_basename "$1" "" "." 2778*663afb9bSAndroid Build Coastguard Worker func_stripname '' '.exe' "$func_basename_result" 2779*663afb9bSAndroid Build Coastguard Worker func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2780*663afb9bSAndroid Build Coastguard Worker} 2781*663afb9bSAndroid Build Coastguard Worker 2782*663afb9bSAndroid Build Coastguard Worker# func_ltwrapper_p file 2783*663afb9bSAndroid Build Coastguard Worker# True iff FILE is a libtool wrapper script or wrapper executable 2784*663afb9bSAndroid Build Coastguard Worker# This function is only a basic sanity check; it will hardly flush out 2785*663afb9bSAndroid Build Coastguard Worker# determined imposters. 2786*663afb9bSAndroid Build Coastguard Workerfunc_ltwrapper_p () 2787*663afb9bSAndroid Build Coastguard Worker{ 2788*663afb9bSAndroid Build Coastguard Worker func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2789*663afb9bSAndroid Build Coastguard Worker} 2790*663afb9bSAndroid Build Coastguard Worker 2791*663afb9bSAndroid Build Coastguard Worker 2792*663afb9bSAndroid Build Coastguard Worker# func_execute_cmds commands fail_cmd 2793*663afb9bSAndroid Build Coastguard Worker# Execute tilde-delimited COMMANDS. 2794*663afb9bSAndroid Build Coastguard Worker# If FAIL_CMD is given, eval that upon failure. 2795*663afb9bSAndroid Build Coastguard Worker# FAIL_CMD may read-access the current command in variable CMD! 2796*663afb9bSAndroid Build Coastguard Workerfunc_execute_cmds () 2797*663afb9bSAndroid Build Coastguard Worker{ 2798*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2799*663afb9bSAndroid Build Coastguard Worker 2800*663afb9bSAndroid Build Coastguard Worker save_ifs=$IFS; IFS='~' 2801*663afb9bSAndroid Build Coastguard Worker for cmd in $1; do 2802*663afb9bSAndroid Build Coastguard Worker IFS=$sp$nl 2803*663afb9bSAndroid Build Coastguard Worker eval cmd=\"$cmd\" 2804*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 2805*663afb9bSAndroid Build Coastguard Worker func_show_eval "$cmd" "${2-:}" 2806*663afb9bSAndroid Build Coastguard Worker done 2807*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 2808*663afb9bSAndroid Build Coastguard Worker} 2809*663afb9bSAndroid Build Coastguard Worker 2810*663afb9bSAndroid Build Coastguard Worker 2811*663afb9bSAndroid Build Coastguard Worker# func_source file 2812*663afb9bSAndroid Build Coastguard Worker# Source FILE, adding directory component if necessary. 2813*663afb9bSAndroid Build Coastguard Worker# Note that it is not necessary on cygwin/mingw to append a dot to 2814*663afb9bSAndroid Build Coastguard Worker# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2815*663afb9bSAndroid Build Coastguard Worker# behavior happens only for exec(3), not for open(2)! Also, sourcing 2816*663afb9bSAndroid Build Coastguard Worker# 'FILE.' does not work on cygwin managed mounts. 2817*663afb9bSAndroid Build Coastguard Workerfunc_source () 2818*663afb9bSAndroid Build Coastguard Worker{ 2819*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2820*663afb9bSAndroid Build Coastguard Worker 2821*663afb9bSAndroid Build Coastguard Worker case $1 in 2822*663afb9bSAndroid Build Coastguard Worker */* | *\\*) . "$1" ;; 2823*663afb9bSAndroid Build Coastguard Worker *) . "./$1" ;; 2824*663afb9bSAndroid Build Coastguard Worker esac 2825*663afb9bSAndroid Build Coastguard Worker} 2826*663afb9bSAndroid Build Coastguard Worker 2827*663afb9bSAndroid Build Coastguard Worker 2828*663afb9bSAndroid Build Coastguard Worker# func_resolve_sysroot PATH 2829*663afb9bSAndroid Build Coastguard Worker# Replace a leading = in PATH with a sysroot. Store the result into 2830*663afb9bSAndroid Build Coastguard Worker# func_resolve_sysroot_result 2831*663afb9bSAndroid Build Coastguard Workerfunc_resolve_sysroot () 2832*663afb9bSAndroid Build Coastguard Worker{ 2833*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot_result=$1 2834*663afb9bSAndroid Build Coastguard Worker case $func_resolve_sysroot_result in 2835*663afb9bSAndroid Build Coastguard Worker =*) 2836*663afb9bSAndroid Build Coastguard Worker func_stripname '=' '' "$func_resolve_sysroot_result" 2837*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2838*663afb9bSAndroid Build Coastguard Worker ;; 2839*663afb9bSAndroid Build Coastguard Worker esac 2840*663afb9bSAndroid Build Coastguard Worker} 2841*663afb9bSAndroid Build Coastguard Worker 2842*663afb9bSAndroid Build Coastguard Worker# func_replace_sysroot PATH 2843*663afb9bSAndroid Build Coastguard Worker# If PATH begins with the sysroot, replace it with = and 2844*663afb9bSAndroid Build Coastguard Worker# store the result into func_replace_sysroot_result. 2845*663afb9bSAndroid Build Coastguard Workerfunc_replace_sysroot () 2846*663afb9bSAndroid Build Coastguard Worker{ 2847*663afb9bSAndroid Build Coastguard Worker case $lt_sysroot:$1 in 2848*663afb9bSAndroid Build Coastguard Worker ?*:"$lt_sysroot"*) 2849*663afb9bSAndroid Build Coastguard Worker func_stripname "$lt_sysroot" '' "$1" 2850*663afb9bSAndroid Build Coastguard Worker func_replace_sysroot_result='='$func_stripname_result 2851*663afb9bSAndroid Build Coastguard Worker ;; 2852*663afb9bSAndroid Build Coastguard Worker *) 2853*663afb9bSAndroid Build Coastguard Worker # Including no sysroot. 2854*663afb9bSAndroid Build Coastguard Worker func_replace_sysroot_result=$1 2855*663afb9bSAndroid Build Coastguard Worker ;; 2856*663afb9bSAndroid Build Coastguard Worker esac 2857*663afb9bSAndroid Build Coastguard Worker} 2858*663afb9bSAndroid Build Coastguard Worker 2859*663afb9bSAndroid Build Coastguard Worker# func_infer_tag arg 2860*663afb9bSAndroid Build Coastguard Worker# Infer tagged configuration to use if any are available and 2861*663afb9bSAndroid Build Coastguard Worker# if one wasn't chosen via the "--tag" command line option. 2862*663afb9bSAndroid Build Coastguard Worker# Only attempt this if the compiler in the base compile 2863*663afb9bSAndroid Build Coastguard Worker# command doesn't match the default compiler. 2864*663afb9bSAndroid Build Coastguard Worker# arg is usually of the form 'gcc ...' 2865*663afb9bSAndroid Build Coastguard Workerfunc_infer_tag () 2866*663afb9bSAndroid Build Coastguard Worker{ 2867*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2868*663afb9bSAndroid Build Coastguard Worker 2869*663afb9bSAndroid Build Coastguard Worker if test -n "$available_tags" && test -z "$tagname"; then 2870*663afb9bSAndroid Build Coastguard Worker CC_quoted= 2871*663afb9bSAndroid Build Coastguard Worker for arg in $CC; do 2872*663afb9bSAndroid Build Coastguard Worker func_append_quoted CC_quoted "$arg" 2873*663afb9bSAndroid Build Coastguard Worker done 2874*663afb9bSAndroid Build Coastguard Worker CC_expanded=`func_echo_all $CC` 2875*663afb9bSAndroid Build Coastguard Worker CC_quoted_expanded=`func_echo_all $CC_quoted` 2876*663afb9bSAndroid Build Coastguard Worker case $@ in 2877*663afb9bSAndroid Build Coastguard Worker # Blanks in the command may have been stripped by the calling shell, 2878*663afb9bSAndroid Build Coastguard Worker # but not from the CC environment variable when configure was run. 2879*663afb9bSAndroid Build Coastguard Worker " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2880*663afb9bSAndroid Build Coastguard Worker " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2881*663afb9bSAndroid Build Coastguard Worker # Blanks at the start of $base_compile will cause this to fail 2882*663afb9bSAndroid Build Coastguard Worker # if we don't check for them as well. 2883*663afb9bSAndroid Build Coastguard Worker *) 2884*663afb9bSAndroid Build Coastguard Worker for z in $available_tags; do 2885*663afb9bSAndroid Build Coastguard Worker if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2886*663afb9bSAndroid Build Coastguard Worker # Evaluate the configuration. 2887*663afb9bSAndroid Build Coastguard Worker eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2888*663afb9bSAndroid Build Coastguard Worker CC_quoted= 2889*663afb9bSAndroid Build Coastguard Worker for arg in $CC; do 2890*663afb9bSAndroid Build Coastguard Worker # Double-quote args containing other shell metacharacters. 2891*663afb9bSAndroid Build Coastguard Worker func_append_quoted CC_quoted "$arg" 2892*663afb9bSAndroid Build Coastguard Worker done 2893*663afb9bSAndroid Build Coastguard Worker CC_expanded=`func_echo_all $CC` 2894*663afb9bSAndroid Build Coastguard Worker CC_quoted_expanded=`func_echo_all $CC_quoted` 2895*663afb9bSAndroid Build Coastguard Worker case "$@ " in 2896*663afb9bSAndroid Build Coastguard Worker " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2897*663afb9bSAndroid Build Coastguard Worker " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2898*663afb9bSAndroid Build Coastguard Worker # The compiler in the base compile command matches 2899*663afb9bSAndroid Build Coastguard Worker # the one in the tagged configuration. 2900*663afb9bSAndroid Build Coastguard Worker # Assume this is the tagged configuration we want. 2901*663afb9bSAndroid Build Coastguard Worker tagname=$z 2902*663afb9bSAndroid Build Coastguard Worker break 2903*663afb9bSAndroid Build Coastguard Worker ;; 2904*663afb9bSAndroid Build Coastguard Worker esac 2905*663afb9bSAndroid Build Coastguard Worker fi 2906*663afb9bSAndroid Build Coastguard Worker done 2907*663afb9bSAndroid Build Coastguard Worker # If $tagname still isn't set, then no tagged configuration 2908*663afb9bSAndroid Build Coastguard Worker # was found and let the user know that the "--tag" command 2909*663afb9bSAndroid Build Coastguard Worker # line option must be used. 2910*663afb9bSAndroid Build Coastguard Worker if test -z "$tagname"; then 2911*663afb9bSAndroid Build Coastguard Worker func_echo "unable to infer tagged configuration" 2912*663afb9bSAndroid Build Coastguard Worker func_fatal_error "specify a tag with '--tag'" 2913*663afb9bSAndroid Build Coastguard Worker# else 2914*663afb9bSAndroid Build Coastguard Worker# func_verbose "using $tagname tagged configuration" 2915*663afb9bSAndroid Build Coastguard Worker fi 2916*663afb9bSAndroid Build Coastguard Worker ;; 2917*663afb9bSAndroid Build Coastguard Worker esac 2918*663afb9bSAndroid Build Coastguard Worker fi 2919*663afb9bSAndroid Build Coastguard Worker} 2920*663afb9bSAndroid Build Coastguard Worker 2921*663afb9bSAndroid Build Coastguard Worker 2922*663afb9bSAndroid Build Coastguard Worker 2923*663afb9bSAndroid Build Coastguard Worker# func_write_libtool_object output_name pic_name nonpic_name 2924*663afb9bSAndroid Build Coastguard Worker# Create a libtool object file (analogous to a ".la" file), 2925*663afb9bSAndroid Build Coastguard Worker# but don't create it if we're doing a dry run. 2926*663afb9bSAndroid Build Coastguard Workerfunc_write_libtool_object () 2927*663afb9bSAndroid Build Coastguard Worker{ 2928*663afb9bSAndroid Build Coastguard Worker write_libobj=$1 2929*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 2930*663afb9bSAndroid Build Coastguard Worker write_lobj=\'$2\' 2931*663afb9bSAndroid Build Coastguard Worker else 2932*663afb9bSAndroid Build Coastguard Worker write_lobj=none 2933*663afb9bSAndroid Build Coastguard Worker fi 2934*663afb9bSAndroid Build Coastguard Worker 2935*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 2936*663afb9bSAndroid Build Coastguard Worker write_oldobj=\'$3\' 2937*663afb9bSAndroid Build Coastguard Worker else 2938*663afb9bSAndroid Build Coastguard Worker write_oldobj=none 2939*663afb9bSAndroid Build Coastguard Worker fi 2940*663afb9bSAndroid Build Coastguard Worker 2941*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 2942*663afb9bSAndroid Build Coastguard Worker cat >${write_libobj}T <<EOF 2943*663afb9bSAndroid Build Coastguard Worker# $write_libobj - a libtool object file 2944*663afb9bSAndroid Build Coastguard Worker# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2945*663afb9bSAndroid Build Coastguard Worker# 2946*663afb9bSAndroid Build Coastguard Worker# Please DO NOT delete this file! 2947*663afb9bSAndroid Build Coastguard Worker# It is necessary for linking the library. 2948*663afb9bSAndroid Build Coastguard Worker 2949*663afb9bSAndroid Build Coastguard Worker# Name of the PIC object. 2950*663afb9bSAndroid Build Coastguard Workerpic_object=$write_lobj 2951*663afb9bSAndroid Build Coastguard Worker 2952*663afb9bSAndroid Build Coastguard Worker# Name of the non-PIC object 2953*663afb9bSAndroid Build Coastguard Workernon_pic_object=$write_oldobj 2954*663afb9bSAndroid Build Coastguard Worker 2955*663afb9bSAndroid Build Coastguard WorkerEOF 2956*663afb9bSAndroid Build Coastguard Worker $MV "${write_libobj}T" "$write_libobj" 2957*663afb9bSAndroid Build Coastguard Worker } 2958*663afb9bSAndroid Build Coastguard Worker} 2959*663afb9bSAndroid Build Coastguard Worker 2960*663afb9bSAndroid Build Coastguard Worker 2961*663afb9bSAndroid Build Coastguard Worker################################################## 2962*663afb9bSAndroid Build Coastguard Worker# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 2963*663afb9bSAndroid Build Coastguard Worker################################################## 2964*663afb9bSAndroid Build Coastguard Worker 2965*663afb9bSAndroid Build Coastguard Worker# func_convert_core_file_wine_to_w32 ARG 2966*663afb9bSAndroid Build Coastguard Worker# Helper function used by file name conversion functions when $build is *nix, 2967*663afb9bSAndroid Build Coastguard Worker# and $host is mingw, cygwin, or some other w32 environment. Relies on a 2968*663afb9bSAndroid Build Coastguard Worker# correctly configured wine environment available, with the winepath program 2969*663afb9bSAndroid Build Coastguard Worker# in $build's $PATH. 2970*663afb9bSAndroid Build Coastguard Worker# 2971*663afb9bSAndroid Build Coastguard Worker# ARG is the $build file name to be converted to w32 format. 2972*663afb9bSAndroid Build Coastguard Worker# Result is available in $func_convert_core_file_wine_to_w32_result, and will 2973*663afb9bSAndroid Build Coastguard Worker# be empty on error (or when ARG is empty) 2974*663afb9bSAndroid Build Coastguard Workerfunc_convert_core_file_wine_to_w32 () 2975*663afb9bSAndroid Build Coastguard Worker{ 2976*663afb9bSAndroid Build Coastguard Worker $debug_cmd 2977*663afb9bSAndroid Build Coastguard Worker 2978*663afb9bSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_result=$1 2979*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 2980*663afb9bSAndroid Build Coastguard Worker # Unfortunately, winepath does not exit with a non-zero error code, so we 2981*663afb9bSAndroid Build Coastguard Worker # are forced to check the contents of stdout. On the other hand, if the 2982*663afb9bSAndroid Build Coastguard Worker # command is not found, the shell will set an exit code of 127 and print 2983*663afb9bSAndroid Build Coastguard Worker # *an error message* to stdout. So we must check for both error code of 2984*663afb9bSAndroid Build Coastguard Worker # zero AND non-empty stdout, which explains the odd construction: 2985*663afb9bSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 2986*663afb9bSAndroid Build Coastguard Worker if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 2987*663afb9bSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 2988*663afb9bSAndroid Build Coastguard Worker $SED -e "$sed_naive_backslashify"` 2989*663afb9bSAndroid Build Coastguard Worker else 2990*663afb9bSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32_result= 2991*663afb9bSAndroid Build Coastguard Worker fi 2992*663afb9bSAndroid Build Coastguard Worker fi 2993*663afb9bSAndroid Build Coastguard Worker} 2994*663afb9bSAndroid Build Coastguard Worker# end: func_convert_core_file_wine_to_w32 2995*663afb9bSAndroid Build Coastguard Worker 2996*663afb9bSAndroid Build Coastguard Worker 2997*663afb9bSAndroid Build Coastguard Worker# func_convert_core_path_wine_to_w32 ARG 2998*663afb9bSAndroid Build Coastguard Worker# Helper function used by path conversion functions when $build is *nix, and 2999*663afb9bSAndroid Build Coastguard Worker# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 3000*663afb9bSAndroid Build Coastguard Worker# configured wine environment available, with the winepath program in $build's 3001*663afb9bSAndroid Build Coastguard Worker# $PATH. Assumes ARG has no leading or trailing path separator characters. 3002*663afb9bSAndroid Build Coastguard Worker# 3003*663afb9bSAndroid Build Coastguard Worker# ARG is path to be converted from $build format to win32. 3004*663afb9bSAndroid Build Coastguard Worker# Result is available in $func_convert_core_path_wine_to_w32_result. 3005*663afb9bSAndroid Build Coastguard Worker# Unconvertible file (directory) names in ARG are skipped; if no directory names 3006*663afb9bSAndroid Build Coastguard Worker# are convertible, then the result may be empty. 3007*663afb9bSAndroid Build Coastguard Workerfunc_convert_core_path_wine_to_w32 () 3008*663afb9bSAndroid Build Coastguard Worker{ 3009*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3010*663afb9bSAndroid Build Coastguard Worker 3011*663afb9bSAndroid Build Coastguard Worker # unfortunately, winepath doesn't convert paths, only file names 3012*663afb9bSAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32_result= 3013*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3014*663afb9bSAndroid Build Coastguard Worker oldIFS=$IFS 3015*663afb9bSAndroid Build Coastguard Worker IFS=: 3016*663afb9bSAndroid Build Coastguard Worker for func_convert_core_path_wine_to_w32_f in $1; do 3017*663afb9bSAndroid Build Coastguard Worker IFS=$oldIFS 3018*663afb9bSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 3019*663afb9bSAndroid Build Coastguard Worker if test -n "$func_convert_core_file_wine_to_w32_result"; then 3020*663afb9bSAndroid Build Coastguard Worker if test -z "$func_convert_core_path_wine_to_w32_result"; then 3021*663afb9bSAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 3022*663afb9bSAndroid Build Coastguard Worker else 3023*663afb9bSAndroid Build Coastguard Worker func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 3024*663afb9bSAndroid Build Coastguard Worker fi 3025*663afb9bSAndroid Build Coastguard Worker fi 3026*663afb9bSAndroid Build Coastguard Worker done 3027*663afb9bSAndroid Build Coastguard Worker IFS=$oldIFS 3028*663afb9bSAndroid Build Coastguard Worker fi 3029*663afb9bSAndroid Build Coastguard Worker} 3030*663afb9bSAndroid Build Coastguard Worker# end: func_convert_core_path_wine_to_w32 3031*663afb9bSAndroid Build Coastguard Worker 3032*663afb9bSAndroid Build Coastguard Worker 3033*663afb9bSAndroid Build Coastguard Worker# func_cygpath ARGS... 3034*663afb9bSAndroid Build Coastguard Worker# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 3035*663afb9bSAndroid Build Coastguard Worker# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 3036*663afb9bSAndroid Build Coastguard Worker# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 3037*663afb9bSAndroid Build Coastguard Worker# (2), returns the Cygwin file name or path in func_cygpath_result (input 3038*663afb9bSAndroid Build Coastguard Worker# file name or path is assumed to be in w32 format, as previously converted 3039*663afb9bSAndroid Build Coastguard Worker# from $build's *nix or MSYS format). In case (3), returns the w32 file name 3040*663afb9bSAndroid Build Coastguard Worker# or path in func_cygpath_result (input file name or path is assumed to be in 3041*663afb9bSAndroid Build Coastguard Worker# Cygwin format). Returns an empty string on error. 3042*663afb9bSAndroid Build Coastguard Worker# 3043*663afb9bSAndroid Build Coastguard Worker# ARGS are passed to cygpath, with the last one being the file name or path to 3044*663afb9bSAndroid Build Coastguard Worker# be converted. 3045*663afb9bSAndroid Build Coastguard Worker# 3046*663afb9bSAndroid Build Coastguard Worker# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 3047*663afb9bSAndroid Build Coastguard Worker# environment variable; do not put it in $PATH. 3048*663afb9bSAndroid Build Coastguard Workerfunc_cygpath () 3049*663afb9bSAndroid Build Coastguard Worker{ 3050*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3051*663afb9bSAndroid Build Coastguard Worker 3052*663afb9bSAndroid Build Coastguard Worker if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 3053*663afb9bSAndroid Build Coastguard Worker func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 3054*663afb9bSAndroid Build Coastguard Worker if test "$?" -ne 0; then 3055*663afb9bSAndroid Build Coastguard Worker # on failure, ensure result is empty 3056*663afb9bSAndroid Build Coastguard Worker func_cygpath_result= 3057*663afb9bSAndroid Build Coastguard Worker fi 3058*663afb9bSAndroid Build Coastguard Worker else 3059*663afb9bSAndroid Build Coastguard Worker func_cygpath_result= 3060*663afb9bSAndroid Build Coastguard Worker func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 3061*663afb9bSAndroid Build Coastguard Worker fi 3062*663afb9bSAndroid Build Coastguard Worker} 3063*663afb9bSAndroid Build Coastguard Worker#end: func_cygpath 3064*663afb9bSAndroid Build Coastguard Worker 3065*663afb9bSAndroid Build Coastguard Worker 3066*663afb9bSAndroid Build Coastguard Worker# func_convert_core_msys_to_w32 ARG 3067*663afb9bSAndroid Build Coastguard Worker# Convert file name or path ARG from MSYS format to w32 format. Return 3068*663afb9bSAndroid Build Coastguard Worker# result in func_convert_core_msys_to_w32_result. 3069*663afb9bSAndroid Build Coastguard Workerfunc_convert_core_msys_to_w32 () 3070*663afb9bSAndroid Build Coastguard Worker{ 3071*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3072*663afb9bSAndroid Build Coastguard Worker 3073*663afb9bSAndroid Build Coastguard Worker # awkward: cmd appends spaces to result 3074*663afb9bSAndroid Build Coastguard Worker func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 3075*663afb9bSAndroid Build Coastguard Worker $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 3076*663afb9bSAndroid Build Coastguard Worker} 3077*663afb9bSAndroid Build Coastguard Worker#end: func_convert_core_msys_to_w32 3078*663afb9bSAndroid Build Coastguard Worker 3079*663afb9bSAndroid Build Coastguard Worker 3080*663afb9bSAndroid Build Coastguard Worker# func_convert_file_check ARG1 ARG2 3081*663afb9bSAndroid Build Coastguard Worker# Verify that ARG1 (a file name in $build format) was converted to $host 3082*663afb9bSAndroid Build Coastguard Worker# format in ARG2. Otherwise, emit an error message, but continue (resetting 3083*663afb9bSAndroid Build Coastguard Worker# func_to_host_file_result to ARG1). 3084*663afb9bSAndroid Build Coastguard Workerfunc_convert_file_check () 3085*663afb9bSAndroid Build Coastguard Worker{ 3086*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3087*663afb9bSAndroid Build Coastguard Worker 3088*663afb9bSAndroid Build Coastguard Worker if test -z "$2" && test -n "$1"; then 3089*663afb9bSAndroid Build Coastguard Worker func_error "Could not determine host file name corresponding to" 3090*663afb9bSAndroid Build Coastguard Worker func_error " '$1'" 3091*663afb9bSAndroid Build Coastguard Worker func_error "Continuing, but uninstalled executables may not work." 3092*663afb9bSAndroid Build Coastguard Worker # Fallback: 3093*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$1 3094*663afb9bSAndroid Build Coastguard Worker fi 3095*663afb9bSAndroid Build Coastguard Worker} 3096*663afb9bSAndroid Build Coastguard Worker# end func_convert_file_check 3097*663afb9bSAndroid Build Coastguard Worker 3098*663afb9bSAndroid Build Coastguard Worker 3099*663afb9bSAndroid Build Coastguard Worker# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 3100*663afb9bSAndroid Build Coastguard Worker# Verify that FROM_PATH (a path in $build format) was converted to $host 3101*663afb9bSAndroid Build Coastguard Worker# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 3102*663afb9bSAndroid Build Coastguard Worker# func_to_host_file_result to a simplistic fallback value (see below). 3103*663afb9bSAndroid Build Coastguard Workerfunc_convert_path_check () 3104*663afb9bSAndroid Build Coastguard Worker{ 3105*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3106*663afb9bSAndroid Build Coastguard Worker 3107*663afb9bSAndroid Build Coastguard Worker if test -z "$4" && test -n "$3"; then 3108*663afb9bSAndroid Build Coastguard Worker func_error "Could not determine the host path corresponding to" 3109*663afb9bSAndroid Build Coastguard Worker func_error " '$3'" 3110*663afb9bSAndroid Build Coastguard Worker func_error "Continuing, but uninstalled executables may not work." 3111*663afb9bSAndroid Build Coastguard Worker # Fallback. This is a deliberately simplistic "conversion" and 3112*663afb9bSAndroid Build Coastguard Worker # should not be "improved". See libtool.info. 3113*663afb9bSAndroid Build Coastguard Worker if test "x$1" != "x$2"; then 3114*663afb9bSAndroid Build Coastguard Worker lt_replace_pathsep_chars="s|$1|$2|g" 3115*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=`echo "$3" | 3116*663afb9bSAndroid Build Coastguard Worker $SED -e "$lt_replace_pathsep_chars"` 3117*663afb9bSAndroid Build Coastguard Worker else 3118*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$3 3119*663afb9bSAndroid Build Coastguard Worker fi 3120*663afb9bSAndroid Build Coastguard Worker fi 3121*663afb9bSAndroid Build Coastguard Worker} 3122*663afb9bSAndroid Build Coastguard Worker# end func_convert_path_check 3123*663afb9bSAndroid Build Coastguard Worker 3124*663afb9bSAndroid Build Coastguard Worker 3125*663afb9bSAndroid Build Coastguard Worker# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 3126*663afb9bSAndroid Build Coastguard Worker# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 3127*663afb9bSAndroid Build Coastguard Worker# and appending REPL if ORIG matches BACKPAT. 3128*663afb9bSAndroid Build Coastguard Workerfunc_convert_path_front_back_pathsep () 3129*663afb9bSAndroid Build Coastguard Worker{ 3130*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3131*663afb9bSAndroid Build Coastguard Worker 3132*663afb9bSAndroid Build Coastguard Worker case $4 in 3133*663afb9bSAndroid Build Coastguard Worker $1 ) func_to_host_path_result=$3$func_to_host_path_result 3134*663afb9bSAndroid Build Coastguard Worker ;; 3135*663afb9bSAndroid Build Coastguard Worker esac 3136*663afb9bSAndroid Build Coastguard Worker case $4 in 3137*663afb9bSAndroid Build Coastguard Worker $2 ) func_append func_to_host_path_result "$3" 3138*663afb9bSAndroid Build Coastguard Worker ;; 3139*663afb9bSAndroid Build Coastguard Worker esac 3140*663afb9bSAndroid Build Coastguard Worker} 3141*663afb9bSAndroid Build Coastguard Worker# end func_convert_path_front_back_pathsep 3142*663afb9bSAndroid Build Coastguard Worker 3143*663afb9bSAndroid Build Coastguard Worker 3144*663afb9bSAndroid Build Coastguard Worker################################################## 3145*663afb9bSAndroid Build Coastguard Worker# $build to $host FILE NAME CONVERSION FUNCTIONS # 3146*663afb9bSAndroid Build Coastguard Worker################################################## 3147*663afb9bSAndroid Build Coastguard Worker# invoked via '$to_host_file_cmd ARG' 3148*663afb9bSAndroid Build Coastguard Worker# 3149*663afb9bSAndroid Build Coastguard Worker# In each case, ARG is the path to be converted from $build to $host format. 3150*663afb9bSAndroid Build Coastguard Worker# Result will be available in $func_to_host_file_result. 3151*663afb9bSAndroid Build Coastguard Worker 3152*663afb9bSAndroid Build Coastguard Worker 3153*663afb9bSAndroid Build Coastguard Worker# func_to_host_file ARG 3154*663afb9bSAndroid Build Coastguard Worker# Converts the file name ARG from $build format to $host format. Return result 3155*663afb9bSAndroid Build Coastguard Worker# in func_to_host_file_result. 3156*663afb9bSAndroid Build Coastguard Workerfunc_to_host_file () 3157*663afb9bSAndroid Build Coastguard Worker{ 3158*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3159*663afb9bSAndroid Build Coastguard Worker 3160*663afb9bSAndroid Build Coastguard Worker $to_host_file_cmd "$1" 3161*663afb9bSAndroid Build Coastguard Worker} 3162*663afb9bSAndroid Build Coastguard Worker# end func_to_host_file 3163*663afb9bSAndroid Build Coastguard Worker 3164*663afb9bSAndroid Build Coastguard Worker 3165*663afb9bSAndroid Build Coastguard Worker# func_to_tool_file ARG LAZY 3166*663afb9bSAndroid Build Coastguard Worker# converts the file name ARG from $build format to toolchain format. Return 3167*663afb9bSAndroid Build Coastguard Worker# result in func_to_tool_file_result. If the conversion in use is listed 3168*663afb9bSAndroid Build Coastguard Worker# in (the comma separated) LAZY, no conversion takes place. 3169*663afb9bSAndroid Build Coastguard Workerfunc_to_tool_file () 3170*663afb9bSAndroid Build Coastguard Worker{ 3171*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3172*663afb9bSAndroid Build Coastguard Worker 3173*663afb9bSAndroid Build Coastguard Worker case ,$2, in 3174*663afb9bSAndroid Build Coastguard Worker *,"$to_tool_file_cmd",*) 3175*663afb9bSAndroid Build Coastguard Worker func_to_tool_file_result=$1 3176*663afb9bSAndroid Build Coastguard Worker ;; 3177*663afb9bSAndroid Build Coastguard Worker *) 3178*663afb9bSAndroid Build Coastguard Worker $to_tool_file_cmd "$1" 3179*663afb9bSAndroid Build Coastguard Worker func_to_tool_file_result=$func_to_host_file_result 3180*663afb9bSAndroid Build Coastguard Worker ;; 3181*663afb9bSAndroid Build Coastguard Worker esac 3182*663afb9bSAndroid Build Coastguard Worker} 3183*663afb9bSAndroid Build Coastguard Worker# end func_to_tool_file 3184*663afb9bSAndroid Build Coastguard Worker 3185*663afb9bSAndroid Build Coastguard Worker 3186*663afb9bSAndroid Build Coastguard Worker# func_convert_file_noop ARG 3187*663afb9bSAndroid Build Coastguard Worker# Copy ARG to func_to_host_file_result. 3188*663afb9bSAndroid Build Coastguard Workerfunc_convert_file_noop () 3189*663afb9bSAndroid Build Coastguard Worker{ 3190*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$1 3191*663afb9bSAndroid Build Coastguard Worker} 3192*663afb9bSAndroid Build Coastguard Worker# end func_convert_file_noop 3193*663afb9bSAndroid Build Coastguard Worker 3194*663afb9bSAndroid Build Coastguard Worker 3195*663afb9bSAndroid Build Coastguard Worker# func_convert_file_msys_to_w32 ARG 3196*663afb9bSAndroid Build Coastguard Worker# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 3197*663afb9bSAndroid Build Coastguard Worker# conversion to w32 is not available inside the cwrapper. Returns result in 3198*663afb9bSAndroid Build Coastguard Worker# func_to_host_file_result. 3199*663afb9bSAndroid Build Coastguard Workerfunc_convert_file_msys_to_w32 () 3200*663afb9bSAndroid Build Coastguard Worker{ 3201*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3202*663afb9bSAndroid Build Coastguard Worker 3203*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$1 3204*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3205*663afb9bSAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$1" 3206*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$func_convert_core_msys_to_w32_result 3207*663afb9bSAndroid Build Coastguard Worker fi 3208*663afb9bSAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 3209*663afb9bSAndroid Build Coastguard Worker} 3210*663afb9bSAndroid Build Coastguard Worker# end func_convert_file_msys_to_w32 3211*663afb9bSAndroid Build Coastguard Worker 3212*663afb9bSAndroid Build Coastguard Worker 3213*663afb9bSAndroid Build Coastguard Worker# func_convert_file_cygwin_to_w32 ARG 3214*663afb9bSAndroid Build Coastguard Worker# Convert file name ARG from Cygwin to w32 format. Returns result in 3215*663afb9bSAndroid Build Coastguard Worker# func_to_host_file_result. 3216*663afb9bSAndroid Build Coastguard Workerfunc_convert_file_cygwin_to_w32 () 3217*663afb9bSAndroid Build Coastguard Worker{ 3218*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3219*663afb9bSAndroid Build Coastguard Worker 3220*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$1 3221*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3222*663afb9bSAndroid Build Coastguard Worker # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3223*663afb9bSAndroid Build Coastguard Worker # LT_CYGPATH in this case. 3224*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=`cygpath -m "$1"` 3225*663afb9bSAndroid Build Coastguard Worker fi 3226*663afb9bSAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 3227*663afb9bSAndroid Build Coastguard Worker} 3228*663afb9bSAndroid Build Coastguard Worker# end func_convert_file_cygwin_to_w32 3229*663afb9bSAndroid Build Coastguard Worker 3230*663afb9bSAndroid Build Coastguard Worker 3231*663afb9bSAndroid Build Coastguard Worker# func_convert_file_nix_to_w32 ARG 3232*663afb9bSAndroid Build Coastguard Worker# Convert file name ARG from *nix to w32 format. Requires a wine environment 3233*663afb9bSAndroid Build Coastguard Worker# and a working winepath. Returns result in func_to_host_file_result. 3234*663afb9bSAndroid Build Coastguard Workerfunc_convert_file_nix_to_w32 () 3235*663afb9bSAndroid Build Coastguard Worker{ 3236*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3237*663afb9bSAndroid Build Coastguard Worker 3238*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$1 3239*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3240*663afb9bSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32 "$1" 3241*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3242*663afb9bSAndroid Build Coastguard Worker fi 3243*663afb9bSAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 3244*663afb9bSAndroid Build Coastguard Worker} 3245*663afb9bSAndroid Build Coastguard Worker# end func_convert_file_nix_to_w32 3246*663afb9bSAndroid Build Coastguard Worker 3247*663afb9bSAndroid Build Coastguard Worker 3248*663afb9bSAndroid Build Coastguard Worker# func_convert_file_msys_to_cygwin ARG 3249*663afb9bSAndroid Build Coastguard Worker# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3250*663afb9bSAndroid Build Coastguard Worker# Returns result in func_to_host_file_result. 3251*663afb9bSAndroid Build Coastguard Workerfunc_convert_file_msys_to_cygwin () 3252*663afb9bSAndroid Build Coastguard Worker{ 3253*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3254*663afb9bSAndroid Build Coastguard Worker 3255*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$1 3256*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3257*663afb9bSAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$1" 3258*663afb9bSAndroid Build Coastguard Worker func_cygpath -u "$func_convert_core_msys_to_w32_result" 3259*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$func_cygpath_result 3260*663afb9bSAndroid Build Coastguard Worker fi 3261*663afb9bSAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 3262*663afb9bSAndroid Build Coastguard Worker} 3263*663afb9bSAndroid Build Coastguard Worker# end func_convert_file_msys_to_cygwin 3264*663afb9bSAndroid Build Coastguard Worker 3265*663afb9bSAndroid Build Coastguard Worker 3266*663afb9bSAndroid Build Coastguard Worker# func_convert_file_nix_to_cygwin ARG 3267*663afb9bSAndroid Build Coastguard Worker# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3268*663afb9bSAndroid Build Coastguard Worker# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3269*663afb9bSAndroid Build Coastguard Worker# in func_to_host_file_result. 3270*663afb9bSAndroid Build Coastguard Workerfunc_convert_file_nix_to_cygwin () 3271*663afb9bSAndroid Build Coastguard Worker{ 3272*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3273*663afb9bSAndroid Build Coastguard Worker 3274*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$1 3275*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3276*663afb9bSAndroid Build Coastguard Worker # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3277*663afb9bSAndroid Build Coastguard Worker func_convert_core_file_wine_to_w32 "$1" 3278*663afb9bSAndroid Build Coastguard Worker func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 3279*663afb9bSAndroid Build Coastguard Worker func_to_host_file_result=$func_cygpath_result 3280*663afb9bSAndroid Build Coastguard Worker fi 3281*663afb9bSAndroid Build Coastguard Worker func_convert_file_check "$1" "$func_to_host_file_result" 3282*663afb9bSAndroid Build Coastguard Worker} 3283*663afb9bSAndroid Build Coastguard Worker# end func_convert_file_nix_to_cygwin 3284*663afb9bSAndroid Build Coastguard Worker 3285*663afb9bSAndroid Build Coastguard Worker 3286*663afb9bSAndroid Build Coastguard Worker############################################# 3287*663afb9bSAndroid Build Coastguard Worker# $build to $host PATH CONVERSION FUNCTIONS # 3288*663afb9bSAndroid Build Coastguard Worker############################################# 3289*663afb9bSAndroid Build Coastguard Worker# invoked via '$to_host_path_cmd ARG' 3290*663afb9bSAndroid Build Coastguard Worker# 3291*663afb9bSAndroid Build Coastguard Worker# In each case, ARG is the path to be converted from $build to $host format. 3292*663afb9bSAndroid Build Coastguard Worker# The result will be available in $func_to_host_path_result. 3293*663afb9bSAndroid Build Coastguard Worker# 3294*663afb9bSAndroid Build Coastguard Worker# Path separators are also converted from $build format to $host format. If 3295*663afb9bSAndroid Build Coastguard Worker# ARG begins or ends with a path separator character, it is preserved (but 3296*663afb9bSAndroid Build Coastguard Worker# converted to $host format) on output. 3297*663afb9bSAndroid Build Coastguard Worker# 3298*663afb9bSAndroid Build Coastguard Worker# All path conversion functions are named using the following convention: 3299*663afb9bSAndroid Build Coastguard Worker# file name conversion function : func_convert_file_X_to_Y () 3300*663afb9bSAndroid Build Coastguard Worker# path conversion function : func_convert_path_X_to_Y () 3301*663afb9bSAndroid Build Coastguard Worker# where, for any given $build/$host combination the 'X_to_Y' value is the 3302*663afb9bSAndroid Build Coastguard Worker# same. If conversion functions are added for new $build/$host combinations, 3303*663afb9bSAndroid Build Coastguard Worker# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3304*663afb9bSAndroid Build Coastguard Worker# will break. 3305*663afb9bSAndroid Build Coastguard Worker 3306*663afb9bSAndroid Build Coastguard Worker 3307*663afb9bSAndroid Build Coastguard Worker# func_init_to_host_path_cmd 3308*663afb9bSAndroid Build Coastguard Worker# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3309*663afb9bSAndroid Build Coastguard Worker# appropriate value, based on the value of $to_host_file_cmd. 3310*663afb9bSAndroid Build Coastguard Workerto_host_path_cmd= 3311*663afb9bSAndroid Build Coastguard Workerfunc_init_to_host_path_cmd () 3312*663afb9bSAndroid Build Coastguard Worker{ 3313*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3314*663afb9bSAndroid Build Coastguard Worker 3315*663afb9bSAndroid Build Coastguard Worker if test -z "$to_host_path_cmd"; then 3316*663afb9bSAndroid Build Coastguard Worker func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 3317*663afb9bSAndroid Build Coastguard Worker to_host_path_cmd=func_convert_path_$func_stripname_result 3318*663afb9bSAndroid Build Coastguard Worker fi 3319*663afb9bSAndroid Build Coastguard Worker} 3320*663afb9bSAndroid Build Coastguard Worker 3321*663afb9bSAndroid Build Coastguard Worker 3322*663afb9bSAndroid Build Coastguard Worker# func_to_host_path ARG 3323*663afb9bSAndroid Build Coastguard Worker# Converts the path ARG from $build format to $host format. Return result 3324*663afb9bSAndroid Build Coastguard Worker# in func_to_host_path_result. 3325*663afb9bSAndroid Build Coastguard Workerfunc_to_host_path () 3326*663afb9bSAndroid Build Coastguard Worker{ 3327*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3328*663afb9bSAndroid Build Coastguard Worker 3329*663afb9bSAndroid Build Coastguard Worker func_init_to_host_path_cmd 3330*663afb9bSAndroid Build Coastguard Worker $to_host_path_cmd "$1" 3331*663afb9bSAndroid Build Coastguard Worker} 3332*663afb9bSAndroid Build Coastguard Worker# end func_to_host_path 3333*663afb9bSAndroid Build Coastguard Worker 3334*663afb9bSAndroid Build Coastguard Worker 3335*663afb9bSAndroid Build Coastguard Worker# func_convert_path_noop ARG 3336*663afb9bSAndroid Build Coastguard Worker# Copy ARG to func_to_host_path_result. 3337*663afb9bSAndroid Build Coastguard Workerfunc_convert_path_noop () 3338*663afb9bSAndroid Build Coastguard Worker{ 3339*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$1 3340*663afb9bSAndroid Build Coastguard Worker} 3341*663afb9bSAndroid Build Coastguard Worker# end func_convert_path_noop 3342*663afb9bSAndroid Build Coastguard Worker 3343*663afb9bSAndroid Build Coastguard Worker 3344*663afb9bSAndroid Build Coastguard Worker# func_convert_path_msys_to_w32 ARG 3345*663afb9bSAndroid Build Coastguard Worker# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3346*663afb9bSAndroid Build Coastguard Worker# conversion to w32 is not available inside the cwrapper. Returns result in 3347*663afb9bSAndroid Build Coastguard Worker# func_to_host_path_result. 3348*663afb9bSAndroid Build Coastguard Workerfunc_convert_path_msys_to_w32 () 3349*663afb9bSAndroid Build Coastguard Worker{ 3350*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3351*663afb9bSAndroid Build Coastguard Worker 3352*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$1 3353*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3354*663afb9bSAndroid Build Coastguard Worker # Remove leading and trailing path separator characters from ARG. MSYS 3355*663afb9bSAndroid Build Coastguard Worker # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3356*663afb9bSAndroid Build Coastguard Worker # and winepath ignores them completely. 3357*663afb9bSAndroid Build Coastguard Worker func_stripname : : "$1" 3358*663afb9bSAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 3359*663afb9bSAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3360*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$func_convert_core_msys_to_w32_result 3361*663afb9bSAndroid Build Coastguard Worker func_convert_path_check : ";" \ 3362*663afb9bSAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 3363*663afb9bSAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3364*663afb9bSAndroid Build Coastguard Worker fi 3365*663afb9bSAndroid Build Coastguard Worker} 3366*663afb9bSAndroid Build Coastguard Worker# end func_convert_path_msys_to_w32 3367*663afb9bSAndroid Build Coastguard Worker 3368*663afb9bSAndroid Build Coastguard Worker 3369*663afb9bSAndroid Build Coastguard Worker# func_convert_path_cygwin_to_w32 ARG 3370*663afb9bSAndroid Build Coastguard Worker# Convert path ARG from Cygwin to w32 format. Returns result in 3371*663afb9bSAndroid Build Coastguard Worker# func_to_host_file_result. 3372*663afb9bSAndroid Build Coastguard Workerfunc_convert_path_cygwin_to_w32 () 3373*663afb9bSAndroid Build Coastguard Worker{ 3374*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3375*663afb9bSAndroid Build Coastguard Worker 3376*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$1 3377*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3378*663afb9bSAndroid Build Coastguard Worker # See func_convert_path_msys_to_w32: 3379*663afb9bSAndroid Build Coastguard Worker func_stripname : : "$1" 3380*663afb9bSAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 3381*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3382*663afb9bSAndroid Build Coastguard Worker func_convert_path_check : ";" \ 3383*663afb9bSAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 3384*663afb9bSAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3385*663afb9bSAndroid Build Coastguard Worker fi 3386*663afb9bSAndroid Build Coastguard Worker} 3387*663afb9bSAndroid Build Coastguard Worker# end func_convert_path_cygwin_to_w32 3388*663afb9bSAndroid Build Coastguard Worker 3389*663afb9bSAndroid Build Coastguard Worker 3390*663afb9bSAndroid Build Coastguard Worker# func_convert_path_nix_to_w32 ARG 3391*663afb9bSAndroid Build Coastguard Worker# Convert path ARG from *nix to w32 format. Requires a wine environment and 3392*663afb9bSAndroid Build Coastguard Worker# a working winepath. Returns result in func_to_host_file_result. 3393*663afb9bSAndroid Build Coastguard Workerfunc_convert_path_nix_to_w32 () 3394*663afb9bSAndroid Build Coastguard Worker{ 3395*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3396*663afb9bSAndroid Build Coastguard Worker 3397*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$1 3398*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3399*663afb9bSAndroid Build Coastguard Worker # See func_convert_path_msys_to_w32: 3400*663afb9bSAndroid Build Coastguard Worker func_stripname : : "$1" 3401*663afb9bSAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 3402*663afb9bSAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3403*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3404*663afb9bSAndroid Build Coastguard Worker func_convert_path_check : ";" \ 3405*663afb9bSAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 3406*663afb9bSAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3407*663afb9bSAndroid Build Coastguard Worker fi 3408*663afb9bSAndroid Build Coastguard Worker} 3409*663afb9bSAndroid Build Coastguard Worker# end func_convert_path_nix_to_w32 3410*663afb9bSAndroid Build Coastguard Worker 3411*663afb9bSAndroid Build Coastguard Worker 3412*663afb9bSAndroid Build Coastguard Worker# func_convert_path_msys_to_cygwin ARG 3413*663afb9bSAndroid Build Coastguard Worker# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3414*663afb9bSAndroid Build Coastguard Worker# Returns result in func_to_host_file_result. 3415*663afb9bSAndroid Build Coastguard Workerfunc_convert_path_msys_to_cygwin () 3416*663afb9bSAndroid Build Coastguard Worker{ 3417*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3418*663afb9bSAndroid Build Coastguard Worker 3419*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$1 3420*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3421*663afb9bSAndroid Build Coastguard Worker # See func_convert_path_msys_to_w32: 3422*663afb9bSAndroid Build Coastguard Worker func_stripname : : "$1" 3423*663afb9bSAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 3424*663afb9bSAndroid Build Coastguard Worker func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3425*663afb9bSAndroid Build Coastguard Worker func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 3426*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$func_cygpath_result 3427*663afb9bSAndroid Build Coastguard Worker func_convert_path_check : : \ 3428*663afb9bSAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 3429*663afb9bSAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3430*663afb9bSAndroid Build Coastguard Worker fi 3431*663afb9bSAndroid Build Coastguard Worker} 3432*663afb9bSAndroid Build Coastguard Worker# end func_convert_path_msys_to_cygwin 3433*663afb9bSAndroid Build Coastguard Worker 3434*663afb9bSAndroid Build Coastguard Worker 3435*663afb9bSAndroid Build Coastguard Worker# func_convert_path_nix_to_cygwin ARG 3436*663afb9bSAndroid Build Coastguard Worker# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3437*663afb9bSAndroid Build Coastguard Worker# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3438*663afb9bSAndroid Build Coastguard Worker# func_to_host_file_result. 3439*663afb9bSAndroid Build Coastguard Workerfunc_convert_path_nix_to_cygwin () 3440*663afb9bSAndroid Build Coastguard Worker{ 3441*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3442*663afb9bSAndroid Build Coastguard Worker 3443*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$1 3444*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 3445*663afb9bSAndroid Build Coastguard Worker # Remove leading and trailing path separator characters from 3446*663afb9bSAndroid Build Coastguard Worker # ARG. msys behavior is inconsistent here, cygpath turns them 3447*663afb9bSAndroid Build Coastguard Worker # into '.;' and ';.', and winepath ignores them completely. 3448*663afb9bSAndroid Build Coastguard Worker func_stripname : : "$1" 3449*663afb9bSAndroid Build Coastguard Worker func_to_host_path_tmp1=$func_stripname_result 3450*663afb9bSAndroid Build Coastguard Worker func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3451*663afb9bSAndroid Build Coastguard Worker func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 3452*663afb9bSAndroid Build Coastguard Worker func_to_host_path_result=$func_cygpath_result 3453*663afb9bSAndroid Build Coastguard Worker func_convert_path_check : : \ 3454*663afb9bSAndroid Build Coastguard Worker "$func_to_host_path_tmp1" "$func_to_host_path_result" 3455*663afb9bSAndroid Build Coastguard Worker func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3456*663afb9bSAndroid Build Coastguard Worker fi 3457*663afb9bSAndroid Build Coastguard Worker} 3458*663afb9bSAndroid Build Coastguard Worker# end func_convert_path_nix_to_cygwin 3459*663afb9bSAndroid Build Coastguard Worker 3460*663afb9bSAndroid Build Coastguard Worker 3461*663afb9bSAndroid Build Coastguard Worker# func_dll_def_p FILE 3462*663afb9bSAndroid Build Coastguard Worker# True iff FILE is a Windows DLL '.def' file. 3463*663afb9bSAndroid Build Coastguard Worker# Keep in sync with _LT_DLL_DEF_P in libtool.m4 3464*663afb9bSAndroid Build Coastguard Workerfunc_dll_def_p () 3465*663afb9bSAndroid Build Coastguard Worker{ 3466*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3467*663afb9bSAndroid Build Coastguard Worker 3468*663afb9bSAndroid Build Coastguard Worker func_dll_def_p_tmp=`$SED -n \ 3469*663afb9bSAndroid Build Coastguard Worker -e 's/^[ ]*//' \ 3470*663afb9bSAndroid Build Coastguard Worker -e '/^\(;.*\)*$/d' \ 3471*663afb9bSAndroid Build Coastguard Worker -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 3472*663afb9bSAndroid Build Coastguard Worker -e q \ 3473*663afb9bSAndroid Build Coastguard Worker "$1"` 3474*663afb9bSAndroid Build Coastguard Worker test DEF = "$func_dll_def_p_tmp" 3475*663afb9bSAndroid Build Coastguard Worker} 3476*663afb9bSAndroid Build Coastguard Worker 3477*663afb9bSAndroid Build Coastguard Worker 3478*663afb9bSAndroid Build Coastguard Worker# func_mode_compile arg... 3479*663afb9bSAndroid Build Coastguard Workerfunc_mode_compile () 3480*663afb9bSAndroid Build Coastguard Worker{ 3481*663afb9bSAndroid Build Coastguard Worker $debug_cmd 3482*663afb9bSAndroid Build Coastguard Worker 3483*663afb9bSAndroid Build Coastguard Worker # Get the compilation command and the source file. 3484*663afb9bSAndroid Build Coastguard Worker base_compile= 3485*663afb9bSAndroid Build Coastguard Worker srcfile=$nonopt # always keep a non-empty value in "srcfile" 3486*663afb9bSAndroid Build Coastguard Worker suppress_opt=yes 3487*663afb9bSAndroid Build Coastguard Worker suppress_output= 3488*663afb9bSAndroid Build Coastguard Worker arg_mode=normal 3489*663afb9bSAndroid Build Coastguard Worker libobj= 3490*663afb9bSAndroid Build Coastguard Worker later= 3491*663afb9bSAndroid Build Coastguard Worker pie_flag= 3492*663afb9bSAndroid Build Coastguard Worker 3493*663afb9bSAndroid Build Coastguard Worker for arg 3494*663afb9bSAndroid Build Coastguard Worker do 3495*663afb9bSAndroid Build Coastguard Worker case $arg_mode in 3496*663afb9bSAndroid Build Coastguard Worker arg ) 3497*663afb9bSAndroid Build Coastguard Worker # do not "continue". Instead, add this to base_compile 3498*663afb9bSAndroid Build Coastguard Worker lastarg=$arg 3499*663afb9bSAndroid Build Coastguard Worker arg_mode=normal 3500*663afb9bSAndroid Build Coastguard Worker ;; 3501*663afb9bSAndroid Build Coastguard Worker 3502*663afb9bSAndroid Build Coastguard Worker target ) 3503*663afb9bSAndroid Build Coastguard Worker libobj=$arg 3504*663afb9bSAndroid Build Coastguard Worker arg_mode=normal 3505*663afb9bSAndroid Build Coastguard Worker continue 3506*663afb9bSAndroid Build Coastguard Worker ;; 3507*663afb9bSAndroid Build Coastguard Worker 3508*663afb9bSAndroid Build Coastguard Worker normal ) 3509*663afb9bSAndroid Build Coastguard Worker # Accept any command-line options. 3510*663afb9bSAndroid Build Coastguard Worker case $arg in 3511*663afb9bSAndroid Build Coastguard Worker -o) 3512*663afb9bSAndroid Build Coastguard Worker test -n "$libobj" && \ 3513*663afb9bSAndroid Build Coastguard Worker func_fatal_error "you cannot specify '-o' more than once" 3514*663afb9bSAndroid Build Coastguard Worker arg_mode=target 3515*663afb9bSAndroid Build Coastguard Worker continue 3516*663afb9bSAndroid Build Coastguard Worker ;; 3517*663afb9bSAndroid Build Coastguard Worker 3518*663afb9bSAndroid Build Coastguard Worker -pie | -fpie | -fPIE) 3519*663afb9bSAndroid Build Coastguard Worker func_append pie_flag " $arg" 3520*663afb9bSAndroid Build Coastguard Worker continue 3521*663afb9bSAndroid Build Coastguard Worker ;; 3522*663afb9bSAndroid Build Coastguard Worker 3523*663afb9bSAndroid Build Coastguard Worker -shared | -static | -prefer-pic | -prefer-non-pic) 3524*663afb9bSAndroid Build Coastguard Worker func_append later " $arg" 3525*663afb9bSAndroid Build Coastguard Worker continue 3526*663afb9bSAndroid Build Coastguard Worker ;; 3527*663afb9bSAndroid Build Coastguard Worker 3528*663afb9bSAndroid Build Coastguard Worker -no-suppress) 3529*663afb9bSAndroid Build Coastguard Worker suppress_opt=no 3530*663afb9bSAndroid Build Coastguard Worker continue 3531*663afb9bSAndroid Build Coastguard Worker ;; 3532*663afb9bSAndroid Build Coastguard Worker 3533*663afb9bSAndroid Build Coastguard Worker -Xcompiler) 3534*663afb9bSAndroid Build Coastguard Worker arg_mode=arg # the next one goes into the "base_compile" arg list 3535*663afb9bSAndroid Build Coastguard Worker continue # The current "srcfile" will either be retained or 3536*663afb9bSAndroid Build Coastguard Worker ;; # replaced later. I would guess that would be a bug. 3537*663afb9bSAndroid Build Coastguard Worker 3538*663afb9bSAndroid Build Coastguard Worker -Wc,*) 3539*663afb9bSAndroid Build Coastguard Worker func_stripname '-Wc,' '' "$arg" 3540*663afb9bSAndroid Build Coastguard Worker args=$func_stripname_result 3541*663afb9bSAndroid Build Coastguard Worker lastarg= 3542*663afb9bSAndroid Build Coastguard Worker save_ifs=$IFS; IFS=, 3543*663afb9bSAndroid Build Coastguard Worker for arg in $args; do 3544*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 3545*663afb9bSAndroid Build Coastguard Worker func_append_quoted lastarg "$arg" 3546*663afb9bSAndroid Build Coastguard Worker done 3547*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 3548*663afb9bSAndroid Build Coastguard Worker func_stripname ' ' '' "$lastarg" 3549*663afb9bSAndroid Build Coastguard Worker lastarg=$func_stripname_result 3550*663afb9bSAndroid Build Coastguard Worker 3551*663afb9bSAndroid Build Coastguard Worker # Add the arguments to base_compile. 3552*663afb9bSAndroid Build Coastguard Worker func_append base_compile " $lastarg" 3553*663afb9bSAndroid Build Coastguard Worker continue 3554*663afb9bSAndroid Build Coastguard Worker ;; 3555*663afb9bSAndroid Build Coastguard Worker 3556*663afb9bSAndroid Build Coastguard Worker *) 3557*663afb9bSAndroid Build Coastguard Worker # Accept the current argument as the source file. 3558*663afb9bSAndroid Build Coastguard Worker # The previous "srcfile" becomes the current argument. 3559*663afb9bSAndroid Build Coastguard Worker # 3560*663afb9bSAndroid Build Coastguard Worker lastarg=$srcfile 3561*663afb9bSAndroid Build Coastguard Worker srcfile=$arg 3562*663afb9bSAndroid Build Coastguard Worker ;; 3563*663afb9bSAndroid Build Coastguard Worker esac # case $arg 3564*663afb9bSAndroid Build Coastguard Worker ;; 3565*663afb9bSAndroid Build Coastguard Worker esac # case $arg_mode 3566*663afb9bSAndroid Build Coastguard Worker 3567*663afb9bSAndroid Build Coastguard Worker # Aesthetically quote the previous argument. 3568*663afb9bSAndroid Build Coastguard Worker func_append_quoted base_compile "$lastarg" 3569*663afb9bSAndroid Build Coastguard Worker done # for arg 3570*663afb9bSAndroid Build Coastguard Worker 3571*663afb9bSAndroid Build Coastguard Worker case $arg_mode in 3572*663afb9bSAndroid Build Coastguard Worker arg) 3573*663afb9bSAndroid Build Coastguard Worker func_fatal_error "you must specify an argument for -Xcompile" 3574*663afb9bSAndroid Build Coastguard Worker ;; 3575*663afb9bSAndroid Build Coastguard Worker target) 3576*663afb9bSAndroid Build Coastguard Worker func_fatal_error "you must specify a target with '-o'" 3577*663afb9bSAndroid Build Coastguard Worker ;; 3578*663afb9bSAndroid Build Coastguard Worker *) 3579*663afb9bSAndroid Build Coastguard Worker # Get the name of the library object. 3580*663afb9bSAndroid Build Coastguard Worker test -z "$libobj" && { 3581*663afb9bSAndroid Build Coastguard Worker func_basename "$srcfile" 3582*663afb9bSAndroid Build Coastguard Worker libobj=$func_basename_result 3583*663afb9bSAndroid Build Coastguard Worker } 3584*663afb9bSAndroid Build Coastguard Worker ;; 3585*663afb9bSAndroid Build Coastguard Worker esac 3586*663afb9bSAndroid Build Coastguard Worker 3587*663afb9bSAndroid Build Coastguard Worker # Recognize several different file suffixes. 3588*663afb9bSAndroid Build Coastguard Worker # If the user specifies -o file.o, it is replaced with file.lo 3589*663afb9bSAndroid Build Coastguard Worker case $libobj in 3590*663afb9bSAndroid Build Coastguard Worker *.[cCFSifmso] | \ 3591*663afb9bSAndroid Build Coastguard Worker *.ada | *.adb | *.ads | *.asm | \ 3592*663afb9bSAndroid Build Coastguard Worker *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3593*663afb9bSAndroid Build Coastguard Worker *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3594*663afb9bSAndroid Build Coastguard Worker func_xform "$libobj" 3595*663afb9bSAndroid Build Coastguard Worker libobj=$func_xform_result 3596*663afb9bSAndroid Build Coastguard Worker ;; 3597*663afb9bSAndroid Build Coastguard Worker esac 3598*663afb9bSAndroid Build Coastguard Worker 3599*663afb9bSAndroid Build Coastguard Worker case $libobj in 3600*663afb9bSAndroid Build Coastguard Worker *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3601*663afb9bSAndroid Build Coastguard Worker *) 3602*663afb9bSAndroid Build Coastguard Worker func_fatal_error "cannot determine name of library object from '$libobj'" 3603*663afb9bSAndroid Build Coastguard Worker ;; 3604*663afb9bSAndroid Build Coastguard Worker esac 3605*663afb9bSAndroid Build Coastguard Worker 3606*663afb9bSAndroid Build Coastguard Worker func_infer_tag $base_compile 3607*663afb9bSAndroid Build Coastguard Worker 3608*663afb9bSAndroid Build Coastguard Worker for arg in $later; do 3609*663afb9bSAndroid Build Coastguard Worker case $arg in 3610*663afb9bSAndroid Build Coastguard Worker -shared) 3611*663afb9bSAndroid Build Coastguard Worker test yes = "$build_libtool_libs" \ 3612*663afb9bSAndroid Build Coastguard Worker || func_fatal_configuration "cannot build a shared library" 3613*663afb9bSAndroid Build Coastguard Worker build_old_libs=no 3614*663afb9bSAndroid Build Coastguard Worker continue 3615*663afb9bSAndroid Build Coastguard Worker ;; 3616*663afb9bSAndroid Build Coastguard Worker 3617*663afb9bSAndroid Build Coastguard Worker -static) 3618*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=no 3619*663afb9bSAndroid Build Coastguard Worker build_old_libs=yes 3620*663afb9bSAndroid Build Coastguard Worker continue 3621*663afb9bSAndroid Build Coastguard Worker ;; 3622*663afb9bSAndroid Build Coastguard Worker 3623*663afb9bSAndroid Build Coastguard Worker -prefer-pic) 3624*663afb9bSAndroid Build Coastguard Worker pic_mode=yes 3625*663afb9bSAndroid Build Coastguard Worker continue 3626*663afb9bSAndroid Build Coastguard Worker ;; 3627*663afb9bSAndroid Build Coastguard Worker 3628*663afb9bSAndroid Build Coastguard Worker -prefer-non-pic) 3629*663afb9bSAndroid Build Coastguard Worker pic_mode=no 3630*663afb9bSAndroid Build Coastguard Worker continue 3631*663afb9bSAndroid Build Coastguard Worker ;; 3632*663afb9bSAndroid Build Coastguard Worker esac 3633*663afb9bSAndroid Build Coastguard Worker done 3634*663afb9bSAndroid Build Coastguard Worker 3635*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$libobj" 3636*663afb9bSAndroid Build Coastguard Worker test "X$libobj" != "X$func_quote_arg_result" \ 3637*663afb9bSAndroid Build Coastguard Worker && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 3638*663afb9bSAndroid Build Coastguard Worker && func_warning "libobj name '$libobj' may not contain shell special characters." 3639*663afb9bSAndroid Build Coastguard Worker func_dirname_and_basename "$obj" "/" "" 3640*663afb9bSAndroid Build Coastguard Worker objname=$func_basename_result 3641*663afb9bSAndroid Build Coastguard Worker xdir=$func_dirname_result 3642*663afb9bSAndroid Build Coastguard Worker lobj=$xdir$objdir/$objname 3643*663afb9bSAndroid Build Coastguard Worker 3644*663afb9bSAndroid Build Coastguard Worker test -z "$base_compile" && \ 3645*663afb9bSAndroid Build Coastguard Worker func_fatal_help "you must specify a compilation command" 3646*663afb9bSAndroid Build Coastguard Worker 3647*663afb9bSAndroid Build Coastguard Worker # Delete any leftover library objects. 3648*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 3649*663afb9bSAndroid Build Coastguard Worker removelist="$obj $lobj $libobj ${libobj}T" 3650*663afb9bSAndroid Build Coastguard Worker else 3651*663afb9bSAndroid Build Coastguard Worker removelist="$lobj $libobj ${libobj}T" 3652*663afb9bSAndroid Build Coastguard Worker fi 3653*663afb9bSAndroid Build Coastguard Worker 3654*663afb9bSAndroid Build Coastguard Worker # On Cygwin there's no "real" PIC flag so we must build both object types 3655*663afb9bSAndroid Build Coastguard Worker case $host_os in 3656*663afb9bSAndroid Build Coastguard Worker cygwin* | mingw* | pw32* | os2* | cegcc*) 3657*663afb9bSAndroid Build Coastguard Worker pic_mode=default 3658*663afb9bSAndroid Build Coastguard Worker ;; 3659*663afb9bSAndroid Build Coastguard Worker esac 3660*663afb9bSAndroid Build Coastguard Worker if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3661*663afb9bSAndroid Build Coastguard Worker # non-PIC code in shared libraries is not supported 3662*663afb9bSAndroid Build Coastguard Worker pic_mode=default 3663*663afb9bSAndroid Build Coastguard Worker fi 3664*663afb9bSAndroid Build Coastguard Worker 3665*663afb9bSAndroid Build Coastguard Worker # Calculate the filename of the output object if compiler does 3666*663afb9bSAndroid Build Coastguard Worker # not support -o with -c 3667*663afb9bSAndroid Build Coastguard Worker if test no = "$compiler_c_o"; then 3668*663afb9bSAndroid Build Coastguard Worker output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 3669*663afb9bSAndroid Build Coastguard Worker lockfile=$output_obj.lock 3670*663afb9bSAndroid Build Coastguard Worker else 3671*663afb9bSAndroid Build Coastguard Worker output_obj= 3672*663afb9bSAndroid Build Coastguard Worker need_locks=no 3673*663afb9bSAndroid Build Coastguard Worker lockfile= 3674*663afb9bSAndroid Build Coastguard Worker fi 3675*663afb9bSAndroid Build Coastguard Worker 3676*663afb9bSAndroid Build Coastguard Worker # Lock this critical section if it is needed 3677*663afb9bSAndroid Build Coastguard Worker # We use this script file to make the link, it avoids creating a new file 3678*663afb9bSAndroid Build Coastguard Worker if test yes = "$need_locks"; then 3679*663afb9bSAndroid Build Coastguard Worker until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3680*663afb9bSAndroid Build Coastguard Worker func_echo "Waiting for $lockfile to be removed" 3681*663afb9bSAndroid Build Coastguard Worker sleep 2 3682*663afb9bSAndroid Build Coastguard Worker done 3683*663afb9bSAndroid Build Coastguard Worker elif test warn = "$need_locks"; then 3684*663afb9bSAndroid Build Coastguard Worker if test -f "$lockfile"; then 3685*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 3686*663afb9bSAndroid Build Coastguard Worker*** ERROR, $lockfile exists and contains: 3687*663afb9bSAndroid Build Coastguard Worker`cat $lockfile 2>/dev/null` 3688*663afb9bSAndroid Build Coastguard Worker 3689*663afb9bSAndroid Build Coastguard WorkerThis indicates that another process is trying to use the same 3690*663afb9bSAndroid Build Coastguard Workertemporary object file, and libtool could not work around it because 3691*663afb9bSAndroid Build Coastguard Workeryour compiler does not support '-c' and '-o' together. If you 3692*663afb9bSAndroid Build Coastguard Workerrepeat this compilation, it may succeed, by chance, but you had better 3693*663afb9bSAndroid Build Coastguard Workeravoid parallel builds (make -j) in this platform, or get a better 3694*663afb9bSAndroid Build Coastguard Workercompiler." 3695*663afb9bSAndroid Build Coastguard Worker 3696*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 3697*663afb9bSAndroid Build Coastguard Worker exit $EXIT_FAILURE 3698*663afb9bSAndroid Build Coastguard Worker fi 3699*663afb9bSAndroid Build Coastguard Worker func_append removelist " $output_obj" 3700*663afb9bSAndroid Build Coastguard Worker $ECHO "$srcfile" > "$lockfile" 3701*663afb9bSAndroid Build Coastguard Worker fi 3702*663afb9bSAndroid Build Coastguard Worker 3703*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 3704*663afb9bSAndroid Build Coastguard Worker func_append removelist " $lockfile" 3705*663afb9bSAndroid Build Coastguard Worker trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3706*663afb9bSAndroid Build Coastguard Worker 3707*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3708*663afb9bSAndroid Build Coastguard Worker srcfile=$func_to_tool_file_result 3709*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$srcfile" 3710*663afb9bSAndroid Build Coastguard Worker qsrcfile=$func_quote_arg_result 3711*663afb9bSAndroid Build Coastguard Worker 3712*663afb9bSAndroid Build Coastguard Worker # Only build a PIC object if we are building libtool libraries. 3713*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 3714*663afb9bSAndroid Build Coastguard Worker # Without this assignment, base_compile gets emptied. 3715*663afb9bSAndroid Build Coastguard Worker fbsd_hideous_sh_bug=$base_compile 3716*663afb9bSAndroid Build Coastguard Worker 3717*663afb9bSAndroid Build Coastguard Worker if test no != "$pic_mode"; then 3718*663afb9bSAndroid Build Coastguard Worker command="$base_compile $qsrcfile $pic_flag" 3719*663afb9bSAndroid Build Coastguard Worker else 3720*663afb9bSAndroid Build Coastguard Worker # Don't build PIC code 3721*663afb9bSAndroid Build Coastguard Worker command="$base_compile $qsrcfile" 3722*663afb9bSAndroid Build Coastguard Worker fi 3723*663afb9bSAndroid Build Coastguard Worker 3724*663afb9bSAndroid Build Coastguard Worker func_mkdir_p "$xdir$objdir" 3725*663afb9bSAndroid Build Coastguard Worker 3726*663afb9bSAndroid Build Coastguard Worker if test -z "$output_obj"; then 3727*663afb9bSAndroid Build Coastguard Worker # Place PIC objects in $objdir 3728*663afb9bSAndroid Build Coastguard Worker func_append command " -o $lobj" 3729*663afb9bSAndroid Build Coastguard Worker fi 3730*663afb9bSAndroid Build Coastguard Worker 3731*663afb9bSAndroid Build Coastguard Worker func_show_eval_locale "$command" \ 3732*663afb9bSAndroid Build Coastguard Worker 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3733*663afb9bSAndroid Build Coastguard Worker 3734*663afb9bSAndroid Build Coastguard Worker if test warn = "$need_locks" && 3735*663afb9bSAndroid Build Coastguard Worker test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3736*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 3737*663afb9bSAndroid Build Coastguard Worker*** ERROR, $lockfile contains: 3738*663afb9bSAndroid Build Coastguard Worker`cat $lockfile 2>/dev/null` 3739*663afb9bSAndroid Build Coastguard Worker 3740*663afb9bSAndroid Build Coastguard Workerbut it should contain: 3741*663afb9bSAndroid Build Coastguard Worker$srcfile 3742*663afb9bSAndroid Build Coastguard Worker 3743*663afb9bSAndroid Build Coastguard WorkerThis indicates that another process is trying to use the same 3744*663afb9bSAndroid Build Coastguard Workertemporary object file, and libtool could not work around it because 3745*663afb9bSAndroid Build Coastguard Workeryour compiler does not support '-c' and '-o' together. If you 3746*663afb9bSAndroid Build Coastguard Workerrepeat this compilation, it may succeed, by chance, but you had better 3747*663afb9bSAndroid Build Coastguard Workeravoid parallel builds (make -j) in this platform, or get a better 3748*663afb9bSAndroid Build Coastguard Workercompiler." 3749*663afb9bSAndroid Build Coastguard Worker 3750*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 3751*663afb9bSAndroid Build Coastguard Worker exit $EXIT_FAILURE 3752*663afb9bSAndroid Build Coastguard Worker fi 3753*663afb9bSAndroid Build Coastguard Worker 3754*663afb9bSAndroid Build Coastguard Worker # Just move the object if needed, then go on to compile the next one 3755*663afb9bSAndroid Build Coastguard Worker if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3756*663afb9bSAndroid Build Coastguard Worker func_show_eval '$MV "$output_obj" "$lobj"' \ 3757*663afb9bSAndroid Build Coastguard Worker 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3758*663afb9bSAndroid Build Coastguard Worker fi 3759*663afb9bSAndroid Build Coastguard Worker 3760*663afb9bSAndroid Build Coastguard Worker # Allow error messages only from the first compilation. 3761*663afb9bSAndroid Build Coastguard Worker if test yes = "$suppress_opt"; then 3762*663afb9bSAndroid Build Coastguard Worker suppress_output=' >/dev/null 2>&1' 3763*663afb9bSAndroid Build Coastguard Worker fi 3764*663afb9bSAndroid Build Coastguard Worker fi 3765*663afb9bSAndroid Build Coastguard Worker 3766*663afb9bSAndroid Build Coastguard Worker # Only build a position-dependent object if we build old libraries. 3767*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 3768*663afb9bSAndroid Build Coastguard Worker if test yes != "$pic_mode"; then 3769*663afb9bSAndroid Build Coastguard Worker # Don't build PIC code 3770*663afb9bSAndroid Build Coastguard Worker command="$base_compile $qsrcfile$pie_flag" 3771*663afb9bSAndroid Build Coastguard Worker else 3772*663afb9bSAndroid Build Coastguard Worker command="$base_compile $qsrcfile $pic_flag" 3773*663afb9bSAndroid Build Coastguard Worker fi 3774*663afb9bSAndroid Build Coastguard Worker if test yes = "$compiler_c_o"; then 3775*663afb9bSAndroid Build Coastguard Worker func_append command " -o $obj" 3776*663afb9bSAndroid Build Coastguard Worker fi 3777*663afb9bSAndroid Build Coastguard Worker 3778*663afb9bSAndroid Build Coastguard Worker # Suppress compiler output if we already did a PIC compilation. 3779*663afb9bSAndroid Build Coastguard Worker func_append command "$suppress_output" 3780*663afb9bSAndroid Build Coastguard Worker func_show_eval_locale "$command" \ 3781*663afb9bSAndroid Build Coastguard Worker '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3782*663afb9bSAndroid Build Coastguard Worker 3783*663afb9bSAndroid Build Coastguard Worker if test warn = "$need_locks" && 3784*663afb9bSAndroid Build Coastguard Worker test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3785*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 3786*663afb9bSAndroid Build Coastguard Worker*** ERROR, $lockfile contains: 3787*663afb9bSAndroid Build Coastguard Worker`cat $lockfile 2>/dev/null` 3788*663afb9bSAndroid Build Coastguard Worker 3789*663afb9bSAndroid Build Coastguard Workerbut it should contain: 3790*663afb9bSAndroid Build Coastguard Worker$srcfile 3791*663afb9bSAndroid Build Coastguard Worker 3792*663afb9bSAndroid Build Coastguard WorkerThis indicates that another process is trying to use the same 3793*663afb9bSAndroid Build Coastguard Workertemporary object file, and libtool could not work around it because 3794*663afb9bSAndroid Build Coastguard Workeryour compiler does not support '-c' and '-o' together. If you 3795*663afb9bSAndroid Build Coastguard Workerrepeat this compilation, it may succeed, by chance, but you had better 3796*663afb9bSAndroid Build Coastguard Workeravoid parallel builds (make -j) in this platform, or get a better 3797*663afb9bSAndroid Build Coastguard Workercompiler." 3798*663afb9bSAndroid Build Coastguard Worker 3799*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM $removelist 3800*663afb9bSAndroid Build Coastguard Worker exit $EXIT_FAILURE 3801*663afb9bSAndroid Build Coastguard Worker fi 3802*663afb9bSAndroid Build Coastguard Worker 3803*663afb9bSAndroid Build Coastguard Worker # Just move the object if needed 3804*663afb9bSAndroid Build Coastguard Worker if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3805*663afb9bSAndroid Build Coastguard Worker func_show_eval '$MV "$output_obj" "$obj"' \ 3806*663afb9bSAndroid Build Coastguard Worker 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3807*663afb9bSAndroid Build Coastguard Worker fi 3808*663afb9bSAndroid Build Coastguard Worker fi 3809*663afb9bSAndroid Build Coastguard Worker 3810*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 3811*663afb9bSAndroid Build Coastguard Worker func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3812*663afb9bSAndroid Build Coastguard Worker 3813*663afb9bSAndroid Build Coastguard Worker # Unlock the critical section if it was locked 3814*663afb9bSAndroid Build Coastguard Worker if test no != "$need_locks"; then 3815*663afb9bSAndroid Build Coastguard Worker removelist=$lockfile 3816*663afb9bSAndroid Build Coastguard Worker $RM "$lockfile" 3817*663afb9bSAndroid Build Coastguard Worker fi 3818*663afb9bSAndroid Build Coastguard Worker } 3819*663afb9bSAndroid Build Coastguard Worker 3820*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 3821*663afb9bSAndroid Build Coastguard Worker} 3822*663afb9bSAndroid Build Coastguard Worker 3823*663afb9bSAndroid Build Coastguard Worker$opt_help || { 3824*663afb9bSAndroid Build Coastguard Worker test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3825*663afb9bSAndroid Build Coastguard Worker} 3826*663afb9bSAndroid Build Coastguard Worker 3827*663afb9bSAndroid Build Coastguard Workerfunc_mode_help () 3828*663afb9bSAndroid Build Coastguard Worker{ 3829*663afb9bSAndroid Build Coastguard Worker # We need to display help for each of the modes. 3830*663afb9bSAndroid Build Coastguard Worker case $opt_mode in 3831*663afb9bSAndroid Build Coastguard Worker "") 3832*663afb9bSAndroid Build Coastguard Worker # Generic help is extracted from the usage comments 3833*663afb9bSAndroid Build Coastguard Worker # at the start of this file. 3834*663afb9bSAndroid Build Coastguard Worker func_help 3835*663afb9bSAndroid Build Coastguard Worker ;; 3836*663afb9bSAndroid Build Coastguard Worker 3837*663afb9bSAndroid Build Coastguard Worker clean) 3838*663afb9bSAndroid Build Coastguard Worker $ECHO \ 3839*663afb9bSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 3840*663afb9bSAndroid Build Coastguard Worker 3841*663afb9bSAndroid Build Coastguard WorkerRemove files from the build directory. 3842*663afb9bSAndroid Build Coastguard Worker 3843*663afb9bSAndroid Build Coastguard WorkerRM is the name of the program to use to delete files associated with each FILE 3844*663afb9bSAndroid Build Coastguard Worker(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3845*663afb9bSAndroid Build Coastguard Workerto RM. 3846*663afb9bSAndroid Build Coastguard Worker 3847*663afb9bSAndroid Build Coastguard WorkerIf FILE is a libtool library, object or program, all the files associated 3848*663afb9bSAndroid Build Coastguard Workerwith it are deleted. Otherwise, only FILE itself is deleted using RM." 3849*663afb9bSAndroid Build Coastguard Worker ;; 3850*663afb9bSAndroid Build Coastguard Worker 3851*663afb9bSAndroid Build Coastguard Worker compile) 3852*663afb9bSAndroid Build Coastguard Worker $ECHO \ 3853*663afb9bSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 3854*663afb9bSAndroid Build Coastguard Worker 3855*663afb9bSAndroid Build Coastguard WorkerCompile a source file into a libtool library object. 3856*663afb9bSAndroid Build Coastguard Worker 3857*663afb9bSAndroid Build Coastguard WorkerThis mode accepts the following additional options: 3858*663afb9bSAndroid Build Coastguard Worker 3859*663afb9bSAndroid Build Coastguard Worker -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3860*663afb9bSAndroid Build Coastguard Worker -no-suppress do not suppress compiler output for multiple passes 3861*663afb9bSAndroid Build Coastguard Worker -prefer-pic try to build PIC objects only 3862*663afb9bSAndroid Build Coastguard Worker -prefer-non-pic try to build non-PIC objects only 3863*663afb9bSAndroid Build Coastguard Worker -shared do not build a '.o' file suitable for static linking 3864*663afb9bSAndroid Build Coastguard Worker -static only build a '.o' file suitable for static linking 3865*663afb9bSAndroid Build Coastguard Worker -Wc,FLAG pass FLAG directly to the compiler 3866*663afb9bSAndroid Build Coastguard Worker 3867*663afb9bSAndroid Build Coastguard WorkerCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3868*663afb9bSAndroid Build Coastguard Workerfrom the given SOURCEFILE. 3869*663afb9bSAndroid Build Coastguard Worker 3870*663afb9bSAndroid Build Coastguard WorkerThe output file name is determined by removing the directory component from 3871*663afb9bSAndroid Build Coastguard WorkerSOURCEFILE, then substituting the C source code suffix '.c' with the 3872*663afb9bSAndroid Build Coastguard Workerlibrary object suffix, '.lo'." 3873*663afb9bSAndroid Build Coastguard Worker ;; 3874*663afb9bSAndroid Build Coastguard Worker 3875*663afb9bSAndroid Build Coastguard Worker execute) 3876*663afb9bSAndroid Build Coastguard Worker $ECHO \ 3877*663afb9bSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 3878*663afb9bSAndroid Build Coastguard Worker 3879*663afb9bSAndroid Build Coastguard WorkerAutomatically set library path, then run a program. 3880*663afb9bSAndroid Build Coastguard Worker 3881*663afb9bSAndroid Build Coastguard WorkerThis mode accepts the following additional options: 3882*663afb9bSAndroid Build Coastguard Worker 3883*663afb9bSAndroid Build Coastguard Worker -dlopen FILE add the directory containing FILE to the library path 3884*663afb9bSAndroid Build Coastguard Worker 3885*663afb9bSAndroid Build Coastguard WorkerThis mode sets the library path environment variable according to '-dlopen' 3886*663afb9bSAndroid Build Coastguard Workerflags. 3887*663afb9bSAndroid Build Coastguard Worker 3888*663afb9bSAndroid Build Coastguard WorkerIf any of the ARGS are libtool executable wrappers, then they are translated 3889*663afb9bSAndroid Build Coastguard Workerinto their corresponding uninstalled binary, and any of their required library 3890*663afb9bSAndroid Build Coastguard Workerdirectories are added to the library path. 3891*663afb9bSAndroid Build Coastguard Worker 3892*663afb9bSAndroid Build Coastguard WorkerThen, COMMAND is executed, with ARGS as arguments." 3893*663afb9bSAndroid Build Coastguard Worker ;; 3894*663afb9bSAndroid Build Coastguard Worker 3895*663afb9bSAndroid Build Coastguard Worker finish) 3896*663afb9bSAndroid Build Coastguard Worker $ECHO \ 3897*663afb9bSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 3898*663afb9bSAndroid Build Coastguard Worker 3899*663afb9bSAndroid Build Coastguard WorkerComplete the installation of libtool libraries. 3900*663afb9bSAndroid Build Coastguard Worker 3901*663afb9bSAndroid Build Coastguard WorkerEach LIBDIR is a directory that contains libtool libraries. 3902*663afb9bSAndroid Build Coastguard Worker 3903*663afb9bSAndroid Build Coastguard WorkerThe commands that this mode executes may require superuser privileges. Use 3904*663afb9bSAndroid Build Coastguard Workerthe '--dry-run' option if you just want to see what would be executed." 3905*663afb9bSAndroid Build Coastguard Worker ;; 3906*663afb9bSAndroid Build Coastguard Worker 3907*663afb9bSAndroid Build Coastguard Worker install) 3908*663afb9bSAndroid Build Coastguard Worker $ECHO \ 3909*663afb9bSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 3910*663afb9bSAndroid Build Coastguard Worker 3911*663afb9bSAndroid Build Coastguard WorkerInstall executables or libraries. 3912*663afb9bSAndroid Build Coastguard Worker 3913*663afb9bSAndroid Build Coastguard WorkerINSTALL-COMMAND is the installation command. The first component should be 3914*663afb9bSAndroid Build Coastguard Workereither the 'install' or 'cp' program. 3915*663afb9bSAndroid Build Coastguard Worker 3916*663afb9bSAndroid Build Coastguard WorkerThe following components of INSTALL-COMMAND are treated specially: 3917*663afb9bSAndroid Build Coastguard Worker 3918*663afb9bSAndroid Build Coastguard Worker -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 3919*663afb9bSAndroid Build Coastguard Worker 3920*663afb9bSAndroid Build Coastguard WorkerThe rest of the components are interpreted as arguments to that command (only 3921*663afb9bSAndroid Build Coastguard WorkerBSD-compatible install options are recognized)." 3922*663afb9bSAndroid Build Coastguard Worker ;; 3923*663afb9bSAndroid Build Coastguard Worker 3924*663afb9bSAndroid Build Coastguard Worker link) 3925*663afb9bSAndroid Build Coastguard Worker $ECHO \ 3926*663afb9bSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 3927*663afb9bSAndroid Build Coastguard Worker 3928*663afb9bSAndroid Build Coastguard WorkerLink object files or libraries together to form another library, or to 3929*663afb9bSAndroid Build Coastguard Workercreate an executable program. 3930*663afb9bSAndroid Build Coastguard Worker 3931*663afb9bSAndroid Build Coastguard WorkerLINK-COMMAND is a command using the C compiler that you would use to create 3932*663afb9bSAndroid Build Coastguard Workera program from several object files. 3933*663afb9bSAndroid Build Coastguard Worker 3934*663afb9bSAndroid Build Coastguard WorkerThe following components of LINK-COMMAND are treated specially: 3935*663afb9bSAndroid Build Coastguard Worker 3936*663afb9bSAndroid Build Coastguard Worker -all-static do not do any dynamic linking at all 3937*663afb9bSAndroid Build Coastguard Worker -avoid-version do not add a version suffix if possible 3938*663afb9bSAndroid Build Coastguard Worker -bindir BINDIR specify path to binaries directory (for systems where 3939*663afb9bSAndroid Build Coastguard Worker libraries must be found in the PATH setting at runtime) 3940*663afb9bSAndroid Build Coastguard Worker -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3941*663afb9bSAndroid Build Coastguard Worker -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3942*663afb9bSAndroid Build Coastguard Worker -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3943*663afb9bSAndroid Build Coastguard Worker -export-symbols SYMFILE 3944*663afb9bSAndroid Build Coastguard Worker try to export only the symbols listed in SYMFILE 3945*663afb9bSAndroid Build Coastguard Worker -export-symbols-regex REGEX 3946*663afb9bSAndroid Build Coastguard Worker try to export only the symbols matching REGEX 3947*663afb9bSAndroid Build Coastguard Worker -LLIBDIR search LIBDIR for required installed libraries 3948*663afb9bSAndroid Build Coastguard Worker -lNAME OUTPUT-FILE requires the installed library libNAME 3949*663afb9bSAndroid Build Coastguard Worker -module build a library that can dlopened 3950*663afb9bSAndroid Build Coastguard Worker -no-fast-install disable the fast-install mode 3951*663afb9bSAndroid Build Coastguard Worker -no-install link a not-installable executable 3952*663afb9bSAndroid Build Coastguard Worker -no-undefined declare that a library does not refer to external symbols 3953*663afb9bSAndroid Build Coastguard Worker -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 3954*663afb9bSAndroid Build Coastguard Worker -objectlist FILE use a list of object files found in FILE to specify objects 3955*663afb9bSAndroid Build Coastguard Worker -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3956*663afb9bSAndroid Build Coastguard Worker -precious-files-regex REGEX 3957*663afb9bSAndroid Build Coastguard Worker don't remove output files matching REGEX 3958*663afb9bSAndroid Build Coastguard Worker -release RELEASE specify package release information 3959*663afb9bSAndroid Build Coastguard Worker -rpath LIBDIR the created library will eventually be installed in LIBDIR 3960*663afb9bSAndroid Build Coastguard Worker -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 3961*663afb9bSAndroid Build Coastguard Worker -shared only do dynamic linking of libtool libraries 3962*663afb9bSAndroid Build Coastguard Worker -shrext SUFFIX override the standard shared library file extension 3963*663afb9bSAndroid Build Coastguard Worker -static do not do any dynamic linking of uninstalled libtool libraries 3964*663afb9bSAndroid Build Coastguard Worker -static-libtool-libs 3965*663afb9bSAndroid Build Coastguard Worker do not do any dynamic linking of libtool libraries 3966*663afb9bSAndroid Build Coastguard Worker -version-info CURRENT[:REVISION[:AGE]] 3967*663afb9bSAndroid Build Coastguard Worker specify library version info [each variable defaults to 0] 3968*663afb9bSAndroid Build Coastguard Worker -weak LIBNAME declare that the target provides the LIBNAME interface 3969*663afb9bSAndroid Build Coastguard Worker -Wc,FLAG 3970*663afb9bSAndroid Build Coastguard Worker -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 3971*663afb9bSAndroid Build Coastguard Worker -Wl,FLAG 3972*663afb9bSAndroid Build Coastguard Worker -Xlinker FLAG pass linker-specific FLAG directly to the linker 3973*663afb9bSAndroid Build Coastguard Worker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 3974*663afb9bSAndroid Build Coastguard Worker 3975*663afb9bSAndroid Build Coastguard WorkerAll other options (arguments beginning with '-') are ignored. 3976*663afb9bSAndroid Build Coastguard Worker 3977*663afb9bSAndroid Build Coastguard WorkerEvery other argument is treated as a filename. Files ending in '.la' are 3978*663afb9bSAndroid Build Coastguard Workertreated as uninstalled libtool libraries, other files are standard or library 3979*663afb9bSAndroid Build Coastguard Workerobject files. 3980*663afb9bSAndroid Build Coastguard Worker 3981*663afb9bSAndroid Build Coastguard WorkerIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 3982*663afb9bSAndroid Build Coastguard Workeronly library objects ('.lo' files) may be specified, and '-rpath' is 3983*663afb9bSAndroid Build Coastguard Workerrequired, except when creating a convenience library. 3984*663afb9bSAndroid Build Coastguard Worker 3985*663afb9bSAndroid Build Coastguard WorkerIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 3986*663afb9bSAndroid Build Coastguard Workerusing 'ar' and 'ranlib', or on Windows using 'lib'. 3987*663afb9bSAndroid Build Coastguard Worker 3988*663afb9bSAndroid Build Coastguard WorkerIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 3989*663afb9bSAndroid Build Coastguard Workeris created, otherwise an executable program is created." 3990*663afb9bSAndroid Build Coastguard Worker ;; 3991*663afb9bSAndroid Build Coastguard Worker 3992*663afb9bSAndroid Build Coastguard Worker uninstall) 3993*663afb9bSAndroid Build Coastguard Worker $ECHO \ 3994*663afb9bSAndroid Build Coastguard Worker"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 3995*663afb9bSAndroid Build Coastguard Worker 3996*663afb9bSAndroid Build Coastguard WorkerRemove libraries from an installation directory. 3997*663afb9bSAndroid Build Coastguard Worker 3998*663afb9bSAndroid Build Coastguard WorkerRM is the name of the program to use to delete files associated with each FILE 3999*663afb9bSAndroid Build Coastguard Worker(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 4000*663afb9bSAndroid Build Coastguard Workerto RM. 4001*663afb9bSAndroid Build Coastguard Worker 4002*663afb9bSAndroid Build Coastguard WorkerIf FILE is a libtool library, all the files associated with it are deleted. 4003*663afb9bSAndroid Build Coastguard WorkerOtherwise, only FILE itself is deleted using RM." 4004*663afb9bSAndroid Build Coastguard Worker ;; 4005*663afb9bSAndroid Build Coastguard Worker 4006*663afb9bSAndroid Build Coastguard Worker *) 4007*663afb9bSAndroid Build Coastguard Worker func_fatal_help "invalid operation mode '$opt_mode'" 4008*663afb9bSAndroid Build Coastguard Worker ;; 4009*663afb9bSAndroid Build Coastguard Worker esac 4010*663afb9bSAndroid Build Coastguard Worker 4011*663afb9bSAndroid Build Coastguard Worker echo 4012*663afb9bSAndroid Build Coastguard Worker $ECHO "Try '$progname --help' for more information about other modes." 4013*663afb9bSAndroid Build Coastguard Worker} 4014*663afb9bSAndroid Build Coastguard Worker 4015*663afb9bSAndroid Build Coastguard Worker# Now that we've collected a possible --mode arg, show help if necessary 4016*663afb9bSAndroid Build Coastguard Workerif $opt_help; then 4017*663afb9bSAndroid Build Coastguard Worker if test : = "$opt_help"; then 4018*663afb9bSAndroid Build Coastguard Worker func_mode_help 4019*663afb9bSAndroid Build Coastguard Worker else 4020*663afb9bSAndroid Build Coastguard Worker { 4021*663afb9bSAndroid Build Coastguard Worker func_help noexit 4022*663afb9bSAndroid Build Coastguard Worker for opt_mode in compile link execute install finish uninstall clean; do 4023*663afb9bSAndroid Build Coastguard Worker func_mode_help 4024*663afb9bSAndroid Build Coastguard Worker done 4025*663afb9bSAndroid Build Coastguard Worker } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 4026*663afb9bSAndroid Build Coastguard Worker { 4027*663afb9bSAndroid Build Coastguard Worker func_help noexit 4028*663afb9bSAndroid Build Coastguard Worker for opt_mode in compile link execute install finish uninstall clean; do 4029*663afb9bSAndroid Build Coastguard Worker echo 4030*663afb9bSAndroid Build Coastguard Worker func_mode_help 4031*663afb9bSAndroid Build Coastguard Worker done 4032*663afb9bSAndroid Build Coastguard Worker } | 4033*663afb9bSAndroid Build Coastguard Worker $SED '1d 4034*663afb9bSAndroid Build Coastguard Worker /^When reporting/,/^Report/{ 4035*663afb9bSAndroid Build Coastguard Worker H 4036*663afb9bSAndroid Build Coastguard Worker d 4037*663afb9bSAndroid Build Coastguard Worker } 4038*663afb9bSAndroid Build Coastguard Worker $x 4039*663afb9bSAndroid Build Coastguard Worker /information about other modes/d 4040*663afb9bSAndroid Build Coastguard Worker /more detailed .*MODE/d 4041*663afb9bSAndroid Build Coastguard Worker s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 4042*663afb9bSAndroid Build Coastguard Worker fi 4043*663afb9bSAndroid Build Coastguard Worker exit $? 4044*663afb9bSAndroid Build Coastguard Workerfi 4045*663afb9bSAndroid Build Coastguard Worker 4046*663afb9bSAndroid Build Coastguard Worker 4047*663afb9bSAndroid Build Coastguard Worker# func_mode_execute arg... 4048*663afb9bSAndroid Build Coastguard Workerfunc_mode_execute () 4049*663afb9bSAndroid Build Coastguard Worker{ 4050*663afb9bSAndroid Build Coastguard Worker $debug_cmd 4051*663afb9bSAndroid Build Coastguard Worker 4052*663afb9bSAndroid Build Coastguard Worker # The first argument is the command name. 4053*663afb9bSAndroid Build Coastguard Worker cmd=$nonopt 4054*663afb9bSAndroid Build Coastguard Worker test -z "$cmd" && \ 4055*663afb9bSAndroid Build Coastguard Worker func_fatal_help "you must specify a COMMAND" 4056*663afb9bSAndroid Build Coastguard Worker 4057*663afb9bSAndroid Build Coastguard Worker # Handle -dlopen flags immediately. 4058*663afb9bSAndroid Build Coastguard Worker for file in $opt_dlopen; do 4059*663afb9bSAndroid Build Coastguard Worker test -f "$file" \ 4060*663afb9bSAndroid Build Coastguard Worker || func_fatal_help "'$file' is not a file" 4061*663afb9bSAndroid Build Coastguard Worker 4062*663afb9bSAndroid Build Coastguard Worker dir= 4063*663afb9bSAndroid Build Coastguard Worker case $file in 4064*663afb9bSAndroid Build Coastguard Worker *.la) 4065*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$file" 4066*663afb9bSAndroid Build Coastguard Worker file=$func_resolve_sysroot_result 4067*663afb9bSAndroid Build Coastguard Worker 4068*663afb9bSAndroid Build Coastguard Worker # Check to see that this really is a libtool archive. 4069*663afb9bSAndroid Build Coastguard Worker func_lalib_unsafe_p "$file" \ 4070*663afb9bSAndroid Build Coastguard Worker || func_fatal_help "'$lib' is not a valid libtool archive" 4071*663afb9bSAndroid Build Coastguard Worker 4072*663afb9bSAndroid Build Coastguard Worker # Read the libtool library. 4073*663afb9bSAndroid Build Coastguard Worker dlname= 4074*663afb9bSAndroid Build Coastguard Worker library_names= 4075*663afb9bSAndroid Build Coastguard Worker func_source "$file" 4076*663afb9bSAndroid Build Coastguard Worker 4077*663afb9bSAndroid Build Coastguard Worker # Skip this library if it cannot be dlopened. 4078*663afb9bSAndroid Build Coastguard Worker if test -z "$dlname"; then 4079*663afb9bSAndroid Build Coastguard Worker # Warn if it was a shared library. 4080*663afb9bSAndroid Build Coastguard Worker test -n "$library_names" && \ 4081*663afb9bSAndroid Build Coastguard Worker func_warning "'$file' was not linked with '-export-dynamic'" 4082*663afb9bSAndroid Build Coastguard Worker continue 4083*663afb9bSAndroid Build Coastguard Worker fi 4084*663afb9bSAndroid Build Coastguard Worker 4085*663afb9bSAndroid Build Coastguard Worker func_dirname "$file" "" "." 4086*663afb9bSAndroid Build Coastguard Worker dir=$func_dirname_result 4087*663afb9bSAndroid Build Coastguard Worker 4088*663afb9bSAndroid Build Coastguard Worker if test -f "$dir/$objdir/$dlname"; then 4089*663afb9bSAndroid Build Coastguard Worker func_append dir "/$objdir" 4090*663afb9bSAndroid Build Coastguard Worker else 4091*663afb9bSAndroid Build Coastguard Worker if test ! -f "$dir/$dlname"; then 4092*663afb9bSAndroid Build Coastguard Worker func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 4093*663afb9bSAndroid Build Coastguard Worker fi 4094*663afb9bSAndroid Build Coastguard Worker fi 4095*663afb9bSAndroid Build Coastguard Worker ;; 4096*663afb9bSAndroid Build Coastguard Worker 4097*663afb9bSAndroid Build Coastguard Worker *.lo) 4098*663afb9bSAndroid Build Coastguard Worker # Just add the directory containing the .lo file. 4099*663afb9bSAndroid Build Coastguard Worker func_dirname "$file" "" "." 4100*663afb9bSAndroid Build Coastguard Worker dir=$func_dirname_result 4101*663afb9bSAndroid Build Coastguard Worker ;; 4102*663afb9bSAndroid Build Coastguard Worker 4103*663afb9bSAndroid Build Coastguard Worker *) 4104*663afb9bSAndroid Build Coastguard Worker func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 4105*663afb9bSAndroid Build Coastguard Worker continue 4106*663afb9bSAndroid Build Coastguard Worker ;; 4107*663afb9bSAndroid Build Coastguard Worker esac 4108*663afb9bSAndroid Build Coastguard Worker 4109*663afb9bSAndroid Build Coastguard Worker # Get the absolute pathname. 4110*663afb9bSAndroid Build Coastguard Worker absdir=`cd "$dir" && pwd` 4111*663afb9bSAndroid Build Coastguard Worker test -n "$absdir" && dir=$absdir 4112*663afb9bSAndroid Build Coastguard Worker 4113*663afb9bSAndroid Build Coastguard Worker # Now add the directory to shlibpath_var. 4114*663afb9bSAndroid Build Coastguard Worker if eval "test -z \"\$$shlibpath_var\""; then 4115*663afb9bSAndroid Build Coastguard Worker eval "$shlibpath_var=\"\$dir\"" 4116*663afb9bSAndroid Build Coastguard Worker else 4117*663afb9bSAndroid Build Coastguard Worker eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 4118*663afb9bSAndroid Build Coastguard Worker fi 4119*663afb9bSAndroid Build Coastguard Worker done 4120*663afb9bSAndroid Build Coastguard Worker 4121*663afb9bSAndroid Build Coastguard Worker # This variable tells wrapper scripts just to set shlibpath_var 4122*663afb9bSAndroid Build Coastguard Worker # rather than running their programs. 4123*663afb9bSAndroid Build Coastguard Worker libtool_execute_magic=$magic 4124*663afb9bSAndroid Build Coastguard Worker 4125*663afb9bSAndroid Build Coastguard Worker # Check if any of the arguments is a wrapper script. 4126*663afb9bSAndroid Build Coastguard Worker args= 4127*663afb9bSAndroid Build Coastguard Worker for file 4128*663afb9bSAndroid Build Coastguard Worker do 4129*663afb9bSAndroid Build Coastguard Worker case $file in 4130*663afb9bSAndroid Build Coastguard Worker -* | *.la | *.lo ) ;; 4131*663afb9bSAndroid Build Coastguard Worker *) 4132*663afb9bSAndroid Build Coastguard Worker # Do a test to see if this is really a libtool program. 4133*663afb9bSAndroid Build Coastguard Worker if func_ltwrapper_script_p "$file"; then 4134*663afb9bSAndroid Build Coastguard Worker func_source "$file" 4135*663afb9bSAndroid Build Coastguard Worker # Transform arg to wrapped name. 4136*663afb9bSAndroid Build Coastguard Worker file=$progdir/$program 4137*663afb9bSAndroid Build Coastguard Worker elif func_ltwrapper_executable_p "$file"; then 4138*663afb9bSAndroid Build Coastguard Worker func_ltwrapper_scriptname "$file" 4139*663afb9bSAndroid Build Coastguard Worker func_source "$func_ltwrapper_scriptname_result" 4140*663afb9bSAndroid Build Coastguard Worker # Transform arg to wrapped name. 4141*663afb9bSAndroid Build Coastguard Worker file=$progdir/$program 4142*663afb9bSAndroid Build Coastguard Worker fi 4143*663afb9bSAndroid Build Coastguard Worker ;; 4144*663afb9bSAndroid Build Coastguard Worker esac 4145*663afb9bSAndroid Build Coastguard Worker # Quote arguments (to preserve shell metacharacters). 4146*663afb9bSAndroid Build Coastguard Worker func_append_quoted args "$file" 4147*663afb9bSAndroid Build Coastguard Worker done 4148*663afb9bSAndroid Build Coastguard Worker 4149*663afb9bSAndroid Build Coastguard Worker if $opt_dry_run; then 4150*663afb9bSAndroid Build Coastguard Worker # Display what would be done. 4151*663afb9bSAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 4152*663afb9bSAndroid Build Coastguard Worker eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 4153*663afb9bSAndroid Build Coastguard Worker echo "export $shlibpath_var" 4154*663afb9bSAndroid Build Coastguard Worker fi 4155*663afb9bSAndroid Build Coastguard Worker $ECHO "$cmd$args" 4156*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 4157*663afb9bSAndroid Build Coastguard Worker else 4158*663afb9bSAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 4159*663afb9bSAndroid Build Coastguard Worker # Export the shlibpath_var. 4160*663afb9bSAndroid Build Coastguard Worker eval "export $shlibpath_var" 4161*663afb9bSAndroid Build Coastguard Worker fi 4162*663afb9bSAndroid Build Coastguard Worker 4163*663afb9bSAndroid Build Coastguard Worker # Restore saved environment variables 4164*663afb9bSAndroid Build Coastguard Worker for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 4165*663afb9bSAndroid Build Coastguard Worker do 4166*663afb9bSAndroid Build Coastguard Worker eval "if test \"\${save_$lt_var+set}\" = set; then 4167*663afb9bSAndroid Build Coastguard Worker $lt_var=\$save_$lt_var; export $lt_var 4168*663afb9bSAndroid Build Coastguard Worker else 4169*663afb9bSAndroid Build Coastguard Worker $lt_unset $lt_var 4170*663afb9bSAndroid Build Coastguard Worker fi" 4171*663afb9bSAndroid Build Coastguard Worker done 4172*663afb9bSAndroid Build Coastguard Worker 4173*663afb9bSAndroid Build Coastguard Worker # Now prepare to actually exec the command. 4174*663afb9bSAndroid Build Coastguard Worker exec_cmd=\$cmd$args 4175*663afb9bSAndroid Build Coastguard Worker fi 4176*663afb9bSAndroid Build Coastguard Worker} 4177*663afb9bSAndroid Build Coastguard Worker 4178*663afb9bSAndroid Build Coastguard Workertest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 4179*663afb9bSAndroid Build Coastguard Worker 4180*663afb9bSAndroid Build Coastguard Worker 4181*663afb9bSAndroid Build Coastguard Worker# func_mode_finish arg... 4182*663afb9bSAndroid Build Coastguard Workerfunc_mode_finish () 4183*663afb9bSAndroid Build Coastguard Worker{ 4184*663afb9bSAndroid Build Coastguard Worker $debug_cmd 4185*663afb9bSAndroid Build Coastguard Worker 4186*663afb9bSAndroid Build Coastguard Worker libs= 4187*663afb9bSAndroid Build Coastguard Worker libdirs= 4188*663afb9bSAndroid Build Coastguard Worker admincmds= 4189*663afb9bSAndroid Build Coastguard Worker 4190*663afb9bSAndroid Build Coastguard Worker for opt in "$nonopt" ${1+"$@"} 4191*663afb9bSAndroid Build Coastguard Worker do 4192*663afb9bSAndroid Build Coastguard Worker if test -d "$opt"; then 4193*663afb9bSAndroid Build Coastguard Worker func_append libdirs " $opt" 4194*663afb9bSAndroid Build Coastguard Worker 4195*663afb9bSAndroid Build Coastguard Worker elif test -f "$opt"; then 4196*663afb9bSAndroid Build Coastguard Worker if func_lalib_unsafe_p "$opt"; then 4197*663afb9bSAndroid Build Coastguard Worker func_append libs " $opt" 4198*663afb9bSAndroid Build Coastguard Worker else 4199*663afb9bSAndroid Build Coastguard Worker func_warning "'$opt' is not a valid libtool archive" 4200*663afb9bSAndroid Build Coastguard Worker fi 4201*663afb9bSAndroid Build Coastguard Worker 4202*663afb9bSAndroid Build Coastguard Worker else 4203*663afb9bSAndroid Build Coastguard Worker func_fatal_error "invalid argument '$opt'" 4204*663afb9bSAndroid Build Coastguard Worker fi 4205*663afb9bSAndroid Build Coastguard Worker done 4206*663afb9bSAndroid Build Coastguard Worker 4207*663afb9bSAndroid Build Coastguard Worker if test -n "$libs"; then 4208*663afb9bSAndroid Build Coastguard Worker if test -n "$lt_sysroot"; then 4209*663afb9bSAndroid Build Coastguard Worker sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 4210*663afb9bSAndroid Build Coastguard Worker sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 4211*663afb9bSAndroid Build Coastguard Worker else 4212*663afb9bSAndroid Build Coastguard Worker sysroot_cmd= 4213*663afb9bSAndroid Build Coastguard Worker fi 4214*663afb9bSAndroid Build Coastguard Worker 4215*663afb9bSAndroid Build Coastguard Worker # Remove sysroot references 4216*663afb9bSAndroid Build Coastguard Worker if $opt_dry_run; then 4217*663afb9bSAndroid Build Coastguard Worker for lib in $libs; do 4218*663afb9bSAndroid Build Coastguard Worker echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4219*663afb9bSAndroid Build Coastguard Worker done 4220*663afb9bSAndroid Build Coastguard Worker else 4221*663afb9bSAndroid Build Coastguard Worker tmpdir=`func_mktempdir` 4222*663afb9bSAndroid Build Coastguard Worker for lib in $libs; do 4223*663afb9bSAndroid Build Coastguard Worker $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4224*663afb9bSAndroid Build Coastguard Worker > $tmpdir/tmp-la 4225*663afb9bSAndroid Build Coastguard Worker mv -f $tmpdir/tmp-la $lib 4226*663afb9bSAndroid Build Coastguard Worker done 4227*663afb9bSAndroid Build Coastguard Worker ${RM}r "$tmpdir" 4228*663afb9bSAndroid Build Coastguard Worker fi 4229*663afb9bSAndroid Build Coastguard Worker fi 4230*663afb9bSAndroid Build Coastguard Worker 4231*663afb9bSAndroid Build Coastguard Worker if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4232*663afb9bSAndroid Build Coastguard Worker for libdir in $libdirs; do 4233*663afb9bSAndroid Build Coastguard Worker if test -n "$finish_cmds"; then 4234*663afb9bSAndroid Build Coastguard Worker # Do each command in the finish commands. 4235*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4236*663afb9bSAndroid Build Coastguard Worker'"$cmd"'"' 4237*663afb9bSAndroid Build Coastguard Worker fi 4238*663afb9bSAndroid Build Coastguard Worker if test -n "$finish_eval"; then 4239*663afb9bSAndroid Build Coastguard Worker # Do the single finish_eval. 4240*663afb9bSAndroid Build Coastguard Worker eval cmds=\"$finish_eval\" 4241*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || eval "$cmds" || func_append admincmds " 4242*663afb9bSAndroid Build Coastguard Worker $cmds" 4243*663afb9bSAndroid Build Coastguard Worker fi 4244*663afb9bSAndroid Build Coastguard Worker done 4245*663afb9bSAndroid Build Coastguard Worker fi 4246*663afb9bSAndroid Build Coastguard Worker 4247*663afb9bSAndroid Build Coastguard Worker # Exit here if they wanted silent mode. 4248*663afb9bSAndroid Build Coastguard Worker $opt_quiet && exit $EXIT_SUCCESS 4249*663afb9bSAndroid Build Coastguard Worker 4250*663afb9bSAndroid Build Coastguard Worker if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4251*663afb9bSAndroid Build Coastguard Worker echo "----------------------------------------------------------------------" 4252*663afb9bSAndroid Build Coastguard Worker echo "Libraries have been installed in:" 4253*663afb9bSAndroid Build Coastguard Worker for libdir in $libdirs; do 4254*663afb9bSAndroid Build Coastguard Worker $ECHO " $libdir" 4255*663afb9bSAndroid Build Coastguard Worker done 4256*663afb9bSAndroid Build Coastguard Worker echo 4257*663afb9bSAndroid Build Coastguard Worker echo "If you ever happen to want to link against installed libraries" 4258*663afb9bSAndroid Build Coastguard Worker echo "in a given directory, LIBDIR, you must either use libtool, and" 4259*663afb9bSAndroid Build Coastguard Worker echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4260*663afb9bSAndroid Build Coastguard Worker echo "flag during linking and do at least one of the following:" 4261*663afb9bSAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 4262*663afb9bSAndroid Build Coastguard Worker echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4263*663afb9bSAndroid Build Coastguard Worker echo " during execution" 4264*663afb9bSAndroid Build Coastguard Worker fi 4265*663afb9bSAndroid Build Coastguard Worker if test -n "$runpath_var"; then 4266*663afb9bSAndroid Build Coastguard Worker echo " - add LIBDIR to the '$runpath_var' environment variable" 4267*663afb9bSAndroid Build Coastguard Worker echo " during linking" 4268*663afb9bSAndroid Build Coastguard Worker fi 4269*663afb9bSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 4270*663afb9bSAndroid Build Coastguard Worker libdir=LIBDIR 4271*663afb9bSAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 4272*663afb9bSAndroid Build Coastguard Worker 4273*663afb9bSAndroid Build Coastguard Worker $ECHO " - use the '$flag' linker flag" 4274*663afb9bSAndroid Build Coastguard Worker fi 4275*663afb9bSAndroid Build Coastguard Worker if test -n "$admincmds"; then 4276*663afb9bSAndroid Build Coastguard Worker $ECHO " - have your system administrator run these commands:$admincmds" 4277*663afb9bSAndroid Build Coastguard Worker fi 4278*663afb9bSAndroid Build Coastguard Worker if test -f /etc/ld.so.conf; then 4279*663afb9bSAndroid Build Coastguard Worker echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4280*663afb9bSAndroid Build Coastguard Worker fi 4281*663afb9bSAndroid Build Coastguard Worker echo 4282*663afb9bSAndroid Build Coastguard Worker 4283*663afb9bSAndroid Build Coastguard Worker echo "See any operating system documentation about shared libraries for" 4284*663afb9bSAndroid Build Coastguard Worker case $host in 4285*663afb9bSAndroid Build Coastguard Worker solaris2.[6789]|solaris2.1[0-9]) 4286*663afb9bSAndroid Build Coastguard Worker echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4287*663afb9bSAndroid Build Coastguard Worker echo "pages." 4288*663afb9bSAndroid Build Coastguard Worker ;; 4289*663afb9bSAndroid Build Coastguard Worker *) 4290*663afb9bSAndroid Build Coastguard Worker echo "more information, such as the ld(1) and ld.so(8) manual pages." 4291*663afb9bSAndroid Build Coastguard Worker ;; 4292*663afb9bSAndroid Build Coastguard Worker esac 4293*663afb9bSAndroid Build Coastguard Worker echo "----------------------------------------------------------------------" 4294*663afb9bSAndroid Build Coastguard Worker fi 4295*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 4296*663afb9bSAndroid Build Coastguard Worker} 4297*663afb9bSAndroid Build Coastguard Worker 4298*663afb9bSAndroid Build Coastguard Workertest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4299*663afb9bSAndroid Build Coastguard Worker 4300*663afb9bSAndroid Build Coastguard Worker 4301*663afb9bSAndroid Build Coastguard Worker# func_mode_install arg... 4302*663afb9bSAndroid Build Coastguard Workerfunc_mode_install () 4303*663afb9bSAndroid Build Coastguard Worker{ 4304*663afb9bSAndroid Build Coastguard Worker $debug_cmd 4305*663afb9bSAndroid Build Coastguard Worker 4306*663afb9bSAndroid Build Coastguard Worker # There may be an optional sh(1) argument at the beginning of 4307*663afb9bSAndroid Build Coastguard Worker # install_prog (especially on Windows NT). 4308*663afb9bSAndroid Build Coastguard Worker if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4309*663afb9bSAndroid Build Coastguard Worker # Allow the use of GNU shtool's install command. 4310*663afb9bSAndroid Build Coastguard Worker case $nonopt in *shtool*) :;; *) false;; esac 4311*663afb9bSAndroid Build Coastguard Worker then 4312*663afb9bSAndroid Build Coastguard Worker # Aesthetically quote it. 4313*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$nonopt" 4314*663afb9bSAndroid Build Coastguard Worker install_prog="$func_quote_arg_result " 4315*663afb9bSAndroid Build Coastguard Worker arg=$1 4316*663afb9bSAndroid Build Coastguard Worker shift 4317*663afb9bSAndroid Build Coastguard Worker else 4318*663afb9bSAndroid Build Coastguard Worker install_prog= 4319*663afb9bSAndroid Build Coastguard Worker arg=$nonopt 4320*663afb9bSAndroid Build Coastguard Worker fi 4321*663afb9bSAndroid Build Coastguard Worker 4322*663afb9bSAndroid Build Coastguard Worker # The real first argument should be the name of the installation program. 4323*663afb9bSAndroid Build Coastguard Worker # Aesthetically quote it. 4324*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 4325*663afb9bSAndroid Build Coastguard Worker func_append install_prog "$func_quote_arg_result" 4326*663afb9bSAndroid Build Coastguard Worker install_shared_prog=$install_prog 4327*663afb9bSAndroid Build Coastguard Worker case " $install_prog " in 4328*663afb9bSAndroid Build Coastguard Worker *[\\\ /]cp\ *) install_cp=: ;; 4329*663afb9bSAndroid Build Coastguard Worker *) install_cp=false ;; 4330*663afb9bSAndroid Build Coastguard Worker esac 4331*663afb9bSAndroid Build Coastguard Worker 4332*663afb9bSAndroid Build Coastguard Worker # We need to accept at least all the BSD install flags. 4333*663afb9bSAndroid Build Coastguard Worker dest= 4334*663afb9bSAndroid Build Coastguard Worker files= 4335*663afb9bSAndroid Build Coastguard Worker opts= 4336*663afb9bSAndroid Build Coastguard Worker prev= 4337*663afb9bSAndroid Build Coastguard Worker install_type= 4338*663afb9bSAndroid Build Coastguard Worker isdir=false 4339*663afb9bSAndroid Build Coastguard Worker stripme= 4340*663afb9bSAndroid Build Coastguard Worker no_mode=: 4341*663afb9bSAndroid Build Coastguard Worker for arg 4342*663afb9bSAndroid Build Coastguard Worker do 4343*663afb9bSAndroid Build Coastguard Worker arg2= 4344*663afb9bSAndroid Build Coastguard Worker if test -n "$dest"; then 4345*663afb9bSAndroid Build Coastguard Worker func_append files " $dest" 4346*663afb9bSAndroid Build Coastguard Worker dest=$arg 4347*663afb9bSAndroid Build Coastguard Worker continue 4348*663afb9bSAndroid Build Coastguard Worker fi 4349*663afb9bSAndroid Build Coastguard Worker 4350*663afb9bSAndroid Build Coastguard Worker case $arg in 4351*663afb9bSAndroid Build Coastguard Worker -d) isdir=: ;; 4352*663afb9bSAndroid Build Coastguard Worker -f) 4353*663afb9bSAndroid Build Coastguard Worker if $install_cp; then :; else 4354*663afb9bSAndroid Build Coastguard Worker prev=$arg 4355*663afb9bSAndroid Build Coastguard Worker fi 4356*663afb9bSAndroid Build Coastguard Worker ;; 4357*663afb9bSAndroid Build Coastguard Worker -g | -m | -o) 4358*663afb9bSAndroid Build Coastguard Worker prev=$arg 4359*663afb9bSAndroid Build Coastguard Worker ;; 4360*663afb9bSAndroid Build Coastguard Worker -s) 4361*663afb9bSAndroid Build Coastguard Worker stripme=" -s" 4362*663afb9bSAndroid Build Coastguard Worker continue 4363*663afb9bSAndroid Build Coastguard Worker ;; 4364*663afb9bSAndroid Build Coastguard Worker -*) 4365*663afb9bSAndroid Build Coastguard Worker ;; 4366*663afb9bSAndroid Build Coastguard Worker *) 4367*663afb9bSAndroid Build Coastguard Worker # If the previous option needed an argument, then skip it. 4368*663afb9bSAndroid Build Coastguard Worker if test -n "$prev"; then 4369*663afb9bSAndroid Build Coastguard Worker if test X-m = "X$prev" && test -n "$install_override_mode"; then 4370*663afb9bSAndroid Build Coastguard Worker arg2=$install_override_mode 4371*663afb9bSAndroid Build Coastguard Worker no_mode=false 4372*663afb9bSAndroid Build Coastguard Worker fi 4373*663afb9bSAndroid Build Coastguard Worker prev= 4374*663afb9bSAndroid Build Coastguard Worker else 4375*663afb9bSAndroid Build Coastguard Worker dest=$arg 4376*663afb9bSAndroid Build Coastguard Worker continue 4377*663afb9bSAndroid Build Coastguard Worker fi 4378*663afb9bSAndroid Build Coastguard Worker ;; 4379*663afb9bSAndroid Build Coastguard Worker esac 4380*663afb9bSAndroid Build Coastguard Worker 4381*663afb9bSAndroid Build Coastguard Worker # Aesthetically quote the argument. 4382*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 4383*663afb9bSAndroid Build Coastguard Worker func_append install_prog " $func_quote_arg_result" 4384*663afb9bSAndroid Build Coastguard Worker if test -n "$arg2"; then 4385*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$arg2" 4386*663afb9bSAndroid Build Coastguard Worker fi 4387*663afb9bSAndroid Build Coastguard Worker func_append install_shared_prog " $func_quote_arg_result" 4388*663afb9bSAndroid Build Coastguard Worker done 4389*663afb9bSAndroid Build Coastguard Worker 4390*663afb9bSAndroid Build Coastguard Worker test -z "$install_prog" && \ 4391*663afb9bSAndroid Build Coastguard Worker func_fatal_help "you must specify an install program" 4392*663afb9bSAndroid Build Coastguard Worker 4393*663afb9bSAndroid Build Coastguard Worker test -n "$prev" && \ 4394*663afb9bSAndroid Build Coastguard Worker func_fatal_help "the '$prev' option requires an argument" 4395*663afb9bSAndroid Build Coastguard Worker 4396*663afb9bSAndroid Build Coastguard Worker if test -n "$install_override_mode" && $no_mode; then 4397*663afb9bSAndroid Build Coastguard Worker if $install_cp; then :; else 4398*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$install_override_mode" 4399*663afb9bSAndroid Build Coastguard Worker func_append install_shared_prog " -m $func_quote_arg_result" 4400*663afb9bSAndroid Build Coastguard Worker fi 4401*663afb9bSAndroid Build Coastguard Worker fi 4402*663afb9bSAndroid Build Coastguard Worker 4403*663afb9bSAndroid Build Coastguard Worker if test -z "$files"; then 4404*663afb9bSAndroid Build Coastguard Worker if test -z "$dest"; then 4405*663afb9bSAndroid Build Coastguard Worker func_fatal_help "no file or destination specified" 4406*663afb9bSAndroid Build Coastguard Worker else 4407*663afb9bSAndroid Build Coastguard Worker func_fatal_help "you must specify a destination" 4408*663afb9bSAndroid Build Coastguard Worker fi 4409*663afb9bSAndroid Build Coastguard Worker fi 4410*663afb9bSAndroid Build Coastguard Worker 4411*663afb9bSAndroid Build Coastguard Worker # Strip any trailing slash from the destination. 4412*663afb9bSAndroid Build Coastguard Worker func_stripname '' '/' "$dest" 4413*663afb9bSAndroid Build Coastguard Worker dest=$func_stripname_result 4414*663afb9bSAndroid Build Coastguard Worker 4415*663afb9bSAndroid Build Coastguard Worker # Check to see that the destination is a directory. 4416*663afb9bSAndroid Build Coastguard Worker test -d "$dest" && isdir=: 4417*663afb9bSAndroid Build Coastguard Worker if $isdir; then 4418*663afb9bSAndroid Build Coastguard Worker destdir=$dest 4419*663afb9bSAndroid Build Coastguard Worker destname= 4420*663afb9bSAndroid Build Coastguard Worker else 4421*663afb9bSAndroid Build Coastguard Worker func_dirname_and_basename "$dest" "" "." 4422*663afb9bSAndroid Build Coastguard Worker destdir=$func_dirname_result 4423*663afb9bSAndroid Build Coastguard Worker destname=$func_basename_result 4424*663afb9bSAndroid Build Coastguard Worker 4425*663afb9bSAndroid Build Coastguard Worker # Not a directory, so check to see that there is only one file specified. 4426*663afb9bSAndroid Build Coastguard Worker set dummy $files; shift 4427*663afb9bSAndroid Build Coastguard Worker test "$#" -gt 1 && \ 4428*663afb9bSAndroid Build Coastguard Worker func_fatal_help "'$dest' is not a directory" 4429*663afb9bSAndroid Build Coastguard Worker fi 4430*663afb9bSAndroid Build Coastguard Worker case $destdir in 4431*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 4432*663afb9bSAndroid Build Coastguard Worker *) 4433*663afb9bSAndroid Build Coastguard Worker for file in $files; do 4434*663afb9bSAndroid Build Coastguard Worker case $file in 4435*663afb9bSAndroid Build Coastguard Worker *.lo) ;; 4436*663afb9bSAndroid Build Coastguard Worker *) 4437*663afb9bSAndroid Build Coastguard Worker func_fatal_help "'$destdir' must be an absolute directory name" 4438*663afb9bSAndroid Build Coastguard Worker ;; 4439*663afb9bSAndroid Build Coastguard Worker esac 4440*663afb9bSAndroid Build Coastguard Worker done 4441*663afb9bSAndroid Build Coastguard Worker ;; 4442*663afb9bSAndroid Build Coastguard Worker esac 4443*663afb9bSAndroid Build Coastguard Worker 4444*663afb9bSAndroid Build Coastguard Worker # This variable tells wrapper scripts just to set variables rather 4445*663afb9bSAndroid Build Coastguard Worker # than running their programs. 4446*663afb9bSAndroid Build Coastguard Worker libtool_install_magic=$magic 4447*663afb9bSAndroid Build Coastguard Worker 4448*663afb9bSAndroid Build Coastguard Worker staticlibs= 4449*663afb9bSAndroid Build Coastguard Worker future_libdirs= 4450*663afb9bSAndroid Build Coastguard Worker current_libdirs= 4451*663afb9bSAndroid Build Coastguard Worker for file in $files; do 4452*663afb9bSAndroid Build Coastguard Worker 4453*663afb9bSAndroid Build Coastguard Worker # Do each installation. 4454*663afb9bSAndroid Build Coastguard Worker case $file in 4455*663afb9bSAndroid Build Coastguard Worker *.$libext) 4456*663afb9bSAndroid Build Coastguard Worker # Do the static libraries later. 4457*663afb9bSAndroid Build Coastguard Worker func_append staticlibs " $file" 4458*663afb9bSAndroid Build Coastguard Worker ;; 4459*663afb9bSAndroid Build Coastguard Worker 4460*663afb9bSAndroid Build Coastguard Worker *.la) 4461*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$file" 4462*663afb9bSAndroid Build Coastguard Worker file=$func_resolve_sysroot_result 4463*663afb9bSAndroid Build Coastguard Worker 4464*663afb9bSAndroid Build Coastguard Worker # Check to see that this really is a libtool archive. 4465*663afb9bSAndroid Build Coastguard Worker func_lalib_unsafe_p "$file" \ 4466*663afb9bSAndroid Build Coastguard Worker || func_fatal_help "'$file' is not a valid libtool archive" 4467*663afb9bSAndroid Build Coastguard Worker 4468*663afb9bSAndroid Build Coastguard Worker library_names= 4469*663afb9bSAndroid Build Coastguard Worker old_library= 4470*663afb9bSAndroid Build Coastguard Worker relink_command= 4471*663afb9bSAndroid Build Coastguard Worker func_source "$file" 4472*663afb9bSAndroid Build Coastguard Worker 4473*663afb9bSAndroid Build Coastguard Worker # Add the libdir to current_libdirs if it is the destination. 4474*663afb9bSAndroid Build Coastguard Worker if test "X$destdir" = "X$libdir"; then 4475*663afb9bSAndroid Build Coastguard Worker case "$current_libdirs " in 4476*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 4477*663afb9bSAndroid Build Coastguard Worker *) func_append current_libdirs " $libdir" ;; 4478*663afb9bSAndroid Build Coastguard Worker esac 4479*663afb9bSAndroid Build Coastguard Worker else 4480*663afb9bSAndroid Build Coastguard Worker # Note the libdir as a future libdir. 4481*663afb9bSAndroid Build Coastguard Worker case "$future_libdirs " in 4482*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 4483*663afb9bSAndroid Build Coastguard Worker *) func_append future_libdirs " $libdir" ;; 4484*663afb9bSAndroid Build Coastguard Worker esac 4485*663afb9bSAndroid Build Coastguard Worker fi 4486*663afb9bSAndroid Build Coastguard Worker 4487*663afb9bSAndroid Build Coastguard Worker func_dirname "$file" "/" "" 4488*663afb9bSAndroid Build Coastguard Worker dir=$func_dirname_result 4489*663afb9bSAndroid Build Coastguard Worker func_append dir "$objdir" 4490*663afb9bSAndroid Build Coastguard Worker 4491*663afb9bSAndroid Build Coastguard Worker if test -n "$relink_command"; then 4492*663afb9bSAndroid Build Coastguard Worker # Determine the prefix the user has applied to our future dir. 4493*663afb9bSAndroid Build Coastguard Worker inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4494*663afb9bSAndroid Build Coastguard Worker 4495*663afb9bSAndroid Build Coastguard Worker # Don't allow the user to place us outside of our expected 4496*663afb9bSAndroid Build Coastguard Worker # location b/c this prevents finding dependent libraries that 4497*663afb9bSAndroid Build Coastguard Worker # are installed to the same prefix. 4498*663afb9bSAndroid Build Coastguard Worker # At present, this check doesn't affect windows .dll's that 4499*663afb9bSAndroid Build Coastguard Worker # are installed into $libdir/../bin (currently, that works fine) 4500*663afb9bSAndroid Build Coastguard Worker # but it's something to keep an eye on. 4501*663afb9bSAndroid Build Coastguard Worker test "$inst_prefix_dir" = "$destdir" && \ 4502*663afb9bSAndroid Build Coastguard Worker func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4503*663afb9bSAndroid Build Coastguard Worker 4504*663afb9bSAndroid Build Coastguard Worker if test -n "$inst_prefix_dir"; then 4505*663afb9bSAndroid Build Coastguard Worker # Stick the inst_prefix_dir data into the link command. 4506*663afb9bSAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4507*663afb9bSAndroid Build Coastguard Worker else 4508*663afb9bSAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4509*663afb9bSAndroid Build Coastguard Worker fi 4510*663afb9bSAndroid Build Coastguard Worker 4511*663afb9bSAndroid Build Coastguard Worker func_warning "relinking '$file'" 4512*663afb9bSAndroid Build Coastguard Worker func_show_eval "$relink_command" \ 4513*663afb9bSAndroid Build Coastguard Worker 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4514*663afb9bSAndroid Build Coastguard Worker fi 4515*663afb9bSAndroid Build Coastguard Worker 4516*663afb9bSAndroid Build Coastguard Worker # See the names of the shared library. 4517*663afb9bSAndroid Build Coastguard Worker set dummy $library_names; shift 4518*663afb9bSAndroid Build Coastguard Worker if test -n "$1"; then 4519*663afb9bSAndroid Build Coastguard Worker realname=$1 4520*663afb9bSAndroid Build Coastguard Worker shift 4521*663afb9bSAndroid Build Coastguard Worker 4522*663afb9bSAndroid Build Coastguard Worker srcname=$realname 4523*663afb9bSAndroid Build Coastguard Worker test -n "$relink_command" && srcname=${realname}T 4524*663afb9bSAndroid Build Coastguard Worker 4525*663afb9bSAndroid Build Coastguard Worker # Install the shared library and build the symlinks. 4526*663afb9bSAndroid Build Coastguard Worker func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4527*663afb9bSAndroid Build Coastguard Worker 'exit $?' 4528*663afb9bSAndroid Build Coastguard Worker tstripme=$stripme 4529*663afb9bSAndroid Build Coastguard Worker case $host_os in 4530*663afb9bSAndroid Build Coastguard Worker cygwin* | mingw* | pw32* | cegcc*) 4531*663afb9bSAndroid Build Coastguard Worker case $realname in 4532*663afb9bSAndroid Build Coastguard Worker *.dll.a) 4533*663afb9bSAndroid Build Coastguard Worker tstripme= 4534*663afb9bSAndroid Build Coastguard Worker ;; 4535*663afb9bSAndroid Build Coastguard Worker esac 4536*663afb9bSAndroid Build Coastguard Worker ;; 4537*663afb9bSAndroid Build Coastguard Worker os2*) 4538*663afb9bSAndroid Build Coastguard Worker case $realname in 4539*663afb9bSAndroid Build Coastguard Worker *_dll.a) 4540*663afb9bSAndroid Build Coastguard Worker tstripme= 4541*663afb9bSAndroid Build Coastguard Worker ;; 4542*663afb9bSAndroid Build Coastguard Worker esac 4543*663afb9bSAndroid Build Coastguard Worker ;; 4544*663afb9bSAndroid Build Coastguard Worker esac 4545*663afb9bSAndroid Build Coastguard Worker if test -n "$tstripme" && test -n "$striplib"; then 4546*663afb9bSAndroid Build Coastguard Worker func_show_eval "$striplib $destdir/$realname" 'exit $?' 4547*663afb9bSAndroid Build Coastguard Worker fi 4548*663afb9bSAndroid Build Coastguard Worker 4549*663afb9bSAndroid Build Coastguard Worker if test "$#" -gt 0; then 4550*663afb9bSAndroid Build Coastguard Worker # Delete the old symlinks, and create new ones. 4551*663afb9bSAndroid Build Coastguard Worker # Try 'ln -sf' first, because the 'ln' binary might depend on 4552*663afb9bSAndroid Build Coastguard Worker # the symlink we replace! Solaris /bin/ln does not understand -f, 4553*663afb9bSAndroid Build Coastguard Worker # so we also need to try rm && ln -s. 4554*663afb9bSAndroid Build Coastguard Worker for linkname 4555*663afb9bSAndroid Build Coastguard Worker do 4556*663afb9bSAndroid Build Coastguard Worker test "$linkname" != "$realname" \ 4557*663afb9bSAndroid Build Coastguard Worker && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 4558*663afb9bSAndroid Build Coastguard Worker done 4559*663afb9bSAndroid Build Coastguard Worker fi 4560*663afb9bSAndroid Build Coastguard Worker 4561*663afb9bSAndroid Build Coastguard Worker # Do each command in the postinstall commands. 4562*663afb9bSAndroid Build Coastguard Worker lib=$destdir/$realname 4563*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$postinstall_cmds" 'exit $?' 4564*663afb9bSAndroid Build Coastguard Worker fi 4565*663afb9bSAndroid Build Coastguard Worker 4566*663afb9bSAndroid Build Coastguard Worker # Install the pseudo-library for information purposes. 4567*663afb9bSAndroid Build Coastguard Worker func_basename "$file" 4568*663afb9bSAndroid Build Coastguard Worker name=$func_basename_result 4569*663afb9bSAndroid Build Coastguard Worker instname=$dir/${name}i 4570*663afb9bSAndroid Build Coastguard Worker func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 4571*663afb9bSAndroid Build Coastguard Worker 4572*663afb9bSAndroid Build Coastguard Worker # Maybe install the static library, too. 4573*663afb9bSAndroid Build Coastguard Worker test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4574*663afb9bSAndroid Build Coastguard Worker ;; 4575*663afb9bSAndroid Build Coastguard Worker 4576*663afb9bSAndroid Build Coastguard Worker *.lo) 4577*663afb9bSAndroid Build Coastguard Worker # Install (i.e. copy) a libtool object. 4578*663afb9bSAndroid Build Coastguard Worker 4579*663afb9bSAndroid Build Coastguard Worker # Figure out destination file name, if it wasn't already specified. 4580*663afb9bSAndroid Build Coastguard Worker if test -n "$destname"; then 4581*663afb9bSAndroid Build Coastguard Worker destfile=$destdir/$destname 4582*663afb9bSAndroid Build Coastguard Worker else 4583*663afb9bSAndroid Build Coastguard Worker func_basename "$file" 4584*663afb9bSAndroid Build Coastguard Worker destfile=$func_basename_result 4585*663afb9bSAndroid Build Coastguard Worker destfile=$destdir/$destfile 4586*663afb9bSAndroid Build Coastguard Worker fi 4587*663afb9bSAndroid Build Coastguard Worker 4588*663afb9bSAndroid Build Coastguard Worker # Deduce the name of the destination old-style object file. 4589*663afb9bSAndroid Build Coastguard Worker case $destfile in 4590*663afb9bSAndroid Build Coastguard Worker *.lo) 4591*663afb9bSAndroid Build Coastguard Worker func_lo2o "$destfile" 4592*663afb9bSAndroid Build Coastguard Worker staticdest=$func_lo2o_result 4593*663afb9bSAndroid Build Coastguard Worker ;; 4594*663afb9bSAndroid Build Coastguard Worker *.$objext) 4595*663afb9bSAndroid Build Coastguard Worker staticdest=$destfile 4596*663afb9bSAndroid Build Coastguard Worker destfile= 4597*663afb9bSAndroid Build Coastguard Worker ;; 4598*663afb9bSAndroid Build Coastguard Worker *) 4599*663afb9bSAndroid Build Coastguard Worker func_fatal_help "cannot copy a libtool object to '$destfile'" 4600*663afb9bSAndroid Build Coastguard Worker ;; 4601*663afb9bSAndroid Build Coastguard Worker esac 4602*663afb9bSAndroid Build Coastguard Worker 4603*663afb9bSAndroid Build Coastguard Worker # Install the libtool object if requested. 4604*663afb9bSAndroid Build Coastguard Worker test -n "$destfile" && \ 4605*663afb9bSAndroid Build Coastguard Worker func_show_eval "$install_prog $file $destfile" 'exit $?' 4606*663afb9bSAndroid Build Coastguard Worker 4607*663afb9bSAndroid Build Coastguard Worker # Install the old object if enabled. 4608*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 4609*663afb9bSAndroid Build Coastguard Worker # Deduce the name of the old-style object file. 4610*663afb9bSAndroid Build Coastguard Worker func_lo2o "$file" 4611*663afb9bSAndroid Build Coastguard Worker staticobj=$func_lo2o_result 4612*663afb9bSAndroid Build Coastguard Worker func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4613*663afb9bSAndroid Build Coastguard Worker fi 4614*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 4615*663afb9bSAndroid Build Coastguard Worker ;; 4616*663afb9bSAndroid Build Coastguard Worker 4617*663afb9bSAndroid Build Coastguard Worker *) 4618*663afb9bSAndroid Build Coastguard Worker # Figure out destination file name, if it wasn't already specified. 4619*663afb9bSAndroid Build Coastguard Worker if test -n "$destname"; then 4620*663afb9bSAndroid Build Coastguard Worker destfile=$destdir/$destname 4621*663afb9bSAndroid Build Coastguard Worker else 4622*663afb9bSAndroid Build Coastguard Worker func_basename "$file" 4623*663afb9bSAndroid Build Coastguard Worker destfile=$func_basename_result 4624*663afb9bSAndroid Build Coastguard Worker destfile=$destdir/$destfile 4625*663afb9bSAndroid Build Coastguard Worker fi 4626*663afb9bSAndroid Build Coastguard Worker 4627*663afb9bSAndroid Build Coastguard Worker # If the file is missing, and there is a .exe on the end, strip it 4628*663afb9bSAndroid Build Coastguard Worker # because it is most likely a libtool script we actually want to 4629*663afb9bSAndroid Build Coastguard Worker # install 4630*663afb9bSAndroid Build Coastguard Worker stripped_ext= 4631*663afb9bSAndroid Build Coastguard Worker case $file in 4632*663afb9bSAndroid Build Coastguard Worker *.exe) 4633*663afb9bSAndroid Build Coastguard Worker if test ! -f "$file"; then 4634*663afb9bSAndroid Build Coastguard Worker func_stripname '' '.exe' "$file" 4635*663afb9bSAndroid Build Coastguard Worker file=$func_stripname_result 4636*663afb9bSAndroid Build Coastguard Worker stripped_ext=.exe 4637*663afb9bSAndroid Build Coastguard Worker fi 4638*663afb9bSAndroid Build Coastguard Worker ;; 4639*663afb9bSAndroid Build Coastguard Worker esac 4640*663afb9bSAndroid Build Coastguard Worker 4641*663afb9bSAndroid Build Coastguard Worker # Do a test to see if this is really a libtool program. 4642*663afb9bSAndroid Build Coastguard Worker case $host in 4643*663afb9bSAndroid Build Coastguard Worker *cygwin* | *mingw*) 4644*663afb9bSAndroid Build Coastguard Worker if func_ltwrapper_executable_p "$file"; then 4645*663afb9bSAndroid Build Coastguard Worker func_ltwrapper_scriptname "$file" 4646*663afb9bSAndroid Build Coastguard Worker wrapper=$func_ltwrapper_scriptname_result 4647*663afb9bSAndroid Build Coastguard Worker else 4648*663afb9bSAndroid Build Coastguard Worker func_stripname '' '.exe' "$file" 4649*663afb9bSAndroid Build Coastguard Worker wrapper=$func_stripname_result 4650*663afb9bSAndroid Build Coastguard Worker fi 4651*663afb9bSAndroid Build Coastguard Worker ;; 4652*663afb9bSAndroid Build Coastguard Worker *) 4653*663afb9bSAndroid Build Coastguard Worker wrapper=$file 4654*663afb9bSAndroid Build Coastguard Worker ;; 4655*663afb9bSAndroid Build Coastguard Worker esac 4656*663afb9bSAndroid Build Coastguard Worker if func_ltwrapper_script_p "$wrapper"; then 4657*663afb9bSAndroid Build Coastguard Worker notinst_deplibs= 4658*663afb9bSAndroid Build Coastguard Worker relink_command= 4659*663afb9bSAndroid Build Coastguard Worker 4660*663afb9bSAndroid Build Coastguard Worker func_source "$wrapper" 4661*663afb9bSAndroid Build Coastguard Worker 4662*663afb9bSAndroid Build Coastguard Worker # Check the variables that should have been set. 4663*663afb9bSAndroid Build Coastguard Worker test -z "$generated_by_libtool_version" && \ 4664*663afb9bSAndroid Build Coastguard Worker func_fatal_error "invalid libtool wrapper script '$wrapper'" 4665*663afb9bSAndroid Build Coastguard Worker 4666*663afb9bSAndroid Build Coastguard Worker finalize=: 4667*663afb9bSAndroid Build Coastguard Worker for lib in $notinst_deplibs; do 4668*663afb9bSAndroid Build Coastguard Worker # Check to see that each library is installed. 4669*663afb9bSAndroid Build Coastguard Worker libdir= 4670*663afb9bSAndroid Build Coastguard Worker if test -f "$lib"; then 4671*663afb9bSAndroid Build Coastguard Worker func_source "$lib" 4672*663afb9bSAndroid Build Coastguard Worker fi 4673*663afb9bSAndroid Build Coastguard Worker libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4674*663afb9bSAndroid Build Coastguard Worker if test -n "$libdir" && test ! -f "$libfile"; then 4675*663afb9bSAndroid Build Coastguard Worker func_warning "'$lib' has not been installed in '$libdir'" 4676*663afb9bSAndroid Build Coastguard Worker finalize=false 4677*663afb9bSAndroid Build Coastguard Worker fi 4678*663afb9bSAndroid Build Coastguard Worker done 4679*663afb9bSAndroid Build Coastguard Worker 4680*663afb9bSAndroid Build Coastguard Worker relink_command= 4681*663afb9bSAndroid Build Coastguard Worker func_source "$wrapper" 4682*663afb9bSAndroid Build Coastguard Worker 4683*663afb9bSAndroid Build Coastguard Worker outputname= 4684*663afb9bSAndroid Build Coastguard Worker if test no = "$fast_install" && test -n "$relink_command"; then 4685*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 4686*663afb9bSAndroid Build Coastguard Worker if $finalize; then 4687*663afb9bSAndroid Build Coastguard Worker tmpdir=`func_mktempdir` 4688*663afb9bSAndroid Build Coastguard Worker func_basename "$file$stripped_ext" 4689*663afb9bSAndroid Build Coastguard Worker file=$func_basename_result 4690*663afb9bSAndroid Build Coastguard Worker outputname=$tmpdir/$file 4691*663afb9bSAndroid Build Coastguard Worker # Replace the output file specification. 4692*663afb9bSAndroid Build Coastguard Worker relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4693*663afb9bSAndroid Build Coastguard Worker 4694*663afb9bSAndroid Build Coastguard Worker $opt_quiet || { 4695*663afb9bSAndroid Build Coastguard Worker func_quote_arg expand,pretty "$relink_command" 4696*663afb9bSAndroid Build Coastguard Worker eval "func_echo $func_quote_arg_result" 4697*663afb9bSAndroid Build Coastguard Worker } 4698*663afb9bSAndroid Build Coastguard Worker if eval "$relink_command"; then : 4699*663afb9bSAndroid Build Coastguard Worker else 4700*663afb9bSAndroid Build Coastguard Worker func_error "error: relink '$file' with the above command before installing it" 4701*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || ${RM}r "$tmpdir" 4702*663afb9bSAndroid Build Coastguard Worker continue 4703*663afb9bSAndroid Build Coastguard Worker fi 4704*663afb9bSAndroid Build Coastguard Worker file=$outputname 4705*663afb9bSAndroid Build Coastguard Worker else 4706*663afb9bSAndroid Build Coastguard Worker func_warning "cannot relink '$file'" 4707*663afb9bSAndroid Build Coastguard Worker fi 4708*663afb9bSAndroid Build Coastguard Worker } 4709*663afb9bSAndroid Build Coastguard Worker else 4710*663afb9bSAndroid Build Coastguard Worker # Install the binary that we compiled earlier. 4711*663afb9bSAndroid Build Coastguard Worker file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4712*663afb9bSAndroid Build Coastguard Worker fi 4713*663afb9bSAndroid Build Coastguard Worker fi 4714*663afb9bSAndroid Build Coastguard Worker 4715*663afb9bSAndroid Build Coastguard Worker # remove .exe since cygwin /usr/bin/install will append another 4716*663afb9bSAndroid Build Coastguard Worker # one anyway 4717*663afb9bSAndroid Build Coastguard Worker case $install_prog,$host in 4718*663afb9bSAndroid Build Coastguard Worker */usr/bin/install*,*cygwin*) 4719*663afb9bSAndroid Build Coastguard Worker case $file:$destfile in 4720*663afb9bSAndroid Build Coastguard Worker *.exe:*.exe) 4721*663afb9bSAndroid Build Coastguard Worker # this is ok 4722*663afb9bSAndroid Build Coastguard Worker ;; 4723*663afb9bSAndroid Build Coastguard Worker *.exe:*) 4724*663afb9bSAndroid Build Coastguard Worker destfile=$destfile.exe 4725*663afb9bSAndroid Build Coastguard Worker ;; 4726*663afb9bSAndroid Build Coastguard Worker *:*.exe) 4727*663afb9bSAndroid Build Coastguard Worker func_stripname '' '.exe' "$destfile" 4728*663afb9bSAndroid Build Coastguard Worker destfile=$func_stripname_result 4729*663afb9bSAndroid Build Coastguard Worker ;; 4730*663afb9bSAndroid Build Coastguard Worker esac 4731*663afb9bSAndroid Build Coastguard Worker ;; 4732*663afb9bSAndroid Build Coastguard Worker esac 4733*663afb9bSAndroid Build Coastguard Worker func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4734*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || if test -n "$outputname"; then 4735*663afb9bSAndroid Build Coastguard Worker ${RM}r "$tmpdir" 4736*663afb9bSAndroid Build Coastguard Worker fi 4737*663afb9bSAndroid Build Coastguard Worker ;; 4738*663afb9bSAndroid Build Coastguard Worker esac 4739*663afb9bSAndroid Build Coastguard Worker done 4740*663afb9bSAndroid Build Coastguard Worker 4741*663afb9bSAndroid Build Coastguard Worker for file in $staticlibs; do 4742*663afb9bSAndroid Build Coastguard Worker func_basename "$file" 4743*663afb9bSAndroid Build Coastguard Worker name=$func_basename_result 4744*663afb9bSAndroid Build Coastguard Worker 4745*663afb9bSAndroid Build Coastguard Worker # Set up the ranlib parameters. 4746*663afb9bSAndroid Build Coastguard Worker oldlib=$destdir/$name 4747*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4748*663afb9bSAndroid Build Coastguard Worker tool_oldlib=$func_to_tool_file_result 4749*663afb9bSAndroid Build Coastguard Worker 4750*663afb9bSAndroid Build Coastguard Worker func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4751*663afb9bSAndroid Build Coastguard Worker 4752*663afb9bSAndroid Build Coastguard Worker if test -n "$stripme" && test -n "$old_striplib"; then 4753*663afb9bSAndroid Build Coastguard Worker func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4754*663afb9bSAndroid Build Coastguard Worker fi 4755*663afb9bSAndroid Build Coastguard Worker 4756*663afb9bSAndroid Build Coastguard Worker # Do each command in the postinstall commands. 4757*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4758*663afb9bSAndroid Build Coastguard Worker done 4759*663afb9bSAndroid Build Coastguard Worker 4760*663afb9bSAndroid Build Coastguard Worker test -n "$future_libdirs" && \ 4761*663afb9bSAndroid Build Coastguard Worker func_warning "remember to run '$progname --finish$future_libdirs'" 4762*663afb9bSAndroid Build Coastguard Worker 4763*663afb9bSAndroid Build Coastguard Worker if test -n "$current_libdirs"; then 4764*663afb9bSAndroid Build Coastguard Worker # Maybe just do a dry run. 4765*663afb9bSAndroid Build Coastguard Worker $opt_dry_run && current_libdirs=" -n$current_libdirs" 4766*663afb9bSAndroid Build Coastguard Worker exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4767*663afb9bSAndroid Build Coastguard Worker else 4768*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 4769*663afb9bSAndroid Build Coastguard Worker fi 4770*663afb9bSAndroid Build Coastguard Worker} 4771*663afb9bSAndroid Build Coastguard Worker 4772*663afb9bSAndroid Build Coastguard Workertest install = "$opt_mode" && func_mode_install ${1+"$@"} 4773*663afb9bSAndroid Build Coastguard Worker 4774*663afb9bSAndroid Build Coastguard Worker 4775*663afb9bSAndroid Build Coastguard Worker# func_generate_dlsyms outputname originator pic_p 4776*663afb9bSAndroid Build Coastguard Worker# Extract symbols from dlprefiles and create ${outputname}S.o with 4777*663afb9bSAndroid Build Coastguard Worker# a dlpreopen symbol table. 4778*663afb9bSAndroid Build Coastguard Workerfunc_generate_dlsyms () 4779*663afb9bSAndroid Build Coastguard Worker{ 4780*663afb9bSAndroid Build Coastguard Worker $debug_cmd 4781*663afb9bSAndroid Build Coastguard Worker 4782*663afb9bSAndroid Build Coastguard Worker my_outputname=$1 4783*663afb9bSAndroid Build Coastguard Worker my_originator=$2 4784*663afb9bSAndroid Build Coastguard Worker my_pic_p=${3-false} 4785*663afb9bSAndroid Build Coastguard Worker my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4786*663afb9bSAndroid Build Coastguard Worker my_dlsyms= 4787*663afb9bSAndroid Build Coastguard Worker 4788*663afb9bSAndroid Build Coastguard Worker if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4789*663afb9bSAndroid Build Coastguard Worker if test -n "$NM" && test -n "$global_symbol_pipe"; then 4790*663afb9bSAndroid Build Coastguard Worker my_dlsyms=${my_outputname}S.c 4791*663afb9bSAndroid Build Coastguard Worker else 4792*663afb9bSAndroid Build Coastguard Worker func_error "not configured to extract global symbols from dlpreopened files" 4793*663afb9bSAndroid Build Coastguard Worker fi 4794*663afb9bSAndroid Build Coastguard Worker fi 4795*663afb9bSAndroid Build Coastguard Worker 4796*663afb9bSAndroid Build Coastguard Worker if test -n "$my_dlsyms"; then 4797*663afb9bSAndroid Build Coastguard Worker case $my_dlsyms in 4798*663afb9bSAndroid Build Coastguard Worker "") ;; 4799*663afb9bSAndroid Build Coastguard Worker *.c) 4800*663afb9bSAndroid Build Coastguard Worker # Discover the nlist of each of the dlfiles. 4801*663afb9bSAndroid Build Coastguard Worker nlist=$output_objdir/$my_outputname.nm 4802*663afb9bSAndroid Build Coastguard Worker 4803*663afb9bSAndroid Build Coastguard Worker func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4804*663afb9bSAndroid Build Coastguard Worker 4805*663afb9bSAndroid Build Coastguard Worker # Parse the name list into a source file. 4806*663afb9bSAndroid Build Coastguard Worker func_verbose "creating $output_objdir/$my_dlsyms" 4807*663afb9bSAndroid Build Coastguard Worker 4808*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 4809*663afb9bSAndroid Build Coastguard Worker/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 4810*663afb9bSAndroid Build Coastguard Worker/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4811*663afb9bSAndroid Build Coastguard Worker 4812*663afb9bSAndroid Build Coastguard Worker#ifdef __cplusplus 4813*663afb9bSAndroid Build Coastguard Workerextern \"C\" { 4814*663afb9bSAndroid Build Coastguard Worker#endif 4815*663afb9bSAndroid Build Coastguard Worker 4816*663afb9bSAndroid Build Coastguard Worker#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4817*663afb9bSAndroid Build Coastguard Worker#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 4818*663afb9bSAndroid Build Coastguard Worker#endif 4819*663afb9bSAndroid Build Coastguard Worker 4820*663afb9bSAndroid Build Coastguard Worker/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 4821*663afb9bSAndroid Build Coastguard Worker#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 4822*663afb9bSAndroid Build Coastguard Worker/* DATA imports from DLLs on WIN32 can't be const, because runtime 4823*663afb9bSAndroid Build Coastguard Worker relocations are performed -- see ld's documentation on pseudo-relocs. */ 4824*663afb9bSAndroid Build Coastguard Worker# define LT_DLSYM_CONST 4825*663afb9bSAndroid Build Coastguard Worker#elif defined __osf__ 4826*663afb9bSAndroid Build Coastguard Worker/* This system does not cope well with relocations in const data. */ 4827*663afb9bSAndroid Build Coastguard Worker# define LT_DLSYM_CONST 4828*663afb9bSAndroid Build Coastguard Worker#else 4829*663afb9bSAndroid Build Coastguard Worker# define LT_DLSYM_CONST const 4830*663afb9bSAndroid Build Coastguard Worker#endif 4831*663afb9bSAndroid Build Coastguard Worker 4832*663afb9bSAndroid Build Coastguard Worker#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 4833*663afb9bSAndroid Build Coastguard Worker 4834*663afb9bSAndroid Build Coastguard Worker/* External symbol declarations for the compiler. */\ 4835*663afb9bSAndroid Build Coastguard Worker" 4836*663afb9bSAndroid Build Coastguard Worker 4837*663afb9bSAndroid Build Coastguard Worker if test yes = "$dlself"; then 4838*663afb9bSAndroid Build Coastguard Worker func_verbose "generating symbol list for '$output'" 4839*663afb9bSAndroid Build Coastguard Worker 4840*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4841*663afb9bSAndroid Build Coastguard Worker 4842*663afb9bSAndroid Build Coastguard Worker # Add our own program objects to the symbol list. 4843*663afb9bSAndroid Build Coastguard Worker progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4844*663afb9bSAndroid Build Coastguard Worker for progfile in $progfiles; do 4845*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$progfile" func_convert_file_msys_to_w32 4846*663afb9bSAndroid Build Coastguard Worker func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4847*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4848*663afb9bSAndroid Build Coastguard Worker done 4849*663afb9bSAndroid Build Coastguard Worker 4850*663afb9bSAndroid Build Coastguard Worker if test -n "$exclude_expsyms"; then 4851*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 4852*663afb9bSAndroid Build Coastguard Worker eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4853*663afb9bSAndroid Build Coastguard Worker eval '$MV "$nlist"T "$nlist"' 4854*663afb9bSAndroid Build Coastguard Worker } 4855*663afb9bSAndroid Build Coastguard Worker fi 4856*663afb9bSAndroid Build Coastguard Worker 4857*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols_regex"; then 4858*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 4859*663afb9bSAndroid Build Coastguard Worker eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4860*663afb9bSAndroid Build Coastguard Worker eval '$MV "$nlist"T "$nlist"' 4861*663afb9bSAndroid Build Coastguard Worker } 4862*663afb9bSAndroid Build Coastguard Worker fi 4863*663afb9bSAndroid Build Coastguard Worker 4864*663afb9bSAndroid Build Coastguard Worker # Prepare the list of exported symbols 4865*663afb9bSAndroid Build Coastguard Worker if test -z "$export_symbols"; then 4866*663afb9bSAndroid Build Coastguard Worker export_symbols=$output_objdir/$outputname.exp 4867*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 4868*663afb9bSAndroid Build Coastguard Worker $RM $export_symbols 4869*663afb9bSAndroid Build Coastguard Worker eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4870*663afb9bSAndroid Build Coastguard Worker case $host in 4871*663afb9bSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 4872*663afb9bSAndroid Build Coastguard Worker eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4873*663afb9bSAndroid Build Coastguard Worker eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4874*663afb9bSAndroid Build Coastguard Worker ;; 4875*663afb9bSAndroid Build Coastguard Worker esac 4876*663afb9bSAndroid Build Coastguard Worker } 4877*663afb9bSAndroid Build Coastguard Worker else 4878*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 4879*663afb9bSAndroid Build Coastguard Worker eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4880*663afb9bSAndroid Build Coastguard Worker eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4881*663afb9bSAndroid Build Coastguard Worker eval '$MV "$nlist"T "$nlist"' 4882*663afb9bSAndroid Build Coastguard Worker case $host in 4883*663afb9bSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 4884*663afb9bSAndroid Build Coastguard Worker eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4885*663afb9bSAndroid Build Coastguard Worker eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4886*663afb9bSAndroid Build Coastguard Worker ;; 4887*663afb9bSAndroid Build Coastguard Worker esac 4888*663afb9bSAndroid Build Coastguard Worker } 4889*663afb9bSAndroid Build Coastguard Worker fi 4890*663afb9bSAndroid Build Coastguard Worker fi 4891*663afb9bSAndroid Build Coastguard Worker 4892*663afb9bSAndroid Build Coastguard Worker for dlprefile in $dlprefiles; do 4893*663afb9bSAndroid Build Coastguard Worker func_verbose "extracting global C symbols from '$dlprefile'" 4894*663afb9bSAndroid Build Coastguard Worker func_basename "$dlprefile" 4895*663afb9bSAndroid Build Coastguard Worker name=$func_basename_result 4896*663afb9bSAndroid Build Coastguard Worker case $host in 4897*663afb9bSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 4898*663afb9bSAndroid Build Coastguard Worker # if an import library, we need to obtain dlname 4899*663afb9bSAndroid Build Coastguard Worker if func_win32_import_lib_p "$dlprefile"; then 4900*663afb9bSAndroid Build Coastguard Worker func_tr_sh "$dlprefile" 4901*663afb9bSAndroid Build Coastguard Worker eval "curr_lafile=\$libfile_$func_tr_sh_result" 4902*663afb9bSAndroid Build Coastguard Worker dlprefile_dlbasename= 4903*663afb9bSAndroid Build Coastguard Worker if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4904*663afb9bSAndroid Build Coastguard Worker # Use subshell, to avoid clobbering current variable values 4905*663afb9bSAndroid Build Coastguard Worker dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 4906*663afb9bSAndroid Build Coastguard Worker if test -n "$dlprefile_dlname"; then 4907*663afb9bSAndroid Build Coastguard Worker func_basename "$dlprefile_dlname" 4908*663afb9bSAndroid Build Coastguard Worker dlprefile_dlbasename=$func_basename_result 4909*663afb9bSAndroid Build Coastguard Worker else 4910*663afb9bSAndroid Build Coastguard Worker # no lafile. user explicitly requested -dlpreopen <import library>. 4911*663afb9bSAndroid Build Coastguard Worker $sharedlib_from_linklib_cmd "$dlprefile" 4912*663afb9bSAndroid Build Coastguard Worker dlprefile_dlbasename=$sharedlib_from_linklib_result 4913*663afb9bSAndroid Build Coastguard Worker fi 4914*663afb9bSAndroid Build Coastguard Worker fi 4915*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 4916*663afb9bSAndroid Build Coastguard Worker if test -n "$dlprefile_dlbasename"; then 4917*663afb9bSAndroid Build Coastguard Worker eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4918*663afb9bSAndroid Build Coastguard Worker else 4919*663afb9bSAndroid Build Coastguard Worker func_warning "Could not compute DLL name from $name" 4920*663afb9bSAndroid Build Coastguard Worker eval '$ECHO ": $name " >> "$nlist"' 4921*663afb9bSAndroid Build Coastguard Worker fi 4922*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4923*663afb9bSAndroid Build Coastguard Worker eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4924*663afb9bSAndroid Build Coastguard Worker $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4925*663afb9bSAndroid Build Coastguard Worker } 4926*663afb9bSAndroid Build Coastguard Worker else # not an import lib 4927*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 4928*663afb9bSAndroid Build Coastguard Worker eval '$ECHO ": $name " >> "$nlist"' 4929*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4930*663afb9bSAndroid Build Coastguard Worker eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4931*663afb9bSAndroid Build Coastguard Worker } 4932*663afb9bSAndroid Build Coastguard Worker fi 4933*663afb9bSAndroid Build Coastguard Worker ;; 4934*663afb9bSAndroid Build Coastguard Worker *) 4935*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 4936*663afb9bSAndroid Build Coastguard Worker eval '$ECHO ": $name " >> "$nlist"' 4937*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4938*663afb9bSAndroid Build Coastguard Worker eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4939*663afb9bSAndroid Build Coastguard Worker } 4940*663afb9bSAndroid Build Coastguard Worker ;; 4941*663afb9bSAndroid Build Coastguard Worker esac 4942*663afb9bSAndroid Build Coastguard Worker done 4943*663afb9bSAndroid Build Coastguard Worker 4944*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 4945*663afb9bSAndroid Build Coastguard Worker # Make sure we have at least an empty file. 4946*663afb9bSAndroid Build Coastguard Worker test -f "$nlist" || : > "$nlist" 4947*663afb9bSAndroid Build Coastguard Worker 4948*663afb9bSAndroid Build Coastguard Worker if test -n "$exclude_expsyms"; then 4949*663afb9bSAndroid Build Coastguard Worker $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4950*663afb9bSAndroid Build Coastguard Worker $MV "$nlist"T "$nlist" 4951*663afb9bSAndroid Build Coastguard Worker fi 4952*663afb9bSAndroid Build Coastguard Worker 4953*663afb9bSAndroid Build Coastguard Worker # Try sorting and uniquifying the output. 4954*663afb9bSAndroid Build Coastguard Worker if $GREP -v "^: " < "$nlist" | 4955*663afb9bSAndroid Build Coastguard Worker if sort -k 3 </dev/null >/dev/null 2>&1; then 4956*663afb9bSAndroid Build Coastguard Worker sort -k 3 4957*663afb9bSAndroid Build Coastguard Worker else 4958*663afb9bSAndroid Build Coastguard Worker sort +2 4959*663afb9bSAndroid Build Coastguard Worker fi | 4960*663afb9bSAndroid Build Coastguard Worker uniq > "$nlist"S; then 4961*663afb9bSAndroid Build Coastguard Worker : 4962*663afb9bSAndroid Build Coastguard Worker else 4963*663afb9bSAndroid Build Coastguard Worker $GREP -v "^: " < "$nlist" > "$nlist"S 4964*663afb9bSAndroid Build Coastguard Worker fi 4965*663afb9bSAndroid Build Coastguard Worker 4966*663afb9bSAndroid Build Coastguard Worker if test -f "$nlist"S; then 4967*663afb9bSAndroid Build Coastguard Worker eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 4968*663afb9bSAndroid Build Coastguard Worker else 4969*663afb9bSAndroid Build Coastguard Worker echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 4970*663afb9bSAndroid Build Coastguard Worker fi 4971*663afb9bSAndroid Build Coastguard Worker 4972*663afb9bSAndroid Build Coastguard Worker func_show_eval '$RM "${nlist}I"' 4973*663afb9bSAndroid Build Coastguard Worker if test -n "$global_symbol_to_import"; then 4974*663afb9bSAndroid Build Coastguard Worker eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 4975*663afb9bSAndroid Build Coastguard Worker fi 4976*663afb9bSAndroid Build Coastguard Worker 4977*663afb9bSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 4978*663afb9bSAndroid Build Coastguard Worker 4979*663afb9bSAndroid Build Coastguard Worker/* The mapping between symbol names and symbols. */ 4980*663afb9bSAndroid Build Coastguard Workertypedef struct { 4981*663afb9bSAndroid Build Coastguard Worker const char *name; 4982*663afb9bSAndroid Build Coastguard Worker void *address; 4983*663afb9bSAndroid Build Coastguard Worker} lt_dlsymlist; 4984*663afb9bSAndroid Build Coastguard Workerextern LT_DLSYM_CONST lt_dlsymlist 4985*663afb9bSAndroid Build Coastguard Workerlt_${my_prefix}_LTX_preloaded_symbols[];\ 4986*663afb9bSAndroid Build Coastguard Worker" 4987*663afb9bSAndroid Build Coastguard Worker 4988*663afb9bSAndroid Build Coastguard Worker if test -s "$nlist"I; then 4989*663afb9bSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 4990*663afb9bSAndroid Build Coastguard Workerstatic void lt_syminit(void) 4991*663afb9bSAndroid Build Coastguard Worker{ 4992*663afb9bSAndroid Build Coastguard Worker LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 4993*663afb9bSAndroid Build Coastguard Worker for (; symbol->name; ++symbol) 4994*663afb9bSAndroid Build Coastguard Worker {" 4995*663afb9bSAndroid Build Coastguard Worker $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 4996*663afb9bSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 4997*663afb9bSAndroid Build Coastguard Worker } 4998*663afb9bSAndroid Build Coastguard Worker}" 4999*663afb9bSAndroid Build Coastguard Worker fi 5000*663afb9bSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 5001*663afb9bSAndroid Build Coastguard WorkerLT_DLSYM_CONST lt_dlsymlist 5002*663afb9bSAndroid Build Coastguard Workerlt_${my_prefix}_LTX_preloaded_symbols[] = 5003*663afb9bSAndroid Build Coastguard Worker{ {\"$my_originator\", (void *) 0}," 5004*663afb9bSAndroid Build Coastguard Worker 5005*663afb9bSAndroid Build Coastguard Worker if test -s "$nlist"I; then 5006*663afb9bSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 5007*663afb9bSAndroid Build Coastguard Worker {\"@INIT@\", (void *) <_syminit}," 5008*663afb9bSAndroid Build Coastguard Worker fi 5009*663afb9bSAndroid Build Coastguard Worker 5010*663afb9bSAndroid Build Coastguard Worker case $need_lib_prefix in 5011*663afb9bSAndroid Build Coastguard Worker no) 5012*663afb9bSAndroid Build Coastguard Worker eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 5013*663afb9bSAndroid Build Coastguard Worker ;; 5014*663afb9bSAndroid Build Coastguard Worker *) 5015*663afb9bSAndroid Build Coastguard Worker eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 5016*663afb9bSAndroid Build Coastguard Worker ;; 5017*663afb9bSAndroid Build Coastguard Worker esac 5018*663afb9bSAndroid Build Coastguard Worker echo >> "$output_objdir/$my_dlsyms" "\ 5019*663afb9bSAndroid Build Coastguard Worker {0, (void *) 0} 5020*663afb9bSAndroid Build Coastguard Worker}; 5021*663afb9bSAndroid Build Coastguard Worker 5022*663afb9bSAndroid Build Coastguard Worker/* This works around a problem in FreeBSD linker */ 5023*663afb9bSAndroid Build Coastguard Worker#ifdef FREEBSD_WORKAROUND 5024*663afb9bSAndroid Build Coastguard Workerstatic const void *lt_preloaded_setup() { 5025*663afb9bSAndroid Build Coastguard Worker return lt_${my_prefix}_LTX_preloaded_symbols; 5026*663afb9bSAndroid Build Coastguard Worker} 5027*663afb9bSAndroid Build Coastguard Worker#endif 5028*663afb9bSAndroid Build Coastguard Worker 5029*663afb9bSAndroid Build Coastguard Worker#ifdef __cplusplus 5030*663afb9bSAndroid Build Coastguard Worker} 5031*663afb9bSAndroid Build Coastguard Worker#endif\ 5032*663afb9bSAndroid Build Coastguard Worker" 5033*663afb9bSAndroid Build Coastguard Worker } # !$opt_dry_run 5034*663afb9bSAndroid Build Coastguard Worker 5035*663afb9bSAndroid Build Coastguard Worker pic_flag_for_symtable= 5036*663afb9bSAndroid Build Coastguard Worker case "$compile_command " in 5037*663afb9bSAndroid Build Coastguard Worker *" -static "*) ;; 5038*663afb9bSAndroid Build Coastguard Worker *) 5039*663afb9bSAndroid Build Coastguard Worker case $host in 5040*663afb9bSAndroid Build Coastguard Worker # compiling the symbol table file with pic_flag works around 5041*663afb9bSAndroid Build Coastguard Worker # a FreeBSD bug that causes programs to crash when -lm is 5042*663afb9bSAndroid Build Coastguard Worker # linked before any other PIC object. But we must not use 5043*663afb9bSAndroid Build Coastguard Worker # pic_flag when linking with -static. The problem exists in 5044*663afb9bSAndroid Build Coastguard Worker # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 5045*663afb9bSAndroid Build Coastguard Worker *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 5046*663afb9bSAndroid Build Coastguard Worker pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 5047*663afb9bSAndroid Build Coastguard Worker *-*-hpux*) 5048*663afb9bSAndroid Build Coastguard Worker pic_flag_for_symtable=" $pic_flag" ;; 5049*663afb9bSAndroid Build Coastguard Worker *) 5050*663afb9bSAndroid Build Coastguard Worker $my_pic_p && pic_flag_for_symtable=" $pic_flag" 5051*663afb9bSAndroid Build Coastguard Worker ;; 5052*663afb9bSAndroid Build Coastguard Worker esac 5053*663afb9bSAndroid Build Coastguard Worker ;; 5054*663afb9bSAndroid Build Coastguard Worker esac 5055*663afb9bSAndroid Build Coastguard Worker symtab_cflags= 5056*663afb9bSAndroid Build Coastguard Worker for arg in $LTCFLAGS; do 5057*663afb9bSAndroid Build Coastguard Worker case $arg in 5058*663afb9bSAndroid Build Coastguard Worker -pie | -fpie | -fPIE) ;; 5059*663afb9bSAndroid Build Coastguard Worker *) func_append symtab_cflags " $arg" ;; 5060*663afb9bSAndroid Build Coastguard Worker esac 5061*663afb9bSAndroid Build Coastguard Worker done 5062*663afb9bSAndroid Build Coastguard Worker 5063*663afb9bSAndroid Build Coastguard Worker # Now compile the dynamic symbol file. 5064*663afb9bSAndroid Build Coastguard Worker func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 5065*663afb9bSAndroid Build Coastguard Worker 5066*663afb9bSAndroid Build Coastguard Worker # Clean up the generated files. 5067*663afb9bSAndroid Build Coastguard Worker func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 5068*663afb9bSAndroid Build Coastguard Worker 5069*663afb9bSAndroid Build Coastguard Worker # Transform the symbol file into the correct name. 5070*663afb9bSAndroid Build Coastguard Worker symfileobj=$output_objdir/${my_outputname}S.$objext 5071*663afb9bSAndroid Build Coastguard Worker case $host in 5072*663afb9bSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 5073*663afb9bSAndroid Build Coastguard Worker if test -f "$output_objdir/$my_outputname.def"; then 5074*663afb9bSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5075*663afb9bSAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5076*663afb9bSAndroid Build Coastguard Worker else 5077*663afb9bSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5078*663afb9bSAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5079*663afb9bSAndroid Build Coastguard Worker fi 5080*663afb9bSAndroid Build Coastguard Worker ;; 5081*663afb9bSAndroid Build Coastguard Worker *) 5082*663afb9bSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5083*663afb9bSAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5084*663afb9bSAndroid Build Coastguard Worker ;; 5085*663afb9bSAndroid Build Coastguard Worker esac 5086*663afb9bSAndroid Build Coastguard Worker ;; 5087*663afb9bSAndroid Build Coastguard Worker *) 5088*663afb9bSAndroid Build Coastguard Worker func_fatal_error "unknown suffix for '$my_dlsyms'" 5089*663afb9bSAndroid Build Coastguard Worker ;; 5090*663afb9bSAndroid Build Coastguard Worker esac 5091*663afb9bSAndroid Build Coastguard Worker else 5092*663afb9bSAndroid Build Coastguard Worker # We keep going just in case the user didn't refer to 5093*663afb9bSAndroid Build Coastguard Worker # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 5094*663afb9bSAndroid Build Coastguard Worker # really was required. 5095*663afb9bSAndroid Build Coastguard Worker 5096*663afb9bSAndroid Build Coastguard Worker # Nullify the symbol file. 5097*663afb9bSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 5098*663afb9bSAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 5099*663afb9bSAndroid Build Coastguard Worker fi 5100*663afb9bSAndroid Build Coastguard Worker} 5101*663afb9bSAndroid Build Coastguard Worker 5102*663afb9bSAndroid Build Coastguard Worker# func_cygming_gnu_implib_p ARG 5103*663afb9bSAndroid Build Coastguard Worker# This predicate returns with zero status (TRUE) if 5104*663afb9bSAndroid Build Coastguard Worker# ARG is a GNU/binutils-style import library. Returns 5105*663afb9bSAndroid Build Coastguard Worker# with nonzero status (FALSE) otherwise. 5106*663afb9bSAndroid Build Coastguard Workerfunc_cygming_gnu_implib_p () 5107*663afb9bSAndroid Build Coastguard Worker{ 5108*663afb9bSAndroid Build Coastguard Worker $debug_cmd 5109*663afb9bSAndroid Build Coastguard Worker 5110*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$1" func_convert_file_msys_to_w32 5111*663afb9bSAndroid 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)$'` 5112*663afb9bSAndroid Build Coastguard Worker test -n "$func_cygming_gnu_implib_tmp" 5113*663afb9bSAndroid Build Coastguard Worker} 5114*663afb9bSAndroid Build Coastguard Worker 5115*663afb9bSAndroid Build Coastguard Worker# func_cygming_ms_implib_p ARG 5116*663afb9bSAndroid Build Coastguard Worker# This predicate returns with zero status (TRUE) if 5117*663afb9bSAndroid Build Coastguard Worker# ARG is an MS-style import library. Returns 5118*663afb9bSAndroid Build Coastguard Worker# with nonzero status (FALSE) otherwise. 5119*663afb9bSAndroid Build Coastguard Workerfunc_cygming_ms_implib_p () 5120*663afb9bSAndroid Build Coastguard Worker{ 5121*663afb9bSAndroid Build Coastguard Worker $debug_cmd 5122*663afb9bSAndroid Build Coastguard Worker 5123*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$1" func_convert_file_msys_to_w32 5124*663afb9bSAndroid Build Coastguard Worker func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 5125*663afb9bSAndroid Build Coastguard Worker test -n "$func_cygming_ms_implib_tmp" 5126*663afb9bSAndroid Build Coastguard Worker} 5127*663afb9bSAndroid Build Coastguard Worker 5128*663afb9bSAndroid Build Coastguard Worker# func_win32_libid arg 5129*663afb9bSAndroid Build Coastguard Worker# return the library type of file 'arg' 5130*663afb9bSAndroid Build Coastguard Worker# 5131*663afb9bSAndroid Build Coastguard Worker# Need a lot of goo to handle *both* DLLs and import libs 5132*663afb9bSAndroid Build Coastguard Worker# Has to be a shell function in order to 'eat' the argument 5133*663afb9bSAndroid Build Coastguard Worker# that is supplied when $file_magic_command is called. 5134*663afb9bSAndroid Build Coastguard Worker# Despite the name, also deal with 64 bit binaries. 5135*663afb9bSAndroid Build Coastguard Workerfunc_win32_libid () 5136*663afb9bSAndroid Build Coastguard Worker{ 5137*663afb9bSAndroid Build Coastguard Worker $debug_cmd 5138*663afb9bSAndroid Build Coastguard Worker 5139*663afb9bSAndroid Build Coastguard Worker win32_libid_type=unknown 5140*663afb9bSAndroid Build Coastguard Worker win32_fileres=`file -L $1 2>/dev/null` 5141*663afb9bSAndroid Build Coastguard Worker case $win32_fileres in 5142*663afb9bSAndroid Build Coastguard Worker *ar\ archive\ import\ library*) # definitely import 5143*663afb9bSAndroid Build Coastguard Worker win32_libid_type="x86 archive import" 5144*663afb9bSAndroid Build Coastguard Worker ;; 5145*663afb9bSAndroid Build Coastguard Worker *ar\ archive*) # could be an import, or static 5146*663afb9bSAndroid Build Coastguard Worker # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 5147*663afb9bSAndroid Build Coastguard Worker if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 5148*663afb9bSAndroid Build Coastguard Worker $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 5149*663afb9bSAndroid Build Coastguard Worker case $nm_interface in 5150*663afb9bSAndroid Build Coastguard Worker "MS dumpbin") 5151*663afb9bSAndroid Build Coastguard Worker if func_cygming_ms_implib_p "$1" || 5152*663afb9bSAndroid Build Coastguard Worker func_cygming_gnu_implib_p "$1" 5153*663afb9bSAndroid Build Coastguard Worker then 5154*663afb9bSAndroid Build Coastguard Worker win32_nmres=import 5155*663afb9bSAndroid Build Coastguard Worker else 5156*663afb9bSAndroid Build Coastguard Worker win32_nmres= 5157*663afb9bSAndroid Build Coastguard Worker fi 5158*663afb9bSAndroid Build Coastguard Worker ;; 5159*663afb9bSAndroid Build Coastguard Worker *) 5160*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$1" func_convert_file_msys_to_w32 5161*663afb9bSAndroid Build Coastguard Worker win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 5162*663afb9bSAndroid Build Coastguard Worker $SED -n -e ' 5163*663afb9bSAndroid Build Coastguard Worker 1,100{ 5164*663afb9bSAndroid Build Coastguard Worker / I /{ 5165*663afb9bSAndroid Build Coastguard Worker s|.*|import| 5166*663afb9bSAndroid Build Coastguard Worker p 5167*663afb9bSAndroid Build Coastguard Worker q 5168*663afb9bSAndroid Build Coastguard Worker } 5169*663afb9bSAndroid Build Coastguard Worker }'` 5170*663afb9bSAndroid Build Coastguard Worker ;; 5171*663afb9bSAndroid Build Coastguard Worker esac 5172*663afb9bSAndroid Build Coastguard Worker case $win32_nmres in 5173*663afb9bSAndroid Build Coastguard Worker import*) win32_libid_type="x86 archive import";; 5174*663afb9bSAndroid Build Coastguard Worker *) win32_libid_type="x86 archive static";; 5175*663afb9bSAndroid Build Coastguard Worker esac 5176*663afb9bSAndroid Build Coastguard Worker fi 5177*663afb9bSAndroid Build Coastguard Worker ;; 5178*663afb9bSAndroid Build Coastguard Worker *DLL*) 5179*663afb9bSAndroid Build Coastguard Worker win32_libid_type="x86 DLL" 5180*663afb9bSAndroid Build Coastguard Worker ;; 5181*663afb9bSAndroid Build Coastguard Worker *executable*) # but shell scripts are "executable" too... 5182*663afb9bSAndroid Build Coastguard Worker case $win32_fileres in 5183*663afb9bSAndroid Build Coastguard Worker *MS\ Windows\ PE\ Intel*) 5184*663afb9bSAndroid Build Coastguard Worker win32_libid_type="x86 DLL" 5185*663afb9bSAndroid Build Coastguard Worker ;; 5186*663afb9bSAndroid Build Coastguard Worker esac 5187*663afb9bSAndroid Build Coastguard Worker ;; 5188*663afb9bSAndroid Build Coastguard Worker esac 5189*663afb9bSAndroid Build Coastguard Worker $ECHO "$win32_libid_type" 5190*663afb9bSAndroid Build Coastguard Worker} 5191*663afb9bSAndroid Build Coastguard Worker 5192*663afb9bSAndroid Build Coastguard Worker# func_cygming_dll_for_implib ARG 5193*663afb9bSAndroid Build Coastguard Worker# 5194*663afb9bSAndroid Build Coastguard Worker# Platform-specific function to extract the 5195*663afb9bSAndroid Build Coastguard Worker# name of the DLL associated with the specified 5196*663afb9bSAndroid Build Coastguard Worker# import library ARG. 5197*663afb9bSAndroid Build Coastguard Worker# Invoked by eval'ing the libtool variable 5198*663afb9bSAndroid Build Coastguard Worker# $sharedlib_from_linklib_cmd 5199*663afb9bSAndroid Build Coastguard Worker# Result is available in the variable 5200*663afb9bSAndroid Build Coastguard Worker# $sharedlib_from_linklib_result 5201*663afb9bSAndroid Build Coastguard Workerfunc_cygming_dll_for_implib () 5202*663afb9bSAndroid Build Coastguard Worker{ 5203*663afb9bSAndroid Build Coastguard Worker $debug_cmd 5204*663afb9bSAndroid Build Coastguard Worker 5205*663afb9bSAndroid Build Coastguard Worker sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 5206*663afb9bSAndroid Build Coastguard Worker} 5207*663afb9bSAndroid Build Coastguard Worker 5208*663afb9bSAndroid Build Coastguard Worker# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 5209*663afb9bSAndroid Build Coastguard Worker# 5210*663afb9bSAndroid Build Coastguard Worker# The is the core of a fallback implementation of a 5211*663afb9bSAndroid Build Coastguard Worker# platform-specific function to extract the name of the 5212*663afb9bSAndroid Build Coastguard Worker# DLL associated with the specified import library LIBNAME. 5213*663afb9bSAndroid Build Coastguard Worker# 5214*663afb9bSAndroid Build Coastguard Worker# SECTION_NAME is either .idata$6 or .idata$7, depending 5215*663afb9bSAndroid Build Coastguard Worker# on the platform and compiler that created the implib. 5216*663afb9bSAndroid Build Coastguard Worker# 5217*663afb9bSAndroid Build Coastguard Worker# Echos the name of the DLL associated with the 5218*663afb9bSAndroid Build Coastguard Worker# specified import library. 5219*663afb9bSAndroid Build Coastguard Workerfunc_cygming_dll_for_implib_fallback_core () 5220*663afb9bSAndroid Build Coastguard Worker{ 5221*663afb9bSAndroid Build Coastguard Worker $debug_cmd 5222*663afb9bSAndroid Build Coastguard Worker 5223*663afb9bSAndroid Build Coastguard Worker match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5224*663afb9bSAndroid Build Coastguard Worker $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5225*663afb9bSAndroid Build Coastguard Worker $SED '/^Contents of section '"$match_literal"':/{ 5226*663afb9bSAndroid Build Coastguard Worker # Place marker at beginning of archive member dllname section 5227*663afb9bSAndroid Build Coastguard Worker s/.*/====MARK====/ 5228*663afb9bSAndroid Build Coastguard Worker p 5229*663afb9bSAndroid Build Coastguard Worker d 5230*663afb9bSAndroid Build Coastguard Worker } 5231*663afb9bSAndroid Build Coastguard Worker # These lines can sometimes be longer than 43 characters, but 5232*663afb9bSAndroid Build Coastguard Worker # are always uninteresting 5233*663afb9bSAndroid Build Coastguard Worker /:[ ]*file format pe[i]\{,1\}-/d 5234*663afb9bSAndroid Build Coastguard Worker /^In archive [^:]*:/d 5235*663afb9bSAndroid Build Coastguard Worker # Ensure marker is printed 5236*663afb9bSAndroid Build Coastguard Worker /^====MARK====/p 5237*663afb9bSAndroid Build Coastguard Worker # Remove all lines with less than 43 characters 5238*663afb9bSAndroid Build Coastguard Worker /^.\{43\}/!d 5239*663afb9bSAndroid Build Coastguard Worker # From remaining lines, remove first 43 characters 5240*663afb9bSAndroid Build Coastguard Worker s/^.\{43\}//' | 5241*663afb9bSAndroid Build Coastguard Worker $SED -n ' 5242*663afb9bSAndroid Build Coastguard Worker # Join marker and all lines until next marker into a single line 5243*663afb9bSAndroid Build Coastguard Worker /^====MARK====/ b para 5244*663afb9bSAndroid Build Coastguard Worker H 5245*663afb9bSAndroid Build Coastguard Worker $ b para 5246*663afb9bSAndroid Build Coastguard Worker b 5247*663afb9bSAndroid Build Coastguard Worker :para 5248*663afb9bSAndroid Build Coastguard Worker x 5249*663afb9bSAndroid Build Coastguard Worker s/\n//g 5250*663afb9bSAndroid Build Coastguard Worker # Remove the marker 5251*663afb9bSAndroid Build Coastguard Worker s/^====MARK====// 5252*663afb9bSAndroid Build Coastguard Worker # Remove trailing dots and whitespace 5253*663afb9bSAndroid Build Coastguard Worker s/[\. \t]*$// 5254*663afb9bSAndroid Build Coastguard Worker # Print 5255*663afb9bSAndroid Build Coastguard Worker /./p' | 5256*663afb9bSAndroid Build Coastguard Worker # we now have a list, one entry per line, of the stringified 5257*663afb9bSAndroid Build Coastguard Worker # contents of the appropriate section of all members of the 5258*663afb9bSAndroid Build Coastguard Worker # archive that possess that section. Heuristic: eliminate 5259*663afb9bSAndroid Build Coastguard Worker # all those that have a first or second character that is 5260*663afb9bSAndroid Build Coastguard Worker # a '.' (that is, objdump's representation of an unprintable 5261*663afb9bSAndroid Build Coastguard Worker # character.) This should work for all archives with less than 5262*663afb9bSAndroid Build Coastguard Worker # 0x302f exports -- but will fail for DLLs whose name actually 5263*663afb9bSAndroid Build Coastguard Worker # begins with a literal '.' or a single character followed by 5264*663afb9bSAndroid Build Coastguard Worker # a '.'. 5265*663afb9bSAndroid Build Coastguard Worker # 5266*663afb9bSAndroid Build Coastguard Worker # Of those that remain, print the first one. 5267*663afb9bSAndroid Build Coastguard Worker $SED -e '/^\./d;/^.\./d;q' 5268*663afb9bSAndroid Build Coastguard Worker} 5269*663afb9bSAndroid Build Coastguard Worker 5270*663afb9bSAndroid Build Coastguard Worker# func_cygming_dll_for_implib_fallback ARG 5271*663afb9bSAndroid Build Coastguard Worker# Platform-specific function to extract the 5272*663afb9bSAndroid Build Coastguard Worker# name of the DLL associated with the specified 5273*663afb9bSAndroid Build Coastguard Worker# import library ARG. 5274*663afb9bSAndroid Build Coastguard Worker# 5275*663afb9bSAndroid Build Coastguard Worker# This fallback implementation is for use when $DLLTOOL 5276*663afb9bSAndroid Build Coastguard Worker# does not support the --identify-strict option. 5277*663afb9bSAndroid Build Coastguard Worker# Invoked by eval'ing the libtool variable 5278*663afb9bSAndroid Build Coastguard Worker# $sharedlib_from_linklib_cmd 5279*663afb9bSAndroid Build Coastguard Worker# Result is available in the variable 5280*663afb9bSAndroid Build Coastguard Worker# $sharedlib_from_linklib_result 5281*663afb9bSAndroid Build Coastguard Workerfunc_cygming_dll_for_implib_fallback () 5282*663afb9bSAndroid Build Coastguard Worker{ 5283*663afb9bSAndroid Build Coastguard Worker $debug_cmd 5284*663afb9bSAndroid Build Coastguard Worker 5285*663afb9bSAndroid Build Coastguard Worker if func_cygming_gnu_implib_p "$1"; then 5286*663afb9bSAndroid Build Coastguard Worker # binutils import library 5287*663afb9bSAndroid Build Coastguard Worker sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 5288*663afb9bSAndroid Build Coastguard Worker elif func_cygming_ms_implib_p "$1"; then 5289*663afb9bSAndroid Build Coastguard Worker # ms-generated import library 5290*663afb9bSAndroid Build Coastguard Worker sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5291*663afb9bSAndroid Build Coastguard Worker else 5292*663afb9bSAndroid Build Coastguard Worker # unknown 5293*663afb9bSAndroid Build Coastguard Worker sharedlib_from_linklib_result= 5294*663afb9bSAndroid Build Coastguard Worker fi 5295*663afb9bSAndroid Build Coastguard Worker} 5296*663afb9bSAndroid Build Coastguard Worker 5297*663afb9bSAndroid Build Coastguard Worker 5298*663afb9bSAndroid Build Coastguard Worker# func_extract_an_archive dir oldlib 5299*663afb9bSAndroid Build Coastguard Workerfunc_extract_an_archive () 5300*663afb9bSAndroid Build Coastguard Worker{ 5301*663afb9bSAndroid Build Coastguard Worker $debug_cmd 5302*663afb9bSAndroid Build Coastguard Worker 5303*663afb9bSAndroid Build Coastguard Worker f_ex_an_ar_dir=$1; shift 5304*663afb9bSAndroid Build Coastguard Worker f_ex_an_ar_oldlib=$1 5305*663afb9bSAndroid Build Coastguard Worker if test yes = "$lock_old_archive_extraction"; then 5306*663afb9bSAndroid Build Coastguard Worker lockfile=$f_ex_an_ar_oldlib.lock 5307*663afb9bSAndroid Build Coastguard Worker until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5308*663afb9bSAndroid Build Coastguard Worker func_echo "Waiting for $lockfile to be removed" 5309*663afb9bSAndroid Build Coastguard Worker sleep 2 5310*663afb9bSAndroid Build Coastguard Worker done 5311*663afb9bSAndroid Build Coastguard Worker fi 5312*663afb9bSAndroid Build Coastguard Worker func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5313*663afb9bSAndroid Build Coastguard Worker 'stat=$?; rm -f "$lockfile"; exit $stat' 5314*663afb9bSAndroid Build Coastguard Worker if test yes = "$lock_old_archive_extraction"; then 5315*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || rm -f "$lockfile" 5316*663afb9bSAndroid Build Coastguard Worker fi 5317*663afb9bSAndroid Build Coastguard Worker if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5318*663afb9bSAndroid Build Coastguard Worker : 5319*663afb9bSAndroid Build Coastguard Worker else 5320*663afb9bSAndroid Build Coastguard Worker func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5321*663afb9bSAndroid Build Coastguard Worker fi 5322*663afb9bSAndroid Build Coastguard Worker} 5323*663afb9bSAndroid Build Coastguard Worker 5324*663afb9bSAndroid Build Coastguard Worker 5325*663afb9bSAndroid Build Coastguard Worker# func_extract_archives gentop oldlib ... 5326*663afb9bSAndroid Build Coastguard Workerfunc_extract_archives () 5327*663afb9bSAndroid Build Coastguard Worker{ 5328*663afb9bSAndroid Build Coastguard Worker $debug_cmd 5329*663afb9bSAndroid Build Coastguard Worker 5330*663afb9bSAndroid Build Coastguard Worker my_gentop=$1; shift 5331*663afb9bSAndroid Build Coastguard Worker my_oldlibs=${1+"$@"} 5332*663afb9bSAndroid Build Coastguard Worker my_oldobjs= 5333*663afb9bSAndroid Build Coastguard Worker my_xlib= 5334*663afb9bSAndroid Build Coastguard Worker my_xabs= 5335*663afb9bSAndroid Build Coastguard Worker my_xdir= 5336*663afb9bSAndroid Build Coastguard Worker 5337*663afb9bSAndroid Build Coastguard Worker for my_xlib in $my_oldlibs; do 5338*663afb9bSAndroid Build Coastguard Worker # Extract the objects. 5339*663afb9bSAndroid Build Coastguard Worker case $my_xlib in 5340*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5341*663afb9bSAndroid Build Coastguard Worker *) my_xabs=`pwd`"/$my_xlib" ;; 5342*663afb9bSAndroid Build Coastguard Worker esac 5343*663afb9bSAndroid Build Coastguard Worker func_basename "$my_xlib" 5344*663afb9bSAndroid Build Coastguard Worker my_xlib=$func_basename_result 5345*663afb9bSAndroid Build Coastguard Worker my_xlib_u=$my_xlib 5346*663afb9bSAndroid Build Coastguard Worker while :; do 5347*663afb9bSAndroid Build Coastguard Worker case " $extracted_archives " in 5348*663afb9bSAndroid Build Coastguard Worker *" $my_xlib_u "*) 5349*663afb9bSAndroid Build Coastguard Worker func_arith $extracted_serial + 1 5350*663afb9bSAndroid Build Coastguard Worker extracted_serial=$func_arith_result 5351*663afb9bSAndroid Build Coastguard Worker my_xlib_u=lt$extracted_serial-$my_xlib ;; 5352*663afb9bSAndroid Build Coastguard Worker *) break ;; 5353*663afb9bSAndroid Build Coastguard Worker esac 5354*663afb9bSAndroid Build Coastguard Worker done 5355*663afb9bSAndroid Build Coastguard Worker extracted_archives="$extracted_archives $my_xlib_u" 5356*663afb9bSAndroid Build Coastguard Worker my_xdir=$my_gentop/$my_xlib_u 5357*663afb9bSAndroid Build Coastguard Worker 5358*663afb9bSAndroid Build Coastguard Worker func_mkdir_p "$my_xdir" 5359*663afb9bSAndroid Build Coastguard Worker 5360*663afb9bSAndroid Build Coastguard Worker case $host in 5361*663afb9bSAndroid Build Coastguard Worker *-darwin*) 5362*663afb9bSAndroid Build Coastguard Worker func_verbose "Extracting $my_xabs" 5363*663afb9bSAndroid Build Coastguard Worker # Do not bother doing anything if just a dry run 5364*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 5365*663afb9bSAndroid Build Coastguard Worker darwin_orig_dir=`pwd` 5366*663afb9bSAndroid Build Coastguard Worker cd $my_xdir || exit $? 5367*663afb9bSAndroid Build Coastguard Worker darwin_archive=$my_xabs 5368*663afb9bSAndroid Build Coastguard Worker darwin_curdir=`pwd` 5369*663afb9bSAndroid Build Coastguard Worker func_basename "$darwin_archive" 5370*663afb9bSAndroid Build Coastguard Worker darwin_base_archive=$func_basename_result 5371*663afb9bSAndroid Build Coastguard Worker darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5372*663afb9bSAndroid Build Coastguard Worker if test -n "$darwin_arches"; then 5373*663afb9bSAndroid Build Coastguard Worker darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5374*663afb9bSAndroid Build Coastguard Worker darwin_arch= 5375*663afb9bSAndroid Build Coastguard Worker func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 5376*663afb9bSAndroid Build Coastguard Worker for darwin_arch in $darwin_arches; do 5377*663afb9bSAndroid Build Coastguard Worker func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 5378*663afb9bSAndroid Build Coastguard Worker $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 5379*663afb9bSAndroid Build Coastguard Worker cd "unfat-$$/$darwin_base_archive-$darwin_arch" 5380*663afb9bSAndroid Build Coastguard Worker func_extract_an_archive "`pwd`" "$darwin_base_archive" 5381*663afb9bSAndroid Build Coastguard Worker cd "$darwin_curdir" 5382*663afb9bSAndroid Build Coastguard Worker $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5383*663afb9bSAndroid Build Coastguard Worker done # $darwin_arches 5384*663afb9bSAndroid Build Coastguard Worker ## Okay now we've a bunch of thin objects, gotta fatten them up :) 5385*663afb9bSAndroid Build Coastguard Worker darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5386*663afb9bSAndroid Build Coastguard Worker darwin_file= 5387*663afb9bSAndroid Build Coastguard Worker darwin_files= 5388*663afb9bSAndroid Build Coastguard Worker for darwin_file in $darwin_filelist; do 5389*663afb9bSAndroid Build Coastguard Worker darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5390*663afb9bSAndroid Build Coastguard Worker $LIPO -create -output "$darwin_file" $darwin_files 5391*663afb9bSAndroid Build Coastguard Worker done # $darwin_filelist 5392*663afb9bSAndroid Build Coastguard Worker $RM -rf unfat-$$ 5393*663afb9bSAndroid Build Coastguard Worker cd "$darwin_orig_dir" 5394*663afb9bSAndroid Build Coastguard Worker else 5395*663afb9bSAndroid Build Coastguard Worker cd $darwin_orig_dir 5396*663afb9bSAndroid Build Coastguard Worker func_extract_an_archive "$my_xdir" "$my_xabs" 5397*663afb9bSAndroid Build Coastguard Worker fi # $darwin_arches 5398*663afb9bSAndroid Build Coastguard Worker } # !$opt_dry_run 5399*663afb9bSAndroid Build Coastguard Worker ;; 5400*663afb9bSAndroid Build Coastguard Worker *) 5401*663afb9bSAndroid Build Coastguard Worker func_extract_an_archive "$my_xdir" "$my_xabs" 5402*663afb9bSAndroid Build Coastguard Worker ;; 5403*663afb9bSAndroid Build Coastguard Worker esac 5404*663afb9bSAndroid Build Coastguard Worker my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5405*663afb9bSAndroid Build Coastguard Worker done 5406*663afb9bSAndroid Build Coastguard Worker 5407*663afb9bSAndroid Build Coastguard Worker func_extract_archives_result=$my_oldobjs 5408*663afb9bSAndroid Build Coastguard Worker} 5409*663afb9bSAndroid Build Coastguard Worker 5410*663afb9bSAndroid Build Coastguard Worker 5411*663afb9bSAndroid Build Coastguard Worker# func_emit_wrapper [arg=no] 5412*663afb9bSAndroid Build Coastguard Worker# 5413*663afb9bSAndroid Build Coastguard Worker# Emit a libtool wrapper script on stdout. 5414*663afb9bSAndroid Build Coastguard Worker# Don't directly open a file because we may want to 5415*663afb9bSAndroid Build Coastguard Worker# incorporate the script contents within a cygwin/mingw 5416*663afb9bSAndroid Build Coastguard Worker# wrapper executable. Must ONLY be called from within 5417*663afb9bSAndroid Build Coastguard Worker# func_mode_link because it depends on a number of variables 5418*663afb9bSAndroid Build Coastguard Worker# set therein. 5419*663afb9bSAndroid Build Coastguard Worker# 5420*663afb9bSAndroid Build Coastguard Worker# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5421*663afb9bSAndroid Build Coastguard Worker# variable will take. If 'yes', then the emitted script 5422*663afb9bSAndroid Build Coastguard Worker# will assume that the directory where it is stored is 5423*663afb9bSAndroid Build Coastguard Worker# the $objdir directory. This is a cygwin/mingw-specific 5424*663afb9bSAndroid Build Coastguard Worker# behavior. 5425*663afb9bSAndroid Build Coastguard Workerfunc_emit_wrapper () 5426*663afb9bSAndroid Build Coastguard Worker{ 5427*663afb9bSAndroid Build Coastguard Worker func_emit_wrapper_arg1=${1-no} 5428*663afb9bSAndroid Build Coastguard Worker 5429*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5430*663afb9bSAndroid Build Coastguard Worker#! $SHELL 5431*663afb9bSAndroid Build Coastguard Worker 5432*663afb9bSAndroid Build Coastguard Worker# $output - temporary wrapper script for $objdir/$outputname 5433*663afb9bSAndroid Build Coastguard Worker# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5434*663afb9bSAndroid Build Coastguard Worker# 5435*663afb9bSAndroid Build Coastguard Worker# The $output program cannot be directly executed until all the libtool 5436*663afb9bSAndroid Build Coastguard Worker# libraries that it depends on are installed. 5437*663afb9bSAndroid Build Coastguard Worker# 5438*663afb9bSAndroid Build Coastguard Worker# This wrapper script should never be moved out of the build directory. 5439*663afb9bSAndroid Build Coastguard Worker# If it is, it will not operate correctly. 5440*663afb9bSAndroid Build Coastguard Worker 5441*663afb9bSAndroid Build Coastguard Worker# Sed substitution that helps us do robust quoting. It backslashifies 5442*663afb9bSAndroid Build Coastguard Worker# metacharacters that are still active within double-quoted strings. 5443*663afb9bSAndroid Build Coastguard Workersed_quote_subst='$sed_quote_subst' 5444*663afb9bSAndroid Build Coastguard Worker 5445*663afb9bSAndroid Build Coastguard Worker# Be Bourne compatible 5446*663afb9bSAndroid Build Coastguard Workerif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5447*663afb9bSAndroid Build Coastguard Worker emulate sh 5448*663afb9bSAndroid Build Coastguard Worker NULLCMD=: 5449*663afb9bSAndroid Build Coastguard Worker # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5450*663afb9bSAndroid Build Coastguard Worker # is contrary to our usage. Disable this feature. 5451*663afb9bSAndroid Build Coastguard Worker alias -g '\${1+\"\$@\"}'='\"\$@\"' 5452*663afb9bSAndroid Build Coastguard Worker setopt NO_GLOB_SUBST 5453*663afb9bSAndroid Build Coastguard Workerelse 5454*663afb9bSAndroid Build Coastguard Worker case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5455*663afb9bSAndroid Build Coastguard Workerfi 5456*663afb9bSAndroid Build Coastguard WorkerBIN_SH=xpg4; export BIN_SH # for Tru64 5457*663afb9bSAndroid Build Coastguard WorkerDUALCASE=1; export DUALCASE # for MKS sh 5458*663afb9bSAndroid Build Coastguard Worker 5459*663afb9bSAndroid Build Coastguard Worker# The HP-UX ksh and POSIX shell print the target directory to stdout 5460*663afb9bSAndroid Build Coastguard Worker# if CDPATH is set. 5461*663afb9bSAndroid Build Coastguard Worker(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5462*663afb9bSAndroid Build Coastguard Worker 5463*663afb9bSAndroid Build Coastguard Workerrelink_command=\"$relink_command\" 5464*663afb9bSAndroid Build Coastguard Worker 5465*663afb9bSAndroid Build Coastguard Worker# This environment variable determines our operation mode. 5466*663afb9bSAndroid Build Coastguard Workerif test \"\$libtool_install_magic\" = \"$magic\"; then 5467*663afb9bSAndroid Build Coastguard Worker # install mode needs the following variables: 5468*663afb9bSAndroid Build Coastguard Worker generated_by_libtool_version='$macro_version' 5469*663afb9bSAndroid Build Coastguard Worker notinst_deplibs='$notinst_deplibs' 5470*663afb9bSAndroid Build Coastguard Workerelse 5471*663afb9bSAndroid Build Coastguard Worker # When we are sourced in execute mode, \$file and \$ECHO are already set. 5472*663afb9bSAndroid Build Coastguard Worker if test \"\$libtool_execute_magic\" != \"$magic\"; then 5473*663afb9bSAndroid Build Coastguard Worker file=\"\$0\"" 5474*663afb9bSAndroid Build Coastguard Worker 5475*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$ECHO" 5476*663afb9bSAndroid Build Coastguard Worker qECHO=$func_quote_arg_result 5477*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5478*663afb9bSAndroid Build Coastguard Worker 5479*663afb9bSAndroid Build Coastguard Worker# A function that is used when there is no print builtin or printf. 5480*663afb9bSAndroid Build Coastguard Workerfunc_fallback_echo () 5481*663afb9bSAndroid Build Coastguard Worker{ 5482*663afb9bSAndroid Build Coastguard Worker eval 'cat <<_LTECHO_EOF 5483*663afb9bSAndroid Build Coastguard Worker\$1 5484*663afb9bSAndroid Build Coastguard Worker_LTECHO_EOF' 5485*663afb9bSAndroid Build Coastguard Worker} 5486*663afb9bSAndroid Build Coastguard Worker ECHO=$qECHO 5487*663afb9bSAndroid Build Coastguard Worker fi 5488*663afb9bSAndroid Build Coastguard Worker 5489*663afb9bSAndroid Build Coastguard Worker# Very basic option parsing. These options are (a) specific to 5490*663afb9bSAndroid Build Coastguard Worker# the libtool wrapper, (b) are identical between the wrapper 5491*663afb9bSAndroid Build Coastguard Worker# /script/ and the wrapper /executable/ that is used only on 5492*663afb9bSAndroid Build Coastguard Worker# windows platforms, and (c) all begin with the string "--lt-" 5493*663afb9bSAndroid Build Coastguard Worker# (application programs are unlikely to have options that match 5494*663afb9bSAndroid Build Coastguard Worker# this pattern). 5495*663afb9bSAndroid Build Coastguard Worker# 5496*663afb9bSAndroid Build Coastguard Worker# There are only two supported options: --lt-debug and 5497*663afb9bSAndroid Build Coastguard Worker# --lt-dump-script. There is, deliberately, no --lt-help. 5498*663afb9bSAndroid Build Coastguard Worker# 5499*663afb9bSAndroid Build Coastguard Worker# The first argument to this parsing function should be the 5500*663afb9bSAndroid Build Coastguard Worker# script's $0 value, followed by "$@". 5501*663afb9bSAndroid Build Coastguard Workerlt_option_debug= 5502*663afb9bSAndroid Build Coastguard Workerfunc_parse_lt_options () 5503*663afb9bSAndroid Build Coastguard Worker{ 5504*663afb9bSAndroid Build Coastguard Worker lt_script_arg0=\$0 5505*663afb9bSAndroid Build Coastguard Worker shift 5506*663afb9bSAndroid Build Coastguard Worker for lt_opt 5507*663afb9bSAndroid Build Coastguard Worker do 5508*663afb9bSAndroid Build Coastguard Worker case \"\$lt_opt\" in 5509*663afb9bSAndroid Build Coastguard Worker --lt-debug) lt_option_debug=1 ;; 5510*663afb9bSAndroid Build Coastguard Worker --lt-dump-script) 5511*663afb9bSAndroid Build Coastguard Worker lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5512*663afb9bSAndroid Build Coastguard Worker test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5513*663afb9bSAndroid Build Coastguard Worker lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5514*663afb9bSAndroid Build Coastguard Worker cat \"\$lt_dump_D/\$lt_dump_F\" 5515*663afb9bSAndroid Build Coastguard Worker exit 0 5516*663afb9bSAndroid Build Coastguard Worker ;; 5517*663afb9bSAndroid Build Coastguard Worker --lt-*) 5518*663afb9bSAndroid Build Coastguard Worker \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5519*663afb9bSAndroid Build Coastguard Worker exit 1 5520*663afb9bSAndroid Build Coastguard Worker ;; 5521*663afb9bSAndroid Build Coastguard Worker esac 5522*663afb9bSAndroid Build Coastguard Worker done 5523*663afb9bSAndroid Build Coastguard Worker 5524*663afb9bSAndroid Build Coastguard Worker # Print the debug banner immediately: 5525*663afb9bSAndroid Build Coastguard Worker if test -n \"\$lt_option_debug\"; then 5526*663afb9bSAndroid Build Coastguard Worker echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5527*663afb9bSAndroid Build Coastguard Worker fi 5528*663afb9bSAndroid Build Coastguard Worker} 5529*663afb9bSAndroid Build Coastguard Worker 5530*663afb9bSAndroid Build Coastguard Worker# Used when --lt-debug. Prints its arguments to stdout 5531*663afb9bSAndroid Build Coastguard Worker# (redirection is the responsibility of the caller) 5532*663afb9bSAndroid Build Coastguard Workerfunc_lt_dump_args () 5533*663afb9bSAndroid Build Coastguard Worker{ 5534*663afb9bSAndroid Build Coastguard Worker lt_dump_args_N=1; 5535*663afb9bSAndroid Build Coastguard Worker for lt_arg 5536*663afb9bSAndroid Build Coastguard Worker do 5537*663afb9bSAndroid Build Coastguard Worker \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5538*663afb9bSAndroid Build Coastguard Worker lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5539*663afb9bSAndroid Build Coastguard Worker done 5540*663afb9bSAndroid Build Coastguard Worker} 5541*663afb9bSAndroid Build Coastguard Worker 5542*663afb9bSAndroid Build Coastguard Worker# Core function for launching the target application 5543*663afb9bSAndroid Build Coastguard Workerfunc_exec_program_core () 5544*663afb9bSAndroid Build Coastguard Worker{ 5545*663afb9bSAndroid Build Coastguard Worker" 5546*663afb9bSAndroid Build Coastguard Worker case $host in 5547*663afb9bSAndroid Build Coastguard Worker # Backslashes separate directories on plain windows 5548*663afb9bSAndroid Build Coastguard Worker *-*-mingw | *-*-os2* | *-cegcc*) 5549*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5550*663afb9bSAndroid Build Coastguard Worker if test -n \"\$lt_option_debug\"; then 5551*663afb9bSAndroid Build Coastguard Worker \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5552*663afb9bSAndroid Build Coastguard Worker func_lt_dump_args \${1+\"\$@\"} 1>&2 5553*663afb9bSAndroid Build Coastguard Worker fi 5554*663afb9bSAndroid Build Coastguard Worker exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5555*663afb9bSAndroid Build Coastguard Worker" 5556*663afb9bSAndroid Build Coastguard Worker ;; 5557*663afb9bSAndroid Build Coastguard Worker 5558*663afb9bSAndroid Build Coastguard Worker *) 5559*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5560*663afb9bSAndroid Build Coastguard Worker if test -n \"\$lt_option_debug\"; then 5561*663afb9bSAndroid Build Coastguard Worker \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5562*663afb9bSAndroid Build Coastguard Worker func_lt_dump_args \${1+\"\$@\"} 1>&2 5563*663afb9bSAndroid Build Coastguard Worker fi 5564*663afb9bSAndroid Build Coastguard Worker exec \"\$progdir/\$program\" \${1+\"\$@\"} 5565*663afb9bSAndroid Build Coastguard Worker" 5566*663afb9bSAndroid Build Coastguard Worker ;; 5567*663afb9bSAndroid Build Coastguard Worker esac 5568*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5569*663afb9bSAndroid Build Coastguard Worker \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5570*663afb9bSAndroid Build Coastguard Worker exit 1 5571*663afb9bSAndroid Build Coastguard Worker} 5572*663afb9bSAndroid Build Coastguard Worker 5573*663afb9bSAndroid Build Coastguard Worker# A function to encapsulate launching the target application 5574*663afb9bSAndroid Build Coastguard Worker# Strips options in the --lt-* namespace from \$@ and 5575*663afb9bSAndroid Build Coastguard Worker# launches target application with the remaining arguments. 5576*663afb9bSAndroid Build Coastguard Workerfunc_exec_program () 5577*663afb9bSAndroid Build Coastguard Worker{ 5578*663afb9bSAndroid Build Coastguard Worker case \" \$* \" in 5579*663afb9bSAndroid Build Coastguard Worker *\\ --lt-*) 5580*663afb9bSAndroid Build Coastguard Worker for lt_wr_arg 5581*663afb9bSAndroid Build Coastguard Worker do 5582*663afb9bSAndroid Build Coastguard Worker case \$lt_wr_arg in 5583*663afb9bSAndroid Build Coastguard Worker --lt-*) ;; 5584*663afb9bSAndroid Build Coastguard Worker *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5585*663afb9bSAndroid Build Coastguard Worker esac 5586*663afb9bSAndroid Build Coastguard Worker shift 5587*663afb9bSAndroid Build Coastguard Worker done ;; 5588*663afb9bSAndroid Build Coastguard Worker esac 5589*663afb9bSAndroid Build Coastguard Worker func_exec_program_core \${1+\"\$@\"} 5590*663afb9bSAndroid Build Coastguard Worker} 5591*663afb9bSAndroid Build Coastguard Worker 5592*663afb9bSAndroid Build Coastguard Worker # Parse options 5593*663afb9bSAndroid Build Coastguard Worker func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5594*663afb9bSAndroid Build Coastguard Worker 5595*663afb9bSAndroid Build Coastguard Worker # Find the directory that this script lives in. 5596*663afb9bSAndroid Build Coastguard Worker thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5597*663afb9bSAndroid Build Coastguard Worker test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5598*663afb9bSAndroid Build Coastguard Worker 5599*663afb9bSAndroid Build Coastguard Worker # Follow symbolic links until we get to the real thisdir. 5600*663afb9bSAndroid Build Coastguard Worker file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5601*663afb9bSAndroid Build Coastguard Worker while test -n \"\$file\"; do 5602*663afb9bSAndroid Build Coastguard Worker destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5603*663afb9bSAndroid Build Coastguard Worker 5604*663afb9bSAndroid Build Coastguard Worker # If there was a directory component, then change thisdir. 5605*663afb9bSAndroid Build Coastguard Worker if test \"x\$destdir\" != \"x\$file\"; then 5606*663afb9bSAndroid Build Coastguard Worker case \"\$destdir\" in 5607*663afb9bSAndroid Build Coastguard Worker [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5608*663afb9bSAndroid Build Coastguard Worker *) thisdir=\"\$thisdir/\$destdir\" ;; 5609*663afb9bSAndroid Build Coastguard Worker esac 5610*663afb9bSAndroid Build Coastguard Worker fi 5611*663afb9bSAndroid Build Coastguard Worker 5612*663afb9bSAndroid Build Coastguard Worker file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5613*663afb9bSAndroid Build Coastguard Worker file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5614*663afb9bSAndroid Build Coastguard Worker done 5615*663afb9bSAndroid Build Coastguard Worker 5616*663afb9bSAndroid Build Coastguard Worker # Usually 'no', except on cygwin/mingw when embedded into 5617*663afb9bSAndroid Build Coastguard Worker # the cwrapper. 5618*663afb9bSAndroid Build Coastguard Worker WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5619*663afb9bSAndroid Build Coastguard Worker if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5620*663afb9bSAndroid Build Coastguard Worker # special case for '.' 5621*663afb9bSAndroid Build Coastguard Worker if test \"\$thisdir\" = \".\"; then 5622*663afb9bSAndroid Build Coastguard Worker thisdir=\`pwd\` 5623*663afb9bSAndroid Build Coastguard Worker fi 5624*663afb9bSAndroid Build Coastguard Worker # remove .libs from thisdir 5625*663afb9bSAndroid Build Coastguard Worker case \"\$thisdir\" in 5626*663afb9bSAndroid Build Coastguard Worker *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5627*663afb9bSAndroid Build Coastguard Worker $objdir ) thisdir=. ;; 5628*663afb9bSAndroid Build Coastguard Worker esac 5629*663afb9bSAndroid Build Coastguard Worker fi 5630*663afb9bSAndroid Build Coastguard Worker 5631*663afb9bSAndroid Build Coastguard Worker # Try to get the absolute directory name. 5632*663afb9bSAndroid Build Coastguard Worker absdir=\`cd \"\$thisdir\" && pwd\` 5633*663afb9bSAndroid Build Coastguard Worker test -n \"\$absdir\" && thisdir=\"\$absdir\" 5634*663afb9bSAndroid Build Coastguard Worker" 5635*663afb9bSAndroid Build Coastguard Worker 5636*663afb9bSAndroid Build Coastguard Worker if test yes = "$fast_install"; then 5637*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5638*663afb9bSAndroid Build Coastguard Worker program=lt-'$outputname'$exeext 5639*663afb9bSAndroid Build Coastguard Worker progdir=\"\$thisdir/$objdir\" 5640*663afb9bSAndroid Build Coastguard Worker 5641*663afb9bSAndroid Build Coastguard Worker if test ! -f \"\$progdir/\$program\" || 5642*663afb9bSAndroid Build Coastguard Worker { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5643*663afb9bSAndroid Build Coastguard Worker test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5644*663afb9bSAndroid Build Coastguard Worker 5645*663afb9bSAndroid Build Coastguard Worker file=\"\$\$-\$program\" 5646*663afb9bSAndroid Build Coastguard Worker 5647*663afb9bSAndroid Build Coastguard Worker if test ! -d \"\$progdir\"; then 5648*663afb9bSAndroid Build Coastguard Worker $MKDIR \"\$progdir\" 5649*663afb9bSAndroid Build Coastguard Worker else 5650*663afb9bSAndroid Build Coastguard Worker $RM \"\$progdir/\$file\" 5651*663afb9bSAndroid Build Coastguard Worker fi" 5652*663afb9bSAndroid Build Coastguard Worker 5653*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5654*663afb9bSAndroid Build Coastguard Worker 5655*663afb9bSAndroid Build Coastguard Worker # relink executable if necessary 5656*663afb9bSAndroid Build Coastguard Worker if test -n \"\$relink_command\"; then 5657*663afb9bSAndroid Build Coastguard Worker if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5658*663afb9bSAndroid Build Coastguard Worker else 5659*663afb9bSAndroid Build Coastguard Worker \$ECHO \"\$relink_command_output\" >&2 5660*663afb9bSAndroid Build Coastguard Worker $RM \"\$progdir/\$file\" 5661*663afb9bSAndroid Build Coastguard Worker exit 1 5662*663afb9bSAndroid Build Coastguard Worker fi 5663*663afb9bSAndroid Build Coastguard Worker fi 5664*663afb9bSAndroid Build Coastguard Worker 5665*663afb9bSAndroid Build Coastguard Worker $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5666*663afb9bSAndroid Build Coastguard Worker { $RM \"\$progdir/\$program\"; 5667*663afb9bSAndroid Build Coastguard Worker $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5668*663afb9bSAndroid Build Coastguard Worker $RM \"\$progdir/\$file\" 5669*663afb9bSAndroid Build Coastguard Worker fi" 5670*663afb9bSAndroid Build Coastguard Worker else 5671*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5672*663afb9bSAndroid Build Coastguard Worker program='$outputname' 5673*663afb9bSAndroid Build Coastguard Worker progdir=\"\$thisdir/$objdir\" 5674*663afb9bSAndroid Build Coastguard Worker" 5675*663afb9bSAndroid Build Coastguard Worker fi 5676*663afb9bSAndroid Build Coastguard Worker 5677*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5678*663afb9bSAndroid Build Coastguard Worker 5679*663afb9bSAndroid Build Coastguard Worker if test -f \"\$progdir/\$program\"; then" 5680*663afb9bSAndroid Build Coastguard Worker 5681*663afb9bSAndroid Build Coastguard Worker # fixup the dll searchpath if we need to. 5682*663afb9bSAndroid Build Coastguard Worker # 5683*663afb9bSAndroid Build Coastguard Worker # Fix the DLL searchpath if we need to. Do this before prepending 5684*663afb9bSAndroid Build Coastguard Worker # to shlibpath, because on Windows, both are PATH and uninstalled 5685*663afb9bSAndroid Build Coastguard Worker # libraries must come first. 5686*663afb9bSAndroid Build Coastguard Worker if test -n "$dllsearchpath"; then 5687*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5688*663afb9bSAndroid Build Coastguard Worker # Add the dll search path components to the executable PATH 5689*663afb9bSAndroid Build Coastguard Worker PATH=$dllsearchpath:\$PATH 5690*663afb9bSAndroid Build Coastguard Worker" 5691*663afb9bSAndroid Build Coastguard Worker fi 5692*663afb9bSAndroid Build Coastguard Worker 5693*663afb9bSAndroid Build Coastguard Worker # Export our shlibpath_var if we have one. 5694*663afb9bSAndroid Build Coastguard Worker if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5695*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5696*663afb9bSAndroid Build Coastguard Worker # Add our own library path to $shlibpath_var 5697*663afb9bSAndroid Build Coastguard Worker $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5698*663afb9bSAndroid Build Coastguard Worker 5699*663afb9bSAndroid Build Coastguard Worker # Some systems cannot cope with colon-terminated $shlibpath_var 5700*663afb9bSAndroid Build Coastguard Worker # The second colon is a workaround for a bug in BeOS R4 sed 5701*663afb9bSAndroid Build Coastguard Worker $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5702*663afb9bSAndroid Build Coastguard Worker 5703*663afb9bSAndroid Build Coastguard Worker export $shlibpath_var 5704*663afb9bSAndroid Build Coastguard Worker" 5705*663afb9bSAndroid Build Coastguard Worker fi 5706*663afb9bSAndroid Build Coastguard Worker 5707*663afb9bSAndroid Build Coastguard Worker $ECHO "\ 5708*663afb9bSAndroid Build Coastguard Worker if test \"\$libtool_execute_magic\" != \"$magic\"; then 5709*663afb9bSAndroid Build Coastguard Worker # Run the actual program with our arguments. 5710*663afb9bSAndroid Build Coastguard Worker func_exec_program \${1+\"\$@\"} 5711*663afb9bSAndroid Build Coastguard Worker fi 5712*663afb9bSAndroid Build Coastguard Worker else 5713*663afb9bSAndroid Build Coastguard Worker # The program doesn't exist. 5714*663afb9bSAndroid Build Coastguard Worker \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5715*663afb9bSAndroid Build Coastguard Worker \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5716*663afb9bSAndroid Build Coastguard Worker \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5717*663afb9bSAndroid Build Coastguard Worker exit 1 5718*663afb9bSAndroid Build Coastguard Worker fi 5719*663afb9bSAndroid Build Coastguard Workerfi\ 5720*663afb9bSAndroid Build Coastguard Worker" 5721*663afb9bSAndroid Build Coastguard Worker} 5722*663afb9bSAndroid Build Coastguard Worker 5723*663afb9bSAndroid Build Coastguard Worker 5724*663afb9bSAndroid Build Coastguard Worker# func_emit_cwrapperexe_src 5725*663afb9bSAndroid Build Coastguard Worker# emit the source code for a wrapper executable on stdout 5726*663afb9bSAndroid Build Coastguard Worker# Must ONLY be called from within func_mode_link because 5727*663afb9bSAndroid Build Coastguard Worker# it depends on a number of variable set therein. 5728*663afb9bSAndroid Build Coastguard Workerfunc_emit_cwrapperexe_src () 5729*663afb9bSAndroid Build Coastguard Worker{ 5730*663afb9bSAndroid Build Coastguard Worker cat <<EOF 5731*663afb9bSAndroid Build Coastguard Worker 5732*663afb9bSAndroid Build Coastguard Worker/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 5733*663afb9bSAndroid Build Coastguard Worker Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5734*663afb9bSAndroid Build Coastguard Worker 5735*663afb9bSAndroid Build Coastguard Worker The $output program cannot be directly executed until all the libtool 5736*663afb9bSAndroid Build Coastguard Worker libraries that it depends on are installed. 5737*663afb9bSAndroid Build Coastguard Worker 5738*663afb9bSAndroid Build Coastguard Worker This wrapper executable should never be moved out of the build directory. 5739*663afb9bSAndroid Build Coastguard Worker If it is, it will not operate correctly. 5740*663afb9bSAndroid Build Coastguard Worker*/ 5741*663afb9bSAndroid Build Coastguard WorkerEOF 5742*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 5743*663afb9bSAndroid Build Coastguard Worker#ifdef _MSC_VER 5744*663afb9bSAndroid Build Coastguard Worker# define _CRT_SECURE_NO_DEPRECATE 1 5745*663afb9bSAndroid Build Coastguard Worker#endif 5746*663afb9bSAndroid Build Coastguard Worker#include <stdio.h> 5747*663afb9bSAndroid Build Coastguard Worker#include <stdlib.h> 5748*663afb9bSAndroid Build Coastguard Worker#ifdef _MSC_VER 5749*663afb9bSAndroid Build Coastguard Worker# include <direct.h> 5750*663afb9bSAndroid Build Coastguard Worker# include <process.h> 5751*663afb9bSAndroid Build Coastguard Worker# include <io.h> 5752*663afb9bSAndroid Build Coastguard Worker#else 5753*663afb9bSAndroid Build Coastguard Worker# include <unistd.h> 5754*663afb9bSAndroid Build Coastguard Worker# include <stdint.h> 5755*663afb9bSAndroid Build Coastguard Worker# ifdef __CYGWIN__ 5756*663afb9bSAndroid Build Coastguard Worker# include <io.h> 5757*663afb9bSAndroid Build Coastguard Worker# endif 5758*663afb9bSAndroid Build Coastguard Worker#endif 5759*663afb9bSAndroid Build Coastguard Worker#include <malloc.h> 5760*663afb9bSAndroid Build Coastguard Worker#include <stdarg.h> 5761*663afb9bSAndroid Build Coastguard Worker#include <assert.h> 5762*663afb9bSAndroid Build Coastguard Worker#include <string.h> 5763*663afb9bSAndroid Build Coastguard Worker#include <ctype.h> 5764*663afb9bSAndroid Build Coastguard Worker#include <errno.h> 5765*663afb9bSAndroid Build Coastguard Worker#include <fcntl.h> 5766*663afb9bSAndroid Build Coastguard Worker#include <sys/stat.h> 5767*663afb9bSAndroid Build Coastguard Worker 5768*663afb9bSAndroid Build Coastguard Worker#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 5769*663afb9bSAndroid Build Coastguard Worker 5770*663afb9bSAndroid Build Coastguard Worker/* declarations of non-ANSI functions */ 5771*663afb9bSAndroid Build Coastguard Worker#if defined __MINGW32__ 5772*663afb9bSAndroid Build Coastguard Worker# ifdef __STRICT_ANSI__ 5773*663afb9bSAndroid Build Coastguard Workerint _putenv (const char *); 5774*663afb9bSAndroid Build Coastguard Worker# endif 5775*663afb9bSAndroid Build Coastguard Worker#elif defined __CYGWIN__ 5776*663afb9bSAndroid Build Coastguard Worker# ifdef __STRICT_ANSI__ 5777*663afb9bSAndroid Build Coastguard Workerchar *realpath (const char *, char *); 5778*663afb9bSAndroid Build Coastguard Workerint putenv (char *); 5779*663afb9bSAndroid Build Coastguard Workerint setenv (const char *, const char *, int); 5780*663afb9bSAndroid Build Coastguard Worker# endif 5781*663afb9bSAndroid Build Coastguard Worker/* #elif defined other_platform || defined ... */ 5782*663afb9bSAndroid Build Coastguard Worker#endif 5783*663afb9bSAndroid Build Coastguard Worker 5784*663afb9bSAndroid Build Coastguard Worker/* portability defines, excluding path handling macros */ 5785*663afb9bSAndroid Build Coastguard Worker#if defined _MSC_VER 5786*663afb9bSAndroid Build Coastguard Worker# define setmode _setmode 5787*663afb9bSAndroid Build Coastguard Worker# define stat _stat 5788*663afb9bSAndroid Build Coastguard Worker# define chmod _chmod 5789*663afb9bSAndroid Build Coastguard Worker# define getcwd _getcwd 5790*663afb9bSAndroid Build Coastguard Worker# define putenv _putenv 5791*663afb9bSAndroid Build Coastguard Worker# define S_IXUSR _S_IEXEC 5792*663afb9bSAndroid Build Coastguard Worker#elif defined __MINGW32__ 5793*663afb9bSAndroid Build Coastguard Worker# define setmode _setmode 5794*663afb9bSAndroid Build Coastguard Worker# define stat _stat 5795*663afb9bSAndroid Build Coastguard Worker# define chmod _chmod 5796*663afb9bSAndroid Build Coastguard Worker# define getcwd _getcwd 5797*663afb9bSAndroid Build Coastguard Worker# define putenv _putenv 5798*663afb9bSAndroid Build Coastguard Worker#elif defined __CYGWIN__ 5799*663afb9bSAndroid Build Coastguard Worker# define HAVE_SETENV 5800*663afb9bSAndroid Build Coastguard Worker# define FOPEN_WB "wb" 5801*663afb9bSAndroid Build Coastguard Worker/* #elif defined other platforms ... */ 5802*663afb9bSAndroid Build Coastguard Worker#endif 5803*663afb9bSAndroid Build Coastguard Worker 5804*663afb9bSAndroid Build Coastguard Worker#if defined PATH_MAX 5805*663afb9bSAndroid Build Coastguard Worker# define LT_PATHMAX PATH_MAX 5806*663afb9bSAndroid Build Coastguard Worker#elif defined MAXPATHLEN 5807*663afb9bSAndroid Build Coastguard Worker# define LT_PATHMAX MAXPATHLEN 5808*663afb9bSAndroid Build Coastguard Worker#else 5809*663afb9bSAndroid Build Coastguard Worker# define LT_PATHMAX 1024 5810*663afb9bSAndroid Build Coastguard Worker#endif 5811*663afb9bSAndroid Build Coastguard Worker 5812*663afb9bSAndroid Build Coastguard Worker#ifndef S_IXOTH 5813*663afb9bSAndroid Build Coastguard Worker# define S_IXOTH 0 5814*663afb9bSAndroid Build Coastguard Worker#endif 5815*663afb9bSAndroid Build Coastguard Worker#ifndef S_IXGRP 5816*663afb9bSAndroid Build Coastguard Worker# define S_IXGRP 0 5817*663afb9bSAndroid Build Coastguard Worker#endif 5818*663afb9bSAndroid Build Coastguard Worker 5819*663afb9bSAndroid Build Coastguard Worker/* path handling portability macros */ 5820*663afb9bSAndroid Build Coastguard Worker#ifndef DIR_SEPARATOR 5821*663afb9bSAndroid Build Coastguard Worker# define DIR_SEPARATOR '/' 5822*663afb9bSAndroid Build Coastguard Worker# define PATH_SEPARATOR ':' 5823*663afb9bSAndroid Build Coastguard Worker#endif 5824*663afb9bSAndroid Build Coastguard Worker 5825*663afb9bSAndroid Build Coastguard Worker#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 5826*663afb9bSAndroid Build Coastguard Worker defined __OS2__ 5827*663afb9bSAndroid Build Coastguard Worker# define HAVE_DOS_BASED_FILE_SYSTEM 5828*663afb9bSAndroid Build Coastguard Worker# define FOPEN_WB "wb" 5829*663afb9bSAndroid Build Coastguard Worker# ifndef DIR_SEPARATOR_2 5830*663afb9bSAndroid Build Coastguard Worker# define DIR_SEPARATOR_2 '\\' 5831*663afb9bSAndroid Build Coastguard Worker# endif 5832*663afb9bSAndroid Build Coastguard Worker# ifndef PATH_SEPARATOR_2 5833*663afb9bSAndroid Build Coastguard Worker# define PATH_SEPARATOR_2 ';' 5834*663afb9bSAndroid Build Coastguard Worker# endif 5835*663afb9bSAndroid Build Coastguard Worker#endif 5836*663afb9bSAndroid Build Coastguard Worker 5837*663afb9bSAndroid Build Coastguard Worker#ifndef DIR_SEPARATOR_2 5838*663afb9bSAndroid Build Coastguard Worker# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5839*663afb9bSAndroid Build Coastguard Worker#else /* DIR_SEPARATOR_2 */ 5840*663afb9bSAndroid Build Coastguard Worker# define IS_DIR_SEPARATOR(ch) \ 5841*663afb9bSAndroid Build Coastguard Worker (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5842*663afb9bSAndroid Build Coastguard Worker#endif /* DIR_SEPARATOR_2 */ 5843*663afb9bSAndroid Build Coastguard Worker 5844*663afb9bSAndroid Build Coastguard Worker#ifndef PATH_SEPARATOR_2 5845*663afb9bSAndroid Build Coastguard Worker# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5846*663afb9bSAndroid Build Coastguard Worker#else /* PATH_SEPARATOR_2 */ 5847*663afb9bSAndroid Build Coastguard Worker# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5848*663afb9bSAndroid Build Coastguard Worker#endif /* PATH_SEPARATOR_2 */ 5849*663afb9bSAndroid Build Coastguard Worker 5850*663afb9bSAndroid Build Coastguard Worker#ifndef FOPEN_WB 5851*663afb9bSAndroid Build Coastguard Worker# define FOPEN_WB "w" 5852*663afb9bSAndroid Build Coastguard Worker#endif 5853*663afb9bSAndroid Build Coastguard Worker#ifndef _O_BINARY 5854*663afb9bSAndroid Build Coastguard Worker# define _O_BINARY 0 5855*663afb9bSAndroid Build Coastguard Worker#endif 5856*663afb9bSAndroid Build Coastguard Worker 5857*663afb9bSAndroid Build Coastguard Worker#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5858*663afb9bSAndroid Build Coastguard Worker#define XFREE(stale) do { \ 5859*663afb9bSAndroid Build Coastguard Worker if (stale) { free (stale); stale = 0; } \ 5860*663afb9bSAndroid Build Coastguard Worker} while (0) 5861*663afb9bSAndroid Build Coastguard Worker 5862*663afb9bSAndroid Build Coastguard Worker#if defined LT_DEBUGWRAPPER 5863*663afb9bSAndroid Build Coastguard Workerstatic int lt_debug = 1; 5864*663afb9bSAndroid Build Coastguard Worker#else 5865*663afb9bSAndroid Build Coastguard Workerstatic int lt_debug = 0; 5866*663afb9bSAndroid Build Coastguard Worker#endif 5867*663afb9bSAndroid Build Coastguard Worker 5868*663afb9bSAndroid Build Coastguard Workerconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5869*663afb9bSAndroid Build Coastguard Worker 5870*663afb9bSAndroid Build Coastguard Workervoid *xmalloc (size_t num); 5871*663afb9bSAndroid Build Coastguard Workerchar *xstrdup (const char *string); 5872*663afb9bSAndroid Build Coastguard Workerconst char *base_name (const char *name); 5873*663afb9bSAndroid Build Coastguard Workerchar *find_executable (const char *wrapper); 5874*663afb9bSAndroid Build Coastguard Workerchar *chase_symlinks (const char *pathspec); 5875*663afb9bSAndroid Build Coastguard Workerint make_executable (const char *path); 5876*663afb9bSAndroid Build Coastguard Workerint check_executable (const char *path); 5877*663afb9bSAndroid Build Coastguard Workerchar *strendzap (char *str, const char *pat); 5878*663afb9bSAndroid Build Coastguard Workervoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 5879*663afb9bSAndroid Build Coastguard Workervoid lt_fatal (const char *file, int line, const char *message, ...); 5880*663afb9bSAndroid Build Coastguard Workerstatic const char *nonnull (const char *s); 5881*663afb9bSAndroid Build Coastguard Workerstatic const char *nonempty (const char *s); 5882*663afb9bSAndroid Build Coastguard Workervoid lt_setenv (const char *name, const char *value); 5883*663afb9bSAndroid Build Coastguard Workerchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5884*663afb9bSAndroid Build Coastguard Workervoid lt_update_exe_path (const char *name, const char *value); 5885*663afb9bSAndroid Build Coastguard Workervoid lt_update_lib_path (const char *name, const char *value); 5886*663afb9bSAndroid Build Coastguard Workerchar **prepare_spawn (char **argv); 5887*663afb9bSAndroid Build Coastguard Workervoid lt_dump_script (FILE *f); 5888*663afb9bSAndroid Build Coastguard WorkerEOF 5889*663afb9bSAndroid Build Coastguard Worker 5890*663afb9bSAndroid Build Coastguard Worker cat <<EOF 5891*663afb9bSAndroid Build Coastguard Worker#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 5892*663afb9bSAndroid Build Coastguard Worker# define externally_visible volatile 5893*663afb9bSAndroid Build Coastguard Worker#else 5894*663afb9bSAndroid Build Coastguard Worker# define externally_visible __attribute__((externally_visible)) volatile 5895*663afb9bSAndroid Build Coastguard Worker#endif 5896*663afb9bSAndroid Build Coastguard Workerexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5897*663afb9bSAndroid Build Coastguard Workerconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5898*663afb9bSAndroid Build Coastguard WorkerEOF 5899*663afb9bSAndroid Build Coastguard Worker 5900*663afb9bSAndroid Build Coastguard Worker if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5901*663afb9bSAndroid Build Coastguard Worker func_to_host_path "$temp_rpath" 5902*663afb9bSAndroid Build Coastguard Worker cat <<EOF 5903*663afb9bSAndroid Build Coastguard Workerconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 5904*663afb9bSAndroid Build Coastguard WorkerEOF 5905*663afb9bSAndroid Build Coastguard Worker else 5906*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 5907*663afb9bSAndroid Build Coastguard Workerconst char * LIB_PATH_VALUE = ""; 5908*663afb9bSAndroid Build Coastguard WorkerEOF 5909*663afb9bSAndroid Build Coastguard Worker fi 5910*663afb9bSAndroid Build Coastguard Worker 5911*663afb9bSAndroid Build Coastguard Worker if test -n "$dllsearchpath"; then 5912*663afb9bSAndroid Build Coastguard Worker func_to_host_path "$dllsearchpath:" 5913*663afb9bSAndroid Build Coastguard Worker cat <<EOF 5914*663afb9bSAndroid Build Coastguard Workerconst char * EXE_PATH_VARNAME = "PATH"; 5915*663afb9bSAndroid Build Coastguard Workerconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5916*663afb9bSAndroid Build Coastguard WorkerEOF 5917*663afb9bSAndroid Build Coastguard Worker else 5918*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 5919*663afb9bSAndroid Build Coastguard Workerconst char * EXE_PATH_VARNAME = ""; 5920*663afb9bSAndroid Build Coastguard Workerconst char * EXE_PATH_VALUE = ""; 5921*663afb9bSAndroid Build Coastguard WorkerEOF 5922*663afb9bSAndroid Build Coastguard Worker fi 5923*663afb9bSAndroid Build Coastguard Worker 5924*663afb9bSAndroid Build Coastguard Worker if test yes = "$fast_install"; then 5925*663afb9bSAndroid Build Coastguard Worker cat <<EOF 5926*663afb9bSAndroid Build Coastguard Workerconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5927*663afb9bSAndroid Build Coastguard WorkerEOF 5928*663afb9bSAndroid Build Coastguard Worker else 5929*663afb9bSAndroid Build Coastguard Worker cat <<EOF 5930*663afb9bSAndroid Build Coastguard Workerconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5931*663afb9bSAndroid Build Coastguard WorkerEOF 5932*663afb9bSAndroid Build Coastguard Worker fi 5933*663afb9bSAndroid Build Coastguard Worker 5934*663afb9bSAndroid Build Coastguard Worker 5935*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 5936*663afb9bSAndroid Build Coastguard Worker 5937*663afb9bSAndroid Build Coastguard Worker#define LTWRAPPER_OPTION_PREFIX "--lt-" 5938*663afb9bSAndroid Build Coastguard Worker 5939*663afb9bSAndroid Build Coastguard Workerstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5940*663afb9bSAndroid Build Coastguard Workerstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 5941*663afb9bSAndroid Build Coastguard Workerstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 5942*663afb9bSAndroid Build Coastguard Worker 5943*663afb9bSAndroid Build Coastguard Workerint 5944*663afb9bSAndroid Build Coastguard Workermain (int argc, char *argv[]) 5945*663afb9bSAndroid Build Coastguard Worker{ 5946*663afb9bSAndroid Build Coastguard Worker char **newargz; 5947*663afb9bSAndroid Build Coastguard Worker int newargc; 5948*663afb9bSAndroid Build Coastguard Worker char *tmp_pathspec; 5949*663afb9bSAndroid Build Coastguard Worker char *actual_cwrapper_path; 5950*663afb9bSAndroid Build Coastguard Worker char *actual_cwrapper_name; 5951*663afb9bSAndroid Build Coastguard Worker char *target_name; 5952*663afb9bSAndroid Build Coastguard Worker char *lt_argv_zero; 5953*663afb9bSAndroid Build Coastguard Worker int rval = 127; 5954*663afb9bSAndroid Build Coastguard Worker 5955*663afb9bSAndroid Build Coastguard Worker int i; 5956*663afb9bSAndroid Build Coastguard Worker 5957*663afb9bSAndroid Build Coastguard Worker program_name = (char *) xstrdup (base_name (argv[0])); 5958*663afb9bSAndroid Build Coastguard Worker newargz = XMALLOC (char *, (size_t) argc + 1); 5959*663afb9bSAndroid Build Coastguard Worker 5960*663afb9bSAndroid Build Coastguard Worker /* very simple arg parsing; don't want to rely on getopt 5961*663afb9bSAndroid Build Coastguard Worker * also, copy all non cwrapper options to newargz, except 5962*663afb9bSAndroid Build Coastguard Worker * argz[0], which is handled differently 5963*663afb9bSAndroid Build Coastguard Worker */ 5964*663afb9bSAndroid Build Coastguard Worker newargc=0; 5965*663afb9bSAndroid Build Coastguard Worker for (i = 1; i < argc; i++) 5966*663afb9bSAndroid Build Coastguard Worker { 5967*663afb9bSAndroid Build Coastguard Worker if (STREQ (argv[i], dumpscript_opt)) 5968*663afb9bSAndroid Build Coastguard Worker { 5969*663afb9bSAndroid Build Coastguard WorkerEOF 5970*663afb9bSAndroid Build Coastguard Worker case $host in 5971*663afb9bSAndroid Build Coastguard Worker *mingw* | *cygwin* ) 5972*663afb9bSAndroid Build Coastguard Worker # make stdout use "unix" line endings 5973*663afb9bSAndroid Build Coastguard Worker echo " setmode(1,_O_BINARY);" 5974*663afb9bSAndroid Build Coastguard Worker ;; 5975*663afb9bSAndroid Build Coastguard Worker esac 5976*663afb9bSAndroid Build Coastguard Worker 5977*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 5978*663afb9bSAndroid Build Coastguard Worker lt_dump_script (stdout); 5979*663afb9bSAndroid Build Coastguard Worker return 0; 5980*663afb9bSAndroid Build Coastguard Worker } 5981*663afb9bSAndroid Build Coastguard Worker if (STREQ (argv[i], debug_opt)) 5982*663afb9bSAndroid Build Coastguard Worker { 5983*663afb9bSAndroid Build Coastguard Worker lt_debug = 1; 5984*663afb9bSAndroid Build Coastguard Worker continue; 5985*663afb9bSAndroid Build Coastguard Worker } 5986*663afb9bSAndroid Build Coastguard Worker if (STREQ (argv[i], ltwrapper_option_prefix)) 5987*663afb9bSAndroid Build Coastguard Worker { 5988*663afb9bSAndroid Build Coastguard Worker /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 5989*663afb9bSAndroid Build Coastguard Worker namespace, but it is not one of the ones we know about and 5990*663afb9bSAndroid Build Coastguard Worker have already dealt with, above (inluding dump-script), then 5991*663afb9bSAndroid Build Coastguard Worker report an error. Otherwise, targets might begin to believe 5992*663afb9bSAndroid Build Coastguard Worker they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 5993*663afb9bSAndroid Build Coastguard Worker namespace. The first time any user complains about this, we'll 5994*663afb9bSAndroid Build Coastguard Worker need to make LTWRAPPER_OPTION_PREFIX a configure-time option 5995*663afb9bSAndroid Build Coastguard Worker or a configure.ac-settable value. 5996*663afb9bSAndroid Build Coastguard Worker */ 5997*663afb9bSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, 5998*663afb9bSAndroid Build Coastguard Worker "unrecognized %s option: '%s'", 5999*663afb9bSAndroid Build Coastguard Worker ltwrapper_option_prefix, argv[i]); 6000*663afb9bSAndroid Build Coastguard Worker } 6001*663afb9bSAndroid Build Coastguard Worker /* otherwise ... */ 6002*663afb9bSAndroid Build Coastguard Worker newargz[++newargc] = xstrdup (argv[i]); 6003*663afb9bSAndroid Build Coastguard Worker } 6004*663afb9bSAndroid Build Coastguard Worker newargz[++newargc] = NULL; 6005*663afb9bSAndroid Build Coastguard Worker 6006*663afb9bSAndroid Build Coastguard WorkerEOF 6007*663afb9bSAndroid Build Coastguard Worker cat <<EOF 6008*663afb9bSAndroid Build Coastguard Worker /* The GNU banner must be the first non-error debug message */ 6009*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 6010*663afb9bSAndroid Build Coastguard WorkerEOF 6011*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 6012*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 6013*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 6014*663afb9bSAndroid Build Coastguard Worker 6015*663afb9bSAndroid Build Coastguard Worker tmp_pathspec = find_executable (argv[0]); 6016*663afb9bSAndroid Build Coastguard Worker if (tmp_pathspec == NULL) 6017*663afb9bSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 6018*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6019*663afb9bSAndroid Build Coastguard Worker "(main) found exe (before symlink chase) at: %s\n", 6020*663afb9bSAndroid Build Coastguard Worker tmp_pathspec); 6021*663afb9bSAndroid Build Coastguard Worker 6022*663afb9bSAndroid Build Coastguard Worker actual_cwrapper_path = chase_symlinks (tmp_pathspec); 6023*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6024*663afb9bSAndroid Build Coastguard Worker "(main) found exe (after symlink chase) at: %s\n", 6025*663afb9bSAndroid Build Coastguard Worker actual_cwrapper_path); 6026*663afb9bSAndroid Build Coastguard Worker XFREE (tmp_pathspec); 6027*663afb9bSAndroid Build Coastguard Worker 6028*663afb9bSAndroid Build Coastguard Worker actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 6029*663afb9bSAndroid Build Coastguard Worker strendzap (actual_cwrapper_path, actual_cwrapper_name); 6030*663afb9bSAndroid Build Coastguard Worker 6031*663afb9bSAndroid Build Coastguard Worker /* wrapper name transforms */ 6032*663afb9bSAndroid Build Coastguard Worker strendzap (actual_cwrapper_name, ".exe"); 6033*663afb9bSAndroid Build Coastguard Worker tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 6034*663afb9bSAndroid Build Coastguard Worker XFREE (actual_cwrapper_name); 6035*663afb9bSAndroid Build Coastguard Worker actual_cwrapper_name = tmp_pathspec; 6036*663afb9bSAndroid Build Coastguard Worker tmp_pathspec = 0; 6037*663afb9bSAndroid Build Coastguard Worker 6038*663afb9bSAndroid Build Coastguard Worker /* target_name transforms -- use actual target program name; might have lt- prefix */ 6039*663afb9bSAndroid Build Coastguard Worker target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 6040*663afb9bSAndroid Build Coastguard Worker strendzap (target_name, ".exe"); 6041*663afb9bSAndroid Build Coastguard Worker tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 6042*663afb9bSAndroid Build Coastguard Worker XFREE (target_name); 6043*663afb9bSAndroid Build Coastguard Worker target_name = tmp_pathspec; 6044*663afb9bSAndroid Build Coastguard Worker tmp_pathspec = 0; 6045*663afb9bSAndroid Build Coastguard Worker 6046*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6047*663afb9bSAndroid Build Coastguard Worker "(main) libtool target name: %s\n", 6048*663afb9bSAndroid Build Coastguard Worker target_name); 6049*663afb9bSAndroid Build Coastguard WorkerEOF 6050*663afb9bSAndroid Build Coastguard Worker 6051*663afb9bSAndroid Build Coastguard Worker cat <<EOF 6052*663afb9bSAndroid Build Coastguard Worker newargz[0] = 6053*663afb9bSAndroid Build Coastguard Worker XMALLOC (char, (strlen (actual_cwrapper_path) + 6054*663afb9bSAndroid Build Coastguard Worker strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 6055*663afb9bSAndroid Build Coastguard Worker strcpy (newargz[0], actual_cwrapper_path); 6056*663afb9bSAndroid Build Coastguard Worker strcat (newargz[0], "$objdir"); 6057*663afb9bSAndroid Build Coastguard Worker strcat (newargz[0], "/"); 6058*663afb9bSAndroid Build Coastguard WorkerEOF 6059*663afb9bSAndroid Build Coastguard Worker 6060*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 6061*663afb9bSAndroid Build Coastguard Worker /* stop here, and copy so we don't have to do this twice */ 6062*663afb9bSAndroid Build Coastguard Worker tmp_pathspec = xstrdup (newargz[0]); 6063*663afb9bSAndroid Build Coastguard Worker 6064*663afb9bSAndroid Build Coastguard Worker /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 6065*663afb9bSAndroid Build Coastguard Worker strcat (newargz[0], actual_cwrapper_name); 6066*663afb9bSAndroid Build Coastguard Worker 6067*663afb9bSAndroid Build Coastguard Worker /* DO want the lt- prefix here if it exists, so use target_name */ 6068*663afb9bSAndroid Build Coastguard Worker lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 6069*663afb9bSAndroid Build Coastguard Worker XFREE (tmp_pathspec); 6070*663afb9bSAndroid Build Coastguard Worker tmp_pathspec = NULL; 6071*663afb9bSAndroid Build Coastguard WorkerEOF 6072*663afb9bSAndroid Build Coastguard Worker 6073*663afb9bSAndroid Build Coastguard Worker case $host_os in 6074*663afb9bSAndroid Build Coastguard Worker mingw*) 6075*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 6076*663afb9bSAndroid Build Coastguard Worker { 6077*663afb9bSAndroid Build Coastguard Worker char* p; 6078*663afb9bSAndroid Build Coastguard Worker while ((p = strchr (newargz[0], '\\')) != NULL) 6079*663afb9bSAndroid Build Coastguard Worker { 6080*663afb9bSAndroid Build Coastguard Worker *p = '/'; 6081*663afb9bSAndroid Build Coastguard Worker } 6082*663afb9bSAndroid Build Coastguard Worker while ((p = strchr (lt_argv_zero, '\\')) != NULL) 6083*663afb9bSAndroid Build Coastguard Worker { 6084*663afb9bSAndroid Build Coastguard Worker *p = '/'; 6085*663afb9bSAndroid Build Coastguard Worker } 6086*663afb9bSAndroid Build Coastguard Worker } 6087*663afb9bSAndroid Build Coastguard WorkerEOF 6088*663afb9bSAndroid Build Coastguard Worker ;; 6089*663afb9bSAndroid Build Coastguard Worker esac 6090*663afb9bSAndroid Build Coastguard Worker 6091*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 6092*663afb9bSAndroid Build Coastguard Worker XFREE (target_name); 6093*663afb9bSAndroid Build Coastguard Worker XFREE (actual_cwrapper_path); 6094*663afb9bSAndroid Build Coastguard Worker XFREE (actual_cwrapper_name); 6095*663afb9bSAndroid Build Coastguard Worker 6096*663afb9bSAndroid Build Coastguard Worker lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 6097*663afb9bSAndroid Build Coastguard Worker lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 6098*663afb9bSAndroid Build Coastguard Worker /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 6099*663afb9bSAndroid Build Coastguard Worker be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 6100*663afb9bSAndroid Build Coastguard Worker because on Windows, both *_VARNAMEs are PATH but uninstalled 6101*663afb9bSAndroid Build Coastguard Worker libraries must come first. */ 6102*663afb9bSAndroid Build Coastguard Worker lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 6103*663afb9bSAndroid Build Coastguard Worker lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 6104*663afb9bSAndroid Build Coastguard Worker 6105*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 6106*663afb9bSAndroid Build Coastguard Worker nonnull (lt_argv_zero)); 6107*663afb9bSAndroid Build Coastguard Worker for (i = 0; i < newargc; i++) 6108*663afb9bSAndroid Build Coastguard Worker { 6109*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 6110*663afb9bSAndroid Build Coastguard Worker i, nonnull (newargz[i])); 6111*663afb9bSAndroid Build Coastguard Worker } 6112*663afb9bSAndroid Build Coastguard Worker 6113*663afb9bSAndroid Build Coastguard WorkerEOF 6114*663afb9bSAndroid Build Coastguard Worker 6115*663afb9bSAndroid Build Coastguard Worker case $host_os in 6116*663afb9bSAndroid Build Coastguard Worker mingw*) 6117*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 6118*663afb9bSAndroid Build Coastguard Worker /* execv doesn't actually work on mingw as expected on unix */ 6119*663afb9bSAndroid Build Coastguard Worker newargz = prepare_spawn (newargz); 6120*663afb9bSAndroid Build Coastguard Worker rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 6121*663afb9bSAndroid Build Coastguard Worker if (rval == -1) 6122*663afb9bSAndroid Build Coastguard Worker { 6123*663afb9bSAndroid Build Coastguard Worker /* failed to start process */ 6124*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6125*663afb9bSAndroid Build Coastguard Worker "(main) failed to launch target \"%s\": %s\n", 6126*663afb9bSAndroid Build Coastguard Worker lt_argv_zero, nonnull (strerror (errno))); 6127*663afb9bSAndroid Build Coastguard Worker return 127; 6128*663afb9bSAndroid Build Coastguard Worker } 6129*663afb9bSAndroid Build Coastguard Worker return rval; 6130*663afb9bSAndroid Build Coastguard WorkerEOF 6131*663afb9bSAndroid Build Coastguard Worker ;; 6132*663afb9bSAndroid Build Coastguard Worker *) 6133*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 6134*663afb9bSAndroid Build Coastguard Worker execv (lt_argv_zero, newargz); 6135*663afb9bSAndroid Build Coastguard Worker return rval; /* =127, but avoids unused variable warning */ 6136*663afb9bSAndroid Build Coastguard WorkerEOF 6137*663afb9bSAndroid Build Coastguard Worker ;; 6138*663afb9bSAndroid Build Coastguard Worker esac 6139*663afb9bSAndroid Build Coastguard Worker 6140*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 6141*663afb9bSAndroid Build Coastguard Worker} 6142*663afb9bSAndroid Build Coastguard Worker 6143*663afb9bSAndroid Build Coastguard Workervoid * 6144*663afb9bSAndroid Build Coastguard Workerxmalloc (size_t num) 6145*663afb9bSAndroid Build Coastguard Worker{ 6146*663afb9bSAndroid Build Coastguard Worker void *p = (void *) malloc (num); 6147*663afb9bSAndroid Build Coastguard Worker if (!p) 6148*663afb9bSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "memory exhausted"); 6149*663afb9bSAndroid Build Coastguard Worker 6150*663afb9bSAndroid Build Coastguard Worker return p; 6151*663afb9bSAndroid Build Coastguard Worker} 6152*663afb9bSAndroid Build Coastguard Worker 6153*663afb9bSAndroid Build Coastguard Workerchar * 6154*663afb9bSAndroid Build Coastguard Workerxstrdup (const char *string) 6155*663afb9bSAndroid Build Coastguard Worker{ 6156*663afb9bSAndroid Build Coastguard Worker return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 6157*663afb9bSAndroid Build Coastguard Worker string) : NULL; 6158*663afb9bSAndroid Build Coastguard Worker} 6159*663afb9bSAndroid Build Coastguard Worker 6160*663afb9bSAndroid Build Coastguard Workerconst char * 6161*663afb9bSAndroid Build Coastguard Workerbase_name (const char *name) 6162*663afb9bSAndroid Build Coastguard Worker{ 6163*663afb9bSAndroid Build Coastguard Worker const char *base; 6164*663afb9bSAndroid Build Coastguard Worker 6165*663afb9bSAndroid Build Coastguard Worker#if defined HAVE_DOS_BASED_FILE_SYSTEM 6166*663afb9bSAndroid Build Coastguard Worker /* Skip over the disk name in MSDOS pathnames. */ 6167*663afb9bSAndroid Build Coastguard Worker if (isalpha ((unsigned char) name[0]) && name[1] == ':') 6168*663afb9bSAndroid Build Coastguard Worker name += 2; 6169*663afb9bSAndroid Build Coastguard Worker#endif 6170*663afb9bSAndroid Build Coastguard Worker 6171*663afb9bSAndroid Build Coastguard Worker for (base = name; *name; name++) 6172*663afb9bSAndroid Build Coastguard Worker if (IS_DIR_SEPARATOR (*name)) 6173*663afb9bSAndroid Build Coastguard Worker base = name + 1; 6174*663afb9bSAndroid Build Coastguard Worker return base; 6175*663afb9bSAndroid Build Coastguard Worker} 6176*663afb9bSAndroid Build Coastguard Worker 6177*663afb9bSAndroid Build Coastguard Workerint 6178*663afb9bSAndroid Build Coastguard Workercheck_executable (const char *path) 6179*663afb9bSAndroid Build Coastguard Worker{ 6180*663afb9bSAndroid Build Coastguard Worker struct stat st; 6181*663afb9bSAndroid Build Coastguard Worker 6182*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 6183*663afb9bSAndroid Build Coastguard Worker nonempty (path)); 6184*663afb9bSAndroid Build Coastguard Worker if ((!path) || (!*path)) 6185*663afb9bSAndroid Build Coastguard Worker return 0; 6186*663afb9bSAndroid Build Coastguard Worker 6187*663afb9bSAndroid Build Coastguard Worker if ((stat (path, &st) >= 0) 6188*663afb9bSAndroid Build Coastguard Worker && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 6189*663afb9bSAndroid Build Coastguard Worker return 1; 6190*663afb9bSAndroid Build Coastguard Worker else 6191*663afb9bSAndroid Build Coastguard Worker return 0; 6192*663afb9bSAndroid Build Coastguard Worker} 6193*663afb9bSAndroid Build Coastguard Worker 6194*663afb9bSAndroid Build Coastguard Workerint 6195*663afb9bSAndroid Build Coastguard Workermake_executable (const char *path) 6196*663afb9bSAndroid Build Coastguard Worker{ 6197*663afb9bSAndroid Build Coastguard Worker int rval = 0; 6198*663afb9bSAndroid Build Coastguard Worker struct stat st; 6199*663afb9bSAndroid Build Coastguard Worker 6200*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 6201*663afb9bSAndroid Build Coastguard Worker nonempty (path)); 6202*663afb9bSAndroid Build Coastguard Worker if ((!path) || (!*path)) 6203*663afb9bSAndroid Build Coastguard Worker return 0; 6204*663afb9bSAndroid Build Coastguard Worker 6205*663afb9bSAndroid Build Coastguard Worker if (stat (path, &st) >= 0) 6206*663afb9bSAndroid Build Coastguard Worker { 6207*663afb9bSAndroid Build Coastguard Worker rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 6208*663afb9bSAndroid Build Coastguard Worker } 6209*663afb9bSAndroid Build Coastguard Worker return rval; 6210*663afb9bSAndroid Build Coastguard Worker} 6211*663afb9bSAndroid Build Coastguard Worker 6212*663afb9bSAndroid Build Coastguard Worker/* Searches for the full path of the wrapper. Returns 6213*663afb9bSAndroid Build Coastguard Worker newly allocated full path name if found, NULL otherwise 6214*663afb9bSAndroid Build Coastguard Worker Does not chase symlinks, even on platforms that support them. 6215*663afb9bSAndroid Build Coastguard Worker*/ 6216*663afb9bSAndroid Build Coastguard Workerchar * 6217*663afb9bSAndroid Build Coastguard Workerfind_executable (const char *wrapper) 6218*663afb9bSAndroid Build Coastguard Worker{ 6219*663afb9bSAndroid Build Coastguard Worker int has_slash = 0; 6220*663afb9bSAndroid Build Coastguard Worker const char *p; 6221*663afb9bSAndroid Build Coastguard Worker const char *p_next; 6222*663afb9bSAndroid Build Coastguard Worker /* static buffer for getcwd */ 6223*663afb9bSAndroid Build Coastguard Worker char tmp[LT_PATHMAX + 1]; 6224*663afb9bSAndroid Build Coastguard Worker size_t tmp_len; 6225*663afb9bSAndroid Build Coastguard Worker char *concat_name; 6226*663afb9bSAndroid Build Coastguard Worker 6227*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6228*663afb9bSAndroid Build Coastguard Worker nonempty (wrapper)); 6229*663afb9bSAndroid Build Coastguard Worker 6230*663afb9bSAndroid Build Coastguard Worker if ((wrapper == NULL) || (*wrapper == '\0')) 6231*663afb9bSAndroid Build Coastguard Worker return NULL; 6232*663afb9bSAndroid Build Coastguard Worker 6233*663afb9bSAndroid Build Coastguard Worker /* Absolute path? */ 6234*663afb9bSAndroid Build Coastguard Worker#if defined HAVE_DOS_BASED_FILE_SYSTEM 6235*663afb9bSAndroid Build Coastguard Worker if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6236*663afb9bSAndroid Build Coastguard Worker { 6237*663afb9bSAndroid Build Coastguard Worker concat_name = xstrdup (wrapper); 6238*663afb9bSAndroid Build Coastguard Worker if (check_executable (concat_name)) 6239*663afb9bSAndroid Build Coastguard Worker return concat_name; 6240*663afb9bSAndroid Build Coastguard Worker XFREE (concat_name); 6241*663afb9bSAndroid Build Coastguard Worker } 6242*663afb9bSAndroid Build Coastguard Worker else 6243*663afb9bSAndroid Build Coastguard Worker { 6244*663afb9bSAndroid Build Coastguard Worker#endif 6245*663afb9bSAndroid Build Coastguard Worker if (IS_DIR_SEPARATOR (wrapper[0])) 6246*663afb9bSAndroid Build Coastguard Worker { 6247*663afb9bSAndroid Build Coastguard Worker concat_name = xstrdup (wrapper); 6248*663afb9bSAndroid Build Coastguard Worker if (check_executable (concat_name)) 6249*663afb9bSAndroid Build Coastguard Worker return concat_name; 6250*663afb9bSAndroid Build Coastguard Worker XFREE (concat_name); 6251*663afb9bSAndroid Build Coastguard Worker } 6252*663afb9bSAndroid Build Coastguard Worker#if defined HAVE_DOS_BASED_FILE_SYSTEM 6253*663afb9bSAndroid Build Coastguard Worker } 6254*663afb9bSAndroid Build Coastguard Worker#endif 6255*663afb9bSAndroid Build Coastguard Worker 6256*663afb9bSAndroid Build Coastguard Worker for (p = wrapper; *p; p++) 6257*663afb9bSAndroid Build Coastguard Worker if (*p == '/') 6258*663afb9bSAndroid Build Coastguard Worker { 6259*663afb9bSAndroid Build Coastguard Worker has_slash = 1; 6260*663afb9bSAndroid Build Coastguard Worker break; 6261*663afb9bSAndroid Build Coastguard Worker } 6262*663afb9bSAndroid Build Coastguard Worker if (!has_slash) 6263*663afb9bSAndroid Build Coastguard Worker { 6264*663afb9bSAndroid Build Coastguard Worker /* no slashes; search PATH */ 6265*663afb9bSAndroid Build Coastguard Worker const char *path = getenv ("PATH"); 6266*663afb9bSAndroid Build Coastguard Worker if (path != NULL) 6267*663afb9bSAndroid Build Coastguard Worker { 6268*663afb9bSAndroid Build Coastguard Worker for (p = path; *p; p = p_next) 6269*663afb9bSAndroid Build Coastguard Worker { 6270*663afb9bSAndroid Build Coastguard Worker const char *q; 6271*663afb9bSAndroid Build Coastguard Worker size_t p_len; 6272*663afb9bSAndroid Build Coastguard Worker for (q = p; *q; q++) 6273*663afb9bSAndroid Build Coastguard Worker if (IS_PATH_SEPARATOR (*q)) 6274*663afb9bSAndroid Build Coastguard Worker break; 6275*663afb9bSAndroid Build Coastguard Worker p_len = (size_t) (q - p); 6276*663afb9bSAndroid Build Coastguard Worker p_next = (*q == '\0' ? q : q + 1); 6277*663afb9bSAndroid Build Coastguard Worker if (p_len == 0) 6278*663afb9bSAndroid Build Coastguard Worker { 6279*663afb9bSAndroid Build Coastguard Worker /* empty path: current directory */ 6280*663afb9bSAndroid Build Coastguard Worker if (getcwd (tmp, LT_PATHMAX) == NULL) 6281*663afb9bSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6282*663afb9bSAndroid Build Coastguard Worker nonnull (strerror (errno))); 6283*663afb9bSAndroid Build Coastguard Worker tmp_len = strlen (tmp); 6284*663afb9bSAndroid Build Coastguard Worker concat_name = 6285*663afb9bSAndroid Build Coastguard Worker XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6286*663afb9bSAndroid Build Coastguard Worker memcpy (concat_name, tmp, tmp_len); 6287*663afb9bSAndroid Build Coastguard Worker concat_name[tmp_len] = '/'; 6288*663afb9bSAndroid Build Coastguard Worker strcpy (concat_name + tmp_len + 1, wrapper); 6289*663afb9bSAndroid Build Coastguard Worker } 6290*663afb9bSAndroid Build Coastguard Worker else 6291*663afb9bSAndroid Build Coastguard Worker { 6292*663afb9bSAndroid Build Coastguard Worker concat_name = 6293*663afb9bSAndroid Build Coastguard Worker XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6294*663afb9bSAndroid Build Coastguard Worker memcpy (concat_name, p, p_len); 6295*663afb9bSAndroid Build Coastguard Worker concat_name[p_len] = '/'; 6296*663afb9bSAndroid Build Coastguard Worker strcpy (concat_name + p_len + 1, wrapper); 6297*663afb9bSAndroid Build Coastguard Worker } 6298*663afb9bSAndroid Build Coastguard Worker if (check_executable (concat_name)) 6299*663afb9bSAndroid Build Coastguard Worker return concat_name; 6300*663afb9bSAndroid Build Coastguard Worker XFREE (concat_name); 6301*663afb9bSAndroid Build Coastguard Worker } 6302*663afb9bSAndroid Build Coastguard Worker } 6303*663afb9bSAndroid Build Coastguard Worker /* not found in PATH; assume curdir */ 6304*663afb9bSAndroid Build Coastguard Worker } 6305*663afb9bSAndroid Build Coastguard Worker /* Relative path | not found in path: prepend cwd */ 6306*663afb9bSAndroid Build Coastguard Worker if (getcwd (tmp, LT_PATHMAX) == NULL) 6307*663afb9bSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6308*663afb9bSAndroid Build Coastguard Worker nonnull (strerror (errno))); 6309*663afb9bSAndroid Build Coastguard Worker tmp_len = strlen (tmp); 6310*663afb9bSAndroid Build Coastguard Worker concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6311*663afb9bSAndroid Build Coastguard Worker memcpy (concat_name, tmp, tmp_len); 6312*663afb9bSAndroid Build Coastguard Worker concat_name[tmp_len] = '/'; 6313*663afb9bSAndroid Build Coastguard Worker strcpy (concat_name + tmp_len + 1, wrapper); 6314*663afb9bSAndroid Build Coastguard Worker 6315*663afb9bSAndroid Build Coastguard Worker if (check_executable (concat_name)) 6316*663afb9bSAndroid Build Coastguard Worker return concat_name; 6317*663afb9bSAndroid Build Coastguard Worker XFREE (concat_name); 6318*663afb9bSAndroid Build Coastguard Worker return NULL; 6319*663afb9bSAndroid Build Coastguard Worker} 6320*663afb9bSAndroid Build Coastguard Worker 6321*663afb9bSAndroid Build Coastguard Workerchar * 6322*663afb9bSAndroid Build Coastguard Workerchase_symlinks (const char *pathspec) 6323*663afb9bSAndroid Build Coastguard Worker{ 6324*663afb9bSAndroid Build Coastguard Worker#ifndef S_ISLNK 6325*663afb9bSAndroid Build Coastguard Worker return xstrdup (pathspec); 6326*663afb9bSAndroid Build Coastguard Worker#else 6327*663afb9bSAndroid Build Coastguard Worker char buf[LT_PATHMAX]; 6328*663afb9bSAndroid Build Coastguard Worker struct stat s; 6329*663afb9bSAndroid Build Coastguard Worker char *tmp_pathspec = xstrdup (pathspec); 6330*663afb9bSAndroid Build Coastguard Worker char *p; 6331*663afb9bSAndroid Build Coastguard Worker int has_symlinks = 0; 6332*663afb9bSAndroid Build Coastguard Worker while (strlen (tmp_pathspec) && !has_symlinks) 6333*663afb9bSAndroid Build Coastguard Worker { 6334*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6335*663afb9bSAndroid Build Coastguard Worker "checking path component for symlinks: %s\n", 6336*663afb9bSAndroid Build Coastguard Worker tmp_pathspec); 6337*663afb9bSAndroid Build Coastguard Worker if (lstat (tmp_pathspec, &s) == 0) 6338*663afb9bSAndroid Build Coastguard Worker { 6339*663afb9bSAndroid Build Coastguard Worker if (S_ISLNK (s.st_mode) != 0) 6340*663afb9bSAndroid Build Coastguard Worker { 6341*663afb9bSAndroid Build Coastguard Worker has_symlinks = 1; 6342*663afb9bSAndroid Build Coastguard Worker break; 6343*663afb9bSAndroid Build Coastguard Worker } 6344*663afb9bSAndroid Build Coastguard Worker 6345*663afb9bSAndroid Build Coastguard Worker /* search backwards for last DIR_SEPARATOR */ 6346*663afb9bSAndroid Build Coastguard Worker p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6347*663afb9bSAndroid Build Coastguard Worker while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6348*663afb9bSAndroid Build Coastguard Worker p--; 6349*663afb9bSAndroid Build Coastguard Worker if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6350*663afb9bSAndroid Build Coastguard Worker { 6351*663afb9bSAndroid Build Coastguard Worker /* no more DIR_SEPARATORS left */ 6352*663afb9bSAndroid Build Coastguard Worker break; 6353*663afb9bSAndroid Build Coastguard Worker } 6354*663afb9bSAndroid Build Coastguard Worker *p = '\0'; 6355*663afb9bSAndroid Build Coastguard Worker } 6356*663afb9bSAndroid Build Coastguard Worker else 6357*663afb9bSAndroid Build Coastguard Worker { 6358*663afb9bSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, 6359*663afb9bSAndroid Build Coastguard Worker "error accessing file \"%s\": %s", 6360*663afb9bSAndroid Build Coastguard Worker tmp_pathspec, nonnull (strerror (errno))); 6361*663afb9bSAndroid Build Coastguard Worker } 6362*663afb9bSAndroid Build Coastguard Worker } 6363*663afb9bSAndroid Build Coastguard Worker XFREE (tmp_pathspec); 6364*663afb9bSAndroid Build Coastguard Worker 6365*663afb9bSAndroid Build Coastguard Worker if (!has_symlinks) 6366*663afb9bSAndroid Build Coastguard Worker { 6367*663afb9bSAndroid Build Coastguard Worker return xstrdup (pathspec); 6368*663afb9bSAndroid Build Coastguard Worker } 6369*663afb9bSAndroid Build Coastguard Worker 6370*663afb9bSAndroid Build Coastguard Worker tmp_pathspec = realpath (pathspec, buf); 6371*663afb9bSAndroid Build Coastguard Worker if (tmp_pathspec == 0) 6372*663afb9bSAndroid Build Coastguard Worker { 6373*663afb9bSAndroid Build Coastguard Worker lt_fatal (__FILE__, __LINE__, 6374*663afb9bSAndroid Build Coastguard Worker "could not follow symlinks for %s", pathspec); 6375*663afb9bSAndroid Build Coastguard Worker } 6376*663afb9bSAndroid Build Coastguard Worker return xstrdup (tmp_pathspec); 6377*663afb9bSAndroid Build Coastguard Worker#endif 6378*663afb9bSAndroid Build Coastguard Worker} 6379*663afb9bSAndroid Build Coastguard Worker 6380*663afb9bSAndroid Build Coastguard Workerchar * 6381*663afb9bSAndroid Build Coastguard Workerstrendzap (char *str, const char *pat) 6382*663afb9bSAndroid Build Coastguard Worker{ 6383*663afb9bSAndroid Build Coastguard Worker size_t len, patlen; 6384*663afb9bSAndroid Build Coastguard Worker 6385*663afb9bSAndroid Build Coastguard Worker assert (str != NULL); 6386*663afb9bSAndroid Build Coastguard Worker assert (pat != NULL); 6387*663afb9bSAndroid Build Coastguard Worker 6388*663afb9bSAndroid Build Coastguard Worker len = strlen (str); 6389*663afb9bSAndroid Build Coastguard Worker patlen = strlen (pat); 6390*663afb9bSAndroid Build Coastguard Worker 6391*663afb9bSAndroid Build Coastguard Worker if (patlen <= len) 6392*663afb9bSAndroid Build Coastguard Worker { 6393*663afb9bSAndroid Build Coastguard Worker str += len - patlen; 6394*663afb9bSAndroid Build Coastguard Worker if (STREQ (str, pat)) 6395*663afb9bSAndroid Build Coastguard Worker *str = '\0'; 6396*663afb9bSAndroid Build Coastguard Worker } 6397*663afb9bSAndroid Build Coastguard Worker return str; 6398*663afb9bSAndroid Build Coastguard Worker} 6399*663afb9bSAndroid Build Coastguard Worker 6400*663afb9bSAndroid Build Coastguard Workervoid 6401*663afb9bSAndroid Build Coastguard Workerlt_debugprintf (const char *file, int line, const char *fmt, ...) 6402*663afb9bSAndroid Build Coastguard Worker{ 6403*663afb9bSAndroid Build Coastguard Worker va_list args; 6404*663afb9bSAndroid Build Coastguard Worker if (lt_debug) 6405*663afb9bSAndroid Build Coastguard Worker { 6406*663afb9bSAndroid Build Coastguard Worker (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6407*663afb9bSAndroid Build Coastguard Worker va_start (args, fmt); 6408*663afb9bSAndroid Build Coastguard Worker (void) vfprintf (stderr, fmt, args); 6409*663afb9bSAndroid Build Coastguard Worker va_end (args); 6410*663afb9bSAndroid Build Coastguard Worker } 6411*663afb9bSAndroid Build Coastguard Worker} 6412*663afb9bSAndroid Build Coastguard Worker 6413*663afb9bSAndroid Build Coastguard Workerstatic void 6414*663afb9bSAndroid Build Coastguard Workerlt_error_core (int exit_status, const char *file, 6415*663afb9bSAndroid Build Coastguard Worker int line, const char *mode, 6416*663afb9bSAndroid Build Coastguard Worker const char *message, va_list ap) 6417*663afb9bSAndroid Build Coastguard Worker{ 6418*663afb9bSAndroid Build Coastguard Worker fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6419*663afb9bSAndroid Build Coastguard Worker vfprintf (stderr, message, ap); 6420*663afb9bSAndroid Build Coastguard Worker fprintf (stderr, ".\n"); 6421*663afb9bSAndroid Build Coastguard Worker 6422*663afb9bSAndroid Build Coastguard Worker if (exit_status >= 0) 6423*663afb9bSAndroid Build Coastguard Worker exit (exit_status); 6424*663afb9bSAndroid Build Coastguard Worker} 6425*663afb9bSAndroid Build Coastguard Worker 6426*663afb9bSAndroid Build Coastguard Workervoid 6427*663afb9bSAndroid Build Coastguard Workerlt_fatal (const char *file, int line, const char *message, ...) 6428*663afb9bSAndroid Build Coastguard Worker{ 6429*663afb9bSAndroid Build Coastguard Worker va_list ap; 6430*663afb9bSAndroid Build Coastguard Worker va_start (ap, message); 6431*663afb9bSAndroid Build Coastguard Worker lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6432*663afb9bSAndroid Build Coastguard Worker va_end (ap); 6433*663afb9bSAndroid Build Coastguard Worker} 6434*663afb9bSAndroid Build Coastguard Worker 6435*663afb9bSAndroid Build Coastguard Workerstatic const char * 6436*663afb9bSAndroid Build Coastguard Workernonnull (const char *s) 6437*663afb9bSAndroid Build Coastguard Worker{ 6438*663afb9bSAndroid Build Coastguard Worker return s ? s : "(null)"; 6439*663afb9bSAndroid Build Coastguard Worker} 6440*663afb9bSAndroid Build Coastguard Worker 6441*663afb9bSAndroid Build Coastguard Workerstatic const char * 6442*663afb9bSAndroid Build Coastguard Workernonempty (const char *s) 6443*663afb9bSAndroid Build Coastguard Worker{ 6444*663afb9bSAndroid Build Coastguard Worker return (s && !*s) ? "(empty)" : nonnull (s); 6445*663afb9bSAndroid Build Coastguard Worker} 6446*663afb9bSAndroid Build Coastguard Worker 6447*663afb9bSAndroid Build Coastguard Workervoid 6448*663afb9bSAndroid Build Coastguard Workerlt_setenv (const char *name, const char *value) 6449*663afb9bSAndroid Build Coastguard Worker{ 6450*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6451*663afb9bSAndroid Build Coastguard Worker "(lt_setenv) setting '%s' to '%s'\n", 6452*663afb9bSAndroid Build Coastguard Worker nonnull (name), nonnull (value)); 6453*663afb9bSAndroid Build Coastguard Worker { 6454*663afb9bSAndroid Build Coastguard Worker#ifdef HAVE_SETENV 6455*663afb9bSAndroid Build Coastguard Worker /* always make a copy, for consistency with !HAVE_SETENV */ 6456*663afb9bSAndroid Build Coastguard Worker char *str = xstrdup (value); 6457*663afb9bSAndroid Build Coastguard Worker setenv (name, str, 1); 6458*663afb9bSAndroid Build Coastguard Worker#else 6459*663afb9bSAndroid Build Coastguard Worker size_t len = strlen (name) + 1 + strlen (value) + 1; 6460*663afb9bSAndroid Build Coastguard Worker char *str = XMALLOC (char, len); 6461*663afb9bSAndroid Build Coastguard Worker sprintf (str, "%s=%s", name, value); 6462*663afb9bSAndroid Build Coastguard Worker if (putenv (str) != EXIT_SUCCESS) 6463*663afb9bSAndroid Build Coastguard Worker { 6464*663afb9bSAndroid Build Coastguard Worker XFREE (str); 6465*663afb9bSAndroid Build Coastguard Worker } 6466*663afb9bSAndroid Build Coastguard Worker#endif 6467*663afb9bSAndroid Build Coastguard Worker } 6468*663afb9bSAndroid Build Coastguard Worker} 6469*663afb9bSAndroid Build Coastguard Worker 6470*663afb9bSAndroid Build Coastguard Workerchar * 6471*663afb9bSAndroid Build Coastguard Workerlt_extend_str (const char *orig_value, const char *add, int to_end) 6472*663afb9bSAndroid Build Coastguard Worker{ 6473*663afb9bSAndroid Build Coastguard Worker char *new_value; 6474*663afb9bSAndroid Build Coastguard Worker if (orig_value && *orig_value) 6475*663afb9bSAndroid Build Coastguard Worker { 6476*663afb9bSAndroid Build Coastguard Worker size_t orig_value_len = strlen (orig_value); 6477*663afb9bSAndroid Build Coastguard Worker size_t add_len = strlen (add); 6478*663afb9bSAndroid Build Coastguard Worker new_value = XMALLOC (char, add_len + orig_value_len + 1); 6479*663afb9bSAndroid Build Coastguard Worker if (to_end) 6480*663afb9bSAndroid Build Coastguard Worker { 6481*663afb9bSAndroid Build Coastguard Worker strcpy (new_value, orig_value); 6482*663afb9bSAndroid Build Coastguard Worker strcpy (new_value + orig_value_len, add); 6483*663afb9bSAndroid Build Coastguard Worker } 6484*663afb9bSAndroid Build Coastguard Worker else 6485*663afb9bSAndroid Build Coastguard Worker { 6486*663afb9bSAndroid Build Coastguard Worker strcpy (new_value, add); 6487*663afb9bSAndroid Build Coastguard Worker strcpy (new_value + add_len, orig_value); 6488*663afb9bSAndroid Build Coastguard Worker } 6489*663afb9bSAndroid Build Coastguard Worker } 6490*663afb9bSAndroid Build Coastguard Worker else 6491*663afb9bSAndroid Build Coastguard Worker { 6492*663afb9bSAndroid Build Coastguard Worker new_value = xstrdup (add); 6493*663afb9bSAndroid Build Coastguard Worker } 6494*663afb9bSAndroid Build Coastguard Worker return new_value; 6495*663afb9bSAndroid Build Coastguard Worker} 6496*663afb9bSAndroid Build Coastguard Worker 6497*663afb9bSAndroid Build Coastguard Workervoid 6498*663afb9bSAndroid Build Coastguard Workerlt_update_exe_path (const char *name, const char *value) 6499*663afb9bSAndroid Build Coastguard Worker{ 6500*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6501*663afb9bSAndroid Build Coastguard Worker "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6502*663afb9bSAndroid Build Coastguard Worker nonnull (name), nonnull (value)); 6503*663afb9bSAndroid Build Coastguard Worker 6504*663afb9bSAndroid Build Coastguard Worker if (name && *name && value && *value) 6505*663afb9bSAndroid Build Coastguard Worker { 6506*663afb9bSAndroid Build Coastguard Worker char *new_value = lt_extend_str (getenv (name), value, 0); 6507*663afb9bSAndroid Build Coastguard Worker /* some systems can't cope with a ':'-terminated path #' */ 6508*663afb9bSAndroid Build Coastguard Worker size_t len = strlen (new_value); 6509*663afb9bSAndroid Build Coastguard Worker while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6510*663afb9bSAndroid Build Coastguard Worker { 6511*663afb9bSAndroid Build Coastguard Worker new_value[--len] = '\0'; 6512*663afb9bSAndroid Build Coastguard Worker } 6513*663afb9bSAndroid Build Coastguard Worker lt_setenv (name, new_value); 6514*663afb9bSAndroid Build Coastguard Worker XFREE (new_value); 6515*663afb9bSAndroid Build Coastguard Worker } 6516*663afb9bSAndroid Build Coastguard Worker} 6517*663afb9bSAndroid Build Coastguard Worker 6518*663afb9bSAndroid Build Coastguard Workervoid 6519*663afb9bSAndroid Build Coastguard Workerlt_update_lib_path (const char *name, const char *value) 6520*663afb9bSAndroid Build Coastguard Worker{ 6521*663afb9bSAndroid Build Coastguard Worker lt_debugprintf (__FILE__, __LINE__, 6522*663afb9bSAndroid Build Coastguard Worker "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6523*663afb9bSAndroid Build Coastguard Worker nonnull (name), nonnull (value)); 6524*663afb9bSAndroid Build Coastguard Worker 6525*663afb9bSAndroid Build Coastguard Worker if (name && *name && value && *value) 6526*663afb9bSAndroid Build Coastguard Worker { 6527*663afb9bSAndroid Build Coastguard Worker char *new_value = lt_extend_str (getenv (name), value, 0); 6528*663afb9bSAndroid Build Coastguard Worker lt_setenv (name, new_value); 6529*663afb9bSAndroid Build Coastguard Worker XFREE (new_value); 6530*663afb9bSAndroid Build Coastguard Worker } 6531*663afb9bSAndroid Build Coastguard Worker} 6532*663afb9bSAndroid Build Coastguard Worker 6533*663afb9bSAndroid Build Coastguard WorkerEOF 6534*663afb9bSAndroid Build Coastguard Worker case $host_os in 6535*663afb9bSAndroid Build Coastguard Worker mingw*) 6536*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 6537*663afb9bSAndroid Build Coastguard Worker 6538*663afb9bSAndroid Build Coastguard Worker/* Prepares an argument vector before calling spawn(). 6539*663afb9bSAndroid Build Coastguard Worker Note that spawn() does not by itself call the command interpreter 6540*663afb9bSAndroid Build Coastguard Worker (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6541*663afb9bSAndroid Build Coastguard Worker ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6542*663afb9bSAndroid Build Coastguard Worker GetVersionEx(&v); 6543*663afb9bSAndroid Build Coastguard Worker v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6544*663afb9bSAndroid Build Coastguard Worker }) ? "cmd.exe" : "command.com"). 6545*663afb9bSAndroid Build Coastguard Worker Instead it simply concatenates the arguments, separated by ' ', and calls 6546*663afb9bSAndroid Build Coastguard Worker CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6547*663afb9bSAndroid Build Coastguard Worker interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6548*663afb9bSAndroid Build Coastguard Worker special way: 6549*663afb9bSAndroid Build Coastguard Worker - Space and tab are interpreted as delimiters. They are not treated as 6550*663afb9bSAndroid Build Coastguard Worker delimiters if they are surrounded by double quotes: "...". 6551*663afb9bSAndroid Build Coastguard Worker - Unescaped double quotes are removed from the input. Their only effect is 6552*663afb9bSAndroid Build Coastguard Worker that within double quotes, space and tab are treated like normal 6553*663afb9bSAndroid Build Coastguard Worker characters. 6554*663afb9bSAndroid Build Coastguard Worker - Backslashes not followed by double quotes are not special. 6555*663afb9bSAndroid Build Coastguard Worker - But 2*n+1 backslashes followed by a double quote become 6556*663afb9bSAndroid Build Coastguard Worker n backslashes followed by a double quote (n >= 0): 6557*663afb9bSAndroid Build Coastguard Worker \" -> " 6558*663afb9bSAndroid Build Coastguard Worker \\\" -> \" 6559*663afb9bSAndroid Build Coastguard Worker \\\\\" -> \\" 6560*663afb9bSAndroid Build Coastguard Worker */ 6561*663afb9bSAndroid 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" 6562*663afb9bSAndroid 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" 6563*663afb9bSAndroid Build Coastguard Workerchar ** 6564*663afb9bSAndroid Build Coastguard Workerprepare_spawn (char **argv) 6565*663afb9bSAndroid Build Coastguard Worker{ 6566*663afb9bSAndroid Build Coastguard Worker size_t argc; 6567*663afb9bSAndroid Build Coastguard Worker char **new_argv; 6568*663afb9bSAndroid Build Coastguard Worker size_t i; 6569*663afb9bSAndroid Build Coastguard Worker 6570*663afb9bSAndroid Build Coastguard Worker /* Count number of arguments. */ 6571*663afb9bSAndroid Build Coastguard Worker for (argc = 0; argv[argc] != NULL; argc++) 6572*663afb9bSAndroid Build Coastguard Worker ; 6573*663afb9bSAndroid Build Coastguard Worker 6574*663afb9bSAndroid Build Coastguard Worker /* Allocate new argument vector. */ 6575*663afb9bSAndroid Build Coastguard Worker new_argv = XMALLOC (char *, argc + 1); 6576*663afb9bSAndroid Build Coastguard Worker 6577*663afb9bSAndroid Build Coastguard Worker /* Put quoted arguments into the new argument vector. */ 6578*663afb9bSAndroid Build Coastguard Worker for (i = 0; i < argc; i++) 6579*663afb9bSAndroid Build Coastguard Worker { 6580*663afb9bSAndroid Build Coastguard Worker const char *string = argv[i]; 6581*663afb9bSAndroid Build Coastguard Worker 6582*663afb9bSAndroid Build Coastguard Worker if (string[0] == '\0') 6583*663afb9bSAndroid Build Coastguard Worker new_argv[i] = xstrdup ("\"\""); 6584*663afb9bSAndroid Build Coastguard Worker else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6585*663afb9bSAndroid Build Coastguard Worker { 6586*663afb9bSAndroid Build Coastguard Worker int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6587*663afb9bSAndroid Build Coastguard Worker size_t length; 6588*663afb9bSAndroid Build Coastguard Worker unsigned int backslashes; 6589*663afb9bSAndroid Build Coastguard Worker const char *s; 6590*663afb9bSAndroid Build Coastguard Worker char *quoted_string; 6591*663afb9bSAndroid Build Coastguard Worker char *p; 6592*663afb9bSAndroid Build Coastguard Worker 6593*663afb9bSAndroid Build Coastguard Worker length = 0; 6594*663afb9bSAndroid Build Coastguard Worker backslashes = 0; 6595*663afb9bSAndroid Build Coastguard Worker if (quote_around) 6596*663afb9bSAndroid Build Coastguard Worker length++; 6597*663afb9bSAndroid Build Coastguard Worker for (s = string; *s != '\0'; s++) 6598*663afb9bSAndroid Build Coastguard Worker { 6599*663afb9bSAndroid Build Coastguard Worker char c = *s; 6600*663afb9bSAndroid Build Coastguard Worker if (c == '"') 6601*663afb9bSAndroid Build Coastguard Worker length += backslashes + 1; 6602*663afb9bSAndroid Build Coastguard Worker length++; 6603*663afb9bSAndroid Build Coastguard Worker if (c == '\\') 6604*663afb9bSAndroid Build Coastguard Worker backslashes++; 6605*663afb9bSAndroid Build Coastguard Worker else 6606*663afb9bSAndroid Build Coastguard Worker backslashes = 0; 6607*663afb9bSAndroid Build Coastguard Worker } 6608*663afb9bSAndroid Build Coastguard Worker if (quote_around) 6609*663afb9bSAndroid Build Coastguard Worker length += backslashes + 1; 6610*663afb9bSAndroid Build Coastguard Worker 6611*663afb9bSAndroid Build Coastguard Worker quoted_string = XMALLOC (char, length + 1); 6612*663afb9bSAndroid Build Coastguard Worker 6613*663afb9bSAndroid Build Coastguard Worker p = quoted_string; 6614*663afb9bSAndroid Build Coastguard Worker backslashes = 0; 6615*663afb9bSAndroid Build Coastguard Worker if (quote_around) 6616*663afb9bSAndroid Build Coastguard Worker *p++ = '"'; 6617*663afb9bSAndroid Build Coastguard Worker for (s = string; *s != '\0'; s++) 6618*663afb9bSAndroid Build Coastguard Worker { 6619*663afb9bSAndroid Build Coastguard Worker char c = *s; 6620*663afb9bSAndroid Build Coastguard Worker if (c == '"') 6621*663afb9bSAndroid Build Coastguard Worker { 6622*663afb9bSAndroid Build Coastguard Worker unsigned int j; 6623*663afb9bSAndroid Build Coastguard Worker for (j = backslashes + 1; j > 0; j--) 6624*663afb9bSAndroid Build Coastguard Worker *p++ = '\\'; 6625*663afb9bSAndroid Build Coastguard Worker } 6626*663afb9bSAndroid Build Coastguard Worker *p++ = c; 6627*663afb9bSAndroid Build Coastguard Worker if (c == '\\') 6628*663afb9bSAndroid Build Coastguard Worker backslashes++; 6629*663afb9bSAndroid Build Coastguard Worker else 6630*663afb9bSAndroid Build Coastguard Worker backslashes = 0; 6631*663afb9bSAndroid Build Coastguard Worker } 6632*663afb9bSAndroid Build Coastguard Worker if (quote_around) 6633*663afb9bSAndroid Build Coastguard Worker { 6634*663afb9bSAndroid Build Coastguard Worker unsigned int j; 6635*663afb9bSAndroid Build Coastguard Worker for (j = backslashes; j > 0; j--) 6636*663afb9bSAndroid Build Coastguard Worker *p++ = '\\'; 6637*663afb9bSAndroid Build Coastguard Worker *p++ = '"'; 6638*663afb9bSAndroid Build Coastguard Worker } 6639*663afb9bSAndroid Build Coastguard Worker *p = '\0'; 6640*663afb9bSAndroid Build Coastguard Worker 6641*663afb9bSAndroid Build Coastguard Worker new_argv[i] = quoted_string; 6642*663afb9bSAndroid Build Coastguard Worker } 6643*663afb9bSAndroid Build Coastguard Worker else 6644*663afb9bSAndroid Build Coastguard Worker new_argv[i] = (char *) string; 6645*663afb9bSAndroid Build Coastguard Worker } 6646*663afb9bSAndroid Build Coastguard Worker new_argv[argc] = NULL; 6647*663afb9bSAndroid Build Coastguard Worker 6648*663afb9bSAndroid Build Coastguard Worker return new_argv; 6649*663afb9bSAndroid Build Coastguard Worker} 6650*663afb9bSAndroid Build Coastguard WorkerEOF 6651*663afb9bSAndroid Build Coastguard Worker ;; 6652*663afb9bSAndroid Build Coastguard Worker esac 6653*663afb9bSAndroid Build Coastguard Worker 6654*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 6655*663afb9bSAndroid Build Coastguard Workervoid lt_dump_script (FILE* f) 6656*663afb9bSAndroid Build Coastguard Worker{ 6657*663afb9bSAndroid Build Coastguard WorkerEOF 6658*663afb9bSAndroid Build Coastguard Worker func_emit_wrapper yes | 6659*663afb9bSAndroid Build Coastguard Worker $SED -n -e ' 6660*663afb9bSAndroid Build Coastguard Workers/^\(.\{79\}\)\(..*\)/\1\ 6661*663afb9bSAndroid Build Coastguard Worker\2/ 6662*663afb9bSAndroid Build Coastguard Workerh 6663*663afb9bSAndroid Build Coastguard Workers/\([\\"]\)/\\\1/g 6664*663afb9bSAndroid Build Coastguard Workers/$/\\n/ 6665*663afb9bSAndroid Build Coastguard Workers/\([^\n]*\).*/ fputs ("\1", f);/p 6666*663afb9bSAndroid Build Coastguard Workerg 6667*663afb9bSAndroid Build Coastguard WorkerD' 6668*663afb9bSAndroid Build Coastguard Worker cat <<"EOF" 6669*663afb9bSAndroid Build Coastguard Worker} 6670*663afb9bSAndroid Build Coastguard WorkerEOF 6671*663afb9bSAndroid Build Coastguard Worker} 6672*663afb9bSAndroid Build Coastguard Worker# end: func_emit_cwrapperexe_src 6673*663afb9bSAndroid Build Coastguard Worker 6674*663afb9bSAndroid Build Coastguard Worker# func_win32_import_lib_p ARG 6675*663afb9bSAndroid Build Coastguard Worker# True if ARG is an import lib, as indicated by $file_magic_cmd 6676*663afb9bSAndroid Build Coastguard Workerfunc_win32_import_lib_p () 6677*663afb9bSAndroid Build Coastguard Worker{ 6678*663afb9bSAndroid Build Coastguard Worker $debug_cmd 6679*663afb9bSAndroid Build Coastguard Worker 6680*663afb9bSAndroid Build Coastguard Worker case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6681*663afb9bSAndroid Build Coastguard Worker *import*) : ;; 6682*663afb9bSAndroid Build Coastguard Worker *) false ;; 6683*663afb9bSAndroid Build Coastguard Worker esac 6684*663afb9bSAndroid Build Coastguard Worker} 6685*663afb9bSAndroid Build Coastguard Worker 6686*663afb9bSAndroid Build Coastguard Worker# func_suncc_cstd_abi 6687*663afb9bSAndroid Build Coastguard Worker# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 6688*663afb9bSAndroid Build Coastguard Worker# Several compiler flags select an ABI that is incompatible with the 6689*663afb9bSAndroid Build Coastguard Worker# Cstd library. Avoid specifying it if any are in CXXFLAGS. 6690*663afb9bSAndroid Build Coastguard Workerfunc_suncc_cstd_abi () 6691*663afb9bSAndroid Build Coastguard Worker{ 6692*663afb9bSAndroid Build Coastguard Worker $debug_cmd 6693*663afb9bSAndroid Build Coastguard Worker 6694*663afb9bSAndroid Build Coastguard Worker case " $compile_command " in 6695*663afb9bSAndroid Build Coastguard Worker *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 6696*663afb9bSAndroid Build Coastguard Worker suncc_use_cstd_abi=no 6697*663afb9bSAndroid Build Coastguard Worker ;; 6698*663afb9bSAndroid Build Coastguard Worker *) 6699*663afb9bSAndroid Build Coastguard Worker suncc_use_cstd_abi=yes 6700*663afb9bSAndroid Build Coastguard Worker ;; 6701*663afb9bSAndroid Build Coastguard Worker esac 6702*663afb9bSAndroid Build Coastguard Worker} 6703*663afb9bSAndroid Build Coastguard Worker 6704*663afb9bSAndroid Build Coastguard Worker# func_mode_link arg... 6705*663afb9bSAndroid Build Coastguard Workerfunc_mode_link () 6706*663afb9bSAndroid Build Coastguard Worker{ 6707*663afb9bSAndroid Build Coastguard Worker $debug_cmd 6708*663afb9bSAndroid Build Coastguard Worker 6709*663afb9bSAndroid Build Coastguard Worker case $host in 6710*663afb9bSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6711*663afb9bSAndroid Build Coastguard Worker # It is impossible to link a dll without this setting, and 6712*663afb9bSAndroid Build Coastguard Worker # we shouldn't force the makefile maintainer to figure out 6713*663afb9bSAndroid Build Coastguard Worker # what system we are compiling for in order to pass an extra 6714*663afb9bSAndroid Build Coastguard Worker # flag for every libtool invocation. 6715*663afb9bSAndroid Build Coastguard Worker # allow_undefined=no 6716*663afb9bSAndroid Build Coastguard Worker 6717*663afb9bSAndroid Build Coastguard Worker # FIXME: Unfortunately, there are problems with the above when trying 6718*663afb9bSAndroid Build Coastguard Worker # to make a dll that has undefined symbols, in which case not 6719*663afb9bSAndroid Build Coastguard Worker # even a static library is built. For now, we need to specify 6720*663afb9bSAndroid Build Coastguard Worker # -no-undefined on the libtool link line when we can be certain 6721*663afb9bSAndroid Build Coastguard Worker # that all symbols are satisfied, otherwise we get a static library. 6722*663afb9bSAndroid Build Coastguard Worker allow_undefined=yes 6723*663afb9bSAndroid Build Coastguard Worker ;; 6724*663afb9bSAndroid Build Coastguard Worker *) 6725*663afb9bSAndroid Build Coastguard Worker allow_undefined=yes 6726*663afb9bSAndroid Build Coastguard Worker ;; 6727*663afb9bSAndroid Build Coastguard Worker esac 6728*663afb9bSAndroid Build Coastguard Worker libtool_args=$nonopt 6729*663afb9bSAndroid Build Coastguard Worker base_compile="$nonopt $@" 6730*663afb9bSAndroid Build Coastguard Worker compile_command=$nonopt 6731*663afb9bSAndroid Build Coastguard Worker finalize_command=$nonopt 6732*663afb9bSAndroid Build Coastguard Worker 6733*663afb9bSAndroid Build Coastguard Worker compile_rpath= 6734*663afb9bSAndroid Build Coastguard Worker finalize_rpath= 6735*663afb9bSAndroid Build Coastguard Worker compile_shlibpath= 6736*663afb9bSAndroid Build Coastguard Worker finalize_shlibpath= 6737*663afb9bSAndroid Build Coastguard Worker convenience= 6738*663afb9bSAndroid Build Coastguard Worker old_convenience= 6739*663afb9bSAndroid Build Coastguard Worker deplibs= 6740*663afb9bSAndroid Build Coastguard Worker old_deplibs= 6741*663afb9bSAndroid Build Coastguard Worker compiler_flags= 6742*663afb9bSAndroid Build Coastguard Worker linker_flags= 6743*663afb9bSAndroid Build Coastguard Worker dllsearchpath= 6744*663afb9bSAndroid Build Coastguard Worker lib_search_path=`pwd` 6745*663afb9bSAndroid Build Coastguard Worker inst_prefix_dir= 6746*663afb9bSAndroid Build Coastguard Worker new_inherited_linker_flags= 6747*663afb9bSAndroid Build Coastguard Worker 6748*663afb9bSAndroid Build Coastguard Worker avoid_version=no 6749*663afb9bSAndroid Build Coastguard Worker bindir= 6750*663afb9bSAndroid Build Coastguard Worker dlfiles= 6751*663afb9bSAndroid Build Coastguard Worker dlprefiles= 6752*663afb9bSAndroid Build Coastguard Worker dlself=no 6753*663afb9bSAndroid Build Coastguard Worker export_dynamic=no 6754*663afb9bSAndroid Build Coastguard Worker export_symbols= 6755*663afb9bSAndroid Build Coastguard Worker export_symbols_regex= 6756*663afb9bSAndroid Build Coastguard Worker generated= 6757*663afb9bSAndroid Build Coastguard Worker libobjs= 6758*663afb9bSAndroid Build Coastguard Worker ltlibs= 6759*663afb9bSAndroid Build Coastguard Worker module=no 6760*663afb9bSAndroid Build Coastguard Worker no_install=no 6761*663afb9bSAndroid Build Coastguard Worker objs= 6762*663afb9bSAndroid Build Coastguard Worker os2dllname= 6763*663afb9bSAndroid Build Coastguard Worker non_pic_objects= 6764*663afb9bSAndroid Build Coastguard Worker precious_files_regex= 6765*663afb9bSAndroid Build Coastguard Worker prefer_static_libs=no 6766*663afb9bSAndroid Build Coastguard Worker preload=false 6767*663afb9bSAndroid Build Coastguard Worker prev= 6768*663afb9bSAndroid Build Coastguard Worker prevarg= 6769*663afb9bSAndroid Build Coastguard Worker release= 6770*663afb9bSAndroid Build Coastguard Worker rpath= 6771*663afb9bSAndroid Build Coastguard Worker xrpath= 6772*663afb9bSAndroid Build Coastguard Worker perm_rpath= 6773*663afb9bSAndroid Build Coastguard Worker temp_rpath= 6774*663afb9bSAndroid Build Coastguard Worker thread_safe=no 6775*663afb9bSAndroid Build Coastguard Worker vinfo= 6776*663afb9bSAndroid Build Coastguard Worker vinfo_number=no 6777*663afb9bSAndroid Build Coastguard Worker weak_libs= 6778*663afb9bSAndroid Build Coastguard Worker single_module=$wl-single_module 6779*663afb9bSAndroid Build Coastguard Worker func_infer_tag $base_compile 6780*663afb9bSAndroid Build Coastguard Worker 6781*663afb9bSAndroid Build Coastguard Worker # We need to know -static, to get the right output filenames. 6782*663afb9bSAndroid Build Coastguard Worker for arg 6783*663afb9bSAndroid Build Coastguard Worker do 6784*663afb9bSAndroid Build Coastguard Worker case $arg in 6785*663afb9bSAndroid Build Coastguard Worker -shared) 6786*663afb9bSAndroid Build Coastguard Worker test yes != "$build_libtool_libs" \ 6787*663afb9bSAndroid Build Coastguard Worker && func_fatal_configuration "cannot build a shared library" 6788*663afb9bSAndroid Build Coastguard Worker build_old_libs=no 6789*663afb9bSAndroid Build Coastguard Worker break 6790*663afb9bSAndroid Build Coastguard Worker ;; 6791*663afb9bSAndroid Build Coastguard Worker -all-static | -static | -static-libtool-libs) 6792*663afb9bSAndroid Build Coastguard Worker case $arg in 6793*663afb9bSAndroid Build Coastguard Worker -all-static) 6794*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6795*663afb9bSAndroid Build Coastguard Worker func_warning "complete static linking is impossible in this configuration" 6796*663afb9bSAndroid Build Coastguard Worker fi 6797*663afb9bSAndroid Build Coastguard Worker if test -n "$link_static_flag"; then 6798*663afb9bSAndroid Build Coastguard Worker dlopen_self=$dlopen_self_static 6799*663afb9bSAndroid Build Coastguard Worker fi 6800*663afb9bSAndroid Build Coastguard Worker prefer_static_libs=yes 6801*663afb9bSAndroid Build Coastguard Worker ;; 6802*663afb9bSAndroid Build Coastguard Worker -static) 6803*663afb9bSAndroid Build Coastguard Worker if test -z "$pic_flag" && test -n "$link_static_flag"; then 6804*663afb9bSAndroid Build Coastguard Worker dlopen_self=$dlopen_self_static 6805*663afb9bSAndroid Build Coastguard Worker fi 6806*663afb9bSAndroid Build Coastguard Worker prefer_static_libs=built 6807*663afb9bSAndroid Build Coastguard Worker ;; 6808*663afb9bSAndroid Build Coastguard Worker -static-libtool-libs) 6809*663afb9bSAndroid Build Coastguard Worker if test -z "$pic_flag" && test -n "$link_static_flag"; then 6810*663afb9bSAndroid Build Coastguard Worker dlopen_self=$dlopen_self_static 6811*663afb9bSAndroid Build Coastguard Worker fi 6812*663afb9bSAndroid Build Coastguard Worker prefer_static_libs=yes 6813*663afb9bSAndroid Build Coastguard Worker ;; 6814*663afb9bSAndroid Build Coastguard Worker esac 6815*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=no 6816*663afb9bSAndroid Build Coastguard Worker build_old_libs=yes 6817*663afb9bSAndroid Build Coastguard Worker break 6818*663afb9bSAndroid Build Coastguard Worker ;; 6819*663afb9bSAndroid Build Coastguard Worker esac 6820*663afb9bSAndroid Build Coastguard Worker done 6821*663afb9bSAndroid Build Coastguard Worker 6822*663afb9bSAndroid Build Coastguard Worker # See if our shared archives depend on static archives. 6823*663afb9bSAndroid Build Coastguard Worker test -n "$old_archive_from_new_cmds" && build_old_libs=yes 6824*663afb9bSAndroid Build Coastguard Worker 6825*663afb9bSAndroid Build Coastguard Worker # Go through the arguments, transforming them on the way. 6826*663afb9bSAndroid Build Coastguard Worker while test "$#" -gt 0; do 6827*663afb9bSAndroid Build Coastguard Worker arg=$1 6828*663afb9bSAndroid Build Coastguard Worker shift 6829*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty,unquoted "$arg" 6830*663afb9bSAndroid Build Coastguard Worker qarg=$func_quote_arg_unquoted_result 6831*663afb9bSAndroid Build Coastguard Worker func_append libtool_args " $func_quote_arg_result" 6832*663afb9bSAndroid Build Coastguard Worker 6833*663afb9bSAndroid Build Coastguard Worker # If the previous option needs an argument, assign it. 6834*663afb9bSAndroid Build Coastguard Worker if test -n "$prev"; then 6835*663afb9bSAndroid Build Coastguard Worker case $prev in 6836*663afb9bSAndroid Build Coastguard Worker output) 6837*663afb9bSAndroid Build Coastguard Worker func_append compile_command " @OUTPUT@" 6838*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " @OUTPUT@" 6839*663afb9bSAndroid Build Coastguard Worker ;; 6840*663afb9bSAndroid Build Coastguard Worker esac 6841*663afb9bSAndroid Build Coastguard Worker 6842*663afb9bSAndroid Build Coastguard Worker case $prev in 6843*663afb9bSAndroid Build Coastguard Worker bindir) 6844*663afb9bSAndroid Build Coastguard Worker bindir=$arg 6845*663afb9bSAndroid Build Coastguard Worker prev= 6846*663afb9bSAndroid Build Coastguard Worker continue 6847*663afb9bSAndroid Build Coastguard Worker ;; 6848*663afb9bSAndroid Build Coastguard Worker dlfiles|dlprefiles) 6849*663afb9bSAndroid Build Coastguard Worker $preload || { 6850*663afb9bSAndroid Build Coastguard Worker # Add the symbol object into the linking commands. 6851*663afb9bSAndroid Build Coastguard Worker func_append compile_command " @SYMFILE@" 6852*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " @SYMFILE@" 6853*663afb9bSAndroid Build Coastguard Worker preload=: 6854*663afb9bSAndroid Build Coastguard Worker } 6855*663afb9bSAndroid Build Coastguard Worker case $arg in 6856*663afb9bSAndroid Build Coastguard Worker *.la | *.lo) ;; # We handle these cases below. 6857*663afb9bSAndroid Build Coastguard Worker force) 6858*663afb9bSAndroid Build Coastguard Worker if test no = "$dlself"; then 6859*663afb9bSAndroid Build Coastguard Worker dlself=needless 6860*663afb9bSAndroid Build Coastguard Worker export_dynamic=yes 6861*663afb9bSAndroid Build Coastguard Worker fi 6862*663afb9bSAndroid Build Coastguard Worker prev= 6863*663afb9bSAndroid Build Coastguard Worker continue 6864*663afb9bSAndroid Build Coastguard Worker ;; 6865*663afb9bSAndroid Build Coastguard Worker self) 6866*663afb9bSAndroid Build Coastguard Worker if test dlprefiles = "$prev"; then 6867*663afb9bSAndroid Build Coastguard Worker dlself=yes 6868*663afb9bSAndroid Build Coastguard Worker elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6869*663afb9bSAndroid Build Coastguard Worker dlself=yes 6870*663afb9bSAndroid Build Coastguard Worker else 6871*663afb9bSAndroid Build Coastguard Worker dlself=needless 6872*663afb9bSAndroid Build Coastguard Worker export_dynamic=yes 6873*663afb9bSAndroid Build Coastguard Worker fi 6874*663afb9bSAndroid Build Coastguard Worker prev= 6875*663afb9bSAndroid Build Coastguard Worker continue 6876*663afb9bSAndroid Build Coastguard Worker ;; 6877*663afb9bSAndroid Build Coastguard Worker *) 6878*663afb9bSAndroid Build Coastguard Worker if test dlfiles = "$prev"; then 6879*663afb9bSAndroid Build Coastguard Worker func_append dlfiles " $arg" 6880*663afb9bSAndroid Build Coastguard Worker else 6881*663afb9bSAndroid Build Coastguard Worker func_append dlprefiles " $arg" 6882*663afb9bSAndroid Build Coastguard Worker fi 6883*663afb9bSAndroid Build Coastguard Worker prev= 6884*663afb9bSAndroid Build Coastguard Worker continue 6885*663afb9bSAndroid Build Coastguard Worker ;; 6886*663afb9bSAndroid Build Coastguard Worker esac 6887*663afb9bSAndroid Build Coastguard Worker ;; 6888*663afb9bSAndroid Build Coastguard Worker expsyms) 6889*663afb9bSAndroid Build Coastguard Worker export_symbols=$arg 6890*663afb9bSAndroid Build Coastguard Worker test -f "$arg" \ 6891*663afb9bSAndroid Build Coastguard Worker || func_fatal_error "symbol file '$arg' does not exist" 6892*663afb9bSAndroid Build Coastguard Worker prev= 6893*663afb9bSAndroid Build Coastguard Worker continue 6894*663afb9bSAndroid Build Coastguard Worker ;; 6895*663afb9bSAndroid Build Coastguard Worker expsyms_regex) 6896*663afb9bSAndroid Build Coastguard Worker export_symbols_regex=$arg 6897*663afb9bSAndroid Build Coastguard Worker prev= 6898*663afb9bSAndroid Build Coastguard Worker continue 6899*663afb9bSAndroid Build Coastguard Worker ;; 6900*663afb9bSAndroid Build Coastguard Worker framework) 6901*663afb9bSAndroid Build Coastguard Worker case $host in 6902*663afb9bSAndroid Build Coastguard Worker *-*-darwin*) 6903*663afb9bSAndroid Build Coastguard Worker case "$deplibs " in 6904*663afb9bSAndroid Build Coastguard Worker *" $qarg.ltframework "*) ;; 6905*663afb9bSAndroid Build Coastguard Worker *) func_append deplibs " $qarg.ltframework" # this is fixed later 6906*663afb9bSAndroid Build Coastguard Worker ;; 6907*663afb9bSAndroid Build Coastguard Worker esac 6908*663afb9bSAndroid Build Coastguard Worker ;; 6909*663afb9bSAndroid Build Coastguard Worker esac 6910*663afb9bSAndroid Build Coastguard Worker prev= 6911*663afb9bSAndroid Build Coastguard Worker continue 6912*663afb9bSAndroid Build Coastguard Worker ;; 6913*663afb9bSAndroid Build Coastguard Worker inst_prefix) 6914*663afb9bSAndroid Build Coastguard Worker inst_prefix_dir=$arg 6915*663afb9bSAndroid Build Coastguard Worker prev= 6916*663afb9bSAndroid Build Coastguard Worker continue 6917*663afb9bSAndroid Build Coastguard Worker ;; 6918*663afb9bSAndroid Build Coastguard Worker mllvm) 6919*663afb9bSAndroid Build Coastguard Worker # Clang does not use LLVM to link, so we can simply discard any 6920*663afb9bSAndroid Build Coastguard Worker # '-mllvm $arg' options when doing the link step. 6921*663afb9bSAndroid Build Coastguard Worker prev= 6922*663afb9bSAndroid Build Coastguard Worker continue 6923*663afb9bSAndroid Build Coastguard Worker ;; 6924*663afb9bSAndroid Build Coastguard Worker objectlist) 6925*663afb9bSAndroid Build Coastguard Worker if test -f "$arg"; then 6926*663afb9bSAndroid Build Coastguard Worker save_arg=$arg 6927*663afb9bSAndroid Build Coastguard Worker moreargs= 6928*663afb9bSAndroid Build Coastguard Worker for fil in `cat "$save_arg"` 6929*663afb9bSAndroid Build Coastguard Worker do 6930*663afb9bSAndroid Build Coastguard Worker# func_append moreargs " $fil" 6931*663afb9bSAndroid Build Coastguard Worker arg=$fil 6932*663afb9bSAndroid Build Coastguard Worker # A libtool-controlled object. 6933*663afb9bSAndroid Build Coastguard Worker 6934*663afb9bSAndroid Build Coastguard Worker # Check to see that this really is a libtool object. 6935*663afb9bSAndroid Build Coastguard Worker if func_lalib_unsafe_p "$arg"; then 6936*663afb9bSAndroid Build Coastguard Worker pic_object= 6937*663afb9bSAndroid Build Coastguard Worker non_pic_object= 6938*663afb9bSAndroid Build Coastguard Worker 6939*663afb9bSAndroid Build Coastguard Worker # Read the .lo file 6940*663afb9bSAndroid Build Coastguard Worker func_source "$arg" 6941*663afb9bSAndroid Build Coastguard Worker 6942*663afb9bSAndroid Build Coastguard Worker if test -z "$pic_object" || 6943*663afb9bSAndroid Build Coastguard Worker test -z "$non_pic_object" || 6944*663afb9bSAndroid Build Coastguard Worker test none = "$pic_object" && 6945*663afb9bSAndroid Build Coastguard Worker test none = "$non_pic_object"; then 6946*663afb9bSAndroid Build Coastguard Worker func_fatal_error "cannot find name of object for '$arg'" 6947*663afb9bSAndroid Build Coastguard Worker fi 6948*663afb9bSAndroid Build Coastguard Worker 6949*663afb9bSAndroid Build Coastguard Worker # Extract subdirectory from the argument. 6950*663afb9bSAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 6951*663afb9bSAndroid Build Coastguard Worker xdir=$func_dirname_result 6952*663afb9bSAndroid Build Coastguard Worker 6953*663afb9bSAndroid Build Coastguard Worker if test none != "$pic_object"; then 6954*663afb9bSAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 6955*663afb9bSAndroid Build Coastguard Worker pic_object=$xdir$pic_object 6956*663afb9bSAndroid Build Coastguard Worker 6957*663afb9bSAndroid Build Coastguard Worker if test dlfiles = "$prev"; then 6958*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 6959*663afb9bSAndroid Build Coastguard Worker func_append dlfiles " $pic_object" 6960*663afb9bSAndroid Build Coastguard Worker prev= 6961*663afb9bSAndroid Build Coastguard Worker continue 6962*663afb9bSAndroid Build Coastguard Worker else 6963*663afb9bSAndroid Build Coastguard Worker # If libtool objects are unsupported, then we need to preload. 6964*663afb9bSAndroid Build Coastguard Worker prev=dlprefiles 6965*663afb9bSAndroid Build Coastguard Worker fi 6966*663afb9bSAndroid Build Coastguard Worker fi 6967*663afb9bSAndroid Build Coastguard Worker 6968*663afb9bSAndroid Build Coastguard Worker # CHECK ME: I think I busted this. -Ossama 6969*663afb9bSAndroid Build Coastguard Worker if test dlprefiles = "$prev"; then 6970*663afb9bSAndroid Build Coastguard Worker # Preload the old-style object. 6971*663afb9bSAndroid Build Coastguard Worker func_append dlprefiles " $pic_object" 6972*663afb9bSAndroid Build Coastguard Worker prev= 6973*663afb9bSAndroid Build Coastguard Worker fi 6974*663afb9bSAndroid Build Coastguard Worker 6975*663afb9bSAndroid Build Coastguard Worker # A PIC object. 6976*663afb9bSAndroid Build Coastguard Worker func_append libobjs " $pic_object" 6977*663afb9bSAndroid Build Coastguard Worker arg=$pic_object 6978*663afb9bSAndroid Build Coastguard Worker fi 6979*663afb9bSAndroid Build Coastguard Worker 6980*663afb9bSAndroid Build Coastguard Worker # Non-PIC object. 6981*663afb9bSAndroid Build Coastguard Worker if test none != "$non_pic_object"; then 6982*663afb9bSAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 6983*663afb9bSAndroid Build Coastguard Worker non_pic_object=$xdir$non_pic_object 6984*663afb9bSAndroid Build Coastguard Worker 6985*663afb9bSAndroid Build Coastguard Worker # A standard non-PIC object 6986*663afb9bSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 6987*663afb9bSAndroid Build Coastguard Worker if test -z "$pic_object" || test none = "$pic_object"; then 6988*663afb9bSAndroid Build Coastguard Worker arg=$non_pic_object 6989*663afb9bSAndroid Build Coastguard Worker fi 6990*663afb9bSAndroid Build Coastguard Worker else 6991*663afb9bSAndroid Build Coastguard Worker # If the PIC object exists, use it instead. 6992*663afb9bSAndroid Build Coastguard Worker # $xdir was prepended to $pic_object above. 6993*663afb9bSAndroid Build Coastguard Worker non_pic_object=$pic_object 6994*663afb9bSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 6995*663afb9bSAndroid Build Coastguard Worker fi 6996*663afb9bSAndroid Build Coastguard Worker else 6997*663afb9bSAndroid Build Coastguard Worker # Only an error if not doing a dry-run. 6998*663afb9bSAndroid Build Coastguard Worker if $opt_dry_run; then 6999*663afb9bSAndroid Build Coastguard Worker # Extract subdirectory from the argument. 7000*663afb9bSAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 7001*663afb9bSAndroid Build Coastguard Worker xdir=$func_dirname_result 7002*663afb9bSAndroid Build Coastguard Worker 7003*663afb9bSAndroid Build Coastguard Worker func_lo2o "$arg" 7004*663afb9bSAndroid Build Coastguard Worker pic_object=$xdir$objdir/$func_lo2o_result 7005*663afb9bSAndroid Build Coastguard Worker non_pic_object=$xdir$func_lo2o_result 7006*663afb9bSAndroid Build Coastguard Worker func_append libobjs " $pic_object" 7007*663afb9bSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 7008*663afb9bSAndroid Build Coastguard Worker else 7009*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$arg' is not a valid libtool object" 7010*663afb9bSAndroid Build Coastguard Worker fi 7011*663afb9bSAndroid Build Coastguard Worker fi 7012*663afb9bSAndroid Build Coastguard Worker done 7013*663afb9bSAndroid Build Coastguard Worker else 7014*663afb9bSAndroid Build Coastguard Worker func_fatal_error "link input file '$arg' does not exist" 7015*663afb9bSAndroid Build Coastguard Worker fi 7016*663afb9bSAndroid Build Coastguard Worker arg=$save_arg 7017*663afb9bSAndroid Build Coastguard Worker prev= 7018*663afb9bSAndroid Build Coastguard Worker continue 7019*663afb9bSAndroid Build Coastguard Worker ;; 7020*663afb9bSAndroid Build Coastguard Worker os2dllname) 7021*663afb9bSAndroid Build Coastguard Worker os2dllname=$arg 7022*663afb9bSAndroid Build Coastguard Worker prev= 7023*663afb9bSAndroid Build Coastguard Worker continue 7024*663afb9bSAndroid Build Coastguard Worker ;; 7025*663afb9bSAndroid Build Coastguard Worker precious_regex) 7026*663afb9bSAndroid Build Coastguard Worker precious_files_regex=$arg 7027*663afb9bSAndroid Build Coastguard Worker prev= 7028*663afb9bSAndroid Build Coastguard Worker continue 7029*663afb9bSAndroid Build Coastguard Worker ;; 7030*663afb9bSAndroid Build Coastguard Worker release) 7031*663afb9bSAndroid Build Coastguard Worker release=-$arg 7032*663afb9bSAndroid Build Coastguard Worker prev= 7033*663afb9bSAndroid Build Coastguard Worker continue 7034*663afb9bSAndroid Build Coastguard Worker ;; 7035*663afb9bSAndroid Build Coastguard Worker rpath | xrpath) 7036*663afb9bSAndroid Build Coastguard Worker # We need an absolute path. 7037*663afb9bSAndroid Build Coastguard Worker case $arg in 7038*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 7039*663afb9bSAndroid Build Coastguard Worker *) 7040*663afb9bSAndroid Build Coastguard Worker func_fatal_error "only absolute run-paths are allowed" 7041*663afb9bSAndroid Build Coastguard Worker ;; 7042*663afb9bSAndroid Build Coastguard Worker esac 7043*663afb9bSAndroid Build Coastguard Worker if test rpath = "$prev"; then 7044*663afb9bSAndroid Build Coastguard Worker case "$rpath " in 7045*663afb9bSAndroid Build Coastguard Worker *" $arg "*) ;; 7046*663afb9bSAndroid Build Coastguard Worker *) func_append rpath " $arg" ;; 7047*663afb9bSAndroid Build Coastguard Worker esac 7048*663afb9bSAndroid Build Coastguard Worker else 7049*663afb9bSAndroid Build Coastguard Worker case "$xrpath " in 7050*663afb9bSAndroid Build Coastguard Worker *" $arg "*) ;; 7051*663afb9bSAndroid Build Coastguard Worker *) func_append xrpath " $arg" ;; 7052*663afb9bSAndroid Build Coastguard Worker esac 7053*663afb9bSAndroid Build Coastguard Worker fi 7054*663afb9bSAndroid Build Coastguard Worker prev= 7055*663afb9bSAndroid Build Coastguard Worker continue 7056*663afb9bSAndroid Build Coastguard Worker ;; 7057*663afb9bSAndroid Build Coastguard Worker shrext) 7058*663afb9bSAndroid Build Coastguard Worker shrext_cmds=$arg 7059*663afb9bSAndroid Build Coastguard Worker prev= 7060*663afb9bSAndroid Build Coastguard Worker continue 7061*663afb9bSAndroid Build Coastguard Worker ;; 7062*663afb9bSAndroid Build Coastguard Worker weak) 7063*663afb9bSAndroid Build Coastguard Worker func_append weak_libs " $arg" 7064*663afb9bSAndroid Build Coastguard Worker prev= 7065*663afb9bSAndroid Build Coastguard Worker continue 7066*663afb9bSAndroid Build Coastguard Worker ;; 7067*663afb9bSAndroid Build Coastguard Worker xcclinker) 7068*663afb9bSAndroid Build Coastguard Worker func_append linker_flags " $qarg" 7069*663afb9bSAndroid Build Coastguard Worker func_append compiler_flags " $qarg" 7070*663afb9bSAndroid Build Coastguard Worker prev= 7071*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $qarg" 7072*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $qarg" 7073*663afb9bSAndroid Build Coastguard Worker continue 7074*663afb9bSAndroid Build Coastguard Worker ;; 7075*663afb9bSAndroid Build Coastguard Worker xcompiler) 7076*663afb9bSAndroid Build Coastguard Worker func_append compiler_flags " $qarg" 7077*663afb9bSAndroid Build Coastguard Worker prev= 7078*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $qarg" 7079*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $qarg" 7080*663afb9bSAndroid Build Coastguard Worker continue 7081*663afb9bSAndroid Build Coastguard Worker ;; 7082*663afb9bSAndroid Build Coastguard Worker xlinker) 7083*663afb9bSAndroid Build Coastguard Worker func_append linker_flags " $qarg" 7084*663afb9bSAndroid Build Coastguard Worker func_append compiler_flags " $wl$qarg" 7085*663afb9bSAndroid Build Coastguard Worker prev= 7086*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $wl$qarg" 7087*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $wl$qarg" 7088*663afb9bSAndroid Build Coastguard Worker continue 7089*663afb9bSAndroid Build Coastguard Worker ;; 7090*663afb9bSAndroid Build Coastguard Worker *) 7091*663afb9bSAndroid Build Coastguard Worker eval "$prev=\"\$arg\"" 7092*663afb9bSAndroid Build Coastguard Worker prev= 7093*663afb9bSAndroid Build Coastguard Worker continue 7094*663afb9bSAndroid Build Coastguard Worker ;; 7095*663afb9bSAndroid Build Coastguard Worker esac 7096*663afb9bSAndroid Build Coastguard Worker fi # test -n "$prev" 7097*663afb9bSAndroid Build Coastguard Worker 7098*663afb9bSAndroid Build Coastguard Worker prevarg=$arg 7099*663afb9bSAndroid Build Coastguard Worker 7100*663afb9bSAndroid Build Coastguard Worker case $arg in 7101*663afb9bSAndroid Build Coastguard Worker -all-static) 7102*663afb9bSAndroid Build Coastguard Worker if test -n "$link_static_flag"; then 7103*663afb9bSAndroid Build Coastguard Worker # See comment for -static flag below, for more details. 7104*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $link_static_flag" 7105*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $link_static_flag" 7106*663afb9bSAndroid Build Coastguard Worker fi 7107*663afb9bSAndroid Build Coastguard Worker continue 7108*663afb9bSAndroid Build Coastguard Worker ;; 7109*663afb9bSAndroid Build Coastguard Worker 7110*663afb9bSAndroid Build Coastguard Worker -allow-undefined) 7111*663afb9bSAndroid Build Coastguard Worker # FIXME: remove this flag sometime in the future. 7112*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'-allow-undefined' must not be used because it is the default" 7113*663afb9bSAndroid Build Coastguard Worker ;; 7114*663afb9bSAndroid Build Coastguard Worker 7115*663afb9bSAndroid Build Coastguard Worker -avoid-version) 7116*663afb9bSAndroid Build Coastguard Worker avoid_version=yes 7117*663afb9bSAndroid Build Coastguard Worker continue 7118*663afb9bSAndroid Build Coastguard Worker ;; 7119*663afb9bSAndroid Build Coastguard Worker 7120*663afb9bSAndroid Build Coastguard Worker -bindir) 7121*663afb9bSAndroid Build Coastguard Worker prev=bindir 7122*663afb9bSAndroid Build Coastguard Worker continue 7123*663afb9bSAndroid Build Coastguard Worker ;; 7124*663afb9bSAndroid Build Coastguard Worker 7125*663afb9bSAndroid Build Coastguard Worker -dlopen) 7126*663afb9bSAndroid Build Coastguard Worker prev=dlfiles 7127*663afb9bSAndroid Build Coastguard Worker continue 7128*663afb9bSAndroid Build Coastguard Worker ;; 7129*663afb9bSAndroid Build Coastguard Worker 7130*663afb9bSAndroid Build Coastguard Worker -dlpreopen) 7131*663afb9bSAndroid Build Coastguard Worker prev=dlprefiles 7132*663afb9bSAndroid Build Coastguard Worker continue 7133*663afb9bSAndroid Build Coastguard Worker ;; 7134*663afb9bSAndroid Build Coastguard Worker 7135*663afb9bSAndroid Build Coastguard Worker -export-dynamic) 7136*663afb9bSAndroid Build Coastguard Worker export_dynamic=yes 7137*663afb9bSAndroid Build Coastguard Worker continue 7138*663afb9bSAndroid Build Coastguard Worker ;; 7139*663afb9bSAndroid Build Coastguard Worker 7140*663afb9bSAndroid Build Coastguard Worker -export-symbols | -export-symbols-regex) 7141*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 7142*663afb9bSAndroid Build Coastguard Worker func_fatal_error "more than one -exported-symbols argument is not allowed" 7143*663afb9bSAndroid Build Coastguard Worker fi 7144*663afb9bSAndroid Build Coastguard Worker if test X-export-symbols = "X$arg"; then 7145*663afb9bSAndroid Build Coastguard Worker prev=expsyms 7146*663afb9bSAndroid Build Coastguard Worker else 7147*663afb9bSAndroid Build Coastguard Worker prev=expsyms_regex 7148*663afb9bSAndroid Build Coastguard Worker fi 7149*663afb9bSAndroid Build Coastguard Worker continue 7150*663afb9bSAndroid Build Coastguard Worker ;; 7151*663afb9bSAndroid Build Coastguard Worker 7152*663afb9bSAndroid Build Coastguard Worker -framework) 7153*663afb9bSAndroid Build Coastguard Worker prev=framework 7154*663afb9bSAndroid Build Coastguard Worker continue 7155*663afb9bSAndroid Build Coastguard Worker ;; 7156*663afb9bSAndroid Build Coastguard Worker 7157*663afb9bSAndroid Build Coastguard Worker -inst-prefix-dir) 7158*663afb9bSAndroid Build Coastguard Worker prev=inst_prefix 7159*663afb9bSAndroid Build Coastguard Worker continue 7160*663afb9bSAndroid Build Coastguard Worker ;; 7161*663afb9bSAndroid Build Coastguard Worker 7162*663afb9bSAndroid Build Coastguard Worker # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 7163*663afb9bSAndroid Build Coastguard Worker # so, if we see these flags be careful not to treat them like -L 7164*663afb9bSAndroid Build Coastguard Worker -L[A-Z][A-Z]*:*) 7165*663afb9bSAndroid Build Coastguard Worker case $with_gcc/$host in 7166*663afb9bSAndroid Build Coastguard Worker no/*-*-irix* | /*-*-irix*) 7167*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $arg" 7168*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7169*663afb9bSAndroid Build Coastguard Worker ;; 7170*663afb9bSAndroid Build Coastguard Worker esac 7171*663afb9bSAndroid Build Coastguard Worker continue 7172*663afb9bSAndroid Build Coastguard Worker ;; 7173*663afb9bSAndroid Build Coastguard Worker 7174*663afb9bSAndroid Build Coastguard Worker -L*) 7175*663afb9bSAndroid Build Coastguard Worker func_stripname "-L" '' "$arg" 7176*663afb9bSAndroid Build Coastguard Worker if test -z "$func_stripname_result"; then 7177*663afb9bSAndroid Build Coastguard Worker if test "$#" -gt 0; then 7178*663afb9bSAndroid Build Coastguard Worker func_fatal_error "require no space between '-L' and '$1'" 7179*663afb9bSAndroid Build Coastguard Worker else 7180*663afb9bSAndroid Build Coastguard Worker func_fatal_error "need path for '-L' option" 7181*663afb9bSAndroid Build Coastguard Worker fi 7182*663afb9bSAndroid Build Coastguard Worker fi 7183*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 7184*663afb9bSAndroid Build Coastguard Worker dir=$func_resolve_sysroot_result 7185*663afb9bSAndroid Build Coastguard Worker # We need an absolute path. 7186*663afb9bSAndroid Build Coastguard Worker case $dir in 7187*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 7188*663afb9bSAndroid Build Coastguard Worker *) 7189*663afb9bSAndroid Build Coastguard Worker absdir=`cd "$dir" && pwd` 7190*663afb9bSAndroid Build Coastguard Worker test -z "$absdir" && \ 7191*663afb9bSAndroid Build Coastguard Worker func_fatal_error "cannot determine absolute directory name of '$dir'" 7192*663afb9bSAndroid Build Coastguard Worker dir=$absdir 7193*663afb9bSAndroid Build Coastguard Worker ;; 7194*663afb9bSAndroid Build Coastguard Worker esac 7195*663afb9bSAndroid Build Coastguard Worker case "$deplibs " in 7196*663afb9bSAndroid Build Coastguard Worker *" -L$dir "* | *" $arg "*) 7197*663afb9bSAndroid Build Coastguard Worker # Will only happen for absolute or sysroot arguments 7198*663afb9bSAndroid Build Coastguard Worker ;; 7199*663afb9bSAndroid Build Coastguard Worker *) 7200*663afb9bSAndroid Build Coastguard Worker # Preserve sysroot, but never include relative directories 7201*663afb9bSAndroid Build Coastguard Worker case $dir in 7202*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 7203*663afb9bSAndroid Build Coastguard Worker *) func_append deplibs " -L$dir" ;; 7204*663afb9bSAndroid Build Coastguard Worker esac 7205*663afb9bSAndroid Build Coastguard Worker func_append lib_search_path " $dir" 7206*663afb9bSAndroid Build Coastguard Worker ;; 7207*663afb9bSAndroid Build Coastguard Worker esac 7208*663afb9bSAndroid Build Coastguard Worker case $host in 7209*663afb9bSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7210*663afb9bSAndroid Build Coastguard Worker testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 7211*663afb9bSAndroid Build Coastguard Worker case :$dllsearchpath: in 7212*663afb9bSAndroid Build Coastguard Worker *":$dir:"*) ;; 7213*663afb9bSAndroid Build Coastguard Worker ::) dllsearchpath=$dir;; 7214*663afb9bSAndroid Build Coastguard Worker *) func_append dllsearchpath ":$dir";; 7215*663afb9bSAndroid Build Coastguard Worker esac 7216*663afb9bSAndroid Build Coastguard Worker case :$dllsearchpath: in 7217*663afb9bSAndroid Build Coastguard Worker *":$testbindir:"*) ;; 7218*663afb9bSAndroid Build Coastguard Worker ::) dllsearchpath=$testbindir;; 7219*663afb9bSAndroid Build Coastguard Worker *) func_append dllsearchpath ":$testbindir";; 7220*663afb9bSAndroid Build Coastguard Worker esac 7221*663afb9bSAndroid Build Coastguard Worker ;; 7222*663afb9bSAndroid Build Coastguard Worker esac 7223*663afb9bSAndroid Build Coastguard Worker continue 7224*663afb9bSAndroid Build Coastguard Worker ;; 7225*663afb9bSAndroid Build Coastguard Worker 7226*663afb9bSAndroid Build Coastguard Worker -l*) 7227*663afb9bSAndroid Build Coastguard Worker if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7228*663afb9bSAndroid Build Coastguard Worker case $host in 7229*663afb9bSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7230*663afb9bSAndroid Build Coastguard Worker # These systems don't actually have a C or math library (as such) 7231*663afb9bSAndroid Build Coastguard Worker continue 7232*663afb9bSAndroid Build Coastguard Worker ;; 7233*663afb9bSAndroid Build Coastguard Worker *-*-os2*) 7234*663afb9bSAndroid Build Coastguard Worker # These systems don't actually have a C library (as such) 7235*663afb9bSAndroid Build Coastguard Worker test X-lc = "X$arg" && continue 7236*663afb9bSAndroid Build Coastguard Worker ;; 7237*663afb9bSAndroid Build Coastguard Worker *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7238*663afb9bSAndroid Build Coastguard Worker # Do not include libc due to us having libc/libc_r. 7239*663afb9bSAndroid Build Coastguard Worker test X-lc = "X$arg" && continue 7240*663afb9bSAndroid Build Coastguard Worker ;; 7241*663afb9bSAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 7242*663afb9bSAndroid Build Coastguard Worker # Rhapsody C and math libraries are in the System framework 7243*663afb9bSAndroid Build Coastguard Worker func_append deplibs " System.ltframework" 7244*663afb9bSAndroid Build Coastguard Worker continue 7245*663afb9bSAndroid Build Coastguard Worker ;; 7246*663afb9bSAndroid Build Coastguard Worker *-*-sco3.2v5* | *-*-sco5v6*) 7247*663afb9bSAndroid Build Coastguard Worker # Causes problems with __ctype 7248*663afb9bSAndroid Build Coastguard Worker test X-lc = "X$arg" && continue 7249*663afb9bSAndroid Build Coastguard Worker ;; 7250*663afb9bSAndroid Build Coastguard Worker *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7251*663afb9bSAndroid Build Coastguard Worker # Compiler inserts libc in the correct place for threads to work 7252*663afb9bSAndroid Build Coastguard Worker test X-lc = "X$arg" && continue 7253*663afb9bSAndroid Build Coastguard Worker ;; 7254*663afb9bSAndroid Build Coastguard Worker esac 7255*663afb9bSAndroid Build Coastguard Worker elif test X-lc_r = "X$arg"; then 7256*663afb9bSAndroid Build Coastguard Worker case $host in 7257*663afb9bSAndroid Build Coastguard Worker *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7258*663afb9bSAndroid Build Coastguard Worker # Do not include libc_r directly, use -pthread flag. 7259*663afb9bSAndroid Build Coastguard Worker continue 7260*663afb9bSAndroid Build Coastguard Worker ;; 7261*663afb9bSAndroid Build Coastguard Worker esac 7262*663afb9bSAndroid Build Coastguard Worker fi 7263*663afb9bSAndroid Build Coastguard Worker func_append deplibs " $arg" 7264*663afb9bSAndroid Build Coastguard Worker continue 7265*663afb9bSAndroid Build Coastguard Worker ;; 7266*663afb9bSAndroid Build Coastguard Worker 7267*663afb9bSAndroid Build Coastguard Worker -mllvm) 7268*663afb9bSAndroid Build Coastguard Worker prev=mllvm 7269*663afb9bSAndroid Build Coastguard Worker continue 7270*663afb9bSAndroid Build Coastguard Worker ;; 7271*663afb9bSAndroid Build Coastguard Worker 7272*663afb9bSAndroid Build Coastguard Worker -module) 7273*663afb9bSAndroid Build Coastguard Worker module=yes 7274*663afb9bSAndroid Build Coastguard Worker continue 7275*663afb9bSAndroid Build Coastguard Worker ;; 7276*663afb9bSAndroid Build Coastguard Worker 7277*663afb9bSAndroid Build Coastguard Worker # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7278*663afb9bSAndroid Build Coastguard Worker # classes, name mangling, and exception handling. 7279*663afb9bSAndroid Build Coastguard Worker # Darwin uses the -arch flag to determine output architecture. 7280*663afb9bSAndroid Build Coastguard Worker -model|-arch|-isysroot|--sysroot) 7281*663afb9bSAndroid Build Coastguard Worker func_append compiler_flags " $arg" 7282*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $arg" 7283*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7284*663afb9bSAndroid Build Coastguard Worker prev=xcompiler 7285*663afb9bSAndroid Build Coastguard Worker continue 7286*663afb9bSAndroid Build Coastguard Worker ;; 7287*663afb9bSAndroid Build Coastguard Worker 7288*663afb9bSAndroid Build Coastguard Worker -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7289*663afb9bSAndroid Build Coastguard Worker |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7290*663afb9bSAndroid Build Coastguard Worker func_append compiler_flags " $arg" 7291*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $arg" 7292*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7293*663afb9bSAndroid Build Coastguard Worker case "$new_inherited_linker_flags " in 7294*663afb9bSAndroid Build Coastguard Worker *" $arg "*) ;; 7295*663afb9bSAndroid Build Coastguard Worker * ) func_append new_inherited_linker_flags " $arg" ;; 7296*663afb9bSAndroid Build Coastguard Worker esac 7297*663afb9bSAndroid Build Coastguard Worker continue 7298*663afb9bSAndroid Build Coastguard Worker ;; 7299*663afb9bSAndroid Build Coastguard Worker 7300*663afb9bSAndroid Build Coastguard Worker -multi_module) 7301*663afb9bSAndroid Build Coastguard Worker single_module=$wl-multi_module 7302*663afb9bSAndroid Build Coastguard Worker continue 7303*663afb9bSAndroid Build Coastguard Worker ;; 7304*663afb9bSAndroid Build Coastguard Worker 7305*663afb9bSAndroid Build Coastguard Worker -no-fast-install) 7306*663afb9bSAndroid Build Coastguard Worker fast_install=no 7307*663afb9bSAndroid Build Coastguard Worker continue 7308*663afb9bSAndroid Build Coastguard Worker ;; 7309*663afb9bSAndroid Build Coastguard Worker 7310*663afb9bSAndroid Build Coastguard Worker -no-install) 7311*663afb9bSAndroid Build Coastguard Worker case $host in 7312*663afb9bSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7313*663afb9bSAndroid Build Coastguard Worker # The PATH hackery in wrapper scripts is required on Windows 7314*663afb9bSAndroid Build Coastguard Worker # and Darwin in order for the loader to find any dlls it needs. 7315*663afb9bSAndroid Build Coastguard Worker func_warning "'-no-install' is ignored for $host" 7316*663afb9bSAndroid Build Coastguard Worker func_warning "assuming '-no-fast-install' instead" 7317*663afb9bSAndroid Build Coastguard Worker fast_install=no 7318*663afb9bSAndroid Build Coastguard Worker ;; 7319*663afb9bSAndroid Build Coastguard Worker *) no_install=yes ;; 7320*663afb9bSAndroid Build Coastguard Worker esac 7321*663afb9bSAndroid Build Coastguard Worker continue 7322*663afb9bSAndroid Build Coastguard Worker ;; 7323*663afb9bSAndroid Build Coastguard Worker 7324*663afb9bSAndroid Build Coastguard Worker -no-undefined) 7325*663afb9bSAndroid Build Coastguard Worker allow_undefined=no 7326*663afb9bSAndroid Build Coastguard Worker continue 7327*663afb9bSAndroid Build Coastguard Worker ;; 7328*663afb9bSAndroid Build Coastguard Worker 7329*663afb9bSAndroid Build Coastguard Worker -objectlist) 7330*663afb9bSAndroid Build Coastguard Worker prev=objectlist 7331*663afb9bSAndroid Build Coastguard Worker continue 7332*663afb9bSAndroid Build Coastguard Worker ;; 7333*663afb9bSAndroid Build Coastguard Worker 7334*663afb9bSAndroid Build Coastguard Worker -os2dllname) 7335*663afb9bSAndroid Build Coastguard Worker prev=os2dllname 7336*663afb9bSAndroid Build Coastguard Worker continue 7337*663afb9bSAndroid Build Coastguard Worker ;; 7338*663afb9bSAndroid Build Coastguard Worker 7339*663afb9bSAndroid Build Coastguard Worker -o) prev=output ;; 7340*663afb9bSAndroid Build Coastguard Worker 7341*663afb9bSAndroid Build Coastguard Worker -precious-files-regex) 7342*663afb9bSAndroid Build Coastguard Worker prev=precious_regex 7343*663afb9bSAndroid Build Coastguard Worker continue 7344*663afb9bSAndroid Build Coastguard Worker ;; 7345*663afb9bSAndroid Build Coastguard Worker 7346*663afb9bSAndroid Build Coastguard Worker -release) 7347*663afb9bSAndroid Build Coastguard Worker prev=release 7348*663afb9bSAndroid Build Coastguard Worker continue 7349*663afb9bSAndroid Build Coastguard Worker ;; 7350*663afb9bSAndroid Build Coastguard Worker 7351*663afb9bSAndroid Build Coastguard Worker -rpath) 7352*663afb9bSAndroid Build Coastguard Worker prev=rpath 7353*663afb9bSAndroid Build Coastguard Worker continue 7354*663afb9bSAndroid Build Coastguard Worker ;; 7355*663afb9bSAndroid Build Coastguard Worker 7356*663afb9bSAndroid Build Coastguard Worker -R) 7357*663afb9bSAndroid Build Coastguard Worker prev=xrpath 7358*663afb9bSAndroid Build Coastguard Worker continue 7359*663afb9bSAndroid Build Coastguard Worker ;; 7360*663afb9bSAndroid Build Coastguard Worker 7361*663afb9bSAndroid Build Coastguard Worker -R*) 7362*663afb9bSAndroid Build Coastguard Worker func_stripname '-R' '' "$arg" 7363*663afb9bSAndroid Build Coastguard Worker dir=$func_stripname_result 7364*663afb9bSAndroid Build Coastguard Worker # We need an absolute path. 7365*663afb9bSAndroid Build Coastguard Worker case $dir in 7366*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) ;; 7367*663afb9bSAndroid Build Coastguard Worker =*) 7368*663afb9bSAndroid Build Coastguard Worker func_stripname '=' '' "$dir" 7369*663afb9bSAndroid Build Coastguard Worker dir=$lt_sysroot$func_stripname_result 7370*663afb9bSAndroid Build Coastguard Worker ;; 7371*663afb9bSAndroid Build Coastguard Worker *) 7372*663afb9bSAndroid Build Coastguard Worker func_fatal_error "only absolute run-paths are allowed" 7373*663afb9bSAndroid Build Coastguard Worker ;; 7374*663afb9bSAndroid Build Coastguard Worker esac 7375*663afb9bSAndroid Build Coastguard Worker case "$xrpath " in 7376*663afb9bSAndroid Build Coastguard Worker *" $dir "*) ;; 7377*663afb9bSAndroid Build Coastguard Worker *) func_append xrpath " $dir" ;; 7378*663afb9bSAndroid Build Coastguard Worker esac 7379*663afb9bSAndroid Build Coastguard Worker continue 7380*663afb9bSAndroid Build Coastguard Worker ;; 7381*663afb9bSAndroid Build Coastguard Worker 7382*663afb9bSAndroid Build Coastguard Worker -shared) 7383*663afb9bSAndroid Build Coastguard Worker # The effects of -shared are defined in a previous loop. 7384*663afb9bSAndroid Build Coastguard Worker continue 7385*663afb9bSAndroid Build Coastguard Worker ;; 7386*663afb9bSAndroid Build Coastguard Worker 7387*663afb9bSAndroid Build Coastguard Worker -shrext) 7388*663afb9bSAndroid Build Coastguard Worker prev=shrext 7389*663afb9bSAndroid Build Coastguard Worker continue 7390*663afb9bSAndroid Build Coastguard Worker ;; 7391*663afb9bSAndroid Build Coastguard Worker 7392*663afb9bSAndroid Build Coastguard Worker -static | -static-libtool-libs) 7393*663afb9bSAndroid Build Coastguard Worker # The effects of -static are defined in a previous loop. 7394*663afb9bSAndroid Build Coastguard Worker # We used to do the same as -all-static on platforms that 7395*663afb9bSAndroid Build Coastguard Worker # didn't have a PIC flag, but the assumption that the effects 7396*663afb9bSAndroid Build Coastguard Worker # would be equivalent was wrong. It would break on at least 7397*663afb9bSAndroid Build Coastguard Worker # Digital Unix and AIX. 7398*663afb9bSAndroid Build Coastguard Worker continue 7399*663afb9bSAndroid Build Coastguard Worker ;; 7400*663afb9bSAndroid Build Coastguard Worker 7401*663afb9bSAndroid Build Coastguard Worker -thread-safe) 7402*663afb9bSAndroid Build Coastguard Worker thread_safe=yes 7403*663afb9bSAndroid Build Coastguard Worker continue 7404*663afb9bSAndroid Build Coastguard Worker ;; 7405*663afb9bSAndroid Build Coastguard Worker 7406*663afb9bSAndroid Build Coastguard Worker -version-info) 7407*663afb9bSAndroid Build Coastguard Worker prev=vinfo 7408*663afb9bSAndroid Build Coastguard Worker continue 7409*663afb9bSAndroid Build Coastguard Worker ;; 7410*663afb9bSAndroid Build Coastguard Worker 7411*663afb9bSAndroid Build Coastguard Worker -version-number) 7412*663afb9bSAndroid Build Coastguard Worker prev=vinfo 7413*663afb9bSAndroid Build Coastguard Worker vinfo_number=yes 7414*663afb9bSAndroid Build Coastguard Worker continue 7415*663afb9bSAndroid Build Coastguard Worker ;; 7416*663afb9bSAndroid Build Coastguard Worker 7417*663afb9bSAndroid Build Coastguard Worker -weak) 7418*663afb9bSAndroid Build Coastguard Worker prev=weak 7419*663afb9bSAndroid Build Coastguard Worker continue 7420*663afb9bSAndroid Build Coastguard Worker ;; 7421*663afb9bSAndroid Build Coastguard Worker 7422*663afb9bSAndroid Build Coastguard Worker -Wc,*) 7423*663afb9bSAndroid Build Coastguard Worker func_stripname '-Wc,' '' "$arg" 7424*663afb9bSAndroid Build Coastguard Worker args=$func_stripname_result 7425*663afb9bSAndroid Build Coastguard Worker arg= 7426*663afb9bSAndroid Build Coastguard Worker save_ifs=$IFS; IFS=, 7427*663afb9bSAndroid Build Coastguard Worker for flag in $args; do 7428*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 7429*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$flag" 7430*663afb9bSAndroid Build Coastguard Worker func_append arg " $func_quote_arg_result" 7431*663afb9bSAndroid Build Coastguard Worker func_append compiler_flags " $func_quote_arg_result" 7432*663afb9bSAndroid Build Coastguard Worker done 7433*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 7434*663afb9bSAndroid Build Coastguard Worker func_stripname ' ' '' "$arg" 7435*663afb9bSAndroid Build Coastguard Worker arg=$func_stripname_result 7436*663afb9bSAndroid Build Coastguard Worker ;; 7437*663afb9bSAndroid Build Coastguard Worker 7438*663afb9bSAndroid Build Coastguard Worker -Wl,*) 7439*663afb9bSAndroid Build Coastguard Worker func_stripname '-Wl,' '' "$arg" 7440*663afb9bSAndroid Build Coastguard Worker args=$func_stripname_result 7441*663afb9bSAndroid Build Coastguard Worker arg= 7442*663afb9bSAndroid Build Coastguard Worker save_ifs=$IFS; IFS=, 7443*663afb9bSAndroid Build Coastguard Worker for flag in $args; do 7444*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 7445*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$flag" 7446*663afb9bSAndroid Build Coastguard Worker func_append arg " $wl$func_quote_arg_result" 7447*663afb9bSAndroid Build Coastguard Worker func_append compiler_flags " $wl$func_quote_arg_result" 7448*663afb9bSAndroid Build Coastguard Worker func_append linker_flags " $func_quote_arg_result" 7449*663afb9bSAndroid Build Coastguard Worker done 7450*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 7451*663afb9bSAndroid Build Coastguard Worker func_stripname ' ' '' "$arg" 7452*663afb9bSAndroid Build Coastguard Worker arg=$func_stripname_result 7453*663afb9bSAndroid Build Coastguard Worker ;; 7454*663afb9bSAndroid Build Coastguard Worker 7455*663afb9bSAndroid Build Coastguard Worker -Xcompiler) 7456*663afb9bSAndroid Build Coastguard Worker prev=xcompiler 7457*663afb9bSAndroid Build Coastguard Worker continue 7458*663afb9bSAndroid Build Coastguard Worker ;; 7459*663afb9bSAndroid Build Coastguard Worker 7460*663afb9bSAndroid Build Coastguard Worker -Xlinker) 7461*663afb9bSAndroid Build Coastguard Worker prev=xlinker 7462*663afb9bSAndroid Build Coastguard Worker continue 7463*663afb9bSAndroid Build Coastguard Worker ;; 7464*663afb9bSAndroid Build Coastguard Worker 7465*663afb9bSAndroid Build Coastguard Worker -XCClinker) 7466*663afb9bSAndroid Build Coastguard Worker prev=xcclinker 7467*663afb9bSAndroid Build Coastguard Worker continue 7468*663afb9bSAndroid Build Coastguard Worker ;; 7469*663afb9bSAndroid Build Coastguard Worker 7470*663afb9bSAndroid Build Coastguard Worker # -msg_* for osf cc 7471*663afb9bSAndroid Build Coastguard Worker -msg_*) 7472*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 7473*663afb9bSAndroid Build Coastguard Worker arg=$func_quote_arg_result 7474*663afb9bSAndroid Build Coastguard Worker ;; 7475*663afb9bSAndroid Build Coastguard Worker 7476*663afb9bSAndroid Build Coastguard Worker # Flags to be passed through unchanged, with rationale: 7477*663afb9bSAndroid Build Coastguard Worker # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7478*663afb9bSAndroid Build Coastguard Worker # -r[0-9][0-9]* specify processor for the SGI compiler 7479*663afb9bSAndroid Build Coastguard Worker # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7480*663afb9bSAndroid Build Coastguard Worker # +DA*, +DD* enable 64-bit mode for the HP compiler 7481*663afb9bSAndroid Build Coastguard Worker # -q* compiler args for the IBM compiler 7482*663afb9bSAndroid Build Coastguard Worker # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7483*663afb9bSAndroid Build Coastguard Worker # -F/path path to uninstalled frameworks, gcc on darwin 7484*663afb9bSAndroid Build Coastguard Worker # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 7485*663afb9bSAndroid Build Coastguard Worker # -fstack-protector* stack protector flags for GCC 7486*663afb9bSAndroid Build Coastguard Worker # @file GCC response files 7487*663afb9bSAndroid Build Coastguard Worker # -tp=* Portland pgcc target processor selection 7488*663afb9bSAndroid Build Coastguard Worker # --sysroot=* for sysroot support 7489*663afb9bSAndroid Build Coastguard Worker # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 7490*663afb9bSAndroid Build Coastguard Worker # -specs=* GCC specs files 7491*663afb9bSAndroid Build Coastguard Worker # -stdlib=* select c++ std lib with clang 7492*663afb9bSAndroid Build Coastguard Worker # -fsanitize=* Clang/GCC memory and address sanitizer 7493*663afb9bSAndroid Build Coastguard Worker # -fuse-ld=* Linker select flags for GCC 7494*663afb9bSAndroid Build Coastguard Worker -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7495*663afb9bSAndroid Build Coastguard Worker -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7496*663afb9bSAndroid Build Coastguard Worker -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 7497*663afb9bSAndroid Build Coastguard Worker -specs=*|-fsanitize=*|-fuse-ld=*) 7498*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 7499*663afb9bSAndroid Build Coastguard Worker arg=$func_quote_arg_result 7500*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $arg" 7501*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7502*663afb9bSAndroid Build Coastguard Worker func_append compiler_flags " $arg" 7503*663afb9bSAndroid Build Coastguard Worker continue 7504*663afb9bSAndroid Build Coastguard Worker ;; 7505*663afb9bSAndroid Build Coastguard Worker 7506*663afb9bSAndroid Build Coastguard Worker -Z*) 7507*663afb9bSAndroid Build Coastguard Worker if test os2 = "`expr $host : '.*\(os2\)'`"; then 7508*663afb9bSAndroid Build Coastguard Worker # OS/2 uses -Zxxx to specify OS/2-specific options 7509*663afb9bSAndroid Build Coastguard Worker compiler_flags="$compiler_flags $arg" 7510*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $arg" 7511*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7512*663afb9bSAndroid Build Coastguard Worker case $arg in 7513*663afb9bSAndroid Build Coastguard Worker -Zlinker | -Zstack) 7514*663afb9bSAndroid Build Coastguard Worker prev=xcompiler 7515*663afb9bSAndroid Build Coastguard Worker ;; 7516*663afb9bSAndroid Build Coastguard Worker esac 7517*663afb9bSAndroid Build Coastguard Worker continue 7518*663afb9bSAndroid Build Coastguard Worker else 7519*663afb9bSAndroid Build Coastguard Worker # Otherwise treat like 'Some other compiler flag' below 7520*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 7521*663afb9bSAndroid Build Coastguard Worker arg=$func_quote_arg_result 7522*663afb9bSAndroid Build Coastguard Worker fi 7523*663afb9bSAndroid Build Coastguard Worker ;; 7524*663afb9bSAndroid Build Coastguard Worker 7525*663afb9bSAndroid Build Coastguard Worker # Some other compiler flag. 7526*663afb9bSAndroid Build Coastguard Worker -* | +*) 7527*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 7528*663afb9bSAndroid Build Coastguard Worker arg=$func_quote_arg_result 7529*663afb9bSAndroid Build Coastguard Worker ;; 7530*663afb9bSAndroid Build Coastguard Worker 7531*663afb9bSAndroid Build Coastguard Worker *.$objext) 7532*663afb9bSAndroid Build Coastguard Worker # A standard object. 7533*663afb9bSAndroid Build Coastguard Worker func_append objs " $arg" 7534*663afb9bSAndroid Build Coastguard Worker ;; 7535*663afb9bSAndroid Build Coastguard Worker 7536*663afb9bSAndroid Build Coastguard Worker *.lo) 7537*663afb9bSAndroid Build Coastguard Worker # A libtool-controlled object. 7538*663afb9bSAndroid Build Coastguard Worker 7539*663afb9bSAndroid Build Coastguard Worker # Check to see that this really is a libtool object. 7540*663afb9bSAndroid Build Coastguard Worker if func_lalib_unsafe_p "$arg"; then 7541*663afb9bSAndroid Build Coastguard Worker pic_object= 7542*663afb9bSAndroid Build Coastguard Worker non_pic_object= 7543*663afb9bSAndroid Build Coastguard Worker 7544*663afb9bSAndroid Build Coastguard Worker # Read the .lo file 7545*663afb9bSAndroid Build Coastguard Worker func_source "$arg" 7546*663afb9bSAndroid Build Coastguard Worker 7547*663afb9bSAndroid Build Coastguard Worker if test -z "$pic_object" || 7548*663afb9bSAndroid Build Coastguard Worker test -z "$non_pic_object" || 7549*663afb9bSAndroid Build Coastguard Worker test none = "$pic_object" && 7550*663afb9bSAndroid Build Coastguard Worker test none = "$non_pic_object"; then 7551*663afb9bSAndroid Build Coastguard Worker func_fatal_error "cannot find name of object for '$arg'" 7552*663afb9bSAndroid Build Coastguard Worker fi 7553*663afb9bSAndroid Build Coastguard Worker 7554*663afb9bSAndroid Build Coastguard Worker # Extract subdirectory from the argument. 7555*663afb9bSAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 7556*663afb9bSAndroid Build Coastguard Worker xdir=$func_dirname_result 7557*663afb9bSAndroid Build Coastguard Worker 7558*663afb9bSAndroid Build Coastguard Worker test none = "$pic_object" || { 7559*663afb9bSAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 7560*663afb9bSAndroid Build Coastguard Worker pic_object=$xdir$pic_object 7561*663afb9bSAndroid Build Coastguard Worker 7562*663afb9bSAndroid Build Coastguard Worker if test dlfiles = "$prev"; then 7563*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7564*663afb9bSAndroid Build Coastguard Worker func_append dlfiles " $pic_object" 7565*663afb9bSAndroid Build Coastguard Worker prev= 7566*663afb9bSAndroid Build Coastguard Worker continue 7567*663afb9bSAndroid Build Coastguard Worker else 7568*663afb9bSAndroid Build Coastguard Worker # If libtool objects are unsupported, then we need to preload. 7569*663afb9bSAndroid Build Coastguard Worker prev=dlprefiles 7570*663afb9bSAndroid Build Coastguard Worker fi 7571*663afb9bSAndroid Build Coastguard Worker fi 7572*663afb9bSAndroid Build Coastguard Worker 7573*663afb9bSAndroid Build Coastguard Worker # CHECK ME: I think I busted this. -Ossama 7574*663afb9bSAndroid Build Coastguard Worker if test dlprefiles = "$prev"; then 7575*663afb9bSAndroid Build Coastguard Worker # Preload the old-style object. 7576*663afb9bSAndroid Build Coastguard Worker func_append dlprefiles " $pic_object" 7577*663afb9bSAndroid Build Coastguard Worker prev= 7578*663afb9bSAndroid Build Coastguard Worker fi 7579*663afb9bSAndroid Build Coastguard Worker 7580*663afb9bSAndroid Build Coastguard Worker # A PIC object. 7581*663afb9bSAndroid Build Coastguard Worker func_append libobjs " $pic_object" 7582*663afb9bSAndroid Build Coastguard Worker arg=$pic_object 7583*663afb9bSAndroid Build Coastguard Worker } 7584*663afb9bSAndroid Build Coastguard Worker 7585*663afb9bSAndroid Build Coastguard Worker # Non-PIC object. 7586*663afb9bSAndroid Build Coastguard Worker if test none != "$non_pic_object"; then 7587*663afb9bSAndroid Build Coastguard Worker # Prepend the subdirectory the object is found in. 7588*663afb9bSAndroid Build Coastguard Worker non_pic_object=$xdir$non_pic_object 7589*663afb9bSAndroid Build Coastguard Worker 7590*663afb9bSAndroid Build Coastguard Worker # A standard non-PIC object 7591*663afb9bSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 7592*663afb9bSAndroid Build Coastguard Worker if test -z "$pic_object" || test none = "$pic_object"; then 7593*663afb9bSAndroid Build Coastguard Worker arg=$non_pic_object 7594*663afb9bSAndroid Build Coastguard Worker fi 7595*663afb9bSAndroid Build Coastguard Worker else 7596*663afb9bSAndroid Build Coastguard Worker # If the PIC object exists, use it instead. 7597*663afb9bSAndroid Build Coastguard Worker # $xdir was prepended to $pic_object above. 7598*663afb9bSAndroid Build Coastguard Worker non_pic_object=$pic_object 7599*663afb9bSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 7600*663afb9bSAndroid Build Coastguard Worker fi 7601*663afb9bSAndroid Build Coastguard Worker else 7602*663afb9bSAndroid Build Coastguard Worker # Only an error if not doing a dry-run. 7603*663afb9bSAndroid Build Coastguard Worker if $opt_dry_run; then 7604*663afb9bSAndroid Build Coastguard Worker # Extract subdirectory from the argument. 7605*663afb9bSAndroid Build Coastguard Worker func_dirname "$arg" "/" "" 7606*663afb9bSAndroid Build Coastguard Worker xdir=$func_dirname_result 7607*663afb9bSAndroid Build Coastguard Worker 7608*663afb9bSAndroid Build Coastguard Worker func_lo2o "$arg" 7609*663afb9bSAndroid Build Coastguard Worker pic_object=$xdir$objdir/$func_lo2o_result 7610*663afb9bSAndroid Build Coastguard Worker non_pic_object=$xdir$func_lo2o_result 7611*663afb9bSAndroid Build Coastguard Worker func_append libobjs " $pic_object" 7612*663afb9bSAndroid Build Coastguard Worker func_append non_pic_objects " $non_pic_object" 7613*663afb9bSAndroid Build Coastguard Worker else 7614*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$arg' is not a valid libtool object" 7615*663afb9bSAndroid Build Coastguard Worker fi 7616*663afb9bSAndroid Build Coastguard Worker fi 7617*663afb9bSAndroid Build Coastguard Worker ;; 7618*663afb9bSAndroid Build Coastguard Worker 7619*663afb9bSAndroid Build Coastguard Worker *.$libext) 7620*663afb9bSAndroid Build Coastguard Worker # An archive. 7621*663afb9bSAndroid Build Coastguard Worker func_append deplibs " $arg" 7622*663afb9bSAndroid Build Coastguard Worker func_append old_deplibs " $arg" 7623*663afb9bSAndroid Build Coastguard Worker continue 7624*663afb9bSAndroid Build Coastguard Worker ;; 7625*663afb9bSAndroid Build Coastguard Worker 7626*663afb9bSAndroid Build Coastguard Worker *.la) 7627*663afb9bSAndroid Build Coastguard Worker # A libtool-controlled library. 7628*663afb9bSAndroid Build Coastguard Worker 7629*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$arg" 7630*663afb9bSAndroid Build Coastguard Worker if test dlfiles = "$prev"; then 7631*663afb9bSAndroid Build Coastguard Worker # This library was specified with -dlopen. 7632*663afb9bSAndroid Build Coastguard Worker func_append dlfiles " $func_resolve_sysroot_result" 7633*663afb9bSAndroid Build Coastguard Worker prev= 7634*663afb9bSAndroid Build Coastguard Worker elif test dlprefiles = "$prev"; then 7635*663afb9bSAndroid Build Coastguard Worker # The library was specified with -dlpreopen. 7636*663afb9bSAndroid Build Coastguard Worker func_append dlprefiles " $func_resolve_sysroot_result" 7637*663afb9bSAndroid Build Coastguard Worker prev= 7638*663afb9bSAndroid Build Coastguard Worker else 7639*663afb9bSAndroid Build Coastguard Worker func_append deplibs " $func_resolve_sysroot_result" 7640*663afb9bSAndroid Build Coastguard Worker fi 7641*663afb9bSAndroid Build Coastguard Worker continue 7642*663afb9bSAndroid Build Coastguard Worker ;; 7643*663afb9bSAndroid Build Coastguard Worker 7644*663afb9bSAndroid Build Coastguard Worker # Some other compiler argument. 7645*663afb9bSAndroid Build Coastguard Worker *) 7646*663afb9bSAndroid Build Coastguard Worker # Unknown arguments in both finalize_command and compile_command need 7647*663afb9bSAndroid Build Coastguard Worker # to be aesthetically quoted because they are evaled later. 7648*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$arg" 7649*663afb9bSAndroid Build Coastguard Worker arg=$func_quote_arg_result 7650*663afb9bSAndroid Build Coastguard Worker ;; 7651*663afb9bSAndroid Build Coastguard Worker esac # arg 7652*663afb9bSAndroid Build Coastguard Worker 7653*663afb9bSAndroid Build Coastguard Worker # Now actually substitute the argument into the commands. 7654*663afb9bSAndroid Build Coastguard Worker if test -n "$arg"; then 7655*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $arg" 7656*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7657*663afb9bSAndroid Build Coastguard Worker fi 7658*663afb9bSAndroid Build Coastguard Worker done # argument parsing loop 7659*663afb9bSAndroid Build Coastguard Worker 7660*663afb9bSAndroid Build Coastguard Worker test -n "$prev" && \ 7661*663afb9bSAndroid Build Coastguard Worker func_fatal_help "the '$prevarg' option requires an argument" 7662*663afb9bSAndroid Build Coastguard Worker 7663*663afb9bSAndroid Build Coastguard Worker if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7664*663afb9bSAndroid Build Coastguard Worker eval arg=\"$export_dynamic_flag_spec\" 7665*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $arg" 7666*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $arg" 7667*663afb9bSAndroid Build Coastguard Worker fi 7668*663afb9bSAndroid Build Coastguard Worker 7669*663afb9bSAndroid Build Coastguard Worker oldlibs= 7670*663afb9bSAndroid Build Coastguard Worker # calculate the name of the file, without its directory 7671*663afb9bSAndroid Build Coastguard Worker func_basename "$output" 7672*663afb9bSAndroid Build Coastguard Worker outputname=$func_basename_result 7673*663afb9bSAndroid Build Coastguard Worker libobjs_save=$libobjs 7674*663afb9bSAndroid Build Coastguard Worker 7675*663afb9bSAndroid Build Coastguard Worker if test -n "$shlibpath_var"; then 7676*663afb9bSAndroid Build Coastguard Worker # get the directories listed in $shlibpath_var 7677*663afb9bSAndroid Build Coastguard Worker eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7678*663afb9bSAndroid Build Coastguard Worker else 7679*663afb9bSAndroid Build Coastguard Worker shlib_search_path= 7680*663afb9bSAndroid Build Coastguard Worker fi 7681*663afb9bSAndroid Build Coastguard Worker eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7682*663afb9bSAndroid Build Coastguard Worker eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7683*663afb9bSAndroid Build Coastguard Worker 7684*663afb9bSAndroid Build Coastguard Worker # Definition is injected by LT_CONFIG during libtool generation. 7685*663afb9bSAndroid Build Coastguard Worker func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 7686*663afb9bSAndroid Build Coastguard Worker 7687*663afb9bSAndroid Build Coastguard Worker func_dirname "$output" "/" "" 7688*663afb9bSAndroid Build Coastguard Worker output_objdir=$func_dirname_result$objdir 7689*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$output_objdir/" 7690*663afb9bSAndroid Build Coastguard Worker tool_output_objdir=$func_to_tool_file_result 7691*663afb9bSAndroid Build Coastguard Worker # Create the object directory. 7692*663afb9bSAndroid Build Coastguard Worker func_mkdir_p "$output_objdir" 7693*663afb9bSAndroid Build Coastguard Worker 7694*663afb9bSAndroid Build Coastguard Worker # Determine the type of output 7695*663afb9bSAndroid Build Coastguard Worker case $output in 7696*663afb9bSAndroid Build Coastguard Worker "") 7697*663afb9bSAndroid Build Coastguard Worker func_fatal_help "you must specify an output file" 7698*663afb9bSAndroid Build Coastguard Worker ;; 7699*663afb9bSAndroid Build Coastguard Worker *.$libext) linkmode=oldlib ;; 7700*663afb9bSAndroid Build Coastguard Worker *.lo | *.$objext) linkmode=obj ;; 7701*663afb9bSAndroid Build Coastguard Worker *.la) linkmode=lib ;; 7702*663afb9bSAndroid Build Coastguard Worker *) linkmode=prog ;; # Anything else should be a program. 7703*663afb9bSAndroid Build Coastguard Worker esac 7704*663afb9bSAndroid Build Coastguard Worker 7705*663afb9bSAndroid Build Coastguard Worker specialdeplibs= 7706*663afb9bSAndroid Build Coastguard Worker 7707*663afb9bSAndroid Build Coastguard Worker libs= 7708*663afb9bSAndroid Build Coastguard Worker # Find all interdependent deplibs by searching for libraries 7709*663afb9bSAndroid Build Coastguard Worker # that are linked more than once (e.g. -la -lb -la) 7710*663afb9bSAndroid Build Coastguard Worker for deplib in $deplibs; do 7711*663afb9bSAndroid Build Coastguard Worker if $opt_preserve_dup_deps; then 7712*663afb9bSAndroid Build Coastguard Worker case "$libs " in 7713*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7714*663afb9bSAndroid Build Coastguard Worker esac 7715*663afb9bSAndroid Build Coastguard Worker fi 7716*663afb9bSAndroid Build Coastguard Worker func_append libs " $deplib" 7717*663afb9bSAndroid Build Coastguard Worker done 7718*663afb9bSAndroid Build Coastguard Worker 7719*663afb9bSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 7720*663afb9bSAndroid Build Coastguard Worker libs="$predeps $libs $compiler_lib_search_path $postdeps" 7721*663afb9bSAndroid Build Coastguard Worker 7722*663afb9bSAndroid Build Coastguard Worker # Compute libraries that are listed more than once in $predeps 7723*663afb9bSAndroid Build Coastguard Worker # $postdeps and mark them as special (i.e., whose duplicates are 7724*663afb9bSAndroid Build Coastguard Worker # not to be eliminated). 7725*663afb9bSAndroid Build Coastguard Worker pre_post_deps= 7726*663afb9bSAndroid Build Coastguard Worker if $opt_duplicate_compiler_generated_deps; then 7727*663afb9bSAndroid Build Coastguard Worker for pre_post_dep in $predeps $postdeps; do 7728*663afb9bSAndroid Build Coastguard Worker case "$pre_post_deps " in 7729*663afb9bSAndroid Build Coastguard Worker *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7730*663afb9bSAndroid Build Coastguard Worker esac 7731*663afb9bSAndroid Build Coastguard Worker func_append pre_post_deps " $pre_post_dep" 7732*663afb9bSAndroid Build Coastguard Worker done 7733*663afb9bSAndroid Build Coastguard Worker fi 7734*663afb9bSAndroid Build Coastguard Worker pre_post_deps= 7735*663afb9bSAndroid Build Coastguard Worker fi 7736*663afb9bSAndroid Build Coastguard Worker 7737*663afb9bSAndroid Build Coastguard Worker deplibs= 7738*663afb9bSAndroid Build Coastguard Worker newdependency_libs= 7739*663afb9bSAndroid Build Coastguard Worker newlib_search_path= 7740*663afb9bSAndroid Build Coastguard Worker need_relink=no # whether we're linking any uninstalled libtool libraries 7741*663afb9bSAndroid Build Coastguard Worker notinst_deplibs= # not-installed libtool libraries 7742*663afb9bSAndroid Build Coastguard Worker notinst_path= # paths that contain not-installed libtool libraries 7743*663afb9bSAndroid Build Coastguard Worker 7744*663afb9bSAndroid Build Coastguard Worker case $linkmode in 7745*663afb9bSAndroid Build Coastguard Worker lib) 7746*663afb9bSAndroid Build Coastguard Worker passes="conv dlpreopen link" 7747*663afb9bSAndroid Build Coastguard Worker for file in $dlfiles $dlprefiles; do 7748*663afb9bSAndroid Build Coastguard Worker case $file in 7749*663afb9bSAndroid Build Coastguard Worker *.la) ;; 7750*663afb9bSAndroid Build Coastguard Worker *) 7751*663afb9bSAndroid Build Coastguard Worker func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7752*663afb9bSAndroid Build Coastguard Worker ;; 7753*663afb9bSAndroid Build Coastguard Worker esac 7754*663afb9bSAndroid Build Coastguard Worker done 7755*663afb9bSAndroid Build Coastguard Worker ;; 7756*663afb9bSAndroid Build Coastguard Worker prog) 7757*663afb9bSAndroid Build Coastguard Worker compile_deplibs= 7758*663afb9bSAndroid Build Coastguard Worker finalize_deplibs= 7759*663afb9bSAndroid Build Coastguard Worker alldeplibs=false 7760*663afb9bSAndroid Build Coastguard Worker newdlfiles= 7761*663afb9bSAndroid Build Coastguard Worker newdlprefiles= 7762*663afb9bSAndroid Build Coastguard Worker passes="conv scan dlopen dlpreopen link" 7763*663afb9bSAndroid Build Coastguard Worker ;; 7764*663afb9bSAndroid Build Coastguard Worker *) passes="conv" 7765*663afb9bSAndroid Build Coastguard Worker ;; 7766*663afb9bSAndroid Build Coastguard Worker esac 7767*663afb9bSAndroid Build Coastguard Worker 7768*663afb9bSAndroid Build Coastguard Worker for pass in $passes; do 7769*663afb9bSAndroid Build Coastguard Worker # The preopen pass in lib mode reverses $deplibs; put it back here 7770*663afb9bSAndroid Build Coastguard Worker # so that -L comes before libs that need it for instance... 7771*663afb9bSAndroid Build Coastguard Worker if test lib,link = "$linkmode,$pass"; then 7772*663afb9bSAndroid Build Coastguard Worker ## FIXME: Find the place where the list is rebuilt in the wrong 7773*663afb9bSAndroid Build Coastguard Worker ## order, and fix it there properly 7774*663afb9bSAndroid Build Coastguard Worker tmp_deplibs= 7775*663afb9bSAndroid Build Coastguard Worker for deplib in $deplibs; do 7776*663afb9bSAndroid Build Coastguard Worker tmp_deplibs="$deplib $tmp_deplibs" 7777*663afb9bSAndroid Build Coastguard Worker done 7778*663afb9bSAndroid Build Coastguard Worker deplibs=$tmp_deplibs 7779*663afb9bSAndroid Build Coastguard Worker fi 7780*663afb9bSAndroid Build Coastguard Worker 7781*663afb9bSAndroid Build Coastguard Worker if test lib,link = "$linkmode,$pass" || 7782*663afb9bSAndroid Build Coastguard Worker test prog,scan = "$linkmode,$pass"; then 7783*663afb9bSAndroid Build Coastguard Worker libs=$deplibs 7784*663afb9bSAndroid Build Coastguard Worker deplibs= 7785*663afb9bSAndroid Build Coastguard Worker fi 7786*663afb9bSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 7787*663afb9bSAndroid Build Coastguard Worker case $pass in 7788*663afb9bSAndroid Build Coastguard Worker dlopen) libs=$dlfiles ;; 7789*663afb9bSAndroid Build Coastguard Worker dlpreopen) libs=$dlprefiles ;; 7790*663afb9bSAndroid Build Coastguard Worker link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 7791*663afb9bSAndroid Build Coastguard Worker esac 7792*663afb9bSAndroid Build Coastguard Worker fi 7793*663afb9bSAndroid Build Coastguard Worker if test lib,dlpreopen = "$linkmode,$pass"; then 7794*663afb9bSAndroid Build Coastguard Worker # Collect and forward deplibs of preopened libtool libs 7795*663afb9bSAndroid Build Coastguard Worker for lib in $dlprefiles; do 7796*663afb9bSAndroid Build Coastguard Worker # Ignore non-libtool-libs 7797*663afb9bSAndroid Build Coastguard Worker dependency_libs= 7798*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$lib" 7799*663afb9bSAndroid Build Coastguard Worker case $lib in 7800*663afb9bSAndroid Build Coastguard Worker *.la) func_source "$func_resolve_sysroot_result" ;; 7801*663afb9bSAndroid Build Coastguard Worker esac 7802*663afb9bSAndroid Build Coastguard Worker 7803*663afb9bSAndroid Build Coastguard Worker # Collect preopened libtool deplibs, except any this library 7804*663afb9bSAndroid Build Coastguard Worker # has declared as weak libs 7805*663afb9bSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 7806*663afb9bSAndroid Build Coastguard Worker func_basename "$deplib" 7807*663afb9bSAndroid Build Coastguard Worker deplib_base=$func_basename_result 7808*663afb9bSAndroid Build Coastguard Worker case " $weak_libs " in 7809*663afb9bSAndroid Build Coastguard Worker *" $deplib_base "*) ;; 7810*663afb9bSAndroid Build Coastguard Worker *) func_append deplibs " $deplib" ;; 7811*663afb9bSAndroid Build Coastguard Worker esac 7812*663afb9bSAndroid Build Coastguard Worker done 7813*663afb9bSAndroid Build Coastguard Worker done 7814*663afb9bSAndroid Build Coastguard Worker libs=$dlprefiles 7815*663afb9bSAndroid Build Coastguard Worker fi 7816*663afb9bSAndroid Build Coastguard Worker if test dlopen = "$pass"; then 7817*663afb9bSAndroid Build Coastguard Worker # Collect dlpreopened libraries 7818*663afb9bSAndroid Build Coastguard Worker save_deplibs=$deplibs 7819*663afb9bSAndroid Build Coastguard Worker deplibs= 7820*663afb9bSAndroid Build Coastguard Worker fi 7821*663afb9bSAndroid Build Coastguard Worker 7822*663afb9bSAndroid Build Coastguard Worker for deplib in $libs; do 7823*663afb9bSAndroid Build Coastguard Worker lib= 7824*663afb9bSAndroid Build Coastguard Worker found=false 7825*663afb9bSAndroid Build Coastguard Worker case $deplib in 7826*663afb9bSAndroid Build Coastguard Worker -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7827*663afb9bSAndroid Build Coastguard Worker |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7828*663afb9bSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 7829*663afb9bSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 7830*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 7831*663afb9bSAndroid Build Coastguard Worker else 7832*663afb9bSAndroid Build Coastguard Worker func_append compiler_flags " $deplib" 7833*663afb9bSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 7834*663afb9bSAndroid Build Coastguard Worker case "$new_inherited_linker_flags " in 7835*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) ;; 7836*663afb9bSAndroid Build Coastguard Worker * ) func_append new_inherited_linker_flags " $deplib" ;; 7837*663afb9bSAndroid Build Coastguard Worker esac 7838*663afb9bSAndroid Build Coastguard Worker fi 7839*663afb9bSAndroid Build Coastguard Worker fi 7840*663afb9bSAndroid Build Coastguard Worker continue 7841*663afb9bSAndroid Build Coastguard Worker ;; 7842*663afb9bSAndroid Build Coastguard Worker -l*) 7843*663afb9bSAndroid Build Coastguard Worker if test lib != "$linkmode" && test prog != "$linkmode"; then 7844*663afb9bSAndroid Build Coastguard Worker func_warning "'-l' is ignored for archives/objects" 7845*663afb9bSAndroid Build Coastguard Worker continue 7846*663afb9bSAndroid Build Coastguard Worker fi 7847*663afb9bSAndroid Build Coastguard Worker func_stripname '-l' '' "$deplib" 7848*663afb9bSAndroid Build Coastguard Worker name=$func_stripname_result 7849*663afb9bSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 7850*663afb9bSAndroid Build Coastguard Worker searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7851*663afb9bSAndroid Build Coastguard Worker else 7852*663afb9bSAndroid Build Coastguard Worker searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7853*663afb9bSAndroid Build Coastguard Worker fi 7854*663afb9bSAndroid Build Coastguard Worker for searchdir in $searchdirs; do 7855*663afb9bSAndroid Build Coastguard Worker for search_ext in .la $std_shrext .so .a; do 7856*663afb9bSAndroid Build Coastguard Worker # Search the libtool library 7857*663afb9bSAndroid Build Coastguard Worker lib=$searchdir/lib$name$search_ext 7858*663afb9bSAndroid Build Coastguard Worker if test -f "$lib"; then 7859*663afb9bSAndroid Build Coastguard Worker if test .la = "$search_ext"; then 7860*663afb9bSAndroid Build Coastguard Worker found=: 7861*663afb9bSAndroid Build Coastguard Worker else 7862*663afb9bSAndroid Build Coastguard Worker found=false 7863*663afb9bSAndroid Build Coastguard Worker fi 7864*663afb9bSAndroid Build Coastguard Worker break 2 7865*663afb9bSAndroid Build Coastguard Worker fi 7866*663afb9bSAndroid Build Coastguard Worker done 7867*663afb9bSAndroid Build Coastguard Worker done 7868*663afb9bSAndroid Build Coastguard Worker if $found; then 7869*663afb9bSAndroid Build Coastguard Worker # deplib is a libtool library 7870*663afb9bSAndroid Build Coastguard Worker # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7871*663afb9bSAndroid Build Coastguard Worker # We need to do some special things here, and not later. 7872*663afb9bSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7873*663afb9bSAndroid Build Coastguard Worker case " $predeps $postdeps " in 7874*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) 7875*663afb9bSAndroid Build Coastguard Worker if func_lalib_p "$lib"; then 7876*663afb9bSAndroid Build Coastguard Worker library_names= 7877*663afb9bSAndroid Build Coastguard Worker old_library= 7878*663afb9bSAndroid Build Coastguard Worker func_source "$lib" 7879*663afb9bSAndroid Build Coastguard Worker for l in $old_library $library_names; do 7880*663afb9bSAndroid Build Coastguard Worker ll=$l 7881*663afb9bSAndroid Build Coastguard Worker done 7882*663afb9bSAndroid Build Coastguard Worker if test "X$ll" = "X$old_library"; then # only static version available 7883*663afb9bSAndroid Build Coastguard Worker found=false 7884*663afb9bSAndroid Build Coastguard Worker func_dirname "$lib" "" "." 7885*663afb9bSAndroid Build Coastguard Worker ladir=$func_dirname_result 7886*663afb9bSAndroid Build Coastguard Worker lib=$ladir/$old_library 7887*663afb9bSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 7888*663afb9bSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 7889*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 7890*663afb9bSAndroid Build Coastguard Worker else 7891*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7892*663afb9bSAndroid Build Coastguard Worker test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7893*663afb9bSAndroid Build Coastguard Worker fi 7894*663afb9bSAndroid Build Coastguard Worker continue 7895*663afb9bSAndroid Build Coastguard Worker fi 7896*663afb9bSAndroid Build Coastguard Worker fi 7897*663afb9bSAndroid Build Coastguard Worker ;; 7898*663afb9bSAndroid Build Coastguard Worker *) ;; 7899*663afb9bSAndroid Build Coastguard Worker esac 7900*663afb9bSAndroid Build Coastguard Worker fi 7901*663afb9bSAndroid Build Coastguard Worker else 7902*663afb9bSAndroid Build Coastguard Worker # deplib doesn't seem to be a libtool library 7903*663afb9bSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 7904*663afb9bSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 7905*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 7906*663afb9bSAndroid Build Coastguard Worker else 7907*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7908*663afb9bSAndroid Build Coastguard Worker test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7909*663afb9bSAndroid Build Coastguard Worker fi 7910*663afb9bSAndroid Build Coastguard Worker continue 7911*663afb9bSAndroid Build Coastguard Worker fi 7912*663afb9bSAndroid Build Coastguard Worker ;; # -l 7913*663afb9bSAndroid Build Coastguard Worker *.ltframework) 7914*663afb9bSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 7915*663afb9bSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 7916*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 7917*663afb9bSAndroid Build Coastguard Worker else 7918*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7919*663afb9bSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 7920*663afb9bSAndroid Build Coastguard Worker case "$new_inherited_linker_flags " in 7921*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) ;; 7922*663afb9bSAndroid Build Coastguard Worker * ) func_append new_inherited_linker_flags " $deplib" ;; 7923*663afb9bSAndroid Build Coastguard Worker esac 7924*663afb9bSAndroid Build Coastguard Worker fi 7925*663afb9bSAndroid Build Coastguard Worker fi 7926*663afb9bSAndroid Build Coastguard Worker continue 7927*663afb9bSAndroid Build Coastguard Worker ;; 7928*663afb9bSAndroid Build Coastguard Worker -L*) 7929*663afb9bSAndroid Build Coastguard Worker case $linkmode in 7930*663afb9bSAndroid Build Coastguard Worker lib) 7931*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7932*663afb9bSAndroid Build Coastguard Worker test conv = "$pass" && continue 7933*663afb9bSAndroid Build Coastguard Worker newdependency_libs="$deplib $newdependency_libs" 7934*663afb9bSAndroid Build Coastguard Worker func_stripname '-L' '' "$deplib" 7935*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 7936*663afb9bSAndroid Build Coastguard Worker func_append newlib_search_path " $func_resolve_sysroot_result" 7937*663afb9bSAndroid Build Coastguard Worker ;; 7938*663afb9bSAndroid Build Coastguard Worker prog) 7939*663afb9bSAndroid Build Coastguard Worker if test conv = "$pass"; then 7940*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7941*663afb9bSAndroid Build Coastguard Worker continue 7942*663afb9bSAndroid Build Coastguard Worker fi 7943*663afb9bSAndroid Build Coastguard Worker if test scan = "$pass"; then 7944*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7945*663afb9bSAndroid Build Coastguard Worker else 7946*663afb9bSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 7947*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 7948*663afb9bSAndroid Build Coastguard Worker fi 7949*663afb9bSAndroid Build Coastguard Worker func_stripname '-L' '' "$deplib" 7950*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 7951*663afb9bSAndroid Build Coastguard Worker func_append newlib_search_path " $func_resolve_sysroot_result" 7952*663afb9bSAndroid Build Coastguard Worker ;; 7953*663afb9bSAndroid Build Coastguard Worker *) 7954*663afb9bSAndroid Build Coastguard Worker func_warning "'-L' is ignored for archives/objects" 7955*663afb9bSAndroid Build Coastguard Worker ;; 7956*663afb9bSAndroid Build Coastguard Worker esac # linkmode 7957*663afb9bSAndroid Build Coastguard Worker continue 7958*663afb9bSAndroid Build Coastguard Worker ;; # -L 7959*663afb9bSAndroid Build Coastguard Worker -R*) 7960*663afb9bSAndroid Build Coastguard Worker if test link = "$pass"; then 7961*663afb9bSAndroid Build Coastguard Worker func_stripname '-R' '' "$deplib" 7962*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 7963*663afb9bSAndroid Build Coastguard Worker dir=$func_resolve_sysroot_result 7964*663afb9bSAndroid Build Coastguard Worker # Make sure the xrpath contains only unique directories. 7965*663afb9bSAndroid Build Coastguard Worker case "$xrpath " in 7966*663afb9bSAndroid Build Coastguard Worker *" $dir "*) ;; 7967*663afb9bSAndroid Build Coastguard Worker *) func_append xrpath " $dir" ;; 7968*663afb9bSAndroid Build Coastguard Worker esac 7969*663afb9bSAndroid Build Coastguard Worker fi 7970*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7971*663afb9bSAndroid Build Coastguard Worker continue 7972*663afb9bSAndroid Build Coastguard Worker ;; 7973*663afb9bSAndroid Build Coastguard Worker *.la) 7974*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$deplib" 7975*663afb9bSAndroid Build Coastguard Worker lib=$func_resolve_sysroot_result 7976*663afb9bSAndroid Build Coastguard Worker ;; 7977*663afb9bSAndroid Build Coastguard Worker *.$libext) 7978*663afb9bSAndroid Build Coastguard Worker if test conv = "$pass"; then 7979*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 7980*663afb9bSAndroid Build Coastguard Worker continue 7981*663afb9bSAndroid Build Coastguard Worker fi 7982*663afb9bSAndroid Build Coastguard Worker case $linkmode in 7983*663afb9bSAndroid Build Coastguard Worker lib) 7984*663afb9bSAndroid Build Coastguard Worker # Linking convenience modules into shared libraries is allowed, 7985*663afb9bSAndroid Build Coastguard Worker # but linking other static libraries is non-portable. 7986*663afb9bSAndroid Build Coastguard Worker case " $dlpreconveniencelibs " in 7987*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) ;; 7988*663afb9bSAndroid Build Coastguard Worker *) 7989*663afb9bSAndroid Build Coastguard Worker valid_a_lib=false 7990*663afb9bSAndroid Build Coastguard Worker case $deplibs_check_method in 7991*663afb9bSAndroid Build Coastguard Worker match_pattern*) 7992*663afb9bSAndroid Build Coastguard Worker set dummy $deplibs_check_method; shift 7993*663afb9bSAndroid Build Coastguard Worker match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7994*663afb9bSAndroid Build Coastguard Worker if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 7995*663afb9bSAndroid Build Coastguard Worker | $EGREP "$match_pattern_regex" > /dev/null; then 7996*663afb9bSAndroid Build Coastguard Worker valid_a_lib=: 7997*663afb9bSAndroid Build Coastguard Worker fi 7998*663afb9bSAndroid Build Coastguard Worker ;; 7999*663afb9bSAndroid Build Coastguard Worker pass_all) 8000*663afb9bSAndroid Build Coastguard Worker valid_a_lib=: 8001*663afb9bSAndroid Build Coastguard Worker ;; 8002*663afb9bSAndroid Build Coastguard Worker esac 8003*663afb9bSAndroid Build Coastguard Worker if $valid_a_lib; then 8004*663afb9bSAndroid Build Coastguard Worker echo 8005*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the shared library $output against the" 8006*663afb9bSAndroid Build Coastguard Worker $ECHO "*** static library $deplib is not portable!" 8007*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8008*663afb9bSAndroid Build Coastguard Worker else 8009*663afb9bSAndroid Build Coastguard Worker echo 8010*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: Trying to link with static lib archive $deplib." 8011*663afb9bSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 8012*663afb9bSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 8013*663afb9bSAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 8014*663afb9bSAndroid Build Coastguard Worker echo "*** because the file extensions .$libext of this argument makes me believe" 8015*663afb9bSAndroid Build Coastguard Worker echo "*** that it is just a static archive that I should not use here." 8016*663afb9bSAndroid Build Coastguard Worker fi 8017*663afb9bSAndroid Build Coastguard Worker ;; 8018*663afb9bSAndroid Build Coastguard Worker esac 8019*663afb9bSAndroid Build Coastguard Worker continue 8020*663afb9bSAndroid Build Coastguard Worker ;; 8021*663afb9bSAndroid Build Coastguard Worker prog) 8022*663afb9bSAndroid Build Coastguard Worker if test link != "$pass"; then 8023*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8024*663afb9bSAndroid Build Coastguard Worker else 8025*663afb9bSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 8026*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 8027*663afb9bSAndroid Build Coastguard Worker fi 8028*663afb9bSAndroid Build Coastguard Worker continue 8029*663afb9bSAndroid Build Coastguard Worker ;; 8030*663afb9bSAndroid Build Coastguard Worker esac # linkmode 8031*663afb9bSAndroid Build Coastguard Worker ;; # *.$libext 8032*663afb9bSAndroid Build Coastguard Worker *.lo | *.$objext) 8033*663afb9bSAndroid Build Coastguard Worker if test conv = "$pass"; then 8034*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8035*663afb9bSAndroid Build Coastguard Worker elif test prog = "$linkmode"; then 8036*663afb9bSAndroid Build Coastguard Worker if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 8037*663afb9bSAndroid Build Coastguard Worker # If there is no dlopen support or we're linking statically, 8038*663afb9bSAndroid Build Coastguard Worker # we need to preload. 8039*663afb9bSAndroid Build Coastguard Worker func_append newdlprefiles " $deplib" 8040*663afb9bSAndroid Build Coastguard Worker compile_deplibs="$deplib $compile_deplibs" 8041*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="$deplib $finalize_deplibs" 8042*663afb9bSAndroid Build Coastguard Worker else 8043*663afb9bSAndroid Build Coastguard Worker func_append newdlfiles " $deplib" 8044*663afb9bSAndroid Build Coastguard Worker fi 8045*663afb9bSAndroid Build Coastguard Worker fi 8046*663afb9bSAndroid Build Coastguard Worker continue 8047*663afb9bSAndroid Build Coastguard Worker ;; 8048*663afb9bSAndroid Build Coastguard Worker %DEPLIBS%) 8049*663afb9bSAndroid Build Coastguard Worker alldeplibs=: 8050*663afb9bSAndroid Build Coastguard Worker continue 8051*663afb9bSAndroid Build Coastguard Worker ;; 8052*663afb9bSAndroid Build Coastguard Worker esac # case $deplib 8053*663afb9bSAndroid Build Coastguard Worker 8054*663afb9bSAndroid Build Coastguard Worker $found || test -f "$lib" \ 8055*663afb9bSAndroid Build Coastguard Worker || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 8056*663afb9bSAndroid Build Coastguard Worker 8057*663afb9bSAndroid Build Coastguard Worker # Check to see that this really is a libtool archive. 8058*663afb9bSAndroid Build Coastguard Worker func_lalib_unsafe_p "$lib" \ 8059*663afb9bSAndroid Build Coastguard Worker || func_fatal_error "'$lib' is not a valid libtool archive" 8060*663afb9bSAndroid Build Coastguard Worker 8061*663afb9bSAndroid Build Coastguard Worker func_dirname "$lib" "" "." 8062*663afb9bSAndroid Build Coastguard Worker ladir=$func_dirname_result 8063*663afb9bSAndroid Build Coastguard Worker 8064*663afb9bSAndroid Build Coastguard Worker dlname= 8065*663afb9bSAndroid Build Coastguard Worker dlopen= 8066*663afb9bSAndroid Build Coastguard Worker dlpreopen= 8067*663afb9bSAndroid Build Coastguard Worker libdir= 8068*663afb9bSAndroid Build Coastguard Worker library_names= 8069*663afb9bSAndroid Build Coastguard Worker old_library= 8070*663afb9bSAndroid Build Coastguard Worker inherited_linker_flags= 8071*663afb9bSAndroid Build Coastguard Worker # If the library was installed with an old release of libtool, 8072*663afb9bSAndroid Build Coastguard Worker # it will not redefine variables installed, or shouldnotlink 8073*663afb9bSAndroid Build Coastguard Worker installed=yes 8074*663afb9bSAndroid Build Coastguard Worker shouldnotlink=no 8075*663afb9bSAndroid Build Coastguard Worker avoidtemprpath= 8076*663afb9bSAndroid Build Coastguard Worker 8077*663afb9bSAndroid Build Coastguard Worker 8078*663afb9bSAndroid Build Coastguard Worker # Read the .la file 8079*663afb9bSAndroid Build Coastguard Worker func_source "$lib" 8080*663afb9bSAndroid Build Coastguard Worker 8081*663afb9bSAndroid Build Coastguard Worker # Convert "-framework foo" to "foo.ltframework" 8082*663afb9bSAndroid Build Coastguard Worker if test -n "$inherited_linker_flags"; then 8083*663afb9bSAndroid Build Coastguard Worker tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 8084*663afb9bSAndroid Build Coastguard Worker for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 8085*663afb9bSAndroid Build Coastguard Worker case " $new_inherited_linker_flags " in 8086*663afb9bSAndroid Build Coastguard Worker *" $tmp_inherited_linker_flag "*) ;; 8087*663afb9bSAndroid Build Coastguard Worker *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 8088*663afb9bSAndroid Build Coastguard Worker esac 8089*663afb9bSAndroid Build Coastguard Worker done 8090*663afb9bSAndroid Build Coastguard Worker fi 8091*663afb9bSAndroid Build Coastguard Worker dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8092*663afb9bSAndroid Build Coastguard Worker if test lib,link = "$linkmode,$pass" || 8093*663afb9bSAndroid Build Coastguard Worker test prog,scan = "$linkmode,$pass" || 8094*663afb9bSAndroid Build Coastguard Worker { test prog != "$linkmode" && test lib != "$linkmode"; }; then 8095*663afb9bSAndroid Build Coastguard Worker test -n "$dlopen" && func_append dlfiles " $dlopen" 8096*663afb9bSAndroid Build Coastguard Worker test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 8097*663afb9bSAndroid Build Coastguard Worker fi 8098*663afb9bSAndroid Build Coastguard Worker 8099*663afb9bSAndroid Build Coastguard Worker if test conv = "$pass"; then 8100*663afb9bSAndroid Build Coastguard Worker # Only check for convenience libraries 8101*663afb9bSAndroid Build Coastguard Worker deplibs="$lib $deplibs" 8102*663afb9bSAndroid Build Coastguard Worker if test -z "$libdir"; then 8103*663afb9bSAndroid Build Coastguard Worker if test -z "$old_library"; then 8104*663afb9bSAndroid Build Coastguard Worker func_fatal_error "cannot find name of link library for '$lib'" 8105*663afb9bSAndroid Build Coastguard Worker fi 8106*663afb9bSAndroid Build Coastguard Worker # It is a libtool convenience library, so add in its objects. 8107*663afb9bSAndroid Build Coastguard Worker func_append convenience " $ladir/$objdir/$old_library" 8108*663afb9bSAndroid Build Coastguard Worker func_append old_convenience " $ladir/$objdir/$old_library" 8109*663afb9bSAndroid Build Coastguard Worker elif test prog != "$linkmode" && test lib != "$linkmode"; then 8110*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$lib' is not a convenience library" 8111*663afb9bSAndroid Build Coastguard Worker fi 8112*663afb9bSAndroid Build Coastguard Worker tmp_libs= 8113*663afb9bSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 8114*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8115*663afb9bSAndroid Build Coastguard Worker if $opt_preserve_dup_deps; then 8116*663afb9bSAndroid Build Coastguard Worker case "$tmp_libs " in 8117*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8118*663afb9bSAndroid Build Coastguard Worker esac 8119*663afb9bSAndroid Build Coastguard Worker fi 8120*663afb9bSAndroid Build Coastguard Worker func_append tmp_libs " $deplib" 8121*663afb9bSAndroid Build Coastguard Worker done 8122*663afb9bSAndroid Build Coastguard Worker continue 8123*663afb9bSAndroid Build Coastguard Worker fi # $pass = conv 8124*663afb9bSAndroid Build Coastguard Worker 8125*663afb9bSAndroid Build Coastguard Worker 8126*663afb9bSAndroid Build Coastguard Worker # Get the name of the library we link against. 8127*663afb9bSAndroid Build Coastguard Worker linklib= 8128*663afb9bSAndroid Build Coastguard Worker if test -n "$old_library" && 8129*663afb9bSAndroid Build Coastguard Worker { test yes = "$prefer_static_libs" || 8130*663afb9bSAndroid Build Coastguard Worker test built,no = "$prefer_static_libs,$installed"; }; then 8131*663afb9bSAndroid Build Coastguard Worker linklib=$old_library 8132*663afb9bSAndroid Build Coastguard Worker else 8133*663afb9bSAndroid Build Coastguard Worker for l in $old_library $library_names; do 8134*663afb9bSAndroid Build Coastguard Worker linklib=$l 8135*663afb9bSAndroid Build Coastguard Worker done 8136*663afb9bSAndroid Build Coastguard Worker fi 8137*663afb9bSAndroid Build Coastguard Worker if test -z "$linklib"; then 8138*663afb9bSAndroid Build Coastguard Worker func_fatal_error "cannot find name of link library for '$lib'" 8139*663afb9bSAndroid Build Coastguard Worker fi 8140*663afb9bSAndroid Build Coastguard Worker 8141*663afb9bSAndroid Build Coastguard Worker # This library was specified with -dlopen. 8142*663afb9bSAndroid Build Coastguard Worker if test dlopen = "$pass"; then 8143*663afb9bSAndroid Build Coastguard Worker test -z "$libdir" \ 8144*663afb9bSAndroid Build Coastguard Worker && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 8145*663afb9bSAndroid Build Coastguard Worker if test -z "$dlname" || 8146*663afb9bSAndroid Build Coastguard Worker test yes != "$dlopen_support" || 8147*663afb9bSAndroid Build Coastguard Worker test no = "$build_libtool_libs" 8148*663afb9bSAndroid Build Coastguard Worker then 8149*663afb9bSAndroid Build Coastguard Worker # If there is no dlname, no dlopen support or we're linking 8150*663afb9bSAndroid Build Coastguard Worker # statically, we need to preload. We also need to preload any 8151*663afb9bSAndroid Build Coastguard Worker # dependent libraries so libltdl's deplib preloader doesn't 8152*663afb9bSAndroid Build Coastguard Worker # bomb out in the load deplibs phase. 8153*663afb9bSAndroid Build Coastguard Worker func_append dlprefiles " $lib $dependency_libs" 8154*663afb9bSAndroid Build Coastguard Worker else 8155*663afb9bSAndroid Build Coastguard Worker func_append newdlfiles " $lib" 8156*663afb9bSAndroid Build Coastguard Worker fi 8157*663afb9bSAndroid Build Coastguard Worker continue 8158*663afb9bSAndroid Build Coastguard Worker fi # $pass = dlopen 8159*663afb9bSAndroid Build Coastguard Worker 8160*663afb9bSAndroid Build Coastguard Worker # We need an absolute path. 8161*663afb9bSAndroid Build Coastguard Worker case $ladir in 8162*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 8163*663afb9bSAndroid Build Coastguard Worker *) 8164*663afb9bSAndroid Build Coastguard Worker abs_ladir=`cd "$ladir" && pwd` 8165*663afb9bSAndroid Build Coastguard Worker if test -z "$abs_ladir"; then 8166*663afb9bSAndroid Build Coastguard Worker func_warning "cannot determine absolute directory name of '$ladir'" 8167*663afb9bSAndroid Build Coastguard Worker func_warning "passing it literally to the linker, although it might fail" 8168*663afb9bSAndroid Build Coastguard Worker abs_ladir=$ladir 8169*663afb9bSAndroid Build Coastguard Worker fi 8170*663afb9bSAndroid Build Coastguard Worker ;; 8171*663afb9bSAndroid Build Coastguard Worker esac 8172*663afb9bSAndroid Build Coastguard Worker func_basename "$lib" 8173*663afb9bSAndroid Build Coastguard Worker laname=$func_basename_result 8174*663afb9bSAndroid Build Coastguard Worker 8175*663afb9bSAndroid Build Coastguard Worker # Find the relevant object directory and library name. 8176*663afb9bSAndroid Build Coastguard Worker if test yes = "$installed"; then 8177*663afb9bSAndroid Build Coastguard Worker if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8178*663afb9bSAndroid Build Coastguard Worker func_warning "library '$lib' was moved." 8179*663afb9bSAndroid Build Coastguard Worker dir=$ladir 8180*663afb9bSAndroid Build Coastguard Worker absdir=$abs_ladir 8181*663afb9bSAndroid Build Coastguard Worker libdir=$abs_ladir 8182*663afb9bSAndroid Build Coastguard Worker else 8183*663afb9bSAndroid Build Coastguard Worker dir=$lt_sysroot$libdir 8184*663afb9bSAndroid Build Coastguard Worker absdir=$lt_sysroot$libdir 8185*663afb9bSAndroid Build Coastguard Worker fi 8186*663afb9bSAndroid Build Coastguard Worker test yes = "$hardcode_automatic" && avoidtemprpath=yes 8187*663afb9bSAndroid Build Coastguard Worker else 8188*663afb9bSAndroid Build Coastguard Worker if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8189*663afb9bSAndroid Build Coastguard Worker dir=$ladir 8190*663afb9bSAndroid Build Coastguard Worker absdir=$abs_ladir 8191*663afb9bSAndroid Build Coastguard Worker # Remove this search path later 8192*663afb9bSAndroid Build Coastguard Worker func_append notinst_path " $abs_ladir" 8193*663afb9bSAndroid Build Coastguard Worker else 8194*663afb9bSAndroid Build Coastguard Worker dir=$ladir/$objdir 8195*663afb9bSAndroid Build Coastguard Worker absdir=$abs_ladir/$objdir 8196*663afb9bSAndroid Build Coastguard Worker # Remove this search path later 8197*663afb9bSAndroid Build Coastguard Worker func_append notinst_path " $abs_ladir" 8198*663afb9bSAndroid Build Coastguard Worker fi 8199*663afb9bSAndroid Build Coastguard Worker fi # $installed = yes 8200*663afb9bSAndroid Build Coastguard Worker func_stripname 'lib' '.la' "$laname" 8201*663afb9bSAndroid Build Coastguard Worker name=$func_stripname_result 8202*663afb9bSAndroid Build Coastguard Worker 8203*663afb9bSAndroid Build Coastguard Worker # This library was specified with -dlpreopen. 8204*663afb9bSAndroid Build Coastguard Worker if test dlpreopen = "$pass"; then 8205*663afb9bSAndroid Build Coastguard Worker if test -z "$libdir" && test prog = "$linkmode"; then 8206*663afb9bSAndroid Build Coastguard Worker func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 8207*663afb9bSAndroid Build Coastguard Worker fi 8208*663afb9bSAndroid Build Coastguard Worker case $host in 8209*663afb9bSAndroid Build Coastguard Worker # special handling for platforms with PE-DLLs. 8210*663afb9bSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* ) 8211*663afb9bSAndroid Build Coastguard Worker # Linker will automatically link against shared library if both 8212*663afb9bSAndroid Build Coastguard Worker # static and shared are present. Therefore, ensure we extract 8213*663afb9bSAndroid Build Coastguard Worker # symbols from the import library if a shared library is present 8214*663afb9bSAndroid Build Coastguard Worker # (otherwise, the dlopen module name will be incorrect). We do 8215*663afb9bSAndroid Build Coastguard Worker # this by putting the import library name into $newdlprefiles. 8216*663afb9bSAndroid Build Coastguard Worker # We recover the dlopen module name by 'saving' the la file 8217*663afb9bSAndroid Build Coastguard Worker # name in a special purpose variable, and (later) extracting the 8218*663afb9bSAndroid Build Coastguard Worker # dlname from the la file. 8219*663afb9bSAndroid Build Coastguard Worker if test -n "$dlname"; then 8220*663afb9bSAndroid Build Coastguard Worker func_tr_sh "$dir/$linklib" 8221*663afb9bSAndroid Build Coastguard Worker eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8222*663afb9bSAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$linklib" 8223*663afb9bSAndroid Build Coastguard Worker else 8224*663afb9bSAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$old_library" 8225*663afb9bSAndroid Build Coastguard Worker # Keep a list of preopened convenience libraries to check 8226*663afb9bSAndroid Build Coastguard Worker # that they are being used correctly in the link pass. 8227*663afb9bSAndroid Build Coastguard Worker test -z "$libdir" && \ 8228*663afb9bSAndroid Build Coastguard Worker func_append dlpreconveniencelibs " $dir/$old_library" 8229*663afb9bSAndroid Build Coastguard Worker fi 8230*663afb9bSAndroid Build Coastguard Worker ;; 8231*663afb9bSAndroid Build Coastguard Worker * ) 8232*663afb9bSAndroid Build Coastguard Worker # Prefer using a static library (so that no silly _DYNAMIC symbols 8233*663afb9bSAndroid Build Coastguard Worker # are required to link). 8234*663afb9bSAndroid Build Coastguard Worker if test -n "$old_library"; then 8235*663afb9bSAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$old_library" 8236*663afb9bSAndroid Build Coastguard Worker # Keep a list of preopened convenience libraries to check 8237*663afb9bSAndroid Build Coastguard Worker # that they are being used correctly in the link pass. 8238*663afb9bSAndroid Build Coastguard Worker test -z "$libdir" && \ 8239*663afb9bSAndroid Build Coastguard Worker func_append dlpreconveniencelibs " $dir/$old_library" 8240*663afb9bSAndroid Build Coastguard Worker # Otherwise, use the dlname, so that lt_dlopen finds it. 8241*663afb9bSAndroid Build Coastguard Worker elif test -n "$dlname"; then 8242*663afb9bSAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$dlname" 8243*663afb9bSAndroid Build Coastguard Worker else 8244*663afb9bSAndroid Build Coastguard Worker func_append newdlprefiles " $dir/$linklib" 8245*663afb9bSAndroid Build Coastguard Worker fi 8246*663afb9bSAndroid Build Coastguard Worker ;; 8247*663afb9bSAndroid Build Coastguard Worker esac 8248*663afb9bSAndroid Build Coastguard Worker fi # $pass = dlpreopen 8249*663afb9bSAndroid Build Coastguard Worker 8250*663afb9bSAndroid Build Coastguard Worker if test -z "$libdir"; then 8251*663afb9bSAndroid Build Coastguard Worker # Link the convenience library 8252*663afb9bSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 8253*663afb9bSAndroid Build Coastguard Worker deplibs="$dir/$old_library $deplibs" 8254*663afb9bSAndroid Build Coastguard Worker elif test prog,link = "$linkmode,$pass"; then 8255*663afb9bSAndroid Build Coastguard Worker compile_deplibs="$dir/$old_library $compile_deplibs" 8256*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="$dir/$old_library $finalize_deplibs" 8257*663afb9bSAndroid Build Coastguard Worker else 8258*663afb9bSAndroid Build Coastguard Worker deplibs="$lib $deplibs" # used for prog,scan pass 8259*663afb9bSAndroid Build Coastguard Worker fi 8260*663afb9bSAndroid Build Coastguard Worker continue 8261*663afb9bSAndroid Build Coastguard Worker fi 8262*663afb9bSAndroid Build Coastguard Worker 8263*663afb9bSAndroid Build Coastguard Worker 8264*663afb9bSAndroid Build Coastguard Worker if test prog = "$linkmode" && test link != "$pass"; then 8265*663afb9bSAndroid Build Coastguard Worker func_append newlib_search_path " $ladir" 8266*663afb9bSAndroid Build Coastguard Worker deplibs="$lib $deplibs" 8267*663afb9bSAndroid Build Coastguard Worker 8268*663afb9bSAndroid Build Coastguard Worker linkalldeplibs=false 8269*663afb9bSAndroid Build Coastguard Worker if test no != "$link_all_deplibs" || test -z "$library_names" || 8270*663afb9bSAndroid Build Coastguard Worker test no = "$build_libtool_libs"; then 8271*663afb9bSAndroid Build Coastguard Worker linkalldeplibs=: 8272*663afb9bSAndroid Build Coastguard Worker fi 8273*663afb9bSAndroid Build Coastguard Worker 8274*663afb9bSAndroid Build Coastguard Worker tmp_libs= 8275*663afb9bSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 8276*663afb9bSAndroid Build Coastguard Worker case $deplib in 8277*663afb9bSAndroid Build Coastguard Worker -L*) func_stripname '-L' '' "$deplib" 8278*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result" 8279*663afb9bSAndroid Build Coastguard Worker func_append newlib_search_path " $func_resolve_sysroot_result" 8280*663afb9bSAndroid Build Coastguard Worker ;; 8281*663afb9bSAndroid Build Coastguard Worker esac 8282*663afb9bSAndroid Build Coastguard Worker # Need to link against all dependency_libs? 8283*663afb9bSAndroid Build Coastguard Worker if $linkalldeplibs; then 8284*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8285*663afb9bSAndroid Build Coastguard Worker else 8286*663afb9bSAndroid Build Coastguard Worker # Need to hardcode shared library paths 8287*663afb9bSAndroid Build Coastguard Worker # or/and link against static libraries 8288*663afb9bSAndroid Build Coastguard Worker newdependency_libs="$deplib $newdependency_libs" 8289*663afb9bSAndroid Build Coastguard Worker fi 8290*663afb9bSAndroid Build Coastguard Worker if $opt_preserve_dup_deps; then 8291*663afb9bSAndroid Build Coastguard Worker case "$tmp_libs " in 8292*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8293*663afb9bSAndroid Build Coastguard Worker esac 8294*663afb9bSAndroid Build Coastguard Worker fi 8295*663afb9bSAndroid Build Coastguard Worker func_append tmp_libs " $deplib" 8296*663afb9bSAndroid Build Coastguard Worker done # for deplib 8297*663afb9bSAndroid Build Coastguard Worker continue 8298*663afb9bSAndroid Build Coastguard Worker fi # $linkmode = prog... 8299*663afb9bSAndroid Build Coastguard Worker 8300*663afb9bSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 8301*663afb9bSAndroid Build Coastguard Worker if test -n "$library_names" && 8302*663afb9bSAndroid Build Coastguard Worker { { test no = "$prefer_static_libs" || 8303*663afb9bSAndroid Build Coastguard Worker test built,yes = "$prefer_static_libs,$installed"; } || 8304*663afb9bSAndroid Build Coastguard Worker test -z "$old_library"; }; then 8305*663afb9bSAndroid Build Coastguard Worker # We need to hardcode the library path 8306*663afb9bSAndroid Build Coastguard Worker if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8307*663afb9bSAndroid Build Coastguard Worker # Make sure the rpath contains only unique directories. 8308*663afb9bSAndroid Build Coastguard Worker case $temp_rpath: in 8309*663afb9bSAndroid Build Coastguard Worker *"$absdir:"*) ;; 8310*663afb9bSAndroid Build Coastguard Worker *) func_append temp_rpath "$absdir:" ;; 8311*663afb9bSAndroid Build Coastguard Worker esac 8312*663afb9bSAndroid Build Coastguard Worker fi 8313*663afb9bSAndroid Build Coastguard Worker 8314*663afb9bSAndroid Build Coastguard Worker # Hardcode the library path. 8315*663afb9bSAndroid Build Coastguard Worker # Skip directories that are in the system default run-time 8316*663afb9bSAndroid Build Coastguard Worker # search path. 8317*663afb9bSAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 8318*663afb9bSAndroid Build Coastguard Worker *" $absdir "*) ;; 8319*663afb9bSAndroid Build Coastguard Worker *) 8320*663afb9bSAndroid Build Coastguard Worker case "$compile_rpath " in 8321*663afb9bSAndroid Build Coastguard Worker *" $absdir "*) ;; 8322*663afb9bSAndroid Build Coastguard Worker *) func_append compile_rpath " $absdir" ;; 8323*663afb9bSAndroid Build Coastguard Worker esac 8324*663afb9bSAndroid Build Coastguard Worker ;; 8325*663afb9bSAndroid Build Coastguard Worker esac 8326*663afb9bSAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 8327*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 8328*663afb9bSAndroid Build Coastguard Worker *) 8329*663afb9bSAndroid Build Coastguard Worker case "$finalize_rpath " in 8330*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 8331*663afb9bSAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 8332*663afb9bSAndroid Build Coastguard Worker esac 8333*663afb9bSAndroid Build Coastguard Worker ;; 8334*663afb9bSAndroid Build Coastguard Worker esac 8335*663afb9bSAndroid Build Coastguard Worker fi # $linkmode,$pass = prog,link... 8336*663afb9bSAndroid Build Coastguard Worker 8337*663afb9bSAndroid Build Coastguard Worker if $alldeplibs && 8338*663afb9bSAndroid Build Coastguard Worker { test pass_all = "$deplibs_check_method" || 8339*663afb9bSAndroid Build Coastguard Worker { test yes = "$build_libtool_libs" && 8340*663afb9bSAndroid Build Coastguard Worker test -n "$library_names"; }; }; then 8341*663afb9bSAndroid Build Coastguard Worker # We only need to search for static libraries 8342*663afb9bSAndroid Build Coastguard Worker continue 8343*663afb9bSAndroid Build Coastguard Worker fi 8344*663afb9bSAndroid Build Coastguard Worker fi 8345*663afb9bSAndroid Build Coastguard Worker 8346*663afb9bSAndroid Build Coastguard Worker link_static=no # Whether the deplib will be linked statically 8347*663afb9bSAndroid Build Coastguard Worker use_static_libs=$prefer_static_libs 8348*663afb9bSAndroid Build Coastguard Worker if test built = "$use_static_libs" && test yes = "$installed"; then 8349*663afb9bSAndroid Build Coastguard Worker use_static_libs=no 8350*663afb9bSAndroid Build Coastguard Worker fi 8351*663afb9bSAndroid Build Coastguard Worker if test -n "$library_names" && 8352*663afb9bSAndroid Build Coastguard Worker { test no = "$use_static_libs" || test -z "$old_library"; }; then 8353*663afb9bSAndroid Build Coastguard Worker case $host in 8354*663afb9bSAndroid Build Coastguard Worker *cygwin* | *mingw* | *cegcc* | *os2*) 8355*663afb9bSAndroid Build Coastguard Worker # No point in relinking DLLs because paths are not encoded 8356*663afb9bSAndroid Build Coastguard Worker func_append notinst_deplibs " $lib" 8357*663afb9bSAndroid Build Coastguard Worker need_relink=no 8358*663afb9bSAndroid Build Coastguard Worker ;; 8359*663afb9bSAndroid Build Coastguard Worker *) 8360*663afb9bSAndroid Build Coastguard Worker if test no = "$installed"; then 8361*663afb9bSAndroid Build Coastguard Worker func_append notinst_deplibs " $lib" 8362*663afb9bSAndroid Build Coastguard Worker need_relink=yes 8363*663afb9bSAndroid Build Coastguard Worker fi 8364*663afb9bSAndroid Build Coastguard Worker ;; 8365*663afb9bSAndroid Build Coastguard Worker esac 8366*663afb9bSAndroid Build Coastguard Worker # This is a shared library 8367*663afb9bSAndroid Build Coastguard Worker 8368*663afb9bSAndroid Build Coastguard Worker # Warn about portability, can't link against -module's on some 8369*663afb9bSAndroid Build Coastguard Worker # systems (darwin). Don't bleat about dlopened modules though! 8370*663afb9bSAndroid Build Coastguard Worker dlopenmodule= 8371*663afb9bSAndroid Build Coastguard Worker for dlpremoduletest in $dlprefiles; do 8372*663afb9bSAndroid Build Coastguard Worker if test "X$dlpremoduletest" = "X$lib"; then 8373*663afb9bSAndroid Build Coastguard Worker dlopenmodule=$dlpremoduletest 8374*663afb9bSAndroid Build Coastguard Worker break 8375*663afb9bSAndroid Build Coastguard Worker fi 8376*663afb9bSAndroid Build Coastguard Worker done 8377*663afb9bSAndroid Build Coastguard Worker if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8378*663afb9bSAndroid Build Coastguard Worker echo 8379*663afb9bSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 8380*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the executable $output against the loadable module" 8381*663afb9bSAndroid Build Coastguard Worker else 8382*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8383*663afb9bSAndroid Build Coastguard Worker fi 8384*663afb9bSAndroid Build Coastguard Worker $ECHO "*** $linklib is not portable!" 8385*663afb9bSAndroid Build Coastguard Worker fi 8386*663afb9bSAndroid Build Coastguard Worker if test lib = "$linkmode" && 8387*663afb9bSAndroid Build Coastguard Worker test yes = "$hardcode_into_libs"; then 8388*663afb9bSAndroid Build Coastguard Worker # Hardcode the library path. 8389*663afb9bSAndroid Build Coastguard Worker # Skip directories that are in the system default run-time 8390*663afb9bSAndroid Build Coastguard Worker # search path. 8391*663afb9bSAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 8392*663afb9bSAndroid Build Coastguard Worker *" $absdir "*) ;; 8393*663afb9bSAndroid Build Coastguard Worker *) 8394*663afb9bSAndroid Build Coastguard Worker case "$compile_rpath " in 8395*663afb9bSAndroid Build Coastguard Worker *" $absdir "*) ;; 8396*663afb9bSAndroid Build Coastguard Worker *) func_append compile_rpath " $absdir" ;; 8397*663afb9bSAndroid Build Coastguard Worker esac 8398*663afb9bSAndroid Build Coastguard Worker ;; 8399*663afb9bSAndroid Build Coastguard Worker esac 8400*663afb9bSAndroid Build Coastguard Worker case " $sys_lib_dlsearch_path " in 8401*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 8402*663afb9bSAndroid Build Coastguard Worker *) 8403*663afb9bSAndroid Build Coastguard Worker case "$finalize_rpath " in 8404*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 8405*663afb9bSAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 8406*663afb9bSAndroid Build Coastguard Worker esac 8407*663afb9bSAndroid Build Coastguard Worker ;; 8408*663afb9bSAndroid Build Coastguard Worker esac 8409*663afb9bSAndroid Build Coastguard Worker fi 8410*663afb9bSAndroid Build Coastguard Worker 8411*663afb9bSAndroid Build Coastguard Worker if test -n "$old_archive_from_expsyms_cmds"; then 8412*663afb9bSAndroid Build Coastguard Worker # figure out the soname 8413*663afb9bSAndroid Build Coastguard Worker set dummy $library_names 8414*663afb9bSAndroid Build Coastguard Worker shift 8415*663afb9bSAndroid Build Coastguard Worker realname=$1 8416*663afb9bSAndroid Build Coastguard Worker shift 8417*663afb9bSAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 8418*663afb9bSAndroid Build Coastguard Worker # use dlname if we got it. it's perfectly good, no? 8419*663afb9bSAndroid Build Coastguard Worker if test -n "$dlname"; then 8420*663afb9bSAndroid Build Coastguard Worker soname=$dlname 8421*663afb9bSAndroid Build Coastguard Worker elif test -n "$soname_spec"; then 8422*663afb9bSAndroid Build Coastguard Worker # bleh windows 8423*663afb9bSAndroid Build Coastguard Worker case $host in 8424*663afb9bSAndroid Build Coastguard Worker *cygwin* | mingw* | *cegcc* | *os2*) 8425*663afb9bSAndroid Build Coastguard Worker func_arith $current - $age 8426*663afb9bSAndroid Build Coastguard Worker major=$func_arith_result 8427*663afb9bSAndroid Build Coastguard Worker versuffix=-$major 8428*663afb9bSAndroid Build Coastguard Worker ;; 8429*663afb9bSAndroid Build Coastguard Worker esac 8430*663afb9bSAndroid Build Coastguard Worker eval soname=\"$soname_spec\" 8431*663afb9bSAndroid Build Coastguard Worker else 8432*663afb9bSAndroid Build Coastguard Worker soname=$realname 8433*663afb9bSAndroid Build Coastguard Worker fi 8434*663afb9bSAndroid Build Coastguard Worker 8435*663afb9bSAndroid Build Coastguard Worker # Make a new name for the extract_expsyms_cmds to use 8436*663afb9bSAndroid Build Coastguard Worker soroot=$soname 8437*663afb9bSAndroid Build Coastguard Worker func_basename "$soroot" 8438*663afb9bSAndroid Build Coastguard Worker soname=$func_basename_result 8439*663afb9bSAndroid Build Coastguard Worker func_stripname 'lib' '.dll' "$soname" 8440*663afb9bSAndroid Build Coastguard Worker newlib=libimp-$func_stripname_result.a 8441*663afb9bSAndroid Build Coastguard Worker 8442*663afb9bSAndroid Build Coastguard Worker # If the library has no export list, then create one now 8443*663afb9bSAndroid Build Coastguard Worker if test -f "$output_objdir/$soname-def"; then : 8444*663afb9bSAndroid Build Coastguard Worker else 8445*663afb9bSAndroid Build Coastguard Worker func_verbose "extracting exported symbol list from '$soname'" 8446*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8447*663afb9bSAndroid Build Coastguard Worker fi 8448*663afb9bSAndroid Build Coastguard Worker 8449*663afb9bSAndroid Build Coastguard Worker # Create $newlib 8450*663afb9bSAndroid Build Coastguard Worker if test -f "$output_objdir/$newlib"; then :; else 8451*663afb9bSAndroid Build Coastguard Worker func_verbose "generating import library for '$soname'" 8452*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8453*663afb9bSAndroid Build Coastguard Worker fi 8454*663afb9bSAndroid Build Coastguard Worker # make sure the library variables are pointing to the new library 8455*663afb9bSAndroid Build Coastguard Worker dir=$output_objdir 8456*663afb9bSAndroid Build Coastguard Worker linklib=$newlib 8457*663afb9bSAndroid Build Coastguard Worker fi # test -n "$old_archive_from_expsyms_cmds" 8458*663afb9bSAndroid Build Coastguard Worker 8459*663afb9bSAndroid Build Coastguard Worker if test prog = "$linkmode" || test relink != "$opt_mode"; then 8460*663afb9bSAndroid Build Coastguard Worker add_shlibpath= 8461*663afb9bSAndroid Build Coastguard Worker add_dir= 8462*663afb9bSAndroid Build Coastguard Worker add= 8463*663afb9bSAndroid Build Coastguard Worker lib_linked=yes 8464*663afb9bSAndroid Build Coastguard Worker case $hardcode_action in 8465*663afb9bSAndroid Build Coastguard Worker immediate | unsupported) 8466*663afb9bSAndroid Build Coastguard Worker if test no = "$hardcode_direct"; then 8467*663afb9bSAndroid Build Coastguard Worker add=$dir/$linklib 8468*663afb9bSAndroid Build Coastguard Worker case $host in 8469*663afb9bSAndroid Build Coastguard Worker *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 8470*663afb9bSAndroid Build Coastguard Worker *-*-sysv4*uw2*) add_dir=-L$dir ;; 8471*663afb9bSAndroid Build Coastguard Worker *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 8472*663afb9bSAndroid Build Coastguard Worker *-*-unixware7*) add_dir=-L$dir ;; 8473*663afb9bSAndroid Build Coastguard Worker *-*-darwin* ) 8474*663afb9bSAndroid Build Coastguard Worker # if the lib is a (non-dlopened) module then we cannot 8475*663afb9bSAndroid Build Coastguard Worker # link against it, someone is ignoring the earlier warnings 8476*663afb9bSAndroid Build Coastguard Worker if /usr/bin/file -L $add 2> /dev/null | 8477*663afb9bSAndroid Build Coastguard Worker $GREP ": [^:]* bundle" >/dev/null; then 8478*663afb9bSAndroid Build Coastguard Worker if test "X$dlopenmodule" != "X$lib"; then 8479*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: lib $linklib is a module, not a shared library" 8480*663afb9bSAndroid Build Coastguard Worker if test -z "$old_library"; then 8481*663afb9bSAndroid Build Coastguard Worker echo 8482*663afb9bSAndroid Build Coastguard Worker echo "*** And there doesn't seem to be a static archive available" 8483*663afb9bSAndroid Build Coastguard Worker echo "*** The link will probably fail, sorry" 8484*663afb9bSAndroid Build Coastguard Worker else 8485*663afb9bSAndroid Build Coastguard Worker add=$dir/$old_library 8486*663afb9bSAndroid Build Coastguard Worker fi 8487*663afb9bSAndroid Build Coastguard Worker elif test -n "$old_library"; then 8488*663afb9bSAndroid Build Coastguard Worker add=$dir/$old_library 8489*663afb9bSAndroid Build Coastguard Worker fi 8490*663afb9bSAndroid Build Coastguard Worker fi 8491*663afb9bSAndroid Build Coastguard Worker esac 8492*663afb9bSAndroid Build Coastguard Worker elif test no = "$hardcode_minus_L"; then 8493*663afb9bSAndroid Build Coastguard Worker case $host in 8494*663afb9bSAndroid Build Coastguard Worker *-*-sunos*) add_shlibpath=$dir ;; 8495*663afb9bSAndroid Build Coastguard Worker esac 8496*663afb9bSAndroid Build Coastguard Worker add_dir=-L$dir 8497*663afb9bSAndroid Build Coastguard Worker add=-l$name 8498*663afb9bSAndroid Build Coastguard Worker elif test no = "$hardcode_shlibpath_var"; then 8499*663afb9bSAndroid Build Coastguard Worker add_shlibpath=$dir 8500*663afb9bSAndroid Build Coastguard Worker add=-l$name 8501*663afb9bSAndroid Build Coastguard Worker else 8502*663afb9bSAndroid Build Coastguard Worker lib_linked=no 8503*663afb9bSAndroid Build Coastguard Worker fi 8504*663afb9bSAndroid Build Coastguard Worker ;; 8505*663afb9bSAndroid Build Coastguard Worker relink) 8506*663afb9bSAndroid Build Coastguard Worker if test yes = "$hardcode_direct" && 8507*663afb9bSAndroid Build Coastguard Worker test no = "$hardcode_direct_absolute"; then 8508*663afb9bSAndroid Build Coastguard Worker add=$dir/$linklib 8509*663afb9bSAndroid Build Coastguard Worker elif test yes = "$hardcode_minus_L"; then 8510*663afb9bSAndroid Build Coastguard Worker add_dir=-L$absdir 8511*663afb9bSAndroid Build Coastguard Worker # Try looking first in the location we're being installed to. 8512*663afb9bSAndroid Build Coastguard Worker if test -n "$inst_prefix_dir"; then 8513*663afb9bSAndroid Build Coastguard Worker case $libdir in 8514*663afb9bSAndroid Build Coastguard Worker [\\/]*) 8515*663afb9bSAndroid Build Coastguard Worker func_append add_dir " -L$inst_prefix_dir$libdir" 8516*663afb9bSAndroid Build Coastguard Worker ;; 8517*663afb9bSAndroid Build Coastguard Worker esac 8518*663afb9bSAndroid Build Coastguard Worker fi 8519*663afb9bSAndroid Build Coastguard Worker add=-l$name 8520*663afb9bSAndroid Build Coastguard Worker elif test yes = "$hardcode_shlibpath_var"; then 8521*663afb9bSAndroid Build Coastguard Worker add_shlibpath=$dir 8522*663afb9bSAndroid Build Coastguard Worker add=-l$name 8523*663afb9bSAndroid Build Coastguard Worker else 8524*663afb9bSAndroid Build Coastguard Worker lib_linked=no 8525*663afb9bSAndroid Build Coastguard Worker fi 8526*663afb9bSAndroid Build Coastguard Worker ;; 8527*663afb9bSAndroid Build Coastguard Worker *) lib_linked=no ;; 8528*663afb9bSAndroid Build Coastguard Worker esac 8529*663afb9bSAndroid Build Coastguard Worker 8530*663afb9bSAndroid Build Coastguard Worker if test yes != "$lib_linked"; then 8531*663afb9bSAndroid Build Coastguard Worker func_fatal_configuration "unsupported hardcode properties" 8532*663afb9bSAndroid Build Coastguard Worker fi 8533*663afb9bSAndroid Build Coastguard Worker 8534*663afb9bSAndroid Build Coastguard Worker if test -n "$add_shlibpath"; then 8535*663afb9bSAndroid Build Coastguard Worker case :$compile_shlibpath: in 8536*663afb9bSAndroid Build Coastguard Worker *":$add_shlibpath:"*) ;; 8537*663afb9bSAndroid Build Coastguard Worker *) func_append compile_shlibpath "$add_shlibpath:" ;; 8538*663afb9bSAndroid Build Coastguard Worker esac 8539*663afb9bSAndroid Build Coastguard Worker fi 8540*663afb9bSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 8541*663afb9bSAndroid Build Coastguard Worker test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8542*663afb9bSAndroid Build Coastguard Worker test -n "$add" && compile_deplibs="$add $compile_deplibs" 8543*663afb9bSAndroid Build Coastguard Worker else 8544*663afb9bSAndroid Build Coastguard Worker test -n "$add_dir" && deplibs="$add_dir $deplibs" 8545*663afb9bSAndroid Build Coastguard Worker test -n "$add" && deplibs="$add $deplibs" 8546*663afb9bSAndroid Build Coastguard Worker if test yes != "$hardcode_direct" && 8547*663afb9bSAndroid Build Coastguard Worker test yes != "$hardcode_minus_L" && 8548*663afb9bSAndroid Build Coastguard Worker test yes = "$hardcode_shlibpath_var"; then 8549*663afb9bSAndroid Build Coastguard Worker case :$finalize_shlibpath: in 8550*663afb9bSAndroid Build Coastguard Worker *":$libdir:"*) ;; 8551*663afb9bSAndroid Build Coastguard Worker *) func_append finalize_shlibpath "$libdir:" ;; 8552*663afb9bSAndroid Build Coastguard Worker esac 8553*663afb9bSAndroid Build Coastguard Worker fi 8554*663afb9bSAndroid Build Coastguard Worker fi 8555*663afb9bSAndroid Build Coastguard Worker fi 8556*663afb9bSAndroid Build Coastguard Worker 8557*663afb9bSAndroid Build Coastguard Worker if test prog = "$linkmode" || test relink = "$opt_mode"; then 8558*663afb9bSAndroid Build Coastguard Worker add_shlibpath= 8559*663afb9bSAndroid Build Coastguard Worker add_dir= 8560*663afb9bSAndroid Build Coastguard Worker add= 8561*663afb9bSAndroid Build Coastguard Worker # Finalize command for both is simple: just hardcode it. 8562*663afb9bSAndroid Build Coastguard Worker if test yes = "$hardcode_direct" && 8563*663afb9bSAndroid Build Coastguard Worker test no = "$hardcode_direct_absolute"; then 8564*663afb9bSAndroid Build Coastguard Worker add=$libdir/$linklib 8565*663afb9bSAndroid Build Coastguard Worker elif test yes = "$hardcode_minus_L"; then 8566*663afb9bSAndroid Build Coastguard Worker add_dir=-L$libdir 8567*663afb9bSAndroid Build Coastguard Worker add=-l$name 8568*663afb9bSAndroid Build Coastguard Worker elif test yes = "$hardcode_shlibpath_var"; then 8569*663afb9bSAndroid Build Coastguard Worker case :$finalize_shlibpath: in 8570*663afb9bSAndroid Build Coastguard Worker *":$libdir:"*) ;; 8571*663afb9bSAndroid Build Coastguard Worker *) func_append finalize_shlibpath "$libdir:" ;; 8572*663afb9bSAndroid Build Coastguard Worker esac 8573*663afb9bSAndroid Build Coastguard Worker add=-l$name 8574*663afb9bSAndroid Build Coastguard Worker elif test yes = "$hardcode_automatic"; then 8575*663afb9bSAndroid Build Coastguard Worker if test -n "$inst_prefix_dir" && 8576*663afb9bSAndroid Build Coastguard Worker test -f "$inst_prefix_dir$libdir/$linklib"; then 8577*663afb9bSAndroid Build Coastguard Worker add=$inst_prefix_dir$libdir/$linklib 8578*663afb9bSAndroid Build Coastguard Worker else 8579*663afb9bSAndroid Build Coastguard Worker add=$libdir/$linklib 8580*663afb9bSAndroid Build Coastguard Worker fi 8581*663afb9bSAndroid Build Coastguard Worker else 8582*663afb9bSAndroid Build Coastguard Worker # We cannot seem to hardcode it, guess we'll fake it. 8583*663afb9bSAndroid Build Coastguard Worker add_dir=-L$libdir 8584*663afb9bSAndroid Build Coastguard Worker # Try looking first in the location we're being installed to. 8585*663afb9bSAndroid Build Coastguard Worker if test -n "$inst_prefix_dir"; then 8586*663afb9bSAndroid Build Coastguard Worker case $libdir in 8587*663afb9bSAndroid Build Coastguard Worker [\\/]*) 8588*663afb9bSAndroid Build Coastguard Worker func_append add_dir " -L$inst_prefix_dir$libdir" 8589*663afb9bSAndroid Build Coastguard Worker ;; 8590*663afb9bSAndroid Build Coastguard Worker esac 8591*663afb9bSAndroid Build Coastguard Worker fi 8592*663afb9bSAndroid Build Coastguard Worker add=-l$name 8593*663afb9bSAndroid Build Coastguard Worker fi 8594*663afb9bSAndroid Build Coastguard Worker 8595*663afb9bSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 8596*663afb9bSAndroid Build Coastguard Worker test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8597*663afb9bSAndroid Build Coastguard Worker test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8598*663afb9bSAndroid Build Coastguard Worker else 8599*663afb9bSAndroid Build Coastguard Worker test -n "$add_dir" && deplibs="$add_dir $deplibs" 8600*663afb9bSAndroid Build Coastguard Worker test -n "$add" && deplibs="$add $deplibs" 8601*663afb9bSAndroid Build Coastguard Worker fi 8602*663afb9bSAndroid Build Coastguard Worker fi 8603*663afb9bSAndroid Build Coastguard Worker elif test prog = "$linkmode"; then 8604*663afb9bSAndroid Build Coastguard Worker # Here we assume that one of hardcode_direct or hardcode_minus_L 8605*663afb9bSAndroid Build Coastguard Worker # is not unsupported. This is valid on all known static and 8606*663afb9bSAndroid Build Coastguard Worker # shared platforms. 8607*663afb9bSAndroid Build Coastguard Worker if test unsupported != "$hardcode_direct"; then 8608*663afb9bSAndroid Build Coastguard Worker test -n "$old_library" && linklib=$old_library 8609*663afb9bSAndroid Build Coastguard Worker compile_deplibs="$dir/$linklib $compile_deplibs" 8610*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="$dir/$linklib $finalize_deplibs" 8611*663afb9bSAndroid Build Coastguard Worker else 8612*663afb9bSAndroid Build Coastguard Worker compile_deplibs="-l$name -L$dir $compile_deplibs" 8613*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8614*663afb9bSAndroid Build Coastguard Worker fi 8615*663afb9bSAndroid Build Coastguard Worker elif test yes = "$build_libtool_libs"; then 8616*663afb9bSAndroid Build Coastguard Worker # Not a shared library 8617*663afb9bSAndroid Build Coastguard Worker if test pass_all != "$deplibs_check_method"; then 8618*663afb9bSAndroid Build Coastguard Worker # We're trying link a shared library against a static one 8619*663afb9bSAndroid Build Coastguard Worker # but the system doesn't support it. 8620*663afb9bSAndroid Build Coastguard Worker 8621*663afb9bSAndroid Build Coastguard Worker # Just print a warning and add the library to dependency_libs so 8622*663afb9bSAndroid Build Coastguard Worker # that the program can be linked against the static library. 8623*663afb9bSAndroid Build Coastguard Worker echo 8624*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8625*663afb9bSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 8626*663afb9bSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 8627*663afb9bSAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have." 8628*663afb9bSAndroid Build Coastguard Worker if test yes = "$module"; then 8629*663afb9bSAndroid Build Coastguard Worker echo "*** But as you try to build a module library, libtool will still create " 8630*663afb9bSAndroid Build Coastguard Worker echo "*** a static module, that should work as long as the dlopening application" 8631*663afb9bSAndroid Build Coastguard Worker echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8632*663afb9bSAndroid Build Coastguard Worker if test -z "$global_symbol_pipe"; then 8633*663afb9bSAndroid Build Coastguard Worker echo 8634*663afb9bSAndroid Build Coastguard Worker echo "*** However, this would only work if libtool was able to extract symbol" 8635*663afb9bSAndroid Build Coastguard Worker echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8636*663afb9bSAndroid Build Coastguard Worker echo "*** not find such a program. So, this module is probably useless." 8637*663afb9bSAndroid Build Coastguard Worker echo "*** 'nm' from GNU binutils and a full rebuild may help." 8638*663afb9bSAndroid Build Coastguard Worker fi 8639*663afb9bSAndroid Build Coastguard Worker if test no = "$build_old_libs"; then 8640*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=module 8641*663afb9bSAndroid Build Coastguard Worker build_old_libs=yes 8642*663afb9bSAndroid Build Coastguard Worker else 8643*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=no 8644*663afb9bSAndroid Build Coastguard Worker fi 8645*663afb9bSAndroid Build Coastguard Worker fi 8646*663afb9bSAndroid Build Coastguard Worker else 8647*663afb9bSAndroid Build Coastguard Worker deplibs="$dir/$old_library $deplibs" 8648*663afb9bSAndroid Build Coastguard Worker link_static=yes 8649*663afb9bSAndroid Build Coastguard Worker fi 8650*663afb9bSAndroid Build Coastguard Worker fi # link shared/static library? 8651*663afb9bSAndroid Build Coastguard Worker 8652*663afb9bSAndroid Build Coastguard Worker if test lib = "$linkmode"; then 8653*663afb9bSAndroid Build Coastguard Worker if test -n "$dependency_libs" && 8654*663afb9bSAndroid Build Coastguard Worker { test yes != "$hardcode_into_libs" || 8655*663afb9bSAndroid Build Coastguard Worker test yes = "$build_old_libs" || 8656*663afb9bSAndroid Build Coastguard Worker test yes = "$link_static"; }; then 8657*663afb9bSAndroid Build Coastguard Worker # Extract -R from dependency_libs 8658*663afb9bSAndroid Build Coastguard Worker temp_deplibs= 8659*663afb9bSAndroid Build Coastguard Worker for libdir in $dependency_libs; do 8660*663afb9bSAndroid Build Coastguard Worker case $libdir in 8661*663afb9bSAndroid Build Coastguard Worker -R*) func_stripname '-R' '' "$libdir" 8662*663afb9bSAndroid Build Coastguard Worker temp_xrpath=$func_stripname_result 8663*663afb9bSAndroid Build Coastguard Worker case " $xrpath " in 8664*663afb9bSAndroid Build Coastguard Worker *" $temp_xrpath "*) ;; 8665*663afb9bSAndroid Build Coastguard Worker *) func_append xrpath " $temp_xrpath";; 8666*663afb9bSAndroid Build Coastguard Worker esac;; 8667*663afb9bSAndroid Build Coastguard Worker *) func_append temp_deplibs " $libdir";; 8668*663afb9bSAndroid Build Coastguard Worker esac 8669*663afb9bSAndroid Build Coastguard Worker done 8670*663afb9bSAndroid Build Coastguard Worker dependency_libs=$temp_deplibs 8671*663afb9bSAndroid Build Coastguard Worker fi 8672*663afb9bSAndroid Build Coastguard Worker 8673*663afb9bSAndroid Build Coastguard Worker func_append newlib_search_path " $absdir" 8674*663afb9bSAndroid Build Coastguard Worker # Link against this library 8675*663afb9bSAndroid Build Coastguard Worker test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8676*663afb9bSAndroid Build Coastguard Worker # ... and its dependency_libs 8677*663afb9bSAndroid Build Coastguard Worker tmp_libs= 8678*663afb9bSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 8679*663afb9bSAndroid Build Coastguard Worker newdependency_libs="$deplib $newdependency_libs" 8680*663afb9bSAndroid Build Coastguard Worker case $deplib in 8681*663afb9bSAndroid Build Coastguard Worker -L*) func_stripname '-L' '' "$deplib" 8682*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$func_stripname_result";; 8683*663afb9bSAndroid Build Coastguard Worker *) func_resolve_sysroot "$deplib" ;; 8684*663afb9bSAndroid Build Coastguard Worker esac 8685*663afb9bSAndroid Build Coastguard Worker if $opt_preserve_dup_deps; then 8686*663afb9bSAndroid Build Coastguard Worker case "$tmp_libs " in 8687*663afb9bSAndroid Build Coastguard Worker *" $func_resolve_sysroot_result "*) 8688*663afb9bSAndroid Build Coastguard Worker func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8689*663afb9bSAndroid Build Coastguard Worker esac 8690*663afb9bSAndroid Build Coastguard Worker fi 8691*663afb9bSAndroid Build Coastguard Worker func_append tmp_libs " $func_resolve_sysroot_result" 8692*663afb9bSAndroid Build Coastguard Worker done 8693*663afb9bSAndroid Build Coastguard Worker 8694*663afb9bSAndroid Build Coastguard Worker if test no != "$link_all_deplibs"; then 8695*663afb9bSAndroid Build Coastguard Worker # Add the search paths of all dependency libraries 8696*663afb9bSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 8697*663afb9bSAndroid Build Coastguard Worker path= 8698*663afb9bSAndroid Build Coastguard Worker case $deplib in 8699*663afb9bSAndroid Build Coastguard Worker -L*) path=$deplib ;; 8700*663afb9bSAndroid Build Coastguard Worker *.la) 8701*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$deplib" 8702*663afb9bSAndroid Build Coastguard Worker deplib=$func_resolve_sysroot_result 8703*663afb9bSAndroid Build Coastguard Worker func_dirname "$deplib" "" "." 8704*663afb9bSAndroid Build Coastguard Worker dir=$func_dirname_result 8705*663afb9bSAndroid Build Coastguard Worker # We need an absolute path. 8706*663afb9bSAndroid Build Coastguard Worker case $dir in 8707*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8708*663afb9bSAndroid Build Coastguard Worker *) 8709*663afb9bSAndroid Build Coastguard Worker absdir=`cd "$dir" && pwd` 8710*663afb9bSAndroid Build Coastguard Worker if test -z "$absdir"; then 8711*663afb9bSAndroid Build Coastguard Worker func_warning "cannot determine absolute directory name of '$dir'" 8712*663afb9bSAndroid Build Coastguard Worker absdir=$dir 8713*663afb9bSAndroid Build Coastguard Worker fi 8714*663afb9bSAndroid Build Coastguard Worker ;; 8715*663afb9bSAndroid Build Coastguard Worker esac 8716*663afb9bSAndroid Build Coastguard Worker if $GREP "^installed=no" $deplib > /dev/null; then 8717*663afb9bSAndroid Build Coastguard Worker case $host in 8718*663afb9bSAndroid Build Coastguard Worker *-*-darwin*) 8719*663afb9bSAndroid Build Coastguard Worker depdepl= 8720*663afb9bSAndroid Build Coastguard Worker eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 8721*663afb9bSAndroid Build Coastguard Worker if test -n "$deplibrary_names"; then 8722*663afb9bSAndroid Build Coastguard Worker for tmp in $deplibrary_names; do 8723*663afb9bSAndroid Build Coastguard Worker depdepl=$tmp 8724*663afb9bSAndroid Build Coastguard Worker done 8725*663afb9bSAndroid Build Coastguard Worker if test -f "$absdir/$objdir/$depdepl"; then 8726*663afb9bSAndroid Build Coastguard Worker depdepl=$absdir/$objdir/$depdepl 8727*663afb9bSAndroid Build Coastguard Worker darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8728*663afb9bSAndroid Build Coastguard Worker if test -z "$darwin_install_name"; then 8729*663afb9bSAndroid Build Coastguard Worker darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8730*663afb9bSAndroid Build Coastguard Worker fi 8731*663afb9bSAndroid Build Coastguard Worker func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 8732*663afb9bSAndroid Build Coastguard Worker func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8733*663afb9bSAndroid Build Coastguard Worker path= 8734*663afb9bSAndroid Build Coastguard Worker fi 8735*663afb9bSAndroid Build Coastguard Worker fi 8736*663afb9bSAndroid Build Coastguard Worker ;; 8737*663afb9bSAndroid Build Coastguard Worker *) 8738*663afb9bSAndroid Build Coastguard Worker path=-L$absdir/$objdir 8739*663afb9bSAndroid Build Coastguard Worker ;; 8740*663afb9bSAndroid Build Coastguard Worker esac 8741*663afb9bSAndroid Build Coastguard Worker else 8742*663afb9bSAndroid Build Coastguard Worker eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8743*663afb9bSAndroid Build Coastguard Worker test -z "$libdir" && \ 8744*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$deplib' is not a valid libtool archive" 8745*663afb9bSAndroid Build Coastguard Worker test "$absdir" != "$libdir" && \ 8746*663afb9bSAndroid Build Coastguard Worker func_warning "'$deplib' seems to be moved" 8747*663afb9bSAndroid Build Coastguard Worker 8748*663afb9bSAndroid Build Coastguard Worker path=-L$absdir 8749*663afb9bSAndroid Build Coastguard Worker fi 8750*663afb9bSAndroid Build Coastguard Worker ;; 8751*663afb9bSAndroid Build Coastguard Worker esac 8752*663afb9bSAndroid Build Coastguard Worker case " $deplibs " in 8753*663afb9bSAndroid Build Coastguard Worker *" $path "*) ;; 8754*663afb9bSAndroid Build Coastguard Worker *) deplibs="$path $deplibs" ;; 8755*663afb9bSAndroid Build Coastguard Worker esac 8756*663afb9bSAndroid Build Coastguard Worker done 8757*663afb9bSAndroid Build Coastguard Worker fi # link_all_deplibs != no 8758*663afb9bSAndroid Build Coastguard Worker fi # linkmode = lib 8759*663afb9bSAndroid Build Coastguard Worker done # for deplib in $libs 8760*663afb9bSAndroid Build Coastguard Worker if test link = "$pass"; then 8761*663afb9bSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 8762*663afb9bSAndroid Build Coastguard Worker compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8763*663afb9bSAndroid Build Coastguard Worker finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8764*663afb9bSAndroid Build Coastguard Worker else 8765*663afb9bSAndroid Build Coastguard Worker compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8766*663afb9bSAndroid Build Coastguard Worker fi 8767*663afb9bSAndroid Build Coastguard Worker fi 8768*663afb9bSAndroid Build Coastguard Worker dependency_libs=$newdependency_libs 8769*663afb9bSAndroid Build Coastguard Worker if test dlpreopen = "$pass"; then 8770*663afb9bSAndroid Build Coastguard Worker # Link the dlpreopened libraries before other libraries 8771*663afb9bSAndroid Build Coastguard Worker for deplib in $save_deplibs; do 8772*663afb9bSAndroid Build Coastguard Worker deplibs="$deplib $deplibs" 8773*663afb9bSAndroid Build Coastguard Worker done 8774*663afb9bSAndroid Build Coastguard Worker fi 8775*663afb9bSAndroid Build Coastguard Worker if test dlopen != "$pass"; then 8776*663afb9bSAndroid Build Coastguard Worker test conv = "$pass" || { 8777*663afb9bSAndroid Build Coastguard Worker # Make sure lib_search_path contains only unique directories. 8778*663afb9bSAndroid Build Coastguard Worker lib_search_path= 8779*663afb9bSAndroid Build Coastguard Worker for dir in $newlib_search_path; do 8780*663afb9bSAndroid Build Coastguard Worker case "$lib_search_path " in 8781*663afb9bSAndroid Build Coastguard Worker *" $dir "*) ;; 8782*663afb9bSAndroid Build Coastguard Worker *) func_append lib_search_path " $dir" ;; 8783*663afb9bSAndroid Build Coastguard Worker esac 8784*663afb9bSAndroid Build Coastguard Worker done 8785*663afb9bSAndroid Build Coastguard Worker newlib_search_path= 8786*663afb9bSAndroid Build Coastguard Worker } 8787*663afb9bSAndroid Build Coastguard Worker 8788*663afb9bSAndroid Build Coastguard Worker if test prog,link = "$linkmode,$pass"; then 8789*663afb9bSAndroid Build Coastguard Worker vars="compile_deplibs finalize_deplibs" 8790*663afb9bSAndroid Build Coastguard Worker else 8791*663afb9bSAndroid Build Coastguard Worker vars=deplibs 8792*663afb9bSAndroid Build Coastguard Worker fi 8793*663afb9bSAndroid Build Coastguard Worker for var in $vars dependency_libs; do 8794*663afb9bSAndroid Build Coastguard Worker # Add libraries to $var in reverse order 8795*663afb9bSAndroid Build Coastguard Worker eval tmp_libs=\"\$$var\" 8796*663afb9bSAndroid Build Coastguard Worker new_libs= 8797*663afb9bSAndroid Build Coastguard Worker for deplib in $tmp_libs; do 8798*663afb9bSAndroid Build Coastguard Worker # FIXME: Pedantically, this is the right thing to do, so 8799*663afb9bSAndroid Build Coastguard Worker # that some nasty dependency loop isn't accidentally 8800*663afb9bSAndroid Build Coastguard Worker # broken: 8801*663afb9bSAndroid Build Coastguard Worker #new_libs="$deplib $new_libs" 8802*663afb9bSAndroid Build Coastguard Worker # Pragmatically, this seems to cause very few problems in 8803*663afb9bSAndroid Build Coastguard Worker # practice: 8804*663afb9bSAndroid Build Coastguard Worker case $deplib in 8805*663afb9bSAndroid Build Coastguard Worker -L*) new_libs="$deplib $new_libs" ;; 8806*663afb9bSAndroid Build Coastguard Worker -R*) ;; 8807*663afb9bSAndroid Build Coastguard Worker *) 8808*663afb9bSAndroid Build Coastguard Worker # And here is the reason: when a library appears more 8809*663afb9bSAndroid Build Coastguard Worker # than once as an explicit dependence of a library, or 8810*663afb9bSAndroid Build Coastguard Worker # is implicitly linked in more than once by the 8811*663afb9bSAndroid Build Coastguard Worker # compiler, it is considered special, and multiple 8812*663afb9bSAndroid Build Coastguard Worker # occurrences thereof are not removed. Compare this 8813*663afb9bSAndroid Build Coastguard Worker # with having the same library being listed as a 8814*663afb9bSAndroid Build Coastguard Worker # dependency of multiple other libraries: in this case, 8815*663afb9bSAndroid Build Coastguard Worker # we know (pedantically, we assume) the library does not 8816*663afb9bSAndroid Build Coastguard Worker # need to be listed more than once, so we keep only the 8817*663afb9bSAndroid Build Coastguard Worker # last copy. This is not always right, but it is rare 8818*663afb9bSAndroid Build Coastguard Worker # enough that we require users that really mean to play 8819*663afb9bSAndroid Build Coastguard Worker # such unportable linking tricks to link the library 8820*663afb9bSAndroid Build Coastguard Worker # using -Wl,-lname, so that libtool does not consider it 8821*663afb9bSAndroid Build Coastguard Worker # for duplicate removal. 8822*663afb9bSAndroid Build Coastguard Worker case " $specialdeplibs " in 8823*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) new_libs="$deplib $new_libs" ;; 8824*663afb9bSAndroid Build Coastguard Worker *) 8825*663afb9bSAndroid Build Coastguard Worker case " $new_libs " in 8826*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) ;; 8827*663afb9bSAndroid Build Coastguard Worker *) new_libs="$deplib $new_libs" ;; 8828*663afb9bSAndroid Build Coastguard Worker esac 8829*663afb9bSAndroid Build Coastguard Worker ;; 8830*663afb9bSAndroid Build Coastguard Worker esac 8831*663afb9bSAndroid Build Coastguard Worker ;; 8832*663afb9bSAndroid Build Coastguard Worker esac 8833*663afb9bSAndroid Build Coastguard Worker done 8834*663afb9bSAndroid Build Coastguard Worker tmp_libs= 8835*663afb9bSAndroid Build Coastguard Worker for deplib in $new_libs; do 8836*663afb9bSAndroid Build Coastguard Worker case $deplib in 8837*663afb9bSAndroid Build Coastguard Worker -L*) 8838*663afb9bSAndroid Build Coastguard Worker case " $tmp_libs " in 8839*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) ;; 8840*663afb9bSAndroid Build Coastguard Worker *) func_append tmp_libs " $deplib" ;; 8841*663afb9bSAndroid Build Coastguard Worker esac 8842*663afb9bSAndroid Build Coastguard Worker ;; 8843*663afb9bSAndroid Build Coastguard Worker *) func_append tmp_libs " $deplib" ;; 8844*663afb9bSAndroid Build Coastguard Worker esac 8845*663afb9bSAndroid Build Coastguard Worker done 8846*663afb9bSAndroid Build Coastguard Worker eval $var=\"$tmp_libs\" 8847*663afb9bSAndroid Build Coastguard Worker done # for var 8848*663afb9bSAndroid Build Coastguard Worker fi 8849*663afb9bSAndroid Build Coastguard Worker 8850*663afb9bSAndroid Build Coastguard Worker # Add Sun CC postdeps if required: 8851*663afb9bSAndroid Build Coastguard Worker test CXX = "$tagname" && { 8852*663afb9bSAndroid Build Coastguard Worker case $host_os in 8853*663afb9bSAndroid Build Coastguard Worker linux*) 8854*663afb9bSAndroid Build Coastguard Worker case `$CC -V 2>&1 | sed 5q` in 8855*663afb9bSAndroid Build Coastguard Worker *Sun\ C*) # Sun C++ 5.9 8856*663afb9bSAndroid Build Coastguard Worker func_suncc_cstd_abi 8857*663afb9bSAndroid Build Coastguard Worker 8858*663afb9bSAndroid Build Coastguard Worker if test no != "$suncc_use_cstd_abi"; then 8859*663afb9bSAndroid Build Coastguard Worker func_append postdeps ' -library=Cstd -library=Crun' 8860*663afb9bSAndroid Build Coastguard Worker fi 8861*663afb9bSAndroid Build Coastguard Worker ;; 8862*663afb9bSAndroid Build Coastguard Worker esac 8863*663afb9bSAndroid Build Coastguard Worker ;; 8864*663afb9bSAndroid Build Coastguard Worker 8865*663afb9bSAndroid Build Coastguard Worker solaris*) 8866*663afb9bSAndroid Build Coastguard Worker func_cc_basename "$CC" 8867*663afb9bSAndroid Build Coastguard Worker case $func_cc_basename_result in 8868*663afb9bSAndroid Build Coastguard Worker CC* | sunCC*) 8869*663afb9bSAndroid Build Coastguard Worker func_suncc_cstd_abi 8870*663afb9bSAndroid Build Coastguard Worker 8871*663afb9bSAndroid Build Coastguard Worker if test no != "$suncc_use_cstd_abi"; then 8872*663afb9bSAndroid Build Coastguard Worker func_append postdeps ' -library=Cstd -library=Crun' 8873*663afb9bSAndroid Build Coastguard Worker fi 8874*663afb9bSAndroid Build Coastguard Worker ;; 8875*663afb9bSAndroid Build Coastguard Worker esac 8876*663afb9bSAndroid Build Coastguard Worker ;; 8877*663afb9bSAndroid Build Coastguard Worker esac 8878*663afb9bSAndroid Build Coastguard Worker } 8879*663afb9bSAndroid Build Coastguard Worker 8880*663afb9bSAndroid Build Coastguard Worker # Last step: remove runtime libs from dependency_libs 8881*663afb9bSAndroid Build Coastguard Worker # (they stay in deplibs) 8882*663afb9bSAndroid Build Coastguard Worker tmp_libs= 8883*663afb9bSAndroid Build Coastguard Worker for i in $dependency_libs; do 8884*663afb9bSAndroid Build Coastguard Worker case " $predeps $postdeps $compiler_lib_search_path " in 8885*663afb9bSAndroid Build Coastguard Worker *" $i "*) 8886*663afb9bSAndroid Build Coastguard Worker i= 8887*663afb9bSAndroid Build Coastguard Worker ;; 8888*663afb9bSAndroid Build Coastguard Worker esac 8889*663afb9bSAndroid Build Coastguard Worker if test -n "$i"; then 8890*663afb9bSAndroid Build Coastguard Worker func_append tmp_libs " $i" 8891*663afb9bSAndroid Build Coastguard Worker fi 8892*663afb9bSAndroid Build Coastguard Worker done 8893*663afb9bSAndroid Build Coastguard Worker dependency_libs=$tmp_libs 8894*663afb9bSAndroid Build Coastguard Worker done # for pass 8895*663afb9bSAndroid Build Coastguard Worker if test prog = "$linkmode"; then 8896*663afb9bSAndroid Build Coastguard Worker dlfiles=$newdlfiles 8897*663afb9bSAndroid Build Coastguard Worker fi 8898*663afb9bSAndroid Build Coastguard Worker if test prog = "$linkmode" || test lib = "$linkmode"; then 8899*663afb9bSAndroid Build Coastguard Worker dlprefiles=$newdlprefiles 8900*663afb9bSAndroid Build Coastguard Worker fi 8901*663afb9bSAndroid Build Coastguard Worker 8902*663afb9bSAndroid Build Coastguard Worker case $linkmode in 8903*663afb9bSAndroid Build Coastguard Worker oldlib) 8904*663afb9bSAndroid Build Coastguard Worker if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 8905*663afb9bSAndroid Build Coastguard Worker func_warning "'-dlopen' is ignored for archives" 8906*663afb9bSAndroid Build Coastguard Worker fi 8907*663afb9bSAndroid Build Coastguard Worker 8908*663afb9bSAndroid Build Coastguard Worker case " $deplibs" in 8909*663afb9bSAndroid Build Coastguard Worker *\ -l* | *\ -L*) 8910*663afb9bSAndroid Build Coastguard Worker func_warning "'-l' and '-L' are ignored for archives" ;; 8911*663afb9bSAndroid Build Coastguard Worker esac 8912*663afb9bSAndroid Build Coastguard Worker 8913*663afb9bSAndroid Build Coastguard Worker test -n "$rpath" && \ 8914*663afb9bSAndroid Build Coastguard Worker func_warning "'-rpath' is ignored for archives" 8915*663afb9bSAndroid Build Coastguard Worker 8916*663afb9bSAndroid Build Coastguard Worker test -n "$xrpath" && \ 8917*663afb9bSAndroid Build Coastguard Worker func_warning "'-R' is ignored for archives" 8918*663afb9bSAndroid Build Coastguard Worker 8919*663afb9bSAndroid Build Coastguard Worker test -n "$vinfo" && \ 8920*663afb9bSAndroid Build Coastguard Worker func_warning "'-version-info/-version-number' is ignored for archives" 8921*663afb9bSAndroid Build Coastguard Worker 8922*663afb9bSAndroid Build Coastguard Worker test -n "$release" && \ 8923*663afb9bSAndroid Build Coastguard Worker func_warning "'-release' is ignored for archives" 8924*663afb9bSAndroid Build Coastguard Worker 8925*663afb9bSAndroid Build Coastguard Worker test -n "$export_symbols$export_symbols_regex" && \ 8926*663afb9bSAndroid Build Coastguard Worker func_warning "'-export-symbols' is ignored for archives" 8927*663afb9bSAndroid Build Coastguard Worker 8928*663afb9bSAndroid Build Coastguard Worker # Now set the variables for building old libraries. 8929*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=no 8930*663afb9bSAndroid Build Coastguard Worker oldlibs=$output 8931*663afb9bSAndroid Build Coastguard Worker func_append objs "$old_deplibs" 8932*663afb9bSAndroid Build Coastguard Worker ;; 8933*663afb9bSAndroid Build Coastguard Worker 8934*663afb9bSAndroid Build Coastguard Worker lib) 8935*663afb9bSAndroid Build Coastguard Worker # Make sure we only generate libraries of the form 'libNAME.la'. 8936*663afb9bSAndroid Build Coastguard Worker case $outputname in 8937*663afb9bSAndroid Build Coastguard Worker lib*) 8938*663afb9bSAndroid Build Coastguard Worker func_stripname 'lib' '.la' "$outputname" 8939*663afb9bSAndroid Build Coastguard Worker name=$func_stripname_result 8940*663afb9bSAndroid Build Coastguard Worker eval shared_ext=\"$shrext_cmds\" 8941*663afb9bSAndroid Build Coastguard Worker eval libname=\"$libname_spec\" 8942*663afb9bSAndroid Build Coastguard Worker ;; 8943*663afb9bSAndroid Build Coastguard Worker *) 8944*663afb9bSAndroid Build Coastguard Worker test no = "$module" \ 8945*663afb9bSAndroid Build Coastguard Worker && func_fatal_help "libtool library '$output' must begin with 'lib'" 8946*663afb9bSAndroid Build Coastguard Worker 8947*663afb9bSAndroid Build Coastguard Worker if test no != "$need_lib_prefix"; then 8948*663afb9bSAndroid Build Coastguard Worker # Add the "lib" prefix for modules if required 8949*663afb9bSAndroid Build Coastguard Worker func_stripname '' '.la' "$outputname" 8950*663afb9bSAndroid Build Coastguard Worker name=$func_stripname_result 8951*663afb9bSAndroid Build Coastguard Worker eval shared_ext=\"$shrext_cmds\" 8952*663afb9bSAndroid Build Coastguard Worker eval libname=\"$libname_spec\" 8953*663afb9bSAndroid Build Coastguard Worker else 8954*663afb9bSAndroid Build Coastguard Worker func_stripname '' '.la' "$outputname" 8955*663afb9bSAndroid Build Coastguard Worker libname=$func_stripname_result 8956*663afb9bSAndroid Build Coastguard Worker fi 8957*663afb9bSAndroid Build Coastguard Worker ;; 8958*663afb9bSAndroid Build Coastguard Worker esac 8959*663afb9bSAndroid Build Coastguard Worker 8960*663afb9bSAndroid Build Coastguard Worker if test -n "$objs"; then 8961*663afb9bSAndroid Build Coastguard Worker if test pass_all != "$deplibs_check_method"; then 8962*663afb9bSAndroid Build Coastguard Worker func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 8963*663afb9bSAndroid Build Coastguard Worker else 8964*663afb9bSAndroid Build Coastguard Worker echo 8965*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 8966*663afb9bSAndroid Build Coastguard Worker $ECHO "*** objects $objs is not portable!" 8967*663afb9bSAndroid Build Coastguard Worker func_append libobjs " $objs" 8968*663afb9bSAndroid Build Coastguard Worker fi 8969*663afb9bSAndroid Build Coastguard Worker fi 8970*663afb9bSAndroid Build Coastguard Worker 8971*663afb9bSAndroid Build Coastguard Worker test no = "$dlself" \ 8972*663afb9bSAndroid Build Coastguard Worker || func_warning "'-dlopen self' is ignored for libtool libraries" 8973*663afb9bSAndroid Build Coastguard Worker 8974*663afb9bSAndroid Build Coastguard Worker set dummy $rpath 8975*663afb9bSAndroid Build Coastguard Worker shift 8976*663afb9bSAndroid Build Coastguard Worker test 1 -lt "$#" \ 8977*663afb9bSAndroid Build Coastguard Worker && func_warning "ignoring multiple '-rpath's for a libtool library" 8978*663afb9bSAndroid Build Coastguard Worker 8979*663afb9bSAndroid Build Coastguard Worker install_libdir=$1 8980*663afb9bSAndroid Build Coastguard Worker 8981*663afb9bSAndroid Build Coastguard Worker oldlibs= 8982*663afb9bSAndroid Build Coastguard Worker if test -z "$rpath"; then 8983*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 8984*663afb9bSAndroid Build Coastguard Worker # Building a libtool convenience library. 8985*663afb9bSAndroid Build Coastguard Worker # Some compilers have problems with a '.al' extension so 8986*663afb9bSAndroid Build Coastguard Worker # convenience libraries should have the same extension an 8987*663afb9bSAndroid Build Coastguard Worker # archive normally would. 8988*663afb9bSAndroid Build Coastguard Worker oldlibs="$output_objdir/$libname.$libext $oldlibs" 8989*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=convenience 8990*663afb9bSAndroid Build Coastguard Worker build_old_libs=yes 8991*663afb9bSAndroid Build Coastguard Worker fi 8992*663afb9bSAndroid Build Coastguard Worker 8993*663afb9bSAndroid Build Coastguard Worker test -n "$vinfo" && \ 8994*663afb9bSAndroid Build Coastguard Worker func_warning "'-version-info/-version-number' is ignored for convenience libraries" 8995*663afb9bSAndroid Build Coastguard Worker 8996*663afb9bSAndroid Build Coastguard Worker test -n "$release" && \ 8997*663afb9bSAndroid Build Coastguard Worker func_warning "'-release' is ignored for convenience libraries" 8998*663afb9bSAndroid Build Coastguard Worker else 8999*663afb9bSAndroid Build Coastguard Worker 9000*663afb9bSAndroid Build Coastguard Worker # Parse the version information argument. 9001*663afb9bSAndroid Build Coastguard Worker save_ifs=$IFS; IFS=: 9002*663afb9bSAndroid Build Coastguard Worker set dummy $vinfo 0 0 0 9003*663afb9bSAndroid Build Coastguard Worker shift 9004*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 9005*663afb9bSAndroid Build Coastguard Worker 9006*663afb9bSAndroid Build Coastguard Worker test -n "$7" && \ 9007*663afb9bSAndroid Build Coastguard Worker func_fatal_help "too many parameters to '-version-info'" 9008*663afb9bSAndroid Build Coastguard Worker 9009*663afb9bSAndroid Build Coastguard Worker # convert absolute version numbers to libtool ages 9010*663afb9bSAndroid Build Coastguard Worker # this retains compatibility with .la files and attempts 9011*663afb9bSAndroid Build Coastguard Worker # to make the code below a bit more comprehensible 9012*663afb9bSAndroid Build Coastguard Worker 9013*663afb9bSAndroid Build Coastguard Worker case $vinfo_number in 9014*663afb9bSAndroid Build Coastguard Worker yes) 9015*663afb9bSAndroid Build Coastguard Worker number_major=$1 9016*663afb9bSAndroid Build Coastguard Worker number_minor=$2 9017*663afb9bSAndroid Build Coastguard Worker number_revision=$3 9018*663afb9bSAndroid Build Coastguard Worker # 9019*663afb9bSAndroid Build Coastguard Worker # There are really only two kinds -- those that 9020*663afb9bSAndroid Build Coastguard Worker # use the current revision as the major version 9021*663afb9bSAndroid Build Coastguard Worker # and those that subtract age and use age as 9022*663afb9bSAndroid Build Coastguard Worker # a minor version. But, then there is irix 9023*663afb9bSAndroid Build Coastguard Worker # that has an extra 1 added just for fun 9024*663afb9bSAndroid Build Coastguard Worker # 9025*663afb9bSAndroid Build Coastguard Worker case $version_type in 9026*663afb9bSAndroid Build Coastguard Worker # correct linux to gnu/linux during the next big refactor 9027*663afb9bSAndroid Build Coastguard Worker darwin|freebsd-elf|linux|osf|windows|none) 9028*663afb9bSAndroid Build Coastguard Worker func_arith $number_major + $number_minor 9029*663afb9bSAndroid Build Coastguard Worker current=$func_arith_result 9030*663afb9bSAndroid Build Coastguard Worker age=$number_minor 9031*663afb9bSAndroid Build Coastguard Worker revision=$number_revision 9032*663afb9bSAndroid Build Coastguard Worker ;; 9033*663afb9bSAndroid Build Coastguard Worker freebsd-aout|qnx|sunos) 9034*663afb9bSAndroid Build Coastguard Worker current=$number_major 9035*663afb9bSAndroid Build Coastguard Worker revision=$number_minor 9036*663afb9bSAndroid Build Coastguard Worker age=0 9037*663afb9bSAndroid Build Coastguard Worker ;; 9038*663afb9bSAndroid Build Coastguard Worker irix|nonstopux) 9039*663afb9bSAndroid Build Coastguard Worker func_arith $number_major + $number_minor 9040*663afb9bSAndroid Build Coastguard Worker current=$func_arith_result 9041*663afb9bSAndroid Build Coastguard Worker age=$number_minor 9042*663afb9bSAndroid Build Coastguard Worker revision=$number_minor 9043*663afb9bSAndroid Build Coastguard Worker lt_irix_increment=no 9044*663afb9bSAndroid Build Coastguard Worker ;; 9045*663afb9bSAndroid Build Coastguard Worker esac 9046*663afb9bSAndroid Build Coastguard Worker ;; 9047*663afb9bSAndroid Build Coastguard Worker no) 9048*663afb9bSAndroid Build Coastguard Worker current=$1 9049*663afb9bSAndroid Build Coastguard Worker revision=$2 9050*663afb9bSAndroid Build Coastguard Worker age=$3 9051*663afb9bSAndroid Build Coastguard Worker ;; 9052*663afb9bSAndroid Build Coastguard Worker esac 9053*663afb9bSAndroid Build Coastguard Worker 9054*663afb9bSAndroid Build Coastguard Worker # Check that each of the things are valid numbers. 9055*663afb9bSAndroid Build Coastguard Worker case $current in 9056*663afb9bSAndroid 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]) ;; 9057*663afb9bSAndroid Build Coastguard Worker *) 9058*663afb9bSAndroid Build Coastguard Worker func_error "CURRENT '$current' must be a nonnegative integer" 9059*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$vinfo' is not valid version information" 9060*663afb9bSAndroid Build Coastguard Worker ;; 9061*663afb9bSAndroid Build Coastguard Worker esac 9062*663afb9bSAndroid Build Coastguard Worker 9063*663afb9bSAndroid Build Coastguard Worker case $revision in 9064*663afb9bSAndroid 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]) ;; 9065*663afb9bSAndroid Build Coastguard Worker *) 9066*663afb9bSAndroid Build Coastguard Worker func_error "REVISION '$revision' must be a nonnegative integer" 9067*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$vinfo' is not valid version information" 9068*663afb9bSAndroid Build Coastguard Worker ;; 9069*663afb9bSAndroid Build Coastguard Worker esac 9070*663afb9bSAndroid Build Coastguard Worker 9071*663afb9bSAndroid Build Coastguard Worker case $age in 9072*663afb9bSAndroid 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]) ;; 9073*663afb9bSAndroid Build Coastguard Worker *) 9074*663afb9bSAndroid Build Coastguard Worker func_error "AGE '$age' must be a nonnegative integer" 9075*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$vinfo' is not valid version information" 9076*663afb9bSAndroid Build Coastguard Worker ;; 9077*663afb9bSAndroid Build Coastguard Worker esac 9078*663afb9bSAndroid Build Coastguard Worker 9079*663afb9bSAndroid Build Coastguard Worker if test "$age" -gt "$current"; then 9080*663afb9bSAndroid Build Coastguard Worker func_error "AGE '$age' is greater than the current interface number '$current'" 9081*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$vinfo' is not valid version information" 9082*663afb9bSAndroid Build Coastguard Worker fi 9083*663afb9bSAndroid Build Coastguard Worker 9084*663afb9bSAndroid Build Coastguard Worker # Calculate the version variables. 9085*663afb9bSAndroid Build Coastguard Worker major= 9086*663afb9bSAndroid Build Coastguard Worker versuffix= 9087*663afb9bSAndroid Build Coastguard Worker verstring= 9088*663afb9bSAndroid Build Coastguard Worker case $version_type in 9089*663afb9bSAndroid Build Coastguard Worker none) ;; 9090*663afb9bSAndroid Build Coastguard Worker 9091*663afb9bSAndroid Build Coastguard Worker darwin) 9092*663afb9bSAndroid Build Coastguard Worker # Like Linux, but with the current version available in 9093*663afb9bSAndroid Build Coastguard Worker # verstring for coding it into the library header 9094*663afb9bSAndroid Build Coastguard Worker func_arith $current - $age 9095*663afb9bSAndroid Build Coastguard Worker major=.$func_arith_result 9096*663afb9bSAndroid Build Coastguard Worker versuffix=$major.$age.$revision 9097*663afb9bSAndroid Build Coastguard Worker # Darwin ld doesn't like 0 for these options... 9098*663afb9bSAndroid Build Coastguard Worker func_arith $current + 1 9099*663afb9bSAndroid Build Coastguard Worker minor_current=$func_arith_result 9100*663afb9bSAndroid Build Coastguard Worker xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9101*663afb9bSAndroid Build Coastguard Worker verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 9102*663afb9bSAndroid Build Coastguard Worker # On Darwin other compilers 9103*663afb9bSAndroid Build Coastguard Worker case $CC in 9104*663afb9bSAndroid Build Coastguard Worker nagfor*) 9105*663afb9bSAndroid Build Coastguard Worker verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9106*663afb9bSAndroid Build Coastguard Worker ;; 9107*663afb9bSAndroid Build Coastguard Worker *) 9108*663afb9bSAndroid Build Coastguard Worker verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 9109*663afb9bSAndroid Build Coastguard Worker ;; 9110*663afb9bSAndroid Build Coastguard Worker esac 9111*663afb9bSAndroid Build Coastguard Worker ;; 9112*663afb9bSAndroid Build Coastguard Worker 9113*663afb9bSAndroid Build Coastguard Worker freebsd-aout) 9114*663afb9bSAndroid Build Coastguard Worker major=.$current 9115*663afb9bSAndroid Build Coastguard Worker versuffix=.$current.$revision 9116*663afb9bSAndroid Build Coastguard Worker ;; 9117*663afb9bSAndroid Build Coastguard Worker 9118*663afb9bSAndroid Build Coastguard Worker freebsd-elf) 9119*663afb9bSAndroid Build Coastguard Worker func_arith $current - $age 9120*663afb9bSAndroid Build Coastguard Worker major=.$func_arith_result 9121*663afb9bSAndroid Build Coastguard Worker versuffix=$major.$age.$revision 9122*663afb9bSAndroid Build Coastguard Worker ;; 9123*663afb9bSAndroid Build Coastguard Worker 9124*663afb9bSAndroid Build Coastguard Worker irix | nonstopux) 9125*663afb9bSAndroid Build Coastguard Worker if test no = "$lt_irix_increment"; then 9126*663afb9bSAndroid Build Coastguard Worker func_arith $current - $age 9127*663afb9bSAndroid Build Coastguard Worker else 9128*663afb9bSAndroid Build Coastguard Worker func_arith $current - $age + 1 9129*663afb9bSAndroid Build Coastguard Worker fi 9130*663afb9bSAndroid Build Coastguard Worker major=$func_arith_result 9131*663afb9bSAndroid Build Coastguard Worker 9132*663afb9bSAndroid Build Coastguard Worker case $version_type in 9133*663afb9bSAndroid Build Coastguard Worker nonstopux) verstring_prefix=nonstopux ;; 9134*663afb9bSAndroid Build Coastguard Worker *) verstring_prefix=sgi ;; 9135*663afb9bSAndroid Build Coastguard Worker esac 9136*663afb9bSAndroid Build Coastguard Worker verstring=$verstring_prefix$major.$revision 9137*663afb9bSAndroid Build Coastguard Worker 9138*663afb9bSAndroid Build Coastguard Worker # Add in all the interfaces that we are compatible with. 9139*663afb9bSAndroid Build Coastguard Worker loop=$revision 9140*663afb9bSAndroid Build Coastguard Worker while test 0 -ne "$loop"; do 9141*663afb9bSAndroid Build Coastguard Worker func_arith $revision - $loop 9142*663afb9bSAndroid Build Coastguard Worker iface=$func_arith_result 9143*663afb9bSAndroid Build Coastguard Worker func_arith $loop - 1 9144*663afb9bSAndroid Build Coastguard Worker loop=$func_arith_result 9145*663afb9bSAndroid Build Coastguard Worker verstring=$verstring_prefix$major.$iface:$verstring 9146*663afb9bSAndroid Build Coastguard Worker done 9147*663afb9bSAndroid Build Coastguard Worker 9148*663afb9bSAndroid Build Coastguard Worker # Before this point, $major must not contain '.'. 9149*663afb9bSAndroid Build Coastguard Worker major=.$major 9150*663afb9bSAndroid Build Coastguard Worker versuffix=$major.$revision 9151*663afb9bSAndroid Build Coastguard Worker ;; 9152*663afb9bSAndroid Build Coastguard Worker 9153*663afb9bSAndroid Build Coastguard Worker linux) # correct to gnu/linux during the next big refactor 9154*663afb9bSAndroid Build Coastguard Worker func_arith $current - $age 9155*663afb9bSAndroid Build Coastguard Worker major=.$func_arith_result 9156*663afb9bSAndroid Build Coastguard Worker versuffix=$major.$age.$revision 9157*663afb9bSAndroid Build Coastguard Worker ;; 9158*663afb9bSAndroid Build Coastguard Worker 9159*663afb9bSAndroid Build Coastguard Worker osf) 9160*663afb9bSAndroid Build Coastguard Worker func_arith $current - $age 9161*663afb9bSAndroid Build Coastguard Worker major=.$func_arith_result 9162*663afb9bSAndroid Build Coastguard Worker versuffix=.$current.$age.$revision 9163*663afb9bSAndroid Build Coastguard Worker verstring=$current.$age.$revision 9164*663afb9bSAndroid Build Coastguard Worker 9165*663afb9bSAndroid Build Coastguard Worker # Add in all the interfaces that we are compatible with. 9166*663afb9bSAndroid Build Coastguard Worker loop=$age 9167*663afb9bSAndroid Build Coastguard Worker while test 0 -ne "$loop"; do 9168*663afb9bSAndroid Build Coastguard Worker func_arith $current - $loop 9169*663afb9bSAndroid Build Coastguard Worker iface=$func_arith_result 9170*663afb9bSAndroid Build Coastguard Worker func_arith $loop - 1 9171*663afb9bSAndroid Build Coastguard Worker loop=$func_arith_result 9172*663afb9bSAndroid Build Coastguard Worker verstring=$verstring:$iface.0 9173*663afb9bSAndroid Build Coastguard Worker done 9174*663afb9bSAndroid Build Coastguard Worker 9175*663afb9bSAndroid Build Coastguard Worker # Make executables depend on our current version. 9176*663afb9bSAndroid Build Coastguard Worker func_append verstring ":$current.0" 9177*663afb9bSAndroid Build Coastguard Worker ;; 9178*663afb9bSAndroid Build Coastguard Worker 9179*663afb9bSAndroid Build Coastguard Worker qnx) 9180*663afb9bSAndroid Build Coastguard Worker major=.$current 9181*663afb9bSAndroid Build Coastguard Worker versuffix=.$current 9182*663afb9bSAndroid Build Coastguard Worker ;; 9183*663afb9bSAndroid Build Coastguard Worker 9184*663afb9bSAndroid Build Coastguard Worker sco) 9185*663afb9bSAndroid Build Coastguard Worker major=.$current 9186*663afb9bSAndroid Build Coastguard Worker versuffix=.$current 9187*663afb9bSAndroid Build Coastguard Worker ;; 9188*663afb9bSAndroid Build Coastguard Worker 9189*663afb9bSAndroid Build Coastguard Worker sunos) 9190*663afb9bSAndroid Build Coastguard Worker major=.$current 9191*663afb9bSAndroid Build Coastguard Worker versuffix=.$current.$revision 9192*663afb9bSAndroid Build Coastguard Worker ;; 9193*663afb9bSAndroid Build Coastguard Worker 9194*663afb9bSAndroid Build Coastguard Worker windows) 9195*663afb9bSAndroid Build Coastguard Worker # Use '-' rather than '.', since we only want one 9196*663afb9bSAndroid Build Coastguard Worker # extension on DOS 8.3 file systems. 9197*663afb9bSAndroid Build Coastguard Worker func_arith $current - $age 9198*663afb9bSAndroid Build Coastguard Worker major=$func_arith_result 9199*663afb9bSAndroid Build Coastguard Worker versuffix=-$major 9200*663afb9bSAndroid Build Coastguard Worker ;; 9201*663afb9bSAndroid Build Coastguard Worker 9202*663afb9bSAndroid Build Coastguard Worker *) 9203*663afb9bSAndroid Build Coastguard Worker func_fatal_configuration "unknown library version type '$version_type'" 9204*663afb9bSAndroid Build Coastguard Worker ;; 9205*663afb9bSAndroid Build Coastguard Worker esac 9206*663afb9bSAndroid Build Coastguard Worker 9207*663afb9bSAndroid Build Coastguard Worker # Clear the version info if we defaulted, and they specified a release. 9208*663afb9bSAndroid Build Coastguard Worker if test -z "$vinfo" && test -n "$release"; then 9209*663afb9bSAndroid Build Coastguard Worker major= 9210*663afb9bSAndroid Build Coastguard Worker case $version_type in 9211*663afb9bSAndroid Build Coastguard Worker darwin) 9212*663afb9bSAndroid Build Coastguard Worker # we can't check for "0.0" in archive_cmds due to quoting 9213*663afb9bSAndroid Build Coastguard Worker # problems, so we reset it completely 9214*663afb9bSAndroid Build Coastguard Worker verstring= 9215*663afb9bSAndroid Build Coastguard Worker ;; 9216*663afb9bSAndroid Build Coastguard Worker *) 9217*663afb9bSAndroid Build Coastguard Worker verstring=0.0 9218*663afb9bSAndroid Build Coastguard Worker ;; 9219*663afb9bSAndroid Build Coastguard Worker esac 9220*663afb9bSAndroid Build Coastguard Worker if test no = "$need_version"; then 9221*663afb9bSAndroid Build Coastguard Worker versuffix= 9222*663afb9bSAndroid Build Coastguard Worker else 9223*663afb9bSAndroid Build Coastguard Worker versuffix=.0.0 9224*663afb9bSAndroid Build Coastguard Worker fi 9225*663afb9bSAndroid Build Coastguard Worker fi 9226*663afb9bSAndroid Build Coastguard Worker 9227*663afb9bSAndroid Build Coastguard Worker # Remove version info from name if versioning should be avoided 9228*663afb9bSAndroid Build Coastguard Worker if test yes,no = "$avoid_version,$need_version"; then 9229*663afb9bSAndroid Build Coastguard Worker major= 9230*663afb9bSAndroid Build Coastguard Worker versuffix= 9231*663afb9bSAndroid Build Coastguard Worker verstring= 9232*663afb9bSAndroid Build Coastguard Worker fi 9233*663afb9bSAndroid Build Coastguard Worker 9234*663afb9bSAndroid Build Coastguard Worker # Check to see if the archive will have undefined symbols. 9235*663afb9bSAndroid Build Coastguard Worker if test yes = "$allow_undefined"; then 9236*663afb9bSAndroid Build Coastguard Worker if test unsupported = "$allow_undefined_flag"; then 9237*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_old_libs"; then 9238*663afb9bSAndroid Build Coastguard Worker func_warning "undefined symbols not allowed in $host shared libraries; building static only" 9239*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=no 9240*663afb9bSAndroid Build Coastguard Worker else 9241*663afb9bSAndroid Build Coastguard Worker func_fatal_error "can't build $host shared library unless -no-undefined is specified" 9242*663afb9bSAndroid Build Coastguard Worker fi 9243*663afb9bSAndroid Build Coastguard Worker fi 9244*663afb9bSAndroid Build Coastguard Worker else 9245*663afb9bSAndroid Build Coastguard Worker # Don't allow undefined symbols. 9246*663afb9bSAndroid Build Coastguard Worker allow_undefined_flag=$no_undefined_flag 9247*663afb9bSAndroid Build Coastguard Worker fi 9248*663afb9bSAndroid Build Coastguard Worker 9249*663afb9bSAndroid Build Coastguard Worker fi 9250*663afb9bSAndroid Build Coastguard Worker 9251*663afb9bSAndroid Build Coastguard Worker func_generate_dlsyms "$libname" "$libname" : 9252*663afb9bSAndroid Build Coastguard Worker func_append libobjs " $symfileobj" 9253*663afb9bSAndroid Build Coastguard Worker test " " = "$libobjs" && libobjs= 9254*663afb9bSAndroid Build Coastguard Worker 9255*663afb9bSAndroid Build Coastguard Worker if test relink != "$opt_mode"; then 9256*663afb9bSAndroid Build Coastguard Worker # Remove our outputs, but don't remove object files since they 9257*663afb9bSAndroid Build Coastguard Worker # may have been created when compiling PIC objects. 9258*663afb9bSAndroid Build Coastguard Worker removelist= 9259*663afb9bSAndroid Build Coastguard Worker tempremovelist=`$ECHO "$output_objdir/*"` 9260*663afb9bSAndroid Build Coastguard Worker for p in $tempremovelist; do 9261*663afb9bSAndroid Build Coastguard Worker case $p in 9262*663afb9bSAndroid Build Coastguard Worker *.$objext | *.gcno) 9263*663afb9bSAndroid Build Coastguard Worker ;; 9264*663afb9bSAndroid Build Coastguard Worker $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 9265*663afb9bSAndroid Build Coastguard Worker if test -n "$precious_files_regex"; then 9266*663afb9bSAndroid Build Coastguard Worker if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9267*663afb9bSAndroid Build Coastguard Worker then 9268*663afb9bSAndroid Build Coastguard Worker continue 9269*663afb9bSAndroid Build Coastguard Worker fi 9270*663afb9bSAndroid Build Coastguard Worker fi 9271*663afb9bSAndroid Build Coastguard Worker func_append removelist " $p" 9272*663afb9bSAndroid Build Coastguard Worker ;; 9273*663afb9bSAndroid Build Coastguard Worker *) ;; 9274*663afb9bSAndroid Build Coastguard Worker esac 9275*663afb9bSAndroid Build Coastguard Worker done 9276*663afb9bSAndroid Build Coastguard Worker test -n "$removelist" && \ 9277*663afb9bSAndroid Build Coastguard Worker func_show_eval "${RM}r \$removelist" 9278*663afb9bSAndroid Build Coastguard Worker fi 9279*663afb9bSAndroid Build Coastguard Worker 9280*663afb9bSAndroid Build Coastguard Worker # Now set the variables for building old libraries. 9281*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9282*663afb9bSAndroid Build Coastguard Worker func_append oldlibs " $output_objdir/$libname.$libext" 9283*663afb9bSAndroid Build Coastguard Worker 9284*663afb9bSAndroid Build Coastguard Worker # Transform .lo files to .o files. 9285*663afb9bSAndroid Build Coastguard Worker oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9286*663afb9bSAndroid Build Coastguard Worker fi 9287*663afb9bSAndroid Build Coastguard Worker 9288*663afb9bSAndroid Build Coastguard Worker # Eliminate all temporary directories. 9289*663afb9bSAndroid Build Coastguard Worker #for path in $notinst_path; do 9290*663afb9bSAndroid Build Coastguard Worker # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9291*663afb9bSAndroid Build Coastguard Worker # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9292*663afb9bSAndroid Build Coastguard Worker # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9293*663afb9bSAndroid Build Coastguard Worker #done 9294*663afb9bSAndroid Build Coastguard Worker 9295*663afb9bSAndroid Build Coastguard Worker if test -n "$xrpath"; then 9296*663afb9bSAndroid Build Coastguard Worker # If the user specified any rpath flags, then add them. 9297*663afb9bSAndroid Build Coastguard Worker temp_xrpath= 9298*663afb9bSAndroid Build Coastguard Worker for libdir in $xrpath; do 9299*663afb9bSAndroid Build Coastguard Worker func_replace_sysroot "$libdir" 9300*663afb9bSAndroid Build Coastguard Worker func_append temp_xrpath " -R$func_replace_sysroot_result" 9301*663afb9bSAndroid Build Coastguard Worker case "$finalize_rpath " in 9302*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 9303*663afb9bSAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 9304*663afb9bSAndroid Build Coastguard Worker esac 9305*663afb9bSAndroid Build Coastguard Worker done 9306*663afb9bSAndroid Build Coastguard Worker if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9307*663afb9bSAndroid Build Coastguard Worker dependency_libs="$temp_xrpath $dependency_libs" 9308*663afb9bSAndroid Build Coastguard Worker fi 9309*663afb9bSAndroid Build Coastguard Worker fi 9310*663afb9bSAndroid Build Coastguard Worker 9311*663afb9bSAndroid Build Coastguard Worker # Make sure dlfiles contains only unique files that won't be dlpreopened 9312*663afb9bSAndroid Build Coastguard Worker old_dlfiles=$dlfiles 9313*663afb9bSAndroid Build Coastguard Worker dlfiles= 9314*663afb9bSAndroid Build Coastguard Worker for lib in $old_dlfiles; do 9315*663afb9bSAndroid Build Coastguard Worker case " $dlprefiles $dlfiles " in 9316*663afb9bSAndroid Build Coastguard Worker *" $lib "*) ;; 9317*663afb9bSAndroid Build Coastguard Worker *) func_append dlfiles " $lib" ;; 9318*663afb9bSAndroid Build Coastguard Worker esac 9319*663afb9bSAndroid Build Coastguard Worker done 9320*663afb9bSAndroid Build Coastguard Worker 9321*663afb9bSAndroid Build Coastguard Worker # Make sure dlprefiles contains only unique files 9322*663afb9bSAndroid Build Coastguard Worker old_dlprefiles=$dlprefiles 9323*663afb9bSAndroid Build Coastguard Worker dlprefiles= 9324*663afb9bSAndroid Build Coastguard Worker for lib in $old_dlprefiles; do 9325*663afb9bSAndroid Build Coastguard Worker case "$dlprefiles " in 9326*663afb9bSAndroid Build Coastguard Worker *" $lib "*) ;; 9327*663afb9bSAndroid Build Coastguard Worker *) func_append dlprefiles " $lib" ;; 9328*663afb9bSAndroid Build Coastguard Worker esac 9329*663afb9bSAndroid Build Coastguard Worker done 9330*663afb9bSAndroid Build Coastguard Worker 9331*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 9332*663afb9bSAndroid Build Coastguard Worker if test -n "$rpath"; then 9333*663afb9bSAndroid Build Coastguard Worker case $host in 9334*663afb9bSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9335*663afb9bSAndroid Build Coastguard Worker # these systems don't actually have a c library (as such)! 9336*663afb9bSAndroid Build Coastguard Worker ;; 9337*663afb9bSAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 9338*663afb9bSAndroid Build Coastguard Worker # Rhapsody C library is in the System framework 9339*663afb9bSAndroid Build Coastguard Worker func_append deplibs " System.ltframework" 9340*663afb9bSAndroid Build Coastguard Worker ;; 9341*663afb9bSAndroid Build Coastguard Worker *-*-netbsd*) 9342*663afb9bSAndroid Build Coastguard Worker # Don't link with libc until the a.out ld.so is fixed. 9343*663afb9bSAndroid Build Coastguard Worker ;; 9344*663afb9bSAndroid Build Coastguard Worker *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 9345*663afb9bSAndroid Build Coastguard Worker # Do not include libc due to us having libc/libc_r. 9346*663afb9bSAndroid Build Coastguard Worker ;; 9347*663afb9bSAndroid Build Coastguard Worker *-*-sco3.2v5* | *-*-sco5v6*) 9348*663afb9bSAndroid Build Coastguard Worker # Causes problems with __ctype 9349*663afb9bSAndroid Build Coastguard Worker ;; 9350*663afb9bSAndroid Build Coastguard Worker *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9351*663afb9bSAndroid Build Coastguard Worker # Compiler inserts libc in the correct place for threads to work 9352*663afb9bSAndroid Build Coastguard Worker ;; 9353*663afb9bSAndroid Build Coastguard Worker *) 9354*663afb9bSAndroid Build Coastguard Worker # Add libc to deplibs on all other systems if necessary. 9355*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_libtool_need_lc"; then 9356*663afb9bSAndroid Build Coastguard Worker func_append deplibs " -lc" 9357*663afb9bSAndroid Build Coastguard Worker fi 9358*663afb9bSAndroid Build Coastguard Worker ;; 9359*663afb9bSAndroid Build Coastguard Worker esac 9360*663afb9bSAndroid Build Coastguard Worker fi 9361*663afb9bSAndroid Build Coastguard Worker 9362*663afb9bSAndroid Build Coastguard Worker # Transform deplibs into only deplibs that can be linked in shared. 9363*663afb9bSAndroid Build Coastguard Worker name_save=$name 9364*663afb9bSAndroid Build Coastguard Worker libname_save=$libname 9365*663afb9bSAndroid Build Coastguard Worker release_save=$release 9366*663afb9bSAndroid Build Coastguard Worker versuffix_save=$versuffix 9367*663afb9bSAndroid Build Coastguard Worker major_save=$major 9368*663afb9bSAndroid Build Coastguard Worker # I'm not sure if I'm treating the release correctly. I think 9369*663afb9bSAndroid Build Coastguard Worker # release should show up in the -l (ie -lgmp5) so we don't want to 9370*663afb9bSAndroid Build Coastguard Worker # add it in twice. Is that correct? 9371*663afb9bSAndroid Build Coastguard Worker release= 9372*663afb9bSAndroid Build Coastguard Worker versuffix= 9373*663afb9bSAndroid Build Coastguard Worker major= 9374*663afb9bSAndroid Build Coastguard Worker newdeplibs= 9375*663afb9bSAndroid Build Coastguard Worker droppeddeps=no 9376*663afb9bSAndroid Build Coastguard Worker case $deplibs_check_method in 9377*663afb9bSAndroid Build Coastguard Worker pass_all) 9378*663afb9bSAndroid Build Coastguard Worker # Don't check for shared/static. Everything works. 9379*663afb9bSAndroid Build Coastguard Worker # This might be a little naive. We might want to check 9380*663afb9bSAndroid Build Coastguard Worker # whether the library exists or not. But this is on 9381*663afb9bSAndroid Build Coastguard Worker # osf3 & osf4 and I'm not really sure... Just 9382*663afb9bSAndroid Build Coastguard Worker # implementing what was already the behavior. 9383*663afb9bSAndroid Build Coastguard Worker newdeplibs=$deplibs 9384*663afb9bSAndroid Build Coastguard Worker ;; 9385*663afb9bSAndroid Build Coastguard Worker test_compile) 9386*663afb9bSAndroid Build Coastguard Worker # This code stresses the "libraries are programs" paradigm to its 9387*663afb9bSAndroid Build Coastguard Worker # limits. Maybe even breaks it. We compile a program, linking it 9388*663afb9bSAndroid Build Coastguard Worker # against the deplibs as a proxy for the library. Then we can check 9389*663afb9bSAndroid Build Coastguard Worker # whether they linked in statically or dynamically with ldd. 9390*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM conftest.c 9391*663afb9bSAndroid Build Coastguard Worker cat > conftest.c <<EOF 9392*663afb9bSAndroid Build Coastguard Worker int main() { return 0; } 9393*663afb9bSAndroid Build Coastguard WorkerEOF 9394*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM conftest 9395*663afb9bSAndroid Build Coastguard Worker if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9396*663afb9bSAndroid Build Coastguard Worker ldd_output=`ldd conftest` 9397*663afb9bSAndroid Build Coastguard Worker for i in $deplibs; do 9398*663afb9bSAndroid Build Coastguard Worker case $i in 9399*663afb9bSAndroid Build Coastguard Worker -l*) 9400*663afb9bSAndroid Build Coastguard Worker func_stripname -l '' "$i" 9401*663afb9bSAndroid Build Coastguard Worker name=$func_stripname_result 9402*663afb9bSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9403*663afb9bSAndroid Build Coastguard Worker case " $predeps $postdeps " in 9404*663afb9bSAndroid Build Coastguard Worker *" $i "*) 9405*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9406*663afb9bSAndroid Build Coastguard Worker i= 9407*663afb9bSAndroid Build Coastguard Worker ;; 9408*663afb9bSAndroid Build Coastguard Worker esac 9409*663afb9bSAndroid Build Coastguard Worker fi 9410*663afb9bSAndroid Build Coastguard Worker if test -n "$i"; then 9411*663afb9bSAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 9412*663afb9bSAndroid Build Coastguard Worker deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9413*663afb9bSAndroid Build Coastguard Worker set dummy $deplib_matches; shift 9414*663afb9bSAndroid Build Coastguard Worker deplib_match=$1 9415*663afb9bSAndroid Build Coastguard Worker if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9416*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9417*663afb9bSAndroid Build Coastguard Worker else 9418*663afb9bSAndroid Build Coastguard Worker droppeddeps=yes 9419*663afb9bSAndroid Build Coastguard Worker echo 9420*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9421*663afb9bSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 9422*663afb9bSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 9423*663afb9bSAndroid Build Coastguard Worker echo "*** shared version of the library, which I believe you do not have" 9424*663afb9bSAndroid Build Coastguard Worker echo "*** because a test_compile did reveal that the linker did not use it for" 9425*663afb9bSAndroid Build Coastguard Worker echo "*** its dynamic dependency list that programs get resolved with at runtime." 9426*663afb9bSAndroid Build Coastguard Worker fi 9427*663afb9bSAndroid Build Coastguard Worker fi 9428*663afb9bSAndroid Build Coastguard Worker ;; 9429*663afb9bSAndroid Build Coastguard Worker *) 9430*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9431*663afb9bSAndroid Build Coastguard Worker ;; 9432*663afb9bSAndroid Build Coastguard Worker esac 9433*663afb9bSAndroid Build Coastguard Worker done 9434*663afb9bSAndroid Build Coastguard Worker else 9435*663afb9bSAndroid Build Coastguard Worker # Error occurred in the first compile. Let's try to salvage 9436*663afb9bSAndroid Build Coastguard Worker # the situation: Compile a separate program for each library. 9437*663afb9bSAndroid Build Coastguard Worker for i in $deplibs; do 9438*663afb9bSAndroid Build Coastguard Worker case $i in 9439*663afb9bSAndroid Build Coastguard Worker -l*) 9440*663afb9bSAndroid Build Coastguard Worker func_stripname -l '' "$i" 9441*663afb9bSAndroid Build Coastguard Worker name=$func_stripname_result 9442*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM conftest 9443*663afb9bSAndroid Build Coastguard Worker if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9444*663afb9bSAndroid Build Coastguard Worker ldd_output=`ldd conftest` 9445*663afb9bSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9446*663afb9bSAndroid Build Coastguard Worker case " $predeps $postdeps " in 9447*663afb9bSAndroid Build Coastguard Worker *" $i "*) 9448*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9449*663afb9bSAndroid Build Coastguard Worker i= 9450*663afb9bSAndroid Build Coastguard Worker ;; 9451*663afb9bSAndroid Build Coastguard Worker esac 9452*663afb9bSAndroid Build Coastguard Worker fi 9453*663afb9bSAndroid Build Coastguard Worker if test -n "$i"; then 9454*663afb9bSAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 9455*663afb9bSAndroid Build Coastguard Worker deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9456*663afb9bSAndroid Build Coastguard Worker set dummy $deplib_matches; shift 9457*663afb9bSAndroid Build Coastguard Worker deplib_match=$1 9458*663afb9bSAndroid Build Coastguard Worker if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9459*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9460*663afb9bSAndroid Build Coastguard Worker else 9461*663afb9bSAndroid Build Coastguard Worker droppeddeps=yes 9462*663afb9bSAndroid Build Coastguard Worker echo 9463*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9464*663afb9bSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 9465*663afb9bSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 9466*663afb9bSAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 9467*663afb9bSAndroid Build Coastguard Worker echo "*** because a test_compile did reveal that the linker did not use this one" 9468*663afb9bSAndroid Build Coastguard Worker echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9469*663afb9bSAndroid Build Coastguard Worker fi 9470*663afb9bSAndroid Build Coastguard Worker fi 9471*663afb9bSAndroid Build Coastguard Worker else 9472*663afb9bSAndroid Build Coastguard Worker droppeddeps=yes 9473*663afb9bSAndroid Build Coastguard Worker echo 9474*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9475*663afb9bSAndroid Build Coastguard Worker echo "*** make it link in! You will probably need to install it or some" 9476*663afb9bSAndroid Build Coastguard Worker echo "*** library that it depends on before this library will be fully" 9477*663afb9bSAndroid Build Coastguard Worker echo "*** functional. Installing it before continuing would be even better." 9478*663afb9bSAndroid Build Coastguard Worker fi 9479*663afb9bSAndroid Build Coastguard Worker ;; 9480*663afb9bSAndroid Build Coastguard Worker *) 9481*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $i" 9482*663afb9bSAndroid Build Coastguard Worker ;; 9483*663afb9bSAndroid Build Coastguard Worker esac 9484*663afb9bSAndroid Build Coastguard Worker done 9485*663afb9bSAndroid Build Coastguard Worker fi 9486*663afb9bSAndroid Build Coastguard Worker ;; 9487*663afb9bSAndroid Build Coastguard Worker file_magic*) 9488*663afb9bSAndroid Build Coastguard Worker set dummy $deplibs_check_method; shift 9489*663afb9bSAndroid Build Coastguard Worker file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9490*663afb9bSAndroid Build Coastguard Worker for a_deplib in $deplibs; do 9491*663afb9bSAndroid Build Coastguard Worker case $a_deplib in 9492*663afb9bSAndroid Build Coastguard Worker -l*) 9493*663afb9bSAndroid Build Coastguard Worker func_stripname -l '' "$a_deplib" 9494*663afb9bSAndroid Build Coastguard Worker name=$func_stripname_result 9495*663afb9bSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9496*663afb9bSAndroid Build Coastguard Worker case " $predeps $postdeps " in 9497*663afb9bSAndroid Build Coastguard Worker *" $a_deplib "*) 9498*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9499*663afb9bSAndroid Build Coastguard Worker a_deplib= 9500*663afb9bSAndroid Build Coastguard Worker ;; 9501*663afb9bSAndroid Build Coastguard Worker esac 9502*663afb9bSAndroid Build Coastguard Worker fi 9503*663afb9bSAndroid Build Coastguard Worker if test -n "$a_deplib"; then 9504*663afb9bSAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 9505*663afb9bSAndroid Build Coastguard Worker if test -n "$file_magic_glob"; then 9506*663afb9bSAndroid Build Coastguard Worker libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9507*663afb9bSAndroid Build Coastguard Worker else 9508*663afb9bSAndroid Build Coastguard Worker libnameglob=$libname 9509*663afb9bSAndroid Build Coastguard Worker fi 9510*663afb9bSAndroid Build Coastguard Worker test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9511*663afb9bSAndroid Build Coastguard Worker for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9512*663afb9bSAndroid Build Coastguard Worker if test yes = "$want_nocaseglob"; then 9513*663afb9bSAndroid Build Coastguard Worker shopt -s nocaseglob 9514*663afb9bSAndroid Build Coastguard Worker potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9515*663afb9bSAndroid Build Coastguard Worker $nocaseglob 9516*663afb9bSAndroid Build Coastguard Worker else 9517*663afb9bSAndroid Build Coastguard Worker potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9518*663afb9bSAndroid Build Coastguard Worker fi 9519*663afb9bSAndroid Build Coastguard Worker for potent_lib in $potential_libs; do 9520*663afb9bSAndroid Build Coastguard Worker # Follow soft links. 9521*663afb9bSAndroid Build Coastguard Worker if ls -lLd "$potent_lib" 2>/dev/null | 9522*663afb9bSAndroid Build Coastguard Worker $GREP " -> " >/dev/null; then 9523*663afb9bSAndroid Build Coastguard Worker continue 9524*663afb9bSAndroid Build Coastguard Worker fi 9525*663afb9bSAndroid Build Coastguard Worker # The statement above tries to avoid entering an 9526*663afb9bSAndroid Build Coastguard Worker # endless loop below, in case of cyclic links. 9527*663afb9bSAndroid Build Coastguard Worker # We might still enter an endless loop, since a link 9528*663afb9bSAndroid Build Coastguard Worker # loop can be closed while we follow links, 9529*663afb9bSAndroid Build Coastguard Worker # but so what? 9530*663afb9bSAndroid Build Coastguard Worker potlib=$potent_lib 9531*663afb9bSAndroid Build Coastguard Worker while test -h "$potlib" 2>/dev/null; do 9532*663afb9bSAndroid Build Coastguard Worker potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9533*663afb9bSAndroid Build Coastguard Worker case $potliblink in 9534*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 9535*663afb9bSAndroid Build Coastguard Worker *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9536*663afb9bSAndroid Build Coastguard Worker esac 9537*663afb9bSAndroid Build Coastguard Worker done 9538*663afb9bSAndroid Build Coastguard Worker if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9539*663afb9bSAndroid Build Coastguard Worker $SED -e 10q | 9540*663afb9bSAndroid Build Coastguard Worker $EGREP "$file_magic_regex" > /dev/null; then 9541*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9542*663afb9bSAndroid Build Coastguard Worker a_deplib= 9543*663afb9bSAndroid Build Coastguard Worker break 2 9544*663afb9bSAndroid Build Coastguard Worker fi 9545*663afb9bSAndroid Build Coastguard Worker done 9546*663afb9bSAndroid Build Coastguard Worker done 9547*663afb9bSAndroid Build Coastguard Worker fi 9548*663afb9bSAndroid Build Coastguard Worker if test -n "$a_deplib"; then 9549*663afb9bSAndroid Build Coastguard Worker droppeddeps=yes 9550*663afb9bSAndroid Build Coastguard Worker echo 9551*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9552*663afb9bSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 9553*663afb9bSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 9554*663afb9bSAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 9555*663afb9bSAndroid Build Coastguard Worker echo "*** because I did check the linker path looking for a file starting" 9556*663afb9bSAndroid Build Coastguard Worker if test -z "$potlib"; then 9557*663afb9bSAndroid Build Coastguard Worker $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9558*663afb9bSAndroid Build Coastguard Worker else 9559*663afb9bSAndroid Build Coastguard Worker $ECHO "*** with $libname and none of the candidates passed a file format test" 9560*663afb9bSAndroid Build Coastguard Worker $ECHO "*** using a file magic. Last file checked: $potlib" 9561*663afb9bSAndroid Build Coastguard Worker fi 9562*663afb9bSAndroid Build Coastguard Worker fi 9563*663afb9bSAndroid Build Coastguard Worker ;; 9564*663afb9bSAndroid Build Coastguard Worker *) 9565*663afb9bSAndroid Build Coastguard Worker # Add a -L argument. 9566*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9567*663afb9bSAndroid Build Coastguard Worker ;; 9568*663afb9bSAndroid Build Coastguard Worker esac 9569*663afb9bSAndroid Build Coastguard Worker done # Gone through all deplibs. 9570*663afb9bSAndroid Build Coastguard Worker ;; 9571*663afb9bSAndroid Build Coastguard Worker match_pattern*) 9572*663afb9bSAndroid Build Coastguard Worker set dummy $deplibs_check_method; shift 9573*663afb9bSAndroid Build Coastguard Worker match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9574*663afb9bSAndroid Build Coastguard Worker for a_deplib in $deplibs; do 9575*663afb9bSAndroid Build Coastguard Worker case $a_deplib in 9576*663afb9bSAndroid Build Coastguard Worker -l*) 9577*663afb9bSAndroid Build Coastguard Worker func_stripname -l '' "$a_deplib" 9578*663afb9bSAndroid Build Coastguard Worker name=$func_stripname_result 9579*663afb9bSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9580*663afb9bSAndroid Build Coastguard Worker case " $predeps $postdeps " in 9581*663afb9bSAndroid Build Coastguard Worker *" $a_deplib "*) 9582*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9583*663afb9bSAndroid Build Coastguard Worker a_deplib= 9584*663afb9bSAndroid Build Coastguard Worker ;; 9585*663afb9bSAndroid Build Coastguard Worker esac 9586*663afb9bSAndroid Build Coastguard Worker fi 9587*663afb9bSAndroid Build Coastguard Worker if test -n "$a_deplib"; then 9588*663afb9bSAndroid Build Coastguard Worker libname=`eval "\\$ECHO \"$libname_spec\""` 9589*663afb9bSAndroid Build Coastguard Worker for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9590*663afb9bSAndroid Build Coastguard Worker potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9591*663afb9bSAndroid Build Coastguard Worker for potent_lib in $potential_libs; do 9592*663afb9bSAndroid Build Coastguard Worker potlib=$potent_lib # see symlink-check above in file_magic test 9593*663afb9bSAndroid Build Coastguard Worker if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9594*663afb9bSAndroid Build Coastguard Worker $EGREP "$match_pattern_regex" > /dev/null; then 9595*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9596*663afb9bSAndroid Build Coastguard Worker a_deplib= 9597*663afb9bSAndroid Build Coastguard Worker break 2 9598*663afb9bSAndroid Build Coastguard Worker fi 9599*663afb9bSAndroid Build Coastguard Worker done 9600*663afb9bSAndroid Build Coastguard Worker done 9601*663afb9bSAndroid Build Coastguard Worker fi 9602*663afb9bSAndroid Build Coastguard Worker if test -n "$a_deplib"; then 9603*663afb9bSAndroid Build Coastguard Worker droppeddeps=yes 9604*663afb9bSAndroid Build Coastguard Worker echo 9605*663afb9bSAndroid Build Coastguard Worker $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9606*663afb9bSAndroid Build Coastguard Worker echo "*** I have the capability to make that library automatically link in when" 9607*663afb9bSAndroid Build Coastguard Worker echo "*** you link to this library. But I can only do this if you have a" 9608*663afb9bSAndroid Build Coastguard Worker echo "*** shared version of the library, which you do not appear to have" 9609*663afb9bSAndroid Build Coastguard Worker echo "*** because I did check the linker path looking for a file starting" 9610*663afb9bSAndroid Build Coastguard Worker if test -z "$potlib"; then 9611*663afb9bSAndroid Build Coastguard Worker $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9612*663afb9bSAndroid Build Coastguard Worker else 9613*663afb9bSAndroid Build Coastguard Worker $ECHO "*** with $libname and none of the candidates passed a file format test" 9614*663afb9bSAndroid Build Coastguard Worker $ECHO "*** using a regex pattern. Last file checked: $potlib" 9615*663afb9bSAndroid Build Coastguard Worker fi 9616*663afb9bSAndroid Build Coastguard Worker fi 9617*663afb9bSAndroid Build Coastguard Worker ;; 9618*663afb9bSAndroid Build Coastguard Worker *) 9619*663afb9bSAndroid Build Coastguard Worker # Add a -L argument. 9620*663afb9bSAndroid Build Coastguard Worker func_append newdeplibs " $a_deplib" 9621*663afb9bSAndroid Build Coastguard Worker ;; 9622*663afb9bSAndroid Build Coastguard Worker esac 9623*663afb9bSAndroid Build Coastguard Worker done # Gone through all deplibs. 9624*663afb9bSAndroid Build Coastguard Worker ;; 9625*663afb9bSAndroid Build Coastguard Worker none | unknown | *) 9626*663afb9bSAndroid Build Coastguard Worker newdeplibs= 9627*663afb9bSAndroid Build Coastguard Worker tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 9628*663afb9bSAndroid Build Coastguard Worker if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9629*663afb9bSAndroid Build Coastguard Worker for i in $predeps $postdeps; do 9630*663afb9bSAndroid Build Coastguard Worker # can't use Xsed below, because $i might contain '/' 9631*663afb9bSAndroid Build Coastguard Worker tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9632*663afb9bSAndroid Build Coastguard Worker done 9633*663afb9bSAndroid Build Coastguard Worker fi 9634*663afb9bSAndroid Build Coastguard Worker case $tmp_deplibs in 9635*663afb9bSAndroid Build Coastguard Worker *[!\ \ ]*) 9636*663afb9bSAndroid Build Coastguard Worker echo 9637*663afb9bSAndroid Build Coastguard Worker if test none = "$deplibs_check_method"; then 9638*663afb9bSAndroid Build Coastguard Worker echo "*** Warning: inter-library dependencies are not supported in this platform." 9639*663afb9bSAndroid Build Coastguard Worker else 9640*663afb9bSAndroid Build Coastguard Worker echo "*** Warning: inter-library dependencies are not known to be supported." 9641*663afb9bSAndroid Build Coastguard Worker fi 9642*663afb9bSAndroid Build Coastguard Worker echo "*** All declared inter-library dependencies are being dropped." 9643*663afb9bSAndroid Build Coastguard Worker droppeddeps=yes 9644*663afb9bSAndroid Build Coastguard Worker ;; 9645*663afb9bSAndroid Build Coastguard Worker esac 9646*663afb9bSAndroid Build Coastguard Worker ;; 9647*663afb9bSAndroid Build Coastguard Worker esac 9648*663afb9bSAndroid Build Coastguard Worker versuffix=$versuffix_save 9649*663afb9bSAndroid Build Coastguard Worker major=$major_save 9650*663afb9bSAndroid Build Coastguard Worker release=$release_save 9651*663afb9bSAndroid Build Coastguard Worker libname=$libname_save 9652*663afb9bSAndroid Build Coastguard Worker name=$name_save 9653*663afb9bSAndroid Build Coastguard Worker 9654*663afb9bSAndroid Build Coastguard Worker case $host in 9655*663afb9bSAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 9656*663afb9bSAndroid Build Coastguard Worker # On Rhapsody replace the C library with the System framework 9657*663afb9bSAndroid Build Coastguard Worker newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9658*663afb9bSAndroid Build Coastguard Worker ;; 9659*663afb9bSAndroid Build Coastguard Worker esac 9660*663afb9bSAndroid Build Coastguard Worker 9661*663afb9bSAndroid Build Coastguard Worker if test yes = "$droppeddeps"; then 9662*663afb9bSAndroid Build Coastguard Worker if test yes = "$module"; then 9663*663afb9bSAndroid Build Coastguard Worker echo 9664*663afb9bSAndroid Build Coastguard Worker echo "*** Warning: libtool could not satisfy all declared inter-library" 9665*663afb9bSAndroid Build Coastguard Worker $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9666*663afb9bSAndroid Build Coastguard Worker echo "*** a static module, that should work as long as the dlopening" 9667*663afb9bSAndroid Build Coastguard Worker echo "*** application is linked with the -dlopen flag." 9668*663afb9bSAndroid Build Coastguard Worker if test -z "$global_symbol_pipe"; then 9669*663afb9bSAndroid Build Coastguard Worker echo 9670*663afb9bSAndroid Build Coastguard Worker echo "*** However, this would only work if libtool was able to extract symbol" 9671*663afb9bSAndroid Build Coastguard Worker echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9672*663afb9bSAndroid Build Coastguard Worker echo "*** not find such a program. So, this module is probably useless." 9673*663afb9bSAndroid Build Coastguard Worker echo "*** 'nm' from GNU binutils and a full rebuild may help." 9674*663afb9bSAndroid Build Coastguard Worker fi 9675*663afb9bSAndroid Build Coastguard Worker if test no = "$build_old_libs"; then 9676*663afb9bSAndroid Build Coastguard Worker oldlibs=$output_objdir/$libname.$libext 9677*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=module 9678*663afb9bSAndroid Build Coastguard Worker build_old_libs=yes 9679*663afb9bSAndroid Build Coastguard Worker else 9680*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=no 9681*663afb9bSAndroid Build Coastguard Worker fi 9682*663afb9bSAndroid Build Coastguard Worker else 9683*663afb9bSAndroid Build Coastguard Worker echo "*** The inter-library dependencies that have been dropped here will be" 9684*663afb9bSAndroid Build Coastguard Worker echo "*** automatically added whenever a program is linked with this library" 9685*663afb9bSAndroid Build Coastguard Worker echo "*** or is declared to -dlopen it." 9686*663afb9bSAndroid Build Coastguard Worker 9687*663afb9bSAndroid Build Coastguard Worker if test no = "$allow_undefined"; then 9688*663afb9bSAndroid Build Coastguard Worker echo 9689*663afb9bSAndroid Build Coastguard Worker echo "*** Since this library must not contain undefined symbols," 9690*663afb9bSAndroid Build Coastguard Worker echo "*** because either the platform does not support them or" 9691*663afb9bSAndroid Build Coastguard Worker echo "*** it was explicitly requested with -no-undefined," 9692*663afb9bSAndroid Build Coastguard Worker echo "*** libtool will only create a static version of it." 9693*663afb9bSAndroid Build Coastguard Worker if test no = "$build_old_libs"; then 9694*663afb9bSAndroid Build Coastguard Worker oldlibs=$output_objdir/$libname.$libext 9695*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=module 9696*663afb9bSAndroid Build Coastguard Worker build_old_libs=yes 9697*663afb9bSAndroid Build Coastguard Worker else 9698*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=no 9699*663afb9bSAndroid Build Coastguard Worker fi 9700*663afb9bSAndroid Build Coastguard Worker fi 9701*663afb9bSAndroid Build Coastguard Worker fi 9702*663afb9bSAndroid Build Coastguard Worker fi 9703*663afb9bSAndroid Build Coastguard Worker # Done checking deplibs! 9704*663afb9bSAndroid Build Coastguard Worker deplibs=$newdeplibs 9705*663afb9bSAndroid Build Coastguard Worker fi 9706*663afb9bSAndroid Build Coastguard Worker # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9707*663afb9bSAndroid Build Coastguard Worker case $host in 9708*663afb9bSAndroid Build Coastguard Worker *-*-darwin*) 9709*663afb9bSAndroid Build Coastguard Worker newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9710*663afb9bSAndroid Build Coastguard Worker new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9711*663afb9bSAndroid Build Coastguard Worker deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9712*663afb9bSAndroid Build Coastguard Worker ;; 9713*663afb9bSAndroid Build Coastguard Worker esac 9714*663afb9bSAndroid Build Coastguard Worker 9715*663afb9bSAndroid Build Coastguard Worker # move library search paths that coincide with paths to not yet 9716*663afb9bSAndroid Build Coastguard Worker # installed libraries to the beginning of the library search list 9717*663afb9bSAndroid Build Coastguard Worker new_libs= 9718*663afb9bSAndroid Build Coastguard Worker for path in $notinst_path; do 9719*663afb9bSAndroid Build Coastguard Worker case " $new_libs " in 9720*663afb9bSAndroid Build Coastguard Worker *" -L$path/$objdir "*) ;; 9721*663afb9bSAndroid Build Coastguard Worker *) 9722*663afb9bSAndroid Build Coastguard Worker case " $deplibs " in 9723*663afb9bSAndroid Build Coastguard Worker *" -L$path/$objdir "*) 9724*663afb9bSAndroid Build Coastguard Worker func_append new_libs " -L$path/$objdir" ;; 9725*663afb9bSAndroid Build Coastguard Worker esac 9726*663afb9bSAndroid Build Coastguard Worker ;; 9727*663afb9bSAndroid Build Coastguard Worker esac 9728*663afb9bSAndroid Build Coastguard Worker done 9729*663afb9bSAndroid Build Coastguard Worker for deplib in $deplibs; do 9730*663afb9bSAndroid Build Coastguard Worker case $deplib in 9731*663afb9bSAndroid Build Coastguard Worker -L*) 9732*663afb9bSAndroid Build Coastguard Worker case " $new_libs " in 9733*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) ;; 9734*663afb9bSAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 9735*663afb9bSAndroid Build Coastguard Worker esac 9736*663afb9bSAndroid Build Coastguard Worker ;; 9737*663afb9bSAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 9738*663afb9bSAndroid Build Coastguard Worker esac 9739*663afb9bSAndroid Build Coastguard Worker done 9740*663afb9bSAndroid Build Coastguard Worker deplibs=$new_libs 9741*663afb9bSAndroid Build Coastguard Worker 9742*663afb9bSAndroid Build Coastguard Worker # All the library-specific variables (install_libdir is set above). 9743*663afb9bSAndroid Build Coastguard Worker library_names= 9744*663afb9bSAndroid Build Coastguard Worker old_library= 9745*663afb9bSAndroid Build Coastguard Worker dlname= 9746*663afb9bSAndroid Build Coastguard Worker 9747*663afb9bSAndroid Build Coastguard Worker # Test again, we may have decided not to build it any more 9748*663afb9bSAndroid Build Coastguard Worker if test yes = "$build_libtool_libs"; then 9749*663afb9bSAndroid Build Coastguard Worker # Remove $wl instances when linking with ld. 9750*663afb9bSAndroid Build Coastguard Worker # FIXME: should test the right _cmds variable. 9751*663afb9bSAndroid Build Coastguard Worker case $archive_cmds in 9752*663afb9bSAndroid Build Coastguard Worker *\$LD\ *) wl= ;; 9753*663afb9bSAndroid Build Coastguard Worker esac 9754*663afb9bSAndroid Build Coastguard Worker if test yes = "$hardcode_into_libs"; then 9755*663afb9bSAndroid Build Coastguard Worker # Hardcode the library paths 9756*663afb9bSAndroid Build Coastguard Worker hardcode_libdirs= 9757*663afb9bSAndroid Build Coastguard Worker dep_rpath= 9758*663afb9bSAndroid Build Coastguard Worker rpath=$finalize_rpath 9759*663afb9bSAndroid Build Coastguard Worker test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9760*663afb9bSAndroid Build Coastguard Worker for libdir in $rpath; do 9761*663afb9bSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 9762*663afb9bSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator"; then 9763*663afb9bSAndroid Build Coastguard Worker func_replace_sysroot "$libdir" 9764*663afb9bSAndroid Build Coastguard Worker libdir=$func_replace_sysroot_result 9765*663afb9bSAndroid Build Coastguard Worker if test -z "$hardcode_libdirs"; then 9766*663afb9bSAndroid Build Coastguard Worker hardcode_libdirs=$libdir 9767*663afb9bSAndroid Build Coastguard Worker else 9768*663afb9bSAndroid Build Coastguard Worker # Just accumulate the unique libdirs. 9769*663afb9bSAndroid Build Coastguard Worker case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9770*663afb9bSAndroid Build Coastguard Worker *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9771*663afb9bSAndroid Build Coastguard Worker ;; 9772*663afb9bSAndroid Build Coastguard Worker *) 9773*663afb9bSAndroid Build Coastguard Worker func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9774*663afb9bSAndroid Build Coastguard Worker ;; 9775*663afb9bSAndroid Build Coastguard Worker esac 9776*663afb9bSAndroid Build Coastguard Worker fi 9777*663afb9bSAndroid Build Coastguard Worker else 9778*663afb9bSAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 9779*663afb9bSAndroid Build Coastguard Worker func_append dep_rpath " $flag" 9780*663afb9bSAndroid Build Coastguard Worker fi 9781*663afb9bSAndroid Build Coastguard Worker elif test -n "$runpath_var"; then 9782*663afb9bSAndroid Build Coastguard Worker case "$perm_rpath " in 9783*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 9784*663afb9bSAndroid Build Coastguard Worker *) func_append perm_rpath " $libdir" ;; 9785*663afb9bSAndroid Build Coastguard Worker esac 9786*663afb9bSAndroid Build Coastguard Worker fi 9787*663afb9bSAndroid Build Coastguard Worker done 9788*663afb9bSAndroid Build Coastguard Worker # Substitute the hardcoded libdirs into the rpath. 9789*663afb9bSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator" && 9790*663afb9bSAndroid Build Coastguard Worker test -n "$hardcode_libdirs"; then 9791*663afb9bSAndroid Build Coastguard Worker libdir=$hardcode_libdirs 9792*663afb9bSAndroid Build Coastguard Worker eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9793*663afb9bSAndroid Build Coastguard Worker fi 9794*663afb9bSAndroid Build Coastguard Worker if test -n "$runpath_var" && test -n "$perm_rpath"; then 9795*663afb9bSAndroid Build Coastguard Worker # We should set the runpath_var. 9796*663afb9bSAndroid Build Coastguard Worker rpath= 9797*663afb9bSAndroid Build Coastguard Worker for dir in $perm_rpath; do 9798*663afb9bSAndroid Build Coastguard Worker func_append rpath "$dir:" 9799*663afb9bSAndroid Build Coastguard Worker done 9800*663afb9bSAndroid Build Coastguard Worker eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9801*663afb9bSAndroid Build Coastguard Worker fi 9802*663afb9bSAndroid Build Coastguard Worker test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9803*663afb9bSAndroid Build Coastguard Worker fi 9804*663afb9bSAndroid Build Coastguard Worker 9805*663afb9bSAndroid Build Coastguard Worker shlibpath=$finalize_shlibpath 9806*663afb9bSAndroid Build Coastguard Worker test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9807*663afb9bSAndroid Build Coastguard Worker if test -n "$shlibpath"; then 9808*663afb9bSAndroid Build Coastguard Worker eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9809*663afb9bSAndroid Build Coastguard Worker fi 9810*663afb9bSAndroid Build Coastguard Worker 9811*663afb9bSAndroid Build Coastguard Worker # Get the real and link names of the library. 9812*663afb9bSAndroid Build Coastguard Worker eval shared_ext=\"$shrext_cmds\" 9813*663afb9bSAndroid Build Coastguard Worker eval library_names=\"$library_names_spec\" 9814*663afb9bSAndroid Build Coastguard Worker set dummy $library_names 9815*663afb9bSAndroid Build Coastguard Worker shift 9816*663afb9bSAndroid Build Coastguard Worker realname=$1 9817*663afb9bSAndroid Build Coastguard Worker shift 9818*663afb9bSAndroid Build Coastguard Worker 9819*663afb9bSAndroid Build Coastguard Worker if test -n "$soname_spec"; then 9820*663afb9bSAndroid Build Coastguard Worker eval soname=\"$soname_spec\" 9821*663afb9bSAndroid Build Coastguard Worker else 9822*663afb9bSAndroid Build Coastguard Worker soname=$realname 9823*663afb9bSAndroid Build Coastguard Worker fi 9824*663afb9bSAndroid Build Coastguard Worker if test -z "$dlname"; then 9825*663afb9bSAndroid Build Coastguard Worker dlname=$soname 9826*663afb9bSAndroid Build Coastguard Worker fi 9827*663afb9bSAndroid Build Coastguard Worker 9828*663afb9bSAndroid Build Coastguard Worker lib=$output_objdir/$realname 9829*663afb9bSAndroid Build Coastguard Worker linknames= 9830*663afb9bSAndroid Build Coastguard Worker for link 9831*663afb9bSAndroid Build Coastguard Worker do 9832*663afb9bSAndroid Build Coastguard Worker func_append linknames " $link" 9833*663afb9bSAndroid Build Coastguard Worker done 9834*663afb9bSAndroid Build Coastguard Worker 9835*663afb9bSAndroid Build Coastguard Worker # Use standard objects if they are pic 9836*663afb9bSAndroid Build Coastguard Worker test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9837*663afb9bSAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 9838*663afb9bSAndroid Build Coastguard Worker 9839*663afb9bSAndroid Build Coastguard Worker delfiles= 9840*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$include_expsyms"; then 9841*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 9842*663afb9bSAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.uexp 9843*663afb9bSAndroid Build Coastguard Worker func_append delfiles " $export_symbols" 9844*663afb9bSAndroid Build Coastguard Worker fi 9845*663afb9bSAndroid Build Coastguard Worker 9846*663afb9bSAndroid Build Coastguard Worker orig_export_symbols= 9847*663afb9bSAndroid Build Coastguard Worker case $host_os in 9848*663afb9bSAndroid Build Coastguard Worker cygwin* | mingw* | cegcc*) 9849*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9850*663afb9bSAndroid Build Coastguard Worker # exporting using user supplied symfile 9851*663afb9bSAndroid Build Coastguard Worker func_dll_def_p "$export_symbols" || { 9852*663afb9bSAndroid Build Coastguard Worker # and it's NOT already a .def file. Must figure out 9853*663afb9bSAndroid Build Coastguard Worker # which of the given symbols are data symbols and tag 9854*663afb9bSAndroid Build Coastguard Worker # them as such. So, trigger use of export_symbols_cmds. 9855*663afb9bSAndroid Build Coastguard Worker # export_symbols gets reassigned inside the "prepare 9856*663afb9bSAndroid Build Coastguard Worker # the list of exported symbols" if statement, so the 9857*663afb9bSAndroid Build Coastguard Worker # include_expsyms logic still works. 9858*663afb9bSAndroid Build Coastguard Worker orig_export_symbols=$export_symbols 9859*663afb9bSAndroid Build Coastguard Worker export_symbols= 9860*663afb9bSAndroid Build Coastguard Worker always_export_symbols=yes 9861*663afb9bSAndroid Build Coastguard Worker } 9862*663afb9bSAndroid Build Coastguard Worker fi 9863*663afb9bSAndroid Build Coastguard Worker ;; 9864*663afb9bSAndroid Build Coastguard Worker esac 9865*663afb9bSAndroid Build Coastguard Worker 9866*663afb9bSAndroid Build Coastguard Worker # Prepare the list of exported symbols 9867*663afb9bSAndroid Build Coastguard Worker if test -z "$export_symbols"; then 9868*663afb9bSAndroid Build Coastguard Worker if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 9869*663afb9bSAndroid Build Coastguard Worker func_verbose "generating symbol list for '$libname.la'" 9870*663afb9bSAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.exp 9871*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM $export_symbols 9872*663afb9bSAndroid Build Coastguard Worker cmds=$export_symbols_cmds 9873*663afb9bSAndroid Build Coastguard Worker save_ifs=$IFS; IFS='~' 9874*663afb9bSAndroid Build Coastguard Worker for cmd1 in $cmds; do 9875*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 9876*663afb9bSAndroid Build Coastguard Worker # Take the normal branch if the nm_file_list_spec branch 9877*663afb9bSAndroid Build Coastguard Worker # doesn't work or if tool conversion is not needed. 9878*663afb9bSAndroid Build Coastguard Worker case $nm_file_list_spec~$to_tool_file_cmd in 9879*663afb9bSAndroid Build Coastguard Worker *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9880*663afb9bSAndroid Build Coastguard Worker try_normal_branch=yes 9881*663afb9bSAndroid Build Coastguard Worker eval cmd=\"$cmd1\" 9882*663afb9bSAndroid Build Coastguard Worker func_len " $cmd" 9883*663afb9bSAndroid Build Coastguard Worker len=$func_len_result 9884*663afb9bSAndroid Build Coastguard Worker ;; 9885*663afb9bSAndroid Build Coastguard Worker *) 9886*663afb9bSAndroid Build Coastguard Worker try_normal_branch=no 9887*663afb9bSAndroid Build Coastguard Worker ;; 9888*663afb9bSAndroid Build Coastguard Worker esac 9889*663afb9bSAndroid Build Coastguard Worker if test yes = "$try_normal_branch" \ 9890*663afb9bSAndroid Build Coastguard Worker && { test "$len" -lt "$max_cmd_len" \ 9891*663afb9bSAndroid Build Coastguard Worker || test "$max_cmd_len" -le -1; } 9892*663afb9bSAndroid Build Coastguard Worker then 9893*663afb9bSAndroid Build Coastguard Worker func_show_eval "$cmd" 'exit $?' 9894*663afb9bSAndroid Build Coastguard Worker skipped_export=false 9895*663afb9bSAndroid Build Coastguard Worker elif test -n "$nm_file_list_spec"; then 9896*663afb9bSAndroid Build Coastguard Worker func_basename "$output" 9897*663afb9bSAndroid Build Coastguard Worker output_la=$func_basename_result 9898*663afb9bSAndroid Build Coastguard Worker save_libobjs=$libobjs 9899*663afb9bSAndroid Build Coastguard Worker save_output=$output 9900*663afb9bSAndroid Build Coastguard Worker output=$output_objdir/$output_la.nm 9901*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$output" 9902*663afb9bSAndroid Build Coastguard Worker libobjs=$nm_file_list_spec$func_to_tool_file_result 9903*663afb9bSAndroid Build Coastguard Worker func_append delfiles " $output" 9904*663afb9bSAndroid Build Coastguard Worker func_verbose "creating $NM input file list: $output" 9905*663afb9bSAndroid Build Coastguard Worker for obj in $save_libobjs; do 9906*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$obj" 9907*663afb9bSAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" 9908*663afb9bSAndroid Build Coastguard Worker done > "$output" 9909*663afb9bSAndroid Build Coastguard Worker eval cmd=\"$cmd1\" 9910*663afb9bSAndroid Build Coastguard Worker func_show_eval "$cmd" 'exit $?' 9911*663afb9bSAndroid Build Coastguard Worker output=$save_output 9912*663afb9bSAndroid Build Coastguard Worker libobjs=$save_libobjs 9913*663afb9bSAndroid Build Coastguard Worker skipped_export=false 9914*663afb9bSAndroid Build Coastguard Worker else 9915*663afb9bSAndroid Build Coastguard Worker # The command line is too long to execute in one step. 9916*663afb9bSAndroid Build Coastguard Worker func_verbose "using reloadable object file for export list..." 9917*663afb9bSAndroid Build Coastguard Worker skipped_export=: 9918*663afb9bSAndroid Build Coastguard Worker # Break out early, otherwise skipped_export may be 9919*663afb9bSAndroid Build Coastguard Worker # set to false by a later but shorter cmd. 9920*663afb9bSAndroid Build Coastguard Worker break 9921*663afb9bSAndroid Build Coastguard Worker fi 9922*663afb9bSAndroid Build Coastguard Worker done 9923*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 9924*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9925*663afb9bSAndroid Build Coastguard Worker func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9926*663afb9bSAndroid Build Coastguard Worker func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9927*663afb9bSAndroid Build Coastguard Worker fi 9928*663afb9bSAndroid Build Coastguard Worker fi 9929*663afb9bSAndroid Build Coastguard Worker fi 9930*663afb9bSAndroid Build Coastguard Worker 9931*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$include_expsyms"; then 9932*663afb9bSAndroid Build Coastguard Worker tmp_export_symbols=$export_symbols 9933*663afb9bSAndroid Build Coastguard Worker test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9934*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9935*663afb9bSAndroid Build Coastguard Worker fi 9936*663afb9bSAndroid Build Coastguard Worker 9937*663afb9bSAndroid Build Coastguard Worker if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 9938*663afb9bSAndroid Build Coastguard Worker # The given exports_symbols file has to be filtered, so filter it. 9939*663afb9bSAndroid Build Coastguard Worker func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9940*663afb9bSAndroid Build Coastguard Worker # FIXME: $output_objdir/$libname.filter potentially contains lots of 9941*663afb9bSAndroid Build Coastguard Worker # 's' commands, which not all seds can handle. GNU sed should be fine 9942*663afb9bSAndroid Build Coastguard Worker # though. Also, the filter scales superlinearly with the number of 9943*663afb9bSAndroid Build Coastguard Worker # global variables. join(1) would be nice here, but unfortunately 9944*663afb9bSAndroid Build Coastguard Worker # isn't a blessed tool. 9945*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9946*663afb9bSAndroid Build Coastguard Worker func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9947*663afb9bSAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.def 9948*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9949*663afb9bSAndroid Build Coastguard Worker fi 9950*663afb9bSAndroid Build Coastguard Worker 9951*663afb9bSAndroid Build Coastguard Worker tmp_deplibs= 9952*663afb9bSAndroid Build Coastguard Worker for test_deplib in $deplibs; do 9953*663afb9bSAndroid Build Coastguard Worker case " $convenience " in 9954*663afb9bSAndroid Build Coastguard Worker *" $test_deplib "*) ;; 9955*663afb9bSAndroid Build Coastguard Worker *) 9956*663afb9bSAndroid Build Coastguard Worker func_append tmp_deplibs " $test_deplib" 9957*663afb9bSAndroid Build Coastguard Worker ;; 9958*663afb9bSAndroid Build Coastguard Worker esac 9959*663afb9bSAndroid Build Coastguard Worker done 9960*663afb9bSAndroid Build Coastguard Worker deplibs=$tmp_deplibs 9961*663afb9bSAndroid Build Coastguard Worker 9962*663afb9bSAndroid Build Coastguard Worker if test -n "$convenience"; then 9963*663afb9bSAndroid Build Coastguard Worker if test -n "$whole_archive_flag_spec" && 9964*663afb9bSAndroid Build Coastguard Worker test yes = "$compiler_needs_object" && 9965*663afb9bSAndroid Build Coastguard Worker test -z "$libobjs"; then 9966*663afb9bSAndroid Build Coastguard Worker # extract the archives, so we have objects to list. 9967*663afb9bSAndroid Build Coastguard Worker # TODO: could optimize this to just extract one archive. 9968*663afb9bSAndroid Build Coastguard Worker whole_archive_flag_spec= 9969*663afb9bSAndroid Build Coastguard Worker fi 9970*663afb9bSAndroid Build Coastguard Worker if test -n "$whole_archive_flag_spec"; then 9971*663afb9bSAndroid Build Coastguard Worker save_libobjs=$libobjs 9972*663afb9bSAndroid Build Coastguard Worker eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9973*663afb9bSAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 9974*663afb9bSAndroid Build Coastguard Worker else 9975*663afb9bSAndroid Build Coastguard Worker gentop=$output_objdir/${outputname}x 9976*663afb9bSAndroid Build Coastguard Worker func_append generated " $gentop" 9977*663afb9bSAndroid Build Coastguard Worker 9978*663afb9bSAndroid Build Coastguard Worker func_extract_archives $gentop $convenience 9979*663afb9bSAndroid Build Coastguard Worker func_append libobjs " $func_extract_archives_result" 9980*663afb9bSAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 9981*663afb9bSAndroid Build Coastguard Worker fi 9982*663afb9bSAndroid Build Coastguard Worker fi 9983*663afb9bSAndroid Build Coastguard Worker 9984*663afb9bSAndroid Build Coastguard Worker if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 9985*663afb9bSAndroid Build Coastguard Worker eval flag=\"$thread_safe_flag_spec\" 9986*663afb9bSAndroid Build Coastguard Worker func_append linker_flags " $flag" 9987*663afb9bSAndroid Build Coastguard Worker fi 9988*663afb9bSAndroid Build Coastguard Worker 9989*663afb9bSAndroid Build Coastguard Worker # Make a backup of the uninstalled library when relinking 9990*663afb9bSAndroid Build Coastguard Worker if test relink = "$opt_mode"; then 9991*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 9992*663afb9bSAndroid Build Coastguard Worker fi 9993*663afb9bSAndroid Build Coastguard Worker 9994*663afb9bSAndroid Build Coastguard Worker # Do each of the archive commands. 9995*663afb9bSAndroid Build Coastguard Worker if test yes = "$module" && test -n "$module_cmds"; then 9996*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9997*663afb9bSAndroid Build Coastguard Worker eval test_cmds=\"$module_expsym_cmds\" 9998*663afb9bSAndroid Build Coastguard Worker cmds=$module_expsym_cmds 9999*663afb9bSAndroid Build Coastguard Worker else 10000*663afb9bSAndroid Build Coastguard Worker eval test_cmds=\"$module_cmds\" 10001*663afb9bSAndroid Build Coastguard Worker cmds=$module_cmds 10002*663afb9bSAndroid Build Coastguard Worker fi 10003*663afb9bSAndroid Build Coastguard Worker else 10004*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10005*663afb9bSAndroid Build Coastguard Worker eval test_cmds=\"$archive_expsym_cmds\" 10006*663afb9bSAndroid Build Coastguard Worker cmds=$archive_expsym_cmds 10007*663afb9bSAndroid Build Coastguard Worker else 10008*663afb9bSAndroid Build Coastguard Worker eval test_cmds=\"$archive_cmds\" 10009*663afb9bSAndroid Build Coastguard Worker cmds=$archive_cmds 10010*663afb9bSAndroid Build Coastguard Worker fi 10011*663afb9bSAndroid Build Coastguard Worker fi 10012*663afb9bSAndroid Build Coastguard Worker 10013*663afb9bSAndroid Build Coastguard Worker if test : != "$skipped_export" && 10014*663afb9bSAndroid Build Coastguard Worker func_len " $test_cmds" && 10015*663afb9bSAndroid Build Coastguard Worker len=$func_len_result && 10016*663afb9bSAndroid Build Coastguard Worker test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10017*663afb9bSAndroid Build Coastguard Worker : 10018*663afb9bSAndroid Build Coastguard Worker else 10019*663afb9bSAndroid Build Coastguard Worker # The command line is too long to link in one step, link piecewise 10020*663afb9bSAndroid Build Coastguard Worker # or, if using GNU ld and skipped_export is not :, use a linker 10021*663afb9bSAndroid Build Coastguard Worker # script. 10022*663afb9bSAndroid Build Coastguard Worker 10023*663afb9bSAndroid Build Coastguard Worker # Save the value of $output and $libobjs because we want to 10024*663afb9bSAndroid Build Coastguard Worker # use them later. If we have whole_archive_flag_spec, we 10025*663afb9bSAndroid Build Coastguard Worker # want to use save_libobjs as it was before 10026*663afb9bSAndroid Build Coastguard Worker # whole_archive_flag_spec was expanded, because we can't 10027*663afb9bSAndroid Build Coastguard Worker # assume the linker understands whole_archive_flag_spec. 10028*663afb9bSAndroid Build Coastguard Worker # This may have to be revisited, in case too many 10029*663afb9bSAndroid Build Coastguard Worker # convenience libraries get linked in and end up exceeding 10030*663afb9bSAndroid Build Coastguard Worker # the spec. 10031*663afb9bSAndroid Build Coastguard Worker if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 10032*663afb9bSAndroid Build Coastguard Worker save_libobjs=$libobjs 10033*663afb9bSAndroid Build Coastguard Worker fi 10034*663afb9bSAndroid Build Coastguard Worker save_output=$output 10035*663afb9bSAndroid Build Coastguard Worker func_basename "$output" 10036*663afb9bSAndroid Build Coastguard Worker output_la=$func_basename_result 10037*663afb9bSAndroid Build Coastguard Worker 10038*663afb9bSAndroid Build Coastguard Worker # Clear the reloadable object creation command queue and 10039*663afb9bSAndroid Build Coastguard Worker # initialize k to one. 10040*663afb9bSAndroid Build Coastguard Worker test_cmds= 10041*663afb9bSAndroid Build Coastguard Worker concat_cmds= 10042*663afb9bSAndroid Build Coastguard Worker objlist= 10043*663afb9bSAndroid Build Coastguard Worker last_robj= 10044*663afb9bSAndroid Build Coastguard Worker k=1 10045*663afb9bSAndroid Build Coastguard Worker 10046*663afb9bSAndroid Build Coastguard Worker if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 10047*663afb9bSAndroid Build Coastguard Worker output=$output_objdir/$output_la.lnkscript 10048*663afb9bSAndroid Build Coastguard Worker func_verbose "creating GNU ld script: $output" 10049*663afb9bSAndroid Build Coastguard Worker echo 'INPUT (' > $output 10050*663afb9bSAndroid Build Coastguard Worker for obj in $save_libobjs 10051*663afb9bSAndroid Build Coastguard Worker do 10052*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$obj" 10053*663afb9bSAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" >> $output 10054*663afb9bSAndroid Build Coastguard Worker done 10055*663afb9bSAndroid Build Coastguard Worker echo ')' >> $output 10056*663afb9bSAndroid Build Coastguard Worker func_append delfiles " $output" 10057*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$output" 10058*663afb9bSAndroid Build Coastguard Worker output=$func_to_tool_file_result 10059*663afb9bSAndroid Build Coastguard Worker elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 10060*663afb9bSAndroid Build Coastguard Worker output=$output_objdir/$output_la.lnk 10061*663afb9bSAndroid Build Coastguard Worker func_verbose "creating linker input file list: $output" 10062*663afb9bSAndroid Build Coastguard Worker : > $output 10063*663afb9bSAndroid Build Coastguard Worker set x $save_libobjs 10064*663afb9bSAndroid Build Coastguard Worker shift 10065*663afb9bSAndroid Build Coastguard Worker firstobj= 10066*663afb9bSAndroid Build Coastguard Worker if test yes = "$compiler_needs_object"; then 10067*663afb9bSAndroid Build Coastguard Worker firstobj="$1 " 10068*663afb9bSAndroid Build Coastguard Worker shift 10069*663afb9bSAndroid Build Coastguard Worker fi 10070*663afb9bSAndroid Build Coastguard Worker for obj 10071*663afb9bSAndroid Build Coastguard Worker do 10072*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$obj" 10073*663afb9bSAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" >> $output 10074*663afb9bSAndroid Build Coastguard Worker done 10075*663afb9bSAndroid Build Coastguard Worker func_append delfiles " $output" 10076*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$output" 10077*663afb9bSAndroid Build Coastguard Worker output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 10078*663afb9bSAndroid Build Coastguard Worker else 10079*663afb9bSAndroid Build Coastguard Worker if test -n "$save_libobjs"; then 10080*663afb9bSAndroid Build Coastguard Worker func_verbose "creating reloadable object files..." 10081*663afb9bSAndroid Build Coastguard Worker output=$output_objdir/$output_la-$k.$objext 10082*663afb9bSAndroid Build Coastguard Worker eval test_cmds=\"$reload_cmds\" 10083*663afb9bSAndroid Build Coastguard Worker func_len " $test_cmds" 10084*663afb9bSAndroid Build Coastguard Worker len0=$func_len_result 10085*663afb9bSAndroid Build Coastguard Worker len=$len0 10086*663afb9bSAndroid Build Coastguard Worker 10087*663afb9bSAndroid Build Coastguard Worker # Loop over the list of objects to be linked. 10088*663afb9bSAndroid Build Coastguard Worker for obj in $save_libobjs 10089*663afb9bSAndroid Build Coastguard Worker do 10090*663afb9bSAndroid Build Coastguard Worker func_len " $obj" 10091*663afb9bSAndroid Build Coastguard Worker func_arith $len + $func_len_result 10092*663afb9bSAndroid Build Coastguard Worker len=$func_arith_result 10093*663afb9bSAndroid Build Coastguard Worker if test -z "$objlist" || 10094*663afb9bSAndroid Build Coastguard Worker test "$len" -lt "$max_cmd_len"; then 10095*663afb9bSAndroid Build Coastguard Worker func_append objlist " $obj" 10096*663afb9bSAndroid Build Coastguard Worker else 10097*663afb9bSAndroid Build Coastguard Worker # The command $test_cmds is almost too long, add a 10098*663afb9bSAndroid Build Coastguard Worker # command to the queue. 10099*663afb9bSAndroid Build Coastguard Worker if test 1 -eq "$k"; then 10100*663afb9bSAndroid Build Coastguard Worker # The first file doesn't have a previous command to add. 10101*663afb9bSAndroid Build Coastguard Worker reload_objs=$objlist 10102*663afb9bSAndroid Build Coastguard Worker eval concat_cmds=\"$reload_cmds\" 10103*663afb9bSAndroid Build Coastguard Worker else 10104*663afb9bSAndroid Build Coastguard Worker # All subsequent reloadable object files will link in 10105*663afb9bSAndroid Build Coastguard Worker # the last one created. 10106*663afb9bSAndroid Build Coastguard Worker reload_objs="$objlist $last_robj" 10107*663afb9bSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 10108*663afb9bSAndroid Build Coastguard Worker fi 10109*663afb9bSAndroid Build Coastguard Worker last_robj=$output_objdir/$output_la-$k.$objext 10110*663afb9bSAndroid Build Coastguard Worker func_arith $k + 1 10111*663afb9bSAndroid Build Coastguard Worker k=$func_arith_result 10112*663afb9bSAndroid Build Coastguard Worker output=$output_objdir/$output_la-$k.$objext 10113*663afb9bSAndroid Build Coastguard Worker objlist=" $obj" 10114*663afb9bSAndroid Build Coastguard Worker func_len " $last_robj" 10115*663afb9bSAndroid Build Coastguard Worker func_arith $len0 + $func_len_result 10116*663afb9bSAndroid Build Coastguard Worker len=$func_arith_result 10117*663afb9bSAndroid Build Coastguard Worker fi 10118*663afb9bSAndroid Build Coastguard Worker done 10119*663afb9bSAndroid Build Coastguard Worker # Handle the remaining objects by creating one last 10120*663afb9bSAndroid Build Coastguard Worker # reloadable object file. All subsequent reloadable object 10121*663afb9bSAndroid Build Coastguard Worker # files will link in the last one created. 10122*663afb9bSAndroid Build Coastguard Worker test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10123*663afb9bSAndroid Build Coastguard Worker reload_objs="$objlist $last_robj" 10124*663afb9bSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds$reload_cmds\" 10125*663afb9bSAndroid Build Coastguard Worker if test -n "$last_robj"; then 10126*663afb9bSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10127*663afb9bSAndroid Build Coastguard Worker fi 10128*663afb9bSAndroid Build Coastguard Worker func_append delfiles " $output" 10129*663afb9bSAndroid Build Coastguard Worker 10130*663afb9bSAndroid Build Coastguard Worker else 10131*663afb9bSAndroid Build Coastguard Worker output= 10132*663afb9bSAndroid Build Coastguard Worker fi 10133*663afb9bSAndroid Build Coastguard Worker 10134*663afb9bSAndroid Build Coastguard Worker ${skipped_export-false} && { 10135*663afb9bSAndroid Build Coastguard Worker func_verbose "generating symbol list for '$libname.la'" 10136*663afb9bSAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.exp 10137*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM $export_symbols 10138*663afb9bSAndroid Build Coastguard Worker libobjs=$output 10139*663afb9bSAndroid Build Coastguard Worker # Append the command to create the export file. 10140*663afb9bSAndroid Build Coastguard Worker test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10141*663afb9bSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 10142*663afb9bSAndroid Build Coastguard Worker if test -n "$last_robj"; then 10143*663afb9bSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10144*663afb9bSAndroid Build Coastguard Worker fi 10145*663afb9bSAndroid Build Coastguard Worker } 10146*663afb9bSAndroid Build Coastguard Worker 10147*663afb9bSAndroid Build Coastguard Worker test -n "$save_libobjs" && 10148*663afb9bSAndroid Build Coastguard Worker func_verbose "creating a temporary reloadable object file: $output" 10149*663afb9bSAndroid Build Coastguard Worker 10150*663afb9bSAndroid Build Coastguard Worker # Loop through the commands generated above and execute them. 10151*663afb9bSAndroid Build Coastguard Worker save_ifs=$IFS; IFS='~' 10152*663afb9bSAndroid Build Coastguard Worker for cmd in $concat_cmds; do 10153*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 10154*663afb9bSAndroid Build Coastguard Worker $opt_quiet || { 10155*663afb9bSAndroid Build Coastguard Worker func_quote_arg expand,pretty "$cmd" 10156*663afb9bSAndroid Build Coastguard Worker eval "func_echo $func_quote_arg_result" 10157*663afb9bSAndroid Build Coastguard Worker } 10158*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || eval "$cmd" || { 10159*663afb9bSAndroid Build Coastguard Worker lt_exit=$? 10160*663afb9bSAndroid Build Coastguard Worker 10161*663afb9bSAndroid Build Coastguard Worker # Restore the uninstalled library and exit 10162*663afb9bSAndroid Build Coastguard Worker if test relink = "$opt_mode"; then 10163*663afb9bSAndroid Build Coastguard Worker ( cd "$output_objdir" && \ 10164*663afb9bSAndroid Build Coastguard Worker $RM "${realname}T" && \ 10165*663afb9bSAndroid Build Coastguard Worker $MV "${realname}U" "$realname" ) 10166*663afb9bSAndroid Build Coastguard Worker fi 10167*663afb9bSAndroid Build Coastguard Worker 10168*663afb9bSAndroid Build Coastguard Worker exit $lt_exit 10169*663afb9bSAndroid Build Coastguard Worker } 10170*663afb9bSAndroid Build Coastguard Worker done 10171*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 10172*663afb9bSAndroid Build Coastguard Worker 10173*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols_regex" && ${skipped_export-false}; then 10174*663afb9bSAndroid Build Coastguard Worker func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 10175*663afb9bSAndroid Build Coastguard Worker func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 10176*663afb9bSAndroid Build Coastguard Worker fi 10177*663afb9bSAndroid Build Coastguard Worker fi 10178*663afb9bSAndroid Build Coastguard Worker 10179*663afb9bSAndroid Build Coastguard Worker ${skipped_export-false} && { 10180*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$include_expsyms"; then 10181*663afb9bSAndroid Build Coastguard Worker tmp_export_symbols=$export_symbols 10182*663afb9bSAndroid Build Coastguard Worker test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10183*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10184*663afb9bSAndroid Build Coastguard Worker fi 10185*663afb9bSAndroid Build Coastguard Worker 10186*663afb9bSAndroid Build Coastguard Worker if test -n "$orig_export_symbols"; then 10187*663afb9bSAndroid Build Coastguard Worker # The given exports_symbols file has to be filtered, so filter it. 10188*663afb9bSAndroid Build Coastguard Worker func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10189*663afb9bSAndroid Build Coastguard Worker # FIXME: $output_objdir/$libname.filter potentially contains lots of 10190*663afb9bSAndroid Build Coastguard Worker # 's' commands, which not all seds can handle. GNU sed should be fine 10191*663afb9bSAndroid Build Coastguard Worker # though. Also, the filter scales superlinearly with the number of 10192*663afb9bSAndroid Build Coastguard Worker # global variables. join(1) would be nice here, but unfortunately 10193*663afb9bSAndroid Build Coastguard Worker # isn't a blessed tool. 10194*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10195*663afb9bSAndroid Build Coastguard Worker func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10196*663afb9bSAndroid Build Coastguard Worker export_symbols=$output_objdir/$libname.def 10197*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10198*663afb9bSAndroid Build Coastguard Worker fi 10199*663afb9bSAndroid Build Coastguard Worker } 10200*663afb9bSAndroid Build Coastguard Worker 10201*663afb9bSAndroid Build Coastguard Worker libobjs=$output 10202*663afb9bSAndroid Build Coastguard Worker # Restore the value of output. 10203*663afb9bSAndroid Build Coastguard Worker output=$save_output 10204*663afb9bSAndroid Build Coastguard Worker 10205*663afb9bSAndroid Build Coastguard Worker if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 10206*663afb9bSAndroid Build Coastguard Worker eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10207*663afb9bSAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 10208*663afb9bSAndroid Build Coastguard Worker fi 10209*663afb9bSAndroid Build Coastguard Worker # Expand the library linking commands again to reset the 10210*663afb9bSAndroid Build Coastguard Worker # value of $libobjs for piecewise linking. 10211*663afb9bSAndroid Build Coastguard Worker 10212*663afb9bSAndroid Build Coastguard Worker # Do each of the archive commands. 10213*663afb9bSAndroid Build Coastguard Worker if test yes = "$module" && test -n "$module_cmds"; then 10214*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10215*663afb9bSAndroid Build Coastguard Worker cmds=$module_expsym_cmds 10216*663afb9bSAndroid Build Coastguard Worker else 10217*663afb9bSAndroid Build Coastguard Worker cmds=$module_cmds 10218*663afb9bSAndroid Build Coastguard Worker fi 10219*663afb9bSAndroid Build Coastguard Worker else 10220*663afb9bSAndroid Build Coastguard Worker if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10221*663afb9bSAndroid Build Coastguard Worker cmds=$archive_expsym_cmds 10222*663afb9bSAndroid Build Coastguard Worker else 10223*663afb9bSAndroid Build Coastguard Worker cmds=$archive_cmds 10224*663afb9bSAndroid Build Coastguard Worker fi 10225*663afb9bSAndroid Build Coastguard Worker fi 10226*663afb9bSAndroid Build Coastguard Worker fi 10227*663afb9bSAndroid Build Coastguard Worker 10228*663afb9bSAndroid Build Coastguard Worker if test -n "$delfiles"; then 10229*663afb9bSAndroid Build Coastguard Worker # Append the command to remove temporary files to $cmds. 10230*663afb9bSAndroid Build Coastguard Worker eval cmds=\"\$cmds~\$RM $delfiles\" 10231*663afb9bSAndroid Build Coastguard Worker fi 10232*663afb9bSAndroid Build Coastguard Worker 10233*663afb9bSAndroid Build Coastguard Worker # Add any objects from preloaded convenience libraries 10234*663afb9bSAndroid Build Coastguard Worker if test -n "$dlprefiles"; then 10235*663afb9bSAndroid Build Coastguard Worker gentop=$output_objdir/${outputname}x 10236*663afb9bSAndroid Build Coastguard Worker func_append generated " $gentop" 10237*663afb9bSAndroid Build Coastguard Worker 10238*663afb9bSAndroid Build Coastguard Worker func_extract_archives $gentop $dlprefiles 10239*663afb9bSAndroid Build Coastguard Worker func_append libobjs " $func_extract_archives_result" 10240*663afb9bSAndroid Build Coastguard Worker test "X$libobjs" = "X " && libobjs= 10241*663afb9bSAndroid Build Coastguard Worker fi 10242*663afb9bSAndroid Build Coastguard Worker 10243*663afb9bSAndroid Build Coastguard Worker save_ifs=$IFS; IFS='~' 10244*663afb9bSAndroid Build Coastguard Worker for cmd in $cmds; do 10245*663afb9bSAndroid Build Coastguard Worker IFS=$sp$nl 10246*663afb9bSAndroid Build Coastguard Worker eval cmd=\"$cmd\" 10247*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 10248*663afb9bSAndroid Build Coastguard Worker $opt_quiet || { 10249*663afb9bSAndroid Build Coastguard Worker func_quote_arg expand,pretty "$cmd" 10250*663afb9bSAndroid Build Coastguard Worker eval "func_echo $func_quote_arg_result" 10251*663afb9bSAndroid Build Coastguard Worker } 10252*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || eval "$cmd" || { 10253*663afb9bSAndroid Build Coastguard Worker lt_exit=$? 10254*663afb9bSAndroid Build Coastguard Worker 10255*663afb9bSAndroid Build Coastguard Worker # Restore the uninstalled library and exit 10256*663afb9bSAndroid Build Coastguard Worker if test relink = "$opt_mode"; then 10257*663afb9bSAndroid Build Coastguard Worker ( cd "$output_objdir" && \ 10258*663afb9bSAndroid Build Coastguard Worker $RM "${realname}T" && \ 10259*663afb9bSAndroid Build Coastguard Worker $MV "${realname}U" "$realname" ) 10260*663afb9bSAndroid Build Coastguard Worker fi 10261*663afb9bSAndroid Build Coastguard Worker 10262*663afb9bSAndroid Build Coastguard Worker exit $lt_exit 10263*663afb9bSAndroid Build Coastguard Worker } 10264*663afb9bSAndroid Build Coastguard Worker done 10265*663afb9bSAndroid Build Coastguard Worker IFS=$save_ifs 10266*663afb9bSAndroid Build Coastguard Worker 10267*663afb9bSAndroid Build Coastguard Worker # Restore the uninstalled library and exit 10268*663afb9bSAndroid Build Coastguard Worker if test relink = "$opt_mode"; then 10269*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10270*663afb9bSAndroid Build Coastguard Worker 10271*663afb9bSAndroid Build Coastguard Worker if test -n "$convenience"; then 10272*663afb9bSAndroid Build Coastguard Worker if test -z "$whole_archive_flag_spec"; then 10273*663afb9bSAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 10274*663afb9bSAndroid Build Coastguard Worker fi 10275*663afb9bSAndroid Build Coastguard Worker fi 10276*663afb9bSAndroid Build Coastguard Worker 10277*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10278*663afb9bSAndroid Build Coastguard Worker fi 10279*663afb9bSAndroid Build Coastguard Worker 10280*663afb9bSAndroid Build Coastguard Worker # Create links to the real library. 10281*663afb9bSAndroid Build Coastguard Worker for linkname in $linknames; do 10282*663afb9bSAndroid Build Coastguard Worker if test "$realname" != "$linkname"; then 10283*663afb9bSAndroid Build Coastguard Worker func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10284*663afb9bSAndroid Build Coastguard Worker fi 10285*663afb9bSAndroid Build Coastguard Worker done 10286*663afb9bSAndroid Build Coastguard Worker 10287*663afb9bSAndroid Build Coastguard Worker # If -module or -export-dynamic was specified, set the dlname. 10288*663afb9bSAndroid Build Coastguard Worker if test yes = "$module" || test yes = "$export_dynamic"; then 10289*663afb9bSAndroid Build Coastguard Worker # On all known operating systems, these are identical. 10290*663afb9bSAndroid Build Coastguard Worker dlname=$soname 10291*663afb9bSAndroid Build Coastguard Worker fi 10292*663afb9bSAndroid Build Coastguard Worker fi 10293*663afb9bSAndroid Build Coastguard Worker ;; 10294*663afb9bSAndroid Build Coastguard Worker 10295*663afb9bSAndroid Build Coastguard Worker obj) 10296*663afb9bSAndroid Build Coastguard Worker if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 10297*663afb9bSAndroid Build Coastguard Worker func_warning "'-dlopen' is ignored for objects" 10298*663afb9bSAndroid Build Coastguard Worker fi 10299*663afb9bSAndroid Build Coastguard Worker 10300*663afb9bSAndroid Build Coastguard Worker case " $deplibs" in 10301*663afb9bSAndroid Build Coastguard Worker *\ -l* | *\ -L*) 10302*663afb9bSAndroid Build Coastguard Worker func_warning "'-l' and '-L' are ignored for objects" ;; 10303*663afb9bSAndroid Build Coastguard Worker esac 10304*663afb9bSAndroid Build Coastguard Worker 10305*663afb9bSAndroid Build Coastguard Worker test -n "$rpath" && \ 10306*663afb9bSAndroid Build Coastguard Worker func_warning "'-rpath' is ignored for objects" 10307*663afb9bSAndroid Build Coastguard Worker 10308*663afb9bSAndroid Build Coastguard Worker test -n "$xrpath" && \ 10309*663afb9bSAndroid Build Coastguard Worker func_warning "'-R' is ignored for objects" 10310*663afb9bSAndroid Build Coastguard Worker 10311*663afb9bSAndroid Build Coastguard Worker test -n "$vinfo" && \ 10312*663afb9bSAndroid Build Coastguard Worker func_warning "'-version-info' is ignored for objects" 10313*663afb9bSAndroid Build Coastguard Worker 10314*663afb9bSAndroid Build Coastguard Worker test -n "$release" && \ 10315*663afb9bSAndroid Build Coastguard Worker func_warning "'-release' is ignored for objects" 10316*663afb9bSAndroid Build Coastguard Worker 10317*663afb9bSAndroid Build Coastguard Worker case $output in 10318*663afb9bSAndroid Build Coastguard Worker *.lo) 10319*663afb9bSAndroid Build Coastguard Worker test -n "$objs$old_deplibs" && \ 10320*663afb9bSAndroid Build Coastguard Worker func_fatal_error "cannot build library object '$output' from non-libtool objects" 10321*663afb9bSAndroid Build Coastguard Worker 10322*663afb9bSAndroid Build Coastguard Worker libobj=$output 10323*663afb9bSAndroid Build Coastguard Worker func_lo2o "$libobj" 10324*663afb9bSAndroid Build Coastguard Worker obj=$func_lo2o_result 10325*663afb9bSAndroid Build Coastguard Worker ;; 10326*663afb9bSAndroid Build Coastguard Worker *) 10327*663afb9bSAndroid Build Coastguard Worker libobj= 10328*663afb9bSAndroid Build Coastguard Worker obj=$output 10329*663afb9bSAndroid Build Coastguard Worker ;; 10330*663afb9bSAndroid Build Coastguard Worker esac 10331*663afb9bSAndroid Build Coastguard Worker 10332*663afb9bSAndroid Build Coastguard Worker # Delete the old objects. 10333*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM $obj $libobj 10334*663afb9bSAndroid Build Coastguard Worker 10335*663afb9bSAndroid Build Coastguard Worker # Objects from convenience libraries. This assumes 10336*663afb9bSAndroid Build Coastguard Worker # single-version convenience libraries. Whenever we create 10337*663afb9bSAndroid Build Coastguard Worker # different ones for PIC/non-PIC, this we'll have to duplicate 10338*663afb9bSAndroid Build Coastguard Worker # the extraction. 10339*663afb9bSAndroid Build Coastguard Worker reload_conv_objs= 10340*663afb9bSAndroid Build Coastguard Worker gentop= 10341*663afb9bSAndroid Build Coastguard Worker # if reload_cmds runs $LD directly, get rid of -Wl from 10342*663afb9bSAndroid Build Coastguard Worker # whole_archive_flag_spec and hope we can get by with turning comma 10343*663afb9bSAndroid Build Coastguard Worker # into space. 10344*663afb9bSAndroid Build Coastguard Worker case $reload_cmds in 10345*663afb9bSAndroid Build Coastguard Worker *\$LD[\ \$]*) wl= ;; 10346*663afb9bSAndroid Build Coastguard Worker esac 10347*663afb9bSAndroid Build Coastguard Worker if test -n "$convenience"; then 10348*663afb9bSAndroid Build Coastguard Worker if test -n "$whole_archive_flag_spec"; then 10349*663afb9bSAndroid Build Coastguard Worker eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 10350*663afb9bSAndroid Build Coastguard Worker test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 10351*663afb9bSAndroid Build Coastguard Worker reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10352*663afb9bSAndroid Build Coastguard Worker else 10353*663afb9bSAndroid Build Coastguard Worker gentop=$output_objdir/${obj}x 10354*663afb9bSAndroid Build Coastguard Worker func_append generated " $gentop" 10355*663afb9bSAndroid Build Coastguard Worker 10356*663afb9bSAndroid Build Coastguard Worker func_extract_archives $gentop $convenience 10357*663afb9bSAndroid Build Coastguard Worker reload_conv_objs="$reload_objs $func_extract_archives_result" 10358*663afb9bSAndroid Build Coastguard Worker fi 10359*663afb9bSAndroid Build Coastguard Worker fi 10360*663afb9bSAndroid Build Coastguard Worker 10361*663afb9bSAndroid Build Coastguard Worker # If we're not building shared, we need to use non_pic_objs 10362*663afb9bSAndroid Build Coastguard Worker test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10363*663afb9bSAndroid Build Coastguard Worker 10364*663afb9bSAndroid Build Coastguard Worker # Create the old-style object. 10365*663afb9bSAndroid Build Coastguard Worker reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10366*663afb9bSAndroid Build Coastguard Worker 10367*663afb9bSAndroid Build Coastguard Worker output=$obj 10368*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$reload_cmds" 'exit $?' 10369*663afb9bSAndroid Build Coastguard Worker 10370*663afb9bSAndroid Build Coastguard Worker # Exit if we aren't doing a library object file. 10371*663afb9bSAndroid Build Coastguard Worker if test -z "$libobj"; then 10372*663afb9bSAndroid Build Coastguard Worker if test -n "$gentop"; then 10373*663afb9bSAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 10374*663afb9bSAndroid Build Coastguard Worker fi 10375*663afb9bSAndroid Build Coastguard Worker 10376*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10377*663afb9bSAndroid Build Coastguard Worker fi 10378*663afb9bSAndroid Build Coastguard Worker 10379*663afb9bSAndroid Build Coastguard Worker test yes = "$build_libtool_libs" || { 10380*663afb9bSAndroid Build Coastguard Worker if test -n "$gentop"; then 10381*663afb9bSAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 10382*663afb9bSAndroid Build Coastguard Worker fi 10383*663afb9bSAndroid Build Coastguard Worker 10384*663afb9bSAndroid Build Coastguard Worker # Create an invalid libtool object if no PIC, so that we don't 10385*663afb9bSAndroid Build Coastguard Worker # accidentally link it into a program. 10386*663afb9bSAndroid Build Coastguard Worker # $show "echo timestamp > $libobj" 10387*663afb9bSAndroid Build Coastguard Worker # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10388*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10389*663afb9bSAndroid Build Coastguard Worker } 10390*663afb9bSAndroid Build Coastguard Worker 10391*663afb9bSAndroid Build Coastguard Worker if test -n "$pic_flag" || test default != "$pic_mode"; then 10392*663afb9bSAndroid Build Coastguard Worker # Only do commands if we really have different PIC objects. 10393*663afb9bSAndroid Build Coastguard Worker reload_objs="$libobjs $reload_conv_objs" 10394*663afb9bSAndroid Build Coastguard Worker output=$libobj 10395*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$reload_cmds" 'exit $?' 10396*663afb9bSAndroid Build Coastguard Worker fi 10397*663afb9bSAndroid Build Coastguard Worker 10398*663afb9bSAndroid Build Coastguard Worker if test -n "$gentop"; then 10399*663afb9bSAndroid Build Coastguard Worker func_show_eval '${RM}r "$gentop"' 10400*663afb9bSAndroid Build Coastguard Worker fi 10401*663afb9bSAndroid Build Coastguard Worker 10402*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10403*663afb9bSAndroid Build Coastguard Worker ;; 10404*663afb9bSAndroid Build Coastguard Worker 10405*663afb9bSAndroid Build Coastguard Worker prog) 10406*663afb9bSAndroid Build Coastguard Worker case $host in 10407*663afb9bSAndroid Build Coastguard Worker *cygwin*) func_stripname '' '.exe' "$output" 10408*663afb9bSAndroid Build Coastguard Worker output=$func_stripname_result.exe;; 10409*663afb9bSAndroid Build Coastguard Worker esac 10410*663afb9bSAndroid Build Coastguard Worker test -n "$vinfo" && \ 10411*663afb9bSAndroid Build Coastguard Worker func_warning "'-version-info' is ignored for programs" 10412*663afb9bSAndroid Build Coastguard Worker 10413*663afb9bSAndroid Build Coastguard Worker test -n "$release" && \ 10414*663afb9bSAndroid Build Coastguard Worker func_warning "'-release' is ignored for programs" 10415*663afb9bSAndroid Build Coastguard Worker 10416*663afb9bSAndroid Build Coastguard Worker $preload \ 10417*663afb9bSAndroid Build Coastguard Worker && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 10418*663afb9bSAndroid Build Coastguard Worker && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10419*663afb9bSAndroid Build Coastguard Worker 10420*663afb9bSAndroid Build Coastguard Worker case $host in 10421*663afb9bSAndroid Build Coastguard Worker *-*-rhapsody* | *-*-darwin1.[012]) 10422*663afb9bSAndroid Build Coastguard Worker # On Rhapsody replace the C library is the System framework 10423*663afb9bSAndroid Build Coastguard Worker compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10424*663afb9bSAndroid Build Coastguard Worker finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10425*663afb9bSAndroid Build Coastguard Worker ;; 10426*663afb9bSAndroid Build Coastguard Worker esac 10427*663afb9bSAndroid Build Coastguard Worker 10428*663afb9bSAndroid Build Coastguard Worker case $host in 10429*663afb9bSAndroid Build Coastguard Worker *-*-darwin*) 10430*663afb9bSAndroid Build Coastguard Worker # Don't allow lazy linking, it breaks C++ global constructors 10431*663afb9bSAndroid Build Coastguard Worker # But is supposedly fixed on 10.4 or later (yay!). 10432*663afb9bSAndroid Build Coastguard Worker if test CXX = "$tagname"; then 10433*663afb9bSAndroid Build Coastguard Worker case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10434*663afb9bSAndroid Build Coastguard Worker 10.[0123]) 10435*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $wl-bind_at_load" 10436*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $wl-bind_at_load" 10437*663afb9bSAndroid Build Coastguard Worker ;; 10438*663afb9bSAndroid Build Coastguard Worker esac 10439*663afb9bSAndroid Build Coastguard Worker fi 10440*663afb9bSAndroid Build Coastguard Worker # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10441*663afb9bSAndroid Build Coastguard Worker compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10442*663afb9bSAndroid Build Coastguard Worker finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10443*663afb9bSAndroid Build Coastguard Worker ;; 10444*663afb9bSAndroid Build Coastguard Worker esac 10445*663afb9bSAndroid Build Coastguard Worker 10446*663afb9bSAndroid Build Coastguard Worker 10447*663afb9bSAndroid Build Coastguard Worker # move library search paths that coincide with paths to not yet 10448*663afb9bSAndroid Build Coastguard Worker # installed libraries to the beginning of the library search list 10449*663afb9bSAndroid Build Coastguard Worker new_libs= 10450*663afb9bSAndroid Build Coastguard Worker for path in $notinst_path; do 10451*663afb9bSAndroid Build Coastguard Worker case " $new_libs " in 10452*663afb9bSAndroid Build Coastguard Worker *" -L$path/$objdir "*) ;; 10453*663afb9bSAndroid Build Coastguard Worker *) 10454*663afb9bSAndroid Build Coastguard Worker case " $compile_deplibs " in 10455*663afb9bSAndroid Build Coastguard Worker *" -L$path/$objdir "*) 10456*663afb9bSAndroid Build Coastguard Worker func_append new_libs " -L$path/$objdir" ;; 10457*663afb9bSAndroid Build Coastguard Worker esac 10458*663afb9bSAndroid Build Coastguard Worker ;; 10459*663afb9bSAndroid Build Coastguard Worker esac 10460*663afb9bSAndroid Build Coastguard Worker done 10461*663afb9bSAndroid Build Coastguard Worker for deplib in $compile_deplibs; do 10462*663afb9bSAndroid Build Coastguard Worker case $deplib in 10463*663afb9bSAndroid Build Coastguard Worker -L*) 10464*663afb9bSAndroid Build Coastguard Worker case " $new_libs " in 10465*663afb9bSAndroid Build Coastguard Worker *" $deplib "*) ;; 10466*663afb9bSAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 10467*663afb9bSAndroid Build Coastguard Worker esac 10468*663afb9bSAndroid Build Coastguard Worker ;; 10469*663afb9bSAndroid Build Coastguard Worker *) func_append new_libs " $deplib" ;; 10470*663afb9bSAndroid Build Coastguard Worker esac 10471*663afb9bSAndroid Build Coastguard Worker done 10472*663afb9bSAndroid Build Coastguard Worker compile_deplibs=$new_libs 10473*663afb9bSAndroid Build Coastguard Worker 10474*663afb9bSAndroid Build Coastguard Worker 10475*663afb9bSAndroid Build Coastguard Worker func_append compile_command " $compile_deplibs" 10476*663afb9bSAndroid Build Coastguard Worker func_append finalize_command " $finalize_deplibs" 10477*663afb9bSAndroid Build Coastguard Worker 10478*663afb9bSAndroid Build Coastguard Worker if test -n "$rpath$xrpath"; then 10479*663afb9bSAndroid Build Coastguard Worker # If the user specified any rpath flags, then add them. 10480*663afb9bSAndroid Build Coastguard Worker for libdir in $rpath $xrpath; do 10481*663afb9bSAndroid Build Coastguard Worker # This is the magic to use -rpath. 10482*663afb9bSAndroid Build Coastguard Worker case "$finalize_rpath " in 10483*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 10484*663afb9bSAndroid Build Coastguard Worker *) func_append finalize_rpath " $libdir" ;; 10485*663afb9bSAndroid Build Coastguard Worker esac 10486*663afb9bSAndroid Build Coastguard Worker done 10487*663afb9bSAndroid Build Coastguard Worker fi 10488*663afb9bSAndroid Build Coastguard Worker 10489*663afb9bSAndroid Build Coastguard Worker # Now hardcode the library paths 10490*663afb9bSAndroid Build Coastguard Worker rpath= 10491*663afb9bSAndroid Build Coastguard Worker hardcode_libdirs= 10492*663afb9bSAndroid Build Coastguard Worker for libdir in $compile_rpath $finalize_rpath; do 10493*663afb9bSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 10494*663afb9bSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator"; then 10495*663afb9bSAndroid Build Coastguard Worker if test -z "$hardcode_libdirs"; then 10496*663afb9bSAndroid Build Coastguard Worker hardcode_libdirs=$libdir 10497*663afb9bSAndroid Build Coastguard Worker else 10498*663afb9bSAndroid Build Coastguard Worker # Just accumulate the unique libdirs. 10499*663afb9bSAndroid Build Coastguard Worker case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10500*663afb9bSAndroid Build Coastguard Worker *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10501*663afb9bSAndroid Build Coastguard Worker ;; 10502*663afb9bSAndroid Build Coastguard Worker *) 10503*663afb9bSAndroid Build Coastguard Worker func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10504*663afb9bSAndroid Build Coastguard Worker ;; 10505*663afb9bSAndroid Build Coastguard Worker esac 10506*663afb9bSAndroid Build Coastguard Worker fi 10507*663afb9bSAndroid Build Coastguard Worker else 10508*663afb9bSAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 10509*663afb9bSAndroid Build Coastguard Worker func_append rpath " $flag" 10510*663afb9bSAndroid Build Coastguard Worker fi 10511*663afb9bSAndroid Build Coastguard Worker elif test -n "$runpath_var"; then 10512*663afb9bSAndroid Build Coastguard Worker case "$perm_rpath " in 10513*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 10514*663afb9bSAndroid Build Coastguard Worker *) func_append perm_rpath " $libdir" ;; 10515*663afb9bSAndroid Build Coastguard Worker esac 10516*663afb9bSAndroid Build Coastguard Worker fi 10517*663afb9bSAndroid Build Coastguard Worker case $host in 10518*663afb9bSAndroid Build Coastguard Worker *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 10519*663afb9bSAndroid Build Coastguard Worker testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10520*663afb9bSAndroid Build Coastguard Worker case :$dllsearchpath: in 10521*663afb9bSAndroid Build Coastguard Worker *":$libdir:"*) ;; 10522*663afb9bSAndroid Build Coastguard Worker ::) dllsearchpath=$libdir;; 10523*663afb9bSAndroid Build Coastguard Worker *) func_append dllsearchpath ":$libdir";; 10524*663afb9bSAndroid Build Coastguard Worker esac 10525*663afb9bSAndroid Build Coastguard Worker case :$dllsearchpath: in 10526*663afb9bSAndroid Build Coastguard Worker *":$testbindir:"*) ;; 10527*663afb9bSAndroid Build Coastguard Worker ::) dllsearchpath=$testbindir;; 10528*663afb9bSAndroid Build Coastguard Worker *) func_append dllsearchpath ":$testbindir";; 10529*663afb9bSAndroid Build Coastguard Worker esac 10530*663afb9bSAndroid Build Coastguard Worker ;; 10531*663afb9bSAndroid Build Coastguard Worker esac 10532*663afb9bSAndroid Build Coastguard Worker done 10533*663afb9bSAndroid Build Coastguard Worker # Substitute the hardcoded libdirs into the rpath. 10534*663afb9bSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator" && 10535*663afb9bSAndroid Build Coastguard Worker test -n "$hardcode_libdirs"; then 10536*663afb9bSAndroid Build Coastguard Worker libdir=$hardcode_libdirs 10537*663afb9bSAndroid Build Coastguard Worker eval rpath=\" $hardcode_libdir_flag_spec\" 10538*663afb9bSAndroid Build Coastguard Worker fi 10539*663afb9bSAndroid Build Coastguard Worker compile_rpath=$rpath 10540*663afb9bSAndroid Build Coastguard Worker 10541*663afb9bSAndroid Build Coastguard Worker rpath= 10542*663afb9bSAndroid Build Coastguard Worker hardcode_libdirs= 10543*663afb9bSAndroid Build Coastguard Worker for libdir in $finalize_rpath; do 10544*663afb9bSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_flag_spec"; then 10545*663afb9bSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator"; then 10546*663afb9bSAndroid Build Coastguard Worker if test -z "$hardcode_libdirs"; then 10547*663afb9bSAndroid Build Coastguard Worker hardcode_libdirs=$libdir 10548*663afb9bSAndroid Build Coastguard Worker else 10549*663afb9bSAndroid Build Coastguard Worker # Just accumulate the unique libdirs. 10550*663afb9bSAndroid Build Coastguard Worker case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10551*663afb9bSAndroid Build Coastguard Worker *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10552*663afb9bSAndroid Build Coastguard Worker ;; 10553*663afb9bSAndroid Build Coastguard Worker *) 10554*663afb9bSAndroid Build Coastguard Worker func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10555*663afb9bSAndroid Build Coastguard Worker ;; 10556*663afb9bSAndroid Build Coastguard Worker esac 10557*663afb9bSAndroid Build Coastguard Worker fi 10558*663afb9bSAndroid Build Coastguard Worker else 10559*663afb9bSAndroid Build Coastguard Worker eval flag=\"$hardcode_libdir_flag_spec\" 10560*663afb9bSAndroid Build Coastguard Worker func_append rpath " $flag" 10561*663afb9bSAndroid Build Coastguard Worker fi 10562*663afb9bSAndroid Build Coastguard Worker elif test -n "$runpath_var"; then 10563*663afb9bSAndroid Build Coastguard Worker case "$finalize_perm_rpath " in 10564*663afb9bSAndroid Build Coastguard Worker *" $libdir "*) ;; 10565*663afb9bSAndroid Build Coastguard Worker *) func_append finalize_perm_rpath " $libdir" ;; 10566*663afb9bSAndroid Build Coastguard Worker esac 10567*663afb9bSAndroid Build Coastguard Worker fi 10568*663afb9bSAndroid Build Coastguard Worker done 10569*663afb9bSAndroid Build Coastguard Worker # Substitute the hardcoded libdirs into the rpath. 10570*663afb9bSAndroid Build Coastguard Worker if test -n "$hardcode_libdir_separator" && 10571*663afb9bSAndroid Build Coastguard Worker test -n "$hardcode_libdirs"; then 10572*663afb9bSAndroid Build Coastguard Worker libdir=$hardcode_libdirs 10573*663afb9bSAndroid Build Coastguard Worker eval rpath=\" $hardcode_libdir_flag_spec\" 10574*663afb9bSAndroid Build Coastguard Worker fi 10575*663afb9bSAndroid Build Coastguard Worker finalize_rpath=$rpath 10576*663afb9bSAndroid Build Coastguard Worker 10577*663afb9bSAndroid Build Coastguard Worker if test -n "$libobjs" && test yes = "$build_old_libs"; then 10578*663afb9bSAndroid Build Coastguard Worker # Transform all the library objects into standard objects. 10579*663afb9bSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10580*663afb9bSAndroid Build Coastguard Worker finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10581*663afb9bSAndroid Build Coastguard Worker fi 10582*663afb9bSAndroid Build Coastguard Worker 10583*663afb9bSAndroid Build Coastguard Worker func_generate_dlsyms "$outputname" "@PROGRAM@" false 10584*663afb9bSAndroid Build Coastguard Worker 10585*663afb9bSAndroid Build Coastguard Worker # template prelinking step 10586*663afb9bSAndroid Build Coastguard Worker if test -n "$prelink_cmds"; then 10587*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$prelink_cmds" 'exit $?' 10588*663afb9bSAndroid Build Coastguard Worker fi 10589*663afb9bSAndroid Build Coastguard Worker 10590*663afb9bSAndroid Build Coastguard Worker wrappers_required=: 10591*663afb9bSAndroid Build Coastguard Worker case $host in 10592*663afb9bSAndroid Build Coastguard Worker *cegcc* | *mingw32ce*) 10593*663afb9bSAndroid Build Coastguard Worker # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 10594*663afb9bSAndroid Build Coastguard Worker wrappers_required=false 10595*663afb9bSAndroid Build Coastguard Worker ;; 10596*663afb9bSAndroid Build Coastguard Worker *cygwin* | *mingw* ) 10597*663afb9bSAndroid Build Coastguard Worker test yes = "$build_libtool_libs" || wrappers_required=false 10598*663afb9bSAndroid Build Coastguard Worker ;; 10599*663afb9bSAndroid Build Coastguard Worker *) 10600*663afb9bSAndroid Build Coastguard Worker if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 10601*663afb9bSAndroid Build Coastguard Worker wrappers_required=false 10602*663afb9bSAndroid Build Coastguard Worker fi 10603*663afb9bSAndroid Build Coastguard Worker ;; 10604*663afb9bSAndroid Build Coastguard Worker esac 10605*663afb9bSAndroid Build Coastguard Worker $wrappers_required || { 10606*663afb9bSAndroid Build Coastguard Worker # Replace the output file specification. 10607*663afb9bSAndroid Build Coastguard Worker compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10608*663afb9bSAndroid Build Coastguard Worker link_command=$compile_command$compile_rpath 10609*663afb9bSAndroid Build Coastguard Worker 10610*663afb9bSAndroid Build Coastguard Worker # We have no uninstalled library dependencies, so finalize right now. 10611*663afb9bSAndroid Build Coastguard Worker exit_status=0 10612*663afb9bSAndroid Build Coastguard Worker func_show_eval "$link_command" 'exit_status=$?' 10613*663afb9bSAndroid Build Coastguard Worker 10614*663afb9bSAndroid Build Coastguard Worker if test -n "$postlink_cmds"; then 10615*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$output" 10616*663afb9bSAndroid 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'` 10617*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$postlink_cmds" 'exit $?' 10618*663afb9bSAndroid Build Coastguard Worker fi 10619*663afb9bSAndroid Build Coastguard Worker 10620*663afb9bSAndroid Build Coastguard Worker # Delete the generated files. 10621*663afb9bSAndroid Build Coastguard Worker if test -f "$output_objdir/${outputname}S.$objext"; then 10622*663afb9bSAndroid Build Coastguard Worker func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10623*663afb9bSAndroid Build Coastguard Worker fi 10624*663afb9bSAndroid Build Coastguard Worker 10625*663afb9bSAndroid Build Coastguard Worker exit $exit_status 10626*663afb9bSAndroid Build Coastguard Worker } 10627*663afb9bSAndroid Build Coastguard Worker 10628*663afb9bSAndroid Build Coastguard Worker if test -n "$compile_shlibpath$finalize_shlibpath"; then 10629*663afb9bSAndroid Build Coastguard Worker compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10630*663afb9bSAndroid Build Coastguard Worker fi 10631*663afb9bSAndroid Build Coastguard Worker if test -n "$finalize_shlibpath"; then 10632*663afb9bSAndroid Build Coastguard Worker finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10633*663afb9bSAndroid Build Coastguard Worker fi 10634*663afb9bSAndroid Build Coastguard Worker 10635*663afb9bSAndroid Build Coastguard Worker compile_var= 10636*663afb9bSAndroid Build Coastguard Worker finalize_var= 10637*663afb9bSAndroid Build Coastguard Worker if test -n "$runpath_var"; then 10638*663afb9bSAndroid Build Coastguard Worker if test -n "$perm_rpath"; then 10639*663afb9bSAndroid Build Coastguard Worker # We should set the runpath_var. 10640*663afb9bSAndroid Build Coastguard Worker rpath= 10641*663afb9bSAndroid Build Coastguard Worker for dir in $perm_rpath; do 10642*663afb9bSAndroid Build Coastguard Worker func_append rpath "$dir:" 10643*663afb9bSAndroid Build Coastguard Worker done 10644*663afb9bSAndroid Build Coastguard Worker compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10645*663afb9bSAndroid Build Coastguard Worker fi 10646*663afb9bSAndroid Build Coastguard Worker if test -n "$finalize_perm_rpath"; then 10647*663afb9bSAndroid Build Coastguard Worker # We should set the runpath_var. 10648*663afb9bSAndroid Build Coastguard Worker rpath= 10649*663afb9bSAndroid Build Coastguard Worker for dir in $finalize_perm_rpath; do 10650*663afb9bSAndroid Build Coastguard Worker func_append rpath "$dir:" 10651*663afb9bSAndroid Build Coastguard Worker done 10652*663afb9bSAndroid Build Coastguard Worker finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10653*663afb9bSAndroid Build Coastguard Worker fi 10654*663afb9bSAndroid Build Coastguard Worker fi 10655*663afb9bSAndroid Build Coastguard Worker 10656*663afb9bSAndroid Build Coastguard Worker if test yes = "$no_install"; then 10657*663afb9bSAndroid Build Coastguard Worker # We don't need to create a wrapper script. 10658*663afb9bSAndroid Build Coastguard Worker link_command=$compile_var$compile_command$compile_rpath 10659*663afb9bSAndroid Build Coastguard Worker # Replace the output file specification. 10660*663afb9bSAndroid Build Coastguard Worker link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10661*663afb9bSAndroid Build Coastguard Worker # Delete the old output file. 10662*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM $output 10663*663afb9bSAndroid Build Coastguard Worker # Link the executable and exit 10664*663afb9bSAndroid Build Coastguard Worker func_show_eval "$link_command" 'exit $?' 10665*663afb9bSAndroid Build Coastguard Worker 10666*663afb9bSAndroid Build Coastguard Worker if test -n "$postlink_cmds"; then 10667*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$output" 10668*663afb9bSAndroid 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'` 10669*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$postlink_cmds" 'exit $?' 10670*663afb9bSAndroid Build Coastguard Worker fi 10671*663afb9bSAndroid Build Coastguard Worker 10672*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10673*663afb9bSAndroid Build Coastguard Worker fi 10674*663afb9bSAndroid Build Coastguard Worker 10675*663afb9bSAndroid Build Coastguard Worker case $hardcode_action,$fast_install in 10676*663afb9bSAndroid Build Coastguard Worker relink,*) 10677*663afb9bSAndroid Build Coastguard Worker # Fast installation is not supported 10678*663afb9bSAndroid Build Coastguard Worker link_command=$compile_var$compile_command$compile_rpath 10679*663afb9bSAndroid Build Coastguard Worker relink_command=$finalize_var$finalize_command$finalize_rpath 10680*663afb9bSAndroid Build Coastguard Worker 10681*663afb9bSAndroid Build Coastguard Worker func_warning "this platform does not like uninstalled shared libraries" 10682*663afb9bSAndroid Build Coastguard Worker func_warning "'$output' will be relinked during installation" 10683*663afb9bSAndroid Build Coastguard Worker ;; 10684*663afb9bSAndroid Build Coastguard Worker *,yes) 10685*663afb9bSAndroid Build Coastguard Worker link_command=$finalize_var$compile_command$finalize_rpath 10686*663afb9bSAndroid Build Coastguard Worker relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 10687*663afb9bSAndroid Build Coastguard Worker ;; 10688*663afb9bSAndroid Build Coastguard Worker *,no) 10689*663afb9bSAndroid Build Coastguard Worker link_command=$compile_var$compile_command$compile_rpath 10690*663afb9bSAndroid Build Coastguard Worker relink_command=$finalize_var$finalize_command$finalize_rpath 10691*663afb9bSAndroid Build Coastguard Worker ;; 10692*663afb9bSAndroid Build Coastguard Worker *,needless) 10693*663afb9bSAndroid Build Coastguard Worker link_command=$finalize_var$compile_command$finalize_rpath 10694*663afb9bSAndroid Build Coastguard Worker relink_command= 10695*663afb9bSAndroid Build Coastguard Worker ;; 10696*663afb9bSAndroid Build Coastguard Worker esac 10697*663afb9bSAndroid Build Coastguard Worker 10698*663afb9bSAndroid Build Coastguard Worker # Replace the output file specification. 10699*663afb9bSAndroid Build Coastguard Worker link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10700*663afb9bSAndroid Build Coastguard Worker 10701*663afb9bSAndroid Build Coastguard Worker # Delete the old output files. 10702*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10703*663afb9bSAndroid Build Coastguard Worker 10704*663afb9bSAndroid Build Coastguard Worker func_show_eval "$link_command" 'exit $?' 10705*663afb9bSAndroid Build Coastguard Worker 10706*663afb9bSAndroid Build Coastguard Worker if test -n "$postlink_cmds"; then 10707*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$output_objdir/$outputname" 10708*663afb9bSAndroid 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'` 10709*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$postlink_cmds" 'exit $?' 10710*663afb9bSAndroid Build Coastguard Worker fi 10711*663afb9bSAndroid Build Coastguard Worker 10712*663afb9bSAndroid Build Coastguard Worker # Now create the wrapper script. 10713*663afb9bSAndroid Build Coastguard Worker func_verbose "creating $output" 10714*663afb9bSAndroid Build Coastguard Worker 10715*663afb9bSAndroid Build Coastguard Worker # Quote the relink command for shipping. 10716*663afb9bSAndroid Build Coastguard Worker if test -n "$relink_command"; then 10717*663afb9bSAndroid Build Coastguard Worker # Preserve any variables that may affect compiler behavior 10718*663afb9bSAndroid Build Coastguard Worker for var in $variables_saved_for_relink; do 10719*663afb9bSAndroid Build Coastguard Worker if eval test -z \"\${$var+set}\"; then 10720*663afb9bSAndroid Build Coastguard Worker relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10721*663afb9bSAndroid Build Coastguard Worker elif eval var_value=\$$var; test -z "$var_value"; then 10722*663afb9bSAndroid Build Coastguard Worker relink_command="$var=; export $var; $relink_command" 10723*663afb9bSAndroid Build Coastguard Worker else 10724*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty "$var_value" 10725*663afb9bSAndroid Build Coastguard Worker relink_command="$var=$func_quote_arg_result; export $var; $relink_command" 10726*663afb9bSAndroid Build Coastguard Worker fi 10727*663afb9bSAndroid Build Coastguard Worker done 10728*663afb9bSAndroid Build Coastguard Worker func_quote eval cd "`pwd`" 10729*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" 10730*663afb9bSAndroid Build Coastguard Worker relink_command=$func_quote_arg_unquoted_result 10731*663afb9bSAndroid Build Coastguard Worker fi 10732*663afb9bSAndroid Build Coastguard Worker 10733*663afb9bSAndroid Build Coastguard Worker # Only actually do things if not in dry run mode. 10734*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 10735*663afb9bSAndroid Build Coastguard Worker # win32 will think the script is a binary if it has 10736*663afb9bSAndroid Build Coastguard Worker # a .exe suffix, so we strip it off here. 10737*663afb9bSAndroid Build Coastguard Worker case $output in 10738*663afb9bSAndroid Build Coastguard Worker *.exe) func_stripname '' '.exe' "$output" 10739*663afb9bSAndroid Build Coastguard Worker output=$func_stripname_result ;; 10740*663afb9bSAndroid Build Coastguard Worker esac 10741*663afb9bSAndroid Build Coastguard Worker # test for cygwin because mv fails w/o .exe extensions 10742*663afb9bSAndroid Build Coastguard Worker case $host in 10743*663afb9bSAndroid Build Coastguard Worker *cygwin*) 10744*663afb9bSAndroid Build Coastguard Worker exeext=.exe 10745*663afb9bSAndroid Build Coastguard Worker func_stripname '' '.exe' "$outputname" 10746*663afb9bSAndroid Build Coastguard Worker outputname=$func_stripname_result ;; 10747*663afb9bSAndroid Build Coastguard Worker *) exeext= ;; 10748*663afb9bSAndroid Build Coastguard Worker esac 10749*663afb9bSAndroid Build Coastguard Worker case $host in 10750*663afb9bSAndroid Build Coastguard Worker *cygwin* | *mingw* ) 10751*663afb9bSAndroid Build Coastguard Worker func_dirname_and_basename "$output" "" "." 10752*663afb9bSAndroid Build Coastguard Worker output_name=$func_basename_result 10753*663afb9bSAndroid Build Coastguard Worker output_path=$func_dirname_result 10754*663afb9bSAndroid Build Coastguard Worker cwrappersource=$output_path/$objdir/lt-$output_name.c 10755*663afb9bSAndroid Build Coastguard Worker cwrapper=$output_path/$output_name.exe 10756*663afb9bSAndroid Build Coastguard Worker $RM $cwrappersource $cwrapper 10757*663afb9bSAndroid Build Coastguard Worker trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10758*663afb9bSAndroid Build Coastguard Worker 10759*663afb9bSAndroid Build Coastguard Worker func_emit_cwrapperexe_src > $cwrappersource 10760*663afb9bSAndroid Build Coastguard Worker 10761*663afb9bSAndroid Build Coastguard Worker # The wrapper executable is built using the $host compiler, 10762*663afb9bSAndroid Build Coastguard Worker # because it contains $host paths and files. If cross- 10763*663afb9bSAndroid Build Coastguard Worker # compiling, it, like the target executable, must be 10764*663afb9bSAndroid Build Coastguard Worker # executed on the $host or under an emulation environment. 10765*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 10766*663afb9bSAndroid Build Coastguard Worker $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10767*663afb9bSAndroid Build Coastguard Worker $STRIP $cwrapper 10768*663afb9bSAndroid Build Coastguard Worker } 10769*663afb9bSAndroid Build Coastguard Worker 10770*663afb9bSAndroid Build Coastguard Worker # Now, create the wrapper script for func_source use: 10771*663afb9bSAndroid Build Coastguard Worker func_ltwrapper_scriptname $cwrapper 10772*663afb9bSAndroid Build Coastguard Worker $RM $func_ltwrapper_scriptname_result 10773*663afb9bSAndroid Build Coastguard Worker trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10774*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 10775*663afb9bSAndroid Build Coastguard Worker # note: this script will not be executed, so do not chmod. 10776*663afb9bSAndroid Build Coastguard Worker if test "x$build" = "x$host"; then 10777*663afb9bSAndroid Build Coastguard Worker $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10778*663afb9bSAndroid Build Coastguard Worker else 10779*663afb9bSAndroid Build Coastguard Worker func_emit_wrapper no > $func_ltwrapper_scriptname_result 10780*663afb9bSAndroid Build Coastguard Worker fi 10781*663afb9bSAndroid Build Coastguard Worker } 10782*663afb9bSAndroid Build Coastguard Worker ;; 10783*663afb9bSAndroid Build Coastguard Worker * ) 10784*663afb9bSAndroid Build Coastguard Worker $RM $output 10785*663afb9bSAndroid Build Coastguard Worker trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10786*663afb9bSAndroid Build Coastguard Worker 10787*663afb9bSAndroid Build Coastguard Worker func_emit_wrapper no > $output 10788*663afb9bSAndroid Build Coastguard Worker chmod +x $output 10789*663afb9bSAndroid Build Coastguard Worker ;; 10790*663afb9bSAndroid Build Coastguard Worker esac 10791*663afb9bSAndroid Build Coastguard Worker } 10792*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 10793*663afb9bSAndroid Build Coastguard Worker ;; 10794*663afb9bSAndroid Build Coastguard Worker esac 10795*663afb9bSAndroid Build Coastguard Worker 10796*663afb9bSAndroid Build Coastguard Worker # See if we need to build an old-fashioned archive. 10797*663afb9bSAndroid Build Coastguard Worker for oldlib in $oldlibs; do 10798*663afb9bSAndroid Build Coastguard Worker 10799*663afb9bSAndroid Build Coastguard Worker case $build_libtool_libs in 10800*663afb9bSAndroid Build Coastguard Worker convenience) 10801*663afb9bSAndroid Build Coastguard Worker oldobjs="$libobjs_save $symfileobj" 10802*663afb9bSAndroid Build Coastguard Worker addlibs=$convenience 10803*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=no 10804*663afb9bSAndroid Build Coastguard Worker ;; 10805*663afb9bSAndroid Build Coastguard Worker module) 10806*663afb9bSAndroid Build Coastguard Worker oldobjs=$libobjs_save 10807*663afb9bSAndroid Build Coastguard Worker addlibs=$old_convenience 10808*663afb9bSAndroid Build Coastguard Worker build_libtool_libs=no 10809*663afb9bSAndroid Build Coastguard Worker ;; 10810*663afb9bSAndroid Build Coastguard Worker *) 10811*663afb9bSAndroid Build Coastguard Worker oldobjs="$old_deplibs $non_pic_objects" 10812*663afb9bSAndroid Build Coastguard Worker $preload && test -f "$symfileobj" \ 10813*663afb9bSAndroid Build Coastguard Worker && func_append oldobjs " $symfileobj" 10814*663afb9bSAndroid Build Coastguard Worker addlibs=$old_convenience 10815*663afb9bSAndroid Build Coastguard Worker ;; 10816*663afb9bSAndroid Build Coastguard Worker esac 10817*663afb9bSAndroid Build Coastguard Worker 10818*663afb9bSAndroid Build Coastguard Worker if test -n "$addlibs"; then 10819*663afb9bSAndroid Build Coastguard Worker gentop=$output_objdir/${outputname}x 10820*663afb9bSAndroid Build Coastguard Worker func_append generated " $gentop" 10821*663afb9bSAndroid Build Coastguard Worker 10822*663afb9bSAndroid Build Coastguard Worker func_extract_archives $gentop $addlibs 10823*663afb9bSAndroid Build Coastguard Worker func_append oldobjs " $func_extract_archives_result" 10824*663afb9bSAndroid Build Coastguard Worker fi 10825*663afb9bSAndroid Build Coastguard Worker 10826*663afb9bSAndroid Build Coastguard Worker # Do each command in the archive commands. 10827*663afb9bSAndroid Build Coastguard Worker if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10828*663afb9bSAndroid Build Coastguard Worker cmds=$old_archive_from_new_cmds 10829*663afb9bSAndroid Build Coastguard Worker else 10830*663afb9bSAndroid Build Coastguard Worker 10831*663afb9bSAndroid Build Coastguard Worker # Add any objects from preloaded convenience libraries 10832*663afb9bSAndroid Build Coastguard Worker if test -n "$dlprefiles"; then 10833*663afb9bSAndroid Build Coastguard Worker gentop=$output_objdir/${outputname}x 10834*663afb9bSAndroid Build Coastguard Worker func_append generated " $gentop" 10835*663afb9bSAndroid Build Coastguard Worker 10836*663afb9bSAndroid Build Coastguard Worker func_extract_archives $gentop $dlprefiles 10837*663afb9bSAndroid Build Coastguard Worker func_append oldobjs " $func_extract_archives_result" 10838*663afb9bSAndroid Build Coastguard Worker fi 10839*663afb9bSAndroid Build Coastguard Worker 10840*663afb9bSAndroid Build Coastguard Worker # POSIX demands no paths to be encoded in archives. We have 10841*663afb9bSAndroid Build Coastguard Worker # to avoid creating archives with duplicate basenames if we 10842*663afb9bSAndroid Build Coastguard Worker # might have to extract them afterwards, e.g., when creating a 10843*663afb9bSAndroid Build Coastguard Worker # static archive out of a convenience library, or when linking 10844*663afb9bSAndroid Build Coastguard Worker # the entirety of a libtool archive into another (currently 10845*663afb9bSAndroid Build Coastguard Worker # not supported by libtool). 10846*663afb9bSAndroid Build Coastguard Worker if (for obj in $oldobjs 10847*663afb9bSAndroid Build Coastguard Worker do 10848*663afb9bSAndroid Build Coastguard Worker func_basename "$obj" 10849*663afb9bSAndroid Build Coastguard Worker $ECHO "$func_basename_result" 10850*663afb9bSAndroid Build Coastguard Worker done | sort | sort -uc >/dev/null 2>&1); then 10851*663afb9bSAndroid Build Coastguard Worker : 10852*663afb9bSAndroid Build Coastguard Worker else 10853*663afb9bSAndroid Build Coastguard Worker echo "copying selected object files to avoid basename conflicts..." 10854*663afb9bSAndroid Build Coastguard Worker gentop=$output_objdir/${outputname}x 10855*663afb9bSAndroid Build Coastguard Worker func_append generated " $gentop" 10856*663afb9bSAndroid Build Coastguard Worker func_mkdir_p "$gentop" 10857*663afb9bSAndroid Build Coastguard Worker save_oldobjs=$oldobjs 10858*663afb9bSAndroid Build Coastguard Worker oldobjs= 10859*663afb9bSAndroid Build Coastguard Worker counter=1 10860*663afb9bSAndroid Build Coastguard Worker for obj in $save_oldobjs 10861*663afb9bSAndroid Build Coastguard Worker do 10862*663afb9bSAndroid Build Coastguard Worker func_basename "$obj" 10863*663afb9bSAndroid Build Coastguard Worker objbase=$func_basename_result 10864*663afb9bSAndroid Build Coastguard Worker case " $oldobjs " in 10865*663afb9bSAndroid Build Coastguard Worker " ") oldobjs=$obj ;; 10866*663afb9bSAndroid Build Coastguard Worker *[\ /]"$objbase "*) 10867*663afb9bSAndroid Build Coastguard Worker while :; do 10868*663afb9bSAndroid Build Coastguard Worker # Make sure we don't pick an alternate name that also 10869*663afb9bSAndroid Build Coastguard Worker # overlaps. 10870*663afb9bSAndroid Build Coastguard Worker newobj=lt$counter-$objbase 10871*663afb9bSAndroid Build Coastguard Worker func_arith $counter + 1 10872*663afb9bSAndroid Build Coastguard Worker counter=$func_arith_result 10873*663afb9bSAndroid Build Coastguard Worker case " $oldobjs " in 10874*663afb9bSAndroid Build Coastguard Worker *[\ /]"$newobj "*) ;; 10875*663afb9bSAndroid Build Coastguard Worker *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10876*663afb9bSAndroid Build Coastguard Worker esac 10877*663afb9bSAndroid Build Coastguard Worker done 10878*663afb9bSAndroid Build Coastguard Worker func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10879*663afb9bSAndroid Build Coastguard Worker func_append oldobjs " $gentop/$newobj" 10880*663afb9bSAndroid Build Coastguard Worker ;; 10881*663afb9bSAndroid Build Coastguard Worker *) func_append oldobjs " $obj" ;; 10882*663afb9bSAndroid Build Coastguard Worker esac 10883*663afb9bSAndroid Build Coastguard Worker done 10884*663afb9bSAndroid Build Coastguard Worker fi 10885*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10886*663afb9bSAndroid Build Coastguard Worker tool_oldlib=$func_to_tool_file_result 10887*663afb9bSAndroid Build Coastguard Worker eval cmds=\"$old_archive_cmds\" 10888*663afb9bSAndroid Build Coastguard Worker 10889*663afb9bSAndroid Build Coastguard Worker func_len " $cmds" 10890*663afb9bSAndroid Build Coastguard Worker len=$func_len_result 10891*663afb9bSAndroid Build Coastguard Worker if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10892*663afb9bSAndroid Build Coastguard Worker cmds=$old_archive_cmds 10893*663afb9bSAndroid Build Coastguard Worker elif test -n "$archiver_list_spec"; then 10894*663afb9bSAndroid Build Coastguard Worker func_verbose "using command file archive linking..." 10895*663afb9bSAndroid Build Coastguard Worker for obj in $oldobjs 10896*663afb9bSAndroid Build Coastguard Worker do 10897*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$obj" 10898*663afb9bSAndroid Build Coastguard Worker $ECHO "$func_to_tool_file_result" 10899*663afb9bSAndroid Build Coastguard Worker done > $output_objdir/$libname.libcmd 10900*663afb9bSAndroid Build Coastguard Worker func_to_tool_file "$output_objdir/$libname.libcmd" 10901*663afb9bSAndroid Build Coastguard Worker oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10902*663afb9bSAndroid Build Coastguard Worker cmds=$old_archive_cmds 10903*663afb9bSAndroid Build Coastguard Worker else 10904*663afb9bSAndroid Build Coastguard Worker # the command line is too long to link in one step, link in parts 10905*663afb9bSAndroid Build Coastguard Worker func_verbose "using piecewise archive linking..." 10906*663afb9bSAndroid Build Coastguard Worker save_RANLIB=$RANLIB 10907*663afb9bSAndroid Build Coastguard Worker RANLIB=: 10908*663afb9bSAndroid Build Coastguard Worker objlist= 10909*663afb9bSAndroid Build Coastguard Worker concat_cmds= 10910*663afb9bSAndroid Build Coastguard Worker save_oldobjs=$oldobjs 10911*663afb9bSAndroid Build Coastguard Worker oldobjs= 10912*663afb9bSAndroid Build Coastguard Worker # Is there a better way of finding the last object in the list? 10913*663afb9bSAndroid Build Coastguard Worker for obj in $save_oldobjs 10914*663afb9bSAndroid Build Coastguard Worker do 10915*663afb9bSAndroid Build Coastguard Worker last_oldobj=$obj 10916*663afb9bSAndroid Build Coastguard Worker done 10917*663afb9bSAndroid Build Coastguard Worker eval test_cmds=\"$old_archive_cmds\" 10918*663afb9bSAndroid Build Coastguard Worker func_len " $test_cmds" 10919*663afb9bSAndroid Build Coastguard Worker len0=$func_len_result 10920*663afb9bSAndroid Build Coastguard Worker len=$len0 10921*663afb9bSAndroid Build Coastguard Worker for obj in $save_oldobjs 10922*663afb9bSAndroid Build Coastguard Worker do 10923*663afb9bSAndroid Build Coastguard Worker func_len " $obj" 10924*663afb9bSAndroid Build Coastguard Worker func_arith $len + $func_len_result 10925*663afb9bSAndroid Build Coastguard Worker len=$func_arith_result 10926*663afb9bSAndroid Build Coastguard Worker func_append objlist " $obj" 10927*663afb9bSAndroid Build Coastguard Worker if test "$len" -lt "$max_cmd_len"; then 10928*663afb9bSAndroid Build Coastguard Worker : 10929*663afb9bSAndroid Build Coastguard Worker else 10930*663afb9bSAndroid Build Coastguard Worker # the above command should be used before it gets too long 10931*663afb9bSAndroid Build Coastguard Worker oldobjs=$objlist 10932*663afb9bSAndroid Build Coastguard Worker if test "$obj" = "$last_oldobj"; then 10933*663afb9bSAndroid Build Coastguard Worker RANLIB=$save_RANLIB 10934*663afb9bSAndroid Build Coastguard Worker fi 10935*663afb9bSAndroid Build Coastguard Worker test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10936*663afb9bSAndroid Build Coastguard Worker eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 10937*663afb9bSAndroid Build Coastguard Worker objlist= 10938*663afb9bSAndroid Build Coastguard Worker len=$len0 10939*663afb9bSAndroid Build Coastguard Worker fi 10940*663afb9bSAndroid Build Coastguard Worker done 10941*663afb9bSAndroid Build Coastguard Worker RANLIB=$save_RANLIB 10942*663afb9bSAndroid Build Coastguard Worker oldobjs=$objlist 10943*663afb9bSAndroid Build Coastguard Worker if test -z "$oldobjs"; then 10944*663afb9bSAndroid Build Coastguard Worker eval cmds=\"\$concat_cmds\" 10945*663afb9bSAndroid Build Coastguard Worker else 10946*663afb9bSAndroid Build Coastguard Worker eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 10947*663afb9bSAndroid Build Coastguard Worker fi 10948*663afb9bSAndroid Build Coastguard Worker fi 10949*663afb9bSAndroid Build Coastguard Worker fi 10950*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$cmds" 'exit $?' 10951*663afb9bSAndroid Build Coastguard Worker done 10952*663afb9bSAndroid Build Coastguard Worker 10953*663afb9bSAndroid Build Coastguard Worker test -n "$generated" && \ 10954*663afb9bSAndroid Build Coastguard Worker func_show_eval "${RM}r$generated" 10955*663afb9bSAndroid Build Coastguard Worker 10956*663afb9bSAndroid Build Coastguard Worker # Now create the libtool archive. 10957*663afb9bSAndroid Build Coastguard Worker case $output in 10958*663afb9bSAndroid Build Coastguard Worker *.la) 10959*663afb9bSAndroid Build Coastguard Worker old_library= 10960*663afb9bSAndroid Build Coastguard Worker test yes = "$build_old_libs" && old_library=$libname.$libext 10961*663afb9bSAndroid Build Coastguard Worker func_verbose "creating $output" 10962*663afb9bSAndroid Build Coastguard Worker 10963*663afb9bSAndroid Build Coastguard Worker # Preserve any variables that may affect compiler behavior 10964*663afb9bSAndroid Build Coastguard Worker for var in $variables_saved_for_relink; do 10965*663afb9bSAndroid Build Coastguard Worker if eval test -z \"\${$var+set}\"; then 10966*663afb9bSAndroid Build Coastguard Worker relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10967*663afb9bSAndroid Build Coastguard Worker elif eval var_value=\$$var; test -z "$var_value"; then 10968*663afb9bSAndroid Build Coastguard Worker relink_command="$var=; export $var; $relink_command" 10969*663afb9bSAndroid Build Coastguard Worker else 10970*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty,unquoted "$var_value" 10971*663afb9bSAndroid Build Coastguard Worker relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" 10972*663afb9bSAndroid Build Coastguard Worker fi 10973*663afb9bSAndroid Build Coastguard Worker done 10974*663afb9bSAndroid Build Coastguard Worker # Quote the link command for shipping. 10975*663afb9bSAndroid Build Coastguard Worker func_quote eval cd "`pwd`" 10976*663afb9bSAndroid Build Coastguard Worker relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 10977*663afb9bSAndroid Build Coastguard Worker func_quote_arg pretty,unquoted "$relink_command" 10978*663afb9bSAndroid Build Coastguard Worker relink_command=$func_quote_arg_unquoted_result 10979*663afb9bSAndroid Build Coastguard Worker if test yes = "$hardcode_automatic"; then 10980*663afb9bSAndroid Build Coastguard Worker relink_command= 10981*663afb9bSAndroid Build Coastguard Worker fi 10982*663afb9bSAndroid Build Coastguard Worker 10983*663afb9bSAndroid Build Coastguard Worker # Only create the output if not a dry run. 10984*663afb9bSAndroid Build Coastguard Worker $opt_dry_run || { 10985*663afb9bSAndroid Build Coastguard Worker for installed in no yes; do 10986*663afb9bSAndroid Build Coastguard Worker if test yes = "$installed"; then 10987*663afb9bSAndroid Build Coastguard Worker if test -z "$install_libdir"; then 10988*663afb9bSAndroid Build Coastguard Worker break 10989*663afb9bSAndroid Build Coastguard Worker fi 10990*663afb9bSAndroid Build Coastguard Worker output=$output_objdir/${outputname}i 10991*663afb9bSAndroid Build Coastguard Worker # Replace all uninstalled libtool libraries with the installed ones 10992*663afb9bSAndroid Build Coastguard Worker newdependency_libs= 10993*663afb9bSAndroid Build Coastguard Worker for deplib in $dependency_libs; do 10994*663afb9bSAndroid Build Coastguard Worker case $deplib in 10995*663afb9bSAndroid Build Coastguard Worker *.la) 10996*663afb9bSAndroid Build Coastguard Worker func_basename "$deplib" 10997*663afb9bSAndroid Build Coastguard Worker name=$func_basename_result 10998*663afb9bSAndroid Build Coastguard Worker func_resolve_sysroot "$deplib" 10999*663afb9bSAndroid Build Coastguard Worker eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 11000*663afb9bSAndroid Build Coastguard Worker test -z "$libdir" && \ 11001*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$deplib' is not a valid libtool archive" 11002*663afb9bSAndroid Build Coastguard Worker func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 11003*663afb9bSAndroid Build Coastguard Worker ;; 11004*663afb9bSAndroid Build Coastguard Worker -L*) 11005*663afb9bSAndroid Build Coastguard Worker func_stripname -L '' "$deplib" 11006*663afb9bSAndroid Build Coastguard Worker func_replace_sysroot "$func_stripname_result" 11007*663afb9bSAndroid Build Coastguard Worker func_append newdependency_libs " -L$func_replace_sysroot_result" 11008*663afb9bSAndroid Build Coastguard Worker ;; 11009*663afb9bSAndroid Build Coastguard Worker -R*) 11010*663afb9bSAndroid Build Coastguard Worker func_stripname -R '' "$deplib" 11011*663afb9bSAndroid Build Coastguard Worker func_replace_sysroot "$func_stripname_result" 11012*663afb9bSAndroid Build Coastguard Worker func_append newdependency_libs " -R$func_replace_sysroot_result" 11013*663afb9bSAndroid Build Coastguard Worker ;; 11014*663afb9bSAndroid Build Coastguard Worker *) func_append newdependency_libs " $deplib" ;; 11015*663afb9bSAndroid Build Coastguard Worker esac 11016*663afb9bSAndroid Build Coastguard Worker done 11017*663afb9bSAndroid Build Coastguard Worker dependency_libs=$newdependency_libs 11018*663afb9bSAndroid Build Coastguard Worker newdlfiles= 11019*663afb9bSAndroid Build Coastguard Worker 11020*663afb9bSAndroid Build Coastguard Worker for lib in $dlfiles; do 11021*663afb9bSAndroid Build Coastguard Worker case $lib in 11022*663afb9bSAndroid Build Coastguard Worker *.la) 11023*663afb9bSAndroid Build Coastguard Worker func_basename "$lib" 11024*663afb9bSAndroid Build Coastguard Worker name=$func_basename_result 11025*663afb9bSAndroid Build Coastguard Worker eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11026*663afb9bSAndroid Build Coastguard Worker test -z "$libdir" && \ 11027*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$lib' is not a valid libtool archive" 11028*663afb9bSAndroid Build Coastguard Worker func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 11029*663afb9bSAndroid Build Coastguard Worker ;; 11030*663afb9bSAndroid Build Coastguard Worker *) func_append newdlfiles " $lib" ;; 11031*663afb9bSAndroid Build Coastguard Worker esac 11032*663afb9bSAndroid Build Coastguard Worker done 11033*663afb9bSAndroid Build Coastguard Worker dlfiles=$newdlfiles 11034*663afb9bSAndroid Build Coastguard Worker newdlprefiles= 11035*663afb9bSAndroid Build Coastguard Worker for lib in $dlprefiles; do 11036*663afb9bSAndroid Build Coastguard Worker case $lib in 11037*663afb9bSAndroid Build Coastguard Worker *.la) 11038*663afb9bSAndroid Build Coastguard Worker # Only pass preopened files to the pseudo-archive (for 11039*663afb9bSAndroid Build Coastguard Worker # eventual linking with the app. that links it) if we 11040*663afb9bSAndroid Build Coastguard Worker # didn't already link the preopened objects directly into 11041*663afb9bSAndroid Build Coastguard Worker # the library: 11042*663afb9bSAndroid Build Coastguard Worker func_basename "$lib" 11043*663afb9bSAndroid Build Coastguard Worker name=$func_basename_result 11044*663afb9bSAndroid Build Coastguard Worker eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11045*663afb9bSAndroid Build Coastguard Worker test -z "$libdir" && \ 11046*663afb9bSAndroid Build Coastguard Worker func_fatal_error "'$lib' is not a valid libtool archive" 11047*663afb9bSAndroid Build Coastguard Worker func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 11048*663afb9bSAndroid Build Coastguard Worker ;; 11049*663afb9bSAndroid Build Coastguard Worker esac 11050*663afb9bSAndroid Build Coastguard Worker done 11051*663afb9bSAndroid Build Coastguard Worker dlprefiles=$newdlprefiles 11052*663afb9bSAndroid Build Coastguard Worker else 11053*663afb9bSAndroid Build Coastguard Worker newdlfiles= 11054*663afb9bSAndroid Build Coastguard Worker for lib in $dlfiles; do 11055*663afb9bSAndroid Build Coastguard Worker case $lib in 11056*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11057*663afb9bSAndroid Build Coastguard Worker *) abs=`pwd`"/$lib" ;; 11058*663afb9bSAndroid Build Coastguard Worker esac 11059*663afb9bSAndroid Build Coastguard Worker func_append newdlfiles " $abs" 11060*663afb9bSAndroid Build Coastguard Worker done 11061*663afb9bSAndroid Build Coastguard Worker dlfiles=$newdlfiles 11062*663afb9bSAndroid Build Coastguard Worker newdlprefiles= 11063*663afb9bSAndroid Build Coastguard Worker for lib in $dlprefiles; do 11064*663afb9bSAndroid Build Coastguard Worker case $lib in 11065*663afb9bSAndroid Build Coastguard Worker [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11066*663afb9bSAndroid Build Coastguard Worker *) abs=`pwd`"/$lib" ;; 11067*663afb9bSAndroid Build Coastguard Worker esac 11068*663afb9bSAndroid Build Coastguard Worker func_append newdlprefiles " $abs" 11069*663afb9bSAndroid Build Coastguard Worker done 11070*663afb9bSAndroid Build Coastguard Worker dlprefiles=$newdlprefiles 11071*663afb9bSAndroid Build Coastguard Worker fi 11072*663afb9bSAndroid Build Coastguard Worker $RM $output 11073*663afb9bSAndroid Build Coastguard Worker # place dlname in correct position for cygwin 11074*663afb9bSAndroid Build Coastguard Worker # In fact, it would be nice if we could use this code for all target 11075*663afb9bSAndroid Build Coastguard Worker # systems that can't hard-code library paths into their executables 11076*663afb9bSAndroid Build Coastguard Worker # and that have no shared library path variable independent of PATH, 11077*663afb9bSAndroid Build Coastguard Worker # but it turns out we can't easily determine that from inspecting 11078*663afb9bSAndroid Build Coastguard Worker # libtool variables, so we have to hard-code the OSs to which it 11079*663afb9bSAndroid Build Coastguard Worker # applies here; at the moment, that means platforms that use the PE 11080*663afb9bSAndroid Build Coastguard Worker # object format with DLL files. See the long comment at the top of 11081*663afb9bSAndroid Build Coastguard Worker # tests/bindir.at for full details. 11082*663afb9bSAndroid Build Coastguard Worker tdlname=$dlname 11083*663afb9bSAndroid Build Coastguard Worker case $host,$output,$installed,$module,$dlname in 11084*663afb9bSAndroid Build Coastguard Worker *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 11085*663afb9bSAndroid Build Coastguard Worker # If a -bindir argument was supplied, place the dll there. 11086*663afb9bSAndroid Build Coastguard Worker if test -n "$bindir"; then 11087*663afb9bSAndroid Build Coastguard Worker func_relative_path "$install_libdir" "$bindir" 11088*663afb9bSAndroid Build Coastguard Worker tdlname=$func_relative_path_result/$dlname 11089*663afb9bSAndroid Build Coastguard Worker else 11090*663afb9bSAndroid Build Coastguard Worker # Otherwise fall back on heuristic. 11091*663afb9bSAndroid Build Coastguard Worker tdlname=../bin/$dlname 11092*663afb9bSAndroid Build Coastguard Worker fi 11093*663afb9bSAndroid Build Coastguard Worker ;; 11094*663afb9bSAndroid Build Coastguard Worker esac 11095*663afb9bSAndroid Build Coastguard Worker $ECHO > $output "\ 11096*663afb9bSAndroid Build Coastguard Worker# $outputname - a libtool library file 11097*663afb9bSAndroid Build Coastguard Worker# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 11098*663afb9bSAndroid Build Coastguard Worker# 11099*663afb9bSAndroid Build Coastguard Worker# Please DO NOT delete this file! 11100*663afb9bSAndroid Build Coastguard Worker# It is necessary for linking the library. 11101*663afb9bSAndroid Build Coastguard Worker 11102*663afb9bSAndroid Build Coastguard Worker# The name that we can dlopen(3). 11103*663afb9bSAndroid Build Coastguard Workerdlname='$tdlname' 11104*663afb9bSAndroid Build Coastguard Worker 11105*663afb9bSAndroid Build Coastguard Worker# Names of this library. 11106*663afb9bSAndroid Build Coastguard Workerlibrary_names='$library_names' 11107*663afb9bSAndroid Build Coastguard Worker 11108*663afb9bSAndroid Build Coastguard Worker# The name of the static archive. 11109*663afb9bSAndroid Build Coastguard Workerold_library='$old_library' 11110*663afb9bSAndroid Build Coastguard Worker 11111*663afb9bSAndroid Build Coastguard Worker# Linker flags that cannot go in dependency_libs. 11112*663afb9bSAndroid Build Coastguard Workerinherited_linker_flags='$new_inherited_linker_flags' 11113*663afb9bSAndroid Build Coastguard Worker 11114*663afb9bSAndroid Build Coastguard Worker# Libraries that this one depends upon. 11115*663afb9bSAndroid Build Coastguard Workerdependency_libs='$dependency_libs' 11116*663afb9bSAndroid Build Coastguard Worker 11117*663afb9bSAndroid Build Coastguard Worker# Names of additional weak libraries provided by this library 11118*663afb9bSAndroid Build Coastguard Workerweak_library_names='$weak_libs' 11119*663afb9bSAndroid Build Coastguard Worker 11120*663afb9bSAndroid Build Coastguard Worker# Version information for $libname. 11121*663afb9bSAndroid Build Coastguard Workercurrent=$current 11122*663afb9bSAndroid Build Coastguard Workerage=$age 11123*663afb9bSAndroid Build Coastguard Workerrevision=$revision 11124*663afb9bSAndroid Build Coastguard Worker 11125*663afb9bSAndroid Build Coastguard Worker# Is this an already installed library? 11126*663afb9bSAndroid Build Coastguard Workerinstalled=$installed 11127*663afb9bSAndroid Build Coastguard Worker 11128*663afb9bSAndroid Build Coastguard Worker# Should we warn about portability when linking against -modules? 11129*663afb9bSAndroid Build Coastguard Workershouldnotlink=$module 11130*663afb9bSAndroid Build Coastguard Worker 11131*663afb9bSAndroid Build Coastguard Worker# Files to dlopen/dlpreopen 11132*663afb9bSAndroid Build Coastguard Workerdlopen='$dlfiles' 11133*663afb9bSAndroid Build Coastguard Workerdlpreopen='$dlprefiles' 11134*663afb9bSAndroid Build Coastguard Worker 11135*663afb9bSAndroid Build Coastguard Worker# Directory that this library needs to be installed in: 11136*663afb9bSAndroid Build Coastguard Workerlibdir='$install_libdir'" 11137*663afb9bSAndroid Build Coastguard Worker if test no,yes = "$installed,$need_relink"; then 11138*663afb9bSAndroid Build Coastguard Worker $ECHO >> $output "\ 11139*663afb9bSAndroid Build Coastguard Workerrelink_command=\"$relink_command\"" 11140*663afb9bSAndroid Build Coastguard Worker fi 11141*663afb9bSAndroid Build Coastguard Worker done 11142*663afb9bSAndroid Build Coastguard Worker } 11143*663afb9bSAndroid Build Coastguard Worker 11144*663afb9bSAndroid Build Coastguard Worker # Do a symbolic link so that the libtool archive can be found in 11145*663afb9bSAndroid Build Coastguard Worker # LD_LIBRARY_PATH before the program is installed. 11146*663afb9bSAndroid Build Coastguard Worker func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 11147*663afb9bSAndroid Build Coastguard Worker ;; 11148*663afb9bSAndroid Build Coastguard Worker esac 11149*663afb9bSAndroid Build Coastguard Worker exit $EXIT_SUCCESS 11150*663afb9bSAndroid Build Coastguard Worker} 11151*663afb9bSAndroid Build Coastguard Worker 11152*663afb9bSAndroid Build Coastguard Workerif test link = "$opt_mode" || test relink = "$opt_mode"; then 11153*663afb9bSAndroid Build Coastguard Worker func_mode_link ${1+"$@"} 11154*663afb9bSAndroid Build Coastguard Workerfi 11155*663afb9bSAndroid Build Coastguard Worker 11156*663afb9bSAndroid Build Coastguard Worker 11157*663afb9bSAndroid Build Coastguard Worker# func_mode_uninstall arg... 11158*663afb9bSAndroid Build Coastguard Workerfunc_mode_uninstall () 11159*663afb9bSAndroid Build Coastguard Worker{ 11160*663afb9bSAndroid Build Coastguard Worker $debug_cmd 11161*663afb9bSAndroid Build Coastguard Worker 11162*663afb9bSAndroid Build Coastguard Worker RM=$nonopt 11163*663afb9bSAndroid Build Coastguard Worker files= 11164*663afb9bSAndroid Build Coastguard Worker rmforce=false 11165*663afb9bSAndroid Build Coastguard Worker exit_status=0 11166*663afb9bSAndroid Build Coastguard Worker 11167*663afb9bSAndroid Build Coastguard Worker # This variable tells wrapper scripts just to set variables rather 11168*663afb9bSAndroid Build Coastguard Worker # than running their programs. 11169*663afb9bSAndroid Build Coastguard Worker libtool_install_magic=$magic 11170*663afb9bSAndroid Build Coastguard Worker 11171*663afb9bSAndroid Build Coastguard Worker for arg 11172*663afb9bSAndroid Build Coastguard Worker do 11173*663afb9bSAndroid Build Coastguard Worker case $arg in 11174*663afb9bSAndroid Build Coastguard Worker -f) func_append RM " $arg"; rmforce=: ;; 11175*663afb9bSAndroid Build Coastguard Worker -*) func_append RM " $arg" ;; 11176*663afb9bSAndroid Build Coastguard Worker *) func_append files " $arg" ;; 11177*663afb9bSAndroid Build Coastguard Worker esac 11178*663afb9bSAndroid Build Coastguard Worker done 11179*663afb9bSAndroid Build Coastguard Worker 11180*663afb9bSAndroid Build Coastguard Worker test -z "$RM" && \ 11181*663afb9bSAndroid Build Coastguard Worker func_fatal_help "you must specify an RM program" 11182*663afb9bSAndroid Build Coastguard Worker 11183*663afb9bSAndroid Build Coastguard Worker rmdirs= 11184*663afb9bSAndroid Build Coastguard Worker 11185*663afb9bSAndroid Build Coastguard Worker for file in $files; do 11186*663afb9bSAndroid Build Coastguard Worker func_dirname "$file" "" "." 11187*663afb9bSAndroid Build Coastguard Worker dir=$func_dirname_result 11188*663afb9bSAndroid Build Coastguard Worker if test . = "$dir"; then 11189*663afb9bSAndroid Build Coastguard Worker odir=$objdir 11190*663afb9bSAndroid Build Coastguard Worker else 11191*663afb9bSAndroid Build Coastguard Worker odir=$dir/$objdir 11192*663afb9bSAndroid Build Coastguard Worker fi 11193*663afb9bSAndroid Build Coastguard Worker func_basename "$file" 11194*663afb9bSAndroid Build Coastguard Worker name=$func_basename_result 11195*663afb9bSAndroid Build Coastguard Worker test uninstall = "$opt_mode" && odir=$dir 11196*663afb9bSAndroid Build Coastguard Worker 11197*663afb9bSAndroid Build Coastguard Worker # Remember odir for removal later, being careful to avoid duplicates 11198*663afb9bSAndroid Build Coastguard Worker if test clean = "$opt_mode"; then 11199*663afb9bSAndroid Build Coastguard Worker case " $rmdirs " in 11200*663afb9bSAndroid Build Coastguard Worker *" $odir "*) ;; 11201*663afb9bSAndroid Build Coastguard Worker *) func_append rmdirs " $odir" ;; 11202*663afb9bSAndroid Build Coastguard Worker esac 11203*663afb9bSAndroid Build Coastguard Worker fi 11204*663afb9bSAndroid Build Coastguard Worker 11205*663afb9bSAndroid Build Coastguard Worker # Don't error if the file doesn't exist and rm -f was used. 11206*663afb9bSAndroid Build Coastguard Worker if { test -L "$file"; } >/dev/null 2>&1 || 11207*663afb9bSAndroid Build Coastguard Worker { test -h "$file"; } >/dev/null 2>&1 || 11208*663afb9bSAndroid Build Coastguard Worker test -f "$file"; then 11209*663afb9bSAndroid Build Coastguard Worker : 11210*663afb9bSAndroid Build Coastguard Worker elif test -d "$file"; then 11211*663afb9bSAndroid Build Coastguard Worker exit_status=1 11212*663afb9bSAndroid Build Coastguard Worker continue 11213*663afb9bSAndroid Build Coastguard Worker elif $rmforce; then 11214*663afb9bSAndroid Build Coastguard Worker continue 11215*663afb9bSAndroid Build Coastguard Worker fi 11216*663afb9bSAndroid Build Coastguard Worker 11217*663afb9bSAndroid Build Coastguard Worker rmfiles=$file 11218*663afb9bSAndroid Build Coastguard Worker 11219*663afb9bSAndroid Build Coastguard Worker case $name in 11220*663afb9bSAndroid Build Coastguard Worker *.la) 11221*663afb9bSAndroid Build Coastguard Worker # Possibly a libtool archive, so verify it. 11222*663afb9bSAndroid Build Coastguard Worker if func_lalib_p "$file"; then 11223*663afb9bSAndroid Build Coastguard Worker func_source $dir/$name 11224*663afb9bSAndroid Build Coastguard Worker 11225*663afb9bSAndroid Build Coastguard Worker # Delete the libtool libraries and symlinks. 11226*663afb9bSAndroid Build Coastguard Worker for n in $library_names; do 11227*663afb9bSAndroid Build Coastguard Worker func_append rmfiles " $odir/$n" 11228*663afb9bSAndroid Build Coastguard Worker done 11229*663afb9bSAndroid Build Coastguard Worker test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11230*663afb9bSAndroid Build Coastguard Worker 11231*663afb9bSAndroid Build Coastguard Worker case $opt_mode in 11232*663afb9bSAndroid Build Coastguard Worker clean) 11233*663afb9bSAndroid Build Coastguard Worker case " $library_names " in 11234*663afb9bSAndroid Build Coastguard Worker *" $dlname "*) ;; 11235*663afb9bSAndroid Build Coastguard Worker *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11236*663afb9bSAndroid Build Coastguard Worker esac 11237*663afb9bSAndroid Build Coastguard Worker test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11238*663afb9bSAndroid Build Coastguard Worker ;; 11239*663afb9bSAndroid Build Coastguard Worker uninstall) 11240*663afb9bSAndroid Build Coastguard Worker if test -n "$library_names"; then 11241*663afb9bSAndroid Build Coastguard Worker # Do each command in the postuninstall commands. 11242*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11243*663afb9bSAndroid Build Coastguard Worker fi 11244*663afb9bSAndroid Build Coastguard Worker 11245*663afb9bSAndroid Build Coastguard Worker if test -n "$old_library"; then 11246*663afb9bSAndroid Build Coastguard Worker # Do each command in the old_postuninstall commands. 11247*663afb9bSAndroid Build Coastguard Worker func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11248*663afb9bSAndroid Build Coastguard Worker fi 11249*663afb9bSAndroid Build Coastguard Worker # FIXME: should reinstall the best remaining shared library. 11250*663afb9bSAndroid Build Coastguard Worker ;; 11251*663afb9bSAndroid Build Coastguard Worker esac 11252*663afb9bSAndroid Build Coastguard Worker fi 11253*663afb9bSAndroid Build Coastguard Worker ;; 11254*663afb9bSAndroid Build Coastguard Worker 11255*663afb9bSAndroid Build Coastguard Worker *.lo) 11256*663afb9bSAndroid Build Coastguard Worker # Possibly a libtool object, so verify it. 11257*663afb9bSAndroid Build Coastguard Worker if func_lalib_p "$file"; then 11258*663afb9bSAndroid Build Coastguard Worker 11259*663afb9bSAndroid Build Coastguard Worker # Read the .lo file 11260*663afb9bSAndroid Build Coastguard Worker func_source $dir/$name 11261*663afb9bSAndroid Build Coastguard Worker 11262*663afb9bSAndroid Build Coastguard Worker # Add PIC object to the list of files to remove. 11263*663afb9bSAndroid Build Coastguard Worker if test -n "$pic_object" && test none != "$pic_object"; then 11264*663afb9bSAndroid Build Coastguard Worker func_append rmfiles " $dir/$pic_object" 11265*663afb9bSAndroid Build Coastguard Worker fi 11266*663afb9bSAndroid Build Coastguard Worker 11267*663afb9bSAndroid Build Coastguard Worker # Add non-PIC object to the list of files to remove. 11268*663afb9bSAndroid Build Coastguard Worker if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11269*663afb9bSAndroid Build Coastguard Worker func_append rmfiles " $dir/$non_pic_object" 11270*663afb9bSAndroid Build Coastguard Worker fi 11271*663afb9bSAndroid Build Coastguard Worker fi 11272*663afb9bSAndroid Build Coastguard Worker ;; 11273*663afb9bSAndroid Build Coastguard Worker 11274*663afb9bSAndroid Build Coastguard Worker *) 11275*663afb9bSAndroid Build Coastguard Worker if test clean = "$opt_mode"; then 11276*663afb9bSAndroid Build Coastguard Worker noexename=$name 11277*663afb9bSAndroid Build Coastguard Worker case $file in 11278*663afb9bSAndroid Build Coastguard Worker *.exe) 11279*663afb9bSAndroid Build Coastguard Worker func_stripname '' '.exe' "$file" 11280*663afb9bSAndroid Build Coastguard Worker file=$func_stripname_result 11281*663afb9bSAndroid Build Coastguard Worker func_stripname '' '.exe' "$name" 11282*663afb9bSAndroid Build Coastguard Worker noexename=$func_stripname_result 11283*663afb9bSAndroid Build Coastguard Worker # $file with .exe has already been added to rmfiles, 11284*663afb9bSAndroid Build Coastguard Worker # add $file without .exe 11285*663afb9bSAndroid Build Coastguard Worker func_append rmfiles " $file" 11286*663afb9bSAndroid Build Coastguard Worker ;; 11287*663afb9bSAndroid Build Coastguard Worker esac 11288*663afb9bSAndroid Build Coastguard Worker # Do a test to see if this is a libtool program. 11289*663afb9bSAndroid Build Coastguard Worker if func_ltwrapper_p "$file"; then 11290*663afb9bSAndroid Build Coastguard Worker if func_ltwrapper_executable_p "$file"; then 11291*663afb9bSAndroid Build Coastguard Worker func_ltwrapper_scriptname "$file" 11292*663afb9bSAndroid Build Coastguard Worker relink_command= 11293*663afb9bSAndroid Build Coastguard Worker func_source $func_ltwrapper_scriptname_result 11294*663afb9bSAndroid Build Coastguard Worker func_append rmfiles " $func_ltwrapper_scriptname_result" 11295*663afb9bSAndroid Build Coastguard Worker else 11296*663afb9bSAndroid Build Coastguard Worker relink_command= 11297*663afb9bSAndroid Build Coastguard Worker func_source $dir/$noexename 11298*663afb9bSAndroid Build Coastguard Worker fi 11299*663afb9bSAndroid Build Coastguard Worker 11300*663afb9bSAndroid Build Coastguard Worker # note $name still contains .exe if it was in $file originally 11301*663afb9bSAndroid Build Coastguard Worker # as does the version of $file that was added into $rmfiles 11302*663afb9bSAndroid Build Coastguard Worker func_append rmfiles " $odir/$name $odir/${name}S.$objext" 11303*663afb9bSAndroid Build Coastguard Worker if test yes = "$fast_install" && test -n "$relink_command"; then 11304*663afb9bSAndroid Build Coastguard Worker func_append rmfiles " $odir/lt-$name" 11305*663afb9bSAndroid Build Coastguard Worker fi 11306*663afb9bSAndroid Build Coastguard Worker if test "X$noexename" != "X$name"; then 11307*663afb9bSAndroid Build Coastguard Worker func_append rmfiles " $odir/lt-$noexename.c" 11308*663afb9bSAndroid Build Coastguard Worker fi 11309*663afb9bSAndroid Build Coastguard Worker fi 11310*663afb9bSAndroid Build Coastguard Worker fi 11311*663afb9bSAndroid Build Coastguard Worker ;; 11312*663afb9bSAndroid Build Coastguard Worker esac 11313*663afb9bSAndroid Build Coastguard Worker func_show_eval "$RM $rmfiles" 'exit_status=1' 11314*663afb9bSAndroid Build Coastguard Worker done 11315*663afb9bSAndroid Build Coastguard Worker 11316*663afb9bSAndroid Build Coastguard Worker # Try to remove the $objdir's in the directories where we deleted files 11317*663afb9bSAndroid Build Coastguard Worker for dir in $rmdirs; do 11318*663afb9bSAndroid Build Coastguard Worker if test -d "$dir"; then 11319*663afb9bSAndroid Build Coastguard Worker func_show_eval "rmdir $dir >/dev/null 2>&1" 11320*663afb9bSAndroid Build Coastguard Worker fi 11321*663afb9bSAndroid Build Coastguard Worker done 11322*663afb9bSAndroid Build Coastguard Worker 11323*663afb9bSAndroid Build Coastguard Worker exit $exit_status 11324*663afb9bSAndroid Build Coastguard Worker} 11325*663afb9bSAndroid Build Coastguard Worker 11326*663afb9bSAndroid Build Coastguard Workerif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 11327*663afb9bSAndroid Build Coastguard Worker func_mode_uninstall ${1+"$@"} 11328*663afb9bSAndroid Build Coastguard Workerfi 11329*663afb9bSAndroid Build Coastguard Worker 11330*663afb9bSAndroid Build Coastguard Workertest -z "$opt_mode" && { 11331*663afb9bSAndroid Build Coastguard Worker help=$generic_help 11332*663afb9bSAndroid Build Coastguard Worker func_fatal_help "you must specify a MODE" 11333*663afb9bSAndroid Build Coastguard Worker} 11334*663afb9bSAndroid Build Coastguard Worker 11335*663afb9bSAndroid Build Coastguard Workertest -z "$exec_cmd" && \ 11336*663afb9bSAndroid Build Coastguard Worker func_fatal_help "invalid operation mode '$opt_mode'" 11337*663afb9bSAndroid Build Coastguard Worker 11338*663afb9bSAndroid Build Coastguard Workerif test -n "$exec_cmd"; then 11339*663afb9bSAndroid Build Coastguard Worker eval exec "$exec_cmd" 11340*663afb9bSAndroid Build Coastguard Worker exit $EXIT_FAILURE 11341*663afb9bSAndroid Build Coastguard Workerfi 11342*663afb9bSAndroid Build Coastguard Worker 11343*663afb9bSAndroid Build Coastguard Workerexit $exit_status 11344*663afb9bSAndroid Build Coastguard Worker 11345*663afb9bSAndroid Build Coastguard Worker 11346*663afb9bSAndroid Build Coastguard Worker# The TAGs below are defined such that we never get into a situation 11347*663afb9bSAndroid Build Coastguard Worker# where we disable both kinds of libraries. Given conflicting 11348*663afb9bSAndroid Build Coastguard Worker# choices, we go for a static library, that is the most portable, 11349*663afb9bSAndroid Build Coastguard Worker# since we can't tell whether shared libraries were disabled because 11350*663afb9bSAndroid Build Coastguard Worker# the user asked for that or because the platform doesn't support 11351*663afb9bSAndroid Build Coastguard Worker# them. This is particularly important on AIX, because we don't 11352*663afb9bSAndroid Build Coastguard Worker# support having both static and shared libraries enabled at the same 11353*663afb9bSAndroid Build Coastguard Worker# time on that platform, so we default to a shared-only configuration. 11354*663afb9bSAndroid Build Coastguard Worker# If a disable-shared tag is given, we'll fallback to a static-only 11355*663afb9bSAndroid Build Coastguard Worker# configuration. But we'll never go from static-only to shared-only. 11356*663afb9bSAndroid Build Coastguard Worker 11357*663afb9bSAndroid Build Coastguard Worker# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11358*663afb9bSAndroid Build Coastguard Workerbuild_libtool_libs=no 11359*663afb9bSAndroid Build Coastguard Workerbuild_old_libs=yes 11360*663afb9bSAndroid Build Coastguard Worker# ### END LIBTOOL TAG CONFIG: disable-shared 11361*663afb9bSAndroid Build Coastguard Worker 11362*663afb9bSAndroid Build Coastguard Worker# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11363*663afb9bSAndroid Build Coastguard Workerbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11364*663afb9bSAndroid Build Coastguard Worker# ### END LIBTOOL TAG CONFIG: disable-static 11365*663afb9bSAndroid Build Coastguard Worker 11366*663afb9bSAndroid Build Coastguard Worker# Local Variables: 11367*663afb9bSAndroid Build Coastguard Worker# mode:shell-script 11368*663afb9bSAndroid Build Coastguard Worker# sh-indentation:2 11369*663afb9bSAndroid Build Coastguard Worker# End: 11370